請問可以在開機後再增加 mtd partition嗎?

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

請問可以在開機後再增加 mtd partition嗎?

文章herve » 週四 8月 30, 2007 2:52 pm

請問可以在開機後再增加 mtd partition?

現在我的FLASH 已經可以在開機的過程中 增加5個 static MTD partition.

現在想要在開機後增加一個redboot config的磁區
想用程式來修改boot script,但不想更動到核心的部份.
可以做的到嗎?可以的話 麻煩給個方向 謝謝您…
herve
可愛的小學生
可愛的小學生
 
文章: 2
註冊時間: 週四 8月 30, 2007 2:44 pm

文章herve » 週三 9月 05, 2007 10:01 am

研究了一陣子
可以用了
可是還是要更改到核心
因為之前把整個FLASH 作 request_mem_region 及 ioremap
所以新做的module 就無法再做一次相同的動作
可以 cat /proc/iomem 看到這方面的資訊

在新的與舊的partition map module 要注意2點

1. 不能有重複的部份
#define WINDOW_ADDR 0x50040000
#define BUSWIDTH 2
#define WINDOW_SIZE 0x00A00000

2. 要注意offset,要仔細算好.
partition offset and size

這樣就OK了

但不要忘了做 device node
insert 新的 partition map module
這樣就有新的mtd partition可以使用了.

以上是自行研究的結果
有不正確的地方,也請大家多多指教
謝謝!!
herve
可愛的小學生
可愛的小學生
 
文章: 2
註冊時間: 週四 8月 30, 2007 2:44 pm

文章silverfox » 週三 9月 19, 2007 10:33 am

請問:
關於mtd部份,已經在開機過程載入driver(已經有partition在nor flash上)

若是不修改原本的kernel image(此部份已經有包含有flash driver)
而重新編譯出另外一份flash driver modules,想法是:新增一個mtd device,上面仍須保留舊的parition,不知是否可行!?

ps:目前由於flash實體位置與原本driver相同,所以在新的driver modules沒有再做一次request_mem_region,只有重新做ioremap取得虛擬位址,但似乎會造成kernel panic ><!

請問各位大大,上面方法是否會有問題?或是有新的方法可以在不改原本kernel下,新增一個mtd device!
謝謝!
silverfox
可愛的小學生
可愛的小學生
 
文章: 3
註冊時間: 週三 9月 19, 2007 10:31 am

文章訪客 » 週四 9月 20, 2007 2:20 pm

應該不太可能讓占住資源的driver 讓出資源吧
除非driver移除, 讓資源空出來
才能讓別的driver用吧
況且舊的driver那個區段應該也做過一次ioremap
再做一次 ioremap
kernel panic是正常的吧
訪客
 

文章silverfox » 週五 9月 21, 2007 6:53 pm

感謝樓上大大的回復,

現在的作法是:nor flash 上面有6個partitions,
我只有ioremap出某一個partition (因為其他partition 上面有東西 不能讓我測試),kernel panic後來找到是其他部份的問題,似乎不是重新ioremap的問題!

而現在,已經在mtd下註冊好新的mtd device(就是上面的某一個partition) 並新增了device node : /dev/xxx
ps:這邊我用的major number與預設的90 不同,為了避免呼叫舊的driver!

上面的意思是:將mtd的多個.o檔都 insert 成功(mtdchar.o ; cfi_cmdset_0002.o; chipreg.o ; gen_prob.o; cfi_probe.o; mtdcore.o; mychip.o)

但是 又面臨到一個問題: 當我用ap呼叫wirte ,他只跑到mtdchar.c:mymtd_write裡面有個ret = (*(mtd->write))(mtd, pos, len, &retlen, kbuf);
(這裡是我自己修改過的) 再往下層卻被沒呼叫 (因為我每個function進入都會印訊息),估計應該是呼叫到舊的driver!!

不知道是哪邊有問題!? 感謝各位大大指教

謝謝!
silverfox
可愛的小學生
可愛的小學生
 
文章: 3
註冊時間: 週三 9月 19, 2007 10:31 am

文章silverfox » 週一 10月 01, 2007 10:18 am

自己回 ~
由於mtd的open時候,已經有問題!
問題點是: device node可以正常沒錯,但是,open去呼叫的funciton卻是kernel 裡面原本的get-mtd-driver,因此,需要把自己的模組內的function name給改掉! 才不會又呼叫到舊的driver,這樣就能註冊成功一個新的mtd device!

希望對以後有需要的人有幫助!
silverfox
可愛的小學生
可愛的小學生
 
文章: 3
註冊時間: 週三 9月 19, 2007 10:31 am


回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客