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这个文件,我们来看一下它有没有什么依赖的设备树:
imx6ull.dtsi这个我们不用管,共用的。我们看一下imx6ul-14x14-evk.dtsi还有没有,进到里面搜索一下14x14的关键词或者其他的,发现是没有的,所以这两个设备树我们要复制两个出来。
1 | cp arch/arm/boot/dts/imx6ull-14x14-evk.dts arch/arm/boot/dts/imx6ull-alpha-emmc.dts |
2.2 修改相关文件
kernel 4.19.71——修改设备树相关文件 · 777d1f2 · 苏木/imx6ull-alpha-release - Gitee.com
2.1.1 imx6ull-alpha-emmc.dts
2.1.2 Makefile
arch/arm/boot/dts/Makefile :
3. 重新编译
1 | make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean |
这里可以用之前写的脚本:1.sh · 苏木/imx6ull-alpha-release - Gitee.com,脚本编译完后会把成果物拷贝到一起,方便使用:
编译完我们可以得到这两个文件:
4. 启动测试
- 拷贝到tftp目录
1 | cp ~/7Linux/imx6ull-kernel/image/* ~/3tftp/ |
- 开发板uboot下载并启动
1 | tftp 80800000 zImage |
- 为了后面方便启动,这里设置一下uboot命令
1 | => setenv bootcmd 'tftp 80800000 /zImage\;tftp 83000000 /imx6ull-alpha-emmc.dtb\;bootz 80800000 - 83000000' |
能正常启动就说明没得问题了。
三、修改网络驱动
1. 驱动移植
额,我用了NXP提供的4.19.71版本的内核,上面设备树添加完后好像能直接通。
2. 网口测试
2.1 文件准备
我们这里由于还要编译内核,所以直接使用下边的命令一步到位:
1 | make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16 |
编译完成后我们将设备树和zImage文件拷贝到tftp目录下:
1 | cp arch/arm/boot/zImage ~/3tftp/imx6ull/ |
修改好设备树和 Linux 内核以后重新编译一下,得到新的 zImage 镜像文件和 imx6ull-alpha-emmc.dtb 设备树文件,使用网线将 I.MX6U-ALPHA 开发板的两个网口与路由器或者电脑连接起来,最后使用新的文件启动 Linux 内核。
2.2 bootamd与bootargs
uboot的这两个参数内容如下(看后面的根文件系统构建):
1 | => setenv bootcmd 'tftp 80800000 /zImage\;tftp 83000000 /imx6ull-alpha-emmc.dtb\;bootz 80800000 - 83000000' |
下边的 bootargs 其实就是给linux内核传递的参数,会配置好IP地址,并且从NFS挂载根文件系统。上边的bootm表示我们从tftp下载zImage和设备树。这里我直接使用了后面使用buildroot构建的根文件系统。
2.3启动测试
既然直接启动了,那就先不管了,后面再详细研究。
参考资料:
Linux移植5.4版本内核:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(5.4版本内核)_imx6使用linux5.4内核-CSDN博客