nVIDIA Jetson TX1 内核kernel编译

    xiaoxiao2021-03-25  57

    一、准备工作

    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

     

     

     

    完。

    转载请注明原文地址: https://ju.6miu.com/read-33546.html

    最新回复(0)