Linux Driver思考:通向皇宫的通道

nicefuture 2010-08-04 05:47:06
传统意义上的Linux Driver仅仅是设备驱动,简言之,和设备有关,如LCD,Camera等等。 但是, 笔者认为,Linux Driver的作用不仅仅局限于此,从广义上讲, Linux Driver提供了一种User Space访问 Kernel中特定Function的通用编程模型,即,平民(User Space中的Application, Process, Lib等)通向皇宫(Kernel)的大道。

如果一个模块提供的Function必须运行于Kernel Space中(可能是设备相关的Function,从而需要访问特权指令或者特权地址空间; 抑或者Function本身是设备无关的,但是访问到了其他的一些运行于Kernel的Function; 甚至于吃饱了没事干,就喜欢把原本可以在User Space中运行的API实现在Kernel中,就是喜欢,你管的着吗?!)。 同时,又希望User Space中的Client能访问使用这些Function, 那么, 将其Adapt成Driver是再合理不过的解决方案了。 这是为什么那??

因为,从理论上来说,Kernel中的API,User Space中的Client是无法直接访问的,只能利用系统调用陷入到内核态后调用。 Linux的系统调用非常多,均已经固定, 如何支持新的Kernel Function的调用那? 有两种方式:

1。 在Kernel中实现一个新的系统调用(添加新的系统调用号),用来支持你实现的新功能。 这真是杀鸡用牛刀的干活,吃力不讨好。 你需要全全负责User Space到Kernel Space的切换,系统调用号的传递,系统调用上下文的保存, 调用后的系统上下文的恢复,Kernel Space向User Space的切换。

2。 复用一个现有的系统函数/调用,来支持你的新功能。 具有抽象意义的系统调用莫过于read,write,open这些为Driver定制的API了。 所以,我们可以简单的将我们的Function Wrapper成Driver需要的open,read,write等,然后,再按照Driver的要求,将我们的Module Wrapper成一个Driver的设备文件并注册到系统中。 这样,User Space中的Client,可以采用传统的Driver的模式来间接访问到我们新加的这些Function,并且,可能这些Function根本和实际的设备没有任何联系。

所以,我们不应该把Linux的Driver狭义的理解为设备驱动, 其实,它是一种通用的User Space访问Kernel Space Function的编程模式。 只要你有这种需求,你就可以实现为Driver,而不需要关心和实现复杂的系统调用过程。 比如Android中的Binder Driver, 根本不是真正的和物理设备打交道, 而仅仅是一个运行于Kernel的Binder Function,但是适配成了Driver,方便User Space中的Client调用。
...全文
148 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ask_qianru 2010-08-06
  • 打赏
  • 举报
回复
楼主说得很好,我个人表示赞同。
还想请教个问题,我搞linux驱动2年了,现在想搞android,需要学习什么内容,才可以入手写android下的驱动和一些简单应用,谢了。
FrankBIBI 2010-08-05
  • 打赏
  • 举报
回复
精辟~学习~MAKR!
freshui 2010-08-05
  • 打赏
  • 举报
回复
所以google定义了一个HAL,userspace的driver
zzw_happy 2010-08-05
  • 打赏
  • 举报
回复
现在越来越多的功能是需要移到用户区的。内核挂了就要重启。
luojc714 2010-08-05
  • 打赏
  • 举报
回复
操作系统之所以分用户模式和内核模式是因为内很模式都涉及到操作系统的核心部分,与硬件打交道,一旦内核出错,系统就崩溃了!所以很多系统都向微内核方向发展,就是微了让系统更安全,更健壮,况且系统也提供了访问硬件的抽象接口,所以我个人觉得没有必要使用这种方式来访问内核模式功能,如果有不对的地方,请指正!

当然,楼主的善于思考和总结的习惯还是很值得学习的!
yihua0001 2010-08-04
  • 打赏
  • 举报
回复
支持一下。

80,470

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