完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
很多程序员在学习技能时,盲目追求技术实现,而忽略了整个生态环境的观察和基础理论铺垫,导致学完后似是而非,不能举一反三,遇到项目依然拿不出合理的解决方案。 作为一个技术开发者,大家要明白“技术只是工具,有用的是产品”,我们要用技术去解决问题,而不是单纯地做个技术控,自我娱乐。 想要学习一门新技术,我们首先要对它有个清晰的了解,不能什么都不懂就开始往上面扑,就像很多人到庙里面就上香求佛祖保佑,可能根本都不知道这个佛是哪一路神仙。 那今天我们就先带大家来深入了解下嵌入式开发中至关重要的一环:linux驱动。 在学习驱动之前,我们首先来了解下操作系统。 # 操作系统OPERAtiNG SYSTEM # 计算机出现的时候,还没有什么花里胡哨的包装,都是光着身子跑,用技术的语言说就是它只能执行一个任务,执行一个进程,也可以叫“裸跑”。 可以拿我们的手机来比喻,裸机的话,我们玩王者荣耀的时候,有人打电话进来的话,王者荣耀是要被终止的。 后来就有了操作系统,操作系统可以保证多任务执行,同样的 CPU 芯片,有了操作系统,我可以开微信,QQ ,还同时做其他很多事情。 所以就出来了很多操作系统,操作系统可以分为实时操作系统和通用操作系统。 实时操作系统(RTOS 全称Real Time Operating System)可以理解为对时间要求非常苛刻,可以用一个词“必须”来理解,就是在某个时间段之内必须要做某件事情。 而通用操作系统很常见,比如电脑 windows,Android 手机,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驱动狭义上是指操作系统中用来控制硬件的逻辑方法的那部分代码。 对于这个定义我们可以从以下两方面去进行理解: ①操作系统有很多种,windows有windows驱动,ios有ios驱动,android有android驱动,而我们学习的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驱动阶段的基础准备。 |
|
|
|
1004 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
3272 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1443 浏览 0 评论
2102 浏览 0 评论
1614 浏览 0 评论
75283 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 00:37 , Processed in 0.539012 second(s), Total 62, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号