正点原子阿尔法ARM开发板-IMX6ULL(十二)——驱动开发的简单介绍
一、前言
也终于是到了这个最是激动人心的时刻了,那个也是从本科,就听说过的词汇,非常的让人神往,这个词对我而言像什么呢,有点像,大一大二第一次听深度学习、神经网络那种崇拜感吧,本科我一直想学,但是基础不扎实,也不敢冒然的去学习,当然,也可能是个祛魅的过程不过现在算是好很多了(虽然直接跳过了第三篇-系统移植,可能会对u-boot、Linux的顶层Makefile进行学习吧),那个词也就是——驱动开发。但是也有人泼冷水,说驱动开发都是开发好的,学这些东西没有用,没必要去学,还有就是嵌软赚不到钱之类的话,怎么说呢,反正,就是在你走的路上的话,总会有人用一种高高在上的姿态,像指点江山的一样的口气,去在你喜欢的领域评头论足(你tm谁啊,关你什么事,老子就喜欢,咋了?有问题?)
也是看到一句话——当人们赞美我高谈阔论的缺点,责备我沉默寡言的美德时,我的孤寂感便产生了。
二、Linux驱动开发思维
1、Linux下驱动开发直接操作寄存器不现实。
2、根据Liux下的各种驱动框架进行开发。一定要满足框架,也就是Liux下各种驱动框架的掌握。
3、驱动最终表现就是/dev/xxx文件。打开、关闭、读写……
4、现在新的内核支持设备树,这个一个**.dts文件**,此文件描述了板子的设备信息。
三、驱动开发分类
linux驱动分为三大类:
1、字符设备驱动,最多的。
2、块设备驱动,存储
3、网络设备驱动,
一个设备不说是一定只属于某一个类型。比如USB WIFI,.SDIO WIF1l,属于网络设备驱动,因为他又有USB和SDIO,因此也属于字符设备驱动。
四、应用程序和驱动的交互原理
1、驱动就是获取外设、或者传感器数据,控制外设。数据会提交给应用程序。Liux驱动编译既要编写一个驱动,还要我们编写一个简单的测试应用程序,APP。单片机下驱动和应用都是放到一个文件里面,也就是杂糅到一起。Liux下驱动和应用是完全分开的。
用户空间(用户态)和内核空间(内核态):
Linux操作系统内核和驱动程序运行在内核空间、应用程序运行在用户空间。
应用程序想要访问内核资源,怎么办,有三种方法:系统调用、异常(中断)和陷入。
应用程序不会直接调用系统调用,而是通过API函数来间接的调用系统调用,比如POSX、API和C库等。unix类操作系统中最常用的编程接口就是POSIX。.
应用程序使用open函数打开一个设备文件。
每个系统调用都有一个系统调用号。
系统调用处于内核空间,应用程序无法直接访问,因此需要“陷入“到内核,方法就是软中断。陷入内核以后还要指定系统调用号。
五、字符设备驱动开发流程
l,Linux里面一切皆文件,驱动设备表现就是一个/dev/下的文件,/dev/Ied。应用程序调用open函数打开设备,比如Ied。应用程序通过write函数向/dev/led写数据,比如写1表示打开,写0表示关闭。如果要关闭设备那么就是close函数。
2,编写驱动的时候也需要编写驱动对应的open、close,write函数。字符设备驱动fileoptions_struct。
原文地址:https://blog.csdn.net/m0_52592798/article/details/143354697
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!