ARM 4510開發板移植uclinux手記
三、 建立交叉編譯環境
1、 體系結構的概念
大部分宿主機的cpu都是建立在X86體系結構上的,如intel或賽揚的cpu,也有其它體系結構的,但沒有arm體系的,因為arm幾乎是嵌入式設備專用的處理器體系結構了。三星4510微控制器是建立在arm體系結構之上的。體系結構的不同,確立了不同的指令系統,就像cpu使用不同的語言一樣。無法想象英國人可以讀懂俄文小說,同樣,為X86體系的cpu編譯的程序,也無法運行在arm體系結構的微控制器之中了。
宿主機上運行的linux 操作系統,是建立在X86體系結構上的。在linux操作系統上編譯的程序,一般也是建立在X86體系上的。可以編寫幾個程序,用linux操作系統自帶的編譯工具gcc編譯它們,如果沒有語法錯誤,它們就都可以在宿主機上運行了。但要實現在宿主機上編寫程序,編譯后程序能在arm體系結構的嵌入式設備上運行,就需要一套特殊的“交叉”編譯工具,如arm-elf-gcc等。所以,在linux操作系統的宿主機上編寫程序,通過選用交叉編譯工具arm- elf-gcc編譯后,生成的可執行文件,就可以在arm體系結構的微控制器上運行了。這就是交叉編譯的概念。
2、 建立交叉編譯環境
通過引入arm-elf-gcc等交叉編譯工具,可以在宿主機上建立交叉編譯環境。這樣,在宿主機上編譯的程序,就可以在arm體系結構的嵌入式設備上運行了。恒堅開發板自帶的文件arm-elf-tools-20030314.sh,只要在linux環境下執行它,就可以建立起完整的交叉編譯環境。
四、 編譯和下載uclinux操作系統
uclinux 操作系統已經被成功移植到許多微控制器上,其中也包括三星4510微控制器。移植后的uclinux操作系統源代碼中含有微控制器外圍電路的設置,如 SDRAM數據線的位數。有些嵌入式設備,同樣是使用三星4510微控制器,卻用一片現代公司的8Mx16bits的SDRAM,這樣微控制器與 SDRAM的數據交換,就只用微控制器的低16位數據線。微控制器中的寄存器EXTDBWTH,用于配置每組(FLASH、SDRAM和外部I/O芯片等)的數據線的寬度。恒堅開發板上是用兩塊8Mx16bits的SDRAM拼成了32位數據線寬。
恒堅開發板自帶一套移植后的和壓縮了的 uclinux操作系統源代碼文件uClinux-dist-20030522.tar.gz,把它拷貝到宿主機linux操作系統的/home目錄下,進入/home目錄,并用tar xzvf uClinux-dist-20030522.tar.gz命令解壓縮源代碼文件,產生/home目錄下的 /uClinux-dist子目錄,此目錄中含有編譯uclinux操作系統的全部源文件。把恒堅開發板自帶的壓縮的補丁文件uClinux-dist- patch.tar.gz拷貝到/uClinux-dist子目錄下。進入/uClinux-dist子目錄,并用tar xzvf uClinux- dist-patch.tar.gz命令解壓縮補丁文件,可釋放出兩個文件:mkpatch和uClinux-dist-20030522- helloworld.patch,執行./ mkpatch,既可對uclinux操作系統的源代碼打補丁。打補丁的根本原因,是為了修正源代碼中的硬件參數設置,如原移植源代碼是為一片SDRAM、16位數據線寬做的,而恒堅的板子上是兩片SDRAM,并通過高、低16位數據線的組合,構成32位的數據線寬度。這就需要改變寄存器EXTDBWTH的賦值。還有原移植源代碼是為8M字節的SDRAM作的,而恒堅板上是16M字節的SDRAM,這又要改變寄存器SDRAMCON0的賦值了。
打完補丁后,就可以在/uClinux-dist子目錄下配置uclinux操作系統內核了。執行 make menuconfig,彈出的配置框中有四項內容。在第一項中配置設備(vendors)為Samsung/4510B,配置函數庫為uC- lib,配置內核為linux-2.4.x。另三項可不動,保存后退出。然后順序執行如下命令:make dep;make lib_only; make user_only;make romfs;make image;make。如果沒有報告錯誤,在../uClinux- dist/linux-2.4.x/image子目錄下,就會有三個文件。其中,image.ram是非壓縮的uclinux操作系統內核,可以利用恒堅開發板自帶的boot.bin(也就是一般所說的bootloader程序),通過網口傳送到SDRAM中。這樣,uclinux操作系統即可在 SDRAM中跑起來了。image.rom則是壓縮的uclinux操作系統內核,并包含硬件相關的頭文件等。利用恒堅的集成開發環境,可以下載 image.rom到開發板的FLASH中,下載需要很長的時間。再次上電后,uclinux操作系統就在開發板上跑起來了。當然,通過開發板串口與宿主機串口聯接,在宿主機上建立控制臺,是觀察和操控開發板上uclinux操作系統的首要條件。
五、 遇到的問題和解決的辦法
1、 曾經想用cygwin代替linux操作系統,花費了不少的時間,但沒有成功。
2、 linux操作系統可以安裝在大多數的微機上,但它無法識別我的一臺三星顯示器,那臺機子上就一直沒有再安裝linux操作系統。我還有一臺配有賽揚 500處理器的組裝機,用它編譯uclinux操作系統內核,有時會出現錯誤。有人說,linux操作系統對機器要求較高,所以我現在用一臺標準配置的聯想微機。
3、 由于我用的恒堅開發板上的FLASH芯片地址線17、18腳連焊了,我編譯的內核文件image.rom,用恒堅的集成開發環境下載后,總無法從FLASH中運行起來。我先分析了uclinux操作系統的源代碼,沒有找到問題;又做了一塊Jtag接口板,來替代恒堅的接口板,還是不行;用了其它的FLASH寫工具,才把問題定位在FLASH芯片上,前后用了兩周的時間,才解決了問題。











評論