您的位置:首页 > 其它

全志方案卡启动固件制作原理

2016-07-27 11:56 260 查看
全志SOC的方案,他们的启动卡分区表采用的是MBR分区表。我们通过如下的制作过程可以看出一二。

从sunxi论坛上( http://linux-sunxi.org/Bootable_SD_card )来看全志方案的卡启动固件制作过程。首先看一下卡的存储分布图:

start size usage

0 8KB Unused, available for partition table etc.

8 24KB Initial SPL loader

32 512KB U-Boot

544 128KB environment

672 352KB reserved

1024 - Free for partitions

从这个分布图看,可以看到前8K空间保留用来放分区表。作为MBR分区方式,那么其实它的分区表只存在第一个扇区,也就是前512Byte中,所以这8K大部分空间是没有用到的。

真正的分区空间是从1M的位置开始,所以我们在使用sfdisk分区时,第一个分区起始地址应该为1M。保留了1M的空间给予上面这些特殊的需要。

对于在分区中的空间,是可以被我们的pc识别的,我们可以通过mount挂载相应的设备文件来直接拷贝进去,但是对于保留的这1M空间,我们只能使用dd命令配合seek选项来写入数据了。

首先我们清楚sd上的数据:

1.如果想清除前1M特殊用途的空间,如下所示:

dd if=/dev/zero of=${card} bs=1M count=1


2.如果只想清楚分区表,我们看到其实只保留了前1K的空间:

dd if=/dev/zero of=${card} bs=1k count=1023 seek=1


烧写spl bootloader,烧入到8K的地方:

dd if=spl/sunxi-spl.bin of=${card} bs=1024 seek=8


烧写uboot,烧入到32K的地方:

dd if=u-boot.bin of=${card} bs=1024 seek=32


SD卡分区:

sfdisk -R ${card}
cat <<EOT | sfdisk --in-order -L -uM ${card}
1,16,c
,,L
EOT


由此可见,分区空间是从1M开始算起的,1M到16M的空间作为boot分区。采用sfdisk为MBR分区,分区表如下所示:

/dev/sdb1 1 18 18 17019 c W95 FAT32 (LBA)

/dev/sdb2 19 1019 1001 946445+ 83 Linux

/dev/sdb3 0 - 0 0 0 Empty

/dev/sdb4 0 - 0 0 0 Empty

拷贝内核和内核配置到boot分区1,最新的内核配置应该已经改成dtb了。

mount ${card}${p}1 /mnt/
cp linux-sunxi/arch/arm/boot/uImage /mnt/
cp sunxi-boards/sys_config/a10/script.bin /mnt/
cp boot.scr /mnt/
cp uEnv.txt /mnt/
umount /mnt/


其中的boot.scr和uEnv.txt这两个是用来给uboot读取启动参数用的,script.bin是kernel中的配置项,类似dts的功能。

配置uboot的启动参数:

setenv bootargs console=ttyS0,115200 noinitrd root=/dev/mmcblk0p2 init=/sbin/init rootwait panic=10 ${extra}
fatload mmc 0 0x43000000 boot/script.bin
fatload mmc 0 0x48000000 boot/uImage
bootm 0x48000000


根据boot.cmd生成u-boot能够读取的boot.src文件

mkimage -C none -A arm -T script -d boot.cmd boot.scr


uEnv.txt的内容,用来读取boot.scr

bootenv=boot.scr
loaduimage=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
mmcboot=echo Running boot.scr script from mmc ...; source ${loadaddr}


制作rootfs,解压到分区2:

Using rootfs tarball
mount ${card}${p}2 /mnt/
tar -C /mnt/ -xjpf my-chosen-rootfs.tar.bz2
umount /mnt
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: