Re: [問題] kernel module compile

看板LinuxDev作者 (暱稱)時間10年前 (2013/10/31 13:39), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
我來回答我會的 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 : 謝謝 希望有幫助 -- █ ◢ █ ◢◤ ▃▄▄▃ █ ▃▄▄▃ ◆ █◢◤ █ █ ▍ ▌ █◢◤ ◤ █ █◤ █ █ ▌ ▋ █◤ ▃▄▃█ █ █◥◣ █ █ ▊ ▋ █◥◣ ◢◤ █ █ █ ◥◣ ◥▄▃▄◤ █▃▃█◤ █ ◥◣ █▄▄▄█▃▍ █ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.29.130
文章代碼(AID): #1ISUqJ3y (LinuxDev)
討論串 (同標題文章)
文章代碼(AID): #1ISUqJ3y (LinuxDev)