按照官网wiki,http://wiki.espressobin.net/tiki-index.php?page=Boot+ESPRESSObin+from+SATA+drive&highlight=boot%20from

armada-3720是支持uboot从sata启动的,内核版本是4.14。

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

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

这里我之前编译的是armada-18.12 u-boot,编译工具链用gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu,烧写进去之后一直起不来,控制台打印:

TIM-1.0
>

似乎启动后马上挂掉了,后来在网上查了资料后,发现有人也碰到同样的问题,https://github.com/MarvellEmbeddedProcessors/atf-marvell/issues/12

之后编译了armada-17.08的u-boot,编译工具链用gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu,可以正常启动。

2.从spi flash启动u-boot,将内核、系统文件放到SD里,dts里使能sata,启动系统后,直接把编译好的sata的uboot bin文件烧写  到sata里面。这里系统后启动后sata盘在dev目录下是sda。用dd命令烧写:

$ dd if=flash-image-sata.bin of=/dev/sda conv=fdatasync

3.烧写完成后将短路帽置成4mode,上电后uboot就从sata起来了。

4.为了生产方便,决定把系统文件也放在sata硬盘,不借助SD卡或者USB设备,通过SD卡启动系统后,对sata盘进行分区,把uboot放在sda1,系统内核文件放在sda2,将sda1设置成boot启动区(fdisk的“a”命令):fdisk /dev/sda分区命令这里就不多说明了,分完区如下显示:

注意:通过dd命令将uboot烧写到sda1时,要先在sda里也烧写一遍,也就是说在sda里烧写后再分区再烧写到sda1,相当于烧写  了两遍,这里我也不清楚是什么原因,直接烧写到sda1里uboot启动一半就会挂掉,分完区再烧写到sda里会把分区删掉。

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

$ dd if=/dev/zero of=/dev/sda2 bs=1M count=100
$ mkfs.ext4 /dev/sda2
$ mount /dev/sda2 /mnt/sata
$ tar -jxvf root.tar.bz2 -C /mnt/sata

在uboot里设置好环境变量就可以从sata启动系统了。uboot环境变量一般不用改,所以直接在编译前直接改好就行了。  在u-boot-marvell/include/configs/mvebu_armada-37xx.h中修改,具体设置如下(uboot用的是armada-17.08)>

这里注意bootargs设置时要加“mem=512MB”定义内存大小,否则系统起来后操作文件,比如解压、拷贝会出现错误,具体原因不清楚。

 

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