- 1、本文档共79页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
设备驱动模块的加载 设备驱动程序被静态编译到内核中的情况: module_init()宏是内核在启动过程中运行设备的初始化函数,驱动程序的加载随内核的启动一起完成。 静态编译的内核模块不能被动态卸载,只有到系统关闭时由内核执行相应的卸载函数,如module_exit()。 设备驱动程序被动态加载到内核中的情况: 首先,驱动程序需要被编译成目标文件,如demo.o或demo.ko。 在操作系统运行之后,使用insmod命令将驱动程序模块动态加载到内核中 $ insmod demo.ko 使用insmod命令动态加载的内核模块可以使用rmmod命令动态地从内核中卸载 $ rmmod demo.ko 使用内核的动态模块加载/卸载功能需要内核支持kmod功能。 设备驱动程序的使用方法 应用层使用open、close、read、write系统调用——需要编写应用程序 使用系统命令可以进行最基本的测试: cat /dev/urandom echo /dev/urandom /dev/fb0 dd if=/dev/touchscreen of=/var/tmp/test bs=16 count=100 设备驱动程序的使用方法 设备驱动程序的使用方法 应用层使用open、close、read、write系统调用——需要编写应用程序 使用系统命令可以进行最基本的测试: cat /dev/urandom echo /dev/urandom /dev/fb0 dd if=/dev/touchscreen of=/var/tmp/test bs=16 count=100 Linux内核硬件驱动标准模板 #include linux/module.h #include linux/config.h #include linux/init.h static int __init name_of_initialization_routine(void) { /* code here */ } static void __exit name_of_cleanup_routine(void) { /* code here */ } module_init(name_of_initialization_routine); module_exit(name_of_cleanup_routine); module_init(1) include/linux/init.h中 #define module_init(x) __initcall(x); #define __initcall(fn) device_initcall(fn) #define device_initcall(fn) __define_initcall(fn, 6) #define __define_initcall(fn, id) \ static initcall_t __initcall_##fn##id __used \ __attribute__((__section__(.initcall #id .init))) = fn module_init(2) static initcall_t __initcall_fn6 __used \ __attribute__((__section__(.initcall6.init))) = fn typedef int (*initcall_t)(void); arch/arm/kernel/vmlinux.lds文件中: __initcall_start = .; *(.initcallearly.init) __early_initcall_end = .; *(.initcall0.init) *(.initcall0s.init) *(.initcall1.init) *(.initcall1s.init) *(.initcall2.init) *(.initcall2s.init) *(.initcallrootfs.init) *(.initcall6.init) *(.initcall6s.init) __initcall_end = .; init/main.c文件中定义了do_initcalls函数 __init宏 在include/linux/init.h中 对于非模块加载的驱动程序: #define __init __attribute__ ((__section__ (.text.init))) 通过__init,会把函数中的代码放到.text.init段。这个段在系统启动以后会被释放。在系统内核启动以后,会看到
您可能关注的文档
- 5预应力混凝土工程课案.ppt
- 5员工绩效考评课案.ppt
- 无机房建设传输接入分析选读.docx
- 无机化学实验4选读.docx
- 3岁宝宝该如何教育课案.ppt
- 无机及分析化学(A)在线作业.选读.docx
- 3岁前宝宝需“戒”掉纸尿裤课案.ppt
- 3缩短制造周期课案.ppt
- 5月份-养护学堂知识讲痤5.29课案.ppt
- 无人驾驶试验车的侧轮支撑机构设计选读.docx
- 10《那一年,面包飘香》教案.docx
- 13 花钟 教学设计-2023-2024学年三年级下册语文统编版.docx
- 2024-2025学年中职学校心理健康教育与霸凌预防的设计.docx
- 2024-2025学年中职生反思与行动的反霸凌教学设计.docx
- 2023-2024学年人教版小学数学一年级上册5.docx
- 4.1.1 线段、射线、直线 教学设计 2024-2025学年北师大版七年级数学上册.docx
- 川教版(2024)三年级上册 2.2在线导航选路线 教案.docx
- Unit 8 Dolls (教学设计)-2024-2025学年译林版(三起)英语四年级上册.docx
- 高一上学期体育与健康人教版 “贪吃蛇”耐久跑 教案.docx
- 第1课时 亿以内数的认识(教学设计)-2024-2025学年四年级上册数学人教版.docx
文档评论(0)