4
A
回答
5
這是需要深入研究的其他信息。 Post 2.6版本,正如其他答覆中提到的那樣,Makefile負責處理大部分Linux內核模塊編譯步驟。然而,在它的核心仍然是GCC,這是它是如何做:(你也可能編譯它沒有Makefile文件)
繼GCC選項是必要的:
-isystem/lib目錄/ modules /`uname -r`/build/include:您必須使用正在編譯的內核的內核頭文件。使用 默認情況下,/ usr/include/linux將不起作用。
-D__KERNEL__:定義這個符號告訴頭文件,代碼將在內核模式下運行,而不是作爲用戶進程運行。
-DMODULE:該符號告訴頭文件爲內核模塊提供適當的定義。
gcc -DMODULE -D__KERNEL__ -isystem /lib/modules/$(uname -r)/build/include -c hello.c -o hello.ko
3
爲了編譯內核模塊,最好使用駐留在內核源目錄中的內核Makefile。您可以使用以下make命令:
make -C $(KERNEL_SOURCE_DIR) M=`pwd` modules
否則,你可以選擇寫自己的Makefile這樣的:
KERNEL_DIR := /lib/modules/$(shell uname -r)/build
obj-m := test.o
driver:
make -C $(KERNEL_DIR) M=`pwd` modules
clean:
make -C $(KERNEL_DIR) M=`pwd` clean
在這個我已經使用了KERNEL_DIR作爲/lib/modules/$(shell uname -r)/build
它使用的內核頭文件當前正在運行的內核。但是,您可以使用要編譯模塊的內核源代碼目錄的路徑。
This顯示瞭如何使用gcc
來做到這一點。
相關問題
- 1. Linux內核模塊編譯
- 2. Linux內核模塊編譯
- 3. 使用自定義頭文件編譯Linux內核模塊
- 4. 編譯包含非內核頭文件的linux內核(2.6)模塊
- 5. 編譯64位Linux內核使用GCC
- 6. 編譯linux內核模塊時出錯
- 7. 如何編譯Linux內核模塊
- 8. 編譯Linux內核模塊(lincan)
- 9. 交叉編譯Linux內核模塊
- 10. 其他內核的Linux內核模塊開發編譯
- 11. Linux內核模塊編程
- 12. 編譯linux內核
- 13. 編譯Linux內核
- 14. !編譯內核模塊
- 15. FTDI編譯內核模塊
- 16. 使.o文件在Linux內核編譯
- 17. 除編譯glibc和內核模塊外,是否需要內核頭文件?
- 18. 如何提取內核頭文件以便稍後編譯內核模塊
- 19. 與在CentOS GCC內核頭文件
- 20. Linux內核和我的內核模塊
- 21. Linux內核頭文件
- 22. linux內核頭文件
- 23. Linux內核模塊makefile中的特殊文件編譯
- 24. C - Linux - 內核模塊 - TCP標頭
- 25. 如何使用-std = gnu99編譯Linux內核模塊?
- 26. 使用附加模塊交叉編譯Linux內核
- 27. Linux內核編譯器FriendlyARM
- 28. 使用nvcc編譯linux內核
- 29. 如何在安裝新內核時自動執行linux內核模塊編譯?
- 30. Linux內核模塊調試
是你的C程序的內核模塊或一個用戶空間程序?你可以使用'gcc'的'-I'選項。內核模塊 – iqstatic 2014-09-30 08:02:00
。我將'-I/usr/src/linux-headers-2.6.32-38-server/include /'選項添加到我的Makefile中,但在此之後系統繼續編譯過程,這種更改是否足夠? – kobi 2014-09-30 08:28:35
如果它是內核模塊,則必須使用內核源目錄中的內核Makefile。你爲什麼使用'gcc'?發佈您正在使用的Makefile來構建內核模塊。 – iqstatic 2014-09-30 08:58:19