日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux3.0.4编译LDD中的scull全过程

發(fā)布時間:2023/12/10 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux3.0.4编译LDD中的scull全过程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

按照慣例,我是應(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 initializer

linux2.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成員,添加來新的成員

  • ? ? ? ? long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);??? 原來的ioctl 但是返回值變?yōu)閘ong
  • ? ? ? ? long (*compat_ioctl) (struct file *, unsigned int, unsigned long); 內(nèi)核空間64位,用戶空間32位
  • 會出現(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)識了,其實(shí)也是被廢棄了,改用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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。