Re: [問題] kernel module compile

作者: koukai (暱稱)   2013-10-31 13:39:27
我來回答我會的 XDD
※ 引述《sean72 (.)》之銘言:
<43>
: 我心中有疑惑,但仍嘗試編譯而出現如下錯誤
: (為什麼我的ubuntu裡面只有header? 那我的kernel去哪了?)
因為 source 很大,所以 ubuntu 只裝 header 讓你編譯其他 module 的時候可以用。
不過,如果你想裝 ubuntu 的 source 的話,可以下
$ apt-get source linux-3.5.0
// 根據下面的例子我猜你用 3.5 的 kernel,不知道版號的話可以按 tab 補完
<43>
: 接著一番估狗之後,發現tldp的教學文章
: http://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html
: 我按照裡面所說
: 將-c的路徑設定為/lib/modules/3.5.0-42-generic
: 編譯成功! 並且可以成功載入module
: 所以說,我的linux kerenel實際上放在/lib/modules/這個資料夾下面嗎?
: 但是資料夾名稱聽起來又怪怪的?
咦,我 -C 都是 /lib/modules/3.5.0-42-generic/build
如果你能理解我上面的解釋應該就不覺得怪了,header 是給使用者重新編譯、開發
module 時使用,所以放在 /lib/modules/3.5.0-42-generic/build 裡面好像也可以
理解。但其實你會發現他是一個 symbolic link 連到
/usr/src/linux-headers-3.5.0-42-xxx
<43>
: 看來這也不是正確的config檔案
: 可否請版友幫忙解疑,我該去哪邊include 這個config.h?
如果你確定你是因為某的變數、或 function 需要該 header 的,但卻找不到的話,
你可以透過 lxr 快速查找,輸入識別字就可以找到在哪裡定義:
http://lxr.free-electrons.com/ident
: 最後一個問題,關於路徑
: 我在/lib/modules/3.5.0-42-generic/build/include/linux都能手動找到我需要的.h

: 我寫make –c /lib/modules/3.5.0-42-generic/build/
: 那麼為何我在source code的地方是寫
: #include <linux/module.h>
: 而不是
: #include <include/linux/module.h>
: /lib/modules/3.5.0-42-generic/build/和 …../linux/module.h
: 中間差了一層/include目錄不是嗎?
因為 gcc 下了 -I 參數指定 include 的目錄在哪裡,你在編譯 module 或核心的時
候,可以下
$ make V=1 [...]
可以看到很詳細的 gcc 參數,很長很長很長 Orz
: 謝謝
希望有幫助

Links booklink

Contact Us: admin [ a t ] ucptt.com