近期正在学习使用GEC6818开发板,发现开发板使用的是32位Linux,故想移植一下主线U-Boot和内核玩玩。

粤嵌GEC6818开发板使用了三星的S5P6818处理器,主频1.4GHz,RAM为1GB,比之前学校的4412开发板性能要好一点。

目标移植的U-Boot版本为U-Boot 2025.07-rc4,需要准备一张Micro SD卡作为启动介质。

参考

烧录部分参考了以下博客:

基于GEC6818开发板(s5p6818)移植64位linux系统-烧录篇(一)-CSDN博客

参考U-Boot:

YBZX/u-boot-xiaoY_gec6818: 基于GEC6818开发板(s5p6818)移植64位linux系统-uboot部分

编译

首先将对应的文件拷贝过去,比如U-Boot配置文件、板子、设备树等,我还发现U-Boot主线中有一个相似的开发板NanoPi2(s5p4418),有部分共用的代码,这样工作量就相对小了一点点。然后发现源参考U-Boot把很多配置写进include/configs/s5p6818_gec6818.h了,和defconfig中的一些配置有重合,需要将其注释掉,并对比相应配置,添加进defconfig中。

移植的时候遇到了很多的编译错误,大部分编译错误都是因为两个版本的U-Boot配置有差异导致的,这里就不详细列举了。仓库地址:

MC-XiaoXiao/u-boot_gec6818: 为GEC6818移植的主线U-Boot

编译指令:

git clone https://github.com/MC-XiaoXiao/u-boot_gec6818.git
cd u-boot_gec6818
make s5p6818_gec6818_defconfig
make CROSS_COMPILE=aarch64-linux-gnu- -j16

在编译完u-boot.bin之后,并不能直接烧录进SD卡内,在参考U-Boot中有个fip_create工具,将NISH、boot2nd、U-Boot打包到一起,生成一个fip-nonsecure.bin文件,随后通过一个BINGEN工具来生成fip-nonsecure.img

具体引导过程可查看这篇博客:S5P6818学习-------1 启动模式-CSDN博客

烧录固件

烧录基本参考了这篇博客的内容。准备一张Micro SD卡,使用读卡器插入电脑,先使用win32diskimager烧录了一遍FriendlyCore的64位固件,固件地址:

FriendlyElec Downloads,文件为s5p6818-sd-friendlycore-xenial-4.4-arm64-YYYYMMDD.img.zip

更新U-Boot

在Linux环境中,下载友善之臂的sd-fuse_s5p6818工具:

git clone https://github.com/friendlyarm/sd-fuse_s5p6818 -b master --single-branch sd-fuse_s5p6818
cd sd-fuse_s5p6818

下载对应固件:

wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/friendlycore-arm64-images.tgz
tar xvzf friendlycore-arm64-images.tgz

解压后的friendlycore-arm64目录结构如下:

由于前面已经刷写过一整个固件了,不需要再刷写rootfs,所以将rootfs.img改名为rootfs.img.bak,并创建一个空文件:

cd friendlycore-arm64
mv rootfs.img rootfs.img.bak
touch rootfs.img
cd ..

将编译好的fip-nonsecure.img 拷贝到friendlycore-arm64下,随后查看插入的SD卡设备文件,我的是sdb:

ll /dev/sd*

烧录,这里sdx使用你查看的SD卡设备路径:

sudo ./fusing.sh /dev/sdx friendlycore-arm64

提示All done.表示烧录成功,现在新的U-Boot就烧录到SD卡里了。

启动开发板

将SD卡插入开发板靠近中间的那个卡槽内:

连接开发板串口,打开开发板,可以看到U-Boot成功启动输出: