題外話:
boot loader啟動時通常會從可儲存式的記憶體上取出資料放在memory底下進行運作,這時u-boot通常都會支援各種型態的flash, 像nand flash, nor flash, SPI serial flash,而程式越來越大,快閃記憶體也越來越大,nand 形式的flash 越來越普遍,但nand flash的特性雖然容量可撐大,但要透過一些演算法來紀錄與還原bad block的issue,這對上層寫AP的人而言,也是挺麻煩的。U-BOOT 底下通常有許多參數要進行設定,尤其是bootargs這塊,要是沒設定對,是沒辦法順利進到console的,bootargs底下,尤其針對各種格式的file system設定額外重要,像是mount jffs2如下:
set bootargs 'console=ttyS2,115200n8 root=/dev/mtdblock3 rw rootfstype=jffs2 mem=128M earlyprintk'
上面設定的解說,console 為 ttyS2 這個device node 來做debug port,通常一顆soc有多個ttyS,針對需求作設定,root=/dev/mtdblock3 的意思是說 我們的root filesystem 會建立在/dev/mtdblock3底下,這麼做是因爲,在kernel的設定當中我們把filesystem的資料放在mtdblock3底下,所以直接從這塊當作我們的file system,rootfstype = jffs2 是檔案格式為jffs2,mem=128 為我們os的配置記憶體為128m 可進系統後透過 cat /proc/meminfo來進行驗證。
ext2格式的ramdisk
set bootargs 'console=ttyS2,115200n8 root=/dev/ram rw rootfstype=ext2 mem=256M earlyprintk initrd=0x82000000,32MB'
這邊比較不一樣的是有initrd這個部分,這為filesystem 在0x82000000位置下啟動,而32mb為此壓縮過後的ramdisk size。
這邊有個值得注意的地方,在kernel 的menuconfig下可以給定ram disk 的數量以及,ram disk的size(k bytes),路徑為device drivers -> Block devices -> (Defult number of RAM disks)/(Default RAM disk size)
如果數量設16 則在系統下可看到 /dev/ram0 ~15
ramdisk size 如果設32767 則每一個/dev/ram 都有32767kbytes
ramdisk 真實大小會吃掉 kernel 所分配的memory size,所以你預計的ramdisk size 必須小於所配置的kernel size
而在製作ramdisk的 dd 指令時,就是給你想要filesystem的空間,如果你給8m 則他最多就只有8m的file system,不管kernel調多少都沒用,所以dd的size 必須同步或小於ramdisk size 不然也會mount 不上去
沒有留言:
張貼留言