近期正在学习使用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成功启动输出:
