|
培訓(xùn)機(jī)構(gòu)嵌入式開(kāi)發(fā)_學(xué)習(xí)嵌入式Linux的基礎(chǔ),
微機(jī)原理:理解ARM微處理器的工作原理
操作系統(tǒng)原理:理解Linux操作系統(tǒng)的工作原理
電子技術(shù)基礎(chǔ):理解基于ARM的嵌入式設(shè)備的電路原理圖,編寫(xiě)Linux驅(qū)動(dòng)程序的基礎(chǔ)
匯編語(yǔ)言:閱讀、編寫(xiě)B(tài)ootloader和Linux內(nèi)核源代碼(包括驅(qū)動(dòng)程序)
C語(yǔ)言:閱讀、編寫(xiě)B(tài)ootloader和Linux內(nèi)核源代碼(包括驅(qū)動(dòng)程序),閱讀、編寫(xiě)Linux應(yīng)用程序
C++語(yǔ)言:閱讀、編寫(xiě)Linux圖形應(yīng)用程序
(Java語(yǔ)言:Android編程)光敏電阻英文嵌入式, 嵌入式35以后, 嵌入式字幕滾動(dòng), 嵌入式可信系統(tǒng)設(shè)計(jì), 嵌入式下午題思路, 唐氏寶寶的嵌入式, 嵌入式的架構(gòu)詳解, php嵌入式探索, 嵌入式系統(tǒng)軟件退稅, 做嵌入式有成就感嗎, 微型嵌入式操作系統(tǒng), 嵌入式外部中斷程序, 深圳搞嵌入式培訓(xùn), 嵌入式系統(tǒng)仿真技術(shù), 一個(gè)嵌入式具體, 嵌入式壓力調(diào)節(jié)平臺(tái), 嵌入式治療近視, 往屆生找嵌入式, 自學(xué)嵌入式過(guò)程,
設(shè)計(jì)一個(gè)ARM+Linux設(shè)備,分為硬件設(shè)計(jì)和軟件設(shè)計(jì)。硬件設(shè)計(jì)不用多說(shuō),軟件設(shè)計(jì)是我們討論的重點(diǎn)。基于ARM的嵌入式設(shè)備,實(shí)際上就是一種簡(jiǎn)化版的電腦加上特定功能的硬件。通用的PC在開(kāi)機(jī)啟動(dòng)時(shí),首先會(huì)運(yùn)行主板上的BIOS,然后才啟動(dòng)操作系統(tǒng);對(duì)應(yīng)于ARM設(shè)備,開(kāi)機(jī)時(shí)首先啟動(dòng) Bootloader,初始化硬件,然后Bootloader將Linux內(nèi)核(2MBytes左右)搬到內(nèi)存中,然后Linux在內(nèi)存中運(yùn)行,接管整個(gè)設(shè)備的管理運(yùn)行。所以學(xué)習(xí)嵌入式Linux,首先要學(xué)習(xí)Bootloader。
Linux用的Bootloader種類(lèi)比較多,都是開(kāi)放源代碼的,現(xiàn)在比較流行用u-boot。Bootloader的源代碼是用匯編語(yǔ)言和C語(yǔ)言編寫(xiě)的,所以要有匯編語(yǔ)言和C語(yǔ)言基礎(chǔ),匯編語(yǔ)言代碼在全部代碼中僅占1%的比例,絕大部分代碼是C語(yǔ)言代碼。Bootloader代碼經(jīng)過(guò)編譯器編譯成ARM可執(zhí)行的映像文件,大小在幾十kBytes至幾百kBytes。這個(gè)映像文件通過(guò)專(zhuān)用的接口(JTAG)和專(zhuān)用的軟件燒寫(xiě)到ARM的 FlashROM上。在網(wǎng)上可以下載Bootloader源代碼,因?yàn)槊恳环N嵌入式設(shè)備的硬件不盡相同,所以下載來(lái)的源代碼不一定完全適用于當(dāng)前的硬件,要根據(jù)硬件的配置對(duì)Bootloader源代碼進(jìn)行一些修改,這一步叫做Bootloader的移植。
學(xué)完Bootloader移植,下一步就是Linux內(nèi)核的移植和驅(qū)動(dòng)程序的編寫(xiě)。與Bootloader類(lèi)似,Linux內(nèi)核的移植也是根據(jù)硬件情況對(duì)Linux內(nèi)核源代碼進(jìn)行修改,讓Linux內(nèi)核能在硬件開(kāi)發(fā)板上運(yùn)行起來(lái)。Linux內(nèi)核源代碼可到相關(guān)網(wǎng)站下載,移植的過(guò)程主要是針對(duì)核心硬件(MPU、內(nèi)存、FlashROM)修改Linux內(nèi)核源代碼,讓Linux內(nèi)核能在開(kāi)發(fā)板上運(yùn)行起來(lái)。Linux內(nèi)核源代碼修改完成后,經(jīng)過(guò)編譯生成 Linux內(nèi)核映像文件,可在開(kāi)發(fā)板的內(nèi)存中運(yùn)行;Linux內(nèi)核映像文件并不大,一般在2MBytes左右。Linux內(nèi)核移植完成后,雖然Linux 已可在硬件上運(yùn)行,但是很多外圍硬件(如LCD、鍵盤(pán)、鼠標(biāo)等)并沒(méi)有被驅(qū)動(dòng)起來(lái),所以下一步就是外圍硬件的驅(qū)動(dòng)程序編寫(xiě)。與PC上常用的Windows 操作系統(tǒng)不同,Linux的驅(qū)動(dòng)程序是在內(nèi)核里面的,不能像Windows那樣方便地安裝硬件驅(qū)動(dòng)程序。Linux硬件驅(qū)動(dòng)程序代碼寫(xiě)好后,放在內(nèi)核源代碼中,再重新編譯Linux內(nèi)核,重新運(yùn)行內(nèi)核后才能在Linux上操作對(duì)應(yīng)硬件。
Linux的文件系統(tǒng)與Windows也不相同。Windows的內(nèi)核和文件系統(tǒng)是一體的,在WIndows的資源管理器中可查看全部?jī)?nèi)核文件和應(yīng)用程序文件。Linux內(nèi)核是一個(gè)單獨(dú)的文件,而所有應(yīng)用程序卻都放在一個(gè)稱(chēng)為文件系統(tǒng)的文件包內(nèi),這樣做的好處是內(nèi)核和應(yīng)用程序是分割開(kāi)的,利于內(nèi)核的穩(wěn)定,即使應(yīng)用程序崩潰了,也不會(huì)影響到內(nèi)核,在文件系統(tǒng)中處理應(yīng)用文件時(shí)也不會(huì)誤刪除內(nèi)核,所以Linux比Windows穩(wěn)定得多。類(lèi)似于 Windows中的磁盤(pán)分區(qū),Linux內(nèi)核映像占一個(gè)單獨(dú)分區(qū),文件系統(tǒng)必須在別的分區(qū)上。Linux內(nèi)核運(yùn)行以后,會(huì)尋找文件系統(tǒng)對(duì)應(yīng)的那個(gè)包(分區(qū)),并掛載這個(gè)包,稱(chēng)作文件系統(tǒng)掛載。文件系統(tǒng)掛載上以后,可以用與Windows資源管理器類(lèi)似的方法管理應(yīng)用程序,但管理不了內(nèi)核的任何細(xì)節(jié)。文件系統(tǒng)里的所有文件都是通過(guò)目錄和文件方式管理的。
再下來(lái)就是應(yīng)用程序的編寫(xiě)了。Linux的應(yīng)用程序分有圖形顯示的應(yīng)用程序和無(wú)圖形顯示的應(yīng)用程序。無(wú)圖形顯示的應(yīng)用程序運(yùn)行起來(lái)就像在 Windows的“命令提示符”界面中運(yùn)行,不需要在顯示屏上顯示任何內(nèi)容,或僅需要顯示一些簡(jiǎn)單字符,這類(lèi)程序在嵌入式領(lǐng)域用途廣泛,因?yàn)楹芏嗲度胧皆O(shè)備是沒(méi)有LCD顯示屏的。有圖形顯示的應(yīng)用程序是在有LCD顯示屏的嵌入式設(shè)備上運(yùn)行的,例如手機(jī)。
無(wú)圖形顯示的應(yīng)用程序主要用C語(yǔ)言編寫(xiě),直接利用Linux內(nèi)核提供的編程接口完成各種功能。C語(yǔ)言程序可以實(shí)現(xiàn)很多功能,就算是多線程、多進(jìn)程也都可輕松搞定。Linux內(nèi)核提供的編程接口都是C語(yǔ)言可直接調(diào)用的函數(shù),實(shí)際上Linux這種操作系統(tǒng)編程就是C語(yǔ)言編程。
有圖形的應(yīng)用程序編寫(xiě)相對(duì)復(fù)雜一些。Linux本身的編程是基于C語(yǔ)言的,要想讓Linux有圖形顯示,必須給Linux加上一個(gè)圖形用戶界面(GUI),Linux的GUI現(xiàn)在有很多,桌面Linux用的有Gnome、KDE等,嵌入式Linux用Qt、MiniGUI等。這些GUI實(shí)際上都是在內(nèi)核提供的C編程接口的基礎(chǔ)上封裝一些圖形接口,然后做成圖形庫(kù)供應(yīng)用程序調(diào)用。Linux的GUI多是開(kāi)放源代碼的,也有一些商用GUI不開(kāi)放源代碼。我們可以下載GUI的源代碼,然后用編譯器編譯成庫(kù)文件,然后將這些庫(kù)文件放到文件系統(tǒng)的特定目錄下。GUI實(shí)際上是應(yīng)用程序的一部分,而不屬于 Linux內(nèi)核。GUI提供的編程接口多為C/C++接口,所以圖形應(yīng)用程序常用C語(yǔ)言或C++語(yǔ)言編寫(xiě)。也有特殊的如Android,提供的是Java 編程接口。所以圖形應(yīng)用程序編寫(xiě)需要掌握C/C++編程語(yǔ)言(Java語(yǔ)言)。
通過(guò)上面的介紹,想學(xué)嵌入式Linux的朋友們,可以根據(jù)自己的情況以及工作的要求,決定自己在嵌入式Linux上的發(fā)展方向,或去補(bǔ)充自己的不足,以便進(jìn)一步學(xué)習(xí)嵌入式Linux。 |
|