上面罗嗦了这么多,其实就是为了将uboot和kernel烧写到TF卡上并能够启动,OK,让我们先从分区开始:
A20 芯片上电启动的时候,会读取SD卡最前面的 1M 内容,从而得到 bootloader,所以我们需要把 u-boot 写到SD卡的前1M区间。
其中详细的SD卡布局如下:
起始
大小
用途
0
8KB
存放分区表等内容
8
24KB
SPL loader
32
512KB
u-boot
544
128KB
environment
672
352KB
保留
1024
-
用于剩余分区
接下来,我们开始使用fdisk进行分区(由于sfdisk对部分TF不兼容,故除非你真的知道怎么用sfdisk,否则不要使用):
将TF卡插到电脑上并确认设备名,为不至于混淆,我们使用sdX代替,您需要根据自己的情况修改,如sdb:
card=/dev/sdX dd if=/dev/zero of=${card} bs=1M count=1 # 把SD卡前1M的区域填充为0,预留给 u-boot sfdisk -R ${card} # 重新读取${card} fdisk ${card} #使用fdisk进行分区
具体分区步骤如下:
建立第一个分区
root@kubuntu:~/src/u-boot-sunxi# fdisk ${card}
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x911332e8.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): n #键入n然后回车
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): #直接回车
Using default response p
Partition number (1-4, default 1): #直接回车
Using default value 1
First sector (2048-15278079, default 2048): #直接回车
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-15278079, default 15278079): +64M #键入+64M后回车,即分区大小为64M
建立第二个分区
Command (m for help): n #键入n然后回车
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): #直接回车
Using default response p
Partition number (1-4, default 2): #直接回车
Using default value 2
First sector (133120-15278079, default 133120): #直接回车
Using default value 133120
Last sector, +sectors or +size{K,M,G} (133120-15278079, default 15278079): #直接回车,即第二个分区使用全部剩余空间
Using default value 15278079
接下来指定分区类型:
Command (m for help): t #键入t然后回车
Partition number (1-4): 1 #键入1然后回车,即指定第一个分区
Hex code (type L to list codes): c #键入c然后回车,即指定第一个分区为vfat
Changed system type of partition 1 to c (W95 FAT32 (LBA))
Command (m for help): w #键入w然后回车,保存分区表
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
格式化分区:
mkfs.vfat ${card}1 mkfs.ext4 ${card}2 #需要稍等片刻
然后写入bootloader:
cd $WORK_DIR/u-boot-sunxi dd if=u-boot-sunxi-with-spl.bin of=$card bs=1024 seek=8
最后安装内核 uImage,设置启动参数:
mount ${card}1 /mnt mkdir /mnt/boot cp $WORK_DIR/linux-sunxi/arch/arm/boot/uImage /mnt/boot cp $WORK_DIR/sunxi-boards/sys_config/a20/script.bin /mnt/boot cp $WORK_DIR/boot.scr /mnt/ sync && umount /mnt
至此,启动到linux内核的工作已经完成,接下来我们就可以观看linux内核启动过程、进行内核调试了。