日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > 互聯(lián)網(wǎng) > Linux設(shè)備驅(qū)動(dòng):kobject原理與實(shí)例分析

Linux設(shè)備驅(qū)動(dòng):kobject原理與實(shí)例分析

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-11-09 08:47:29 閱讀次數(shù):3117次

1、Sysfs文件系統(tǒng)

"sysfsis a ram-based filesystem initially based on ramfs. It provides ameans to export kernel data structures, their attributes, and thelinkages between them to userspace.”

Linux2.6內(nèi)核引入了sysfs文件系統(tǒng)。sysfs被看成是與proc同種別的文件系統(tǒng)。sysfs把連接在系統(tǒng)上的裝備和總線組織成份級(jí)的文件,使其從用戶(hù)空間可以訪問(wèn)到。

Sysfs被加載在 /sys/目錄下,它的子目錄包括:

1)Block:在系統(tǒng)中發(fā)現(xiàn)的每一個(gè)塊裝備在該目錄下對(duì)應(yīng)1個(gè)子目錄。每一個(gè)子目錄中

又包括1些屬性文件,它們描寫(xiě)了這個(gè)塊裝備的各方面屬性,如:裝備大小。(loop塊裝備是使用文件來(lái)摹擬的)

2)Bus:在內(nèi)核中注冊(cè)的每條總線在該目錄下對(duì)應(yīng)1個(gè)子目錄,如: ide pci scsi usbpcmcia 其中每一個(gè)總線目錄內(nèi)又包括兩個(gè)子目錄:devices和drivers ,devices目錄包括了在全部系統(tǒng)中發(fā)現(xiàn)的屬于該總線類(lèi)型的裝備,drivers目錄包括了注冊(cè)到該總線的所有驅(qū)動(dòng)。

3)Class:將裝備依照功能進(jìn)行的分類(lèi),如/sys/class/net目錄下包括了所有網(wǎng)絡(luò)接口。

4)Devices:包括系統(tǒng)所有的裝備。

5)Kernel:內(nèi)核中的配置參數(shù)

6)Module:系統(tǒng)中所有模塊的信息

7)Firmware:系統(tǒng)中的固件

8)Fs:描寫(xiě)系統(tǒng)中的文件系統(tǒng)

9)Power:系統(tǒng)中電源選項(xiàng)

2、K object

實(shí)現(xiàn)了基本的面向?qū)ο蠊芾頇C(jī)制,是構(gòu)成Linux2.6裝備模型的核心結(jié)構(gòu)。它與sysfs文件系統(tǒng)緊密相連,在內(nèi)核中注冊(cè)的每一個(gè)kobject對(duì)象對(duì)應(yīng)sysfs文件系統(tǒng)中的1個(gè)目錄。類(lèi)似于C++中的基類(lèi),Kobject常被嵌入于其他類(lèi)型(即:容器)中。如bus,devices,drivers都是典型的容器。這些容器通過(guò)kobject連接起來(lái),構(gòu)成了1個(gè)樹(shù)狀結(jié)構(gòu)。

structk object {

constchar

*name;

structlist_head

entry;

structkobject

*parent;//指向父對(duì)象

structkset

*kset;

structkobj_type

*ktype;

structsysfs_dirent *sd;

structkref

kref;//對(duì)象援用計(jì)數(shù)

unsignedint state_initialized:1;

unsignedint state_in_sysfs:1;

unsignedint state_add_uevent_sent:1;

unsignedint state_remove_uevent_sent:1;

};

3、Kobject操作

         1)voidkobject_init(struct kobject * kobj)初始化kobject結(jié)構(gòu)

         2)intkobject_add(struct kobject * kobj)將kobject對(duì)象注冊(cè)到Linux系統(tǒng)

         3)intkobject_init_and_add(struct kobject *kobj, struct kobj_type*ktype,struct kobject *parent, const char *fmt, ...)初始化kobject,并將其注冊(cè)到linux系統(tǒng)


           4)voidkobject_del(struct kobject * kobj)從Linux系統(tǒng)中刪除kobject對(duì)象

           5)structkobject *kobject_get(struct kobject*kobj)將kobject對(duì)象的援用計(jì)數(shù)加1,同時(shí)返回該對(duì)象指針。

           6)voidkobject_put(struct kobject *kobj)將kobject對(duì)象的援用計(jì)數(shù)減1,如果援用計(jì)數(shù)降為0,則調(diào)用release方法釋放該kobject對(duì)象。

4、  Struct kobj_type


Kobject的ktype成員是1個(gè)指向kobj_type結(jié)構(gòu)的指針, 該結(jié)構(gòu)中記錄了kobject對(duì)象的1些屬性。

structkobj_type {

void(*release)(struct kobject *kobj);

structsysfs_ops *sysfs_ops;

structattribute **default_attrs;

};

release:用于釋放kobject占用的資源,當(dāng)kobject的援用計(jì)數(shù)為0時(shí)被調(diào)用。

