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內核(2.6)模塊
- 4. 編譯64位Linux內核使用GCC
- 5. 編譯Linux內核模塊(lincan)
- 6. 如何編譯Linux內核模塊
- 7. 其他內核的Linux內核模塊開發編譯
- 8. Linux內核模塊編程
- 9. !編譯內核模塊
- 10. 除編譯glibc和內核模塊外,是否需要內核頭文件?
- 11. Linux內核頭文件
- 12. C - Linux - 內核模塊 - TCP標頭
- 13. 如何使用-std = gnu99編譯Linux內核模塊?
- 14. 如何在安裝新內核時自動執行linux內核模塊編譯?
- 15. 剖析Linux內核模塊
- 16. Linux內核模塊調試
- 17. 關於linux內核模塊
- 18. 安裝Linux內核模塊
- 19. Linux內核模塊ABI(x86)
- 20. Linux內核模塊的編譯的先決條件
- 21. 編譯單內核文件
- 22. 烘烤Linux內核模塊,使用OpenEmbedded
- 23. Linux內核模塊編程編譯錯誤
- 24. 問題編譯內核模塊
- 25. Linux內核模塊中衝突的頭文件
- 26. 用yasm彙編文件構建linux內核模塊
- 27. Linux內核模塊:延遲workqueue使內核崩潰
- 28. 如何將.o文件編譯爲Linux內核模塊(.ko)文件?
- 29. 編譯一個內核模塊,頭文件問題,生成文件問題
- 30. 用很多源文件編譯外部內核模塊
是你的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