linux 驱动程序开发,为什么要编译内核源码树?

 我来答
欲將心事付瑶琴
推荐于2016-12-02 · TA获得超过335个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:220万
展开全部
驱动最终以*.ko的形式生成,insmod的本质就是将ko文件与运行的内核进行链接的过程。类似于编译helloworld的链接过程。链接必然需要先进行编译,以便确定所需的外部符号(EXPORT_SYMBOLS)是否存在,因为有些符号(函数或全局变量)在内核中,在驱动中如果使用到这些符号,必须预留一个位置,insmod时进一步确定这些符号的具体位置(符号绑定)。
如果内核都没有编译过,怎么知道这些符号有没有编入内核中?
关于这方面的知识可参照IBM developerworks上面的《Linux 可加载内核模块剖析》及相关文章。
更多追问追答
追问
我编写了一个Helloworld测试程序,不成功。内核源码树已经编译成功了,而且我现在的系统也是用新内核启动的,新内核是3.1.1的,就内核是3.1.0.7的,所以两个内核不一样。Make 这个Helloworld的时候,得到了 .ko文件,但是insmode hello.o的时候就显示:invalid format ,这是怎么回事啊?
追答
你是说你当前运行的内核是3.1.1,而helloworld是基于3.1.0.7的内核编译的?
我没编过3.x.x 的内核,不排除确实是版本间的微小差异(ko文件的组织不同,可能性极小)。你可以先通过nm工具查看helloworld.ko的符号,检查其中的外部符号是否在内核中存在("grep /proc/kallsyms ")。如果不行,劝你还是重新在新内核上编译ko
521_55
2013-12-30 · TA获得超过2778个赞
知道大有可为答主
回答量:2.5万
采纳率:35%
帮助的人:4997万
展开全部
您好,这样的情况建议您下载最新版本的驱动精灵,或是直接在线升级一下驱动精灵。希望可以帮到您。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式