ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

UbuntuϱàÒëLDD3-scullÀý×ÓʱÓöµ½µÄһЩÎÊÌâ
2014-11-24 08:20:34 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:0´Î
Tags£ºUbuntu ±àÒë LDD3-scull Àý×Ó Óöµ½ һЩ ÎÊÌâ


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


¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£º2.4»ùÓÚÐéÄâ»úµÄLinuxÄں˱àÒë ÏÂһƪ£ºLinuxÉ豸Çý¶¯³ÌÐòѧϰ

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Spring Boot Java£º (2025-12-26 16:20:19)
¡¤Spring Boot¤ÇHello (2025-12-26 16:20:15)
¡¤Spring ¤Î»ù±¾¤«¤éŒ (2025-12-26 16:20:12)
¡¤C++Ä£°å (template) (2025-12-26 15:49:49)
¡¤C ÓïÑÔÖÐÄ£°åµÄ¼¸ÖÖ (2025-12-26 15:49:47)