官网wiki没有介绍相关的操作说明,看了88F3700的datesheet,armada-3720是支持uboot从emmc启动的,这里uboot使用最新的armada-18.12 u-boot,内核是4.14,编译工具链用gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu。

1.设置好uboot环境变量,为了使系统从emmc起来。uboot环境变量在生产时一般不用改,所以直接在编译前直接改好就行了。在u-boot-marvell/include/configs/mvebu_armada-common.h 中修改 ,具体设置如下:

按说明http://wiki.espressobin.net/tiki-index.php?page=Build+From+Source+-+Bootloader先编译好EMMC-bootloader image ,

生成flash-image-emmc.bin文件。

$ make DEBUG=1 USE_COHERENT_MEM=0 LOG_LEVEL=20 SECURE=0 CLOCKSPRESET=CPU_1000_DDR_800 DDR_TOPOLOGY=2 BOOTDEV=EMMCNORM PARTNUM=1 WTP=../a3700-utils/ PLAT=a3700 all fip(注意DDR_TOPOLOGY的值与你板子的DDR3/4的型号有关)

可以参考https://github.com/MarvellEmbeddedProcessors/atf-marvell/blob/atf-v1.5-armada-18.12/docs/marvell/build.txt

3.从sata启动系统(上一篇有介绍),dts使能emmc,启动系统后,直接把编译好的emmc的uboot-bin文件烧写到emmc,启动后emmc在dev目录下是mmcblk0,还有两个Boot ROM,mmcblk0boot0和mmcblk0boot1,另外有一个mmcblk0rpmb。先关闭boot分区写保护状态,再用dd命令烧写到mmcblk0boot0区。(boot0、boot1和rpmb区出厂时就有,无法删除),烧写完成后将短路帽置成2mode,上电后uboot就从emmc起来了。

$ echo 0 | tee /sys/block/mmcblk0boot0/force_ro  //关闭写保护
$ dd if =/boot/flash-image-emmc.bin of =/dev/mmcblk0boot0 conv=fdatasync

4.对emmc进行分区,准备把系统内核文件放在分区1里。

$ (echo n; echo p; echo 1; echo ''; echo '';echo a;echo w) | fdisk /dev/mmcblk0

5.将mmcblk0p1格式化,然后挂载到mnt/emmc下(emmc目录自己创建),然后将系统文件解压到mnt/emmc目录下,在/mnt/emmc下的boot目录中放入你的内核文件和dtb文件。

$ dd if=/dev/zero of=/dev/mmcblk0p1 bs=1M count=100
$ mkfs.ext4 /dev/mmcblk0p1
$ mount /dev/mmcblk0p1 /mnt/emmc/
$ tar -jxvf /boot/rootfs-HT80.tar.bz2 -C /mnt/emmc

6.现在断电重启后系统就可以从EMMC起来了。

 

如果觉得我的文章对你有用,请随意赞赏