嵌入式linux開發平台
① 如何選擇嵌入式linux開發工具
嵌入式Linux具有穩定、可伸縮及開放源代碼等特點,可兼容多種處理器和主機,廣泛適用於各種產品和應用。但是,交叉編譯、設備驅動程序開發/調試,以及更小尺寸等要求對嵌入式Linux開發者來說都是嚴峻的挑戰。為應對這些挑戰,針對嵌入式Linux開發的專用工具應運而生,而且發展十分迅猛。
但是,許多這類開發工具都不兼容非X86平台,而且也沒有很好地實現歸檔備案或集成。在其它開發環境下,組件間的高度集成並沒有完全兌現。因此,要想完全從這些免費的軟體組件開始創建一個完整的跨平台開發環境,開發者應意識到這將需要大量的調研、實施、培訓和維護方面的工作。
Linux是少數既可以在嵌入式設備上運行也可作為開發環境的操作系統之一。這一特性可讓開發者在轉向此開發系統之前於常用硬體(比如X86桌面系統)之上開發、調試和測試應用程序和庫,因此可減少對標准參考平台和指令集模擬器的依賴。這一技術僅適用於應用程序和庫,但不適用於設備驅動程序,因為後者的開發依賴於Linux架構。
開放源代碼團體及一些軟體供應商可提供設備驅動程序開發工具。由於設備驅動程序比標准應用程序距離硬體更近,因此它們的開發比較困難。所幸的
是,Linux桌面系統可以利用一些Windows及其它操作系統所沒有的工具。有足夠經驗開發設備驅動程序的開發人員可能已經習慣將
Linux作為他們的桌面開發系統了。
Linux的快速發展及其桌面方案的不斷涌現提出了一個重要問題:所選擇的工具方案怎樣在不同的Linux分布式系統上運行?它們依賴於主機平台的軟體配置嗎?
有些Linux工具提供獨立於主機平台的開發環境,包括一系列可支持開發工具的應用軟體、庫和實用程序。這一方法幾乎將開發環境與主機配置完全隔離開來,因此主機可以是任何Linux分布式系統,而且任何更新和修改都不會影響開發環境的功能。
這種方法的主要缺點是對存儲空間的要求有所增加――約200MB,因為它自己實際上相當於一個微型Linux分布式系統。
可用的工具
一個嵌入式Linux產品的開發需要幾個階段,包括為目標板配置和構建基本Linux OS;調試應用程序、庫、內核及設備驅動程序/內核模塊;出貨前最終方案的優化、測試和驗證。
有數百種開放源代碼開發工具可供選擇。只要開發者原意花時間和精力去調研、實施和維護一系列各不相同的工具,總能找出一個完整的解決方案,完成幾乎任何開發任務。圖1:開發者必須精確地考慮到這些工具的鬆散集合能提供什麼樣的功能,以及需要付出多大的努力才能形成完整的解決方案。
在Linux應用程序和庫的調試方面,GNU Debugger(GDB)作為一種標准已有幾年的歷史。它是一種命令行程序,由多個不同的圖形用戶界面前端予以支持,每個前端都能以多種方式提供調試控制功能。盡管GDB不是一個完美的方案,但它足夠應對各種調試任務,而且已經得到開放源代碼團體的廣泛支持。
Linux內核或設備驅動程序的調試要比應用程序的調試繁瑣得多。
在做調研時,以下方面應特別注意:
什麼調試方法支持要開發產品的硬體?需要什麼內核補丁程序?還需要其它什麼補丁程序?調試界面怎麼樣,如何使用?該工具需要調試內核模塊及處理虛擬地址轉換嗎?還需要其它什麼工具才能提供完整的方案?
經過進一步的調查,開發者往往發現工具A和工具B並沒有提供完全一致的功能,因為它們是在彼此獨立的情況下開發的。結果,開發者必須精確地考慮到這些工具的鬆散集合能提供什麼樣的功能,還需要付出多大的努力才能形成完整的解決方案。
如果不同處理器類型間的集成、可用性、互操作性和移植性很關鍵的話,開發者應考慮購買商用開發工具。這主要是因為將開發一個「免費」方案所付出的努力考慮進去,商用開發工具並不算貴。
Linux BSP
Linux系統有兩大主要部分:帶設備驅動程序的Linux內核;以及根文件系統,包括系統所需的全部支持應用程序、服務和庫。除了駐留在目標
板上的OS組件外,還需要創建一個由GNU Compiler
Collection構成的交叉編譯環境,為庫和二進製程序(binutils)提供支持。
雖然幾乎每一個組件都可在網上找到,但在硬體或設備驅動程序支持、集成測試信息、交叉編譯指南或軟體兼容性方面卻很難收集到太多信息。盡管開發
者可從網上免費下載各種組件以配置嵌入式Linux操作系統,但每個組件在版本、支持、穩定性和測試等方面的狀態則需要開發者自己決定。然後,開發者還要
完成最後的OS集成和測試,以及為所開發產品提供終身Linux OS維護。
另一方面,嵌入式Linux供應商所提供的商用Linux板支持工具包一般都是經過預先安裝和測試的,而且提供支持和維護。其它須考慮的因素包括Linux桌面主機將會添加不同的庫和內核功能,以及由於組織內的開發者變動而引起的長期維護問題。
品質保證部門一般會執行一系列嚴格的驗證和性能測試,其中包括存儲器泄漏檢測/糾正、代碼優化和任務跟蹤等。那些想利用開放源代碼工具開發面向
非X86平台的嵌入式Linux產品開發者將會發現這一任務甚至要比選擇開放源代碼調試方案難得多。Linux Trace
Toolkit、Valgrind工具及其它存儲器分析程序可完成部分測試和驗證任務。但總的來說,它們缺乏關鍵特性、集成功能及廣泛的硬體支持。這些開
放源代碼分析工具的評估過程與評估調試方案的過程基本相同。
最後的分析就是,一個設計得恰到好處的開發環境應能夠提供商用和開放源代碼兩個世界所具有的最好特性:
◆交鑰匙開發能力;◆易於使用和集成;◆大型工程組織的協調控制;◆品質和支持保證;◆持續性;◆按照自己的判斷力使用開放源代碼的能力
② 想做嵌入式linux平台上的c/c++開發,如何入手
准確的說,LINUX下C才是主要的開發語言,但是寫應用程序還是要用面向對象的,尤其是圖形界面的,不如QT和X和GTK等等。下面說的必須要求你C語言學的很好而且會使用LINUX的情況下。LINUX常用命令要熟悉。
要學LINUX下的C編程,先看一兩本LINUX下C的書比較好,這個你自己選擇,但是經典的書還是好一些,比如《LINUX程序設計》、《UNIX環境高級編程》,看這些的時候把書上的例子選擇一些自己編譯一下,哪怕是照著敲進去,事半功倍。
看完一本這樣的書,你對LINUX系統編程的知識就足夠了,這時候你可以開始閱讀一些LINUX下的源代碼來鍛煉和提升能力了,LINUX下有很多開源的軟體,你可以搜一下,應用程序也很多,但是最好的源代碼還是LINUX內核。
推薦一本簡單的內核書《linux內核完全剖析0.12》,這個講的是0.12內核,代碼量只有1萬多行的內核,現在的2.6估計一千萬,一輩子看不完。這個書講了很多X86體系結構的知識,這時理解內核必備的,匯編你要能看懂。
能看懂內核代碼了,就說明你至少不是初學者了,現在肯定能開發項目了,有了經驗後,恭喜你,你就成為一名LINUX程序員了。
再由這些基礎後,你就可以選擇一些具體的開放方向了,比如底層一點,驅動,協議等、或者嵌入式應用等、或者是QT等。不過這就是後話了,呵呵
我自己的一些體會,希望能對你有用。
③ linux平台嵌入式開發環境搭建
EABI_4.3.3_EmbedSky_20090812.tar.bz2:支持eabi的arm toolchain,也就是編譯器工具鏈。
linux-2.6.30.4_20090826.tar.bz2 :linux內核源碼包,可以根據你的板子進行配置內核,run在你的板子上。
root_qtopia_2.2.0_2.6.30.4_20090829.tar.bz2 :文件系統目錄。
u-boot-1.1.6_20090824.tar.bz2 :uboot,bootloader代碼。
zlib-1.2.3.tar.gz:一個庫文件,正規的做法不應該把它放在這邊,我估計他們已經把這個zlib編譯好了,放到toolchain裡面去了,這里只不過給你個源碼而已。
一個嵌入式系統包括:
bootloader,也就是你的uboot
linux kernel,就是你的linux-2.6.30.4_20090826.tar.bz2
文件系統,也就是你的root_qtopia_2.2.0_2.6.30.4_20090829.tar.bz2
應用程序:你這里沒有,就是一些應用程序demo,測試code之類的。
所有的程序都應該用你的toolchain編譯,也就是用EABI_4.3.3_EmbedSky_20090812.tar.bz2。
④ 嵌入式linux開發用什麼linux系統
嵌入式操作系統的主要好處就是屏蔽了底層硬體的差別,給上層應用提供統一的介面,並管理進程調度和資源(如CPU時間、內存)分配等。就跟windows操作系統一樣,不管你是用華碩的電腦還是戴爾的電腦,只要裝了windows操作系統,你都可以用office、詞霸之類的軟體。人機界面(MMI)是上層應用show出來的。
簡單的嵌入式應用不需要嵌入式操作系統的支持,如單片機,直接用匯編程序就能實現特定的功能。要跑的應用多了,就需要操作系統來進行管理。
一般手機產品、小型醫療設備、軍工設備等都用到了arm+linux的平台。
arm處理器(CPU)是目前使用較多的,使用的嵌入式操作系統可以是多種多樣的,不光是linux。嵌入式linux系統比較穩定,有開源代碼,成本低,可移植性強;可以靈活裁剪不需要的功能,減小嵌入式軟體的大小和降低系統功耗。所以用嵌入式linux操作系統的不少。但現在很多公司都是用那種商業化的定製好的嵌入式linux平台以減少開發量和加快開發速度(比如有專門針對通訊設備的,有專門針對一般消費電子類的),這就需要買了。
⑤ 嵌入式linux系統開發的具體步驟
第一步、建立交叉編譯環境
沒有交叉開發經驗的讀者,可能一時很難接受這個概念。首先,要明白兩個概念:一般
我們工作的機器,稱為開發機、主機;我們製作好的系統將要放到某台機器,如手機或另一
台PC機,這台機我們稱為目標主機。
我們一般開發機上已經有一套開發工具,我們稱之為原生開發套件,我們一般就是用它
們來寫程序,那麼,那什麼又是交叉編譯環境呢?其實一點也不神秘,也就是在開發機上再
安裝一套開發工具,這套開發工具編譯出來的程序,如內核、系統工作或者我們自己的程序,
是放在目標主機上運行的。
那麼或許有初學者會問,直接用原生開發工具為目標主機編譯程序不就完了?至少我當
初是這么想的。一般來說,我們的開發機都是X86 平台,原生開發套件開發的工具,也針
對X86 平台,而我們的目標主機可能是PowerPC、IXP、MIPS……所以,我們的交叉編譯
環境是針對某一類具體平台的。
一般來講,交叉開發環境需要二進制工具程序、編譯器、C鏈接庫,嵌入式開發常用的
這三類軟體是:
Binutils
Gcc
uClibc
當然,GNU包含的工具套件不僅於此,你還要以根據實際需要,進行選擇
第二步、編譯內核
開發工具是針對某一類硬體平台,內核同樣也是。這一步,我們需要用第一步中建立的
工具,對內核進行編譯,對於有內核編譯經驗的人來說,這是非常簡單的;
第三步、建立根文件系統
也就是建立我們平常看到的bin、dev、proc……這一大堆目錄,以及一些必備的文件;
另外,我們還需要為我們的目標系統安裝一些常用的工具軟體,如ls、ifconfig……當然,
一個辦法是找到這些工具的源代碼,用第一步建立的交叉編譯工具來編譯,但是這些軟體一
是數量多,二是某些體積較大,不適合嵌入式系統,這一步,我們一般都是用busybox來完
成的,包括系統引導軟體init;
最後,我們為系統還需要建立初始化的引導文件,如inittab……
⑥ 如何搭建Linux嵌入式開發平台
Linux上搭建C/C++IDE開發環境的詳細介紹。 Redhat linux上面沒有提供Anjuta軟體包,上面提供了一個Glade應用程序界面設計工具。Linux上面使用Anjuta和Glade以及 Glademm軟體包可以搭建一個linux下面進行C/C++軟體開發的IDE環境,可以進行GTK+/Gnome的應用程序開發。 以前開發 Linux 程序時寫出好的圖形化用戶界面比較難。在 GIMP 工具包 (GTK)誕生之後,這件事就變得比較容易了。當Damon Chaplin 寫出 GLADE 這個用於在 GTK 環境下生成圖形化用戶界面的工具後,就更容易了。但是GLADE 仍然不能算是一個「集成開發環境」(如 Visual Basic 等等.),因為程序員不能在 GLADE 的環境下手動修改 GLADE 產生的代碼。現在,這一切都已成為過去: Anjuta誕生了! Anjuta 利用 GLADE 生成優美用戶界面的能力,加之以自己強大的源程序編輯能力,正成為一個極好的應用程序快速開發的集成環境(IDE)。以前,人們使用 GLADE 做界面,用 emacs 或 vi 等等編輯程序,再用某種終端模擬器編輯開發項目。使用 Anjuta,所有這些繁雜零散的任務都可以在一個統一的、集成的、自然而然的環境下完成。 詳細介紹請訪問網站: www.ofuzone.com 查看原帖>>
⑦ 學習linux嵌入式開發什麼軟體好
想學習linux的嵌入式開發,想問下一般用什麼軟體?最好叫我下學習流程!越詳細越好啊
用Linux平台就行了,C語言一定要學好,指針一定要明確,像指針數組、數組指針、指針函數、函數指針數組、函數返回值是個指針,結構體指針(主要是鏈表)、文件操作指針(FILE *其實是typedef結構體的指針)等,要靈活運用typedef 定義類型、靈活運用結構體。
再學習Linux的系統編程,主要是文件操作,文件描述符fd,對文件的操作write,read,open.close等,然後學習進程fork();vfork();創建進程和管理父子進程,進程之間的通信無名管道、命名管道、消息隊列、共享內存、信號量、套接字等;都掌握之後要學線程以及線程的互斥和同步,線程之間共享進程的資源,就要對資源進行合理的分配,例如信號量sem和線程互斥鎖pthread_mutex,信號是用來檢測信號的ISGNAL的,常見的信號例如ctrl+c,中斷前台的進程和kill中斷後台的進程,如果對網路感興趣,可以學習下Linux的網路套接子Socket,實現多台主機之間進程的通信,例如QQ和IPMSG都是對網路套接字的操作,熟悉一下TCP、UDP協議和Tftp、HTTP的網路層的傳輸協議,個人覺得解析buff最費時間,可以自己做一下IPMSG,單用戶和並發server,echo伺服器。
感興趣GUI的可以學習一下C++和Qt,Qt被nokia收購,nokia被微軟收購,Qt支持很多的平台,很實用,C++主要是對類的操作,和C中的結構體相似,class 類名挺好的,不錯;// 聲明類class 類名:繼承方式 基類挺好的,不錯;//繼承類類中包含私有成員、公有成員、受保護的成員,類是對事物共性的一種抽象,對象是共性的一種實體化,是類的一個實例,老師的共性是:教書,吃飯,睡覺等,可以抽象成一個類,個性是年齡、性別、名字等,是老師類的一個實例,C++還有很多的內容,Qt是用C++來寫的,其中的窗口都是派生於QWidget的,具體的不多說了。
學完C++和Qt,有了面向對象的概念後,可以去學Java和android系統,做手機的應用軟體和游戲開發,和Java 和C++類似,去掉c++中指針部分,完全脫離了內存的操作,完全的面向對象,android和Qt類似,具體內容不多說了。
說說底層的吧:
底層主要用到的是C語言和arm匯編主要是v4版本以後的匯編標准語言,首先清楚底層是怎麼引導Linux系統的,嵌入式很大一部分使用縮減版的Linux內核主要是穩定版本的,千萬不要去追求最新,最適合的才是最好的,前部分由匯編語言引導C語言,主要設置開發板軟硬體的環境,主要是bootloader(vivi、uboot.bin),然後把設置好的param參數傳給內核,內核調用這些參數去找相應的文件,進行相應的操作,然後就是Linux的根文件系統了,最後是軟體的移植。
用到的軟體:vmplayer (Linux redenterp版)、windows下的超級終端,LSJF24X0.exe(下載bootloader時使用,也可以用H-Jtag)、tftpd32.exe(做windows下的server用,用於u-boot網線下載)等工具。
以上是個人的體會,僅供參考!
《linux就該這么學》免費提供最新Linux技術教程書籍,為開源技術愛好者努力做得更多更好
⑧ 通常可用哪幾種方式來開發嵌入式Linux系統
是指系統配置,還是指平台搭建?
一般軟體平台的搭建方式有:
1、Windows+Cygwin+GCC+GDB+調試介面;
2、Windows+Eclipse+GCC+調試介面;
3、Windows+專業的商業Linux開發環境+調試介面;
4、Windows+專用的嵌入式Linux開發環境(如Android的SDK)+調試介面;
5、Linux+GCC+GDB+Linux圖形界面開發環境+NFS;
......................
等等。暫列這么多,更多的列不完。因為現在有很多的軟體商提供嵌入式Linux的開發環境和工具鏈(Toolchain)。其基本結構就是:主機+交叉編器+調試環境+設備驅動+調試介面。可網路:嵌入式linux開發環境
編程語言就更雜了,現在主要用的就是C/C++和Java。
⑨ 嵌入式開發和linux開發一樣嗎
1.什麼是嵌入式Linux系統?
嵌入式Linux系統就是利用Linux其自身的許多特點,把它應用到嵌入式系統里。
Linux做嵌入式的優勢,首先,Linux是開放源代碼的,不存在黑箱技術,遍布全球的眾多Linux愛好者又是Linux開發者的強大技術支持;其次,Linux的內核小、效率高,內核的更新速度很快;第三,Linux是免費的OS,在價格上極具競爭力。
Linux還有著嵌入式操作系統所
需要的很多特色,突出的就是Linux適應於多種CPU和多種硬體平台,是一個跨平台的系統。到目前為止,它可以支持二三十種CPU。而且性能穩定,裁剪
性很好,開發和使用都很容易。很多CPU包括家電業晶元,都開始做Linux的平台移植工作。移植的速度遠遠超過Java的開發環境。也就是說,如果今天
用Linux環境開發產品,那麼將來換CPU就不會遇到困擾。同時,Linux內核的結構在網路方面是非常完整的,Linux對網路中最常用的