当前位置: 代码迷 >> 驱动开发 >> 怎么正确的注册字符设备的驱动程序
  详细解决方案

怎么正确的注册字符设备的驱动程序

热度:230   发布时间:2016-04-28 10:00:01.0
如何正确的注册字符设备的驱动程序
各位大神,我在写一个简单的蜂鸣器驱动,已经编译生成了.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分配设备号是否成功