- 论坛徽章:
- 0
|
hello driver 显示/dev/下一个结点,动态申请设备号
#include //dev_t
#include //struct cdev
#include //alloc_chrdev_region()
#include //class_create()
dev_t devid;
static struct cdev *maytures_cdev;
static int maytures_Major = 0;
static int maytures_Minor = 0;
static struct class *maytures_class;
static struct file_operations maytures_fops = {
.owner = THIS_MODULE,
};
static int __init maytures_init(void)
{
int err;
//初始化cdev
maytures_cdev = cdev_alloc();
cdev_init(maytures_cdev, &maytures_fops);
maytures_cdev->owner = THIS_MODULE;
//动态获取主设备号(dev_t devid中包含"主设备号"和"次设备号"信息)
alloc_chrdev_region(&devid, 66, 1, "maytures");
maytures_Major = MAJOR(devid);
maytures_Minor = MINOR(devid);
printk(KERN_ALERT "I was assigned major number %d.\n", maytures_Major);
printk(KERN_ALERT "I was assigned minor number %d.\n", maytures_Minor);
//注册字符设备 (1)
err = cdev_add(maytures_cdev, devid, 1);
if (err) {
printk(KERN_NOTICE "Error %d adding device\n", err);
return -1;
}
// WM8350_SW_RESET_CHIP_ID_MASK = 0x0;
maytures_class = class_create(THIS_MODULE, "maytures_class1");
if (IS_ERR(maytures_class)) {
printk(KERN_ALERT "create class error\n");
return -1;
}
device_create(maytures_class, NULL, devid, NULL, "maytures" "%d", MINOR(devid));
return 0;
}
static void __exit maytures_exit(void)
{
unregister_chrdev_region(devid, 1);
cdev_del(maytures_cdev);
device_destroy(maytures_class, devid);
class_destroy(maytures_class);
printk(KERN_ALERT "exit module.\n");
}
module_init(maytures_init);
module_exit(maytures_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("maytures ");
MODULE_DESCRIPTION("A sample driver");
MODULE_SUPPORTED_DEVICE("testdevice");
Makefile :
#obj-m:= hello.o
PWD := $(shell pwd)
KERNELDIR := /home/cmz/MyProjects/omap3/code/ema_psp-02.01.03.11
all: default
obj-m += create_chrdev.o
#ARCH=arm
#CROSS_COMPILE=arm-none-linux-gnueabi-
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm *.mod.c *.o *.ko
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/107072/showart_2138895.html |
|