5、Struct attribute

structattribute {

char *name; /*屬性文件名*/

structmodule * owner;

mode_tmode; /*屬性的保護(hù)位*/

};

struct attribute (屬性):對(duì)應(yīng)于kobject的目錄下的1個(gè)文件,Name成員就是文件名。

6、Struct sysfs_ops

structsysfs_ops

{

ssize_t(*show)(struct kobject *, struct attribute *,char *);

ssize_t(*store)(struct kobject *,struct attribute *,const char *,

size_t);

};

           1)Show:當(dāng)用戶(hù)讀屬性文件時(shí),該函數(shù)被調(diào)用,該函數(shù)將屬性值存入buffer中返回給用戶(hù)態(tài);

           2)Store:當(dāng)用戶(hù)寫(xiě)屬性文件時(shí),該函數(shù)被調(diào)用,用于存儲(chǔ)用戶(hù)傳入的屬性值。

7、 kobject實(shí)例分析

       kobject.c源碼

#include <linux/device.h> 
#include <linux/module.h> 
#include <linux/kernel.h> 
#include <linux/init.h> 
#include <linux/string.h> 
#include <linux/sysfs.h> 
#include <linux/stat.h> 
  
MODULE_AUTHOR("David Xie"); 
MODULE_LICENSE("Dual BSD/GPL");

 

/*聲明release、show、store函數(shù)*/


void obj_test_release(struct kobject *kobject); 
ssize_t kobj_test_show(struct kobject *kobject, struct attribute *attr,char *buf);
ssize_t kobj_test_store(struct kobject *kobject,struct attribute *attr,const char *buf, size_t count);

/*對(duì)應(yīng)于kobject的目錄下的1個(gè)文件,Name成員就是文件名*/  
struct attribute test_attr = { 
        .name = "kobj_config", 
        .mode = S_IRWXUGO, 
}; 
  
static struct attribute *def_attrs[] = { 
        &test_attr, 
        NULL, 
}; 
  
/kobject對(duì)象的操作 
struct sysfs_ops obj_test_sysops = 

        .show = kobj_test_show, 
        .store = kobj_test_store, 
}; 
 
/*定義kobject對(duì)象的1些屬性及對(duì)應(yīng)的操作*/ 
struct kobj_type ktype =  

        .release = obj_test_release, 
        .sysfs_ops=&obj_test_sysops, 
        .default_attrs=def_attrs, 
};

/*release方法釋放該kobject對(duì)象*/  
void obj_test_release(struct kobject *kobject) 

        printk("eric_test: release . "); 
}

/*當(dāng)讀文件時(shí)履行的操作*/ 
ssize_t kobj_test_show(struct kobject *kobject, struct attribute *attr,char *buf)

        printk("have show. "); 
        printk("attrname:%s. ", attr->name); 
        sprintf(buf,"%s ",attr->name); 
        return strlen(attr->name)+2; 
}

/*當(dāng)寫(xiě)文件時(shí)履行的操作*/  
ssize_t kobj_test_store(struct kobject *kobject,struct attribute *attr,const char *buf, size_t count)

        printk("havestore "); 
        printk("write: %s ",buf); 
        return count; 

  
struct kobject kobj;//聲明kobject對(duì)象
 
static int kobj_test_init(void) 

        printk("kboject test init. "); 
        kobject_init_and_add(&kobj,&ktype,NULL,"kobject_test");//初始化kobject對(duì)象kobj,并將其注冊(cè)到linux系統(tǒng)
        return 0; 

  
static void kobj_test_exit(void) 

        printk("kobject test exit. "); 
        kobject_del(&kobj); 

  
module_init(kobj_test_init);

module_exit(kobj_test_exit);


生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美日韩中文在线 | 欧美一级毛片视频 | 91网站免费在线观看 | 91精品国产综合久久精品图片 | 中文字幕高清在线 | 日韩精品无码一区二区三区 | 国产毛片精品国产一区二区三区 | 国产精品久久久久久一级毛片 | 免费黄色小视频 | 欧美一区二区视频在线观看 | 国产精品免费网站 | 天天射夜夜操 | 色综合久久88色综合天天 | 亚洲美女网站 | 中国国产一级毛片 | 99国产精品久久久 | 伊人超碰 | 日韩免费视频一区二区 | 精品99在线 | 综合伊人| 日韩成人影院在线观看 | 最新国产精品精品视频 | 在线观看av片 | 精品三区| 91精品久久久久久久久99蜜臂 | 男人天堂电影 | 免费在线a | 日本免费成人 | 亚洲色图 欧美 | 亚州精品天堂中文字幕 | 国产欧美精品一区二区 | 亚洲精品高清在线 | 成人高清视频在线观看 | 精品无码久久久久久国产 | 成年网站在线 | 成人激情视频在线观看 | 国产成人综合在线 | 久久久精彩视频 | 一级毛片在线播放 | 免费国产羞羞网站视频 | 自拍色图 |