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