忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 徽章 文库 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
楼主: crazyhadoop

[Linux] Linux 驱动开发前途在哪里? [复制链接]

论坛徽章:
9
IT运维版块每日发帖之星
日期:2015-08-27 06:20:00IT运维版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-23 06:20:00IT运维版块每日发帖之星
日期:2015-11-22 06:20:00操作系统版块每周发帖之星
日期:2015-12-02 15:01:04白银圣斗士
日期:2015-12-07 18:37:03数据库技术版块每日发帖之星
日期:2015-12-10 06:20:00数据库技术版块每周发帖之星
日期:2016-02-03 16:55:092017金鸡报晓
日期:2017-01-10 15:19:56
发表于 2015-09-06 11:49 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2015-09-06 15:33 |显示全部楼层
其实,单纯从某一硬件设备而言,驱动代码其实并不多,说是驱动,其实就是让这个设备能运行罢了,传感器的话就要能采集到数据,诸如此类的,但是,Linux里天然集成了很多框架,其实关键的倒是在这里了,Linux3.8以前的内核没有dtsi,后来采用dtsi后,就在dtsi里申请资源,然后再在驱动代码probe函数的时候去解析,个人感觉,Linux下驱动开发的重点在于理解内核里的这些设计好的框架,如何发挥这些框架的最大作用,这样,写出的代码会很有体系,而且,会真正理解设备驱动划分的原则。抛开Linux谈设备驱动,其实就可以根据datasheet,看下设备的时序、协议,其实并没有什么难处。

求职 : Linux运维
论坛徽章:
202
拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:182015年亚洲杯之约旦
日期:2015-04-05 20:08:292015年亚洲杯之澳大利亚
日期:2015-04-09 09:25:552015年亚洲杯之约旦
日期:2015-04-10 17:34:102015年亚洲杯之巴勒斯坦
日期:2015-04-10 17:35:342015年亚洲杯之日本
日期:2015-04-16 16:28:552015年亚洲杯纪念徽章
日期:2015-04-27 23:29:17操作系统版块每日发帖之星
日期:2015-06-06 22:20:00操作系统版块每日发帖之星
日期:2015-06-09 22:20:00
发表于 2015-09-06 22:36 |显示全部楼层
kernel4.3删除ext3驱动代码可以说是一个好的榜样作用。
ext3开始淘汰了

论坛徽章:
0
发表于 2015-09-06 23:59 |显示全部楼层
我是先研究uc/os-ii,uc/os-iii内核源码,再来看linux内核驱动源码的。光看驱动部分,难度不大,但是深入去探索,比如驱动的设备文件系统里的kobject和kset的关系是如何连接文件和设备的,这是设备的基石,目前还是看得很迷茫,资料不多,真正去研究内核的人少,但是linux内核真的挺好玩,至于内核调度和任务管理,因为我深知uc/os的调度(抢占和时间片)及tcb任务控制块,犹如linux里的task_struct任务控制块,到时linux里分内核空间和用户空间,uc/os是不分的。uc/os设计文件系统的地方很少。这就导致我现在看linux内核有关文件系统方面的很恼火,平时没事,玩linux是人生乐趣,而驱动代码里即使包含了25%的单片机方面知识。如果没搞过单片机,那就挺难的,比如IIC,SPI时序这些单片机里都有,DMA单片机里也有,LINUX内核里的DMA我还没去看。我想先好好研究驱动和与驱动连接比较紧密的内核部分。至于那些LINUX的内核调度和内存管理,暂时先放一放。以后都是要看得。只为乐趣。工作,貌似我也可以做单片机,虽然工资低点,也可以做linux中间件系统编程。现在的andriod内核驱动其实就是linux驱动。貌似没什么变化。我看网上的有关andriod驱动的文章,完完全全是linux内核驱动。我不知道这两系统的驱动有什么区别。

论坛徽章:
9
IT运维版块每日发帖之星
日期:2015-08-27 06:20:00IT运维版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-23 06:20:00IT运维版块每日发帖之星
日期:2015-11-22 06:20:00操作系统版块每周发帖之星
日期:2015-12-02 15:01:04白银圣斗士
日期:2015-12-07 18:37:03数据库技术版块每日发帖之星
日期:2015-12-10 06:20:00数据库技术版块每周发帖之星
日期:2016-02-03 16:55:092017金鸡报晓
日期:2017-01-10 15:19:56
发表于 2015-09-07 18:39 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2015-09-10 22:37 |显示全部楼层
1、谈谈现阶段驱动开发碰到的问题或者疑惑?
不断适应硬件的更新换代,学习最新的技术,把硬件与软件实现最高效率的结合。

2、聊聊不断更新的Linux内核对驱动开发人员带来的影响,如何紧随发展步伐?
比较更新前后的区别,是否对以前的产品有影响,如何把最新的内核运用到产品中来。如要紧随步伐,必须从头了解Linux内核的发展,毕竟是积累了二十多年众人的智慧。

