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

來源:互聯網
上載者:User

核心空間和硬體裝置之間的介面函數

在核心空間也有一些函數來控制裝置或者用於核心和硬體之間的資訊交換,下表闡述了這些概念.這個表也會隨著一些概念的引入而完善.

 

Events

Kernel functions

Read data

 

Write data

 

表  裝置驅動事件和與之相聯絡的介於核心空間和硬體裝置之間的函數

 

第一個驅動程式:在使用者空間載入和卸載驅動

         我將給你示範如何開發你的第一個Linux裝置驅動,這個驅動將會以模組的形式載入到核心。

         為了達到以上目的,我將編寫如下的程式,並將其命名為nothing.c

 

#include<linux/module.h>

MODULE_LICENSE("DualBSD/GPL");

 

         因為目前核心的發行版本是2.6.x,所以編譯模組已經變得稍微複雜一些了。首先,你需要有一個完整的,被編譯過的核心源碼樹。如果你有一個Debian Sarge系統,你可以按照附錄B的步驟來完成(在本文章的後面)。在以後,我將假定你使用的是2.6.8的核心版本。

         然後,你需要編寫一個makefile檔案,對於我們當前的這個例子來說,我們應該編寫一個名為“Makefile”的檔案,它的內容如下:

 

obj-m := nothing.o

 

         和以往的核心版本不同,根據你準備將之後產生的模組用在哪個版本的核心中,你在編譯這個模組的時候就必須使用和你這個目標核心相同的核心。為了編譯它,你可以鍵入下面的命令:

 

$ make -C/usr/src/kernel-source-2.6.8 M=pwd modules

 

         這個非常簡單的模組屬於核心空間,在它被載入的時刻起它就成為了核心的一部分。在使用者空間,你可以以root使用者的許可權鍵入以下命令列載入這個模組:

 

# insmod nothing.ko

 

         使用insmod命令可以將這個模組安裝到核心。但是,實際上這個特殊的模組本身並沒有很大的用處。

         為了檢查我們的模組是否正確安裝,我們可以鍵入以下命令來查看所有我們已經安裝好的模組:

 

# lsmod

 

         最後,我們可以使用以下命令來移除我們已經安裝的模組:

 

# rmmod nothing

 

         現在,通過再次鍵入lsmod命令,你可以確認這個模組在核心中已經不存在了。

         所有的總結到以下表中為:

 

Events

User functions

Kernel functions

Load module

Insmod

 

Open device

 

 

Read device

 

 

Write device

 

 

Close device

 

 

Remove module

rmmod

 

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.