跳到主要内容

编译内核与系统镜像

环境准备

  • 一台装有 ubuntu 20.04 或者以上的 PC 或者虚拟机

  • 安装相关工具

Linux$

sudo apt install git build-essential flex bison

下载源码

Linux$
mkdir -p radxa_dragon_q6a_ubuntu/build

cd radxa_dragon_q6a_ubuntu

git clone https://github.com/nascs/q6a_build.git build -b Radxa_Dragon_Q6A

git clone https://github.com/nascs/kernel.git -b work-6.15.y

mkdir rootfs && cd rootfs

wget https://dl.radxa.com/q6a/images/rootfs.img.zst

zstd -d rootfs.img.zst

设置交叉编译工具链

  • 下载交叉编译工具链
Linux$
mkdir tools && cd tools

wget https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz

tar Jxf arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz

  • 设置交叉编译工具链

将 build/board_configs.sh 中的 "export CROSS_COMPILE=aarch64-linux-gnu-" 替换为实际的交叉编译链。

编译内核

Linux$

bash ./build/mk-kernel.sh dragon-q6a

编译成功后,会在 radxa_dragon_q6a_ubuntu 目录下生成一个 out 文件夹, 如下:

  • boot.img: boot.img header、kernel 以及 ramdisk 文件系统

  • headers: 头文件相关

  • kernel: 包含 kernel 的 Image 文件和 Q6A 的设备树文件

  • rootfs: 内核编译后打包的 rootfs

提示

如果需要在上层空间使用 i2c/spi/uart 等:

方法一:让 ubuntu 的 initramfs-tools 检测到这个固件 /lib/firmware/qcom/qcm6490/qupv3fw.elf 并自动加进 initramfs

方法二:将 CONFIG_QCOM_GENI_SE 改为 module 的方式编译

编译系统镜像

Linux$

bash ./build/mk-image.sh -c qcs6490 -t system -r rootfs/rootfs.img

编译成功后,会在 radxa_dragon_q6a_ubuntu/out 目录下生成一个 system.img 的系统镜像文件。