深入講解剖析Linux設(shè)備驅(qū)動
這里將介紹Linux設(shè)備驅(qū)動問題的解決方法,新手 Fedora 7 下編譯 Linux設(shè)備驅(qū)動 3ed scull模塊 收藏 Linux的基礎(chǔ)操作,旨在讓讀者對Linux有個初步的認(rèn)識。內(nèi)容涉及文件管理、磁盤管理、用戶與組群管理、man幫助、軟件包管理、文件壓縮和打印機管理。
Linux設(shè)備驅(qū)動 Device Driver(ldd) 是本內(nèi)核開發(fā)入門書籍.其中scull是第一個例子模塊.所以學(xué)習(xí)scull是很重要的.由于內(nèi)核開發(fā)變動較快.所以ldd書中的一些例子已經(jīng)不能在現(xiàn)有開發(fā)環(huán)境中編譯了.本文說明如何在fedora7平臺修改scull程序,使他能夠順利編譯.
Fedora Linux設(shè)備驅(qū)動 安裝時沒有內(nèi)核開發(fā)的部分.所以我們先要安裝內(nèi)核開發(fā)相關(guān)包.
1在Fedoar Linux設(shè)備驅(qū)動官方站點的ftp中下載和你自己內(nèi)核版本相同的源代碼和devel包比如我通過uname -r命令看到我的內(nèi)核版本是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一下.把補丁打進去.具體方法網(wǎng)上有很多關(guān)于內(nèi)核編譯的文章.
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,還是有錯.發(fā)現(xiàn)是if (! capable (CAP_SYS_ADMIN))這里.CAP_SYS_ADMIN找不到.在網(wǎng)上查一下,發(fā)現(xiàn)這個宏是定義在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設(shè)備驅(qū)動這樣就是編譯好了.我們用chmod +x scull_load scull_unload 把這倆個腳本變?yōu)榭蓤?zhí)行./scull_load/sbin/lsmod 怎么樣.順利裝入內(nèi)核了吧.上面的內(nèi)容是我憑記憶寫的.如果和實際情況有出入請還是按照上面的方法.先差是哪個定義引起的.再把對應(yīng)的頭文件加入就行了 。以上是對Linux設(shè)備驅(qū)動介紹。
【編輯推薦】