Linux 2 6核心驅動之hello模組

2021-06-11 12:44:29 字數 1781 閱讀 6259

終於開始在鍾愛的linux上學習寫驅動程式了。本來以為寫乙個hello模組是異常簡單的事情,結果折騰了幾天才編譯通過。首先為了測試安裝了虛擬機器(核心程式是很危險滴,我可不想讓自己的愛本頻繁崩潰),裝fedora17(fedora18的live版在虛擬機器上始終跑不起來),來回來去幾次也裝不上virtualbox的guest additions。看了log,發現問題出在guest additions的源**中,貌似當前版本的guest additions跟fedora17的核心不甚相容(fedora更新果然快呀~,次乃個人看法,如有高手安裝成功請賜教,吾當不甚感激)。於是乎決定換個穩定些的分版,想到手裡有ubuntu12,果斷換之。然後建立核心開發環境。

首先:#sudo apt-get update

其次:#sudo apt-get install kernel-package libncurses5-dev build-essential linux-headers-$(uname -r)

如果沒有「apt-get update」則容易提示找不到「kernel-package」等。

然後安裝guest additions還是失敗,看了下報錯,問題變成了「the headers for the current running kernel were not found」。查下資料,需要安裝dkms,於是:

# sudo apt-get install dkms

再安裝。。。等啊等。。。等啊等。。。等了好長時間,通過了,全部是「done」。關閉虛擬機器,設定共享資料夾,"name"為hostshare,啟動後建立資料夾為掛載共享資料夾做準備:

#sudo mkdir /mnt/myshare

這裡建立的資料夾最好不要與共享資料夾的「name」項相同,否則容易掛載失敗(我沒嘗試,不過好多人這麼說,有興趣的朋友可以嘗試下)。

然後掛載共享資料夾:

#sudo mount -t vboxsf hostshare /mnt/myshare

成功。之後是示例**了,hello.c內容如下

#include // 所有模組都需要的標頭檔案

#include

#include

#include // init和exit相關巨集

module_license("gpl");

int text_init(void)

void text_cleanup(void)

module_init(text_init);    // 註冊載入時執行的函式

module_exit(text_cleanup);    // 註冊解除安裝時執行的函式

這段程式網上資料好多,所以不進行太詳細的說明了。關鍵是makefile,還是直接上**:

obj-m := hello.o

pwd := $(shell pwd)

kdir := /lib/modules/$(shell uname -r)/build

all:

make -c $(kdir) m=$(pwd)

clean:

make -c $(kdir) m=$(pwd) clean

我參考的資料中說「首先將目錄改變到-c選項指定的位置(即核心源**目錄,其中有核心的頂層makefile檔案),m=選項讓該makefile在構造modules目標之前返回到當前目錄」(hello.c和makefile均來自於:感謝這位大俠)。以上makefile對原文資料中的**進行了簡單修改。而原文中所指的「核心源**目錄」中不一定是核心源**,只要你的/usr/src/目錄下有對應的核心標頭檔案也是可以開發第三方驅動的(據說原始碼中有這樣的說明,參考:

之後直接make,編譯無錯誤。

Linux 2 6 核心驅動移植

隨著 linux 2.6的發布,由於2.6核心做了教的改動,各個裝置的 驅動程式在不同程度上要進行改寫。為了方便各位linux愛好者我把自己整理的這分文件share出來。該文當列舉了2.6核心同以前版本的絕大多數變化,可惜的是由於時間和精力有限沒有詳細列出各個函式的用法。1 使用新的入口 必須包含 ...

Linux 2 6 驅動模板

obj m vs10xx.o vs10xx objs vs10xx.o kerneldir home kerson linux 2.6.39 pwd shell pwd modules make c kerneldir m pwd modules cp vs10xx.ko armnfs phony ...

Linux 2 6核心編譯,核心公升級

本文描述了在fc8下公升級linux核心為2.6.25的詳細步驟.1.首先從如下 得到linux 2.6.25.2.然後在 usr src下untar這個包.tar xjfv linux 2.6.25.tar.bz2 3.配置核心 cd usr src linux 2.6.25 make mrpro...