Linux /dev 自动创建设备节点
- #include <linux/module.h>
- #include <linux/module.h>
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/fs.h>
- #include <linux/cdev.h>
- #include <linux/device.h>
- #include <asm/uaccess.h>
- #define HELLO_MAJOR 250
- #define HELLO_MINOR 0
- #define NUMBER_OF_DEVICES 2
- struct class *hello_class;
- static struct cdev cdev;
- dev_t devno;
- static ssize_t hello_read(struct file *file, char __user *buf, size_t count,
- loff_t *ppos)
- {
- char *str = "hello world";
- copy_to_user(buf,str,strlen(str));
- *(buf + strlen(str)) = '\n';
- return count;
- }
- static ssize_t hello_open(struct inode *inode,struct file *file)
- {
- return 0;
- }
- static const struct file_operations hello_fops = {
- .open = hello_open,
- .read = hello_read,
- .owner = THIS_MODULE,
- };
- static int __init hello_init(void)
- {
- int ret;
- devno = MKDEV(HELLO_MAJOR,HELLO_MINOR);
- if(HELLO_MAJOR){
- ret = register_chrdev_region(devno,NUMBER_OF_DEVICES,"chrdev");
- }else{
- ret = alloc_chrdev_region(&devno, 0, NUMBER_OF_DEVICES, "chrdev");
- }
- if(ret < 0){
- printk("%s register chrdev error\n",__func__);
- return ret;
- }
- hello_class = class_create(THIS_MODULE,"hello_char_calss");
- if(IS_ERR(hello_class)){
- printk("%s create class error\n",__func__);
- return -1;
- }
- device_create(hello_class, NULL, devno, NULL, "chrdev");
- cdev_init(&cdev, &hello_fops);
- cdev.owner = THIS_MODULE;
- cdev_add(&cdev, devno, NUMBER_OF_DEVICES);
- return 0;
- }
- static void __exit hello_exit(void)
- {
- printk("%s",__func__);
- cdev_del(&cdev);
- device_destroy(hello_class,devno);
- class_destroy(hello_class);
- unregister_chrdev_region(devno,NUMBER_OF_DEVICES);
- }
- module_init(hello_init);
- module_exit(hello_exit);
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("oracleloyal@gmail.com");
- Makefile 内容
- 1 ifeq ($(KERNELRELEASE),)
2 #KERNEL_DIR:=/home/archermind/zhaoxi/bsw_ww02_2016/kernel/cht
3 KERNEL_DIR:=/usr/src/linux-headers-3.13.0-32-generic
4 PWD:=$(shell pwd)
5 modules:
6 $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
7 modules_install:
8 $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules_install
9 clean:
10 rm -rf .*.cmd *.ko *.o modules.order Module.symvers *mod.c
11 .PHONY: modules modules_install clean
12 else
13 modules-objs := my.o
14 obj-m := my.o
15 endif编译模块安装之后会在/sys/class/看到hello_char_class 以及目录内的chrdev,同时也会在/dev下看到udev为我们建立的节点chrdev.
测试程序
- #include <stdio.h>
- #include <fcntl.h>
- int main(void)
- {
- int fd;
- int i;
- char buf[50];
- fd = open("/dev/chrdev",O_RDWR);
- if(fd < 0){
- printf("can't open dev\n");
- return -1;
- }
- read(fd,buf,11);
- printf("%s",buf);
- return 0;
- }
- 测试程序执行后会输出hello world.,
Linux /dev 自动创建设备节点的更多相关文章
- linux驱动开发(四) 字符设备驱动框架(自动创建设备节点)
代码如下 #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> # ...
- platform型设备在/dev目录下自动创建设备节点的分析【转】
转自:http://blog.csdn.net/rockrockwu/article/details/7357648 系统启动过程中platform设备.驱动注册完毕,为什么在/dev目录下就自动创建 ...
- I.MX6 linux eGalaxTouch 自动获取设备节点
I.MX6 linux eGalaxTouch 自动获取设备节点 \\\\\\\\\\\\\\-*- 目录 -*-///////////// | 一. 需求: | 二. /proc/bus/input ...
- linux下自动创建设备文件节点---class
在驱动模块初始化函数中实现设备节点的自动创建 我们在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的 ...
- Linux 内核驱动自动创建设备节点并挂载设备
*注:本文来自http://blog.csdn.net/lwj103862095/article/details/17470573 一.首先需要在最开始定义两个数据结构: static struct ...
- 使用class 自动创建设备节点
#include <linux/init.h>// __init __exit #include <linux/module.h> // module_init module_ ...
- Linux设备驱动实现自己主动创建设备节点
#include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #inclu ...
- linux driver ------ 字符设备驱动 之 “ 创建设备节点流程 ”
在字符设备驱动开发的入门教程中,最常见的就是用device_create()函数来创建设备节点了,但是在之后阅读内核源码的过程中却很少见device_create()的踪影了,取而代之的是device ...
- linux驱动之设备号与创建设备节点
设备号: 1.自己主动分配 major = register_chrdev(0,"first_drv",&first_sdv_fops);//注冊 注冊设备时给设备号写0, ...
随机推荐
- 数码相框之Makefile笔记
本程序的Makefile分为3类:1. 顶层目录的Makefile2. 顶层目录的Makefile.build3. 各级子目录的Makefile 一.各级子目录的Makefile: 它最简单,形式如下 ...
- POJ 1502 MPI Maelstrom (最短路)
MPI Maelstrom Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6044 Accepted: 3761 Des ...
- 【递归】数字三角形 简单dp
[递归]数字三角形 题目描述 对于大多数人来说,“我们是这么的正常,因此也就这么的平庸.”而天才总是与众不同的,所以当邪狼问修罗王:“老大,你蹲在那儿一动不动看了有半个小时了,蚂蚁有那么好看吗?” 修 ...
- ARM嵌入式整理
填空 1指令含义 列出文件列表的ls命令 切换目录的cd命令 创建目录的mkdir命令 删除目录的rmdir命令 复制文件的cp命令 删除文件或目录的rm命令 让显示画面暂停的more命令 连接文件的 ...
- BZOJ 1040: [ZJOI2008]骑士 基环加外向树
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1190 Solved: 465[Submit][Status] ...
- IntelliJ IDEA 集成Tomcat后找不到HttpServlet问题(2015年06月13日)
今天第一次用IntelliJ IDEA集成Tomcat做东西玩,在IntelliJ IDEA中配置好Tomcat之后,开始写Servlet,结果却找不到HttpServlet类,原因就是Intelli ...
- 瀑布流布局--jQuery写法
HTML <div id="main"> <div class="box"> <div class="pic" ...
- 怎么解决tomcat占用8080端口问题图文教程(转)
亲测有效. 原因:可能是开了多个tomcat 原文网址:http://jingyan.baidu.com/article/1612d5006c3cdae20e1eee04.html 怎么解决tomc ...
- 实现百度外卖APP个人中心头像"浪"起来的动画效果
让你的头像浪起来~~~~~ DEMO 地址:网页链接,点击下载 你需要知道的 CADisplayLink 简单的说就是一定时器,其根本利用刷帧和屏幕频率一样来重绘渲染页面. 其创建方式: [Objec ...
- C#颜色 转换
C#Winform 使用16进制颜色 var color = ColorTranslator.FromHtml("#eeeeee");