.ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载。
二、优点
(1)这样可以缩小内核体积;
(2)使用方便。
三、.ko文件一般的用处
(1)作为一个功能模块,需要使用时,直接插入运行就行。如在imx6上连接模拟摄像头,先运行模拟摄像头对应的驱动模块 camera.ko文件,然后对应的工程执行文件运行就行。
四、使用.ko 文件
1、加载驱动模块test.ko
(1)方法一
进入test.ko驱动模块文件所在的目录,然后直接 insmod test.ko
(2)方法二
将test.ko文件拷贝到/lib/module/#uname-r#/目录下,这里,#uname -r#意思是,在终端中输入
uname -r后显示的内核版本及名称,例如mini2440中#uname-r#就是2.6.32.2-FriendlyARM。
然后 depmod(会在/lib/modules/#uname -r#/目录下生成modules.dep和modules.dep.bb文件,表明模块的依赖关系)
最后 modprobe test(注意这里无需输入.ko后缀) 即可
注:两伍租种方法的区别
modprobe和insmod类似,都是用来动态加载驱动模块的,区别在于modprobe可以解决load module时的依赖关系,它是通过/lib/modules/#uname -r/modules.dep(.bb)文件来查找依腔做兆赖关系的;而insmod不能解决依赖问题。也就是说,如果你确定你要加载的驱动模块不依赖其他驱动模块的话,既可以insmod也可以modprobe,当然insmod可以在任何目录下执行,更方便一些。而如果你要加载的驱动模块还依赖其他ko驱动模块的话胡厅,就只能将模块拷贝到上述的特定目录,depmod后再modprobe。
这个没你想的那么复杂,相当简单,Linux下面就是把AT&T语法的汇编程氏祥序编译成.o
文件,这个汇编程序只包含一个函数即可,这个函数就是把你想要寄存器的值存在通用寄存器里作为返回值。另外你再写一个C语言程序文件,C里调用这个汇编函数后,把返回隐败值printk出来即可。灶核颤这个是最简单的分两个文件混合C,assem
。
另外,用GCC还可以在单个文件混合汇编。可以参考一下。
在linux下通常使用gedit或vim直接编写.c程序,然后通过gcc指令编译。以Ubuntu系统为例,详细过程如下:
1、进入桌面Temp文件夹
2、右键新建空白文件
3、将文件命名为hello.c
4、进入hello.c,开始编写代码(默认gedit为编辑器)
5、编写代码,保橡旦团存退出
6、点击右列“终端”,或者直接Ctrl+Alt+T通过快捷组合键进入终迟亮端
7、进入hello.c所在目录,通过gcc进行编译、链接、生成可执行文件hello,命令为gcc -o hello hello.c。
8、执行(可执行)文件hello,命令为./hello。
参考资料:
GCC——百度百梁橘科
Linux常用命令——百度百科
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)