一BON 分区表
1建立方式:bon命令
2建立时间:vivi 烧写之后
3用途:存放bootloader,引导kernel,挂载根文件系统。
4命令:bon part 命令用于建立系统的BON 分区表。
BON 分区表被保存到NANDFlash 的最后0x4000 个字节中,即在NAND Flash 的
0x03FFC000 ~0x33FFFFFF 范围内,分区表起始于0x03FFC000(注意: BON 分区是
只针对NAND Flash 设备的一种简单的分区管理方式)。
命令的详细格式如下:
bon part offsets1[flag] offsets2[flag] offsets3[flag] ⋯⋯
参数offsetsN 是每个BON 分区的起始地址;
flag 是跟每个BON 分区的起始地址后面的标识符,这个标识的作用是前面数值的单
位,‘k’’或‘K’表示kilo,千;‘m’或‘M’表示mega,兆。
如果再跟上‘:’,后面再跟上‘m’或‘M’,表示该分区被标记为MTD 分区,
如果没有‘:’以及后面的字母‘m’ 或‘M’,则表示该分区被标记为BON 分区。
bon part 命令在建立系统的BON 分区表,会检测每个分区是否有坏块
(Samsung 的NAND Flash 芯片K9S1208U0M,一个块含32 个页,一个
页有512 个字节,一个块有16K 字节,即0x4000),如果发现坏块将标记
出来,并且在分区表中体现,分区的大小将减去坏快的容量,得到实际可用
的分区容量。bon part info 命令执行后显示的信息中, number_of_badblock
所指示的就是分区中的坏块数目。
5.bon分区被系统检测并挂载,由bon命令建立的mtd分区也可检测挂载
5.1内核对bon分区的检测
法1:向内核传参法linux_cmd_line
vivi/arch/s3c2410/smdk.c
char linux_cmd[] = "noinitrd root=/dev/bon/2 init=/linuxrc console=ttyS0";
可以修改此源码编译
法2:param 命令设置参数
param set linux_cmd_line "root=/dev/bon/2 init=/linuxrc console=ttyS0进行设置
参数传递给内核后,内核启动时会根据此参数将设备/dev/bon/2(flash的bon分区的第三个分区)以cramfs格式挂载到根目录"/"下。
另外linux启动时还会检测vivi中使用bon分区时的分的mtd分区(bon分区时在相应偏移后面加“:m”标志的分区
使用bon命令建立mtd分区:
bon part 0 1296k 21696k:m
表示分了3个分区,2个bon分区(前两个)、1个mtd分区(最后一个)。
内核如何检测bon分区和mtd分区
在vivi中使用bon分区时,会将相应的分区信息放在NAND Flash的最后0x4000个字节中,即在nand flash的0x03FFC000 ~0x33FFFFFF 范围内,分区表起始于0x03FFC000。linux就是通过读取此地址区域的nand获得的bon分区表信息。linux启动时也会检测到vivi使用bon分区时的mtd分区,并将此分区/dev/mtdblock/1挂

本文详细介绍了BON分区和MTD分区在Linux系统中的建立、检测与挂载过程。BON分区主要用于存放bootloader、引导kernel和挂载根文件系统,使用bon part命令创建。MTD分区则用于向Flash中烧写程序时的定位,可通过修改/vivi/arch/s3c2410/smdk.c文件设置。内核通过读取NAND Flash的特定区域获取分区信息,实现对bon和mtd分区的检测与挂载。此外,文章还探讨了如何使用yaffs文件系统以及自动挂载设置。
最低0.47元/天 解锁文章
8105





