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

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

前文讲过移植工作的思路是弃用旧的粤嵌开发板的内核和根文件系统,移植使用友善之臂friendlyelec smart6818等开发板上使用的64位系统(内核版本为4.4,ubuntu根文件系统)。因此整体烧录流程参考友善之臂Smart6818官方文档,链接如下:https://wiki.friendlyelec.com/wiki/index.php/Smart6818/zh

从SD卡中启动友善之臂64位linux系统

查看链接文档《7快速入门-7.2快速从SD卡启动》章节,由于从SD卡中启动可以方便测试和更新固件,并且从SD卡中启动操作步骤更加简单,所以我这里只验证了从SD卡中启动是可行的,烧写系统到eMMC需要自行测试。参考文档如下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

推荐下载如下s5p6818-sd-friendlycore-xenial-4.4-arm64-YYYYMMDD.img.zip固件,已验证可行。xenial后缀代表是基于ubuntu 16.04根文件系统。

在这里插入图片描述
按照官方文档说明,在windows上使用win32diskimager将整个镜像烧录好在SD卡后,将SD卡插入到如下图位置卡槽,注意两个SD卡卡槽,只有红框选中的卡槽才有启动能力。
在这里插入图片描述

如此便可以实现,插入烧录好的SD卡,便可以启动友善之臂移植的64位系统,uboot阶段屏幕上能显示friendlyelec的logo(分辨率不对应,logo无法显示完全,需要调整)串口是能正常打印输出,观察打印输出的提示,解决对应的错误(如报找不到对应名称设备树问题)。根据提示,简单调整后,能正常启动uboot、内核、根文件系统(会存在一些外设无法正常使用的情况,如网卡等)。

当把SD卡拔掉之后,若emmc中存在粤嵌烧录好的系统,也能正常启动粤嵌移植的旧系统,因此可以通过插拔SD卡方式无缝切换两个系统。

单独更新uboot/内核/根文件系统方案

将SD卡通过读卡器插在ubuntu开发电脑(由于SD卡烧写系统后是使用linux分区,所以只能插到linux系统上查看,windows上查看不可行)上,可以看到能识别出三个分区。其中boot分区存放着内核和设备树,如下图所示。

在这里插入图片描述

rootfs分区存放的是根文件系统,userdata分区是存放用户数据。

更新内核/设备树/根文件系统

更新内核/设备树/根文件系统很简单,只需要将分区内对应文件覆盖即可。

如:更新内核只需要覆盖boot分区Image文件。

更新设备树只需要根据串口打印数据,得知加载哪个名称设备树文件,将对应设备树文件进行覆盖即可。

更新uboot

由于uboot数据是写在内存卡头部,而不以分区文件形式管理,因此需要借助友善之臂的linux平台下的sd-fuse_s5p6818工具进行烧录更新。

思路:sd-fuse_s5p6818工具是在linux平台下用来烧写整个系统(uboot、内核、根文件系统)到SD卡下的方案。和windows下使用win32diskimager烧写整个镜像能达到同样的效果。只不过在烧写前,可以通过替换sd-fuse_s5p6818工具下的uboot镜像,达到更新uboot的效果。流程如下。

  1. 下载Linux下的制作脚本和64位的系统文件

    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
    
  2. 解压后,sd-fuse_s5p6818工具文件夹内容如下
    在这里插入图片描述

    其中friendlycore-arm64目录下存放着64位的系统文件,其中需要关心fip-nonsecure.img镜像,即uboot镜像,可通过编译uboot源码获得。更新uboot,即将编译出来的新uboot镜像对该文件进行替换。文件夹所有内容如下

    在这里插入图片描述

  3. 由于friendlycore-arm64目录下包含uboot/内核/根文件系统,其中rootfs.img根文件系统大小为2.8个g。而使用默认脚本烧写都是统一烧录更新friendlycore-arm64目录下uboot/内核/根文件系统。因此当你仅是想更新uboot镜像,还需要烧录更新2.8个g的根文件系统耗费时间过大。因此这里有个小技巧:将rootfs.img重命名备份为rootfs.img.bak文件,再执行touch rootfs.img命令创建一个同名的空文件。实测,烧写rootfs.img根文件系统步骤便能快速完成且不影响原来烧录好的根文件系统。

  4. 插入sd卡,查看sd卡是/dev/sdx哪个设备(这里sdx的x指字母b等,通过观察插入sd卡后,多出来的/dev/sdx设备确定。一般来说,只有一块磁盘情况下,sda代表本地磁盘,sdb代表刚插进去的sd卡磁盘)烧写更新内存卡上的镜像。(将下面代码中的sdx改为实际的sd卡设备)

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

    效果如下。可以看到由于创建一个同名的空文件rootfs.img,识别出来的大小也为1kb,能快速进行烧录。
    在这里插入图片描述

注意点:

不能混用粤嵌和友善之臂的uboot/内核/根文件系统。如不能通过粤嵌fastboot方式更新友善之臂的uboot。实测无法跑起来。

附录:

基于友善之臂6818uboot,在gec6818开发板完善的uboot源码仓库(持续更新~)

https://github.com/YBZX/u-boot-xiaoY_gec6818

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值