计算机总体的工作过程:
应用程序 -->调用系统API -->系统调用驱动程序中的方法 -->驱动程序驱动设备运行

如何理解调用系统API?
其实也就是读写文件,linux中所有东西都以文件的形式抽象化。文件我们可以分为两种,普通文件和设备文件。
当你要打开普通文件时,你会调用系统的open()这个API,然后就可以对普通文件进行操作了。
当你要打开设备文件时,你也是得调用系统的open()这个API,但是操作系统识别到你要操作的是设备文件,于是该设备的驱动程序便会运行起来了!

所以以上可以简化为:
应用程序 -->系统调用驱动程序中的方法 -->驱动程序驱动设备运行

所以当我们发明一个新硬件时,我们得写出这个设备的驱动程序,然后再写出这个设备的应用程序。

为什么平时我们生活中很少感受到这两种东西呢?比如我们买的打印机、麦克风、监控设备。
那是因为这些东西系统都已经帮我们做好了,驱动装好了,应用程序也有了,一般来说驱动更新的时候我们才会接触到驱动。

如何写驱动程序?
1.
驱动程序的目的在于向你的硬件设备发送该硬件设备支持的相关数据。
2.
驱动程序中的方法相当于一个接口,面向上层也就是应用程序的调用。一般来说函数名跟系统的API一样,常见的功能函数有xxx_open()、xxx_wtire()
所以驱动程序主要就是一个程序,里边包含一些相关功能的函数,等着被调用,感觉就是一个库。

如何使用驱动程序?
你把驱动程序写好了,先把它加载进你的计算机,也就是安装一个模块,然后就是向系统注册了,注册过程就是创建你这个驱动程序的结构体,包括包含的函数的指针,还有设备号列表。设备号列表就是说明你这个驱动程序支持哪些设备(每个设备都有设备号)。

注册完成后你还得创建一个设备文件,设备文件就是设备的抽象化,把你对硬件设备的读写抽象成你对这个设备文件的读写。也就是说,设备文件创建好后,你可以通过这个设备文件对设备进行实际操作了。

设备文件如何跟设备还有驱动程序联系起来呢?
指定设备号,创建一个设备文件时需要指定设备号。

当一个驱动程序出现在计算机时,就要向计算机汇报,然后进行注册,当一个硬件设备出现在计算机中时,也要向计算机进行汇报,然后进行注册。同时计算机会匹配驱动程序与硬件设备,匹配成功后,硬件设备就可以进行工作了,就可以等着应用程序进行调用了。

应用程序如何调用驱动程序?
应用程序不需要考虑调用驱动程序,驱动程序只是中间过程,应用程序只需要考虑调用设备,也就是读写设备文件就可以了!

剩下的就是操作硬件的代码了,应该就是寄存器的操作了,以后有时间再看。

纯属本人理解:如有错误敬请指出!

参考:
在linux下写一个简单的驱动程序
驱动程序开发的步骤

关于linux驱动程序的学习相关推荐

  1. Linux驱动程序学习步骤

     了解linux驱动程序技巧学习的方法很重要,学习linux操作系统时,你可能会遇到关于驱动方面的问题, 这里将介绍学习linux驱动程序的方法,在这里拿出来和大家分享一下. 1.学会写简单的make ...

  2. 《Linux设备驱动程序》学习2—高级字符设备驱动ioctl

    今天进入<Linux设备驱动程序>第六章高级字符设备驱动程序操作的学习,学习的过程和简单字符设备驱动程序的学习是一样的,看书,看程序,然后就是看Tek的博客笔记.依然tek的博客中对于这一 ...

  3. 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序 (学习老罗的)

    不得不说,老罗写的太好了. 按照他的方法,我两次就成功了. 不过有点让人奇怪的地方就是 第一次我make snod是成功的 但是执行如下代码:       root@android:/ # cd sy ...

  4. 在Ubuntu上为Android系统编写Linux内核驱动程序(学习老罗的)

    首先提出2个问题 1. 驱动程序的作用是什么? 答:驱动程序的作用主要是向上层提供访问设备寄存器的一个接口,包括读和写. 2. 访问设备驱动程序的方法? 答:a. 通过proc文件系统来访问:b. 通 ...

  5. Linux系统新手学习的11点建议

    随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起.这里介绍学习Linux的一些建议. 一.从基础开始:常常有些朋友在Linux论 ...

  6. Linux防火墙iptables学习

    http://blog.chinaunix.net/uid-9950859-id-98277.html 要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多数据包进入,离开,或者经过 ...

  7. 基于linux的java学习,Java学习---Linux总结

    Linux总结 1.学习Linux的原因 学习Linux/Unix的原因是它们适合作为服务器,它们不是针对一个人的,是多用户的. 2.操作系统OS OS主要包括: 内核 kernel: 通常将一些与硬 ...

  8. linux内核体系学习路径_Linux内核分析(一)linux体系简介|内核源码简介|内核配置编译安装...

    从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解. 今天我们会分析到以下内容: 1. Linux体系结构简介 ...

  9. 嵌入式系统开发学习步骤(Linux高级编程学习顺序)

    2019独角兽企业重金招聘Python工程师标准>>> 嵌入式系统开发学习步骤(Linux高级编程学习顺序) 1.Linux 基础 安装Linux操作系统 Linux文件系统 Lin ...

最新文章

  1. python调用js库中的函数_Python 调用JS文件中的函数
  2. 深度揭秘Windows 7
  3. 分峰截幅c语言算法,面向桥梁健康监测的复合传感技术研究
  4. java如何读取rfid的数据_100G 数据如何先随机读取1%?
  5. 闲鱼疯转6800份!大厂内部数据分析资料首公开!
  6. Rust中mut, , mut的区别
  7. jQuery Event.delegateTarget 属性详解
  8. json获取key对应的值java_java 获取json字符串中key对应的值
  9. CentOS7 完全卸载MySQL
  10. RJ45接口定义及网线线序
  11. python 模拟鼠标键盘_如何用 python 模拟鼠标和键盘的操作
  12. matlab程序阻尼牛顿法,matlab阻尼牛顿法
  13. iPhone5翻新机卡贴机,妖机真实信息获取方法
  14. SCRCPY与Android操作流程(华为手机) 原创超详细
  15. 如何删除2345SafeCenterSvc
  16. 解读场景化视频制作工具的实现过程
  17. 微信小程序如何刷新当前页面或者刷新上一个页面
  18. SQL存储过程使用介绍
  19. PDF To JPEG Pro(pdf转jpg软件)官方正式版V4.40 | pdf转jpg免费版下载 | pdf转jpg软件有哪些?
  20. tableview的详解

热门文章

  1. Mac OS X 10.8.5 安装编译glib
  2. 部署安全的香港服务器注意事项
  3. TikTok时代细分需求 牛逼亚马逊运营团队打造新爆款
  4. 构建基于Ceph的文件共享服务
  5. SD-WAN将成为物联网部署中的骨干网—Vecloud
  6. 和ISP合作需要了解什么?—Vecloud微云
  7. gnome3增加自定义程序快捷方式
  8. Day15模块(导入,使用)
  9. Android Studio 快捷键使用说明
  10. 33:把数组排成最小的数