2018年1月19日 星期五

【Linux cmd】查找Linux某個指令的source code,以mke2fs為例

今天在找mke2fs 是哪包Source Code 所編譯出來的

查詢的方式很簡單,使用以下指令即可:

首先先找出mke2fs的路徑,我們知道他位於 /sbin/mke2fs

於是我們使用dpkg -S 來作查詢
#dpkg -S /sbin/mke2fs






所以我們可以知道,mke2fs 是由 e2fsprogs 所產出的執行檔

不過這招只適用於查找 apt-get install 之後所產出的指令,如果是自己進行編譯所產出的,使用dpkg 是找不到的~

2018年1月12日 星期五

error: dereferencing pointer to incomplete type ‘struct task_struct’

今天在編譯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>

再進行編譯,於是就編譯成功了