Writing device drivers in Linux: A brief tutorial(一)

來源:互聯網
上載者:User

最近看到一篇國外關於Linux核心入門的比較好的指南,於是就嘗試翻譯了一下。由於是第一次嘗試翻譯,加之英語水平有限,錯誤在所難免,歡迎拍磚!

由於沒有大段的時間來做這個,一下翻譯完是肯定不可能的,故每天翻譯一部分。轉載請指明出處,尊重別人的勞動成功,謝謝!

編寫系統驅動:簡單指南

像一個核心開發人員一樣編寫Linux裝置驅動的簡要介紹

作者:Xavier Calbet

2006-04-26

 

預備知識要求

為了能夠開發Linux核心驅動,具備下列知識是必要的:

l  C 編程經驗:需要深入瞭解一些C語言開發經驗,例如指標的使用,位操縱函數等。

l  微處理器編程:瞭解微電腦內部工作原理是很有必要的:記憶體編址、中斷等。這些內容對於一個組合語言編程者來說應該會很熟悉。

 

Linux中會有好幾種不同的裝置。為了簡潔,本文只介紹了以模組形式載入的字元裝置驅動。使用的核心版本是2.6.x(特別地,是在Debian Sarge下的2.6.8核心,目前這個版本在Debian下是穩定的)。

 

使用者空間和核心空間:

         當你在編寫裝置驅動的時候,你必須能夠區分“使用者空間”和“核心空間”

l  核心空間:Linux(核心)使用一種簡單而且有效方式來管理電腦的硬體,並為使用者提供了一種簡單而又統一的介面。相同地,核心,特別是它的的裝置驅動,就充當了介於終端使用者或者程式員與硬體之間的橋樑。任何組成核心的一部分的子程式或者函數都(例如模組和裝置驅動)被認為是核心空間的一部分。

l  使用者空間:終端使用者程式,例如Unix shell或者其他基於GUI的應用程式(例如Kpresenter)都是使用者空間的一部分。很明顯,這些應用程式都需要和系統硬體進行互動。但是,他們不會親自去完成,而是通過核心支援函數來完成。

所有這些表1所示:

表1  應用程式所在的使用者空間,模組或者裝置驅動所在的核心空間

使用者空間和核心空間的介面函數

         核心提供給使用者空間一些子程式和函數,通過這些子程式和函數中斷應用編程者可以完成和硬體的互動。通常,在Unix或者Linux系統當中,這些會話交換式通過讀寫檔案的子程式或者函數來完成的。因為在Unix系統當中,在使用者角度,裝置是被當中檔案來看待的。

         另一方面,在核心空間,Linux也提供了若干個函數或者子程式來完成底層和硬體直接互動的任務,同時允許將核心的資訊傳遞到使用者空間。

         通常,在使用者空間允許使用裝置或者檔案的每個函數,在核心都存在函數與之對等(這些函數可以完成將核心空間的資訊傳遞到使用者空間,反之亦然)。這些都表示在下表當中。目前這個表格還是空白的,當之後引入不同裝置驅動概念後我們會將其填滿。

Events

User functions

Kernel functions

Load module

 

 

Open device

 

 

Read device

 

 

Write device

 

 

Close deviece

 

 

Remove module

 

 

表  裝置驅動事件和與對應的在使用者空間和核心空間的互動函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.