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

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 2158 | 回復(fù): 0
打印 上一主題 下一主題

[驅(qū)動(dòng)] 關(guān)于USB驅(qū)動(dòng)的小子里 usb-skeleton.c [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2017-03-17 16:08 |只看該作者 |倒序?yàn)g覽
本帖最后由 mxgsgtc 于 2017-03-17 16:17 編輯

static struct usb_class_driver skel_class = {              .name =                "skel%d",
        .fops =                &skel_fops,
        .minor_base =        USB_SKEL_MINOR_BASE,
};

在skel_probe 函數(shù)中
{
   ----
   ----
        retval = usb_register_dev(interface, &skel_class);
        if (retval) {
                /* something prevented us from registering this driver */
                err("Not able to get a minor for this device.");
                usb_set_intfdata(interface, NULL);
                goto error;
        }

------
-----

}
我想問下關(guān)于:usb_register_dev這個(gè)函數(shù)的問題,這個(gè)函數(shù)會(huì)創(chuàng)建一個(gè)usb子設(shè)備A,并在/dev/生成節(jié)點(diǎn)
問題1: 這個(gè)子設(shè)備A是字符設(shè)備還是塊設(shè)備,如何判斷的呢?
根據(jù)我的分析
usb_register_dev-->device_add-->devtmpfs_create_node
devtmpfs_create_node函數(shù)中
{
----
        nodename = device_get_devnode(dev, &mode, &tmp);
        if (!nodename)
                return -ENOMEM;

        if (mode == 0)
                mode = 0600;
        if (is_blockdev(dev))
                mode |= S_IFBLK;
        else
                mode |= S_IFCHR;//這里有個(gè)字符設(shè)備的賦值

-----
}
所以我大致判斷, usb_register_dev生成出來的是字符設(shè)備,不知道對(duì)不對(duì)
問題2:假設(shè)通過usb_register_dev生成出來的是字符設(shè)備, 但是在此函數(shù)中我并沒有找到cdev結(jié)構(gòu)的分配(字符設(shè)備都需要分配這個(gè)結(jié)構(gòu)吧),那cdev是從哪里分配的呢?


問題3:skel_class中的.fops在VFS的角度上講是如何被調(diào)用的呢?
static const struct file_operations skel_fops = {
        .owner =        THIS_MODULE,
        .read =                skel_read,
        .write =        skel_write,
        .open =                skel_open,
        .release =        skel_release,
        .flush =        skel_flush,
        .llseek =        noop_llseek,
};

/*
* usb class driver info in order to get a minor number from the usb core,
* and to have the device registered with the driver core
*/
static struct usb_class_driver skel_class = {
        .name =                "skel%d",
        .fops =                &skel_fops,
        .minor_base =        USB_SKEL_MINOR_BASE,
};

usb_register_dev(interface, &skel_class);調(diào)用后, 新生成子設(shè)備A, 但是cdev結(jié)構(gòu)并沒有被分配,既然沒有分配,就沒有在內(nèi)核全局變量cdev_map中注冊(cè)
那么open("/dev/A"); 是如何調(diào)用的skel_open呢?
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP