scull 編譯

 

scull 編譯錯誤
問題1:
make -C /lib/modules/2.6.26-2-686/build M=/usr/local/workspace/ldd3_examples/scull LDDINC=/usr/local/workspace/ldd3_examples/scull/../include modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.26-2-686'
scripts/Makefile.build:46: *** CFLAGS was changed in "/usr/local/workspace/ldd3_examples/scull/Makefile". Fix it to use EXTRA_CFLAGS。 停止。
make[1]: *** [_module_/usr/local/workspace/ldd3_examples/scull] 錯誤 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.26-2-686'
make: *** [modules] 錯誤 2

(1)用EXTRA_CFLAGS替換Makefile中的CFLAGS
(2)使用命令 #make KBUILD_NOPEDANTIC=1     我使用的是這個。



問題2:
make[1]: Entering directory `/usr/src/linux-headers-2.6.26-2-686'
  CC [M]  /usr/local/workspace/ldd3_examples/scull/main.o
/usr/local/workspace/ldd3_examples/scull/main.c:15:26: error: linux/config.h: 沒有那個文件或目錄
make[2]: *** [/usr/local/workspace/ldd3_examples/scull/main.o] 錯誤 1
make[1]: *** [_module_/usr/local/workspace/ldd3_examples/scull] 錯誤 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.26-2-686'
make: *** [modules] 錯誤 2

1) 在access.c和pipe.c中添加#include<linux/sched.h>
2) 把main.c 中的//#include <linux/config.h>註釋掉

 

 

問題3:pipe.c 編譯問題

error: ‘struct task_struct’ has no member named ‘euid’
error: ‘struct task_struct’ has no member named ‘uid’ 

1)current->euid   換成    current->cred->euid    等等都是這樣改的。

 

之後所有的問題都解決了。會生成出一scull.ko文件這個就是我們所要的驅動文件

 

note:

 

 

介紹幾個有用的命令

掛在驅動的命令

#sudo insmod scull.ko

查看驅動的命令

#cat /proc/devices

#sudo lsmod

 

卸載命令

#sudo rmmod scull

 

建立掛在點命令

 

#mknod /dev/scull c 251 0

 

解釋一下最後的一個命令:scull這個是文件名可以隨便起,c是字符設備 251是主設備名 可以在#cat /proc/devices查到 ,0是次設備號,可以起0開始的255之間的數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章