vivi中bon和part的區別:
1、vivi(bootloader)啓動後可使用命令:part show查看mtdpart信息;bon part info查看bon分區信息。
2、vivi中的bon分區相關:vivi啓動linux時會將linux_cmd_line(其在vivi內核的位置爲:
vivi/arch/s3c2410/smdk.c中的:char linux_cmd[] = "noinitrd root=/dev/bon/2 init=/linuxrc
console=ttyS0";可以修改此源碼編譯,也可以進入vivi後通過命令: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”標誌的分區。例如:vivi命令——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掛載到/mnt/yaffs下。這樣/mnt/yaffs就可以進行讀寫,並且掉電保存。此掛載信息的修改是在
根文件系統目錄結構中的/etc/fstab中的:/dev/mtdblock/1 /mnt/yaffs yaffs defaults 1 1,
具體有關fstab文件的含義請參考文件:fstab文件詳解-掛載.txt。
3、vivi中的part分區相關:在使用vivi進行燒錄vivi、kernel、rootfs時怎麼知道根據相應命令把相應的
鏡像保存到nand的適當位置呢?起始也很簡單。在vivi源碼vivi/arch/s3c2410/smdk.c中的:
#ifdef CONFIG_S3C2410_NAND_BOOT
mtd_partition_t default_mtd_partitions[] = {
{
name: "vivi",
offset: 0,
size: 0x00020000,
flag: 0
}, {
name: "param",
offset: 0x00020000,
size: 0x00010000,
flag: 0
}, {
name: "kernel",
offset: 0x00030000,
size: 0x001d0000, // 2M sector
flag: 0
}, {
name: "root",
offset: 0x00200000,
size: 0x03000000,
flag: MF_BONFS
}
};
#endif
定義了相應的默認part分區信息。當執行命令:load flash kernel x時,vivi就會查找此表中的
default_mtd_partitions[i].name項,如果name等於kernel則將offset返回,並將相應的鏡像如:zImage保存到
flash的kernel分區信息所指示的offset位置(此處查看上表爲:0x00030000,)。相應當vivi執行命令boot命令啓
動內核時會從nand的0x00030000,位置讀取size個字節到sram中。然後再調到linux的入口地址處執行。
4、分析:根據上述bon和part分區的介紹,您是否還有疑問?從上可以得出,linux啓動時只需要使用bon
分區時的根文件系統分區(必須爲bon格式)和需要掛載yaffs文件系統的分區(必須標記爲mtd分區)。由於vivi燒
寫rootfs的位置是根據part分區定的。所以在使用bon進行分區時必須有一個和default_mtd_partitions中root分區
的起始地址和大小相同的bon分區,例如:此處必須有一個起始地址和大小分別爲0x00200000,0x03000000的bon分區
。另外如果要掛在yaffs文件系統,bon分區時必須有一個mtd分區。如果想通過vivi向flash的其它分區寫入數據的
話,此處的default_mtd_partitions必須加入相應的分區信息。例如:default_mtd_partitions中加入分區
{
name: "yaffs",
offset: 0x03200000,
size: 0x00500000,
flag: 0
}
那麼如果使用bon分區時有一個起始地址和大小分別爲0x03200000, 0x00500000的分區。則使用load flash yaffs x
可以燒錄相應文件。如果符合相應格式在linux可以使用命令:mount -t filesystem /dev/bon/x /mnt/bonx掛載