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