imx6ull配置交叉编译环境编译u-boot及linux所遇问题解决记录


前言

CoM-iMX6UL(L) 是一款兼容 i.MX6UL(L)-x(X=Y0/1/2 三个版本)的高性能、低功耗工业级核心板,主要用于各种工业级、商业级的应用控制终端数据采集和处理、智能物流数据终端、数据中继器、新能源充电桩控制器和计费系统、车载终端数据采集和处理,是 NXF的 i.MX6UL(L)系列产品的一员。

手头有一块 imx6ull-sbc 工控板正在吃灰,芯片是 MCIMX6Y2CVM85AACTAM1726,目前正好派上用场,所以搭一下环境后面用起来,但是在配置交叉环境时遇到了一些问题,花费了一些时间解决,就顺便记录了下来。

在这里插入图片描述


一、问题 1 及解决方法

1、问题 1 描述

我在配置交叉编译环境时,所需要的编译器是 arm-linux-gnueabihf-gcc,且 arm-linux-gnueabihf-gccarm-linux-gnueabihf-gcc-4.9.1 的软连接,也可以看到在 bin 目录下存在此编译器:
在这里插入图片描述
但是当我输入 arm-linux-gnueabihf-gcc -v 查看编译器版本时,出现 bash: arm-linux-gnueabihf-gcc: 没有那个文件或目录 的报错。

我接着使用 file 命令检查文件类型,这个命令会告诉您文件是二进制可执行文件、脚本还是其他类型的文件。

file arm-linux-gnueabihf-gcc-4.9.1

在这里插入图片描述
从文件信息来看,arm-linux-gnueabihf-gcc-4.9.1 是一个为 Intel 80386 架构(即x86架构)编译的 32-bit ELF 可执行文件。这个文件不是为 ARM 架构编译的交叉编译器,而是一个标准的 Linux 可执行文件,且是为较旧的 Linux 内核版本编译的。

问题在于试图在一个不兼容的系统上运行它,因为我目前系统是 64-bit 或非 x86 架构。
在这里插入图片描述
以下是解决方案:

2、问题 1 解决方法

安装 32-bit 的库来运行这个 32-bit 的程序。这里安装 ia32-libs(如果可用)或单独的 32-bit 兼容库:

sudo apt update
sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386

再次再终端执行 arm-linux-gnueabihf-gcc -v 查看编译器版本:

arm-linux-gnueabihf-gcc -v

在这里插入图片描述
问题得以解决。

二、问题 2 及解决方法

1、问题 2 描述

编译 u-boot 时报如下错误:

/home/gnep/workspace/6ull/imx6ull-sbc/tools/x86-linux-gnu/usr/gcc/arm-linux-gnueabihf/4.9.1/bin/../libexec/gcc/arm-linux-gnueabihf/4.9.1/cc1: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
make[2]: *** [scripts/Makefile.autoconf:75:include/autoconf.mk] 错误 1
make[1]: *** 没有规则可制作目标“include/config/auto.conf”,由“include/config/uboot.release” 需求。 停止。
make[1]: 离开目录“/home/gnep/workspace/6ull/imx6ull-sbc/src/imx6ull-u-boot-2016.03”
make: *** [Makefile:8:u-boot] 错误 2

遇到的错误表明在编译过程中缺少必需的共享库 libz.so.1。这个库是 Zlib 压缩库的一部分,常用于很多程序和系统工具中。下面是解决这个问题的步骤:

2、问题 2 解决方法

①、安装 Zlib 库

sudo apt install zlib1g zlib1g-dev
sudo apt-get install libz1:i386 libz-dev:i386

②、确认库是否正确安装
安装完成后,可以使用 ldconfig 命令查看库是否被系统正确识别:

sudo ldconfig -p | grep libz.so.1

这将显示系统已识别的 libz.so.1 库的路径,第二条 libz.so.1 库是 32 位版本的 zlib 库,使我们需要用到的。
在这里插入图片描述

再次重新编译

make u-boot

在这里插入图片描述
编译成功,默认的 u-boot.imx 支持 128MB 内存的 imx6ull
在这里插入图片描述

三、问题 3 及解决方法

1、问题 3 描述

在 linux 源码目录下使用 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig 对 linux 内核进行裁剪时报错 fatal error: curses.h: 没有那个文件或目录

[imx6ull-sbc]:~/workspace/6ull/imx6ull-sbc/src/imx6ull-linux-4.1.15> make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  HOSTCC  scripts/kconfig/mconf.o
<command-line>: fatal error: curses.h: 没有那个文件或目录
compilation terminated.
make[1]: *** [scripts/Makefile.host:108:scripts/kconfig/mconf.o] 错误 1
make: *** [Makefile:541:menuconfig] 错误 

遇到的错误提示 fatal error: curses.h: 没有那个文件或目录 表明您在尝试编译 Linux 内核配置界面时,系统找不到 curses.h 头文件。这个头文件通常属于 ncurses 库,它用于提供文本用户界面。

2、问题 3 解决方法

要解决这个问题,需要安装 ncurses 开发库,它包括必需的头文件和库文件。

sudo apt update
sudo apt install libncurses5-dev
sudo apt install libncurses-dev

再次在 linux 源码目录下使用 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
在这里插入图片描述
可以看到无报错且可以正常打开界面

四、问题 4 及解决方法

1、问题 4 描述

编译 linux 内核时报如下错误:

