编译适用于RK3328芯片的Loader

本文最后更新于:2025年6月20日 晚上

前言

手里有几块搭载瑞芯微RK3328芯片的主板,使用瑞芯微官方工具RKDevTool一直切换不到板载的eMMC存储(SAMSUNG KLMAG1JETD-B041),显示Loader不支持切换到eMMC存储,而网上找到的现成Loader文件都已经是很多年前的了,测试下来都失败,所以就自己折腾编译一个合适的Loader,用于切换到eMMC存储并烧录Linux系统,这篇文章主要用于记录过程,仅供参考。[1]

知识补充

瑞芯微芯片启动流程:[2] [3]

RKChip Boot flow

观察上图可发现瑞芯微的芯片有2条启动流程,而对于使用USB刷写系统,需要使用mini。

查阅官方手册RK3328_Linux-Debian_V1.1_Development_Guide-20170711.pdf可知,在RK3328芯片上运行Linux系统,需要以下文件:

Address Name Path
Boot rkbin/rk33/rk3328_loader_v1.21.250.bin
0x00000040 loader1 idbloader.img
0x00004000 loader2 uboot.img
0x00006000 atf trust.img
0x00008000 boot boot.img
0x00040000 rootfs linaro.img

备份系统

备份好原系统,可用于后续的救砖以及分析原系统的分区情况;对于瑞芯微的芯片,需要先使用新版本 AndroidTool_Release_v2.71 读取分区信息,然后使用旧版本 AndroidTool_Release_v2.38 导出镜像,可以在RKDevTool下载这2个版本的工具。

按住主板上的Recovery按钮,使用USB公对公数据线将主板的USB OTG接口与电脑进行连接,此时打开AndroidTool_Release_v2.71软件,会显示发现一个Loader设备,然后点击读取分区,信息如下:

分区信息

请自行截图保存上述的分区信息,关闭新版本软件后打开AndroidTool_Release_v2.38软件,点击 高级功能,起始扇区对应上图中的LBA扇区数对应的Size,点击导出镜像备份,请依次对各Name进行备份并手动修改Output目录中的导出镜像文件名与之对应,其中userdata可以不用导出(非常占用空间!!!):

导出镜像

编译环境

我使用的是Windows10自带的Linux环境进行后续编译操作,方便快捷又好用~(就是占用C盘空间😒)

编译系统信息

编译文件

安装所需工具

1
2
3
4
5
sudo apt-get update

sudo apt-get upgrade

sudo apt-get install git gitk git-core git-gui bc bison flex make gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev libssl-dev android-tools-adb android-tools-fastboot

编译最新的Linux内核

下载最新稳定版的Linux内核The Linux Kernel Archives

1
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.15.2.tar.xz

编译Loader

克隆官方SDK源码:

1
git clone https://github.com/rockchip-linux/rkbin

进入rkbin项目中,首先需要修改相应芯片型号的配置文件,进入RKBOOT目录,修改RK3328MINIALL.ini文件,需要将以下地方的文件路径修改为绝对路径,否则后续编译时会提示找不到对应文件(默认的路径无法识别疑似是BUG):

文件路径需要使用绝对路径

进入/rkbin/tools目录,执行以下代码生成Loader文件:

1
./boot_merger ~/rkbin/RKBOOT/RK3328MINIALL.ini

编译生成Loader文件

u-boot项目和rkbin项目需要放到同一目录下,不然后续操作可能会报错。
使用不同的系统时,Loader对应的烧录地址不一样,请注意区分,对于Android系统:Adress:0x00000000,Name:loader;对于Linux系统:Adress:0xCCCCCCCC,Name:Boot

编译IDBLoader

进入/rkbin/tools目录,执行以下代码生成IDBLoader文件:

1
./mkimage -n rk3328 -T rksd -d /home/dongxun2zc/u-boot/tpl/u-boot-tpl.bin idbloader.img

Address:0x00000040,Name:loader1

编译U-Boot

克隆官方SDK源码:

1
git clone https://github.com/rockchip-linux/u-boot

在u-boot项目中,已经包含各芯片的u-boot示例配置文件,稍作修改即可进行使用,默认的配置文件路径为:/u-boot/configs/,本文章使用的示例文件为:rk3328_defconfig,将该文件复制到u-boot根目录下,并重命名为:.config,然后使用make menuconfig修改配置保存即可。

修改的地方:

开启eMMC存储支持功能

开始编译生成u-boot.img文件:

1
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm KCFLAGS="-ffixed-x18" -j$(nproc)

执行上述代码后,会在u-boot目录下生成以u-boot名称开头的一系列文件,其中就有u-boot.img文件。
Address:0x00004000,Name:loader2

编译Trust

进入/rkbin/tools目录,执行以下代码生成Trust文件:

1
./trust_merger ~/rkbin/RKTRUST/RK3328TRUST.ini

Address:0x00006000,Name:atf

编译BOOT

首先克隆官方kernel源码:

1
git clone -b develop-6.1 https://github.com/rockchip-linux/kernel.git

查看是否切换到develop-6.1分支,项目默认为develop-4.4分支,后续编译时会报错,暂不清楚具体原因;

1
git branch -a

导出环境变量:

1
2
3
export ARCH=arm64

export CROSS_COMPILE=aarch64-linux-gnu-

进入kernel目录,先将官方提供的配置文件复制到项目根目录中并重命名为 .config,然后运行make menuconfig后退出保存一下:

1
cp ~/kernel/arch/arm64/configs/rockchip_linux_defconfig .config

由于官方kernel项目中没有适用于RK3328芯片的配置文件,所以这里使用了瑞芯微芯片Linux的通用配置文件。

编译boot.img

1
make rk3328-evb.img

等待编译完成,会生成以下文件:
Image: resource.img (with rk3328-evb.dtb logo.bmp logo_kernel.bmp) is ready
Image: boot.img (with Image resource.img) is ready
Image: zboot.img (with Image.lz4 resource.img) is ready

Address:0x00008000,Name:boot

编译ROOTFS

Address:0x00040000,Name:rootfs

特别鸣谢


编译适用于RK3328芯片的Loader
https://dongxunz.github.io/2025/06/17/瑞芯微/编译适用于RK3328芯片的Loader/
作者
dongxunz
发布于
2025年6月17日
许可协议