資源描述:
《uCLinux嵌入式系統(tǒng)開發(fā)環(huán)境建立》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、uCLinux嵌入式系統(tǒng)開發(fā)環(huán)境建立1.Linux是一種很受歡迎的操作系統(tǒng) uClinux這個英文單詞u中的表示小Micro.小的意思,C表示Control,控制的意思.所以uClinux就是Micro-control-Linux,字面上的理解就是針對微控制領(lǐng)域而設(shè)計的Linux系統(tǒng)。 uClinux以其優(yōu)異的性能、免費開放的代碼等優(yōu)點,博得眾多嵌入式開發(fā)者的青睞,和過去基于簡單RTOS甚至沒有使用任何操作系統(tǒng)的嵌入式程序設(shè)計相比,基于Linux這樣的成熟的,高效的、健壯的、可靠的、模塊化的、易于配置的操作系統(tǒng)來開發(fā)自己的應(yīng)用程序,無疑
2、能進一提高效率,并具有很好的可移植性?;赨CLINUX的嵌入式系統(tǒng)開發(fā)涉及到三個方面:開發(fā)環(huán)境的建立,配置UCLINUX內(nèi)核和bootloader以及應(yīng)用程序的設(shè)計,本文將從這幾個方面來闡述的基于UCLINUX的嵌入式系統(tǒng)的設(shè)計。 2.開發(fā)環(huán)境的建立 開發(fā)環(huán)境的建立也就是工具鏈,設(shè)置工具鏈在主機機器上創(chuàng)建一個用于編譯將在目標上運行的內(nèi)核和應(yīng)用程序的構(gòu)建環(huán)境?這是因為目標硬件可能沒有與主機兼容的二進制執(zhí)行級別。包括Gcc:編譯器,可以做成交駐編譯的形式,即在宿主機上開發(fā)編譯目標上可運行的二進制文件。Binutils:一些畏助工具,包括o
3、bjdump(可以反編譯二進制文件),as(匯編編譯器),id(連接器)等等?! db:調(diào)試器,可使用多種交叉方式,gdb-bdm(背景調(diào)試工具),gdbserver(使用以太網(wǎng)絡(luò)調(diào)試)。Glibc-所有用戶應(yīng)用程序都將鏈接到的C庫。避免使用任何C庫函數(shù)的內(nèi)核和其它應(yīng)用程序可以沒有該庫的情況下進行編譯?! ?gòu)建在工具鏈建立了一個交叉編譯器環(huán)境。本地編譯器編譯與本機同類的處理器的指令。交叉編譯器運行在某一種處理器上。卻可以編譯另一種處理器的指令。重頭設(shè)置交叉編譯器工具鏈可不是一項簡單的的任務(wù):它包括下載源代碼、修補補丁,配置、編譯、設(shè)置頭文
4、件、安裝以及很多很多的操作。另外,這一個徹底的的構(gòu)建過內(nèi)存和硬盤的需求是巨大的。如果沒有足夠的內(nèi)存和硬盤空間。在構(gòu)建除段由于相關(guān)性、配置或頭文件設(shè)置等問題會突然冒出許多問題?! ∫虼四軌驈囊蛱鼐W(wǎng)上獲得已預(yù)編譯的二進制文件是一件好事但不太好的一點是,目前它們大多只限于基于ARM的系統(tǒng)。但遲早會改變的)?! ?.配置UCLINUX內(nèi)核和bootloader 配置內(nèi)核的命令是makemenuconfig,會列出一些選項。根據(jù)你的硬件相應(yīng)選取就行了。然后保存,退出,運行makedep,然后再make一下,會生成四個文件。 1.image.glf
5、:ELF格式含調(diào)試信息和romfs的uClinux,可以用gdb裝載調(diào)試運行 2.romfs.ing:romfs的二進制文件 3.linux.bin:不含romfs的uclinux二進制文件 image.bin:linux.bin和romfs.bin合并而成,并多了4個字的校驗,這個文件的內(nèi)容拷貝到ram里后就可以直接從入口運行了。 Bootloader的任務(wù)是初始化芯片和板子,用得比較多的有Blob、Redboot和Bootldr,如果是買的開發(fā)板,開發(fā)商會附送bootloader程序,但發(fā)如果是自己做的板子就麻煩一些,需要根據(jù)硬
6、件修bootloader源碼,然后用前面說的交叉編譯成二進制文件(筆者經(jīng)常用redboot,就是redboot.bin),用燒寫器燒寫的flash里啟動板子。 4.應(yīng)用程序設(shè)計 我們知道,在主流的Linux平臺上,已經(jīng)有了非常豐富的、開源應(yīng)用程序,使得開發(fā)者很容易獲得前人的成果作為參考,編寫更適合自己的程序。然而,對于很多已經(jīng)在標準Linux環(huán)境中工作得很好的程序,并不能直接在uClinux環(huán)境上運行。一方面是由于嵌入式的uCLinux所使用的處理器和普通PC不同,指令集、CPU結(jié)構(gòu)上的差導(dǎo)致uClinux上運行和的程序需要專門為該類型
7、處理器交叉編譯產(chǎn)生:另一方面uCLinux是為了沒有內(nèi)存管理單元(MMU)的處理器、控制器設(shè)計,并做了較大幅度的精簡,所以,在標準Linux上可以作用的一些函數(shù)和系統(tǒng)調(diào)用在uCLinux上有可能就行不通了?! 藴蔐inux是針對有MMU的處理器設(shè)計的。在這種處理器上,虛擬地址被送到MMU,把虛擬地址映射為物理地址。通過賦予每個任務(wù)不同的虛擬一物理地址轉(zhuǎn)換映射,支持不同任務(wù)之間的保護?! CLinux來說,其設(shè)計針對沒有MMU的處理器,不能使用處理器的虛擬內(nèi)存管理技術(shù)。uCLinux仍然采用存儲器的分頁管理。系統(tǒng)在啟動時把實際存儲器進行
8、分頁。在加載應(yīng)用程序時程序分頁加載。但是由于沒有MMU管理,所以實際上uCLinux采用實存儲器管理策略。uCLinux系統(tǒng)對于內(nèi)存的訪問是直接的。所有程序中訪問的地址都是實際的