分类: LINUX
2012-05-28 04:10:37
因為有網友問到這個問題,所以我把它拿出來討論,熟讀LDD3(LINUX Device Driver3)的朋友應該都知道Linux檔案系統和block driver之間的關係,在Linux kernel stack中,block driver負責驅動裝置上的硬體,而file system就是對block drvier下讀取和寫入的指令,所以只要能正確驅動平台上儲存裝置的block drvier,那你可以在此block driver上操作任何一種file system
為了這次的demo,必需再修改arch/arm/plat-s3c24xx/common-smdk.c這個檔案,這次把mtd partition調整為4個partition,最後一個partition放squashfs的image,修改範例如下
燒寫完kernel後開機可以從/proc/mtd中得知Linux目前mtd分割區的狀態,接下來我們用
Flash_eraseall把/dev/mtd3整塊抹掉,並把製作好的squashfs的image燒到/dev/mtd3,簡列步驟如下(mtd
utility簡介請參考拙作JFFS2 file system-老而彌堅的檔案系統)
(1)flash_eraseall /dev/mtd3
(2)nandwrite -p /dev/mtd3 squashfs.root
燒錄完成後重新開機,修改uboot的bootargs為mem=64M console=ttySAC0 root=/dev/mtdblock3 rootfstype=squashfs,接著啟動Linux,就會發現Linux的root file system已經變為squashfs
1.staticstruct mtd_partition smdk_default_nand_part[]={
2.[0]={
3..name ="Boot Agent",
4..offset
5..size = SZ_256K,
6..mask_flags = MTD_CAP_ROM,
7.},
8.[1]={
9..name ="S3C2410 flash partition 1(Kernel)",
10..offset = SZ_2M,
11..size = SZ_4M,
12..mask_flags = MTD_CAP_ROM,
13.},
14.[2]={
15..name =
16..offset = SZ_8M,
17..size =/*SZ_4M*//*SZ_50M*/SZ_8M,
18.//.mask_flags = 0,