1. 程式人生 > 其它 >如何在/sys系統下面建立檔案和目錄

如何在/sys系統下面建立檔案和目錄

技術標籤:驅動

驅動需要在/sys增加相關的裝置,驅動等資訊
在這裡插入圖片描述
核心中的kset結構體

struct kset{
	struct list_head list;
	spinlock_t list_lock;
	struct kobject kobj;
	const struct kset_uecent_ops *uevent_ops;
}

/sys下的每個目錄用一個kobject表示,也就是每個目錄是一個kobject;
/sys下面的目錄用一個struct kobject的物件來表示;
struct kset裡面含一個strutc kobject,相當於kset繼承kobject,kset也是一個特殊的kobject,也代表一個/sys下面的目錄;我們一般用kset來做父目錄,裡面放多個kobject;

建立kobject時如果沒有父物件,就在/sys目錄下面,如果有父物件就在父物件下面。

在kobj1下面建立檔案val,檔案是用屬性來表示,&kobj1_attr_group是一個組的地址,裡面應該封裝屬性,因為檔案是用屬性來表示的。

sysfs_create_group(kobj1,&kobj_attr_group);

程式碼

static struct kobject *kobj1;
static struct kobject *kobj2;

static unsigned int val=0;

//讀
//val->buf
static ssize_t val_show
(struct kobject *kobj,struct kobj_attribute *attr,char *buf) { //PAGE_SIZE限制長度,為了長度 return snprintf(buf,PAGE_SIZE,"%d\n",val); } //寫 static ssize_t val_store(struct kobject *kobj,struct kobj kobj_attribure *attr,const char *buf,size_t count) { char *endp; printk("size=%d\n",count)
; //把buf轉成10進位制存到val中 val=simpe_strtoul(buf,&endp,10); return count; } //val是一個檔案,自然需要讀寫 //val_show 讀 //val_store 寫 static struct kobj_attribute kobj1_val_attr=__ATTR(val,0666,val_show,val_store); static struct attribute *kobj1_attrs[]={ &kobj1_val_attr.attr, NULL, } //這是後面給kobj1新增的屬性組,裡面只有一個屬性 static static attribute_group kobj1_attr_group={ .attrs=kobj1_attrs, } static int __init module_init(void) { //建立了一個kset目錄,由於它無父物件,所以在/sys下面 kset = kset_create_and_and("kset",NULL,NULL); //建立了kobject目錄,在/sys/kset目錄下 kobject=kobject_create_and_add("kobj1",&kset->kobj); kobject=kobject_create_and_add("kobj2",&kset->kobj); // 在/sys/kobj1下面建立檔案val檔案,檔案是用屬性來表示 sysfs_create_group(kobj1,&kobj_attr_group); sysfs_create_link(k); }