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

ops/2024/9/24 16:28:39/

文章目录

  • 前言
  • 一、问题 1 及解决方法
    • 1、问题 1 描述
    • 2、问题 1 解决方法
  • 二、问题 2 及解决方法
    • 1、问题 2 描述
    • 2、问题 2 解决方法
  • 三、问题 3 及解决方法
    • 1、问题 3 描述
    • 2、问题 3 解决方法
  • 四、问题 4 及解决方法
    • 1、问题 4 描述
    • 2、问题 4 解决方法


前言

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- menuconfiglinux 内核进行裁剪时报错 fatal error: curses.h: 没有那个文件或目录

[imx6ull-sbc]:~/workspace/6ull/imx6ull-sbc/src/imx6ull-linux-4.1.15> make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfigHOSTCC  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,欢迎交流!



http://www.ppmy.cn/ops/36850.html

相关文章

重学SpringBoot3-SPI机制

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-SPI机制 什么是 SPI&#xff1f;Spring Boot 中的 SPI 机制spring.factories 文件自动配置的实现启动流程中的作用 SPI实际应用步骤 1: 新建模块步骤 2:…

网络知识点之—QoS

QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;指一个网络能够利用各种基础技术&#xff0c;为指定的网络通信提供更好的服务能力&#xff0c;是网络的一种安全机制&#xff0c; 是用来解决网络延迟和阻塞等问题的一种技术。QoS的保证对于容量有限的网络来…

Linux内核--设备驱动(七)媒体驱动框架整理--HDMI框架(2)

目录 一、引言 二、drm框架 ------>2.1、画布( FrameBuffer ) ------>2.2、绘图现场(CRTC) ------>2.3、输出转换器(Encoder ) ------>2.4、连接器 (Connector ) ------>2.5、显示面(Planner) 三、VOP部分详解 ------>3.1、dts ------>3.2、v…

最新版Ceph( Reef版本)块存储简单对接k8s

当前ceph 你的ceph集群上执行 1.创建名为k8s-rbd 的存储池 ceph osd pool create k8s-rbd 64 642.初始化 rbd pool init k8s-rbd3 创建k8s访问块设备的认证用户 ceph auth get-or-create client.kubernetes mon profile rbd osd profile rbd pool=k8s-rbd部署 ceph-rbd-csi …

AI技术赋能下的视频监控方案是如何解决新能源汽车充电难问题的?

一、方案背景 刚刚结束的第十八届北京车展异常火爆&#xff0c;其中一组与汽车有关的数字让人格外关注。根据乘联会2024年4月19日公布的最新数据&#xff0c;全国乘用车市场零售达到51.6万辆&#xff0c;其中新能源车的销量约为26万辆&#xff0c;市场渗透率达到50.39%。 这意味…

关于执行CLAM的代码的一些需要记录的点

文章链接&#xff1a;[2004.09666] Data Efficient and Weakly Supervised Computational Pathology on Whole Slide Images (arxiv.org) 代码链接&#xff1a;GitHub - mahmoodlab/CLAM: Data-efficient and weakly supervised computational pathology on whole slide images…

leetcode40-Combination Sum II

题目 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 示例 1: 输入: candidates [10,1,2,7,…

Python爬虫教程:入门爬取网页数据

1.遵守法律法规 爬虫在获取网页数据时&#xff0c;需要遵守以下几点&#xff0c;以确保不违反法律法规&#xff1a; 不得侵犯网站的知识产权&#xff1a;爬虫不得未经授权&#xff0c;获取和复制网站的内容&#xff0c;这包括文本、图片、音频、视频等。 不得违反网站的使用条…