我會一步引導您一步錯誤使用自定義的系統編譯Linux內核模塊調用
首先,我編輯的3個文件在我的Linux內核目錄
打開
LINUX_DIRECTORY/arch/x86/syscalls/syscall_64.tbl
並添加自定義來電我「M實施 - 使用適當的格式這裏聲明它們:
LINUX_DIRECTORY/include/linux/syscalls.h
- 使用適當的格式:打開
LINUX_DIRECTORY/Makefile
並添加我存儲我的新系統的目錄調用到core-y
行:核心-Y:= USR/my_system_call_directory/
這裏就是我遇到的問題。在LINUX_DIRECTORY/my_system_call_directory
內部,我添加了一個C文件,其中包含我的自定義系統調用定義及其相應的Makefile
。我離開的定義空,因爲我的內核模塊的C文件裏面,我宣佈一個外部功能(我自定義的系統調用),並定義其設置爲我的外部函數一個獨立的功能:
extern long (*start_shuttle)(void);
long my_start_shuttle(void) {
// stuff here
}
int init_module(void) {
// stuff here
start_shuttle = my_start_shuttle;
// more stuff
}
重新編譯內核我後嘗試make
內核模塊並得到一個no definition for start_shuttle
錯誤。
這是因爲我在my_system_call_directory
中留下了start_shuttle
空白的定義嗎?它應該與我在內核模塊中定義的my_start_shuttle
完全匹配,還是有我應該添加的特殊內容?我事先詢問了一些愚蠢的問題,因爲我的機器需要很長時間才能重新編譯Linux,而我不知道要改變什麼。謝謝