使用 NOR Flash 中的supervivi 下载裸机程序到NandFlash
?不容易啊,終于把 將MDK程序下載到我的mini2440開發板上的nand flash的方法找到了,我是利用韋東山老師的那套方法即利用DNW和supervivi下載到nand flash的。當然,只是方法之一,因為我能隱約的感覺到還可以使用MDK直接下載。下面我就將下載到nand flash的方法步驟完整的貼出來。
?? 在講解方法之前,我還是想說明幾點原理,避免知其然而不知其所以然。
supervivi的各功能選項說明
???
?? 功能[x]:對Nand Flash進行默認分區,此命令僅對Linux系統有效。
?? 功能[v]:通過USB下載Linux Bootloader之vivi到Nand Flash的 vivi 分區
?? 功能[k]:通過USB下載Linux 內核到Nand Flash的 kernel 分區
?? 功能[y]:通過USB下載 yaffs 文件系統映像到 Nand Flash的 root 分區
?? 功能[a]:通過USB下載用戶程序到Nand Flash中,一般這樣的用戶程序為bin可執行文件,如2440test(需要支持超過4K限制)、uCos2(開發板中帶的uCos2支持 Nand Flash啟動)、U-Boot等;當然,也可以使其他任意大小的bin程序。
?? 功能[n]:通過USB下載WinCE之啟動程序Nboot到Nand Flash的root分區
?? 功能[l ]:通過USB下載WinCE的啟動logo
?? 功能[w]:通過USB下載WinCE發行映像NK.bin到Nand Flash
?? 功能[d]:通過USB下載程序到指定內存地址(通過DNW的Configuration/Option選項指定運行地址)并運行。對于我的mini2440開發板,SDRAM的物理起始地址是0x3000 0000,結束地址是0x3400 0000,大小為64MB,另外BIOS的USB下載功能時應指定地址在0x30000000 - 0x33de8000之間。
?? 功能[z]:通過USB下載Linux內核映像文件zImage到內存中,下載地址為0x30008000
? ?功能[g]:運行內存中的Linux內核映像,該功能一般配合功能[z]一起使用
?? 功能[f] :擦除Nand Flash,執行此功能將會擦除整片Nand FLash 中的數據
?? 功能[b]:啟動系統,如果燒入了Linux或者Wince,執行此命令將自動識別啟動系統
?? 功能[s]:設置Linux啟動參數,詳細見子菜單說明
?? 功能[u]:備份整個Nand FLash中的功能,通過USB上傳到PC存儲為一個文件,該功能類似于PC系統中經常用的Ghost工具
?? 功能[r]:使用備份出來的文件恢復到Nand FLash
?? 功能[q]:返回vivi的命令交互模式,在交互模式下輸入menu命令,則可以返回到菜單模式
?? 功能[i] :版本信息
韋東山DNW+Supervivi下載bin文件到Nand Flash的方法
?? ①在韋東山的書上,不止一次強調要將那些裸機程序下載到Nand Flash上運行。當從Nand Flash啟動CPU時,CPU會通過內部的硬件將Nand Flash開始4KB的數據復制到稱為“Steppingstone”的4KB的內部RAM中(起始地址為0),然后跳到RAM的地址0處開始執行。
?? ②通過 supervivi 的 d 命令是將程序下載到SDRAM就是內存的起始地址 0x30000000中的。這時候其實是從 Nor Flash啟動的。如果先從Nor Flash啟動,把程序直接下載到SDRAM中運行,就開始運行SDRAM中的代碼,把Steppingstone中4KB的代碼復制到SDRAM中,這個時候由于Steppingstone中的東西是未知的,所以會吧SDRAM中的代碼覆蓋掉,導致程序錯亂。
?? ③正確的方法是先從 Nor Flash 啟動,然后使用 v 命令(把程序下載到Nand Flash的vivi分區,而 vivi 分區的地址是 0x0-0x50000)下載程序到 Nand Flash,其實 v 命令的過程是通過DNW先把程序下載到SDRAM中,然后執行了 Nand寫操作,把 0x3000 0000 開始的那段代碼復制到了 nand flash 的0地址處,這樣就把代碼下載到了Nand Flash 中。然后再從 Nand Flash重新啟動,這樣Stepping Stone中就是 Nand Flash中的代碼了,本試驗就能正常運行了。(注意,這里隱含的意思是咱們的代碼大小只能限制在4KB以內,如果代碼大于4KB的話,還需要用到搬移,這個我以后會講的,看來我只能自己寫一個Bootloader了)。
MDK+Supervivi+DNW下載mini2440裸機程序步驟
?? 1、建立一個keil工程文檔,并命名為test
???
?? 2、修改自帶的S3C2440.s中的一處代碼,將CLOCK_SETUP???? EQU???? 0 修改為CLOCK_SETUP???? EQU???? 1
???
?? 3、編寫分散加載文件RuninFlash.sct,并存放在自己的工程目錄中
???
???
? 4、編寫main.c文件,本工程只含有這一個c文件
???
???
? 5、配置選項,只配置Linker和User選項,其他選項按默認值。
? Linker選項,配置后的內容如下圖,記得在Scatter File一欄添加咱們剛才編寫的RuninFlash.sct文件。
??
? User選項
? 在下圖Run User Programs ...下的Run #1一欄中添加自己的fromelf.exe文件,它一般存在你的MDK安裝目錄下的ARM/BIN40下,然后后邊輸入 --bin --output test.bin test.axf,這樣做的目的是為了生成可以利用DNW下載的bin文件
???
? 其他配置選項按默認值即可,無需改變。
? Target選項
???
?Output選項
?????
?? Debug選項
???
? Utilities選項
???
? 6、工作都應經做完了,現在可以點擊編譯了,如下圖
???
? 7、現在打開mini2440的開發板,撥到Nor Flash啟動,然后打開串口工具SecureCRT,在supervivi的界面中輸入v命令,如下
????
?? 8、打開DNW,然后點擊USB Port/Transmit,打開咱們的bin文件,就下載到了咱們的Nand Flash分區
???
? 9、將開發板的撥到Nand Flash啟動,然后重新啟動開發板,就可以看到開發板上的Led1和Led3亮了。
?? 自此,整個步驟已經講解完畢。
?? 該工程文件我上傳到:http://download.csdn.net/detail/mybelief321/5425961,請自行下載
總結
? 利用這種方法雖然是下載到了Nand Flash,但是他只限于4KB的代碼,如果代碼超過了4KB,那么久不能正常執行了,當然,有辦法解決它,那就是在啟動代碼中加一段將Nand Flash的代碼復制到SDRAM中去執行的功能,而不是在SRAM中執行。
? 要實現這個方法,我想我只能硬著頭皮去自己寫個bootloader了,幸虧自己已經了解了MDK自帶的啟動代碼了,現在要做的就是編寫搬移代碼,還有保證nand.o能連接在前4KB,這樣子就可以了,任重道遠啊,不知道還需要幾天才能搞定它啊!
?不容易啊,終于把 將MDK程序下載到我的mini2440開發板上的nand flash的方法找到了,我是利用韋東山老師的那套方法即利用DNW和supervivi下載到nand flash的。當然,只是方法之一,因為我能隱約的感覺到還可以使用MDK直接下載。下面我就將下載到nand flash的方法步驟完整的貼出來。
?? 在講解方法之前,我還是想說明幾點原理,避免知其然而不知其所以然。
supervivi的各功能選項說明
???
?? 功能[x]:對Nand Flash進行默認分區,此命令僅對Linux系統有效。
?? 功能[v]:通過USB下載Linux Bootloader之vivi到Nand Flash的 vivi 分區
?? 功能[k]:通過USB下載Linux 內核到Nand Flash的 kernel 分區
?? 功能[y]:通過USB下載 yaffs 文件系統映像到 Nand Flash的 root 分區
?? 功能[a]:通過USB下載用戶程序到Nand Flash中,一般這樣的用戶程序為bin可執行文件,如2440test(需要支持超過4K限制)、uCos2(開發板中帶的uCos2支持 Nand Flash啟動)、U-Boot等;當然,也可以使其他任意大小的bin程序。
?? 功能[n]:通過USB下載WinCE之啟動程序Nboot到Nand Flash的root分區
?? 功能[l ]:通過USB下載WinCE的啟動logo
?? 功能[w]:通過USB下載WinCE發行映像NK.bin到Nand Flash
?? 功能[d]:通過USB下載程序到指定內存地址(通過DNW的Configuration/Option選項指定運行地址)并運行。對于我的mini2440開發板,SDRAM的物理起始地址是0x3000 0000,結束地址是0x3400 0000,大小為64MB,另外BIOS的USB下載功能時應指定地址在0x30000000 - 0x33de8000之間。
?? 功能[z]:通過USB下載Linux內核映像文件zImage到內存中,下載地址為0x30008000
? ?功能[g]:運行內存中的Linux內核映像,該功能一般配合功能[z]一起使用
?? 功能[f] :擦除Nand Flash,執行此功能將會擦除整片Nand FLash 中的數據
?? 功能[b]:啟動系統,如果燒入了Linux或者Wince,執行此命令將自動識別啟動系統
?? 功能[s]:設置Linux啟動參數,詳細見子菜單說明
?? 功能[u]:備份整個Nand FLash中的功能,通過USB上傳到PC存儲為一個文件,該功能類似于PC系統中經常用的Ghost工具
?? 功能[r]:使用備份出來的文件恢復到Nand FLash
?? 功能[q]:返回vivi的命令交互模式,在交互模式下輸入menu命令,則可以返回到菜單模式
?? 功能[i] :版本信息
韋東山DNW+Supervivi下載bin文件到Nand Flash的方法
?? ①在韋東山的書上,不止一次強調要將那些裸機程序下載到Nand Flash上運行。當從Nand Flash啟動CPU時,CPU會通過內部的硬件將Nand Flash開始4KB的數據復制到稱為“Steppingstone”的4KB的內部RAM中(起始地址為0),然后跳到RAM的地址0處開始執行。
?? ②通過 supervivi 的 d 命令是將程序下載到SDRAM就是內存的起始地址 0x30000000中的。這時候其實是從 Nor Flash啟動的。如果先從Nor Flash啟動,把程序直接下載到SDRAM中運行,就開始運行SDRAM中的代碼,把Steppingstone中4KB的代碼復制到SDRAM中,這個時候由于Steppingstone中的東西是未知的,所以會吧SDRAM中的代碼覆蓋掉,導致程序錯亂。
?? ③正確的方法是先從 Nor Flash 啟動,然后使用 v 命令(把程序下載到Nand Flash的vivi分區,而 vivi 分區的地址是 0x0-0x50000)下載程序到 Nand Flash,其實 v 命令的過程是通過DNW先把程序下載到SDRAM中,然后執行了 Nand寫操作,把 0x3000 0000 開始的那段代碼復制到了 nand flash 的0地址處,這樣就把代碼下載到了Nand Flash 中。然后再從 Nand Flash重新啟動,這樣Stepping Stone中就是 Nand Flash中的代碼了,本試驗就能正常運行了。(注意,這里隱含的意思是咱們的代碼大小只能限制在4KB以內,如果代碼大于4KB的話,還需要用到搬移,這個我以后會講的,看來我只能自己寫一個Bootloader了)。
MDK+Supervivi+DNW下載mini2440裸機程序步驟
?? 1、建立一個keil工程文檔,并命名為test
???
?? 2、修改自帶的S3C2440.s中的一處代碼,將CLOCK_SETUP???? EQU???? 0 修改為CLOCK_SETUP???? EQU???? 1
???
?? 3、編寫分散加載文件RuninFlash.sct,并存放在自己的工程目錄中
???
???
? 4、編寫main.c文件,本工程只含有這一個c文件
???
???
? 5、配置選項,只配置Linker和User選項,其他選項按默認值。
? Linker選項,配置后的內容如下圖,記得在Scatter File一欄添加咱們剛才編寫的RuninFlash.sct文件。
??
? User選項
? 在下圖Run User Programs ...下的Run #1一欄中添加自己的fromelf.exe文件,它一般存在你的MDK安裝目錄下的ARM/BIN40下,然后后邊輸入 --bin --output test.bin test.axf,這樣做的目的是為了生成可以利用DNW下載的bin文件
???
? 其他配置選項按默認值即可,無需改變。
? Target選項
???
?Output選項
?????
?? Debug選項
???
? Utilities選項
???
? 6、工作都應經做完了,現在可以點擊編譯了,如下圖
???
? 7、現在打開mini2440的開發板,撥到Nor Flash啟動,然后打開串口工具SecureCRT,在supervivi的界面中輸入v命令,如下
????
?? 8、打開DNW,然后點擊USB Port/Transmit,打開咱們的bin文件,就下載到了咱們的Nand Flash分區
???
? 9、將開發板的撥到Nand Flash啟動,然后重新啟動開發板,就可以看到開發板上的Led1和Led3亮了。
?? 自此,整個步驟已經講解完畢。
?? 該工程文件我上傳到:http://download.csdn.net/detail/mybelief321/5425961,請自行下載
總結
? 利用這種方法雖然是下載到了Nand Flash,但是他只限于4KB的代碼,如果代碼超過了4KB,那么久不能正常執行了,當然,有辦法解決它,那就是在啟動代碼中加一段將Nand Flash的代碼復制到SDRAM中去執行的功能,而不是在SRAM中執行。
? 要實現這個方法,我想我只能硬著頭皮去自己寫個bootloader了,幸虧自己已經了解了MDK自帶的啟動代碼了,現在要做的就是編寫搬移代碼,還有保證nand.o能連接在前4KB,這樣子就可以了,任重道遠啊,不知道還需要幾天才能搞定它啊!
總結
以上是生活随笔為你收集整理的使用 NOR Flash 中的supervivi 下载裸机程序到NandFlash的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MDK生成的BIN文件用DNW通过USB
- 下一篇: 使用commandfield删除、修改g