之前提過的 , 要進入Embedded Linux系統 , 有太多可以進入的管道. 譬如寫寫API , 像是gtk+, Qt,  Mini Gui等 , 要不就玩玩Kernel build , 替核心加些新玩意什麼的 , 但就我個人而言 , 最有趣的莫過於是拿一個可以接在系統上的周邊 , 替它寫隻驅動程式 , 就像是在玩LEGO NXP機器人時, 藉由一些指令 , 可以讓機器人擺擺手 , 點點燈 , 感覺像是賦與其生命一樣的令人感動.   只是相較於機器人的簡易逗趣 , 驅動程式的撰寫 , 就顯得複雜許多 , 再加上使用的系統硬體 , 以及Linux 版本 , 往往讓一開始想進入的初學者摸不著邊際 , 而顯得挫折滿滿. 如果你也有這樣的問題的話 , 下面剖析一些進入Linux Device driver的方式 , 或許對你就能有些幫助.

一開始 , 我想你必須有一台能build linux image的電腦. 不管你是用vm ware , cygwin或是另外備一台電腦 ,要不就是切partition , 這都不管 , 只要你能在電腦上 , 建置一套已經有 gcc , glibc 等工具的系統 , 就能開始寫些linux image. 不過 , 以我個人建議 , 如果你身邊有一台個人電腦 , 你可以直接找一套市面上 linux distribution來安裝. 像是Fedora , SUSE , UBUTN ...., 當然這些Distribution 一定會有不同的版本 , 理所當然的會建議找越新的版本 , 對你手頭上硬體的支援性也就越高. 等一下 , 我所demo的程式片段 , 都是以Fedora 8 的版本來執行. 至於怎麼安裝 , 坊間有太多的資訊 , 就請自行翻閱查找囉.

有些同好初學者 , 曾經有這麼一個問題 , 一開始進入Device driver的領域時 , 倒底要選那一個版本的作業系統做開始呢? 2.4.x? or 2.6.x ? 我個人是覺得 , 2.6.x相對的成熟 , 周邊應用程式的支援性也比較高 , 許多Distribution 的人機介面 , 做的也比較理想 ; 或著是說比較像是熟悉的windows , 能一邊在上面寫程式 , 一邊聽mp3 , 會不會比較人性呢? 比較不會顯得枯燥呢? 前者的答案是肯定的. 但至於枯燥這一檔事 , 我只覺得 , 如果你是windows programmer ,  可能長期習慣在windows黑盒子周邊生存 , 遇到問題時, 你也只能摸著鼻子束手無策 ,所以難免會有寫code寫得既悶且煩的問題. 但如果你是linux的愛好者 , 你就會發現 , 隨著你對系統的熟捻度越高 , 遇到問題時 , 你可以隨心所欲的在核心瀚海裏查找 , 反正code是open的 , 除了你可以有mail forum的眾多高手可以問不說 , 你要是對原始的code不爽 , 那就自己動手改嘛. 完全by youself. 當然 , 要是動到核心的部份 ,可得遵手GPL的規定. 這是Linux當初創建的精髓. 最後回到我們一開始討論初學者進入的角度. 在你還沒有把功力練到一定的的層級前 , 我個人會認為 , 2.6.x版本 , 會讓出學者比較容易入手 . Fedora 系統都是base on Linux 2.6.x 版本開發的 , 相對的符合我們等會介紹的需求.

接下來 , 假設大家都已經準備好一台可以build linux code 的電腦 了, 也大概知道 "make Makefile" 是怎麼一回事 , 如果你對基本的語法仍是一頭霧水的話 , 很抱歉 , 你可能得先離席 , 先去k點這方面的資料後再回來. 坊間有許多書籍可供參考 , 像是歐萊禮的 "建構嵌入式系統" , 就算是一本不錯的入門書.

開始介紹Device driver前 , 我習慣將內容分成下列幾部份:

1.什麼是virtual file system? 

2.Device driver module 的註冊

3.fops 層的應用描述

4.Api與Devie driver的交互應用.

也因為各部份都佔有一定的篇幅 , 所以將分章深入論述. 也希望有興趣的人 , 一同討論並給予指教.

 

 



       



        

jslinux 發表在 痞客邦 留言(3) 人氣()