(5)x210:2.4之前的字符驱动-动态获得mymajor主设备号
来源:互联网 发布:淘宝营销活动规则 编辑:程序博客网 时间:2024/05/22 08:16
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fs.h>
#define MYMAJOR 200
#define MYNAME "chardev"
int mymajor ;
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;
printk(KERN_INFO "jimmy module chardev init");
mymajor=register_chrdev(0,MYNAME,&test_fops); //由内核分配,然后mkdnod /dev/chardev mymajor 0生成设备文件
printk(KERN_ERR "register_chrdev fail\n");
return -EINVAL;
}
printk(KERN_INFO "register_chrdev success...myjor=%d.\n",mymajor);
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"); // 描述模块的别名信息
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fs.h>
#define MYMAJOR 200
#define MYNAME "chardev"
int mymajor ;
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;
printk(KERN_INFO "jimmy module chardev init");
mymajor=register_chrdev(0,MYNAME,&test_fops); //由内核分配,然后mkdnod /dev/chardev mymajor 0生成设备文件
//注意/dev/chardev是MYNAME给出的,不能自己任意命名,这是测试发现的,与静态指定主设备的任意命名稍微不同
if(mymajor<0)
{printk(KERN_ERR "register_chrdev fail\n");
return -EINVAL;
}
printk(KERN_INFO "register_chrdev success...myjor=%d.\n",mymajor);
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"); // 描述模块的别名信息
阅读全文
0 0
- (5)x210:2.4之前的字符驱动-动态获得mymajor主设备号
- (4)x210: 2.4之前的字符驱动
- (7)x210:2.4之前的驱动--memdev模拟驱动-涉及阻塞
- (10)x210: linux2.6之后的字符驱动
- 主设备号--驱动模块与设备节点联系的纽带
- 获取主设备号的代码
- [ARM-Linux开发] 主设备号--驱动模块与设备节点联系的纽带
- X210触摸屏驱动分析
- linux驱动开发 主设备号与次设备号
- 【linux驱动开发】主设备号与次设备号
- linux驱动开发 主设备号与次设备号
- linux驱动开发 主设备号与次设备号
- linux驱动开发 主设备号与次设备号
- linux驱动开发 主设备号与次设备号
- linux驱动开发 主设备号与次设备号
- linux驱动开发 主设备号与次设备号
- linux驱动开发 主设备号与次设备号
- s5pv210,lcd驱动,x210,驱动
- 回文数字(Palindrome Number)
- JQuery 的学习方法和心得
- Struts的数据处理方式
- 打开或关闭软键盘
- JSch
- (5)x210:2.4之前的字符驱动-动态获得mymajor主设备号
- MVC及Web API添加身份验证及错误处理的过滤器
- 笔试题2
- github之简单使用(可跳跃性阅读)
- Python操作Mongodb (增删改查)
- docker实践安装gitlab
- 康神建议之重学《c++ primer》(1)
- Application Loader无法登录->修改网络代理配置即可
- 各大语言数据使数据更有用