编译适用于RK3328芯片的Loader
本文最后更新于:2025年6月20日 晚上
前言
手里有几块搭载瑞芯微RK3328芯片的主板,使用瑞芯微官方工具RKDevTool一直切换不到板载的eMMC存储(SAMSUNG KLMAG1JETD-B041),显示Loader不支持切换到eMMC存储,而网上找到的现成Loader文件都已经是很多年前的了,测试下来都失败,所以就自己折腾编译一个合适的Loader,用于切换到eMMC存储并烧录Linux系统,这篇文章主要用于记录过程,仅供参考。[1]
知识补充
观察上图可发现瑞芯微的芯片有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 |
|
编译最新的Linux内核
下载最新稳定版的Linux内核The Linux Kernel Archives:
1 |
|
编译Loader
克隆官方SDK源码:
1 |
|
进入rkbin项目中,首先需要修改相应芯片型号的配置文件,进入RKBOOT目录,修改RK3328MINIALL.ini文件,需要将以下地方的文件路径修改为绝对路径,否则后续编译时会提示找不到对应文件(默认的路径无法识别疑似是BUG):
进入/rkbin/tools目录,执行以下代码生成Loader文件:
1 |
|
u-boot项目和rkbin项目需要放到同一目录下,不然后续操作可能会报错。
使用不同的系统时,Loader对应的烧录地址不一样,请注意区分,对于Android系统:Adress:0x00000000
,Name:loader
;对于Linux系统:Adress:0xCCCCCCCC
,Name:Boot
。
编译IDBLoader
进入/rkbin/tools目录,执行以下代码生成IDBLoader文件:
1 |
|
Address:
0x00000040
,Name:loader1
。
编译U-Boot
克隆官方SDK源码:
1 |
|
在u-boot项目中,已经包含各芯片的u-boot示例配置文件,稍作修改即可进行使用,默认的配置文件路径为:/u-boot/configs/,本文章使用的示例文件为:rk3328_defconfig,将该文件复制到u-boot根目录下,并重命名为:.config,然后使用make menuconfig
修改配置保存即可。
修改的地方:
开始编译生成u-boot.img文件:
1 |
|
执行上述代码后,会在u-boot目录下生成以
u-boot
名称开头的一系列文件,其中就有u-boot.img文件。
Address:0x00004000
,Name:loader2
。
编译Trust
进入/rkbin/tools目录,执行以下代码生成Trust文件:
1 |
|
Address:
0x00006000
,Name:atf
。
编译BOOT
首先克隆官方kernel源码:
1 |
|
查看是否切换到develop-6.1
分支,项目默认为develop-4.4
分支,后续编译时会报错,暂不清楚具体原因;
1 |
|
导出环境变量:
1 |
|
进入kernel目录,先将官方提供的配置文件复制到项目根目录中并重命名为 .config,然后运行make menuconfig
后退出保存一下:
1 |
|
由于官方kernel项目中没有适用于RK3328芯片的配置文件,所以这里使用了瑞芯微芯片Linux的通用配置文件。
编译boot.img
1 |
|
等待编译完成,会生成以下文件:
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
。