linux3.0.4编译LDD中的scull全过程
按照慣例,我是應(yīng)該先寫一些本章的收獲的,不過太晚了。
在看完第三章之后開始編譯,錯誤一堆,幾乎崩潰,幸虧經(jīng)過不斷的百度,總算解決了問題,我發(fā)現(xiàn)
我遇到問題比較多,算是集中七個龍珠了吧,感謝先行的大神們。
1.?CFLAGS was changed in "examples/scull/Makefile". Fix it to use EXTRA_CFLAGS. ?Stop.
? ? 由于LDD3使用的是2.6.10內(nèi)核,很多東西已經(jīng)發(fā)生了變化,這里提示我們修改Makefile中的CFLAGS,用EXTRA_CFLAGS代替,照它說的做就可以。
2、提示找不到文件linux/config.h:
??? 在2.6.19開始的內(nèi)核中刪除了config.h文件,因此只要在mian.c中注釋掉#include<linux/config.h>即可。
3. unknown field ‘ioctl’ specified in initializerlinux2.6.29和linux2.6.38的內(nèi)核在file_operations結(jié)構(gòu)發(fā)生了變化,否則在linux2.6.38內(nèi)核中,繼續(xù)使用.ioctl成員,編譯時就會報錯:error: unknown field 'ioctl' specified in initializer,struct file_operations結(jié)構(gòu)體定義在include/linux/fs.h文件中。
linux2.6.38內(nèi)核取消了原有的ioctl成員,添加來新的成員
會出現(xiàn) warning: initialization from incompatible pointer type
出現(xiàn)此種warnning 的原因??“不兼容的指針類型初始化”
是你定義的函數(shù)類型與接口函數(shù)的類型不一樣,如把返回值 long 定義成了 int?
這兩個問題都對驅(qū)動有影響。
static const struct file_operations 。。。 = {
。。。。。。
???.unlocked_ioctl = 。。。,
。。。。。。
};
4.?錯誤: 隱式聲明函數(shù)‘init_MUTEX’ [-Werror=implicit-function-declaration]
在新版本的linux內(nèi)核中,init_mutex已經(jīng)被廢除了,新版本使用sema_init函數(shù)。
注意:多處調(diào)用這個函數(shù)。
5.error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function) 原因缺少頭文件 #include <linux/sched.h>?添加后即可通過編譯 ! 注意:多處調(diào)用這個函數(shù)。 6. error: ‘SPIN_LOCK_UNLOCKED’ undeclared here (not in a function) 是說SPIN_LOCK_UNLOCKED不被認(rèn)識了,其實也是被廢棄了,改用DEFINE_SPINLOCK即可,如 /*static spinlock_t scull_w_lock = SPIN_LOCK_UNLOCKED;*改成下面到方式/ static DEFINE_SPINLOCK(scull_w_lock); 注意:還有scull_u_lock,scull_c_lock做同樣的修改。 7. ‘struct task_struct’ has no member named ‘uid’ struct task_struct定義在include/linux/sched.h中,原來task_struct結(jié)構(gòu)體定義有所改動,將uid和euid等挪到 cred中,見 ? ? ? ? ? ? include/linux/sched.h和include/linux/cred.h。 因此只需要將報error的代碼所在的文件做如下修改 current->uid 修改為 current->cred->uid current->euid 修改為 current->cred->euid 總算集齊了七龍珠,模塊運(yùn)行起來了,雖然七個問題的解決方法都是網(wǎng)上都有的,但是我還是沒有在同一篇文章中全都遇到他們,所以寫下來。?
?
轉(zhuǎn)載于:https://www.cnblogs.com/likeyiyy/p/3525688.html
總結(jié)
以上是生活随笔為你收集整理的linux3.0.4编译LDD中的scull全过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA思维导图学习笔记_8张思维导图,
- 下一篇: java servlet异步_厉害了,S