2025-03-05
/sys/kernel
是Linux系统中的一个虚拟文件系统目录,位于sysfs
文件系统下,主要用于提供内核相关的信息和配置接口。通过它,用户和应用程序可以访问和调整内核的某些运行时参数和行为。
内核参数查看与调整:/sys/kernel
提供了许多内核参数的接口,允许用户查看和修改这些参数,如调试选项、内存管理等。
调试与监控:该目录包含与内核调试相关的信息,如kexec、mm等,帮助开发者监控和调试内核行为
安全与权限控制:通过security子目录,可以查看和配置内核的安全模块,如SELinux、AppArmor等。
实时信息: 提供内核的实时信息,如uptime、version等,方便用户了解系统状态。
// simple.c
#include <linux/init.h>
#include <linux/kobject.h>
#include <linux/module.h>
#include <linux/string.h>
static struct kobject *dummy_obj = NULL;
static ssize_t _read(struct kobject *kobj, struct kobj_attribute *attr,
char *buffer) {
pr_info("simple_read\n");
return sprintf(buffer, "read from /sys/kernel/%s/%s", kobj->name,
attr->attr.name);
}
static ssize_t _write(struct kobject *kobj, struct kobj_attribute *attr,
const char *buffer, size_t size) {
pr_info("write '%s' to /sys/kernel/%s/%s", buffer, kobj->name,
attr->attr.name);
return (ssize_t)size;
}
static struct kobj_attribute dummy_attr = __ATTR(dummy, 0664, _read, _write);
static int __init simple_init(void) {
pr_info("simple_init\n");
dummy_obj = kobject_create_and_add("hello", kernel_kobj);
if (!dummy_obj) {
pr_err("kobject_create_and_add hello folder failed\n");
return -ENOMEM;
}
if (sysfs_create_file(dummy_obj, &dummy_attr.attr)) {
pr_err("sysfs_crate_file failed\n");
kobject_put(dummy_obj);
return -ENOMEM;
}
return 0;
}
static void __exit simple_exit(void) {
pr_info("simple_exit\n");
sysfs_remove_file(dummy_obj, &dummy_attr.attr);
kobject_put(dummy_obj);
}
module_init(simple_init);
module_exit(simple_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("heng30");
MODULE_VERSION("v0.0.1");
MODULE_DESCRIPTION("A simple kernel module");
#!/bin/sh
top-dir = $(shell pwd)
kernel-version = $(shell uname -r)
kernel-dir ?= /lib/modules/$(kernel-version)/build
obj-m += simple.o
all:
make -C $(kernel-dir) modules M=$(top-dir)
clean:
rm -f *.o *.ko *.mod *.mod.c *.order *.symvers
make -C $(kernel-dir) clean m=$(top-dir)
安装驱动:insmod simple.ko
移除驱动:rmmod simple.ko
查看文件属性:ls -al /sys/kernel/hello/dummy
-rw-rw-r-- 1 root root 4096 Mar 4 17:57 /sys/kernel/hello/dummy
写入内容:echo "hello" > /sys/kernel/hello/dummy
读取内容:head -n 1 /sys/kernel/hello/dummy