各位大神,我在写一个简单的蜂鸣器驱动,已经编译生成了.ko文件
当我将文件放在开发板上 执行insmod后,为什么cat /proc/devices看不到我注册的驱动,和设备号。
lsmod却显示我的驱动正在运行。init部分代码如下
#define DEVICE_NAME "my_beep"
struct cdev mydev;
static int beep_Major = 0;
struct class *Beep_class;
dev_t devno=0;
static int __init My_Beep_init(void)
{
printk("<0>""My_Beep start\n");
alloc_chrdev_region(&devno, 0, 1, DEVICE_NAME);
beep_Major = MAJOR(devno);
//beep_cdev = cdev_alloc();
cdev_init(&mydev,&My_Beep_fops);
mydev.owner = THIS_MODULE;
mydev.ops=&My_Beep_fops;
//err = cdev_add(&beep_cdev, devno, 1);
cdev_add(&mydev, devno, 1);
printk(KERN_INFO "I was assigned major number %d.\n", beep_Major);
Beep_class = class_create(THIS_MODULE, "my_beep");
device_create(Beep_class, NULL, devno, NULL, DEVICE_NAME);
printk(DEVICE_NAME "initialized\n");
return 0;
}
各位请看看这样能注册驱动到内核 以及自动生成设备号和节点吗?
也试了网上其他几个简单程序,都没能注册成功。
还望各位大神赐教!
------解决思路----------------------
整体看上去没有错,建议你对cdev_add函数的返回值进行判断一下,看设备注册是否成功,另外可以看一下alloc_chrdev_region分配设备号是否成功