linux 设备模型之 sysfs 使用 Linux 设备模型是把设备安装虚拟的总线、设备、驱动、类这些“概念性”的东西模型化了一下,使对设备和驱动的管理有了面向对象的感觉。sysfs 文件系统是 Linux 设备模型的衍生产物,在 /sys 目录下的一级级的各种目录。sysfs 文件系统提供了一个统一的接口来访问和控制 Linux 设备模型中的设备和驱动。 sysfs 的主要功能是提供了一个桥梁,使用户可以从 shell 下直接查看或修改内核(设备驱动)的某些参数。sysfs 下不一定所有设备都必须得对应驱动,很多设备和驱动都是仅仅为了调试用的,可以对某些文件进行读或者写操作来改变想要查看或修改的内容。 使用 sysfs,需要在设备的 kobject 上创建一个属性组,然后在属性组中定义属性的名字和内容。例如,在 gpon 设备的 kobject 上创建一个属性组 gpon_pm_group,属性组的重要成员是 name 和 attrs,分别是名字和属性,名字意味着将以此命名的目录出现在 gpon 目录下,属性代表实际的可读或可写的属性内容。 在属性组中,定义了多个属性,例如 fecCnt、rxPloamCnt、txPloamCnt 等,每个属性都有其自己的读取和写入函数,例如 gpon_pm_show 和 gpon_pm_store。这些函数可以根据需要实现不同的逻辑,以满足不同的应用需求。 sysfs 的使用可以分为两个步骤:在设备的 kobject 上创建一个属性组,然后在属性组中定义属性的名字和内容。下面是一个简单的示例代码: ```c int __devinit gpon_sysfs_init(void) { int err; struct device *pd; pd = bus_find_device_by_name(&platform_bus_type, NULL, "gpon"); if (!pd) { platform_device_register_simple("gpon", -1, NULL, 0); pd = bus_find_device_by_name(&platform_bus_type, NULL, "gpon"); } err = sysfs_create_group(&pd->kobj, &gpon_pm_group); if (err) { printk(KERN_INFO "sysfs group failed %d\n", err); goto out; } ... } ``` 在上面的代码中,首先在 platform 总线下创建一个设备叫 gpon,然后在 gpon 设备的 kobject 上创建一个属性组 gpon_pm_group。在 gpon_pm_group 中定义了多个属性,例如 fecCnt、rxPloamCnt、txPloamCnt 等。 sysfs 的使用提供了一个灵活的方式来访问和控制 Linux 设备模型中的设备和驱动,满足了不同的应用需求。
- 粉丝: 238
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助