Linux驱动开发
文章平均质量分 95
遇雪长安
这个作者很懒,什么都没留下…
展开
-
Linux驱动开发:10、驱动-进程&设备文件&内核驱动
随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记下来。存在很多在特殊情况下有一点用处的技巧,用的不多的技巧可能一个星期就忘了。想了很久想通过一些手段把这些事情记录下来。也尝试过在书上记笔记,这也只是一时的,书不在手边的时候那些笔记就和没记一样,不是很方便。原创 2024-03-06 16:00:48 · 7392 阅读 · 0 评论 -
Linux驱动开发:9、驱动-控制接口的实现(ioctl)
以字符设备为例。一般情况下,一个字符设备的驱动,除了读取和写入设备之外,大部分的驱动程序都需要通过设备驱动程序来执行各种类型的硬件控制。例如,针对串口设备,驱动层除了需要提供对串口的读写,还需要提供对串口波特率、校验位、以及流控等配置信息的控制。这些配置信息需要从应用层传递一些基本数据,相比普通的读写数据,控制数据仅仅也只是数据类型不同。同时传输的控制信息,数据量一般情况下也不会太大。原创 2024-03-06 15:59:14 · 6663 阅读 · 0 评论 -
Linux驱动开发:8、驱动-读写接口实现(read&write)
随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记下来。存在很多在特殊情况下有一点用处的技巧,用的不多的技巧可能一个星期就忘了。想了很久想通过一些手段把这些事情记录下来。也尝试过在书上记笔记,这也只是一时的,书不在手边的时候那些笔记就和没记一样,不是很方便。原创 2024-03-06 15:57:52 · 6797 阅读 · 3 评论 -
Linux驱动开发:7、设备-自动创建设备节点
在前面两小节中,我们学习到了设备注册。可以将一个设备驱动注册到内核中。设备注册完成后,还需要通过mknod指令在用户空间中手动创建该驱动对应的设备节点。该命令在执行是不会检查参数的合法性。也不会检查设备驱动是否存在。如果系统中所有的驱动都通过该方法创建设备节点,就会出现一个问题。当设备未接入时,就可能会出现很多的设备节点。实际上Linux内核为我们提供了一组函数,可以在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。原创 2023-10-18 15:48:09 · 7473 阅读 · 2 评论 -
Linux驱动开发:6、设备-更简单的设备注册
随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记下来。存在很多在特殊情况下有一点用处的技巧,用的不多的技巧可能一个星期就忘了。想了很久想通过一些手段把这些事情记录下来。也尝试过在书上记笔记,这也只是一时的,书不在手边的时候那些笔记就和没记一样,不是很方便。原创 2023-10-18 15:45:52 · 6460 阅读 · 0 评论 -
Linux驱动开发:5、设备-设备注册
随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记下来。存在很多在特殊情况下有一点用处的技巧,用的不多的技巧可能一个星期就忘了。想了很久想通过一些手段把这些事情记录下来。也尝试过在书上记笔记,这也只是一时的,书不在手边的时候那些笔记就和没记一样,不是很方便。原创 2023-09-29 15:54:14 · 5327 阅读 · 0 评论 -
Linux驱动开发:4、设备-设备号&设备号注册
随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记下来。存在很多在特殊情况下有一点用处的技巧,用的不多的技巧可能一个星期就忘了。想了很久想通过一些手段把这些事情记录下来。也尝试过在书上记笔记,这也只是一时的,书不在手边的时候那些笔记就和没记一样,不是很方便。原创 2023-07-26 11:56:14 · 5273 阅读 · 0 评论 -
Linux驱动开发:3、模块_传递参数
在用户态下编程可以通过main来传递命令行参数,而编写一个内核模块则可通过来传递命令行参数。宏是Linux 2.6内核中新增的,该宏被定义在/**/**/**/**/**/**/**/**/**使用了3个参数:变量名,它的类型,以及一个权限掩码用来做一个辅助的sysfs入口。这个宏定义应当放在函数之外,典型的是出现在源文件的前面。则是另一个变种,以示例说明可使得var变量在内核外的变量名称为var_out。在内核外给var_out赋值等同于给模块内var变量赋值。原创 2023-07-26 11:49:49 · 6031 阅读 · 0 评论 -
Linux驱动开发:2、模块_引用符号
这里的符号主要指的是全局变量和函数Linux内核采用的是以模块化形式管理内核代码。内核中的每个模块相互之间是相互独立的,也就是说A模块的全局变量和函数,B模块是无法访问的。不同模块间可通过导出宏,将符号导出,被导出的符号可被其他模块使用。原创 2023-07-26 11:46:30 · 5953 阅读 · 0 评论 -
Linux驱动开发:1、模块_加载卸载
一个基础模块的源代码,应有c文件,h文件(可选)和makefile文件构成。原创 2023-07-22 22:17:38 · 5297 阅读 · 0 评论