針對近些日子新手的學習 一些最基本的嵌入式開發 中涉及到的一些基礎知識 ,基本概念,本來我認為大家應該懂的,但是 發現確實不少徒弟們還處于比較初級的學習階段,所以這里我做個總結,下面的概念都是你必須要知道的,請花一定的時間理解這些概念,不懂的網上搜索下為自己拓展下這些知識點: (1)嵌入式系統 對于嵌入式系統的概念,我的理解就是:嵌入式系統一定是個軟件,硬件統一起來的概念,特定的軟件系統是緊密的、有針對性的某款具體硬件的,有的嵌入式系統是有獨立使用功能的,比如無線路由器,而有的只是一個嵌入式產品的一部分,比如手機modem部分, DSP處理器部分。 (2)arm arm有兩個概念,一個是指arm公司,一個是指arm核,我們看到的arm926,arm11,cortexa8,a9等說法,都是arm core的概念,是arm公司設計的最基本的架構,它類比于x86的概念。 而平時我們說的6410,2440,都是叫嵌入式處理器的,是具體的CPU的概念。是這些 半導體公司使用arm core,再加上自己的外設IP,造就出的一顆特定的CPU產品。舉例子:s3c6410是基于arm11的core來做出的一個CPU,但是6410不等同于arm11處理器。 Linux是個操作系統,是運用操作系統理論寫的一個軟件,它實現了最基本的操作系統API給上層用戶,同時它還管理著硬件操作。 (4)ubuntu ubuntu是個linux的發行版,其實就是個桌面系統,winxp總用過吧,類似了。就是把一系列具有界面功能的軟件組合在一起供你方便的使用么。你可以把ubuntu理解成一系列的linux應用軟件的組合。我們就是利用ubuntu來進行程序的交叉編譯的哦。 (5)c語言 Linux內核的所有程序都是用c語言開發的,沒學過c語言的趕緊開始吧,這個是最基本的元素了,c語言都不懂其他的啥也別看了。編程語言可是所有應用,內核等軟件的基礎啊。 (6)開發板 拿ok6410的開發板來舉個例子,s3c6410是顆三星的CPU,它是基于arm11的core制作的。而ok6410是個開發板,是用s3c6410作為主CPU,然后自己設計一些外設,組合成的一塊板子,可以用來做產品搞開發,這就是開發板的概念。你可以類比聯想下:你的筆記本電腦就是個開發板,它有好多外設供你使用,鍵盤,lcd,usb,硬盤,內存等等吧,它用的CPU是intel x86的核。 (7)GCC,Glibc gcc是編譯器,是用來在linux的環境下編譯c語言的編譯器,因為linux是用c語言寫的,所以gcc也是用來編譯linux的編譯器工具。這個可以聯想windows上的c編譯工具,tubo c,VC++,不過這類都是IDE集成開發環境,我們這的gcc完全是單個的,命令行編譯器。 glibc,是一些列c語言的庫函數的組合,就是一些最基本的,最通用的功能,不需要你自己再去實現啦,你只需要調用glibc中這些庫就可以啦,方便啊。 (8)編譯器工具鏈 顧名思義就是把一系列用來編譯生成程序最終可執行檔的工具組合,比如:gcc,glibc等。我們在編譯arm linux的時候經?吹絘rm-linux-gcc這類都是用來交叉編譯基于arm的cpu的程序可執行文件,當我要你在ubuntu上編譯個c hello程序,gcc -c hello.c hello,其實生成的hello程序是針對x86架構的程序,因為這個hello程序我不是要你們運行了么?哪里運行的,就是你自己的PC機啊。你pc是什么cpu的啊,x86的啊。 如果你想編譯基于arm核的CPU的的程序,運行在ok6410的開發板上,你就要用arm-linux-gcc的編譯器,這個編譯完成之后生成的文件只能運行在arm的開發板上的哦,arm-linux-gcc -c hello.c hello,把你編譯后的hello文件在你的電腦上運行下,怎么樣,執行不了了吧?因為這個是針對arm的文件,不是x86的了。 (9)Makefile 你編譯一個簡單的hello.c文件,執行:arm-linux-gcc -c hello.c hello,這個看上去很簡單,但是如果你要編譯linux內核這么多,上萬的文件,難道你也一個個的書寫文件名字?肯定是不行的,所以我們發明了Makefile了,呵呵,就是把一系列編譯命令抽象的統一起來到Makefile中,然后你編譯只需要輸入一個make就可以了。 Makefile文件 Makefile 一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復雜的功能操作,因為 makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。 (10)shell命令行解釋器 我不是經常要大家編譯c程序么,輸入的一些linux命令什么的不都是在用一個叫“終端解釋器”的工具么?這個工具就是shell命令行解釋器,它的作用就是遵循一定的語法將輸入的命令加以解釋并傳給linux系統。它為用戶提供了一個向Linux發送請求以便運行程序的接口系統級程序,用戶可以用Shell來啟動、掛起、停止甚至是編寫一些程序。 (11)shell腳本 更明白的來說,shell script就像早期dos年代的.bat,最簡單的功能就是將許多指令匯整寫一起,讓使用者很容易的就能夠一個操作執行多個命令,每一個單個的命令都可以運行在shell命令行解釋器中運行,而一系列的命令被匯總到一個文件中,統一執行,這個文件就是shell腳本。 (12)編譯Linux內核 大家要知道編譯linux內核用的也是arm-linux-gcc工具,但是不需要glibc庫的,glibc的庫是給linux應用程序來用的,我們的內核和應用是有區別的,linux內核有自己的c庫,屬于內核程序。編譯內核,就是make命令,然后makefile就會自動編譯全部內核文件,make menuconfig是用來配置linux內核的命令。 (13)內核開發,驅動開發 內核開發與驅動開發相輔相成,對于Linux內核的開發者來說,比如linux之父linus,他就是個內核開發者,對linux內核相關的程序進行設計開發者,而我們目前的階段都是處于驅動開發階段,都是利用linux的內核提供的函數API開發自己的驅動程序。 (14)交叉編譯 我們先看一個非交叉編譯的情況,當我們在ubuntu x86的pc上,寫一個hello的程序,然后gcc -c hello.c hello來生成hello文件,并運行在ubuntu的命令解釋器終端工具中。那么這個在x86的機器上編譯程序hello,并且這個hello可以直接運行在x86的機器中的過程就是“編譯”,它是個“非交叉編譯”的概念。 那么我們的arm上面的程序是如何編譯的呢? 我們利用arm-linux-gcc -c hello.c hello來編譯生成hello程序,是不能運行在x86上面的,只能在arm的板子上,例如:ok6410開發板,運行。 這個過程,編譯器在ubuntu的x86 pc機上編譯能夠運行在arm架構的開發板上的過程就是“交叉編譯”的概念啊。 更多資訊可加交流群QQ277686564 QQ2905283896
|