
Char devices
文章平均质量分 68
lamdoc
这个作者很懒,什么都没留下…
展开
-
6_3_globalmem.ko
1 /*====================================================================== 2 A globalmem driver as an example of char device drivers 3 4 The initial developer of the original code is Baohua So原创 2012-06-22 14:02:20 · 122 阅读 · 0 评论 -
阻塞_睡眠_等待队列_唤醒机制
阻塞就是睡眠,可以通过等待队列方式实现,唤醒跟睡眠是反向关系。1. 阻塞概念:阻塞操作:指执行设备操作时若不能获得资源,则挂起(即休眠),直到满足可操作的条件后再进行操作。可以提高CPU 的工作效率。Applications typically expect to block, when a request cannot satisfied immediately.So原创 2012-06-22 14:04:58 · 801 阅读 · 0 评论 -
添加字符设备
添加一个普通的字符设备一般需要如下一些步骤:1. 字符设备声明:static struct cdev *pcdev;static dev_t ndev;静态的声明了 一个字符设备 cdev, 和设备号 dev_t;2. 模块加载过程中,添加一个字符设备:static int demo_map_init(void){ int err = 0;原创 2013-01-16 14:28:10 · 365 阅读 · 0 评论 -
mydev.ko --- mymod_multi.c
it's a multiple mydev* devices module driver. it's based on mymod_multiple.c, it will create /dev/mydev*, ndev will specify device number.1. Makefile obj-m := mydev.o#mydev-objs := mymod_basic.原创 2012-07-26 10:57:54 · 458 阅读 · 0 评论 -
mydev.ko --- mymod_basic
it's a basic mydev module. based on mymod_basic.c1. Makefile:obj-m := mydev.omydev-objs := mymod_basic.o#mydev-objs := mymod_multi.o ringbuffer.o# With this simplified Makefile, type 'make'原创 2012-07-26 10:48:57 · 371 阅读 · 0 评论 -
mydev.ko --- mymod_single.c
it's a single ringbuffer hardware module driver, based on mymod_single.c and ringbuffer.*.1. Makefileobj-m := mydev.o#mydev-objs := mymod_basic.omydev-objs := mymod_single.o ringbuffer.o# With原创 2012-07-26 10:53:17 · 481 阅读 · 0 评论 -
globalmem.ko --- 字符设备驱动
/*====================================================================== A globalmem driver as an example of char device drivers The initial developer of the original code is Baohua Song原创 2012-06-22 14:00:18 · 434 阅读 · 0 评论 -
注册字符设备时的 class_create() 与 device_create()
在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_cre转载 2012-07-25 15:19:42 · 530 阅读 · 0 评论 -
memdev.ko --- 字符设备驱动程序
1. memdev.c#include #include #include #include #include #include #include #include #include #include #include #include #include "memdev.h"static int mem_major = MEMDEV_MAJOR;static i原创 2012-07-24 16:33:03 · 478 阅读 · 0 评论 -
IS_ERR() 与 PTR_ERR()
像struct class *cls = class_create();这种语句,其中返回的指针值并不行kmalloc一样这么简单,只判断是否为NULL就可以了,内核是返回其错误值。那么我怎么来判断它呢,总不能用if()来将每个错误例出来吧,这里我们的IS_ERR()宏就发挥作用了。先看源代码,再讲原理,看看内核中的巧妙设计思路。/* include/linux/err.h *转载 2012-07-25 15:07:32 · 465 阅读 · 0 评论 -
两个globalmem设备驱动
/*设备驱动模块加载函数*/196 int globalmem_init(void)197 {198 int result;199 dev_t devno = MKDEV(globalmem_major, 0);200 201 /* 申请设备号*/202 if (globalmem_major)203 result = register_chrdev_region(devno, 2原创 2012-06-22 14:03:31 · 305 阅读 · 0 评论 -
Controlling a device --- ioctl
Sometimes apllications need the ability to control the device, in addition to exchanging data.1. Two approaches exist for implementing device control:--- Through special command sequences embeded原创 2012-07-23 14:32:56 · 475 阅读 · 0 评论 -
字符设备驱动
1. 字符设备通过字符设备文件来存取。"ls -l" 列出的第一列为“c”标识的,就是字符设备文件。列出的设备文件项中由一个逗号分隔的两个数字,就是设备文件的主次设备号。Q:字符设备文件与字符驱动程序如何建立起对应关系?A:设备号。主设备号:用来标识与设备文件相连的驱动程序,用来反映设备类型。次设备号:被驱动程序用来辨别操作的是哪个设备,用来区分同类型的设备。原创 2012-07-03 18:30:25 · 416 阅读 · 0 评论 -
错误: 隐式声明函数‘kmalloc’ [-Werror=implicit-function-declaration]
编译时遇到这个错误,原因是没有包含头文件linux/slab.h./home/xxha/study/char/memdev.c:152:2: 错误: 隐式声明函数‘kmalloc’ [-Werror=implicit-function-declaration]隐式声明函数错误的意思是函数在未声明之前就被调用了,需要先声明这两个函数,版本变化导致这个错误的出现。解决方法:找到原创 2012-07-24 14:15:20 · 4333 阅读 · 0 评论