亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: class device的注冊 [打印本頁]

作者: lpzgbd    時(shí)間: 2011-02-06 18:57
標(biāo)題: class device的注冊
Class_device接口

struct class_device {

struct kobject kobj;

struct class *class;

struct device *dev;

void *class_data;

char class_id[BUS_ID_SIZE];

 };

class_id 成員持有設(shè)備名子, 如同它在 sysfs 中的一樣. class 指針應(yīng)當(dāng)指向持有這個(gè)設(shè)備的類, 并且 dev 應(yīng)當(dāng)指向關(guān)聯(lián)的設(shè)備結(jié)構(gòu). 設(shè)置 dev 是可選的; 如果它是非 NULL, 它用來創(chuàng)建一個(gè)符號(hào)連接從類入口到對應(yīng)的在 /sys/devices 下的入口, 使得易于在用戶空間找到設(shè)備入口. 類可以使用 class_data 來持有一個(gè)私有指針.

通常的注冊函數(shù)已經(jīng)被提供:

int class_device_register(struct class_device *cd);

void class_device_unregister(struct class_device *cd);

實(shí)例用法 ,參照drivers/i2c/i2c-core.c

adap->class_devstruct class_device類型:

   memset(&adap->class_dev, 0x00, sizeof(struct class_device));

        adap->class_dev.dev = &adap->dev;

        adap->class_dev.class = &i2c_adapter_class;

        strlcpy(adap->class_dev.class_id, adap->dev.bus_id, BUS_ID_SIZE);

        class_device_register(&adap->class_dev);

adap->dev是個(gè)stuct device結(jié)構(gòu)。

i2c_adapter_class定義:

static struct class i2c_adapter_class = {

        .name =         "i2c-adapter",

        .release =      &i2c_adapter_class_dev_release,

};

 adap->dev.bus_id的值形如i2c-0,i2c-1這種類型。

那么在SYS目錄下有:

# ls /sys/class/i2c-adapter/i2c-0/ 

device  driver

# ls /sys/class/i2c-adapter/i2c-0/device/

0-001a        0-0048        detach_state

0-003a        0-0068        name

# ls /sys/class/i2c-adapter/i2c-0/driver/

class_simple 接口

static struct class_device *davinci_class_device;

static struct class_simple *davinci_class;

davinci_class = class_simple_create( THIS_MODULE , "davinci" );

if( IS_ERR( davinci_class ) )

{

printk("creat davinci_class fault");

goto class_simple_create_err;

}

davinci_class_device = class_simple_device_add(davinci_class,devno,NULL,"davinci" );

class_simple_create創(chuàng)建了一個(gè)davinci .

class_simple_device_add的原形為:

struct class_device *class_simple_device_add(struct class_simple *cs, dev_t devnum, struct device *device, const char *fmt, ...); 

這里, cs 是之前創(chuàng)建的簡單類, devnum 是分配的設(shè)備號(hào), device 是代表這個(gè)設(shè)備的 struct device, 其他的參數(shù)是一個(gè) printk-風(fēng)格 的格式串和參數(shù)來創(chuàng)建設(shè)備名子. 這個(gè)調(diào)用添加一項(xiàng)到類, 包含一個(gè)屬性, dev, 含有設(shè)備號(hào). 如果設(shè)備參數(shù)是非 NULL, 一個(gè)符號(hào)連接( 稱為 device )指向在 /sys/devices 下的設(shè)備的入口。

可能添加其他的屬性到設(shè)備入口. 它只是使用 class_device_create_file, 

在這里,class_simple_device_add向這個(gè)類添加了設(shè)備,該設(shè)備設(shè)備號(hào)為devno.名字為davinci。,于是在sys下有:

# ls /sys/class/davinci/davinci/dev 

/sys/class/davinci/davinci/dev

# cat  /sys/class/davinci/davinci/dev 

252:0

calss下添加一個(gè)dev會(huì)產(chǎn)生熱插拔事件,如果有UDEV運(yùn)行,那么這時(shí)在/dev目錄下會(huì)出現(xiàn)/dev/davinci設(shè)備,并且設(shè)備號(hào)為252:0。

其實(shí)"class_simple_device_add"也是class_device_registerclass_device_create_file的封裝。






歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2