BOOT、KERNEL移植过程(二)

KERNEL内核移植

之前我们已经成功移植了Uboot,虽然还有启动时蜂鸣器一直在响,不过这也是后续能够解决的问题,接下来先进行Kernel内核的移植

下载内核

可以从官方下载imx6ull的内核,当然由于是外网的且文件较大下载会很久,可以先选择分支然后下载指定分支的压缩包也可

1
2
3
4
5
6
# 下载整合包
git clone https://source.codeaurora.org/external/imx/linux-imx
# 查看所有分支
git branch --all
# 切换到所要的分支
git checkout $所选分支$

若已经从郭工文件服务器下载imx6ull包的,内核的路径在

1
2
# 我这里把imx6ull的文件夹下载到~路径下
~/imx6ull/bsp/kernel/linux-imx

修改顶层的Makefile

1
2
ARCH = arm
CROSS_COMPILE = arm-linux-gnueabihf-

修改顶层的Makefile


建立自己的板子配置

拷贝配置文件

1
2
3
4
5
# 查看已经编写好的配置文件
vim arch/arm/configs/igkboard_defconfig
# 和uboot类似,这个igkboard_defconfig也是郭工已经编写好的,这个文件是从imx_v7_defconfig复制修改而来
# 即由如下命令复制后修改而来(不要执行)
cp arch/arm/configs/imx_v7_defconfig arch/arm/configs/igkboard_defconfig

拷贝设备树文件

1
2
3
4
# 学习驱动时已经知道,设备树文件使用的是arch/arm/boot/dts/igkboard.dts
# 这里设备树都是郭工自己编写的,引用SOC相关的#include "imx6ull.dtsi" /* 头文件 */
# 后续移植可以尝试自己从头开始写设备树文件
vim arch/arm/boot/dts/igkboard.dts

拷贝设备树文件

编辑完成设备树文件后,将新增的设备树文件添加进编译

1
vim arch/arm/boot/dts/Makefile

方法一:可以在这里添加igkboard.dtb

1
2
3
4
5
6
7
# 先在这里添加igkboard.dtb的编译结果
dtb-$(CONFIG_SOC_IMX6UL) +=\
igkboard.dtb\
...
# 再到空余的地方添加以支持dtoverlay(例如方法二在末尾)
DTC_FLAGS_igkboard := -@
subdir-$(CONFIG_SOC_IMX6UL) += overlays

添加igkboard.dtb方法一

方法二:直接在空闲地方添加这三句,效果等同

1
2
3
DTC_FLAGS_igkboard := -@
dtb-$(CONFIG_SOC_IMX6UL) += igkboard.dtb
subdir-$(CONFIG_SOC_IMX6UL) += overlays

添加igkboard.dtb方法二

尝试编译一下,回到~/imx6ull/bsp/kernel/linux-imx/目录下

1
2
make igkboard_defconfig
make -j8

编译成功后,复制编译出的dtb设备树文件和zImage

1
2
cp arch/arm/boot/zImage ~/tftp/igkboard/
cp arch/arm/boot/dts/igkboard.dtb ~/tftp/igkboard/

移植完成,接下来还需要一个根文件系统进行测试

移植根文件系统

方法二:Ubuntu 18.04.05 LTS根文件系统来进行移植

ubuntu-base文件系统下载地址:http://cdimage.ubuntu.com/ubuntu-base/releases/

移植根文件系统

移植根文件系统

移植根文件系统

ubuntu-base-18.04.5-base-armhf.tar.gz是一个Ubuntu操作系统的压缩文件,适用于基于ARMv7架构的设备。它包含了Ubuntu 18.04.5的基本系统文件和软件包(不包括图形用户界面),可以作为构建定制化嵌入式Linux系统的基础。

"armhf"是”ARM hard-float”的缩写,表示该Ubuntu操作系统针对采用ARMv7架构的设备进行了优化。ARMv7架构支持硬件浮点运算(hard float),因此被称为”hard-float”。

​ Ubuntu针对ARMv7架构的设备提供了特定的版本——armhf版本,以充分利用硬件性能。