1. ARM交叉编译工具链下载
arm的交叉编译工具链可以直接在官网上进行下载:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads;imx6ull开发板是32位的,因此需要下载32位的工具链,在此次移植中使用的arm-gnu-toolchain-12.3.rel1-x86_64-arm-none-linux-gnueabihf的版本的工具链。
2. Kernel源码的获取
这里直接使用的是100ask提供的修改后的源码:
git clone https://gitee.com/weidongshan/linux-imx
3. 编译Kernel
3.1 设置交叉编译工具链
export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabihf-
export PATH=$PATH:/《目录》/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin-
3.2 编译Kernel
#首先配置config
make imx_v7_defconfig
#编译
make zImage -j8
4. 从4.9版本的Kernel到5.4版本的Kernel的移植
4.1 设备树的移植
参考100ask提供的移植文档直接把4.9版本的设备树拷贝到5.4版本中
#为了防止出错可以在拷贝前进行备份
# cp arch/arm/boot/dts/imx6ull-14x14-evk.dts arch/arm/boot/dts/imx6ull-14x14-evk_back.dts
cp Linux-4.9.88/arch/arm/boot/dts/100ask_imx6ull-14x14.dts arch/arm/boot/dts/imx6ull-14x14-evk.dts
#然后
make imx_v7_defconfig
make dtbs
在编译过程中会报错:
Error: arch/arm/boot/dts/imx6ull-14x14-evk.dts:234.1-10 Label or path flexcan1 not found
原因是找不到flexcan1 的节点,查看设备树include的文件中的内容发现使用的是can1,因此只需要把节点名称改为can1即可。
4.2 配置tftp网络下载文件到DRAM
首先,要配置tftp的服务器,可以参考https://blog.csdn.net/qq_52836452/article/details/129642566,由于我的虚拟机网络连接使用的NAT的连接,需要在虚拟网络编辑器中配置tftp的端口映射关系。
#把内核和设备树文件发到tftp的目录中,进入到boot的命令行,
#1.配置设备的ip 可以通过两种方式
#1.1 手工设置的方式
setenv ipaddr 《ip地址》
#1.2 自动获取的方式
dhcp
#2.配置主机(服务器)的ip
setenv serverip 《ip地址》
#3.ping下主机的ip
只要显示 host 《ip地址》 is alive 就证明网络是通的
#4.tftp下载文件
tftp 0x80800000 zImage
tftp 0x83000000 imx6ull-14x14-evk.dtb
#5.启动内核
bootz 0x80800000 - 0x83000000
至此内核可以顺利启动了,但是会报错:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
因为没有根文件系统,没有办法挂载文件系统。
后面会进行根本文件系统的进行构建…