Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1976245
  • 博文数量: 185
  • 博客积分: 10707
  • 博客等级: 上将
  • 技术积分: 1777
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-19 17:31
文章分类

全部博文(185)

文章存档

2014年(1)

2012年(6)

2011年(27)

2010年(13)

2009年(75)

2008年(63)

分类: LINUX

2008-11-13 20:40:09

因為有網友問到這個問題,所以我把它拿出來討論,熟讀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簡介請參考拙作)
(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. static struct mtd_partition smdk_default_nand_part[] = {
   2. [0] = {
   3. .name = "Boot Agent",
   4. .offset = 0,
   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 = "S3C2410 flash partition 2(File system)",
  16. .offset = SZ_8M,
  17. .size = /*SZ_4M*//*SZ_50M*/SZ_8M,
  18. //.mask_flags = 0,

  19. },
  20. [3] = {
  21. .name = "S3C2410 flash partition 3(Other file system)",
  22. .offset = SZ_16M,
  23. .size = SZ_8M,

阅读(2566) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~