信盈达—您身边的嵌入式&人工智能专家
全国免费咨询热线:400-8788-909

一文带你深入了解linux驱动

时间:2020-03-20 16:32:48 来源:信盈达 作者:信盈达

很多程序员在学习技能时,盲目追求技术实现,而忽略了整个生态环境的观察和基础理论铺垫,导致学完后似是而非,不能举一反三,遇到项目依然拿不出合理的解决方案。


作为一个技术开发者,大家要明白技术只是工具,有用的是产品,我们要用技术去解决问题,而不是单纯地做个技术控,自我娱乐。


想要学习一门新技术,我们首先要对它有个清晰的了解,不能什么都不懂就开始往上面扑,就像很多人到庙里面就上香求佛祖保佑,可能根本都不知道这个佛是哪一路神仙。


那今天我们就先带大家来深入了解下嵌入式开发中至关重要的一环:linux驱动。


在学习驱动之前,我们首先来了解下操作系统。


# 操作系统OPERATING SYSTEM #


计算机出现的时候,还没有什么花里胡哨的包装,都是光着身子跑,用技术的语言说就是它只能执行一个任务,执行一个进程,也可以叫裸跑


可以拿我们的手机来比喻,裸机的话,我们玩王者荣耀的时候,有人打电话进来的话,王者荣耀是要被终止的。


后来就有了操作系统,操作系统可以保证多任务执行,同样的 CPU 芯片,有了操作系统,我可以开微信,QQ ,还同时做其他很多事情。


所以就出来了很多操作系统,操作系统可以分为实时操作系统和通用操作系统


实时操作系统(RTOS 全称Real Time Operating System)可以理解为对时间要求非常苛刻,可以用一个词“必须”来理解,就是在某个时间段之内必须要做某件事情。


而通用操作系统很常见,比如电脑 windowsAndroid 手机,ios手机等,Linux 也可以认为是通用 OS,因为他们对时间要求不是很严苛。


Linux 可以通过配置某个宏定义变成实时操作系统,但是我们使用Linux 主要是针对他的通用 OS,多用户,多任务等特别突出的性能。


目前这个阶段,可以说每个人都脱离不开Linux,比如你手机底层是 Linux 内核,购物的云平台,淘宝,亚马逊等都是用 Linux 开发维护的,很多股票平台也都是基于 Linux 开发维护的。


# 什么是驱动?WHAT IS DRIVE #


按照字面意思就是给一个东西动力,让它动起来,至于物体怎么动是有一定的逻辑规律在里面的;对于电学中的硬件驱动来说,电力提供了动力,但是驱动程序提供了操作物体的逻辑方法


比如我们的LED路灯照明,电让我们的LED灯亮起来,但是里面的程序检测到时间的变化控制电路的导通和断开,这里面的驱动程序就叫LED Driver


# linux驱动LINUX DRIVER #


linux驱动是linux内核驱动的全称,至于什么是linux内核,我们将在下面的linux体系结构中进行说明。


对于linux驱动的理解可以分为广义和狭义上两种。


linux驱动广义上是指操作硬件,让硬件工作起来的程序代码,这段代码就叫做硬件的驱动程序。


但是在裸机开发中我们也经常会听到裸机驱动,其实严格意义上来说,没有操作系统是没有驱动概念的,如果非要说裸机驱动的话,也是指裸机中操作硬件的那部分程序。


linux驱动狭义上是指操作系统中用来控制硬件的逻辑方法的那部分代码。


对于这个定义我们可以从以下两方面去进行理解:


①操作系统有很多种,windowswindows驱动,iosios驱动,androidandroid驱动,而我们学习的linux驱动则是针对linux操作系统平台。


②linux驱动只是内核中的一部分,除了用来控制硬件的这部分外,还有文件系统,内存管理,内核调度等内容。


而狭义上的linux驱动是我们课程的研究方向。


# linux体系结构LINUX ARCHITECTURE #

了解linux体系架构,有助于增强我们对驱动开发整个体系的认识,帮助我们更好地投入到linux驱动学习中。


①、linux系统是分层的



Linux系统一般有4个主要部分:内核shell文件系统和应用程序


内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。


分层设计的思想让程序间松耦合,有助于适配各种平台。


②驱动的上面是系统调用,下面是硬件。


③驱动本身也是分层


Linux内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。


彼此之间的系统合作也是一级调用一级,系统庞大,这也是它难以学习的原因所在。


# linux驱动的分类CLASSIFICATION OF LINUX DRIVERS #


Linux驱动分为三个基础大类:字符设备驱动块设备驱动网络设备驱动


①字符设备


