Linux系统开发课程简介驱动模块编译.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目录 驱动编译和安装 驱动编译和安装 驱动程序安装 直接编译内核 Kconfig ? Makefile ? 例: 将HELLOWORD编译进内核 驱动编译和安装 模块化方式 Makefile 编写 # If KERNELRELEASE is defined, weve been invoked from the # kernel build system and can use its language. ifneq ($(KERNELRELEASE),) obj-m := hello.o # Otherwise we were called directly from the command # line; invoke the kernel build system. else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif 驱动编译和安装 Makefile 讲解 obj-m := hello.o 上面的安排( 它利用了由 GNU make 提供的扩展语法 )表明有一个模块要从目标文件 hello.o 建立. 在从目标文件建立后结果模块命名为 hello.ko 如果你有一个模块名为module.ko,是来自2个源文件(如file1.c file2.c), 应写为: obj-m := module.o module-objs := file1.o file2.o 如果要指定特定的头文件位置 驱动编译和安装 make -c 开始是改变它的目录到用 -C 选项提供的目录下( 就是说, 你的内核源码目录 ). 它在那里会发现内核的顶层 makefile. M= M= 选项使 makefile 在试图建立模块目标前, 回到你的模块源码目录. 这个目标, 依次地, 是指在 obj-m 变量中发现的模块列表, 在我们的例子里设成了 module.o. 驱动编译和安装 安装与卸载 insmod xxx.ko 看看内核如何支持 insmod : 它依赖一个在 kernel/module.c 中定义的系统调用. 函数 sys_init_module 分配内核内存来存放模块 ;它接着拷贝模块的代码段到这块内存区, 借助 内核符号表解决模块中的内核引用, 并且调用模块的初始化函数来启动所 有东西. rmmod xxx.ko 卸载内核,如果内核认为模块还在用(一个程序仍然有一个打开文件对应模 块输出的设备 ), 或者内核被配置成不允许模块去除, 模块去除会失败. 可以 配置内核允许“强行”去除模块, 甚至在它们看来是忙的. 如果你到了需要这 选项的地步, 但是, 事情可能已经错的太严重以至于最好的动作就是重启。 驱动编译和安装 lsmod 可以查看当前已加载的模块; lsmod 通过读取 /proc/modules 虚拟文件工作. 当前加载的模块的信息也可在位于 /sys/module 的 sysfs 虚拟文件系统找到.。 预备知识 几乎所有模块代码都有下面的头文件 #include linux/module.h #include linux/init.h 模块确实应当指定它的代码使用哪个许可 MODULE_LICENSE(GPL); 模块的作者 MODULE_AUTHOR 驱动分类 声明一个模块的初始化和清理函数 module_init(init_function); module_exit(exit_function); 欢迎您,未来的 嵌入式底层软件工程师! * * * * * * * * * * * * * * * * * * * * *

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档