编译 Linux 固件¶
这一章将介绍编译 ROC-RK3328-CC Linux 固件的整个流程。
准备工作¶
Linux 固件在如下的环境中编译:
Ubuntu 16.04 amd64
安装以下包:
sudo apt-get install bc bison build-essential curl \
device-tree-compiler dosfstools flex gcc-aarch64-linux-gnu \
gcc-arm-linux-gnueabihf gdisk git gnupg gperf libc6-dev \
libncurses5-dev libpython-dev libssl-dev libssl1.0.0 \
lzop mtools parted repo swig tar zip
下载 Linux SDK¶
创建工程目录:
# create project dir
mkdir ~/proj/roc-rk3328-cc
cd ~/proj/roc-rk3328-cc
下载 Linux SDK:
# U-Boot
git clone -b roc-rk3328-cc https://github.com/FireflyTeam/u-boot
# Kernel
git clone -b roc-rk3328-cc https://github.com/FireflyTeam/kernel --depth=1
# Build
git clone -b debian https://github.com/FireflyTeam/build
# Rkbin
git clone -b rk3328 https://github.com/FireflyTeam/rkbin
提示:通过以上链接可以在线浏览源码。
开发板编译配置在:
build/board_configs.sh
编译 U-Boot¶
编译 U-Boot:
./build/mk-uboot.sh roc-rk3328-cc
输出:
out/u-boot/
├── idbloader.img
├── rk3328_loader_ddr786_v1.06.243.bin
├── trust.img
└── uboot.img
rk3328_loader_ddr786_v1.06.243.bin
: DDR 初始化文件。idbloader.img
: DDR 初始化与 miniloader 结合的文件。trust.img
: ARM trusted 固件。uboot.img
: U-Boot映像文件。
相关文件:
configs/roc-rk3328-cc_defconfig
: 默认 U-Boot 配置
编译 Kernel¶
编译 kernel:
./build/mk-kernel.sh roc-rk3328-cc
输出:
out/
├── boot.img
└── kernel
├── Image
└── rk3328-roc-cc.dtb
boot.img
: 包含Image
andrk3328-roc-cc.dtb
的映像文件, 为 fat32 文件系统格式。Image
: 内核映像。rk3328-roc-cc.dtb
: 设备树 blob。
相关文件:
arch/arm64/configs/fireflyrk3328_linux_defconfig
: 默认内核配置。arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
: 开发板设备树描述。arch/arm64/boot/dts/rockchip/rk3328.dtsi
: CPU 设备树描述。
自定义内核配置和更新默认配置:
# 这非常重要!
export ARCH=arm64
cd kernel
# 首先使用默认配置
make fireflyrk3328_linux_defconfig
# 自定义你的 kernel 配置
make menuconfig
# 保存为默认配置
make savedefconfig
cp defconfig arch/arm64/configs/fireflyrk3328_linux_defconfig
注意: 构建脚本不会将内核模块复制到根文件系统。
编译根文件系统¶
可以下载预编译的根文件系统,或参考《编译 Linux 根文件系统》自己编译一个。
打包原始固件¶
把你的 Linux 根文件系统映像文件放在 out/rootfs.img
out
目录将包含以下文件:
$ tree out
out
├── boot.img
├── kernel
│ ├── Image
│ └── rk3328-roc-cc.dtb
├── rootfs.img
└── u-boot
├── idbloader.img
├── rk3328_loader_ddr786_v1.06.243.bin
├── trust.img
└── uboot.img
2 directories, 8 files
打包原始固件:
./build/mk-image.sh -c rk3328 -t system -r out/rootfs.img
这条命令根据《存储映射》所描述的布局,将分区映像文件写到指定位置,最终打包成 out/system.img
,