深入講解剖析Linux設備驅動
這里將介紹Linux設備驅動問題的解決方法,新手 Fedora 7 下編譯 Linux設備驅動 3ed scull模塊 收藏 Linux的基礎操作,旨在讓讀者對Linux有個初步的認識。內容涉及文件管理、磁盤管理、用戶與組群管理、man幫助、軟件包管理、文件壓縮和打印機管理。
Linux設備驅動 Device Driver(ldd) 是本內核開發入門書籍.其中scull是第一個例子模塊.所以學習scull是很重要的.由于內核開發變動較快.所以ldd書中的一些例子已經不能在現有開發環境中編譯了.本文說明如何在fedora7平臺修改scull程序,使他能夠順利編譯.
Fedora Linux設備驅動 安裝時沒有內核開發的部分.所以我們先要安裝內核開發相關包.
1在Fedoar Linux設備驅動官方站點的ftp中下載和你自己內核版本相同的源代碼和devel包比如我通過uname -r命令看到我的內核版本是2.6.22.1-41.fc7于是就下載kernel-devel-2.6.22.1-41.fc7 kernel-2.6.21-1.3194.fc7.src.rpm 然后安裝這兩個包.kernel-devel可以直接安裝.如果要裝src的話還要rpmbuild一下.把補丁打進去.具體方法網上有很多關于內核編譯的文章.
2.下載ldd第三版的源代碼
http://examples.oreilly.com/linuxdrive3/examples.tar.gz 接著把它解壓縮 tar zxvf examples.tar.gz進入scull目錄我們可以看到有main.c文件打開他.刪除include中的linux/config.h 由于在2.6.19版本以后config.h文件被取消了.所以以后有config.h的地方都會報錯
接下來再make,還是有錯.發現是if (! capable (CAP_SYS_ADMIN))這里.CAP_SYS_ADMIN找不到.在網上查一下,發現這個宏是定義在linux/capability.h中的于是加#include
#include
make -C /lib/modules/2.6.22.1-41.fc7/build M=/home/hide1713/Desktop/kernel/examples/scull LDDINC=/home/hide1713/Desktop/kernel/examples/scull/../include modules
make[1]: Entering directory `/usr/src/kernels/2.6.22.1-41.fc7-i686'
CC [M] /home/hide1713/Desktop/kernel/examples/scull/access.o
LD [M] /home/hide1713/Desktop/kernel/examples/scull/scull.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/hide1713/Desktop/kernel/examples/scull/scull.mod.o
LD [M] /home/hide1713/Desktop/kernel/examples/scull/scull.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.22.1-41.fc7-i686'
Linux設備驅動這樣就是編譯好了.我們用chmod +x scull_load scull_unload 把這倆個腳本變為可執行./scull_load/sbin/lsmod 怎么樣.順利裝入內核了吧.上面的內容是我憑記憶寫的.如果和實際情況有出入請還是按照上面的方法.先差是哪個定義引起的.再把對應的頭文件加入就行了 。以上是對Linux設備驅動介紹。
【編輯推薦】