Skip to content

LV055-4-19-71版本移植

一、概述

这一部分我们就开始移植内核,其实一开始的时候,主要是移植网口驱动,以便于可以直接从 tftp 加载映像,从 nfs 挂载根文件系统,方便后续的驱动学习。

二、添加自己的开发板

1. 开发板默认配置文件

1.1 添加开发板默认配置文件

shell
cp arch/arm/configs/imx_v6_v7_defconfig arch/arm/configs/imx_alpha_emmc_defconfig

1.2 修改相关文件

这个地方暂时不需要修改。

2. 设备树文件

2.1 添加设备树文件

我们主要是参考 arch/arm/boot/dts/imx6ull-14x14-evk.dts 这个文件,我们来看一下它有没有什么依赖的设备树:

image-20241103081444251

imx6ull.dtsi 这个我们不用管,共用的。我们看一下 imx6ul-14x14-evk.dtsi 还有没有,进到里面搜索一下 14x14 的关键词或者其他的,发现是没有的,所以这两个设备树我们要复制两个出来。

shell
cp arch/arm/boot/dts/imx6ull-14x14-evk.dts arch/arm/boot/dts/imx6ull-alpha-emmc.dts
cp arch/arm/boot/dts/imx6ul-14x14-evk.dtsi arch/arm/boot/dts/imx6ull-alpha-emmc.dtsi

2.2 修改相关文件

kernel 4.19.71——修改设备树相关文件 · 704d5a6 · linux-dev-org/imx6ull-kernel - Gitee.com

2.1.1 imx6ull-alpha-emmc.dts

image-20260113164911185

2.1.2 Makefile

arch/arm/boot/dts/Makefile :

image-20260113164935242

3. 重新编译

shell
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_alpha_emmc_defconfig
make V=0 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

这里可以用之前写的脚本:1.sh · 苏木/imx6ull-alpha-release - Gitee.com,脚本编译完后会把成果物拷贝到一起。编译完我们可以得到这两个文件:

image-20241102225407531

4. 启动测试

  • 拷贝到 tftp 目录
shell
cp ~/7Linux/imx6ull-kernel/image/* ~/3tftp/
  • 开发板 uboot 下载并启动
shell
tftp 80800000 zImage
tftp 83000000 imx6ull-alpha-emmc.dtb
bootz 80800000 - 83000000
  • 为了后面方便启动,这里设置一下 uboot 命令
shell
=> setenv bootcmd 'tftp 80800000 /zImage\;tftp 83000000 /imx6ull-alpha-emmc.dtb\;bootz 80800000 - 83000000'
=> setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.10.101:/home/sumu/4nfs/imx6ull_rootfs,proto=tcp rw ip=192.168.10.102:192.168.10.101:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc'
=> saveenv

能正常启动就说明没得问题了。

三、修改网络驱动

1. 驱动移植

额,我用了 NXP 提供的 4.19.71 版本的内核,上面设备树添加完后好像能直接通。

2. 网口测试

2.1 文件准备

我们这里由于还要编译内核,所以直接使用下边的命令一步到位:

shell
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

编译完成后我们将设备树和 zImage 文件拷贝到 tftp 目录下:

shell
cp arch/arm/boot/zImage ~/3tftp/imx6ull/
cp arch/arm/boot/dts/imx6ull-alpha-emmc.dtb ~/3tftp/imx6ull/

修改好设备树和 Linux 内核以后重新编译一下,得到新的 zImage 镜像文件和 imx6ull-alpha-emmc.dtb 设备树文件,使用网线将 I.MX6U-ALPHA 开发板的两个网口与路由器或者电脑连接起来,最后使用新的文件启动 Linux 内核。

2.2 bootamd 与 bootargs

uboot 的这两个参数内容如下(看后面的根文件系统构建):

shell
=> setenv bootcmd 'tftp 80800000 /zImage\;tftp 83000000 /imx6ull-alpha-emmc.dtb\;bootz 80800000 - 83000000'
=> setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.10.101:/home/sumu/4nfs/buildroot,proto=tcp rw ip=192.168.10.102:192.168.10.101:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc'
=> saveenv

下边的 bootargs 其实就是给 linux 内核传递的参数,会配置好 IP 地址,并且从 NFS 挂载根文件系统。上边的 bootm 表示我们从 tftp 下载 zImage 和设备树。这里我直接使用了后面使用 buildroot 构建的根文件系统。

2.3 启动测试

image-20241103085203863

既然直接启动了,那就先不管了,后面再详细研究。

参考资料:

Linux 移植 5.4 版本内核:正点原子阿尔法 IMX6ULL 开发板 Linux 内核源码移植详细步骤(5.4 版本内核)_imx6 使用 linux5.4 内核-CSDN 博客

移植 Linux4.14.13 到 imx6ull - 知乎 (zhihu.com)