Linux系统移植(三)--- Linux kernel移植
# Linux系统移植(三)--- Linux kernel移植
以Orange Pi Zero3为例,编译配置Linux kernel。
# 下载源码
可以在官网下载:
官方网站: The Linux Kernel Archives (opens new window)
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.7.3.tar.xz
tar -xvf linux-6.7.3.tar.xz
cd linux-6.7.3
2
3
也可以在GitHub下载:
github: torvalds/linux: Linux kernel source tree (github.com) (opens new window)
git clone https://github.com/torvalds/linux.git
截至到2024/02/04,Orange Pi Zero3的设备树文件已经合并到代码中了,所以省去了调整设备树的工作
# 配置
执行以下命令来生成开发板默认配置
make ARCH=arm64 CROSS_COMPILE=aarch64-livingteam-linux-gnu- defconfig
- 体系结构我们是arm64,所以
ARCH=arm64
CROSS_COMPILE=aarch64-livingteam-linux-gnu-
(参考 Linux系统移植(一)--- 交叉编译工具链的配置 | 长生栈 (livingteam.cn) (opens new window) )
ARM64机构相关硬件的配置文件现在只有一个defconfig,在arch/arm64/configs下,这和之前arm的系统结构的不一样,之前arch/arm/configs下面各个厂商的芯片的默认配置文件都在那里有多个,而arm64共用这一个,可能也是现在kernel对arm64支持没那么好,因为arm64比较新。
执行上面指令之后在源码树顶层目录会生成一个.config文件,就是配置结果文件。
name这个配置文件由于是所有arm64芯片厂家共用,肯定有很多其他芯片相关冗余代码,当然也包含全志的arm64相关h6支持代码,所以需要进一步做些裁剪。
下面采用图形窗口方式来配置裁剪:
make ARCH=arm64 CROSS_COMPILE=aarch64-livingteam-linux-gnu- menuconfig
出来这个熟悉窗口:
platform selection平台选择,将allwinner sunxi 64-bit soc Family留下,其它厂家的芯片支持全部去掉。
另外,ARMv8 software model这一项保留,因为查看它的help,这一项和电源管理(PM)相关支持代码,肯定要留。最终结果如下图所示:
至于其他选项,比如device driver,设备驱动这些后面我们根据具体硬件情况再做进一步慢慢配置或者修改,这样就完成了一个内核初步配置。
# 编译
执行下面指令进行编译源码,生成linux内核镜像:
make ARCH=arm64 CROSS_COMPILE=aarch64-livingteam-linux-gnu- Image -j8
编译完成,会在arch/arm64/boot目录下生成Image内核镜像文件。
执行下面命令,会生产设备树文件:
make ARCH=arm64 CROSS_COMPILE=aarch64-livingteam-linux-gnu- dtbs -j8
这样会把所有的硬件的设备树全部编译,前面我们查找过,orange pi zero 3这款开发板的设备树是arch/arm64/boot/dts/allwinner/sun50i-h618-orangepi-zero3.dts,该文件会被编译成sun50i-h618-orangepi-zero3.dtb文件。
最终编译结果会生成在arch/arm64/boot/目录下,我们需要的两个文件分别如下:
arch/arm64/boot/Image
arch/arm64/boot/dts/allwinner/sun50i-h618-orangepi-zero3.dtb
2
至此,适用于Orange Pi Zero3的linux kernel编译完毕。
# 参考文章
从零开始移植最新版本(2023.10)主线Linux到Orange Pi 3(全志H6) - 知乎 (zhihu.com) (opens new window)
- 01
- Linux系统移植(五)--- 制作、烧录镜像并启动Linux02-05
- 03
- Linux系统移植(二)--- Uboot移植02-05