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编译与烧写相关推荐

  1. nVIDIA Jetson TX1 内核kernel编译

    一.准备工作 1.在官网下载最新的kernel源代码: https://developer.nvidia.com/embedded/downloads#?tx=$software,l4t-tx1 2. ...

  2. RV1126编译及烧写

    文章目录 前言 一.编译内核.根文件系统及烧写 1.编译 2.烧写 二.APP编译 1.配置编译规则 总结 前言 对于第一次拿到rv1126板子还是挺陌生的,本文适合新手小白参看. 一.编译内核.根文 ...

  3. Uboot初次编译、烧写、启动(启动界面log简析)

    目录 U-Boot 初次编译 U-Boot 烧写与启动 上述笔记第三点就是建立shell脚本实现的 第四点就是修改Makefile文件实现的,下面均有实现步骤讲解. U-Boot 初次编译 先编译体验 ...

  4. 嵌入式烧写Linux内核,嵌入式linux 内核和根文件系统烧写方式简介

    总体来说,嵌入式Linux内核和根文件的引导与PC机差不多. 嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...

  5. Android实战技巧之四十:Android5.1.1源代码编译与烧写

    购买Nexus手机的朋友大多是为了自己修改系统玩,再加上其较高的性价比,在开发者中还是广受欢迎的.我的5太子被我升级到了6.0预览版,玩的正嗨,舍不得换回到5.1时代了.不过鉴于距6.0源码发布还有段 ...

  6. Orangepi 3 全志H6 uboot的编译与烧写

    Orangepi 3 全志H6 uboot的编译与烧写 使用OrangePi_SDK中shell脚本编译uboot 不使用OrangePi_SDK中shell脚本编译uboot 环境:Ubuntu18 ...

  7. A33_Vstar_Android_SDK开发 编译及烧写遇到的问题【汇总】

    A33_Vstar_Android_SDK开发 遇到的问题 整理一下Android SDK编译及烧写的时候,遇到的问题和解决的办法 问题1  .tar.bz2文件解压命令 解决办法: .tar.gz  ...

  8. ZynqLinux最小系统系列—— 4、Petalinux工程创建与编译以及烧写到FLASH(二)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZynqLinux最小系统系列-- 4.Petalinux工程创建与编译以及烧写到FLASH(二) 写在前面 接上一篇 烧写FLASH ...

  9. Android实战技巧之四十 Android5 1 1源代码编译与烧写

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 购买Ne ...

最新文章

  1. python 购物车代码
  2. 课时20:内嵌函数和闭包
  3. qr分解求线性方程组_梯度下降求解线性方程组算例设计
  4. 【转】增量式PID控制算法
  5. 用康托展开实现全排列(STL、itertools)
  6. uva10256 凸包
  7. 华为q1设置虚拟服务器,华为荣耀路由器怎么设置?华为路由器Q1的无线网络设置方法...
  8. 基于树莓派的车牌识别门禁系统(工作日记)
  9. 上古卷轴5:重制版窗口化运行1920*1080画面显示不全的问题解决
  10. 我是如何录制技术视频教程的?
  11. Android从当前APP跳转到其他应用
  12. Apollo 参考线平滑方法Fem Pos Deviation Smoother
  13. ffmpeg中tbr tbc tbn的含义解释
  14. Excel 对象模型
  15. 各版本的Hadoop安装包下载
  16. OPEN(SAP) UI5 学习入门系列之二: 最佳实践练习(下)
  17. Python——矩阵求逆、矩阵的转置
  18. 救硬盘 分区变成RAW格式 恢复 救回
  19. 【神奇的Turtle库】海龟在手—天下我有:这款秘制“海龟闯关”小游戏值得拥有,强烈推荐哦~
  20. hudi学习一(初识hudi)

热门文章

  1. 宏基微型计算机c650使用方法,1L小机箱能干嘛?让宏碁Veriton C650告诉你答案
  2. 微博第三方登录,拿捏了
  3. 中国涂布玻璃纸行业销售现状与竞争前景预测报告(2022-2027)
  4. Vue Router 路由导航
  5. Android透明到白色滑动渐变,Android开发之Activity全透明渐变切换方法
  6. stm32 arduino 读取sd卡并在lcd(jlx12864)上播放badapple
  7. OpenCasCade批处理简介
  8. MinIO未授权SSRF漏洞(CVE-2021-21287)复现
  9. 【个人笔记】Ubuntu分区方案
  10. bzoj 1017 魔兽地图DotR