




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式应用程序设计嵌入式应用程序设计第八章 嵌入式linux设备驱动编程知识点回顾 tcp/ip模型 套接字 tcp 套接字编程 udp 套接字编程滨州学院计算机科学技术系吴殿红 设备驱动的基本概念 linux内核与驱动的关系 linux内核模块结构 内核模块命令本次课内容本次课内容滨州学院计算机科学技术系吴殿红 1.设备驱动概念 是处理和操作硬件控制器的软件。驱动程序是内核的一部分,是操作系统内核与硬件设备的直接接口,驱动程序屏蔽了硬件的细节,完成以下功能: 对设备初始化和释放; 对设备进行管理,包括实时参数设置,以及提供对设备的操作接口; 读取应用程序传送给设备文件的数据或者回送应用程序请
2、求的数据; 检测和处理设备出现的错误。8.1 设备驱动编程基础设备驱动滨州学院计算机科学技术系吴殿红 2.linux系统的设备分类 字符设备通常指以字节为单位顺序读写的设备, 如并口设备、虚拟控制台等。 块设备通常指以块为单位随机读写的设备,如ide硬盘、scsi硬盘、光驱等。 网络设备通常是指通过网络能够与其他主机进行数据通信的设备,如网卡等。8.1 设备驱动编程基础设备驱动举例:linux设备识别 在linux中任何设备都是文件。所有设备的设备文件节点都在/dev目录下。#:ls al /dev滨州学院计算机科学技术系吴殿红 3.设备驱动程序的特点 内核代码 内核接口 内核机制和服务 可装
3、载 可设置 动态性 8.1 设备驱动编程基础设备驱动滨州学院计算机科学技术系吴殿红 4.设备驱动程序与整个软硬件系统的关系8.1 设备驱动编程基础设备驱动滨州学院计算机科学技术系吴殿红 1.linux的内核模块 linux内核采用可加载内核模块化设计(loadable kernel module,lkm) 内核模块:是一些可以让操作系统内核在需要时载入和执行的代码。是一种目标对象文件,通常由一组函数和数据结构组成。 内核的一个模块可以以两种方式被编译和加载。 直接编译进linux内核,随同linux启动时加载; 编译成一个可加载和删除的模块。8.1 设备驱动编程基础内核模块编程8.1 设备驱动
4、编程基础内核模块编程 c语言程序 linux内核模块运行 用户空间 内核空间入口 main() module_init()指定;出口 main() module_exit()指定; 编译 gcc c makefile连接 ld insmod运行 直接运行 insmod调试 gdb kdbug, kdb, kgdb等 2.linux内核模块与应用程序的区别8.1 设备驱动编程基础内核模块编程3.内核模块相关命令 insmod module.o load the module注意,只有超级用户才能使用这个命令 rmmod module unload the module lsmod list al
5、l modules loaded into the kernel这个命令和cat /proc/modules等价 modprobe -r load the module specified and modules it depends举例:模块相关命令lsmodinsmod hello.ormmod hellomodprobe /lib/modules/linux版本号/modules.dep /etc/modprobe.conf modeproble r hello最简单的内核模块例子#include #include #includemodule_license(gpl); static
6、int _init hello_init(void)printk(“hello kernel.n);return 0;static void _exit hello_exit(void)printk(“bye bye.n);module_init(hello_init);module_exit(hello_exit);生成makefile文件 makefile文件obj-m := hello.oall: make -c /usr/src/linux-2.4.20/ m=$(shell pwd) modulesclean:make -c /usr/src/linux-2.4.20/ m=$(sh
7、ell pwd) modules clean编译装载过程 $ lshello.c makefile $ makemake -c /usr/src/linux-2.4.20/ m=/wu/char_8 modules $ lshello.c hello.mod.c hello.mode.o hello.o make.log makefile modules.order $ sudo insmod hello.o $ dmesg | tail -1hello kernel $ lsmod | grep hellohello 1216 0 $ sudo rmmod hello$ dmesg | ta
8、il -1bye bye.不需要编写makefile的方法 gcc编译后加上-dmodule -dlinux 参数例如:gcc -dmodule -dlinux -i /usr/src/linux-2.4.20/include -c -o hello.o hello.c 注意:-i选项跟着linux内核源代码中include目录的路径。 滨州学院计算机科学技术系吴殿红 4.内核模块的程序结构一个linux内核模块主要由以下几个部分组成。 模块加载函数(必须) 模块卸载函数(必须) 模块许可证声明(必须) 模块参数(可选) 模块导出符号(可选) 模块作者等信息声明(可选)8.1 设备驱动编程基础
9、内核模块编程滨州学院计算机科学技术系吴殿红 static int _init initialization_function(void)/* 初始化代码 */module_init(initialization_function);模块加载函数滨州学院计算机科学技术系吴殿红 static void _exit cleanup_function(void)/* 释放代码 */module_exit(cleanup_function);模块卸载函数滨州学院计算机科学技术系吴殿红 module_param(参数名,参数类型,参数读/写权限访问许可掩码)宏为模块声明一个参数支持的参数类型byte, s
10、hort, ushort, int, uint, long, ulong, bool, charp,invboolarray (module_param_array(name, type, nump, perm)例如:static char *str_param = linux module program;static int num_param = 4000;module_param(num_param, int, s_irugo);module_param(str_param, charp, s_irugo);参数在模块加载时传递 #insmod hello.o test=2模块参数滨州
11、学院计算机科学技术系吴殿红 导出符号export_symbol(符号名);export_symbol_gpl(符号名);模块声明与描述模块声明与描述module_author(author);module_description(description);module_version(version_string);module_device_table(table_info);module_alias(alternate_name);导出符号与模块声明与描述#include #include #include static char *whom = world;static int howm
12、any = 1;module_param(howmany, int, 0444);module_param(whom, charp, s_irugo);static int _init hello_init(void) int i; for (i = 0; i howmany; i+) printk( “(%d) hello, %sn”, i, whom);return 0;static void _exit hello_exit(void)printk(goodbye worldn);module_license(gpl);module_description(“a simple module program”);module
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能温控玻璃桌面垫行业跨境出海战略研究报告
- 临时搭建 合同范例
- 供应合同范例短
- 企业捐赠合同范例
- 储水罐制作合同范例
- 光纤熔接劳务合同范例
- 云南商标转让合同范例
- 城市校车服务标准化管理计划
- 互联网公司财务管理自查报告及整改措施
- 小学三年级数学兴趣小组活动计划
- 公司外派工作合同协议书
- 城市道路与开放空间低影响开发雨水设施
- 巾帼家政职业技能竞赛(家政服务)理论考试题库(含答案)
- 电工电子学智慧树知到期末考试答案章节答案2024年湖南大学
- 七年级期中考试后家长会-图文课件
- Python自动化运维(技术与最佳实践)
- HY/T 0386-2023赤潮灾害损失调查与评估指南
- 小学期中家长会活动方案及流程
- GB/T 43824-2024村镇供水工程技术规范
- 雪铁龙DS 5LS说明书
- (2024版)小学六年级数学考试新题型与答题技巧解析
评论
0/150
提交评论