自学内容网 自学内容网

BUG——IMX6ULL编译正点原子Linux内核报错

         最初编译的是正点原子改过的Linux内核,可能是版本问题,一直报错,无法成功编译。然后换成NXP官方Linux内核6.6版本,初始编译虽然也报各种错,但都是缺少库或相关工具,全部安装后就可以成功编译出镜像了(人都麻了(x_x))

        最后测来测去,发现主要原因是gcc版本不对。之所以使用NXP最新的内核版本没有问题,那是因为我的gcc编译器是14.0版本的,与NXP这个6.6版本发布时间相距不远。一般来说,要确保你下载的源码比你使用的gcc版本要新,不然容易出现不兼容的问题。

        如果你使用的是正点原子提供的linux内核源码,那么就要确保你的gcc编译器版本低于7.5,至于10.3、11.5、14都不行。确切地来说,下面这个链接里面的编译器基本可用,我用的是7.5版本的。

Linaro Releases

        下面将分为两个部分,【编译Linux内核】是正常步骤,【报错历程】是我在错误使用gcc版本时遇到的问题,只不过最后没能解决就不了了之了。

 

编译Linux内核

        在gcc编译器版本正确的情况下,初次编译

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make distclean
make imx_v7_deconfig
make -j16

# 给虚拟机分配多少处理器,就在-j后面加上多少数字,-j后面最好不要空,否则容易卡死系统崩溃

        编译之后大概率会遇到一个"yylloc"重定义的问题,解决办法很简单,在/scripts/dtc目录下,找到dtc-lexer.lex.c_shipped文件,并把里面的对应变量定义YYLTYPE yylloc;前面加上extern。详情见博客编译linux内核时multiple definition of `yylloc‘错误的解决方案

        之后再编译就不会出现任何问题了。其中正点原子build.sh脚本里说用到gcc版本是5.3,但我用上5.3后,依旧会出现这个重定义的问题,解决后就不会继续报错了。

        如果你的gcc编译版本过新,那么初次编译也会遇到这个问题,只不过解决了这个后还会出现一堆不兼容问题。

        正常情况下,编译后会产生镜像文件如zImage,如果编译最后没有产生镜像,反而是突然停下了,也没有报错提示。那么多半是因为并行编译导致,使用单核编译再试一遍(只有make,没有“-j”),这时会出现报错提示。

       

 

 报错历程

        下面是我遇到的部分报错历程,这是在gcc版本过新(14.0)的情况下测试的。总之,即便一步一步照着报错提示去查教程修改,最后也难逃无法解决的链接问题

【1】fatal error: curses.h: No such file or directory

sudo apt-get install libncurses-dev

【2】出现多重定义的问题

我采用的是

编译itop4412 uboot失败,提示multiple definition of `yylloc‘; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first_编译提示genneric-asm-offsets.h-CSDN博客

【3】出现下面报错

  LD      crypto/crypto_hash.o
  LD      crypto/cryptomgr.o
  LD      crypto/built-in.o
  LD      fs/ext4/ext4.o
  LD      fs/ext4/built-in.o
make: *** [Makefile:948: fs] Error 2

sudo apt-get install lzop

 安装上面库后,报错减少了

 LD      fs/ext4/ext4.o
 LD      fs/ext4/built-in.o
make: *** [Makefile:948: fs] Error 2

【4】单独使用配置时出现下面问题

 

sudo apt-get install flex
sudo apt-get install bison

【5】

参考博客:

【1】linux内核编译 fatal error: curses.h: 没有那个文件或目录解决办法

【2】解决Linux下交叉编译U-Boot源码时报‘multiple definition of `yylloc‘‘的错误-CSDN博客

【3】Linux驱动开发环境搭建,初次体验开发全流程(必看)_i.mx6ull编译环境是什么-CSDN博客

【5】Linux kernel 编译openssl/bio.h: No such file or directory openssl找不到


原文地址:https://blog.csdn.net/m0_74349248/article/details/142305056

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!