3、分享一下驱动开发人员如何不断更新和建立自己的知识体系!
我是从最底层,从最早版本的代码开始学习,一个Linux是如何启动,如何加载模块,了解了整个Linux系统的运行流程,不必掌握每一个细节,但是要知道它们之间有哪些联系。

论坛徽章:
0
发表于 2015-09-15 10:20 |显示全部楼层
我就看看~~

论坛徽章:
0
发表于 2015-09-16 07:09 |显示全部楼层
回复 1# crazyhadoop

谢谢斑竹。实在是太想得到这本书了。因为我在国外,无法下单买这本最新的linux设备驱动的书。所以,斗胆写一篇博文,期望能够实现。
我主要想谈一下第三个问题,就是设备驱动开发者如何实现在目前的虚拟环境下进行设备的驱动开发。
设备驱动主要是针对具体的物力硬件进行驱动程序的开发。要在开发的实时操作系统中,对于相关的设备的相关动作进行开发。一般说来,要定义设备的数据结构,定义设备的相关状态和相关的动作,比如linux设备驱动中,需要将设备作为一个文件描述符,file ID,然后对这个设备描述符进行类似文件的读写操作,比如open,close,read,write 等。设备驱动具体需要对设备需要的内存进行分配,对其中独特的设备映射的寄存器进行相关的读写操作。对设备的中断,需要截获,并设计中断的回调函数。在回调函数中,进行对中断事件的处理。当然,并不是所有的设备都需要处理如上所述的操作。
  现在,随着互联网的发展,数据中心虚拟化和智能化设备的出现,使得传统的对设备驱动的开发,提出了新的需求。就是以往的设备驱动需要借助于互联网,能够实现设备驱动的虚拟化,即通过互联网或企业的私有云网络,能够被广大用户所共享。所以设备驱动的虚拟化是今后发展的一个重要方面。
   比如网卡的驱动,以往网卡驱动主要是基于PCI总线,进行设备的开发,为操作系统提供对报文的接收,发送,以及相关的open, close等操作。但现在在企业的数据中心中,需要网卡能够虚拟化,即不单是为宿主机提供网络报文的处理,需要为驻留在宿主机上的多个虚拟机提供网络报文的处理(接收,发送)。所以,网卡驱动的开发,需要考虑到多用户的虚拟化的操作。比如,需要实现针对多个虚拟机资源的中断反馈,如何在内核中提供数据的共享,被多个虚拟机所使用。设备驱动的虚拟化,意味着,需要对虚拟环境中的资源提供设备驱动和服务。以往,只提供一份内存的分配(供宿主机使用),现在需要考虑根据虚拟环境资源的部署,动态地分配多个虚拟驱动,被虚拟计算资源调用。这对设备驱动的开发,提出了挑战,即虚拟驱动的内存如何保护(防止多个虚拟机同时写等)。如何实现对驱动的操作的隔离,确保多个虚拟机的同时调用。
   另外,设备驱动在虚拟环境中,必须考虑到动态化,移动化的调用需求。用户可以通过互联网或私有网络,可以远程地调用服务器上的设备驱动,实现相关的服务。所以,设备驱动的输入输出操作,不再是单一的被主机上的某个函数调用所触发,大多数情况下,会被互联网的某个请求,通过HTTP 的RESTful api直接触发。这也是目前操作系统面临的挑战。即用户的操作,从直接的物理计算平台上通过键盘,鼠标,显示器的操作,而变成一种服务,通过互联网进行操作。设备驱动的输入输出和事件等的设计需要和互联网的操作会话关联在一起。所以设备驱动需要面向互联网。当前IoT(Internet of Things)物联网兴起,也是对设备驱动提出了新的技术方向。设备驱动的开发和互联网融合在一起,就是物联网。
  另外设备驱动的智能化,平台化,也是物联网发展的重要方向和基础。设备驱动的平台化,现在肯定是建立在互联网和物联网的技术基础上。平台化,意味着设备驱动必须着力发展互联网技术,无线接入技术,使设备驱动的一些共性的技术平台化,标准化。智能化是需要设备驱动引入自动化的部署和智能化操作。比如目前机器人的相关仿生技术的驱动,需要借助互联网的计算,确定设备驱动的事件和相关的操作。
   总之,物联网技术的发展和互联网+等深入,设备驱动逐渐从后台的被动操作转向可以前台提供智能化服务。设备驱动开发的需求会越来越广泛,一个自动化的智能化的后互联网时代已经到来,设备驱动的开发的新时代到来了。
   

论坛徽章:
0
发表于 2015-09-16 09:12 |显示全部楼层
本帖最后由 怪怪虎 于 2015-09-16 09:14 编辑

有见解,不过问下,如果原有的硬件结构/设计不变,只靠驱动的升级,能实现你列出的问题吗?
回复 18# wangsongbo2015


   

论坛徽章:
0
发表于 2015-09-16 09:37 |显示全部楼层
这个应该还很不错吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP