(6)2.4之前的字符驅動-用devfs_register自動生成設備文件(可能在2.6linux目錄樹下編譯不了)

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/irq.h>
#include <linux/delay.h>
#define MYMAJOR 200
#define MYNAME "chardev"
int mymajor ;

 devfs_handle_t devfs_handle;
static int test_chardev_open(struct inode *inode,struct file *file)
{
printk(KERN_INFO "test chardev_open\n");
return 0;
}
static int test_chardev_release(struct inode *inode,struct file *file){
printk(KERN_INFO "test chardev_release\n");
return 0;
}
static ssize_t test_chardev_read(struct file *file,char __user *buf,size_t size, loff_t *ppos)
{
printk(KERN_INFO " test read\n");
return 0;

}
static ssize_t test_chardev_write(struct file *file,
const char __user *ubuf,size_t count,loff_t * ppos){
printk(KERN_INFO " test write\n");
return 0;
}

static const struct file_operations test_fops={
.owner=THIS_MODULE,
.open=test_chardev_open,
.release=test_chardev_release,
.write=test_chardev_write,
.read=test_chardev_read,
};
static int __init chardev_init(void)
{ int ret=-1;
//int devfs_handle=0;
printk(KERN_INFO "jimmy module chardev init");
mymajor=register_chrdev(0,MYNAME,&test_fops);
if(mymajor<0)
{
printk(KERN_ERR "register_chrdev fail\n");
return -EINVAL;
}

printk(KERN_INFO "register_chrdev success...myjor=%d.\n",mymajor);

devfs_handle = devfs_register(NULL, MYNAME,DEVFS_FL_DEFAULT,mymajor, 0, S_IFCHR | S_IRUSR | S_IWUSR, &test_fops, NULL);

return 0;
}
static void __exit chardev_exit(void)
{
    
printk(KERN_INFO "jimmy module chardev exit\n");
unregister_chrdev(MYMAJOR, MYNAME);
}

module_init(chardev_init);
module_exit(chardev_exit);
// MODULE_xxx這種宏作用是用來添加模塊描述信息

MODULE_LICENSE("GPL");                // 描述模塊的許可證

MODULE_AUTHOR("aston");                // 描述模塊的作者

MODULE_DESCRIPTION("module test");    // 描述模塊的介紹信息

MODULE_ALIAS("alias xxx");            // 描述模塊的別名信息


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章