作者 主題: [求救] 關於MTD driver 的問題  (閱讀 20264 次)

0 會員 與 1 訪客 正在閱讀本文。

farfafa

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 於: 2007-03-28 14:28 »
Hello ~ 各位大大

小弟是剛接觸Embedded linux 的新手,

目前在研究 MTD driver,

由於版子(ARMv4)上有 內建的 NAND FLASH,

所以 自己就寫了一個 mtd driver 來驅動 NAND FLASH,

看能不能拿這顆內建的 FLASH來放檔案,

我已經將mtd/util 內的 tools cross compiler 放到版子上,

也可以對 dev/mtd0 ~N 做動作(erase , cp),

但 mount mtdblockN 的時候,

他說 No such device,

寫法如下 :  # mount -t jffs2 /dev/mtdblock1 /mnt
mount: Mounting /dev/mtdblock1 on /mnt failed: No such device

我確定 dev 下有這個 mtdblock1

請問各位大大, 這種情況 是 os 沒找到 板上的 FLASH 裝置嗎?

需要重哪邊開始DEBUG?  3Q~~

還有 我想把內建的 FLASH 分一塊當作 RAMDISK來放ROOT 檔案,

這樣可行嗎 ??  

多謝各位大大 ~~

farfafa

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #1 於: 2007-03-28 20:10 »
哈哈  ~  自己耍白痴

原來是 jffs2 沒編譯進去kernel

現在可以mount了   多謝大家

Arian5

  • 可愛的小學生
  • *
  • 文章數: 29
    • 檢視個人資料
Re: [求救] 關於MTD driver 的問題
« 回覆 #2 於: 2007-03-29 11:16 »
引述: "farfafa"
Hello ~ 各位大大

還有 我想把內建的 FLASH 分一塊當作 RAMDISK來放ROOT 檔案,

這樣可行嗎 ??  

多謝各位大大 ~~


可以的,在你compile kernel的時候把 "MTD partitioning support" 選項
enable就行了,在開機的時候再把參數為給kernel就行了

mtdparts=[你的NAND FLASH DEVICE]:512k(bootloader)ro,2560k(kernel),960k(jffs2),64k(bootloader_env)ro

忘記說了!
"Command line partition table parsing" 這個選項也要

 :wink:

farfafa

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #3 於: 2007-03-29 14:19 »
在開機的時候再把參數為給kernel就行了

mtdparts=[你的NAND FLASH DEVICE]:512k(bootloader)ro,2560k(kernel),960k(jffs2),64k(bootloader_env)ro


這個地方我不太懂 = ="


目前我是用 initramfs 指到我的 rootfs,

CONFIG_INITRAMFS_SOURCE = "DIR/rootfs"

make zImage 後 把zImage load 進去 版子

就可以在我的RAM上看見 rootfs


那假設我要讓 FLASH當作我存 rootfs的地方

該要怎樣設定  @@"  

如果用 initrd

CONFIG_CMDLINE "root=/dev/mtdblock0 ......"

這樣kernel應該看不懂 , 因為mtd根本就還沒建起來

該怎們辦 = ="  

多謝各位大大

Arian5

  • 可愛的小學生
  • *
  • 文章數: 29
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #4 於: 2007-03-29 14:40 »
引述: "farfafa"
在開機的時候再把參數為給kernel就行了

mtdparts=[你的NAND FLASH DEVICE]:512k(bootloader)ro,2560k(kernel),960k(jffs2),64k(bootloader_env)ro


這個地方我不太懂 = ="


目前我是用 initramfs 指到我的 rootfs,

CONFIG_INITRAMFS_SOURCE = "DIR/rootfs"

make zImage 後 把zImage load 進去 版子

就可以在我的RAM上看見 rootfs


那假設我要讓 FLASH當作我存 rootfs的地方

該要怎樣設定  @@"  

如果用 initrd

CONFIG_CMDLINE "root=/dev/mtdblock0 ......"

這樣kernel應該看不懂 , 因為mtd根本就還沒建起來

該怎們辦 = ="  

多謝各位大大


除非你是把mtd device compile成module不然的話在kernel去mount root device之前應該所有的device都已經起來了

