模块驱动添加字符设备驱动

来源:互联网 发布:linux ftp命令安装 编辑:程序博客网 时间:2024/06/08 09:31

第一步:

typedef struct {    struct cdev cdev;    dev_t   devid;    struct class *cls;}mypdata;ssize_t myread(struct file *fl, char *__user buf, size_t len, loff_t *off){    //...    return 0;}struct file_operations fops = {    .owner = THIS_MODULE,    .read = myread,//这里举例,详细的参数查看file_operations结构体};

第二步:

int myprobe(struct platform_device *pdev){    static int mi = 0;//用于记录次设备号    /////////// cdev 部分/////////    pdata->devid = MKDEV(MYMA, mi);//MYMA:主设备号    ret = register_chrdev_region(pdata->devid, COUNT, pdev->name);    if (ret < 0)        goto err2;//根据需要,回收资源    cdev_init(&pdata->cdev, &fops);    pdata->cdev.owner = THIS_MODULE;    ret = cdev_add(&pdata->cdev, pdata->devid, COUNT);    if (ret < 0)        goto err3;//根据需要,回收资源    pdata->cls = class_create(THIS_MODULE, pdev->name);    device_create(pdata->cls, NULL, pdata->devid, NULL, pdev->name);    //...    platform_set_drvdata(pdev, pdata);//保存数据    mi++;//依次分配次设备号    return 0;}

第三步:

int myremove(struct platform_device *pdev){    mypdata *pdata = platform_get_drvdata(pdev);     //提取数据    unregister_chrdev_region(pdata->devid, COUNT);    cdev_del(&pdata->cdev);    device_destroy(pdata->cls, pdata->devid);    class_destroy(pdata->cls);    //..    //..    return 0;}
原创粉丝点击