编写一个陌生的linux驱动的技巧

编写一个陌生的linux驱动的技巧

当你要写一个陌生的linux子系统的驱动时,例如v4l2的camera sensor驱动。首先你得去google、百度搜索一些关于这个子系统****框架的介绍,由于网上文章往往有错误,所以你要多看几篇好的文章,从而有一定了解。然后需要看linux相关的子系统的代码,特别是子系统的api,从而更深入的了解。然后你找一个使用该子系统的应用层和驱动代码例子,进一步理解。然后你基于已有的demo硬件和该子系统设备的驱动,例如camera sensor驱动ov5640_mipi.c的代码,然后基于此代码和硬件做实验,看看如果把某些函数实现注释掉是否对设备显示的基本功能是否有影响,从而知道哪些功能实现是必须的,哪些是扩展的。然后你实现你的设备驱动时,首先搭个框架,把基本功能先实现,配合能用的应用层程序看效果。(即先用好的demo硬件和驱动验证应用程序没有问题,并通过裁剪和尝试,验证驱动的哪些实现api、ioctl等是必须的,再实现你的新硬件的驱动的框架)。当基本功能实现后,增强了你对子系统的工作机理的理解后,你再考虑增加扩展功能,和后面的优化。一定要多做各种可能情况的试验,参考已有驱动和应用层的代码,这样你会更理解该子系统的工作机理。
并且一般用到对比法:即工作正常的和不工作的进行各种情况对比,从而找到原因。当然其中还要利用示波器对比硬件的信号波形、电源等,排除硬件问题。

关于具体的写linux驱动的方法、技巧和注意事项,欢迎观看我的《如何编写linux设备驱动》的视频:
https://edu.51cto.com/course/17132.html

另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html

另外我的免费的linux各种驱动开发课程如下:
https://edu.51cto.com/course/17138.html

原文地址:https://blog.51cto.com/8906847/2367931

时间: 2024-10-08 00:21:22

编写一个陌生的linux驱动的技巧的相关文章

编写Linux驱动与统计单词个数

一.编写Linux驱动程序的步骤 1.建立Linux驱动骨架:也就是装载和卸载Linux驱动.在Linux驱动程序中需要提供两个函数来分别处理驱动初始化和退出的工作.这两个函数分别是module_init和module_exit宏指定. 2.注册和销毁设备文件:任何一个Linux驱动都需要一个设备文件,因为在Linux中设备都以文件的形式来存在.用misc_register和misc_deregiter函数创建和移除设备文件. 3.指定与驱动相关的信息:驱动程序是自描述的.驱动程序的作者姓名.使

linux驱动面试题整理

资料来自网上,简单整理,答案后续补充...... 1.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件. 评:这只是其中一种方式,也叫手动创建设备文件.还有UDEV/MDEV自动创建设备文件的方式,UDEV/MDEV是运行在用户态的程序,可以动态管理设备文件,包括创建和删除设备文件,运行在用户态意味着系统要运行之后.那么在系统启动期间还有devfs创建了设备文件.一共有三种方式可

一个简单的Linux驱动程序:统计单词个数

Linux驱动和普通的Linux API 没本质区别,只是二者使用方式不同. Linux系统将每一个驱动都映射成一个文件,即设备文件,保存在/dev目录中. Linux驱动编写关键在于回调函数编写. 编写Linux驱动程序的步骤: 建立Linux驱动骨架(装载和卸载Linux驱动):即驱动的装载和卸载: 注册和注销设备文件:即创建和移除设备: 指定驱动相关信息:驱动程序是自描述的: 指定回调函数:做好数据接收响应: 编写业务逻辑:Linux驱动的核心部分,由多个函数.多个文件或者多个Linux驱

【Linux学习】如何了解一个陌生的命令?

如何了解一个陌生的命令? 有一些命令可以用来了解某个命令本身的情况,比如这个命令的绝对路径. $which ls which 在默认路径中搜索命令,返回该命令的绝对路径. $whereis ls whereis 在相对比较大的范围搜索命令,返回该命令的绝对路径. $whatis ls whatis 用很简短的一句话来介绍命令. $man ls man 查询简明的帮助手册.对于大部分的Linux自带的命令来说,当作者编写它的时候,都会带有一个帮助文档,告诉用户怎么使用这个命令. (man可以说是我

linux设备驱动第二篇:一个简单hello world驱动如何实现

上一篇介绍了linux驱动的概念,以及linux下设备驱动的基本分类情况及其各个分类的依据和差异,这一篇我们来描述如何写一个类似hello world的简单测试驱动程序.而这个驱动的唯一功能就是输出hello world. 在编写具体的实例之前,我们先来了解下linux内核下调试程序的一个重要函数printk以及几个重要概念. printk类似c语言的printf,是内核中输出打印信息的函数.以后驱动调试中的重要性不言而喻,下面先做一个简单介绍. printk的级别 日志级别一共有8个级别,pr

Linux驱动之触摸屏程序编写

本篇博客分以下几部分讲解 1.介绍电阻式触摸屏的原理 2.介绍触摸屏驱动的框架(输入子系统) 3.介绍程序用到的结构体 4.介绍程序用到的函数 5.编写程序 6.测试程序 1.介绍电阻式触摸屏的原理 所谓的电阻式触摸屏,只不过是在LCD屏幕上贴了一层膜,这层膜的大小与LCD的尺寸刚好相同,它分为上下两层膜(假设上层为X膜,下层为Y膜),按下膜的不同位置,会产生不同的电压值,这样根据不同的电压值可以确定触点的位置,这就是触摸屏的基本原理.其实是利用了最简单的电阻分压原理. 下面的图是四线式电阻触摸

disk磁盘管理与Linux驱动编写

磁盘管理 一.关于硬盘接口 安装linux red hat系统,到分区时发现硬盘驱动器设备 /dev/sda             #sata接口设备名 /dev/sda1 #sda对应的物理分区 /dev/sda2 /dev/sda3 而又的安装时硬盘驱动设备名为 /dev/hda #IDE接口设备目录 /dev/hda1 sda和hda有什么区别那? HDA是使用了ide接口的硬盘的名称.SDA是sata接口的硬盘的名称.在最新的2.6.19内核里,所有的硬盘都叫SDA了. GERUB里填

在ubuntu linux 中编写一个自己的python脚本

在ubuntu linux 中编写一个自己的简单的bash脚本. 实现功能:终端中输入简单的命令(以pmpy为例(play music python),为了区别之前说的bash脚本添加了py后缀),来实现音乐的播放.注:本人ununut中安装了audacious,所以就以audacious为例,来实现音乐的播放. 第一步:进入一个目录,最好是自己特别选定的,如果用文件浏览器可以新建一个名为pmpy空白文档文件:如果是用终端可以输入命令:vi pmpy(可能会因为位置问题,需要添加sudo) 第二

第一个Linux驱动查询:统计单词个数

编写Linux驱动程序的步骤 第一步:建立Linux驱动骨架(装载和卸载Linux驱动) 第二步:注册和注销设备文件 可以分别使用misc_register和misc_deregister函数创建和移除设备文件. 第三步:指定与驱动相关的信息 第四步:指回调函数 第五步:编写业务逻辑 第六步:编写Makefile文件 第七步:编译Linux驱动程序 第八步:安装和卸载Linux驱动 将Linux驱动编译进内核,只要将Linux使用该内核,驱动程序就会自动装载 如果Linux驱动程序以模块单独存在