加载杂项驱动模块后,在(/dev/)目录下没有生成杂项的设备文件。
现象描述:
加载驱动模块(insmod drv_miscdev.ko);查看设备文件(ls /dev/ | grep first_miscdev),没有显示任何信息,即加载杂项驱动模块后,在目录(/dev/)下没有生成设备文件;查看记录(cat /proc/devices | grep first_miscdev),没有显示任何信息。
驱动程序如下:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/miscdevice.h>
#define LEDS_MAJOR MISC_DYNAMIC_MINOR //255
#define DEVICE_NAME "first_miscdev"
static int first_miscdev_open(struct inode * pinode,struct file * pfile)
{
printk(KERN_EMERG "Linux miscdevice:%s is call\r\n",__FUNCTION__);
return 0;
}
static int first_miscdev_ioctl(struct inode * inode,struct file * file,unsigned int cmd,unsigned long arg)
{
return 0;
}
ssize_t first_miscdev_read(struct file * filp,char __user *buf,size_t count,loff_t * offset)
{
printk(KERN_EMERG "Linux miscdevice:%s is call\r\n",__FUNCTION__); //可能是__FUNCTION__,即双下划线
return count;
}
ssize_t first_miscdev_write(struct file * filp,const char __user *buf,size_t count,loff_t * offset)
{
printk(KERN_EMERG "Linux miscdevice:%s is call\r\n",__FUNCTION__);
return count;
}
loff_t first_miscdev_llseek(struct file * file,loff_t loff,int origin)
{
printk(KERN_EMERG "Linux miscdevice:%s is call\r\n",__FUNCTION__);
printk(KERN_EMERG "loff:%ld;origin:%d\r\n",(long)loff,origin);
return loff;
}
int first_miscdev_release(struct inode * inode,struct file * file)
{
printk(KERN_EMERG "Linux miscdevice:%s is call\r\n",__FUNCTION__);
return 0;
}
static struct file_operations dev_fops=
{
.owner=THIS_MODULE,
.ioctl=first_miscdev_ioctl,
.open=first_miscdev_open,
.read=first_miscdev_read,
.write=first_miscdev_write,
.release=first_miscdev_release,
.llseek=first_miscdev_llseek,
};
static struct miscdevice misc=
{
.minor=LEDS_MAJOR,
.name=DEVICE_NAME,
.fops=&dev_fops,
};
static int __init first_miscdev_init(void)
{
int ret;
ret=misc_register(&misc);
printk(KERN_EMERG "major:%d\r\n",ret);
if(ret<0)
printk(KERN_EMERG DEVICE_NAME "\t err\r\n");
printk(KERN_EMERG DEVICE_NAME "\t initialized\n");
return ret;
}
static void __exit first_miscdev_exit(void)
{
misc_deregister(&misc);
printk(KERN_EMERG "Goodbye,cruel world!,priority=0\n");
}
module_init(first_miscdev_init);
module_exit(first_miscdev_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("XYD");
MODULE_DESCRIPTION("This the sample drv_test");