如何为英伟达TX2编译内核和设备树_tx2 内核编译-程序员宅基地

技术标签: 编译内核  dtb  英伟达  TX2  设备树  

在编译内核和设备树之前,首先默认已经安装了JetPack,如果没有安装,请参考其它资料进行安装。

1、首先需要下载编译内核需要用到的工具链,通过下面的链接下载。

https://developer.nvidia.com/embedded/dlc/l4t-gcc-toolchain-64-bit-28-2-ga

2、安装工具链,通过下面的命令来安装工具链。

sudo mkdir /opt/l4t-gcc-toolchain-64-bit-28-2.1
sudo chown $USER:$USER /opt/l4t-gcc-toolchain-64-bit-28-2.1
cd /opt/l4t-gcc-toolchain-64-bit-28-2.1

首先在文件系统的opt文件夹下创建一个l4t-gcc-toolchain-64-bit-28-2.1文件夹,接下来设置文件夹的拥有者,其中$USER为你的用户名。然后进入到l4t-gcc-toolchain-64-bit-28-2.1文件夹下。

    然后通过下面的命令将下载的工具链复制到l4t-gcc-toolchain-64-bit-28-2.1文件夹下

mv ~/Downloads/gcc-4.8.5-aarch64.tgz ./

并用下面的命令解压工具链。

tar -xvf gcc-4.8.5-aarch64.tgz

3、下载内核源码,通过下面的链接下载。

https://developer.nvidia.com/embedded/dlc/sources-r2821#Getting_kernel

然后执行下面的命令。

tar -xf public_sources.tbz2
cd public_release/
cp kernel_src.tbz2 $HOME/JetPack-L4T-3.2.1/64_TX2/Linux_for_Tegra/sources
cd $HOME/JetPack-L4T-3.2.1/64_TX2/Linux_for_Tegra/sources
tar -xf kernel_src.tbz2

首先解压public_sources.tbz2,之后将kernel_src.tbz2复制到sources文件夹下,并解压kernel_src.tbz2,其中$HOME为JetPack的安装目录。

 

4、接下来就进入内核与设备树编译的主题,执行下面的命令。

export DEVDIR=$HOME/JetPack-L4T-3.2.1/64_TX2/Linux_for_Tegra
mkdir -p $DEVDIR/images/modules 
mkdir -p $DEVDIR/images/packages
mkdir -p $DEVDIR/images/dtb
export CROSS_COMPILE=/opt/l4t-gcc-toolchain-64-bit-28-2.1/install/bin/aarch64-unknown-linux-gnu-
export KERNEL_MODULES_OUT=$DEVDIR/images/modules
export TEGRA_KERNEL_OUT=$DEVDIR/images
export ARCH=arm64

其中export命令用来定义环境变量。上面的操作主要用来配置交叉编译环境。

之后通过下面的命令清楚内核和配置

cd $DEVDIR/sources/kernel/kernel-4.4
make mrproper

接下来需要配置你的内核,执行下面的命令。

make O=$TEGRA_KERNEL_OUT tegra18_defconfig
make O=$TEGRA_KERNEL_OUT menuconfig

这两条命令会设置默认的配置,并打开一个设置菜单,你可以改变设置,如果不需要修改则直接退出。

注意:你需要使用ncurses才能使用上面的命令。如果有任何问题,请安装以下软件包。

sudo apt-get install libncurses5 libncurses5-dev

5、下面就是编译内核、设备树和模块,只想下面的命令。

make O=$TEGRA_KERNEL_OUT zImage
make O=$TEGRA_KERNEL_OUT dtbs
make O=$TEGRA_KERNEL_OUT modules
make O=$TEGRA_KERNEL_OUT modules_install INSTALL_MOD_PATH=$KERNEL_MODULES_OUT

执行完上面的命令之后,内核的镜像在下面的文件夹下

$DEVDIR/images/arch/arm64/boot/Image

设备树在下面的文件夹下

$DEVDIR/images/arch/arm64/boot/dts/*.dtb

6、这一步需要创建JetPack需要的kernel_supplements.tbz2压缩包

首先执行下面的命令。

cd $DEVDIR/images/modules/lib/modules/
ls .

接下来定义下面的变量。

export KERNEL_MODULES_NAME=4.4.38+

然后执行下面的命令

cd $DEVDIR/images/modules/lib/modules/$KERNEL_MODULES_NAME
rm build source

最后创建压缩包

cd $DEVDIR/images/modules/
tar -cjf kernel_supplements.tbz2 *
mv kernel_supplements.tbz2 $DEVDIR/images/packages

7、除了上面的操作,还需要创建一个kernel_headers.tbz2文件,执行下面的命令

cd $DEVDIR/kernel
tar -xf kernel_headers.tbz2

然后查找头文件夹的名字,如下

ls | grep linux-headers
linux-headers-4.4.38-tegra

定义变量

export KERNEL_HEADERS_NAME=linux-headers-4.4.38-tegra

重定义文件夹

mv $KERNEL_HEADERS_NAME linux-headers-$KERNEL_MODULES_NAME
tar -cjf kernel_headers_custom.tbz2 linux-headers-$KERNEL_MODULES_NAME
mv kernel_headers_custom.tbz2 $DEVDIR/images/packages
rm -rf linux-headers-$KERNEL_MODULES_NAME

8、创建JetPack中文件的备份。

mkdir -p $DEVDIR/images/packages-backup cp -rf $DEVDIR/kernel/* $DEVDIR/images/packages-backup

9、复制设备树文件

cp $DEVDIR/images/arch/arm64/boot/dts/tegra186-quill-p3310-1000-c03-00-base.dtb $DEVDIR/kernel/dtb

10、覆盖掉JetPack中默认的镜像文件

cd $DEVDIR/images
cp -rf arch/arm64/boot/Image arch/arm64/boot/zImage packages/kernel_supplements.tbz2 $DEVDIR/kernel/
cp -rf packages/kernel_headers_custom.tbz2 $DEVDIR/kernel/kernel_headers.tbz2

11、执行applybinaries脚本来生成用来烧写的镜像文件

cd $DEVDIR/
sudo ./apply_binaries.sh

12、经过上面的步骤就编译生成了内核、模块和设备树的文件,下面就是向TX2烧写的过程了。

a. 首先进入recovery模式。

b. 复制dtb文件从Linux_for_Tegra/images/arch/arm64/boot/dts 文件夹到 Linux_for_Tegra/kernel/dtb文件夹。

c. 复制Linux_for_Tegra/images/arch/arm64/boot/ 文件夹下的ImagezImage Linux_for_Tegra/kernel 文件夹。

d. 复制模块从Linux_for_Tegra/images/modules/lib/modules/4.4.38文件夹到Linux_for_Tegra/rootfs/lib/modules/4.4.38 文件夹。

e. 进入$DEVDIR文件夹,并执行下面的命令。

sudo ./flash.sh -r -d kernel/dtb/tegra186-quill-p3310-1000-c03-00-base.dtb -K kernel/Image jetson-tx2 mmcblk0p1

f. 执行下面的命令来安装dtb文件。

cd $DEVDIR
sudo ./flash.sh -r -k kernel-dtb jetson-tx2 mmcblk1p1

至此,我们完成了TX2上内核、模块和DTB的更新,重启TX2就行了。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bhniunan/article/details/88604331

智能推荐

【Android】Retrofit入门详解-程序员宅基地

文章浏览阅读1.6k次,点赞23次,收藏2次。简介:大三学生党一枚!主攻Android开发,对于Web和后端均有了解。个人语录:取乎其上,得乎其中,取乎其中,得乎其下,以顶级态度写好一篇的博客。Retrofit入门一.Retrofit介绍二.Retrofit注解2.1 请求方法注解2.1.1 GET请求2.1.2 POST请求2.2 标记类注解2.2.1 FormUrlEncoded2.2.2 Multipart2.2.3 Streaming2.3 参数类注解2.3.1 Header和Headers2.3.2 Body2.3.3 Path2.3.4_retrofit

教你拷贝所有文件到指定文件夹_所有文件夹下文件的 拷贝怎么弄-程序员宅基地

文章浏览阅读1.9k次。在处理文件的时候,如何将文件、文件夹复制到指定文件夹之中呢?打开【文件批量改名高手】,在“文件批量管理任务”中,先点“添加文件”,将文件素材导入。选好一系列的复制选项,单击开始复制,等全部复制好了,提示“已完成XX%”然后可以任意右击一个文件夹路径,在显示出的下拉列表中,选择“打开文件夹”在“复制到的目标文件夹(目录)”中,导入文件夹,多个文件夹,一行一个。最后,即可看到文件、文件夹都复制到各个指定的文件夹之中一一显示着啦。导入后,在表格中我们就可以看到文件或文件夹的名称以及所排列的序号。..._所有文件夹下文件的 拷贝怎么弄

win10和linux双系统安装步骤(详细!)_怎么装双系统win10和linux-程序员宅基地

文章浏览阅读5k次,点赞11次,收藏42次。Windows10安装ubuntu双系统教程ubuntu分区方案_怎么装双系统win10和linux

从图的邻接表表示转换成邻接矩阵表示_typedef struct arcnode{int adjvex;-程序员宅基地

文章浏览阅读1.1k次。从图的邻接表表示转换成邻接矩阵表示typedef struct ArcNode{ int adjvex;//该弧指向的顶点的位置 struct ArcNode *next;//下一条弧的指针 int weight;//弧的权重} ArcNode;typedef struct{ VertexType data;//顶点信息 ArcNode *firstarc;} VNode,AdList[MAXSIZE];typedef struct{ int vexnum;//顶点数 int _typedef struct arcnode{int adjvex;

学好Python开发你一定会用到这30框架种(1)-程序员宅基地

文章浏览阅读635次,点赞18次,收藏26次。14、fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括命令执行,文件上传,下载及完整执行日志输出等功能。7、pycurl 是一个用C语言写的libcurl Python实现,功能强大,支持的协议有:FTP,HTTP,HTTPS,TELNET等,可以理解为Linux下curl命令功能的Python封装。Scipy是Python的科学计算库,对Numpy的功能进行了扩充,同时也有部分功能是重合的。

Ubuntu中anaconda图形化界面的使用_ubuntu安装anaconda后怎么运行图形化节目-程序员宅基地

文章浏览阅读4.9k次,点赞3次,收藏25次。看网上教程,跟着配置,然后装完anaconda之后,大家都继续安装pycharm,然后傻吊的以为Ubuntu下的anaconda是没有图形化界面的,只有win下面 装完anaconda之后,可以直接在jupyter下面写代码今天突然发现Ubuntu下anaconda也是有图像化界面的$ conda --version /* 查看版本 */$ conda create --name my_en..._ubuntu安装anaconda后怎么运行图形化节目

随便推点

linux x window 详解,王垠:详解Xwindow(插窗户)的工作原理-程序员宅基地

文章浏览阅读523次。该楼层疑似违规已被系统折叠隐藏此楼查看此楼(本文作者貌似是王垠,在某处扒拉出来的转载过来)Xwindow 是非常巧妙的设计,很多时候它在概念上比其它窗口系统先进,以至于经过很多年它仍然是工作站上的工业标准。许多其它窗口系统的概念都是从 Xwindow 学来的。Xwindow 可以说的东西太多了。下面只分辨一些容易混淆的概念,提出一些正确使用它的建议。分辨 X server 和 X client这..._整个插入的窗叫什么

AHAS arms调用链查询中,接口实际耗时和监听耗时差异在什么地方?_arms调用链路耗时看不懂-程序员宅基地

文章浏览阅读109次。监听耗时仅代表了 AHAS ARMS Listener(即调用链收集器)在收集并处理当前请求的调用信息时所需要的时间。它不包括网络传输、处理请求、执行操作、处理响应等其他阶段的时间,仅代表 Listener 所需的时间。通常这个时间会很短,只有几毫秒甚至更短。接口实际耗时包括了整个请求/响应周期中的所有时间,包括网络传输、处理请求、执行操作、处理响应等阶段消耗的时间。它代表了该请求在客户端发起到最终服务器响应完成所花费的总时间。_arms调用链路耗时看不懂

常见的Web应用的漏洞总结(原理、危害、防御)_web 应用中常见的漏洞及其危害有哪些-程序员宅基地

文章浏览阅读2.5k次。一、 SQL注入1.原理:SQL注入就是把SQL命令插入到Web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令。它是利用现在已有的应用程序,将SQL语句插入到数据库中执行,执行一些并非按照设计者意图的SQL语句。2.原因:根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入..._web 应用中常见的漏洞及其危害有哪些

离散数学——命题逻辑_离散数学命题逻辑-程序员宅基地

离散数学中的命题逻辑,包括命题的表示和联结词的运用,推理理论和常用的证明方法,如真值表法和直接证明法。还介绍了附加前提证明法或CP规则。

Spring Expression Language(SpEL)-程序员宅基地

文章浏览阅读8.6k次。Spring Expression Language(SpEL)spring的一种表达式。用来动态的获取,值、对象等。 样式: #{ …} 使用既定的规则放置在花括号中。式中的规则得以运行,可以反馈结果。理论上可以返回任何类型。 说说两种方式去设置SpELAnnotation注解。@Value()方便快捷。 你可以在里面方式任何符合SpEL规范的语句,并把它的返回值注..._spring expression language

ansible最大并发_通过这7种方法来最大程度地提高Ansible技能-程序员宅基地

文章浏览阅读1.7k次。ansible最大并发 Ansible是一种功能强大的无代理(但易于使用且轻巧)的自动化工具,自2012年推出以来一直稳步流行。这种流行在一定程度上是由于其简单性。 默认情况下,Ansible的最基本依赖项(Python和SSH)几乎在所有地方都可用,这使得Ansible可以轻松用于各种系统:服务器,工作站,Raspberry Pi,工业控制器,Linux容器,网络设备等。 Ansible可..._ansible 提升 高并发

推荐文章

热门文章

相关标签