酷!學園

技術討論區 => Embedded 討論版 => 主題作者是: narsilx 於 2012-04-27 16:06

主題: 請教u-boot啟動後的環境
作者: narsilx2012-04-27 16:06

各位先進好, 我有些問題想請教

目前手上有塊板子,上面的CPU是ARM,
u-boot完成工作,我就停下他不進Linux kernel

目前我只知道透過指令能看到memory, nand flash
此時memory只有physical address供我操作(所以跟MMU無關, 因為MMU是搭配OS作用?)

在這環境下我想自己來操作板子上的LED燈(無其他程式可供利用)
我在linux driver書上找到操作device的有兩種模式,

一種是Memory Mapped,device的pin腳已經對應到特定memory address
另一種是Device I/O, 需用asm特別的指令去access io address
ARM似乎是屬於前者

但我現在的環境不在OS裡,此時就已經有Memory Mapped I/O?
 所以要操作板子上的LED燈
只要知道LED的pin對應memory address直接對address作規定initial步驟走
就可以操作該LED嗎?

因為我也不清楚Memory mapped I/O是由OS實現還是硬體就已經實現,

是看到前人寫的東西,來推測,譬如說watchdog就直接對特定address操作而已
主題: Re: 請教u-boot啟動後的環境
作者: netman2012-04-27 16:16
哇,太高深了...

只能幫推~~~
主題: Re: 請教u-boot啟動後的環境
作者: zzz00722012-04-28 00:23

各位先進好, 我有些問題想請教

目前手上有塊板子,上面的CPU是ARM,
u-boot完成工作,我就停下他不進Linux kernel

目前我只知道透過指令能看到memory, nand flash
此時memory只有physical address供我操作(所以跟MMU無關, 因為MMU是搭配OS作用?)

在這環境下我想自己來操作板子上的LED燈(無其他程式可供利用)
我在linux driver書上找到操作device的有兩種模式,

一種是Memory Mapped,device的pin腳已經對應到特定memory address
另一種是Device I/O, 需用asm特別的指令去access io address
ARM似乎是屬於前者

但我現在的環境不在OS裡,此時就已經有Memory Mapped I/O?
 所以要操作板子上的LED燈
只要知道LED的pin對應memory address直接對address作規定initial步驟走
就可以操作該LED嗎?

因為我也不清楚Memory mapped I/O是由OS實現還是硬體就已經實現,

是看到前人寫的東西,來推測,譬如說watchdog就直接對特定address操作而已
雖然只有把boot loader燒壞過的經驗,不過以以前的經驗來說,boot loader的shell應該有直接寫資料到記憶體的指令。而我上次看到device map IO應該是大學微處理機的8088組語吧。

最簡單的方式就是看Data Sheet的GPIO位址,看一下LED接到第幾個GPIO後,在Bootloder shell直接對那個記憶體填值就一翻兩瞪眼。最多久是填一(pull low?)或零(pull high?)點亮的差別,以及是否需要先設定那個GPIO位址的方向是否為output(可能要寫另外一個位址)。

不過要控制更精密的週邊,扯到timing的話,我想應該會改到code。不知道現在有沒有比較方便的方式,不然bootloader燒掛最壞的情況要把IC解焊然後把golden image透過燒錄器燒回去再焊回去。