linux驱动开发之旅(八)--遗失的珍珠
来源:互联网 发布:网络协议软件有哪些 编辑:程序博客网 时间:2024/06/12 00:46
读完《深入嵌入式Linux驱动编写》,自己写完中断、tasklet、工作队列、异步通知、等待事件等等以后,会觉得驱动的东西很简单,无非就是架构好框架,调用几个系统函数,没什么技术含量,这次读了alessandro和jonathan合写的《linux设备驱动程序》之后,深感自己无知,之前遗漏的点准备再整理下
问题一:put_usr和
答:见网页
put_user、get_user、copy_to_user、copy_from_user函数浅析
问题二:devfs是什么
答:见网页 linux devfs初探
问题三:驱动调试的另外一片天地
答:(1)加asm/current和Linux/sched头文件,可以调用当前进程ID(current->ID)和命令名(current->pid)
(2)多核运行预定义#define __SMP__
(3)Linux系统调用都带有sys_前缀,sys_create_module(),get_kernel_syms(), sys_init_module()。
(4)/pro/modules出来的信息表示模块名、模块使用内存的字节数、模块的当前使用计数等
(5)/pro/ioports,属于某个驱动程序或者设备的端口范围+驱动程序或者设备名
问题四:驱动程序员的注意要点
答:编写访问硬件的内核代码时不要给用户强加任何策略。因为用户有不同的需求,驱动程序应该处理如何使硬件可用的问题(并发、内存、用户函数库)。保持三方面的因素:提供用户尽量多的选项、编写驱动程序占用尽量少的时间以及尽量保持程序简单而不至于错误丛生。
问题五:设备类型分类
答:字符型、块设备、网络设备(相关联的模块也是这么分的)
问题六:系统框架图
答:
问题七:linux-kernel资源和邮件
http://www.tux.org/lkml
问题八:多核(SMP)引发的竞态问题
答:对多核最直接的影响是系统程序不只是运行了在一个内核中,这个就是真正多线程的开始(不是以前的单核多线程,运行的永远只有一个),具体分析见文章多核计算与程序设计
问题九:使用全局计数count的重要性
答:使用全局计数能够确定模块是否安全的卸载
问题十:编写小技巧
答:(1)__init的使用使得在初始化完成之后,丢弃初始化函数饼干回收他使用的内存,__exit用在直接链接内核的驱动程序中,他将忽略所标记的函数,而用在模块中的时候没有任何作用(注意),在模块中使用的是release
问题十一:内存的使用和释放
答:kmalloc和kfree(典型的驱动程序是读写IO端口和IO内存)
问题十二:IO编程和内存编程使用的注册函数
答:check_region,request_region,release_region (linux/ioport.h中)
check_mem_region,request_mem_region,release_mem_region (linux/ioport.h中)
问题三:驱动在运行的时候能输入参数?
答:是的。在驱动函数中定义相关参数
int skull_ivall=0;
char skull_sval;
MODULE_PARM(skull_ivall,"i");
MODULE_PARM(skull_sval,"s");
b,一个字节
h,短整型
i,整型
l,长整型
- linux驱动开发之旅(八)--遗失的珍珠
- Linux开发八_LED驱动
- 容易遗失的linux命令
- ACM之遗失的袜子
- 【ZYNQ-7000开发之八】OLED的驱动
- Linux驱动开发之八-----按键驱动(异步通知机制)
- 【Linux开发】linux设备驱动归纳总结(八):2.总线、设备和驱动的关系
- Hasen的linux设备驱动开发学习之旅--中断
- Hasen的linux设备驱动开发学习之旅--时钟
- Linux 4.0的驱动开发读书笔记之驱动的概述
- Linux驱动开发之ubuntu下的驱动编译
- linux驱动开发之旅(一)--helloword
- Hasen的linux设备驱动开发学习之旅--支持多设备的字符设备驱动
- Hasen的linux设备驱动开发学习之旅--支持阻塞的设备驱动
- Hasen的linux设备驱动开发学习之旅--支持轮询操作的设备驱动
- Hasen的linux设备驱动开发学习之旅--简单字符驱动实例globalmem
- linux设备驱动开发学习之旅--使用文件私有数据的字符设备驱动
- linux设备驱动开发学习之旅--支持多设备的字符设备驱动
- Java 正则表达式
- javac -classpath的使用
- 【算法学习】回溯法
- Ext JS模拟Windows桌面
- Linux C/C++ 开发工具集锦
- linux驱动开发之旅(八)--遗失的珍珠
- iOS 优秀第三方开源库备忘-汇总
- 我的一些简单的shell脚本实例
- 常用正则表达式
- 进程使用的内存空间分布情况
- java 学习写架构必会几大技术点--目录(键人岐)
- PyCharm配置
- Python 操作Word(Excel、PPT等通用)
- adb logcat -b main -b system