作为一个linux初学者,这会总命令行的方式很不习惯,特别是制作启动盘,确实花费了很多时间去学习。这里把制作启动盘的过程简单写一下。可能过程有一些重复的,以后有经验了再优化吧。
硬件环境:orangepi3;芯片:全志H6;源代码:linux4.9
首先看一下好用的tf卡的格式。其中前20m未分区的空间用来放boot0和uboot。分区1用来放kernal、intird和一些配置文件。分区2是放rootfs。
这里需要注意的是分区1的标识是lba(逻辑块寻址模式),因为这个问题开始折腾了很久。
下面开始正式制作启动盘。
1、格式化TF卡
使用fdsik /dev/sdb,查看tf卡。然后按m,查看支持的命令。可以先按p,查看现在的分区状态。
然后按d,把两个分区都删了。
注意:完了事别忘了按w,保存。
2、分区
分区的话可以使用fdisk去新建分区,但是需要计算sector的起始位置,然后一步到位。也可以使用类似于gparted这种分区软件,操作比较简单。如图所示
这里需要注意的是:前面剩余空间按需要留20m,新分区大小50m,文件系统为fat16或者fat32。
剩余的可以全部划分为ext4分区。划分完,tf卡分区如图。
这是用fdisk看磁盘的信息如图。
会发现第一个分区的公式是w95 fat32,并没有lba。这里就需要更改一下这个分区的模式。先用l命令查看已知的模式,然后按t,讲磁盘模式更改为w95 fat32(lba)。
这是磁盘信息就变成w95 fat32 (LBA)
至此,格式化已完成。
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这个分区就可以。
然后将buildroot生成的rootfs.tar拷贝到rootfs分区,并解压。
这了还有一点需要注意,那就是解压完最好sync一下。我遇到过好几次,不知道什么原因丢文件。
现在整个制作过程就完成了。