怎么写Linux驱动

搞了一段时间驱动后的个人感悟,不管什么驱动,要少走弯路,共同的驱动工作流程应该如下:

1、看书,看资料,搞清驱动的原理:内核的该类驱动的架构,工作机制等,建议必读的文档是linux内核源代码的Document目录下的该驱动的txt文档,这里的文档最直接,最核心、最关键... 该有的都有了。

2、看datasheet,datasheet往往很多页,需要现在全看吗?No,现在先看总体的相关内容,先了解管脚定义,了解总体架构,了解寄存器或内存分配。掌握硬件的基本工作原理。

以上两步别想着偷懒略过,即使你有现成的别人写好的驱动,要调试到你的平台中去正常工作,到最后走了N多弯路都会发现,你没有因为不读文档而节约到任何时间,反而浪费了N多时间。有句话说得很对:“在江湖上混的,迟早都要还的。”

3、看例子驱动,Linux内核的驱动,一般都有一个比较简单的example代码,具体是哪个,请看第一步的txt文档。通过这个简单的example代码,更进一步的理清了驱动的工作原理。

4、好了,准备工作完成,这里应该正式开工。自己写?No,还是偷偷懒,网上找现成的,有恰好就是你的芯片的驱动,真幸运,直接用,当然经常是不能直接就能用上,要调试下下才行。没有?找同一系列芯片的驱动,修改下用,也比较幸运。还是没有?老老实实在example代码提供的框架上开始写吧!

5、调试过程中遇到问题?老老实实再看datasheet的相关部分吧,这个相关部分往往不在同一章节,多数时候会分布在很多章节中,不要漏过细节。你的寄存器都设置对了吗?都对了?用示波器,逻辑分析仪抓波形,分析时序,看硬件对不对罗。不对,就找硬件工程师。还不对?到芯片官方网站,看看你的datasheet是最新的版本吗?有没有勘误文档。说不定你手头的文档都有错误,你当然调死也调不出来!

怎么写Linux驱动

时间: 2024-08-06 03:44:37

怎么写Linux驱动的相关文章

第二次写linux驱动总结

第一次写驱动是在去年,2019年十月份左右.当时是看着韦老师的视频一步步完成的.其中经历了很多error.搭建环境花费了很多精力.时间来到了2020年2月19日星期三,韦老师新视频出来了,我跟着再来了一次学习,使用开发板是100ask_6ull,依然是从搭建环境开始,不过感觉没有说明进步,该经历的坎坷,一样也没有少.特别是shinrk,压缩虚拟机ubuntu大小,导致挂掉,幸亏之前导出来过一次,又还原了!要不然,又要推迟2天!废话不多说,下面正式开始. 准备工作: 构建系统 使用如下命令一键配置

linux驱动probe函数的实现框架思考

linux驱动probe函数的实现框架思考 .probe函数实现无非就是1)创建一个私有的driver_data用于区分不同的device,因为一个driver可以管理多个device,2)parse device tree,并根据配置申请资源.io resource.memory:3)初始化设备4)注册对应的子系统暴露对应的接口,子系统相关的底层函数需要你实现,实现/dev/设备的file_operation.sysfs.proc接口.:5)dev_set_drvdata 绑定私有结构和设备的

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

编写一个陌生的linux驱动的技巧 当你要写一个陌生的linux子系统的驱动时,例如v4l2的camera sensor驱动.首先你得去google.百度搜索一些关于这个子系统****框架的介绍,由于网上文章往往有错误,所以你要多看几篇好的文章,从而有一定了解.然后需要看linux相关的子系统的代码,特别是子系统的api,从而更深入的了解.然后你找一个使用该子系统的应用层和驱动代码例子,进一步理解.然后你基于已有的demo硬件和该子系统设备的驱动,例如camera sensor驱动ov5640_

Linux驱动开发盲点笔记1

1. vim中在找到搜索目标后,使用n与N进行定位查找 2. vim中使用gg到最好第一行,使用xxxG到某一行,否则G直接到最后一行: 3. ln -s 产生的链接文件最终指向的目标文件src 新产生的当前软链接文件dst. ln -s project(磁盘上实际存在的文件或者目录) a.lnk ln -s src dst(新产生的文件dst,dst链接到src) symlink功能类似 4 tar -czvf 最终生产的tar打包好的文件 待打包的文件或者文件夹 tar czvf a.tar

几个Linux驱动面试题目

这几天面试几个想做安卓Linux驱动的,总体感觉上驱动基础还是比较薄弱,大部分情况是虽然做过驱动,但是基本上都是采用内核现成的,或者是开发板上已经有的,单独写过模块驱动很少,驱动机制理解不是很透彻.以下是几个随口问过的基础问题,供参考. 1.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的? 2.写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的? 3.自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋锁还

【Linux 驱动】设备驱动程序再理解

学习设备驱动编程也有一段时间了,也写过了几个驱动程序,因此有对设备驱动程序有了一些新的理解和认识,总结一下.学习设备驱动编程也有一段时间了,也写过了几个驱动程序,因此有对设备驱动程序有了一些新的理解和认识,总结一下. ★什么是驱动程序 刚开始学习设备驱动程序的时候,产生了许多的问题.什么是驱动程序?驱动程序是干嘛的?它是如何工作的?它又是如何跟操作系统联系起来的?一系列的问题,现在有些地方还是不一定清楚,但是相比起刚开始的那个阶段,感觉自己还是清楚了很多. 设备驱动程序说白了(实质)就是为应用程

linux驱动面试题整理

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

第1个linux驱动___搭建环境,蓄势待发

如何开始写最简单的linux驱动? 在阅读本文前,你需要对linux的基本知识.ubuntu虚拟机的安装与命令行操作有基本的了解. 环境搭建:我在windows电脑上使用VMware打开安装好的虚拟机ubuntu9.0,ubuntu是运行linux内核的linux发行版. 我习惯secureCRT通过SSH远程登录到虚拟机上操作,当然你也可以直接在虚拟机环境下操作. 在根目录下建立一个目录树: cd / mkdir -p /work/my_drivers/frist_drv/1th 进入底层目录

android应用程序访问linux驱动第一步:实现并测试Linux驱动

一直都想亲自做一次使用android应用程序访问Linux内核驱动的尝试,但总是没能做到.最近抽出时间,下决心重新尝试一次.尝试的开始当然是先写一个Linux内核驱动了. 我希望写一个简单测驱动程序,实现写一个字符串进去,然后再把它读出来的功能.驱动中会创建dev/hello设备节点和/sys/class/hello/hello/val 设备节点,没有实现proc/下的对应的设备节点./sys/class/hello/hello/val 主要用于快速测试,而dev/hello则主要用于供上层应用