作为一个linux初学者,这会总命令行的方式很不习惯,特别是制作启动盘,确实花费了很多时间去学习。这里把制作启动盘的过程简单写一下。可能过程有一些重复的,以后有经验了再优化吧。

硬件环境:orangepi3;芯片:全志H6;源代码:linux4.9

首先看一下好用的tf卡的格式。其中前20m未分区的空间用来放boot0和uboot。分区1用来放kernal、intird和一些配置文件。分区2是放rootfs。

arm 架构如何做U盘启动 arm u盘启动盘_arm 架构如何做U盘启动

这里需要注意的是分区1的标识是lba(逻辑块寻址模式),因为这个问题开始折腾了很久。

下面开始正式制作启动盘。

1、格式化TF卡

  使用fdsik /dev/sdb,查看tf卡。然后按m,查看支持的命令。可以先按p,查看现在的分区状态。

arm 架构如何做U盘启动 arm u盘启动盘_arm 架构如何做U盘启动_02

然后按d,把两个分区都删了。

注意:完了事别忘了按w,保存。

arm 架构如何做U盘启动 arm u盘启动盘_arm 架构如何做U盘启动_03

2、分区

分区的话可以使用fdisk去新建分区,但是需要计算sector的起始位置,然后一步到位。也可以使用类似于gparted这种分区软件,操作比较简单。如图所示

这里需要注意的是:前面剩余空间按需要留20m,新分区大小50m,文件系统为fat16或者fat32。

arm 架构如何做U盘启动 arm u盘启动盘_arm 架构如何做U盘启动_04

剩余的可以全部划分为ext4分区。划分完,tf卡分区如图。

arm 架构如何做U盘启动 arm u盘启动盘_linux_05

这是用fdisk看磁盘的信息如图。

arm 架构如何做U盘启动 arm u盘启动盘_arm 架构如何做U盘启动_06

会发现第一个分区的公式是w95 fat32,并没有lba。这里就需要更改一下这个分区的模式。先用l命令查看已知的模式,然后按t,讲磁盘模式更改为w95 fat32(lba)。

arm 架构如何做U盘启动 arm u盘启动盘_指定位置_07

这是磁盘信息就变成w95 fat32 (LBA)

arm 架构如何做U盘启动 arm u盘启动盘_指定位置_08

至此,格式化已完成。

arm 架构如何做U盘启动 arm u盘启动盘_启动盘_09

3、制作boot0和uboot

这里直接使用dd指令,将做好的boot0和uboot拷贝到tf卡的指定位置可以。

指令分别是:

dd bs=1k seek=8 count=20000 if=/dev/zero of=/dev/sdb (清除数据);

dd if=xxx.bin of=/dev/sdb conv=notrunc bs=1k seek=8(写入boot0,这里seek=8,即从8k位置开始写);

dd if=xxx.bin of=/dev/sdb conv=notrunc bs=1k seek=16400(写入uboot,这里seek位置需要自己计算);

到这里,boot0和uboot已经烧写到tf卡里了。把tf卡拿到开发板上启动,已经可以进到uboot了。最后会停在加载kernal那一步。

4、拷贝kernal和rootfs

这一步就比较简单了,将uImage,initrd.img,x.dtb和uEnv.txt几个文件拷贝到boot这个分区就可以。

arm 架构如何做U盘启动 arm u盘启动盘_指定位置_10

然后将buildroot生成的rootfs.tar拷贝到rootfs分区,并解压。

这了还有一点需要注意,那就是解压完最好sync一下。我遇到过好几次,不知道什么原因丢文件。

现在整个制作过程就完成了。