转自:http://wxpjiujiang.blog.163.com/blog/static/2039940302012272272901/

Linux驱动中的.o文件与.ko文件的区别  

2012-03-07 14:27:02|  分类: 默认分类 |  标签:linux  .ko  .o  区别  |字号 订阅

最近在学习linux的驱动,之前做嵌入式实验的时候加载驱动模块都是.o文件,但是现在发现很多驱动模块都是.ko文件,于是上网查了一下两者的区别,现在贴出来,和大家一起分享。
  .o文件也就是object文件,.ko文件是kernel object文件,与.o的区别在于其多了一些sections,比如.modinfo。.modinfo section是由kernel source里的modpost工具生成的,包括MODULE_AUTHOR, MODULE_DESCRIPTION, MODULE_LICENSE, device ID table以及模块依赖关系等等。depmod工具根据.modinfo section生成modules.dep, modules.*map等文件,以便modprobe更方便的加载模块。

  在2.6内核下编译driver, 首先要确认你的linux系统里有没有kernel tree,检查的方法是看看文件夹/lib/modules/$(uname -r)/build是否指向source code,并进去看看,是否有Makefile, include, scripts等文件夹,在scripts/mod下可以找到前面提到的modpost,这个是生成.ko的关键。如果没有kernel tree,需要重新build一份kernel来建立这个kernel tree。
  在2.4内核中,生成的就是.o文件。 2.6的kernel对内核模块的管理做了一些扩展,生成的就是.ko文件。
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