1. 程式人生 > >嵌入式linux的開發流程以及linux應用層內容

嵌入式linux的開發流程以及linux應用層內容

嵌入式linux開發流程:

1.搭建前期的開發環境,例如搭建linux主機環境,交叉編譯器的安裝,還有一些常用的開發輔助軟體如source insight等等。

2.學習對硬體的直接操作,這裡和微控制器操作類似,我們需要檢視原理圖還有資料手冊對相應的暫存器進行操作,實現功能。

這裡只需要學會簡單的IO,中斷,定時器,串列埠就可以,後面的儲存器,IIC,LCD,AD,DA等可以大致瞭解一下,需要用到時候著重學習。


3.學會UBOOT的移植,這裡不需要自己去編寫,我們需要了解uboot的結構,並且對他進行相應的功能新增和裁剪,瞭解uboot其實就是對硬體的初始化裸機程式。開發板上電之後初始化記憶體,將uboot放到記憶體去執行,執行完成之後將一些傳遞給核心的引數放入boot parametors之後從設定好的地址取出kernel部分載入到記憶體,最後將程式執行許可權交給kernel.

4.學會kernel的配置和移植。在這之前首先要熟悉makefile的基本規則,通過meuconfig進行核心圖形化的配置,完成後執行頂層makefile進行核心的生成。生成的核心需要設定很多引數,其中最重要的就是對檔案系統的支援,執行完核心程式之後init程序就可以建立其他程序,實現多程序的工作。

5.學會通過busybox製作一個檔案系統,對檔案系統進行支援庫的移植,完成之後構建裝置節點等,最終生成映象檔案燒寫到固定的位置。

6.學會驅動的開發,這裡我水平不足,知識簡單瞭解。對於核心驅動的新增大致就是對一個關鍵結構體的內容新增,這裡和STM32庫函式包形式差不多,但是很複雜。

7.應用程式根據驅動程式封裝的上層介面進行相應的硬體控制。

8.通過QT等學習介面開發對嵌入式系統進行介面的開發,使得產品得到更好的使用者體驗。

linux應用層知識:

1.熟悉linux的基本命令,掌握shell指令碼操作一系列linux基本命令的語法。

2.熟悉C語言

3.熟悉vi編譯器的基本操作

4.使用GCC編譯器,進行編譯。

5.使用GDB除錯程式(我不會。。)

6.linux下C的和基本操作:字串操作,記憶體申請,時間獲取等。

7.對檔案系統的操作:檔案的開啟關閉,建立,搜尋,狀態獲取。

8.針對檔案指標的非格式化輸入輸出(fgetc(),fputc()),格式化輸入輸出(sprintf,fscanf)操作。

9.程序操作:

     程序概念:作業系統中被載入到記憶體中的,正在執行的應用程式,由程式,資料,程序控制塊(PID等)組成。

     程序狀態:執行態,就緒態,阻塞態(請求IO或者等待某一事件觸發的程序)

     程序的建立:一般我們執行的程式就是一個程序,我們可以使用fork()的建立一個該程序的子程序,這個程序複製了父程序的資料。pid_fork(void);

     程序終止:return ,exit()等

     守護程序:為了維護系統的執行二建立的一些程序,父程序都是init的子程序,都是後臺執行,如果將普通的程序修改為守護程序需要按照守護程序的特性進行改造。

10.程序間通訊:

程序間通訊的作用:不同程序之間程序資料資訊的交換,完成某種特定的功能。主要的方法有:管道,訊號,訊息佇列,訊號量和共享記憶體,這裡簡單介紹一下常用的幾個。

      訊息佇列:將資料放入訊息佇列,另外一個程序通過對應介面函式進行呼叫,獲取鍵值對應的訊息佇列。

      訊號量:本身不進行資料的交換,主要是控制多個程序對共享資源的訪問。

      共享記憶體:多個程序將同一塊記憶體區域對映到自己的程序空間,以此完成通訊,他是程序間通訊最快的一種方式。

11.多執行緒程式設計:

 概念:據說在在嵌入式領域中應用很廣泛,因為資源的問題。實際上現在嵌入式領域和傳統計算機領域界限已經很模糊了,很多時候硬體上資源不是那額需要節省。這裡先略過,後面學習的時候再深入學習一下。

12.網路程式設計:

    TCP/IP協議棧:網路介面層(資料幀),網路層(IP協議),傳輸層(TCP/IP協議),應用層(FTP等)。

    套接字基礎:socket套接字是封裝傳輸層協議的操作單元,讓網路程式設計更加容易。

    伺服器模型:迴圈伺服器模型(while結構,一次只能處理一個客戶端請求),併發伺服器(fork實現,建立子程序實現)

    域名系統:DNS,將難以直接記憶的IP地址和埠進行人性化的域名變換。

13.GUI設計

      略,我沒有用到C的開發,用pyQT5還是比較方便的,自制介面後直接生成原始碼,而且python開發也是十分容易入門,強烈推薦一下。