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