Linux设备驱动(2)——编译加载

来源:互联网 发布:js模块化概念 编辑:程序博客网 时间:2024/06/06 04:25

1.内核编译说明:Document/kbuild

2.内核编译需要的工具版本:Document/Changes

3.已经构建内核源码树环境的Makefile: obj-m := hello.o

4.make -C ~/kernel-2.6 M=`pwd` modules

该命令开始是改变它的目录到用 -C 选项提供的目录下(内核源码源码目录),它在那里会发现内核的顶级makefile,M= 选项使makefile 在试图建立模块目标前回到你的模块源码目录

5.insmod 加载模块的代码段和数据段到内核

6.modprobe 查看要加载的模块,看是否引用了当前内核没有定义的符号,如果发现有,在定义相关符号的当前模块搜索路径中寻找其他模块,当modprobe找到这些模块,它把他们加载到内核,如果在这种情况下代替以使用insmod,命令会失败,在系统日志中留下一句:“unresolved symbols”消息。

7.内核认为一个给定模块是针对一个正确的内核版本建立的,建立过程的一步是对当前内核树中的文件连接你的模块,这包含了相当多的有关要为其建立模块的内核信息,包括内核版本,编译器版本等,当加载一个模块时,这些信息将被检查与运行内核的兼容性,如果不匹配,模块不会加载。你将看到:

# insmod hello.ko
Error inserting './hello.ko': -1 Invalid module format

0 0
原创粉丝点击