Linux驅動開發學習的一些必要步驟

轉載自【http://blog.csdn.net/luobin1984/article/details/7945620】

  1. 學會寫簡單的makefile

2. 編一應用程序,可以用makefile跑起來

3. 學會寫驅動的makefile

4. 寫一簡單char驅動,makefile編譯通過,可以insmod, lsmod, rmmod. 在驅動的init函數裏打印hello world, insmod後應該能夠通過dmesg看到輸出。

5. 寫一完整驅動, 加上read, write, ioctl, polling等各種函數的驅動實現。 在ioctl裏完成從用戶空間向內核空間傳遞結構體的實現。

6. 寫一block驅動, 加上read,write,ioctl,poll等各種函數實現。

7. 簡單學習下內存管理, 這個是最難的,明白各種memory alloc的函數實現細節。這是Linux開發的基本功。

8. 學習鎖機制的應用,這個不是最難的但是最容易犯錯的,涉及到很多同步和併發的問題。

 9. 看內核中實際應用的驅動代碼。 你會發現最基本的你已經知道了, 大的框架都是一樣的, 無非是read, write, ioctl等函數的實現, 但裏面包含了很多很多細小的實現細節是之前不知道的。 這時候就要考慮到很多別的問題而不僅僅是基本功能的實現。 推薦您看2.6.20中integrated的一個驅動 kvm, 記得是在driver/lguest下,很好玩的, 就是Linux下的虛擬機驅動, 代碼不長,但功能強大。有能力的可以自己寫一操作系統按照要求做成磁盤鏡像加載到虛擬機中, 然後客戶機可以有自己的4G虛擬地址空間。

10. 看完驅動歡迎您進入Linux kernel學習中來。 最簡單的方法,跟着ldd(Linux devive driver)做一遍。

      學習linux驅動開發是一個很漫長的過程,有的人能迎風破浪,有的人卻只能知難而退,我也不知道自己是哪一種人,只是知道我現在從事的工作就是linux驅動的工作,而且工作不是很輕鬆,而且不是向我以前想象的那麼簡單,而我的理想與目標,可能會向後延期。但是我也很慶幸,因爲我還來得及,知道自己以後的路應該怎麼走。
對於我個人能力,自認爲還不是一個合格的工程師,就好像現在的人把工程師當作司機一樣,滿大街的都是工程師,沒有幾個能夠和自己的稱呼真正的對稱,所以我也明白自己現在在做什麼,應該做什麼,我是一個一旦確定了目標,就會一直走下去,所以我現在唯一能做的就是努力,努力,再努力。好了,廢話也不多說了。爲了避免一些剛剛接觸的人走彎路,我就把如何才能走入這樣行業,而你應該具備什麼知識,你應該怎樣一步一步的走,等等介紹給大家,

首先學習linux驅動開發(2.4和2.6),真本身就是一個非常籠統的概念,那好我們應該怎樣去學習呢。
1,首先你應該是一個計算機專業出身的學生,因爲在上大學的時候,有好多基礎課程(我們所說的垃圾課),都是驅動學習的非常重要的課程,所以我們要把那些基礎學好,就是說我們在大學學習的每門課程都是有用的,想成爲一個真正的高手,必須具備那些基礎知識。比如說:C語言,彙編語言,數據結構,計算機系統結構,操作系統,微機原理,數點,模電,等等,總之要把這些學好,只有這樣你才能邁進驅動的大門,而不是隻是當一個修修補補的人(這句話只有做過驅動開發的人,能明白我說的意思)如果不是計算機專業的話,那你就慢慢補吧......

2 接下來,我們應該把C語言學習到精通在精通。那應該怎樣才能把C學習到精通在精通呢,好,你只要把這五本書搞懂了,就沒有問題了。  
  1 The.C.Programming.Language.2nd.Edition
  2 C語言接口與實現--創建可重用軟件的技術
  3 C陷阱與缺陷
  4 C語言參考手冊第五版
  5 C專家編程

3當你具備了以上內容,那你就可以學習linux了。好我也就把怎樣去學習linux的過程介紹一下。首先你應該利用一段時間把基礎學習一下,包括基本命令,服務的配置,文件系統的介紹。還有就是linux的操作,要達到熟練,簡單的說就是把會用linux系統了。當然這只是一個開始,前段的學習不要超過兩個月的時間,快的話一個月就夠了。好了,重點學習的東西,vi,gcc,gdb,shell,makefile的學習和使用,編譯一個簡單的C程序。要知道C在不同環境下使用也是不一樣的,所以我們不要在windows下練習,要一直在linux去做這些事情。這個學習的過程也得2個月的時間,我們要多學習一下makefile和shell,在這之前的學習要學的慢一點,打基礎要牢靠一點。

4 以上的內容你都掌握了,接下來就是真正的進入應用層的開發了。由於本人是從事網絡開發的,所以我也只能給大家介紹一個怎麼才能進入網絡開發的行列。首先你應該好好的學習一下網絡基礎的東西,這也是非常重要的哦。包括,計算機網絡基礎,tcp/ip的學習等等,接下來你應該去買兩本書,就是有關linux進程開發的和socket開發的書籍。這些學習的過程就漫長了。至少也得個半年的時間吧。
好了,由於時間關係,今天先寫在這裏,下次會把驅動的真正學習介紹一下。不用急哦,因爲這些也夠你學一段時間咯。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章