目前,Linux軟件工程師大致可分為兩個層次:
(1)Linux應(yīng)用軟件工程師(Application Software Engineer):主要利用C庫函數(shù)和Linux API進(jìn)行應(yīng)用軟件的編寫; (2)Linux固件工程師(Firmware Engineer):主要進(jìn)行Bootloader、Linux的移植及Linux設(shè)備驅(qū)動程序的設(shè)計。 一般而言,固件工程師的要求要高于應(yīng)用軟件工程師的層次,而其中的Linux設(shè)備驅(qū)動編程又是Linux程序設(shè)計中比較復(fù)雜的部分,究其原因,主要包括如下幾個方面: (1)設(shè)備驅(qū)動屬于Linux內(nèi)核的部分,編寫Linux設(shè)備驅(qū)動需要有一定的Linux操作系統(tǒng)內(nèi)核基礎(chǔ); (2)編寫Linux設(shè)備驅(qū)動需要對硬件的原理有相當(dāng)?shù)牧私?,大多?shù)情況下我們是針對一個特定的嵌入式硬件平臺編寫驅(qū)動的; (3)Linux設(shè)備驅(qū)動中廣泛涉及到多進(jìn)程并發(fā)的同步、互斥等控制,容易出現(xiàn)bug; (4)由于屬于內(nèi)核的一部分,Linux設(shè)備驅(qū)動的調(diào)試也相當(dāng)復(fù)雜。 目前,市面上的Linux設(shè)備驅(qū)動程序參考書籍非常稀缺,少有的經(jīng)典是由Linux社區(qū)的三位領(lǐng)導(dǎo)者Jonathan Corbet、Alessandro Rubini、Greg Kroah-Hartman編寫的《Linux Device Drivers》(目前該書已經(jīng)出版到第3版,中文譯本由中國電力出版社出版)。該書將Linux設(shè)備驅(qū)動編寫技術(shù)進(jìn)行了較系統(tǒng)的展現(xiàn),但是該書所列舉實例的背景過于復(fù)雜,使得讀者需要將過多的精力投放于對例子背景的理解上,很難完全集中精力于Linux驅(qū)動程序本身。往往需要將此書翻來覆去地研讀許多遍,才能有較深的體會。
![]() ![]() (《Linux Device Drivers》中英文版封面) 本文將仍然秉承《Linux Device Drivers》一書以實例為主的風(fēng)格,但是實例的背景將非常簡單,以求使讀者能將集中精力于Linux設(shè)備驅(qū)動本身,理解Linux內(nèi)核模塊、 Linux設(shè)備驅(qū)動的結(jié)構(gòu)、Linux設(shè)備驅(qū)動中的并發(fā)控制等內(nèi)容。另外,與《Linux Device Drivers》所不同的是,針對設(shè)備驅(qū)動的實例,本文還給出了用戶態(tài)的程序來訪問該設(shè)備,展現(xiàn)設(shè)備驅(qū)動的運行情況及用戶態(tài)和內(nèi)核態(tài)的交互。相信閱讀完本文將為您領(lǐng)悟《Linux Device Drivers》一書中的內(nèi)容打下很好的基礎(chǔ)。 本文中的例程除引用的以外皆由筆者親自調(diào)試通過,主要基于的內(nèi)核版本為Linux 2.4,例子要在其他內(nèi)核上運行只需要做少量的修改。 構(gòu)建本文例程運行平臺的一個較好方法是:在Windows平臺上安裝VMWare虛擬機(jī),并在VMWare虛擬機(jī)上安裝Red Hat。注意安裝的過程中應(yīng)該選中"開發(fā)工具"和"內(nèi)核開發(fā)"二項(如果本文的例程要在特定的嵌入式系統(tǒng)中運行,還應(yīng)安裝相應(yīng)的交叉編譯器,并包含相應(yīng)的 Linux源代碼),如下圖:
![]() |
|