/bin/sh: 1: lzop: not found
make[3]: *** [arch/arm/boot/compressed/Makefile:180:arch/arm/boot/compressed/piggy.lzo] 错误 1
make[2]: *** [arch/arm/boot/Makefile:52:arch/arm/boot/compressed/vmlinux] 错误 2
make[1]: *** [arch/arm/Makefile:316:zImage] 错误 2
make[1]: 离开目录“/home/gnep/workspace/6ull/imx6ull-sbc/src/imx6ull-linux-4.1.15”
make: *** [Makefile:22:linux] 错误 2

这个错误信息表明您在编译过程中遇到了因为找不到 lzop 压缩工具而导致的失败。lzop 是一种使用 LZO 压缩算法的压缩工具,它常用于 Linux 内核的压缩过程。

2、问题 4 解决方法

安装 lzop

sudo apt install lzop

再次编译 linux

make linux

在这里插入图片描述
可以找到编译产物设备树文件和 zImage 文件
在这里插入图片描述


我的qq:2442391036,欢迎交流!


  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要将U-Boot 2021移植到i.MX6ULL上,需要进行以下步骤: 1. 获取U-Boot 2021源代码,并解压缩。 2. 进入U-Boot源代码目录,执行make mx6ull_config命令,生成配置文件。 3. 执行make命令编译U-Boot。 4. 将编译好的U-Boot烧录到i.MX6ULL的启动设备上,例如SD卡或eMMC。 5. 在i.MX6ULL上启动U-Boot,可以通过串口或网络连接进行调试和配置。 需要注意的是,U-Boot的移植需要根据具体的硬件平台进行调整和配置,例如时钟、存储器、网络等参数。同时,还需要根据具体的应用场景进行功能定制和优化。 ### 回答2: 如何移植uboot2021到imx6ull平台上呢?这里主要分为以下几个步骤: 1. 准备工作:获取uboot2021源码,编译工具链及imx6ull开发板。 2. 配置uboot:将uboot源码解压到本地目录,进入该目录执行make distclean命令清除旧的编译结果,接着执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_defconfig命令生成初始配置文件,该命令将生成一个.config文件,保存uboot的各种配置选项。若需要重新配置uboot,可以执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig命令,进入ncurses界面进行配置。 3. 编译uboot:执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-命令编译uboot。编译完成后会生成u-boot.bin文件及其他相关文件。 4. 烧写uboot:将编译好的u-boot.bin文件烧写到imx6ull开发板上,可以使用JTAG或SD卡等方式进行烧写操作。 5. 测试uboot:烧写完成后重启开发板,在uboot命令行模式下执行命令,如printenv、boot等,验证uboot是否能够正常工作。 在这个过程中需要注意以下几点: 1. 在配置uboot时,需要参考imx6ull开发板的硬件配置文件进行相应的配置,如串口、网卡等。 2. 在编译uboot时,需要指定交叉编译工具链的路径及前缀,例如arm-linux-gnueabihf-。 3. 在烧写uboot前,需要确保imx6ull开发板已处于烧写模式,并准备好相应的烧写工具。 总结来说,移植uboot2021到imx6ull平台上需要对uboot进行配置编译和烧写等操作,需要了解相关的硬件配置交叉编译工具链等知识,同时需要注意进行正确的操作步骤和验证步骤。 ### 回答3: imx6ull是一款基于ARM Cortex-A7架构的嵌入式处理器,它广泛应用于物联网、智能家居、医疗设备等领域。移植U-Boot可以为imx6ull的开发和应用提供更多的功能和扩展性。本文将介绍如何移植U-Boot 2021到imx6ull平台上。 移植步骤: 1. 准备工具和环境交叉编译工具、串口调试器和开发板。安装交叉编译工具,设置环境变量。 2. 下载U-Boot源码,并解压缩。 3. 选择imx6ull配置文件:从U-Boot源码中找到与imx6ull对应的配置文件,具体位置在“configs/”目录下。可以通过“make menuconfig”命令进行配置,或者手动复制对应的配置文件到“config/”目录下。 4. 编译U-Boot:执行“make”命令进行编译,输出“u-boot.bin”文件。 5. 烧录U-Boot:通过串口调试器将U-Boot烧录到开发板的Flash中。连接串口调试器,并使用命令“sudo minicom -s”打开串口设置界面。设置串口设备、波特率等参数,保存退出。使用“sudo minicom”命令即可进入串口终端,输入“Ctrl + C”进入U-Boot命令行模式。通过“mmc dev 0”和“mmc part”命令设置分区和卡设备。使用“fatls mmc 0:1”或“ext2ls mmc 0:1”查看文件系统,确认烧录地址和文件名。 6. 烧录软件:使用命令“fatload mmc 0:1 ${loadaddr} u-boot.bin”将U-Boot软件烧录到开发板中,然后通过“go ${loadaddr}”命令运行U-Boot。 注意事项: 1. 在选择配置文件时,要注意选择与开发板硬件一致的配置文件,否则可能会出现不可预知的问题。 2. 在烧录过程中,注意确认文件名和烧录地址是否正确,以免造成不可恢复的损失。 3. 在调试过程中,可以使用“printenv”命令查看环境变量,使用“setenv”命令设置和修改环境变量。 总结: 移植U-Boot需要使用交叉编译工具和串口调试器,选取开发板对应的配置文件,然后进行编译和烧录。在调试过程中要注意环境变量和文件名,避免出现不可预知的问题U-Boot为开发者提供了更多的扩展性和功能,可以大大提高开发效率和应用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

须尽欢~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值