一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分区时的