字符设备提供的就是一种数据流。比如当你在键盘上敲入“yes”这个字符串的时候,键盘驱动程序会按照输入完全相同的顺序返回这个由这三个字符组成的数据流,首先是“y,然后是“e,然后是“s”,最终是文件的结束符(EOF,当没有人敲键盘的时候,键盘的字符流就是空的。


所以鼠标、键盘、显示器等都是典型的字符设备。


②块设备


而块设备的驱动可能要求读取磁盘上任意块的内容,然后又转去读别的块的内容,而被读取的块在磁盘上位置不一定要连续,所以说硬盘是可以被随机访问的,而不是以流的方式被访问,显然它就是一个块设备。


典型的块设备有:磁盘、U盘等。


③网络设备


网络设备驱动是特殊设备的驱动,它负责接收和发送帧数据,可能是物理帧,也可能是ip数据包,这些特性都由网络驱动决定。


典型的网络设备有:网卡、wifi、蓝牙等。


而在我们的linux驱动学习中,字符设备驱动占的比例比较大。


因为字符设备应用面广,在以后的开发中是使用最多的。对于块设备和网络设备要求修改或者定制的很少,一般都是厂家拿过来可以直接用的。


# 为什么要学习linux驱动? REASONS FOR LEARNING LINUX DRIVER #


1、因为90%的程序员不懂Linux内核,所以会linux内核驱动的人才,薪资比一般的程序员要高出一倍多。



2、ios安卓开发环境中的API经常变,如果长时间不用,再下手去做时,可能就不会了,几年的积累全没了,Linux内核这种变化不剧烈并且开源的东西可以让学习者长年累月的学习并且能有所积累。


3、作为开发人员,不管你从事的是驱动开发,应用开发,还是后台开发,如果不了解进程的调用机制,不知道进程会阻塞,就绪,执行几个状态,你怎么可能编写好一个低容错率的代码呢?


学习完 Linux 内核你会对整个计算机体系有一个更深刻的认知,理解计算机操作系统和内核的运行机制,才可能更好的编写你的代码,出现更少的错误。


4、Linux 内核现在覆盖的领域非常广,手机、平板、路由器等等,就大家非常喜欢的苹果操作系统,底层内核也是有 Linux的影子,Linux 的普及毋庸置疑,学习 Linux 应该作为每个技术人员的标配


5、在面试时,技术面试官也非常喜欢问linux方面的问题,linux能够帮助你快速拿下高薪offer


# linux驱动如何学习?HOW TO LEARN LINUX DRIVER #


linux驱动学起来内容多,内核数据结构复杂,涉及文件庞大,拉来拉去的,基本功不足根本没有办法学习,走两步不知道自己在什么地方,找不到自己原来的位置。这就是大部分学生学习驱动的现状。


因此在学习linux驱动前必须要有很好的裸机开发基础,因此我们的嵌入式课程设计,在linux驱动之前设置了相应的基础课程,帮助大家做好学习linux驱动阶段的基础准备。


c语言高级编程




通过这个阶段的学习,提高c语言基本功,锻炼程序开发与分析能力。


▲▲▲

扫描二维码,回复“c语言

免费获取C语言学习50+项目案例源码



②裸机开发



在本阶段会结合大量的项目,比如:智能云家居,四轴飞行器等,来让大家提升对soc本身认识。


▲▲▲

扫描二维码,回复云家居

获取云家居项目开发资料包


③系统编程



通过系统编程,让大家知道在应用层怎么使用、调用驱动,明晰应用和驱动之间的协同合作流程。


U-Boot



通过bootloader移植,让大家学习如何搭建开发板环境,进而逐步接触到稍微复杂一点的代码及其分析。


▲▲▲

扫描二维码,回复“uboot”

免费获取u-boot在线学习课程


经过四个阶段的学习与铺垫,相信大家都能学会驱动的。



# linux驱动课程设计COURSE DESIGN OF LINUX DRIVER #

linux驱动是信盈达的王牌课程,以每年两次的速度不断迭代更新,让学员掌握最新的潮流技能。


今年linux驱动课程将采用A9+A72双平台教学通过3大项目实战,让大家掌握linux驱动开发的精髓,帮助学员们在就业市场能够脱颖而出。


具体课程设计如下:


1、驱动应该怎么学

2、linuxshell应用

3、linux文件系统

4、字符设备驱动基础

5、字符设备驱动框架

6、linux设备驱动模型

7、Linux内核设备树

8、ARM Linux中使用DTS实例

9、触摸屏驱动与多点触控制协议

10、块设备与网络设备

11、嵌入式视频监控项目

12、嵌入式视频广告机项目

13、嵌入式linux视频采集项目



想要了解更多课程优惠信息或获取项目课程资料,可以扫描下方二维码进行咨询。


▲▲▲