Chinaunix首页 | 论坛 | 博客
  • 博客访问: 523676
  • 博文数量: 47
  • 博客积分: 1045
  • 博客等级: 准尉
  • 技术积分: 663
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-09 09:27
文章存档

2012年(47)

分类: LINUX

2012-02-21 10:56:11

Linux下文件的类型是不依赖于其后缀名的,但一般来讲:

.ko 是Linux 2.6内核使用的动态连接文件的后缀名,也就是模块文件,用来在Linux系统启动时加载内核模块

.o 是目标文件,相当于windows中的.obj文件

.so 为共享库,是shared object,用于动态连接的,和dll差不多

.a 为静态库,是好多个.o合在一起,用于静态连接

.la 为libtool自动生成的一些共享库,vi编辑查看,主要记录了一些配置信息。可以用如下命令查看file *.la来查看文件类型

 

创建.a库文件和.o库文件:
$ gcc -c mylib.c
$ ar -r mylib.a mylib.o

 

.o文件与.ko文件的区别

.o的文件是object文件,.kokernel 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对内核模块的管理做了一些扩展!
阅读(1413) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~