虚拟文件系统sysfs & proc

本文介绍了Linux内核中的虚拟文件系统sysfs和proc,强调了它们在提供系统信息和动态配置中的作用。sysfs相比proc组织更有序,如/sys/block、/sys/bus等目录结构清晰。文章详细讲解了如何在/sys/class下创建类目录及设备节点,以及在platform总线下添加驱动和创建属性节点的方法,包括一次性创建多个属性节点group和类属性的注册过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PROC

最初开发 /proc 文件系统是为了提供有关系统中进程的信息。但是由于这个文件系统非常有用,因此内核中的很多元素也开始使用它来报告信息,或启用动态运行时配置。

        entry = create_proc_entry(XXX_DEVICE_PROC_NAME, 0, NULL);  
        if(entry) {  
            entry->owner = THIS_MODULE;  
            entry->read_proc = xxx_proc_read;  
            entry->write_proc = xxx_proc_write;  
        }  
    }  
    static ssize_t xxx_proc_write(struct file* filp, const char __user *buff, unsigned long len, void* data) {  
   
    //先把用户提供的缓冲区值拷贝到内核缓冲区中去
    copy_from_user...

    }  
 static ssize_t xxx_proc_read(char* page, char** start, off_t off, int count, int* eof, void* data) {  
 

//在用户或应用程序访问该proc文件时,就会调用这个函数,实现这个函数时只需将想要让用户看到的内容放入page即可
//page 参数是这些数据写入到的位置,其中 count 定义了可以写入的最大字符数。在返回多页数据(通常一页是 4KB)时,我们需要使用 start和 off 参数
//此处提供的 page 缓冲区在内核空间中

    }  
    

其他的一些函数

create_proc_entry()创建一个文件
proc_symlink() 创建符号链接
proc_mknod() 创建设备文件
proc_mkdir() 创建目录
remove_proc_entry() 删除文件或目录

SYSFS

比proc组织更好

  • /sys
block/       块设备,提供以设备名(如mmcblk0)到/sys/devices的符号链接
bus/         每个总线包含两个目录 devices/ drivers/  ,提供到连接该总线的设备的符号链接
class/     按设备功能分类
dev/
devices/   被发现的物理设备
firmware/
net/
fs/
  • /sys/block
lrwxrwxrwx root     root              1970-01-01 08:00 loop0 -> ../devices/virtual/block/loop0
lrwxrwxrwx root     root              1970-01-01 08:00 loop1 -> ../devices/virtual/block/loop1
lrwxrwxrwx root     root              1970-01-01 08:00 loop2 -> ../devices/virtual/block/loop2
lrwxrwxrwx root     root              1970-01-01 08:00 loop3 -> ../devices/virtual/block/loop3
lrwxrwxrwx root     root              1970-01-01 08:00 loop4 -> ../devices/virtual/block/loop4
lrwxrwxrwx root     root              1970-01-01 08:00 loop5 -> ../devices/virtual/block/loop5
lrwxrwxrwx root     root              1970-01-01 08:00 loop6 -> ../devices/virtual/block/loop6
lrwxrwxrwx root     root              1970-01-01 08:00 loop7 -> ../devices/virtual/block/loop7
lrwxrwxrwx root     root              1970-01-01 08:00 mmcblk0 -> ../devices/platform/sunxi-mmc.2/mmc_host/mmc0/mmc0:0001/block/mmcblk0
lrwxrwxrwx root     root              1970-01-01 08:00 mmcblk0boot0 -> ../devices/platform/sunxi-mmc.2/mmc_host/mmc0/mmc0:0001/block/mmcblk0/mmcblk0boot0
lrwxrwxrwx root     root              1970-01-01 08:00 mmcblk0boot1 -> ../devices/platform/sunxi-mmc.2/mmc_host/mmc0/mmc0:0001/block/mmcblk0/mmcblk0boot1
lrwxrwxrwx root     root              1970-01-01 08:00 zram0 -> ../devices/virtual/block/zram0

  • /sys/bus
clocksource
cpu
hid
i2c
mdio_bus
mmc
platform
scsi
sdio
serio
spi
usb
usb-serial
  • /sys/bus/i2c
devices
drivers
drivers_autoprobe
drivers_probe
uevent
  • /sys/bus/i2c/devices
lrwxrwxrwx root     root              2019-12-19 15:02 1-0033 -> ../../../devices/platform/twi.1/i2c-1/1-0033
lrwxrwxrwx root     root              2019-12-19 14:56 i2c-0 -> ../../../devices/platform/twi.0/i2c-0
lrwxrwxrwx root     root              2019-12-19 14:56 i2c-1 -> ../../../devices/platform/twi.1/i2c-1
lrwxrwxrwx root     root              2019-12-19 14:56 i2c-2 -> ../../../devices/platform/twi.2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值