nVIDIA Jetson TX1 内核kernel编译

一、准备工作

1、在官网下载最新的kernel源代码

https://developer.nvidia.com/embedded/downloads#?tx=$software,l4t-tx1



2、ubuntu16.04编译环境准备:

 下载两个交叉编译器aarch64-linux-gnuarm-linux-gnueabihf,这两个编译器都是交叉编译需要使用的,在linaro官网可以下载:https://www.linaro.org/downloads/


3、解压kernel源码和交叉编译器在合适的位置:

tar -xvjf kernel_src.tbz2



二、内核编译

1Export 环境变量

$ export CROSS_COMPILE=<crossbin>

$ export CROSS32CC=<cross32bni>gcc

$ export ARCH=arm64

 

2、编译内核文件zImage

$ make mrproper

$ make tegra21_defconfig

$ make zImage

 

3、编译kernel device tree components:

$ make dtbs

 

4、编译内核modules

$ make modules


一切正常的情况下,在~/kernel/arch/arm64/boot下即可得到编译后的目标文件。但是正常的情况总是很少,一般编译过程都会遇到一些问题,接下来总结下我编译时遇到的问题和解决方法,仅供参考。


三、编译遇到问题解决

1、编译错误:提示缺少compiler-gcc6.h文件


  这是因为使用的编译器aarch64-linux-gnu6.2.1版本,也就是gcc6系列版本,查看TX1~/include/linux/下,只有gcc5以下版本文件


这个问题,在网上下载complier-gcc6.h放到~/kernel/include/linux/下即可解决问题。


2、编译错误:r7 cannot be used in asm here


这个错误网上有解决方案:

https://tls.mbed.org/kb/development/arm-thumb-error-r7-cannot-be-used-in-asm-here

https://developer.ridgerun.com/wiki/index.php?title=Compiling_Tegra_X1_source_code#Flashing_the_board

不多说,直接贴上git -diff

Index: kernel_source/arch/arm64/kernel/vdso32/Makefile

===================================================================

--- kernel_source.orig/arch/arm64/kernel/vdso32/Makefile        2016-04-08 21:28:52.651992663 -0600

+++ kernel_source/arch/arm64/kernel/vdso32/Makefile     2016-04-11 12:20:03.377388110 -0600

@@ -11,7 +11,7 @@

 

 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

3、新编译器GCC6遇到 “-Werror=misleading-indentation”


原因在gcc官网以后说明,编译器增加了许多新的特性。

具体参考:https://gcc.gnu.org/gcc-6/porting_to.html

但是源码这种东西,不建议直接改代码,所以尽量的回避。使用#pragma 来规避,在需要保护的代码段增加如下代码

 

#pragma GCC diagnostic push

#pragma GCC diagnostic ignored "-Wmisleading-indentation"双引号中包含忽略的错误

 

/* (code for which the warning is to be disabled)  */

 

#pragma GCC diagnostic pop

 

编译过程中会遇到很多这种类似问题,都是如此修改。


4、make menuconfig提示:Unable to find the ncurses libraries....


解决办法:

Sudo apt-get install libncurses5-dev

 

 

 

完。





你可能感兴趣的:(nVidia,Jetson,TX1)