Linux 内核编译打包

1. 准备环境

安装交叉编译工具链

在Ubuntu/Debian系统中安装ARM64交叉编译器:

bash
 
sudo apt update
sudo apt install gcc-aarch64-linux-gnu

验证工具链

bash
 
aarch64-linux-gnu-gcc --version
# 应输出类似:aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

2. 获取Linux内核源码

下载源码

从官方仓库克隆或下载稳定版内核(以6.6版本为例):

bash
 
git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
cd linux
git checkout v6.6

3. 配置内核

选择默认配置

bash
 
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig

自定义配置(可选)​

如需调整内核选项(如启用特定驱动):

bash
 
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig

4. 编译内核

执行编译

bash
 
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)

生成文件

  • 内核镜像arch/arm64/boot/Image
  • 设备树文件(DTB)​:位于 arch/arm64/boot/dts/ 目录下(如 rockchip/rk3568-evb.dtb)。

5. 打包镜像

方案一:直接使用Image文件

直接使用编译生成的 Image 文件,适用于UEFI引导或已配置的引导加载程序(如U-Boot)。

方案二:生成U-Boot兼容的uImage

安装 u-boot-tools

bash
 
sudo apt install u-boot-tools

使用 mkimage 转换镜像(以加载地址 0x80080000 为例):

bash
 
mkimage -A arm64 -O linux -T kernel -C none -a 0x80080000 -e 0x80080000 -n "Linux Kernel" -d arch/arm64/boot/Image uImage

6. 测试镜像

通过QEMU模拟器测试

安装QEMU:

bash
 
sudo apt install qemu-system-arm

启动模拟器(使用内核和设备树):

bash
 
qemu-system-aarch64 \
  -M virt \
  -cpu cortex-a72 \
  -smp 4 \
  -m 4G \
  -kernel arch/arm64/boot/Image \
  -append "console=ttyAMA0 root=/dev/vda" \
  -drive format=raw,file=ubuntu-rootfs.img \
  -nographic

在真实设备上测试

将 Image 或 uImage 和对应的 .dtb 文件复制到设备的启动分区(如SD卡的 /boot 目录),并配置引导加载程序(如U-Boot)。


常见问题解决

  1. 编译失败

    • 检查依赖库是否安装完整:sudo apt install build-essential libncurses-dev libssl-dev bc flex bison.
    • 确保使用正确的 ARCH 和 CROSS_COMPILE 参数。
  2. 设备树文件缺失

    • 在内核配置中启用对应平台的设备树支持(如 CONFIG_ARCH_ROCKCHIP=y)。
  3. 启动时卡住

    • 在内核命令行添加 earlycon 调试参数:console=ttyAMA0 earlycon=pl011,0x9000000.

完整命令示例

bash
 
# 1. 克隆内核源码
git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
cd linux
git checkout v6.6

# 2. 配置并编译
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)

# 3. 生成uImage(可选)
sudo apt install u-boot-tools
mkimage -A arm64 -O linux -T kernel -C none -a 0x80080000 -e 0x80080000 -n "Linux" -d arch/arm64/boot/Image uImage

# 4. 测试
qemu-system-aarch64 -M virt -cpu cortex-a53 -nographic -smp 1 -m 512 -kernel arch/arm64/boot/Image -append "console=ttyAMA0"

通过以上步骤,即可完成ARMv8架构的Linux内核编译与镜像打包。实际使用时,需根据目标硬件调整设备树和引导参数。

posted @ 2025-02-26 11:05  玥茹苟  阅读(31)  评论(0编辑  收藏  举报