陳工程師一直做Linux的嵌入式開(kāi)發(fā),作為在開(kāi)發(fā)一線(xiàn)的工程師,他對很多問(wèn)題的看法可能更切合實(shí)際需求,于是,通過(guò)郵件,就嵌入式開(kāi)發(fā)方面的問(wèn)題,請他談了一下自己的看法。 問(wèn):關(guān)于嵌入式開(kāi)發(fā),我們準備給同學(xué)們講解一些入門(mén)知識,從你一線(xiàn)開(kāi)發(fā)經(jīng)驗來(lái)說(shuō),給我們一些建議: 陳工回答: 對于嵌入式Linux入門(mén),如果有一定基礎,可以從驅動(dòng)開(kāi)始;如果沒(méi)有基礎,我個(gè)人建議還是從應用程序開(kāi)始。因為從應用程序開(kāi)始是最容易的,也是最直觀(guān)的。而驅動(dòng)程序運行在內核態(tài),驅動(dòng)本身的結構就比較復雜,如果要徹底弄明白驅動(dòng)的運行機制,必定牽涉內核,對于高年級的學(xué)生恐怕問(wèn)題會(huì )少一些,而對于低年級的學(xué)生,問(wèn)題估計較多。我曾經(jīng)遇到過(guò)一些初學(xué)者,就是一入門(mén)就栽了,失去了信心,當然這只是少數。不過(guò),如果在遇到問(wèn)題之后,能夠得到即時(shí)、正確的點(diǎn)化,那就是好事了。 既然您決定講驅動(dòng),那就從內核模塊開(kāi)始。在PC上就可以進(jìn)行的虛擬設備實(shí)驗,如基于內存的內核模塊?梢钥紤]從模塊的結構、編譯、插入、卸載等方 面進(jìn)行闡述。 驅動(dòng)模塊無(wú)非分字符驅動(dòng)、塊設備驅動(dòng)和網(wǎng)絡(luò )驅動(dòng)三大類(lèi)。但是一定要讓學(xué)生知道,任何一個(gè)系統,特別是嵌入式系統,并且在目前的嵌入式Linux產(chǎn)品開(kāi)發(fā)中,最簡(jiǎn)單、最重要、最多、最復雜的也是字符設備驅動(dòng),從IO驅動(dòng)到串口驅動(dòng)、到USB驅動(dòng)等等,廣義上都是字符驅動(dòng)。讓學(xué)生最好專(zhuān)注于字符設備驅動(dòng),因為一個(gè)嵌入式設備,網(wǎng)卡一般一塊,FLASH一般也是一塊(也包括幾塊組成的FLASH組),但是這兩方面,基本都有完善的驅動(dòng),如網(wǎng)卡驅動(dòng)有很多,塊設備驅動(dòng),硬件層已經(jīng)有通用接口,不管是NOR FLASH還是NAND FLASH,文件系統層更是有了非常多、非常成熟的文件系統,如 JFFS2、YAFFS、YAFFS2、EXT2、EXT3、ROMFS、CRAMFS等等,無(wú)需我們再去研究,學(xué)會(huì )應用即可。而除此之外的其它設備,如AD、DA、CAN、RS485等等,都是需要根據應用來(lái)進(jìn)行設計的,這才是一個(gè)產(chǎn)品區別于其它產(chǎn)品的重點(diǎn),更是市場(chǎng)價(jià)值增值點(diǎn)。 另外呢,也是前一點(diǎn)引申為而來(lái)的,學(xué)習Linux,準備做產(chǎn)品的話(huà),不要把Linux當成了終極目標(當然,這是對應用而言的),要有只是把 Linux當成一個(gè)平臺的思想。更重要的還在各種產(chǎn)品所需求的專(zhuān)業(yè)技術(shù),如通信方面像CAN、RS485、GPRS等等,或者工業(yè)控制方面,IO控制、實(shí)時(shí)特性等等。Linxu博大精深,研究起來(lái)永無(wú)止境,但是在產(chǎn)品中,只要到了一個(gè)產(chǎn)品夠用就可以了(當然,多一些更好,要視人而定)。 問(wèn):嵌入式應用程序的開(kāi)發(fā),應用場(chǎng)景較多的是圖形界面還是字符界面,如果是圖形界面,開(kāi)發(fā)環(huán)境QT和Minigui哪一種更合適,哪種類(lèi)型的應用程序在嵌入式系統中應用比較多? 陳工回答: 對于嵌入式Linux的應用,大多數的應用并不需要圖形界面,比如交換機、路由器、嵌入式網(wǎng)關(guān)以及服務(wù)器等等。圖形界面呢,主要應用在多媒體、手機等手持設備和一些需要圖形界面的人機交互系統。 嵌入式Linux可選圖形界面很多,上網(wǎng)找找的話(huà),可以發(fā)現遠非我們常說(shuō)的QT、MiniGUI等。包括Tiny-X,matchbox、OPIE、 GPE等等。不同GUI有自己的特色,有自己的特殊應用場(chǎng)合,對于產(chǎn)品開(kāi)發(fā),根據需要選擇合適的GUI。對于學(xué)習,自然是選擇容易得到、容易開(kāi)發(fā)的 GUI。QT是一個(gè)不錯的選擇,由于QT有一個(gè)PC上的模擬器,可以在沒(méi)有實(shí)際液晶LCD的情況下,甚至在沒(méi)有任何硬件的情況下都可以在PC上進(jìn)行模擬開(kāi)發(fā)。QT是收費的,當然,有免費版可用。MiniGUI呢,純粹國產(chǎn)的,支持國貨,可以考慮選擇MiniGUI。這是一個(gè)輕量級的嵌入式GUI,可以跨平臺,學(xué)習版也才100多塊。MiniGUI可以用于工業(yè)控制場(chǎng)合,QT在這方面的應用目前還沒(méi)有遇到,主要用在手持設備。 我們在開(kāi)發(fā)中采用Tiny-X,這也是一個(gè)可以用于工業(yè)控制的GUI,基本兼容X-Window,體積小,占用資源少,速度快,穩定。 對于Linux的應用程序開(kāi)發(fā),除了GUI程序之外,最基本的應用程序有: (1)串口編程。無(wú)論是在Windows下還是Linux下,串口編程都是極為復雜的,但是非常鍛煉一個(gè)人的編程水平和能力。 (2)網(wǎng)絡(luò )編程以及WEB相關(guān)編程。網(wǎng)絡(luò )編程的tcp、udp、tcp/ip等。至于WEB編程,主要是在系統開(kāi)啟一個(gè)WEB服務(wù)器,制作一些網(wǎng)頁(yè),通過(guò)遠程登錄能夠對整個(gè)系統進(jìn)行配置甚至升級等功能。比如我們的路由器配置網(wǎng)頁(yè)。這種應用在以后會(huì )越來(lái)越廣泛。 (3)另外一個(gè)就是Shell編程了。Shell的作用我想,*NIX世界的人都很清楚。在很多應用里面,通過(guò)一些非常富有技巧性的Shell腳本,實(shí)現了非常復雜的功能,包括遠程系統升級等。 以上我提到的這3方面,非常易于實(shí)驗,在沒(méi)有硬件,只有PC的情況都可以做。 學(xué)生電腦安裝ubuntu,那以后配置嵌入式Linux開(kāi)發(fā)環(huán)境可能遇到的問(wèn)題會(huì )多一點(diǎn)。不過(guò)沒(méi)關(guān)系,能夠解決的。在我個(gè)人看來(lái)ubuntu適合于家用、辦公,但要用于開(kāi)發(fā),配置難度稍微大一點(diǎn)。不過(guò)沒(méi)有辦法,現在電腦硬件太新,最適合的RedHat 9.0無(wú)法安裝。 |