Adding a device from a kernel module the udev way (pi, a device that prints out the value of pi)

 

It seems like the interface for creating modules has changed a bit, and udev is the way to go. Here is a short, quick and dirty module that creates /dev/pi with anonymous major and minor using udev.

The module creates the device (not the file) with register_chrdev , which returns the value of the major number that was assigned. We then use class_create to create a udev class to contain the device, finally you call device_create to actually make the device file.

To remove the device, you call device_destroy to remove the device from the class, then class_destroy to delete the class and finally unregister_chrdev to remove the device from the kernel (the device not the file).

The relevant init and exit sections are:
static int pi_init(void)
{
        struct device *err_dev;
 
        msg = kmalloc(sizeof(char)*DIGITS, GFP_ATOMIC);
 
        // register pi as a device
        pi_Major = register_chrdev(0, DEVICE_NAME, &fops);
 
        if (pi_Major < 0) {
                printk ("Failed to register device %s with error %d/n", DEVICE_NAME, pi_Major);
                return pi_Major;
        }
 
        /* create /dev/pi
         * we use udev to make the file
         */
        pi_class = class_create(THIS_MODULE,DEVICE_NAME);
        err_dev = device_create(pi_class, NULL, MKDEV(pi_Major,0),NULL,DEVICE_NAME);
 
        return 0;
}
 
/* remove the module
*/
static void pi_exit(void)
{
        /* free our memory, then destroy the device
         * then unregister the class and destroy it (unregister before destroy....important
         */
        kfree(msg);
        device_destroy(pi_class,MKDEV(pi_Major,0));
        class_destroy(pi_class);
        unregister_chrdev(pi_Major, DEVICE_NAME);
}
Hope that helps someone out there. source files

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值