今天在編譯iqvlinux的時候,之前在kernel 4.10.17編譯時,都不會有什麼error產生
而今天改成在kernel 4.14.12編譯時出現了以下的錯誤訊息:
make: Entering directory '/home/danny/platform/project-4.14.12/linux-4.14.12'
CC [M] /home/danny/platform/project-4.14.12/sysapps/gmac/iqvlinux/src/linux/driver/linuxnaldriver.o
In file included from
/home/danny/platform/project-4.14.12/sysapps/gmac/iqvlinux/src/linux/driver/linuxnaldriver.c:42:0:
./arch/x86/include/asm/uaccess.h: In function
‘set_fs’:
./arch/x86/include/asm/uaccess.h:33:9: error: dereferencing pointer to incomplete type
‘struct task_struct’
current->thread.addr_limit = fs;
^
發生錯誤的流程如下說明:
編譯到linuxnaldriver.c的42行,這邊第42行是去include <asm/uaccess.h>,接著錯誤訊息就說明錯誤發生在 set_fs(),然後最後的錯誤是在 uaccess.h 的第33行,錯誤訊息就是如上面的error那行
查了一下google,很多人都說只要include header就可以解決,於是我先找了一下‘struct task_struct’的結構宣告在哪個檔案,google之後發現在<linux/sched.h>
於是我在 linuxnaldriver.c 42行前面加了 #include <linux/sched.h>
再進行編譯,於是就編譯成功了