LV05-03-Kernel-02-内核移植

本文主要是kernel——内核移植的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
PC端开发环境 Windows Windows11
Ubuntu Ubuntu20.04.2的64位版本
VMware® Workstation 17 Pro 17.6.0 build-24238078
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
Win32DiskImager Win32DiskImager v1.0
Linux开发板环境 Linux开发板 正点原子 i.MX6ULL Linux 阿尔法开发板
uboot NXP官方提供的uboot,使用的uboot版本为U-Boot 2019.04
linux内核 linux-4.19.71(NXP官方提供)
点击查看本文参考资料
分类 网址 说明
官方网站 https://www.arm.com/ ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档
https://www.nxp.com.cn/ NXP官方网站
https://www.nxpic.org.cn/NXP 官方社区
https://u-boot.readthedocs.io/en/latest/u-boot官网
https://www.kernel.org/linux内核官网
点击查看相关文件下载
分类 网址 说明
NXP https://github.com/nxp-imx NXP imx开发资源GitHub组织,里边会有u-boot和linux内核的仓库
nxp-imx/linux-imx/releases/tag/v4.19.71 NXP linux内核仓库tags中的v4.19.71
nxp-imx/uboot-imx/releases/tag/rel_imx_4.19.35_1.1.0 NXP u-boot仓库tags中的rel_imx_4.19.35_1.1.0
I.MX6ULL i.MX 6ULL Applications Processors for Industrial Products I.MX6ULL 芯片手册(datasheet,可以在线查看)
i.MX 6ULL Applications ProcessorReference Manual I.MX6ULL 参考手册(下载后才能查看,需要登录NXP官网)
Source Code https://elixir.bootlin.com/linux/latest/source linux kernel源码
https://elixir.bootlin.com/u-boot/latest/source uboot源码

一、概述

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

二、添加自己的开发板

1. 开发板默认配置文件

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

1
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的关键词或者其他的,发现是没有的,所以这两个设备树我们要复制两个出来。

1
2
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——修改设备树相关文件 · 777d1f2 · 苏木/imx6ull-alpha-release - Gitee.com

2.1.1 imx6ull-alpha-emmc.dts

image-20241103083304765

2.1.2 Makefile

arch/arm/boot/dts/Makefile :

image-20241103083412765

3. 重新编译

1
2
3
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- -j16

这里可以用之前写的脚本:1.sh · 苏木/imx6ull-alpha-release - Gitee.com,脚本编译完后会把成果物拷贝到一起,方便使用:

image-20241102225352853

编译完我们可以得到这两个文件:

image-20241102225407531

4. 启动测试

  • 拷贝到tftp目录
1
cp ~/7Linux/imx6ull-kernel/image/* ~/3tftp/
  • 开发板uboot下载并启动
1
2
3
tftp 80800000 zImage
tftp 83000000 imx6ull-alpha-emmc.dtb
bootz 80800000 - 83000000
  • 为了后面方便启动,这里设置一下uboot命令
1
2
3
=> 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
image-20241102225657558

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

三、修改网络驱动

1. 驱动移植

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

2. 网口测试

2.1 文件准备

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

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

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

1
2
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的这两个参数内容如下(看后面的根文件系统构建):

1
2
3
=> 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)