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

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

Chinaunix

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

關(guān)于udev [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-09-11 17:36 |只看該作者 |倒序?yàn)g覽
2.6內(nèi)核,我做的驅(qū)動(dòng)模塊abc.ko用insmod加載成功了,加載時(shí)都顯示success,但查看/dev下面發(fā)現(xiàn)沒有該驅(qū)動(dòng)相關(guān)的設(shè)備節(jié)點(diǎn),只是在sys下面有/sys/module/abc,于是我考慮到用udev動(dòng)態(tài)管理設(shè)備節(jié)點(diǎn),先用udevinfo /sys/module/abc,顯示:
SUBSYSTEM="unknown"
SYSFS{initstate}="live"
SYSFS{refcnt}="0"

于是我加了一條udev規(guī)則: SUBSYSTEM="unknown", SYSFS{initstate}="live", NAME="abc"

重新udevstart仍然在/dev下面看不到該設(shè)備相關(guān)節(jié)點(diǎn),重啟系統(tǒng)操作一次還是這樣,我感覺驅(qū)動(dòng)有些問題,因?yàn)轱@示"unknown",而且沒有KERNEL=...這一項(xiàng),估計(jì)內(nèi)核都沒認(rèn)識(shí)到,不知到底什么原因,郁悶中。。。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2008-09-11 17:37 |只看該作者
自己頂一下,希望有高手指點(diǎn)一下

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2008-09-11 18:01 |只看該作者
驅(qū)動(dòng)編譯的時(shí)候有沒有告警什么的?

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2008-09-11 18:12 |只看該作者
有警告,不過是些無關(guān)的,如指針賦值為做類型轉(zhuǎn)換啊,未使用的局部變量之類的

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2008-09-11 18:51 |只看該作者
不知有沒有解決過類似問題的高手...

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2008-09-11 21:36 |只看該作者
你這一點(diǎn)點(diǎn)是看不出來的.

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2008-09-12 14:06 |只看該作者
原帖由 garyv 于 2008-9-11 17:36 發(fā)表
2.6內(nèi)核,我做的驅(qū)動(dòng)模塊abc.ko用insmod加載成功了,加載時(shí)都顯示success,但查看/dev下面發(fā)現(xiàn)沒有該驅(qū)動(dòng)相關(guān)的設(shè)備節(jié)點(diǎn),只是在sys下面有/sys/module/abc,于是我考慮到用udev動(dòng)態(tài)管理設(shè)備節(jié)點(diǎn),先用udevinfo  ...

注冊設(shè)備用的是哪個(gè)接口

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2008-09-13 12:07 |只看該作者

回復(fù) #7 藍(lán)豆 的帖子

注冊設(shè)備用的是register_chrdev(),主設(shè)備號傳0,沒有用devfs_register(),因?yàn)?.6內(nèi)核中取消了該函數(shù)...

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2008-09-13 22:17 |只看該作者
frome(http://blog.chinaunix.net/u/548/showart.php?id=261973)
利用udev在/dev/下動(dòng)態(tài)生成設(shè)備文件,這樣用戶就不用手工調(diào)用mknod了。


利用的kernel API:
   
    class_create        :    創(chuàng)建class
    class_destroy        :    銷毀class
    class_device_create    :    創(chuàng)建device
    class_device_destroy    :    銷毀device


注意,這些API是2.6.13開始有的,在2.6.13之前,應(yīng)當(dāng)使用 class_simple_create/class_simple_destroy/class_simple_device_add/class_simple_device_remove 這一系列,也就是ldd3第14章描述的。 詳見:
   
https://lwn.net/Articles/128644/
Output:
===========================================
[root@localhost dynamic_dev_node]# insmod ./dummy_dev.ko
[root@localhost dynamic_dev_node]# file /dev/dummy_dev0
/dev/dummy_dev0: character special (250/0)
[root@localhost dynamic_dev_node]# rmmod dummy_dev.ko
[root@localhost dynamic_dev_node]# file /dev/dummy_dev0
/dev/dummy_dev0: ERROR: cannot open `/dev/dummy_dev0' (No such file or directory)

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2008-09-13 22:17 |只看該作者
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/delay.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>
#include <linux/errno.h>
#include <linux/ioctl.h>
#include <linux/cdev.h>
#include <linux/string.h>
#include <linux/list.h>
#include <linux/pci.h>
#include <asm/uaccess.h>
#include <asm/atomic.h>
#include <asm/unistd.h>



#define THIS_DESCRIPTION "\
This module is a dummy device driver, it register\n\
\t\ta char device, and utilize udev to create/destroy \n\
\t\tdevice node under /dev/ dynamicallly."


MODULE_LICENSE("GPL");
MODULE_AUTHOR("albcamus <albcamus@gmail.com>");
MODULE_DESCRIPTION(THIS_DESCRIPTION);



#define DUMMY_MAJOR 250
#define DUMMY_MINOR 0
#define DUMMY_NAME "dummy_dev"





/**
* the open routine of 'dummy_dev'
*/
static int dummy_open(struct inode *inode, struct file *file)
{
    printk("Open OK\n");
    return 0;
}

/**
* the write routine of 'dummy_dev'
*/
static ssize_t dummy_write(struct file *filp, const char *bp, size_t count, loff_t *ppos)
{
    printk("Don't Write!\n");
    return 0;
}

/**
* the read routine of 'dummy_dev'
*/
static ssize_t dummy_read(struct file *filp, char *bp, size_t count, loff_t *ppos)
{
    return 0;
}

/**
* the ioctl routine of 'dummy_dev'
*/
static int dummy_ioctl(struct inode *inode, struct file *filep,
            unsigned int cmd, unsigned long arg)
{

    return 0;
}


/**
* file_operations of 'dummy_dev'
*/
static struct file_operations dummy_dev_ops = {
    .owner = THIS_MODULE,
    .open = dummy_open,
    .read = dummy_read,
    .write = dummy_write,
    .ioctl = dummy_ioctl,
};


/**
* struct cdev of 'dummy_dev'
*/
struct cdev *my_cdev;
struct class *my_class;



static int __init my_init(void)
{
    int err, devno = MKDEV(DUMMY_MAJOR, DUMMY_MINOR);


    /* register the 'dummy_dev' char device */
    my_cdev = cdev_alloc();
    cdev_init(my_cdev, &dummy_dev_ops);

    my_cdev->owner = THIS_MODULE;

    err = cdev_add(my_cdev, devno, 1);
    if (err != 0)
        printk("dummy pci device register failed!\n");

    /* creating your own class */
    my_class = class_create(THIS_MODULE, "dummy_class");
    if(IS_ERR(my_class)) {
        printk("Err: failed in creating class.\n");
        return -1;
    }

    /* register your own device in sysfs, and this will cause udevd to create corresponding device node */
    class_device_create(my_class, NULL, MKDEV(DUMMY_MAJOR, DUMMY_MINOR), NULL, DUMMY_NAME "%d", DUMMY_MINOR );



    return 0;
}

static void __exit my_fini(void)
{
    printk("bye\n");

    cdev_del(my_cdev);
    //kfree(my_cdev); no use. because that cdev_del() will call kfree if neccessary.


    class_device_destroy(my_class, MKDEV(DUMMY_MAJOR, DUMMY_MINOR));
    class_destroy(my_class);

}




module_init(my_init);
module_exit(my_fini);
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP