Jetson TX1内核kernel编译与烧写
Data: 2017.09.13
Author: cjh
Theme: Jetson TX1内核kernel编译与烧写
PS :本人用的JetPack版本为3.0
1. Getting bootloader and kernel
本文内核kernel源码是通过JetPack进行安装的,如果没安装的请首先下载JetPack。
通过运行以下命令可获得源码
cd/home/$USER/JetPack-L4T-3.0/64_TX1/Linux_for_Tegra_64_tx1
./source_sync.sh
下载源码需要时间
Use: source_sync.sh [options]
Available general options are,
-h : help
-e : exit on sync error
-d DIR : root of source is DIR
默认情况下会下载所有的源码
如果用到了一个或多个以下选项,则仅下载指定的源。
-k [TAG]: Download kernel source and optionally sync to TAG
-u [TAG]: Download u-boot source and optionally sync to TAG
PS:DEVDIR为JetPack的安装目录,可用export DEVDIR = / 添加临时环境变量
cd $ DEVDIR / 64_TX1 /Linux_for_Tegra_64_tx1 / sources / kernel_source
git branch -a
git checkout l4t / l4t-r24.2
cd $ DEVDIR / 64_TX1 /Linux_for_Tegra_64_tx1 / sources / u-boot_source
git branch -a
git checkout l4t / l4t-r24.2
此时源码下载完成
2. 安装Toolchain
下载:
5.3-2016.02 for 64bits PC - 64bits ARM
5.3-2016.02 for 64bits PC - 32bits ARM
安装:
sudo mkdir /opt/linaro
sudo chmod -R 775 /opt/linaro
sudo chown -R $USER /opt/linaro
cpgcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu.tar.xz /opt/linaro
cpgcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar.xz /opt/linaro
cd /opt/linaro/
tar -xfgcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu.tar.xz
tar -xfgcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar.xz
PS:USER为当前用户
3. 内核编译
1) 指定工具链的路径:
mkdir -p $DEVDIR/images/modules
mkdir -p $DEVDIR/images/packages
export CROSS_COMPILE=/opt/linaro/gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
exportCROSS32CC=/opt/linaro/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
exportKERNEL_MODULES_OUT=$DEVDIR/images/modules
export ARCH=arm64
2) 清理内核和配置
cd$DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/sources/kernel_source/
make mrproper
PS:为避免错误
error: r7 cannot beused in asm here
error: logical not is only applied to the left hand side ofcomparison
分别修改一下代码:
目录:kernel_source/arch/arm64/kernel/vdso32/Makefile
GCOV_PROFILE := n
注释:ccflags-y := -shared -fPIC-fno-common -fno-builtin -march=armv7-a
增加:ccflags-y := -shared -fPIC-fomit-frame-pointer -fno-common -fno-builtin -march=armv7-a
ccflags-y += -nostdlib -Wl,-soname=linux-vdso32.so.1\
$(call cc-ldoption,-Wl$(comma)--hash-style=sysv)
asflags-y := -D__VDSO32__ -s
目录:kernel_source/drivers/platform/tegra/tegra21_clocks.c
static void tegra21_cpu_clk_init(struct clk*c)
{
注释: c->state = (!is_lp_cluster() ==(c->u.cpu.mode == MODE_G)) ? ON : OFF;
增加: c->state = ((!is_lp_cluster()) ==(c->u.cpu.mode == MODE_G)) ? ON : OFF;
}
static int tegra21_cpu_clk_enable(struct clk*c)
3) 配置你的内核
make tegra21_defconfig
make menuconfig
PS:错误解决
*** Unable to find thencurses libraries or the
*** required headerfiles.
*** 'make menuconfig'requires the ncurses libraries.
***
*** Install ncurses(ncurses-devel) and try again.
方法:sudo apt-get installlibncurses5-dev
4) 编译内核,设备树和模块
make zImage
make dtbs
make modules
make modules_installINSTALL_MOD_PATH=$KERNEL_MODULES_OUT
PS:错误解决
GEN config-host.h
LEX convert-dtsv0-lexer.lex.c
make[1]: flex:命令未找到
BISON dtc-parser.tab.c
make[1]: bison:命令未找到
LEX dtc-lexer.lex.c
make[1]: flex:命令未找到
CHK version_gen.h
方法:sudo apt-get install flex
sudo apt-get install bison
5) 后期准备,修改JetPack
将您的二进制文件保存在images目录中
cp arch/arm64/boot/Imagearch/arm64/boot/zImage $DEVDIR/images/
用kernel模块创建kernel_supplements.tbz2,Jetpack需要这个包
cd $DEVDIR/images/modules/lib/modules/
ls .
使用modules目录的名称定义一个变量
export KERNEL_MODULES_NAME=3.10.96+
修复内核模块目录上的符号链接
cd$DEVDIR/images/modules/lib/modules/$KERNEL_MODULES_NAME
rm build source
创建tarball
cd $DEVDIR/images/modules/
tar -cjf kernel_supplements.tbz2 *
mv kernel_supplements.tbz2$DEVDIR/images/packages
除了创建模块和内核映像之外,还需要再次创建您的kernel_headers.tbz2文件(Jetpack需要)。 默认情况下,当您修补内核代码时,您不会检查内核中的更改将为发行版本添加一个后缀(例如,检查ls $ DEVDIR / images / modules / lib / modules /)。因为这个特定的原因,你需要生成你的头文件tarball再次更改它的版本。
cd $DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/kernel
tar -xf kernel_headers.tbz2
tar -cjf kernel_headers_custom.tbz2linux-headers-$KERNEL_MODULES_NAME
mv kernel_headers_custom.tbz2$DEVDIR/images/packages
rm -rf linux-headers-$KERNEL_MODULES_NAME
PS:KERNEL_MODULES_NAME这个后缀大家见机修改
创建dtb目录
mkdir -p $DEVDIR/images/dtb
cp$DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/sources/kernel_source/arch/arm64/boot/dts/*.dtb$DEVDIR/images/dtb/
复制设备树编译器(DTC)
cp$DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/sources/kernel_source/scripts/dtc/dtc$DEVDIR/images/dtc
创建Jetpack中包含的图像和软件包的备份
mkdir -p $DEVDIR/images/packages-backup
cp -rf$DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/kernel/* $DEVDIR/images/packages-backup
最后使用自己的图像覆盖默认图像,以使用jetpack安装和引导它们
cd $ DEVDIR / images
cd $DEVDIR/images
rm -rf $DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/kernel/dtb
cp -rf Image zImagepackages/kernel_supplements.tbz2 dtb/ dtc$DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/kernel/
cp -rf packages/kernel_headers_custom.tbz2$DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/kernel/kernel_headers.tbz2
运行应用程序脚本以生成要闪存的映像
cd $DEVDIR/64_TX1/Linux_for_Tegra_64_tx1/
sudo ./apply_binaries.sh
输出:
Using rootfs directory of:/home/dsoto/devdirs/tegra/Jetpack/TX1/Linux_for_Tegra_tx1/rootfs
Extracting the NVIDIA user space componentsto /home/dsoto/devdirs/tegra/Jetpack/TX1/Linux_for_Tegra_tx1/rootfs
Extracting the BSP test tools to/home/dsoto/devdirs/tegra/Jetpack/TX1/Linux_for_Tegra_tx1/rootfs
Extracting the NVIDIA gst test applicationsto /home/dsoto/devdirs/tegra/Jetpack/TX1/Linux_for_Tegra_tx1/rootfs
Extracting the configuration files for thesupplied root filesystem to/home/dsoto/devdirs/tegra/Jetpack/TX1/Linux_for_Tegra_tx1/rootfs
Creating a symbolic link nvgstplayerpointing to nvgstplayer-0.10
Creating a symbolic link nvgstcapturepointing to nvgstcapture-0.10
Adding symlink libcuda.so -->libcuda.so.1.1 in target rootfs
Adding symlink libGL.so --> libGL.so.1in target rootfs
Adding symlink libcuda.so -->tegra/libcuda.so in target rootfs
Adding symlink libEGL.so --> libEGL.so.1in target rootfs
Extracting the firmwares and kernel modulesto /home/dsoto/devdirs/tegra/Jetpack/TX1/Linux_for_Tegra_tx1/rootfs
Extracting the kernel headers to /usr/srcin target rootfs
Installing zImage into /boot in targetrootfs
Installing Image into /boot in targetrootfs
Installing the board *.dtb files into /bootin target rootfs
Success!
6) 从新刷机,修改TX1的kernel
您可以使用Jetpack直接刷新您的图像,而不是直接使用脚本,但这需要时间(约10分钟),因为我们将需要jetpack再次生成system.img
备份你的system.img
cd$DEVDIR/64_TX1/Linux_for_Tegra_tx1/bootloader/
mv system.img.raw system.img$DEVDIR/images/packages-backup/
只需运行Jetpack作为您首次安装它:
cd $DEVDIR
./JetPack-L4T-2.1-linux-x64.run
具体操作可详见刷机教程
PS:kernel是否更改可查看串口打印信息,Jetson TX1串口调试。
Linuxversion 3.10.96-tegra (buildbrain@mobile-u64-1072) (gcc version 4.8.2 (GCC) )#1 SMP PREEMPT Wed Nov 9 19:42:57 PST 2016日期是否被修改
参考:
http://blog.csdn.net/mantis_1984/article/details/61616541
https://developer.ridgerun.com/wiki/index.php?title=Compiling_Tegra_X1_source_code
Jetson TX1内核kernel编译与烧写相关推荐
- nVIDIA Jetson TX1 内核kernel编译
一.准备工作 1.在官网下载最新的kernel源代码: https://developer.nvidia.com/embedded/downloads#?tx=$software,l4t-tx1 2. ...
- RV1126编译及烧写
文章目录 前言 一.编译内核.根文件系统及烧写 1.编译 2.烧写 二.APP编译 1.配置编译规则 总结 前言 对于第一次拿到rv1126板子还是挺陌生的,本文适合新手小白参看. 一.编译内核.根文 ...
- Uboot初次编译、烧写、启动(启动界面log简析)
目录 U-Boot 初次编译 U-Boot 烧写与启动 上述笔记第三点就是建立shell脚本实现的 第四点就是修改Makefile文件实现的,下面均有实现步骤讲解. U-Boot 初次编译 先编译体验 ...
- 嵌入式烧写Linux内核,嵌入式linux 内核和根文件系统烧写方式简介
总体来说,嵌入式Linux内核和根文件的引导与PC机差不多. 嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...
- Android实战技巧之四十:Android5.1.1源代码编译与烧写
购买Nexus手机的朋友大多是为了自己修改系统玩,再加上其较高的性价比,在开发者中还是广受欢迎的.我的5太子被我升级到了6.0预览版,玩的正嗨,舍不得换回到5.1时代了.不过鉴于距6.0源码发布还有段 ...
- Orangepi 3 全志H6 uboot的编译与烧写
Orangepi 3 全志H6 uboot的编译与烧写 使用OrangePi_SDK中shell脚本编译uboot 不使用OrangePi_SDK中shell脚本编译uboot 环境:Ubuntu18 ...
- A33_Vstar_Android_SDK开发 编译及烧写遇到的问题【汇总】
A33_Vstar_Android_SDK开发 遇到的问题 整理一下Android SDK编译及烧写的时候,遇到的问题和解决的办法 问题1 .tar.bz2文件解压命令 解决办法: .tar.gz ...
- ZynqLinux最小系统系列—— 4、Petalinux工程创建与编译以及烧写到FLASH(二)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZynqLinux最小系统系列-- 4.Petalinux工程创建与编译以及烧写到FLASH(二) 写在前面 接上一篇 烧写FLASH ...
- Android实战技巧之四十 Android5 1 1源代码编译与烧写
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 购买Ne ...
最新文章
- python 购物车代码
- 课时20:内嵌函数和闭包
- qr分解求线性方程组_梯度下降求解线性方程组算例设计
- 【转】增量式PID控制算法
- 用康托展开实现全排列(STL、itertools)
- uva10256 凸包
- 华为q1设置虚拟服务器,华为荣耀路由器怎么设置?华为路由器Q1的无线网络设置方法...
- 基于树莓派的车牌识别门禁系统(工作日记)
- 上古卷轴5:重制版窗口化运行1920*1080画面显示不全的问题解决
- 我是如何录制技术视频教程的?
- Android从当前APP跳转到其他应用
- Apollo 参考线平滑方法Fem Pos Deviation Smoother
- ffmpeg中tbr tbc tbn的含义解释
- Excel 对象模型
- 各版本的Hadoop安装包下载
- OPEN(SAP) UI5 学习入门系列之二: 最佳实践练习(下)
- Python——矩阵求逆、矩阵的转置
- 救硬盘 分区变成RAW格式 恢复 救回
- 【神奇的Turtle库】海龟在手—天下我有:这款秘制“海龟闯关”小游戏值得拥有,强烈推荐哦~
- hudi学习一(初识hudi)
热门文章
- 宏基微型计算机c650使用方法,1L小机箱能干嘛?让宏碁Veriton C650告诉你答案
- 微博第三方登录,拿捏了
- 中国涂布玻璃纸行业销售现状与竞争前景预测报告(2022-2027)
- Vue Router 路由导航
- Android透明到白色滑动渐变,Android开发之Activity全透明渐变切换方法
- stm32 arduino 读取sd卡并在lcd(jlx12864)上播放badapple
- OpenCasCade批处理简介
- MinIO未授权SSRF漏洞(CVE-2021-21287)复现
- 【个人笔记】Ubuntu分区方案
- bzoj 1017 魔兽地图DotR