1¡¢Ìáʾscripts/Makefile.build:46:*** CFLAGS was changed in "/home/chenfang/scull/Makefile",Fix it use EXTRA_CFLAGS.Stop.£º
ÓÉÓÚLDD3ʹÓõÄÊÇ2.6.10Äںˣ¬ºÜ¶à¶«Î÷ÒѾ·¢ÉúÁ˱仯£¬ÕâÀïÌáʾÎÒÃÇÐÞ¸ÄMakefileÖеÄCFLAGS£¬ÓÃEXTRA_CFLAGS´úÌæ£¬ÕÕËü˵µÄ×ö¾Í¿ÉÒÔ¡£
2¡¢ÌáʾÕÒ²»µ½Îļþlinux/config.h£º
ÔÚ2.6.19¿ªÊ¼µÄÄÚºËÖÐɾ³ýÁËconfig.hÎļþ£¬Òò´ËÖ»ÒªÔÚmian.cÖÐ×¢Ê͵ô#include¼´¿É¡£
3¡¢Ìáʾaccess.cÖдæÔÚ£ºdereferencing pointer to incomplete type ´íÎó£º
ÔÚ Ô´ÂëÖз¢ÏÖÖ»ÄÜÊÇcurrent´æÔÚ´íÎó£¬currentÓ¦¸ÃÊÇÒ»¸ötask_structÀàÐ͵ÄÈ«¾Ö±äÁ¿£¬²éÕÒtask_struct´æÔÚÓÚ linux/sched.hÖУ¬Òò´ËÔÚaccess.cÖмÓÈë#include£¬ÖØÐÂmake¼´¿É¡£
˳±ã¿´ÏÂcurrentÕâ¸öÈ«¾Ö±äÁ¿ÊÇÔÚÄÄÀﶨÒåµÄ£º
ÔÚsource ininsightÖвéÕҵõ½µÄcurrentÀàËÆÓÚÒÔÏµĶ¨Ò壺
static inline struct task_struct *get_current(void) __attribute_const__;
static inline struct task_struct *get_current(void)
{
return current_thread_info()->task;
}
#define current (get_current())
¿É ¼û£¬currentÆäʵÊÇÒ»¸ö¡°Î±È«¾Ö±äÁ¿¡±£¬ÊǺ¯Êýget_current()µÄºê¶¨Òå¡£µ±access.cÖÐʹÓÃcurrent->uidʱ£¬ ¾Íµ÷ÓÃÁËget_current()º¯Êý£¬´Ó¶ø·µ»Øtask_struct½á¹¹µÄtask£¬Òò´Ëcurrent->uid¾ÍÏ൱ÓÚ task->uid¡£
֮ǰÔÚUbuntuÀï±àÒëscullʱÓдíÎ󣬻¹ºÃÓÐÍøÓÑÌṩÁ˽â¾ö°ì·¨£¬¼´É¾³ýconfig.hÎļþºÍÔö¼Ó#include Á½¸öÍ·Îļþ£ºcapability.hºÍsched.h
×î½ü½«UbuntuÉý¼¶µ½9.10°æ±¾ºó£¬ÖØÐÂÉú³ÉÁË2.6.31°æ±¾µÄÄÚºËÊ÷£¬Ã»Ïëµ½±àÒëscullÄ£¿éʱ³öÏÖеÄ
/home/dengwei/eclipse_workspace/scull/access.c:108: error: ¡®struct task_struct¡¯ has no member named ¡®uid¡¯
/home/dengwei/eclipse_workspace/scull/access.c:109: error: ¡®struct task_struct¡¯ has no member named ¡®euid¡¯
/home/dengwei/eclipse_workspace/scull/access.c:116: error: ¡®struct task_struct¡¯ has no member named ¡®uid¡¯
/home/dengwei/eclipse_workspace/scull/access.c: In function ¡®scull_w_available¡¯:
/home/dengwei/eclipse_workspace/scull/access.c:167: error: ¡®struct task_struct¡¯ has no member named ¡®uid¡¯
/home/dengwei/eclipse_workspace/scull/access.c:168: error: ¡®struct task_struct¡¯ has no member named ¡®euid¡¯
/home/dengwei/eclipse_workspace/scull/access.c: In function ¡®scull_w_open¡¯:
/home/dengwei/eclipse_workspace/scull/access.c:186: error: ¡®struct task_struct¡¯ has no member named ¡®uid¡¯
ÔÒò£º
struct task_struct¶¨ÒåÔÚinclude/linux/sched.hÖУ¬ÔÀ´task_struct½á¹¹Ì嶨ÒåÓÐËù¸Ä¶¯£¬½«uidºÍeuidµÈŲµ½ credÖУ¬¼ûinclude/linux/sched.hºÍinclude/linux/cred.h¡£
½â¾ö·½·¨£º
Ö»ÐèÒª½«±¨errorµÄ´úÂë×öÈçÏÂÐÞ¸Ä
current->uid ÐÞ¸ÄΪ current->cred->uid
current->euid ÐÞ¸ÄΪ current->cred->euid
make success
½á¹û£º
root@dw:/home/dengwei/eclipse_workspace/scull# ls
access.c main.o Module.symvers scull.init scull.mod.o
access.o Makefile pipe.c scull.ko scull.o
_desktop.ini Module.markers pipe.o scull_load scull_unload
main.c modules.order scull.h scull.mod.c
root@dw:/home/dengwei/eclipse_workspace/scull# insmod scull.ko
°´ÕÕÉÏÃæÌáʾ£¬¾Í¿ÉÒÔ˳Àû±àÒë³ÉkoÎļþ£¬ÆäÖÐinclude/linuxÔÚÎÒµÄLinuxÖоø¶Ô·¾¶ÃûÊÇ
/usr/src/linux-headers-2.6.32-21/include/linux