您尚未登录。

楼主 #1 2019-03-20 18:20:46

jlau
会员
注册时间: 2018-06-11
已发帖子: 198
积分: 190.5

要是linux的外设驱动可以做到用户层就好了

现在的嵌入式系统从内而外一般是 CPU -> SoC -> Board。
我的设想是,内核提供CPU级的支持,SoC厂家提供on-chip driver(这可以放在内核中),外设的驱动都交由开发板或者商业产品的开发团队自己去做。
产品开发人员根据自己选用的外设,如LCD面板、Camera Sensor、Ethernet PHY等编写对应的外设驱动,然后在应用启动时自己控制外设驱动的加载和on-chip驱动的加载,以及外设驱动和on-chip驱动的交互。
这么做的结果是可以提供一个统一、固定的平台给产品开发人员,产品开发人员不需要管内核的事,最多修改一下运行时配置文件,如GPIO分配。这可以降低系统和应用的耦合度,加快产品开发。

离线

#2 2019-03-20 18:39:26

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: 要是linux的外设驱动可以做到用户层就好了

微内核和宏内核之争。楼主说的应该是微内核架构。
Linux的老师开发了个微内核Unix系统叫什么我忘了,还挺有名

离线

#3 2019-03-20 20:08:24

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: 要是linux的外设驱动可以做到用户层就好了

达克罗德 说:

微内核和宏内核之争。楼主说的应该是微内核架构。
Linux的老师开发了个微内核Unix系统叫什么我忘了,还挺有名

Minix ?





离线

#4 2019-03-20 22:26:43

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: 要是linux的外设驱动可以做到用户层就好了

晕哥 说:
达克罗德 说:

微内核和宏内核之争。楼主说的应该是微内核架构。
Linux的老师开发了个微内核Unix系统叫什么我忘了,还挺有名

Minix ?

对,就是这个。 http://www.minix3.org

离线

#5 2019-03-23 15:25:08

fogwizard
会员
注册时间: 2019-03-19
已发帖子: 50
积分: 13

Re: 要是linux的外设驱动可以做到用户层就好了

有外设全部在用户态的系统,qnx, 但是不开源而且收费很贵

离线

#6 2019-03-27 21:06:33

Zodiac
会员
注册时间: 2018-11-28
已发帖子: 42
积分: 42

Re: 要是linux的外设驱动可以做到用户层就好了

这似乎不关“驱动是否要放用户态”的事吧?
BSP包完全可以独立出来开发的:device tree能单独编译,自定义的驱动能编译成内核模块,只在编译的时候借助下内核的构建系统。

楼主的需求是否只是想 “分清内核、驱动、应用之间的开发界限,降低互相间的耦合” ?

其实,内核对设备的抽象做了不少工作了,很大程度降低了应用层使用具体设备的复杂度。
应用通过统一的devfs、sysfs或者proc来与驱动进行交互。从结果来看,就是降低了应用与驱动之间的耦合。
楼主所提的 “提供一个统一、固定的平台给产品开发人员” 需求 ,只要保证 “同类设备,保持统一规范的devfs、sysfs、procfs的访问接口” ,即可满足。

楼主又提到 “应用启动时自己控制外设驱动的加载和on-chip驱动的加载,以及外设驱动和on-chip驱动的交互”,这只能是基于内核托管的情况下才能部分实现,还是以内核模块为单位的简单管理。更细粒度的管理,应用层 ‘不应’ 也不能直接去触碰。驱动涉及到的资源协调和配置都应该是OS一级去处理的事,而不是一个以进程为单位的APP该操心的事。

linux 把驱动拉到内核态,是为了最大化运行效率。qnx 为代表的微内核把驱动之类的做到用户态,是为了运行时的稳定而牺牲了运行效率。
这是个不同场景利弊取舍的事,也不能一下子分清哪种做法就一定是好的。
但不论驱动放在何处,其与应用层之间的接口保持统一和固定了,就能给开发人员提供一个稳定的开发环境。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn