在學習嵌入式開發的過程中,尤其是開始入門時,包括各種各樣的教程,都是在講學習linux,很少講如何利用linux來開發屬於自己的嵌入式專案,也就是沒有乙個全域性的概念,簡單理解,大概流程如下:
一、建立開發環境
這一步,就相當於在win系統下,要安裝乙個ide開發環境,如mdk,iar等。
二、配置開發主機
主要是配置minicom,也就是串列埠助手,minicom軟體是作為除錯嵌入式開發板資訊輸出的監視器和鍵盤輸入工具,是乙個非常方便的工具,我們開發其他嵌入式程式時,其實很多時候也採用串列埠除錯,所以最終原理都是相通的。
三、建立引導裝在程式的bootloader
常用的bootloader主要有u-boot、vivi等,貌似主流的就是u-boot,這個根據自己具體的晶元進行移植修改。有些晶元是沒有內建引導引導程式的,這就需要編寫開發板上的flash的少些程式,當然也可以用windows下的通過jtag並口和**器少些flash晶元程式,也有linux下的公開源**的j-flash程式,所以在設計自己的硬體時,可以預留多種方式。
四、移植嵌入式linux作業系統
如果有專門針對你使用的cpu的linux再好不過,比如uclinux、arm-linux、ppc-linux等,如果沒有,就要嘗試移植專屬自己的linux了,然後再新增自己特定硬體的驅動程式,進行除錯修改,對於帶mmu的cpu可以使用模組方式除錯驅動,而對於uclinux這樣的系統則需要編譯進核心,與核心為一體,再進行除錯。
五、建立根檔案系統
再根據自己的應用需要來新增其他程式,預設的啟動指令碼一般都不會符合應用的需求(因為所有的嵌入式開發都是自由定製的),所以就要修改根檔案系統中的啟動指令碼,它的存放位置至於/etc目錄下,包括:/etc/init.d/rc.s、/etc/profile、/etc/.profile等,自動掛載檔案系統的配置檔案/etc/fstab,其實就是定製自己要開機啟動的程式,具體情況會隨著系統的不同而不同,根檔案系統在嵌入式系統中一般設為唯讀,需要使用mkcramfs、genromfs等工具產生少些映像檔案。
六、建立應用程式的flash磁碟分割槽
一般會使用jffs2或者yaff檔案系統,這需要在核心中提供這些檔案系統的驅動,有的系統使用nor flash,有的系統使用nand flash,也有的系統兩種flash都使用,那麼jffs2的作用是什麼呢?
百科裡的介紹是:jffs2全名為journalling flash filesystem version2(快閃儲存器日誌型檔案系統第二版),其功能就是管理mtd裝置上實現的日誌型檔案系統,日誌系統也是乙個完整系統所必須的,不管是windows還是linux,有了這些才不算耍流氓,嘿嘿。jffs2並不準備提供提供類似與傳統檔案系統的功能,它只會直接在mtd裝置上實現日誌結構的檔案系統,除了提供具有斷電可靠性的日誌結構檔案系統,jffs2還會在它管理的mtd裝置上實現"損耗平衡"和「資料壓縮」等特性。
mtd(memory technology device記憶體技術裝置),就是各種flash。
七、開發應用程式
應用程式可以放到根檔案系統中,也可以放到yaffs、jffs2檔案系統中,有的應用不使用根檔案系統,直接將應用程式和核心設計在一起,就是類似於ucos-ii的方式。
其實,寫到這,這一步才是最終的目的,前面的步驟都是為了這一步,我自己的理解,開發應用程式呈現的方式應該是有三種的:
(1)直接講應用程式和核心設計在一起,類似與ucos-ii的方式,這種方式就是屬於私人訂製了,實現的功能種類是比較少的,只是專屬,但是穩定性要求高的,比如說複雜交換機、防火牆等,可能更看中linux系統的穩定性和各種優秀的外圍資源吧。
(2)基於qt等gui開發應用程式,之前一直以為qt是linux繞不開的,其實隨著了解,不盡然,qt其實就是乙個桌面系統,比如說ubuntu,對於高手來說,有沒有桌面都是無所謂的,因為所有都是可以通過shell來完成的,使用qt是方便使用者使用,所以對於那些需要操作,有螢幕的嵌入式裝置,這個是乙個很好的方案。比如目前工控觸控螢幕還有各種手持式帶有螢幕的儀表器械,都是這種方式。
(3)沒有螢幕,只有簡單的人機介面,比如串列埠,按鍵,數碼管,這種也能實現複雜功能開發,比如說,完全可以開發乙個基於linux的plc,可程式設計方案,通過指令碼實現,這也是一種很好的方案實現。
八、燒寫核心、根檔案系統、應用程式
無論怎麼載入,模組也好,所有的這些開發,過程資料,都是要燒寫到flash中的,然後應用程式需要什麼,就載入對應的功能程式即可。
九、發布產品
寫到最後,發現,之前還是過於迷信linux,不是說linux不好,而是說,對於嵌入式開發工程師來說,沒有最好的,只有最適合的,開發一款產品,用什麼,不用什麼,都是因地制宜的。
比如說乙個簡單的跑馬燈,你非要使用嵌入式linux方案,那就是燒包,只需要乙個簡單的2051,裸機程式就能開發,既便宜,又好用。
開發一款小型控制器裝置,如果功能不太複雜,可以使用稍微高階的cpu,裸機或者ucos等來開發,也很方便,也能做很多定製版的工業小型控制器。
開發一款中高型的控制器裝置,功能比較複雜,甚至需要複雜的螢幕互動,比如手機(安卓是linux的親兒子,os是linux的親表弟),取款機,伺服器交易系統,那麼linux就非常合適了。
嵌入式Linux開發流程
在乙個嵌入式系統中使用linux開發,根據應用需求的不同有不同的配置開發方法,但是一般都要經過如下的過程.1 1 建立開發環境 2 2 配置開發主機 配置minicom,一般的引數為波特率為115 200bps,資料位為8位,停止位為1,無奇偶校驗,軟體硬體流控設為無。在windows下的超級終端的...
linux嵌入式開發
我的環境 主機 ubuntu 64位 開發板 mini2440 6 makefile檔案修改 在 opt friendlyarm mini2440 linux 2.6.29下執行 sudo vi.makefile 搜尋arm linux得到乙個結果 cross compile?arm linux 然...
嵌入式linux啟動流程
s3c6410 map io裡面呼叫 mach s3c6410下的cpu.c中 各個成員函式在不同時期被呼叫 1.init machine 在 arch arm kernel setup.c 中被 customize machine 呼叫,放在 arch initcall 段裡面,會自動按順序被呼叫...