中午跟比较要好的同事一块吃饭,同事刚从单片机开发转linux开发没多久,目前负责给客户开发一个usb 设备驱动。他跟我抱怨,由于获取不到客户内核代码,因此每次客户那边内核代码发生了改变,自己的驱动程序也要跟着重新编译,太麻烦了。因此,我建议同事把驱动写到app里面。同事大惊,linux能在应用层开发驱动?
答案是肯定的。在linux系统中,对于总线类驱动(usb,i2c,spi等),驱动框架都分为俩部分。一是总线控制器驱动,它负责使能总线传输数据的能力。二是设备驱动,它负责使能挂在总线上的设备。
以usb设备为例,usb host controller驱动使得linux可以在自己及挂在自己身上的usb 设备(如usb转串口设备、usb摄像头等)之间传输数据。但是usb设备种类有千千万。驱动这些设备,都需要通过usb总线发送特定的数据给到usb设备。比如,我要初始化usb 串口设备,我应该发什么数据设置它的波特率呢?
相信大家已经明白了,总线控制器驱动及总线设备驱动的关系了,其实就是程序分层的思想。总线控制器驱动有了之后,程序员就可以调用她的接口,将自己要发送的数据发送到总线上的设备,这就是设备驱动了。那具体在内核空间调用还是在应用空间调用都是ok的。
笔者在实际工作过程中,有过在应用空间开发i2c设备驱动,安卓app开发usb 设备驱动(usb转串口)程序的经验。
对NFC应用在手机的研究
下半年上市的iPhone8、华为Mate10、三星Note8和小米Note3,哪一款才是你最爱?
DC/DC转换器评估篇 损耗探讨-小结
搭建物联网(IoT)智能监控解决方案
Low-Noise Amplifier (LNA) Matc
Linux驱动到底能不能在应用层开发驱动
做一名有脑子的程序员
Python轴承故障诊断之经验模态分解EMD原理介绍
莱迪思半导体可提供可编程逻辑器件和软件设计工具
Cellink收购双光子聚合3D打印机厂商Nanoscribe
解析外测液位计主要特点及技术优势
深圳电子厂无奈倒闭,缺乏技术工人
互问科技推出语音处理芯片LS416
OPPO Find N3 Flip新品发布 新一代OPPO折叠手机OPPOFindN3Flip今日上市
工业接插件PIN针的技术与基础知识讲解
网络5.0产业和技术创新联盟成立,共同推进新技术研发与部署
医用口罩合成血液穿透测试仪的试验步骤说明
RAN竞争力评估报告 华为蝉联5年排名第一
推荐几款性价比高的快充充电插头,你值得拥有
浙江博方嘉芯氮化镓射频及功率器件项目开工 将对“中国芯”打造提供强劲助力