1. mycdev.c

 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/cdev.h>
 #include <linux/fs.h>

 #define MAJOR_NUM 250

 struct mycdev
 {
     struct cdev cdev;
 };

 int mycdev_open(struct inode *inode, struct file *file)
 {
     printk("Call mycdev_open()\n");
     ;
 }

 struct file_operations fops = {
     .owner = THIS_MODULE,
     .open = mycdev_open,
 };

 struct mycdev mycdev;

 int mycdev_init(void)
 {
     ;
     dev_t dev;

     dev = MKDEV(MAJOR_NUM, );
     ret = register_chrdev_region(dev, , "mycdev");
     )
     {
         printk("register_chrdev_region() error\n");
         goto err_register_chrdev_region;
     }

     cdev_init(&(mycdev.cdev), &fops);

     ret = cdev_add(&(mycdev.cdev), dev, );
     )
     {
         printk("cdev_add() error\n");
         goto err_cdev_add;
     }

     printk("mycdev_init()\n");
     ;

 err_cdev_add:
     unregister_chrdev_region(dev, );

 err_register_chrdev_region:
     return ret;
 }

 void mycdev_exit(void)
 {
     dev_t dev = mycdev.cdev.dev;

     cdev_del(&(mycdev.cdev));
     unregister_chrdev_region(dev, );

     printk("mycdev_exit()\n");
     return;
 }

 module_init(mycdev_init);
 module_exit(mycdev_exit);

 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("GNB");

2. Makefile

 KERNEL_DIR = /lib/modules/$(shell uname -r)/build
 PWD = $(shell pwd)

 ifneq ($(KERNELRELEASE),)

 obj-m := mycdev.o

 else

 .PHONY:default clean

 default:
     $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules

 clean:
     $(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean

 endif

3. 应用层app

 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <stdio.h>
 #include <stdlib.h>

 int main(int argc, const char *argv[])
 {
     int fd;

     fd = open("/dev/mycdev",O_RDONLY);
     printf("fd = %d\n",fd);
     );

     ;
 }

4. 加载驱动

sudo insmod mycdev.ko

5. 创建设备节点,并指定权限

sudo mknod /dev/mycdev c 250 0

sudo chmod 666 /dev/mycdev

6. 测试字符设备

cat /dev/mycdev

echo "hello world" > /dev/mycdev

05 Linux字符驱动---静态注册的更多相关文章

  1. 基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(一)之miscdevice和ioctl

    基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(一)之miscdevice和ioctl 0. 导语 在嵌入式的道路上寻寻觅觅很久,进入嵌入式这个行业也有几年的时间了,从2011年后 ...

  2. 基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(二)之cdev与read、write

    基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(二)之cdev与read.write 0. 导语 在上一篇博客里面,基于OMAPL138的字符驱动_GPIO驱动AD9833(一)之 ...

  3. linux 字符驱动框架(用户态的read,write,poll是怎么操作驱动的)

    前言 这篇文章是通过对一个简单字符设备驱动的操作来解释,用户态的读写操作是怎么映射到具体设备的. 因为针对不同版本的linux内核,驱动的接口函数一直有变化,这贴出我测试的系统信息: root@ubu ...

  4. linux 字符驱动

    1 结构体说明:     struct cdev {         struct kobject kobj;          // 每一个 cdev 都是一个 kobject         st ...

  5. linux字符驱动之poll机制按键驱动

    在上一节中,我们讲解了如何自动创建设备节点,实现一个中断方式的按键驱动.虽然中断式的驱动,效率是蛮高的,但是大家有没有发现,应用程序的死循环里的读函数是一直在读的:在实际的应用场所里,有没有那么一种情 ...

  6. [S5PV210 Linux字符驱动之PWM蜂鸣器驱动

    在SMDK210.C中添加如下beeper_device 结构体 static struct platform_device beeper_device = { .name = "pwm_b ...

  7. 基于OMAPL138的字符驱动_GPIO驱动AD9833(三)之中断申请IRQ

    基于OMAPL138的字符驱动_GPIO驱动AD9833(三)之中断申请IRQ 0. 导语 学习进入到了下一个阶段,还是以AD9833为例,这次学习是向设备申请中断,实现触发,在未来很多场景,比如做用 ...

  8. 旧接口注册LED字符驱动设备(静态映射)

    #include <linux/init.h> // __init __exit #include <linux/module.h> // module_init module ...

  9. 驱动开发学习笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇

    驱动开发读书笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇 下面这段摘自 linux源码里面的文档 : 内核版本2.6.22Doc ...

随机推荐

  1. JavaScript:有符号整数与无符号整数相互转化

    确实巧妙:原文http://blog.csdn.net/kandyer/article/details/8241937 <script language="JavaScript&quo ...

  2. android 手势识别学习

    引自http://www.cnblogs.com/android100/p/android-hand.html    http://blog.csdn.net/jiangshide/article/d ...

  3. Fastjson简单使用方法

    一.简单数据的序列化 pubic class UserInfo implements Serializable{ private String name; private int age; publi ...

  4. css3的apprearance属性(转)

    appearance使用方法: .elmClass{ -webkit-appearance: value; -moz-appearance: value; appearance: value; } 接 ...

  5. html5语义化标签总结二

    HTML 5的革新之一:语义化标签二文本元素标签.分组元素标签. HTML 5的革新——语义化标签(一)中介绍了一些HTML5新加的一些节元素,一张页面中结构元素构成网页大体,但是也需要其他内容来填充 ...

  6. read cache return null

    http://stackoverflow.com/questions/8063590/unexpected-behaviour-after-memcached-server-restarts-how- ...

  7. html5 canvas 实现简单的画图

    今天早上看了一下 canvas 前端画图,数据可视化, 百度的 echart.js  , d3等 js 库都已经提供了强大的绘制各种图形的 API. 下面记录一下 有关canvas 绘图的基本知识: ...

  8. web开发没有服务器

    额,今天在学习pixi,用的是webstorm 开发的,但是用file://xxx的方式进去的话老是会报错 Image from origin 'file://' has been blocked f ...

  9. PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)

    树的遍历. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #i ...

  10. JSP/JAVA目录清单

    JAVA253中国象棋(CS) JAVA258网络五子棋游戏的设计与实现(CS) JAVA390停车场管理系统SQL(CS) JSP001学生综合素质测评系统JAVA+Mysql JSP002学生成绩 ...