終於開始在鍾愛的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...