還有一點是我個人覺得用initramfs會比用flash當root來的方便,因為在flash上面read,write的速度比在ram慢很多,而且會有root掛掉的風險
我是覺得flash拿來放config之類的東西比較適合。

mtdparts="flash device"<-- 這個是flash的device而不是mtd 的device。

ps:如果你用initramfs的話你會發現他壓縮出來的大小會比jffs2的小很多(不含kernel)

Arian5

  • 可愛的小學生
  • *
  • 文章數: 29
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #5 於: 2007-03-29 14:52 »
對了你的bsp是用busybox的套件還是自己做的?
就是你DIR/root裡面的東西

farfafa

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #6 於: 2007-03-29 14:54 »
busybox的套件  

自己做大了點 ^^"

Arian5

  • 可愛的小學生
  • *
  • 文章數: 29
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #7 於: 2007-03-29 15:00 »
我不喜歡用busybox的東西我都是自己拿debian來包我自己的bsp
做起來大概10M左右,busybox有些功能參數不太一樣用起來很麻煩。

farfafa

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #8 於: 2007-03-29 15:30 »
我只是想玩玩看把 FLASH 存 rootfs

不過之後應該不會這樣搞 畢竟FLASH不大 速度又慢

我是用 initrd 指到 rootfs.jffs2.gz
CONFIG_CMDLINE="root=/dev/mtdblock0 mem=32M init=/init rw console=uart,shift,2,io,0xFA100000 initrd=0x900000,20480K initcall_debug user_debug=31 1"

問題如下:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,0)

major 31 = mtdblock

這問題該怎們解決 = =?

Arian5

  • 可愛的小學生
  • *
  • 文章數: 29
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #9 於: 2007-03-29 15:51 »
引述: "farfafa"
我只是想玩玩看把 FLASH 存 rootfs

不過之後應該不會這樣搞 畢竟FLASH不大 速度又慢

我是用 initrd 指到 rootfs.jffs2.gz
CONFIG_CMDLINE="root=/dev/mtdblock0 mem=32M init=/init rw console=uart,shift,2,io,0xFA100000 initrd=0x900000,20480K initcall_debug user_debug=31 1"

問題如下:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,0)

major 31 = mtdblock

這問題該怎們解決 = =?


你是用u-boot嗎?
看這個訊息應該是kernel不認得mtdblock0這個device的filesystem

farfafa

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #10 於: 2007-03-29 16:27 »
我用ARMBOOT

我在來想辦法解決好了 ^^"  

多謝Arian5 大大

Arian5

  • 可愛的小學生
  • *
  • 文章數: 29
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #11 於: 2007-03-29 16:33 »
引述: "farfafa"
我用ARMBOOT

我在來想辦法解決好了 ^^"  

多謝Arian5 大大


忽然想到你有把jffs2的image copy到mtdblock0這個device上嗎?
也就是你flash上面嗎?

farfafa

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #12 於: 2007-03-29 16:44 »
~~ 我不太懂你的意思 ^^?

我已經把MTD, jffs2建起來了

所以我可以用在版子上的FLASH做動作

例如
erase mtd0
cp xxx.jffs2 /dev/mtd0
mount -t jffs2 /dev/mtdblock0 /mnt


所以你的意思是 FLASH裡面要先有東西??

還是 ...?

Arian5

  • 可愛的小學生
  • *
  • 文章數: 29
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #13 於: 2007-03-29 16:56 »
引述: "farfafa"
~~ 我不太懂你的意思 ^^?

我已經把MTD, jffs2建起來了

所以我可以用在版子上的FLASH做動作

例如
erase mtd0
cp xxx.jffs2 /dev/mtd0
mount -t jffs2 /dev/mtdblock0 /mnt


所以你的意思是 FLASH裡面要先有東西??

還是 ...?


看來是可以mount的,你注意一下在kernel panic之前的message應該還有一些訊息。

有另外一個方法就是你去找別人做好的image放到你的mtdblobk0上去看看可不可以開。

先把問題釐清比較好debug.....

farfafa

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #14 於: 2007-03-29 18:11 »
恩  VFS問題解決了

要多加上 -rootfstype=jffs2

