uboot 对 FAT 分区的解析

改写 UBOOT 从 U 盘读入固件,然后刷机。发现有的 U 盘无法正确读到分区,跟踪了一下发现自己写的代码有漏洞,只尝试解析分区表里的第一个分区。跟踪的过程中重温了一下 MBR 的格式,这里记录一下 UBOOT 对其中分区表的解析。

MBR

主引导记录(Master Boot Record),位于存储介质的第一个扇区。存储介质可能是硬盘、U 盘或 SD 卡等。

MBR 存在第一个扇区里,总共有 512 字节,其包括三个部分:

  1. 启动代码,前 446 个字节 (0,0x1bd]。一般 U 盘或 SD 卡不作启动用,这段空间的内容无意义。
  2. 分区表 DPT(Disk Partition Table),64 字节 [0x1be, 0x1fd]
  3. 结束标志,2 字节 [0x1fe, 0x1ff],0x55aa,用于标志 MBR 是否有效

分区表

每个分区信息占 16 字节,64 字节的分区表最多可以描述四个分区。如果想划分更多的分区,则要使用到扩展分区。

16 字节的分区信息意义为:

typedef struct dos_partition {
unsigned char boot_ind; /* 0x80 - active */
unsigned char head; /* starting head */
unsigned char sector; /* starting sector */
unsigned char cyl; /* starting cylinder */
unsigned char sys_ind; /* What partition type */
unsigned char end_head; /* end head */
unsigned char end_sector; /* end sector */
unsigned char end_cyl; /* end cylinder */
unsigned char start4[4]; /* starting sector counting from 0 */
unsigned char size4[4]; /* nr of sectors in partition */
} dos_partition_t;
  • boot_ind, 0x80 表示活动分区,0x00 为非活动分区。
  • head,分区起始磁头号
  • sector,分区起始扇区号
  • cyl,分区起始柱面号
  • sys_ind,分区格式,各值的意义见下图
  • end_head,结束磁头号
  • end_sector,结束扇区号
  • end_cyl,结束柱面号
  • start4,分区起始相对扇区号,从磁盘开始到该分区的第一个扇区的偏移量,以扇区数为单位
  • size4,分区的总扇区数

如果分区表项指定的分区一般称为主分区。另外,分区表项还可以指定分区类型为扩展分区 0x7,这样该表项描述的那个分区的起始扇区中还包括一个分区表。

FAT 分区

UBOOT 中按以下条件判断一个分区为 FAT 分区:

  • 分区结束标志 0x55aa
  • 分区的第一个扇区中有 FAT 标志,0x36 字节处有 ”FAT“ 字符,或 0x52 字节处有 “FAT32” 字符

uboot 对 FAT 分区的解析的更多相关文章

  1. Kakfa揭秘 Day4 Kafka中分区深度解析

    Kakfa揭秘 Day4 Kafka中分区深度解析 今天主要谈Kafka中的分区数和consumer中的并行度.从使用Kafka的角度说,这些都是至关重要的. 分区原则 Partition代表一个to ...

  2. uboot之位置无关代码解析

    在之前的话 新年过去了,那么久没有好好学习,感觉好颓废,现在就uboot的一些基础问题做一些笔记,顺便分享给大家,不过由于见识有限,如果有不足之处请多多指教. 位置无关?什么意思?我们先了解一些基础知 ...

  3. uboot和内核分区的改动

    随着内核的更新,内核越来越大,uboot给nand的kernel分区默认是2M的 device nand0 <nandflash0>, # parts = 4  #: name       ...

  4. uboot和内核分区的修改

    随着内核的更新,内核越来越大,uboot给nand的kernel分区默认是2M的 device nand0 <nandflash0>, # parts = 4  #: name       ...

  5. boot camp要求独立的fat分区

    先在windows把u盘用diskpart clean掉分区表 然后在苹果里面,给u盘重新分区,分区表不要选择GUID,选择主引导记录,格式选择fat,OK

  6. linux driver ------ 三星公司uboot模式下更改分区(EMMC)大小fdisk命令 ------ iTOP4412 开发板烧写

    核心板 SCP 1G eMMC:KLM8G------>8G 终端(串口)输入(如果执行过,只需要执行最后一句即可): 开发板一启动,立马在终端按回车,进入 uboot 模式 fdisk -c ...

  7. uboot 下更改NAND的分区 fdisk

    uboot 下更改NAND的分区 fdisk 分类: S5PXX(三星)2012-07-01 18:59 8946人阅读 评论(7) 收藏 举报 flash平台cacheandroid三星null 关 ...

  8. u-boot中分区和内核MTD分区关系

    一.u-boot中环境变量与uImage中MTD的分区关系 分区只是内核的概念,就是说A-B地址放内核,C-D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等. 一般我们只需要分3-4 ...

  9. FAT32 FAT区__FAT表解析

    一. FAT 表概述 位置: 紧跟在文件系统的“保留区”之后 : 有两个数据结构完全相同的FAT(FAT,File Allocation Tbale 文件分配表)组成. 作用: FAT表项,描述文件系 ...

随机推荐

  1. SQL Server on Red Hat Enterprise Linux

    本文从零开始一步一步介绍如何在Red Hat Enterprise Linux上搭建SQL Server 2017,包括安装系统.安装SQL等相关步骤和方法(仅供测试学习之用,基础篇). 一.   创 ...

  2. suse-12-linux gcc gcc-c++离线安装教程,不使用yum等

    最近这几天接手新的项目,要部署新的服务器,采用目前比较主流的框架开发的程序,前后端进行了分离.在这种情况下就需要使用nginx做代理,以便于很好的区分前后端,目前虽然已经有很多很好的发布体系,但是个人 ...

  3. 【PL/SQL编程基础】

    [PL/SQL编程基础]语法: declare 声明部分,例如定义变量.常量.游标 begin 程序编写,SQL语句 exception 处理异常 end: / 正斜杠表示执行程序快范例 -- Cre ...

  4. (总结)CentOS Linux使用crontab运行定时任务详解

    安装crontab:yum install crontabs 说明:/sbin/service crond start //启动服务/sbin/service crond stop //关闭服务/sb ...

  5. Codeforces Round #412 Div. 2 补题 D. Dynamic Problem Scoring

    D. Dynamic Problem Scoring time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  6. 【JavaScript 7—基础知识点】:BOM

    一.基础知识 1.1,什么是BOM BOM(browser object model):也叫浏览器对象模型,它提供了很多对象,用于访问浏览器的功能.BOM缺少规范,每个浏览器提供商又按照自己想法去扩展 ...

  7. PAT天梯赛练习题——L3-005. 垃圾箱分布(暴力SPFA)

    L3-005. 垃圾箱分布 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁 ...

  8. BZOJ 3282 Tree ——Link-Cut Tree

    [题目分析] 明显的LCT维护连通性的题目. access的操作是比较巧妙的,可以把结点到根变成偏爱路径,而且保证了该点是链上深度最深的点. 而且需边的思想也很巧妙,保证了复杂度. 但是只能用于修改路 ...

  9. Linux(10):期中架构(2)--- NFS存储服务 & 实时同步

    1. 共享存储服务概念: # NFS是Network File System的缩写,中文意思是网络文件系统, # 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. 2. ...

  10. CSGO

    CSGO Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Problem D ...