概念
sysfs 是 Linux 提供的一种虚拟文件系统,他以一种层次的方式组织数据,向用户空间提供内核中的信息,让用户可以通过文件系统接口访问和操作内核对象的属性.
他提供了一种统一管理的接口,通常在 /sys 目录下挂载.
/sys/class: 包含了设备类别的子目录.
1
2
3
4
5
6
7
8
9jvle@jvle-ThinkPad-X1-Carbon-Gen-8:~/Desktop/works/temp/linux_files/modules/kobjs$ ls /sys/class/
accel bsg drm hwmon lirc nd platform-profile pwm scsi_device tpm vc
ata_device devcoredump drm_dp_aux_dev i2c-dev mdio_bus net powercap rapidio_port scsi_disk tpmrm video4linux
ata_link devfreq extcon ieee80211 mei nvme power_supply rc scsi_generic tty virtio-ports
ata_port devfreq-event firmware input mem nvme-generic ppdev regulator scsi_host typec vtconsole
backlight devlink firmware-attributes intel_pmt misc nvme-subsystem ppp remoteproc sound typec_mux wakeup
bdi dma gpio intel_scu_ipc mmc_host pci_bus pps retimer spi_master usbmisc watchdog
block dma_heap graphics iommu msr pci_epc printer rfkill spi_slave usb_power_delivery wmi_bus
bluetooth dmi hidraw leds mtd phy ptp rtc thermal usb_role/sys/devices: 包含了系统中所有设备的子目录
1
2
3jvle@jvle-ThinkPad-X1-Carbon-Gen-8:~/Desktop/works/temp/linux_files/modules/kobjs$ ls /sys/devices/
breakpoint cstate_core faux intel_bts isa LNXSYSTM:00 pci0000:00 pnp0 software tracepoint uncore_cbox_0 uncore_cbox_2 uncore_imc virtual
cpu cstate_pkg i915 intel_pt kprobe msr platform power system uncore_arb uncore_cbox_1 uncore_cbox_3 uprobe/sys/bus: 包含了总线类型的子目录
1
2
3
4
5jvle@jvle-ThinkPad-X1-Carbon-Gen-8:~/Desktop/works/temp/linux_files/modules/kobjs$ ls /sys/bus/
ac97 clockevents dax gpio isa mei mmc parport platform sdio snd_seq thunderbolt vme xen-backend
acpi clocksource edac hdaudio machinecheck memory nd pci pnp serial soc typec wmi
auxiliary container event_source hid mdio_bus memory_tiering node pci-epf rapidio serial-base soundwire usb workqueue
cec cpu faux i2c media mipi-dsi nvmem pci_express scsi serio spi virtio xen
现在要设置 gpio,我们可以通过 /sys/class 或者 /sys/devices 来控制.
通常来说,kobj 被嵌入在各个结构体中,比如 platform, device…, 因此我们可以把这些结构体看作是 kobj 的派生类.