请问各位,misc设备在注册的时候怎么创建设备节点呢?能不能使用mknod命令。还是有其他的命令创建节点。我加载模块时insmod mini2440_hpi.ko后,/dev/下没有设备节点hpi。
[root@FriendlyARM /mnt]# ./test
open device hpi: No such file or directory
--------------------------------------------------------------
#include <linux/miscdevice.h>
#include <linux/delay.h>
#include <asm/irq.h>
#include <mach/regs-gpio.h>
#include <mach/hardware.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/delay.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>
#include <linux/errno.h>
#include <linux/ioctl.h>
#include <linux/cdev.h>
#include <linux/string.h>
#include <linux/list.h>
#include <linux/pci.h>
#include <asm/uaccess.h>
#include <asm/atomic.h>
#include <asm/unistd.h>
#define DEVICE_NAME "hpi"
static int mini2440_hpi_ioctl(
struct inode *inode,
struct file *file,
unsigned int cmd,
unsigned long arg)
{
switch(cmd) {
case 0:
printk("ioctl is chose 0.\n");
return 0;
case 1:
printk("ioctl is chose 1.\n");
return 0;
default:
return -EINVAL;
}
}
static struct file_operations hpi_fops = {
.owner = THIS_MODULE,
.ioctl = mini2440_hpi_ioctl,
};
static struct miscdevice misc = {
.minor = MISC_DYNAMIC_MINOR,
.name = DEVICE_NAME,
.fops = &hpi_fops,
};
static int __init mini2440_hpi_init(void)
{
int ret;
ret = misc_register(&misc);
printk (DEVICE_NAME"\tInitialized\n");
return ret;
}
static void __exit mini2440_hpi_exit(void)
{
misc_deregister(&misc);
printk(DEVICE_NAME"Removed!\n");
}
module_init(mini2440_hpi_init);
module_exit(mini2440_hpi_exit);
MODULE_LICENSE("GPL");
测试程序:
//test.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
int main(int argc, char **argv)
{
int fd;
fd = open("/dev/hpi", 0);
if (fd < 0) {
perror("open device hpi");
exit(1);
}
ioctl(fd, 0);
close(fd);
return 0;
}