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