开篇学习之Linux 设备模型

在linux上编程也有两年的时间了,读kernel方面的书也有将近半年的时间,但是一直到最近才真正鼓起勇气,去看source code,开始感觉前面就是一座无法逾越的大山,无从下手,现在觉得driver倒可以做一个入口点,慢慢切入。
一直就想总结一下,但总是觉得理解的太肤浅,不敢下笔,后来想想很多时候,求知的路上一路走来,总会从概念模糊,到逐渐清晰的一个过程,记录下自己的错误,以后若能发现,也就是一种进步了。
废话少说,先进入主题。


概述一下


linux有个概念,一切都是文件,包括设备,都可以通过C库函数如open进行操作,如何能够适配普通文件与设备文件,以及设备文件中的chr_device or block_device? 这个主要就是要靠VFS了,即虚拟文件系统。普通文件与设备文件,都是通过特定的文件系统来管理。普通文件如fat32,yaffis等,设备文件管理系统如sysfs devfs proc等。


一种特殊的文件系统,都需要向系统去注册,也就是把自己的super block向VFS注册上,super block包含有该文件系统的一些具体的信息。我们操作一个文件时,它有一个特定的目录,即dentry,可以通过它来找到该目录所mount的file system,这样就可以找到操作该目录的file operation,以达到操作文件的目的。


上面的短短几段文字确实让我理解了很长时间,直到现在,都没有完全理顺这个流程,但概念上已经很清晰,若有时间可以按着这个线索向下看了。


linux 设备模型的核心就是kobject, 这个在网络上google一下,到处都是资料,但想要真正深刻理解,也需要花费一番功夫,它就是linux驱动的根基,暂且不会理会,先知道它的存在吧。


在kobject的基础上,抽象出来device 与 device_driver , bus 三个比较基本的概念,可以很形象的看做为总线,总线上挂载的设备。举例platform,它便是在这三个概念上抽象出来的一个具体的驱动模型,platform是一个bus,当一个device向它注册的时候,它便会loop它所挂载的drivers,调用match函数,把device与driver进行匹配,如果找到合适的,便给这个device安装驱动,drivers在匹配成功一个device后,会在其probe函数中将初始化这个device的一些必要的数据,同时,它会调用如input or misc等,向系统注册这个设备。这个过程需要注意,我们向platform注册device & driver的时候,并没有说明这个device是字符型或块设备,只是向驱动模型中登记了两个设备,一般对于设备的管理,可以通过这个模型来进行,最后,还是需要把设备向系统注册,或为字符型,或为块设备等,这个时候,便会在/dev/下找到我们注册的设备了。我们向platform注册的,会在 sys/bus/platform/devices & drivers下面看到。


如果我们想在user space下查看kernel device的一些数据,便可以透过sysfs来查看。比如查看设备名为ts的prop属性(当然,这都要在driver中实现),我们可以输入以下命令:cat /sys/bus/platform/devices/ts/prop,我们若想在user space下写入一个属性值到kernel driver中,我们可以输入以下命令:echo value > /sys/bus/platform/devices/ts/prop。


好晚,不上code了,睡觉。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值