但還是有問題,  快暈到了 = =

0x00000000-0x00400000 : "Bootloader"
ftl_cs: FTL header not found.
0x00400000-0x01000000 : "Kernel image"
ftl_cs: FTL header not found.
0x01000000-0x01800000 : "Initial ramdisk image"
ftl_cs: FTL header not found.
0x01800000-0x02000000 : "Persistant storage"
ftl_cs: FTL header not found.
NET: Registered protocol family 2
IP route cache hash table entries: 128 (order: -3, 512 bytes)
TCP established hash table entries: 512 (order: -1, 2048 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 512 bind 512)
TCP reno registered
TCP bic registered
Adding console on ttyS0 at I/O port 0xfa100000 (options '38400')
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 100K
Warning: unable to open an initial console.
Failed to execute /init.  Attempting defaults...
Kernel panic - not syncing: No init found.  Try passing init= option to kernel

說找不到 init

我是先把 rootfs -> rootfs.jffs2 -> rootfs.jffs2.gz

mkfs.jffs2 -r source -o rootfs.jffs2 -e 0x40000

gzip -9 rootfs.jffs2

然後執行
make bootpImage INITRD=/dir/rootfs.jffs2.gz

不知道這樣有沒有錯 ^^"

Arian5

  • 可愛的小學生
  • *
  • 文章數: 29
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #15 於: 2007-03-29 22:51 »
我記得NAND FLASH在用mkfs.jffs作的時候好像要加一個參數 --pagesize=SIZE
你查看看
在這看來root deivce是已經有mount起來了,我看到你有下了 init=/init 這個參數你的"/"下面有init這個檔案嗎?

其實有另一個方法可以debug就是你先用initramfs開到single usermode
然後mount /dev/mtdblock0 再把init交到/dev/mtdblock0去

命令順序如下

1. mkdir /jffs2
2. mount -t jffs2 /dev/mtdblock0 /jffs2
3. cd /jffs2
4. /jffs2/bin/pivot_root . /jffs2/mnt  
5. exec chroot . /sbin/init <dev/ttyS0 >dev/ttyS0 2>&1

以上的命命請依照你命令實際的路徑做更換

這樣可以讓linux交給/dev/mtdblock0 也就是/jffs來做 init 的動作 (看你 /etc/inittab的內容)

你先試看看這樣可不可以開....

farfafa

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #16 於: 2007-03-30 14:01 »
暈  ~ 我發現我的busybox 沒把pivot_root system call 給編譯進去

看來還有一段路要走 = ="

多謝Arain5 成功後再跟大家分享

Arian5

  • 可愛的小學生
  • *
  • 文章數: 29
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #17 於: 2007-03-30 14:43 »
引述: "farfafa"
暈  ~ 我發現我的busybox 沒把pivot_root system call 給編譯進去

看來還有一段路要走 = ="

多謝Arain5 成功後再跟大家分享


我遇到錯誤也是都自己一個人一直try and error搞定的,有時候搞各好幾天都會有,不過當最後成功的那一刻真的是用爽字都不足以形容那份高興。

所以加油吧!

farfafa

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #18 於: 2007-04-04 15:14 »
目前我的做法
rootfs 轉 rootfs.jffs2
armboot:
cp.b rootfs.jffs2 mtdblock_address

kernel cmd line : root=/dev/mtdblock0 rootfstype=jffs2 mem=8M init=/init rw console=uart,shift,2,io,0xFA100000 initcall_debug user_debug=31 1

這樣開機後, 就可以了 ~  

不過這方法必須要先用arm boot 先把rootfs放入flash

看各位大大有沒有更方便的方法, 多謝各位了

yaoyaohsu

  • 可愛的小學生
  • *
  • 文章數: 10
    • 檢視個人資料
[求救] 關於MTD driver 的問題
« 回覆 #19 於: 2007-10-11 12:30 »
kernel cmd line : root=/dev/mtdblock0 rootfstype=jffs2 mem=8M init=/init rw console=uart,shift,2,io,0xFA100000 initcall_debug user_debug=31 1
請問上面的內容是要加在那啊
如果要改 kerel command line 後面的路徑要在那改啊