博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
地址的再次整理与总结
阅读量:4060 次
发布时间:2019-05-25

本文共 1914 字,大约阅读时间需要 6 分钟。

地址的再次整理与总结

首先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?????

 

转载地址:http://njzji.baihongyu.com/

你可能感兴趣的文章
《数据库系统概论》 第六章 关系数据理论
查看>>
《数据库系统概论》 第七章 数据库设计
查看>>
SQL语句(七)实体完整性
查看>>
SQL语句(八)参照完整性
查看>>
SQL语句(九)用户自定义完整性
查看>>
数据库复习(八)——Transact-SQL程序设计
查看>>
数据库复习(九)——存储过程
查看>>
数据库复习(十)——触发器
查看>>
Python入门(二)开发环境的搭建以及集成开发环境pycharm的安装
查看>>
Python入门(四)使用Python实现简单的通讯录(1.0版本)
查看>>
操作系统复习(一) 概述——操作系统设计目标 发展 分类 功能 特征
查看>>
操作系统复习(二)——进程的概念 特征 状态及转换 控制 同步及典型问题 通信
查看>>
《计算机网络》第四章 网络层 ——分类的IP 划分子网 构成超网 路由选择协议 路由器构成
查看>>
《计算机网络》第五章 运输层 ——TCP和UDP 可靠传输原理 TCP流量控制 拥塞控制 连接管理
查看>>
操作系统复习(三)处理机调度——三级调度体系 调度算法 死锁的概念及处理 c语言实现银行家算法
查看>>
线性代数(一)线性方程组与矩阵——高斯消元法 矩阵的初等变换
查看>>
线性代数(二)矩阵的行列式——行列式的计算 初等变化性质 矩阵的秩
查看>>
线性代数(三)矩阵代数——矩阵的乘法 逆矩阵定义以及求解
查看>>
线性代数(四)n维向量
查看>>
Python入门(一)Python简介
查看>>