地址的再次整理与总结

来源:互联网 发布:win10不显示可用网络 编辑:程序博客网 时间:2024/05/22 11:59

地址的再次整理与总结

首先MFG工具发送mksdcard.shmx53MMC/SD卡进行分区,使用sfdisk最最主要的目录是在MMC/SD卡上产生MBR信息。这个主引导记录产生在第一个扇区(前512B)上。

1、 uboot相关地址

<CMD type="push"body="send" file="files/u-boot-mx53-smd.bin">Sendingu-boot.bin</CMD>

<CMD type="push"body="$ dd if=$FILE of=/dev/mmcblk0 bs=512 seek=2 skip=2">writeU-Boot to sd card</CMD>

uboot.bin文件跳过前1KB,剩下的写到同样跳过前1KBMMC/SD设备上。

设备上跳过1KB是为了防止MBR被覆盖,(是不是跳过512B就可以了呢?)

Uboot.bin文件跳过前1KB又是为了什么?

2、 kernel相关地址

<CMD type="push"body="send" file="files/uImage">Sending kerneluImage</CMD>

<CMD type="push"body="$ dd if=$FILE of=/dev/mmcblk0 bs=512 seek=2048">write kernelimage to sd card</CMD>

将kernel直接烧写到MMC/SD的1MB地址上。

3、 rootfs相关地址

<CMD type="push"body="$ mkfs.ext3 -j /dev/mmcblk0p1">Formatting rootfspartition</CMD>

<CMD type="push"body="$ mkdir -p /mnt/mmcblk0p1"/>

<CMD type="push"body="$ mount -t ext3 /dev/mmcblk0p1 /mnt/mmcblk0p1"/>

<CMD type="push"body="pipe tar -jxv -C /mnt/mmcblk0p1"file="files/rootfs.tar.bz2">Sending and writtingrootfs</CMD>

<CMD type="push"body="frf">Finishing rootfs write</CMD>

<CMD type="push"body="$ umount /mnt/mmcblk0p1">Unmounting rootfspartition</CMD>

这里烧写文件系统没有采用直接往物理地址写入的方法,而是采用mx53预先在RAM中构建的包括MMC/SD卡驱动的内核,借用于它将设备挂载上节点上,然后将文件系统写入。

也就是说文件系统的地址是由内核中对MMC/SD中分区中的代码指定的。

更准确的说应该是由于使用了sfdisk对SD卡进行了分区,并格式化成ext3文件系统了,内核通过VFS调用ext3,读取存储在SD中的相关信息,了解SD是以ext3文件系统来展示的,故再读以相应的分区表。实现挂载与写入的。

 

    使用sfdisk进行分区和产生MBR以及写入uboot和内核都是对设备进行操作的,而格式化是对设备的分区进行操作的,并且分区的时候,第一个分区的偏移已经跳过了uboot和kernel的地址范围,在它们俩之外,所以不会影响已经写入的MBR和内核。

总结一下SD卡的分区如下:

1、partition table       分区表,包括MBR,前1KB

2、bootloader                            uboot区域

3kernel                                  内核区域       地址:1MB开始 0x100000/512=0x800

                                          Mmcread 1 ${loadaddr} 0x800 0x1800就是从1MB地址开始读取

4rootfs                            分区的时候将第一个分区表建立在偏移量为8192*512=4MB地址上,这个地址会被写入到partition table分区表中,内核的ext3文件系统先会读取SD卡头部的分区表,自然就知道了rootfs所在分区的物理地址。因为各个分区的物理地址就存放在分区表中。

 

明白了,恍然大悟啊。哈哈。

唯一不明白的就是一点:

<CMD type="push" body="$ dd if=$FILEof=/dev/mmcblk0 bs=512 seek=2 skip=2">write U-Boot to sdcard</CMD>

这里uboot.bin为什么要跳过1KB?????