1. request_irq()函数原型 int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id) int request_i ...
分类:
系统相关 时间:
2018-09-22 17:06:27
阅读次数:
330
(一)解析:class_create函数和class_destroy函数 创建一个类 和 删除一个类。 (二)class_create函数原型 struct class *class_create(struct module *owner, const char *name); 1. 查看函数注释: ...
分类:
系统相关 时间:
2018-09-22 17:05:24
阅读次数:
197
1. copy_from_user函数的目的是从用户空间拷贝数据到内核空间 2. 解析原型: copy_from_user(void *to, const void __user *from, unsigned long n) 1. @*to 将数据拷贝到内核的地址 2. @*from 需要拷贝数据 ...
分类:
系统相关 时间:
2018-09-22 17:04:26
阅读次数:
310
2. 信号量 信号量(semaphore)是用于保护临界区的一种常用方法,只有得到信号量的进程才能执行临界区代码。 当获取不到信号量时,进程进入休眠等待状态。 定义信号量 struct semaphore sem; 初始化信号量 void sema_init (struct semaphore *s ...
分类:
系统相关 时间:
2018-09-22 17:03:10
阅读次数:
177
(一)定义一个timer_list定时器结构体,linux 内核定时器 timer_list详解 (二)初始化定时器,当超时时间expires到之后会调用buttons_timer_function函数 (二)初始化定时器,当超时时间expires到之后会调用buttons_timer_functi ...
分类:
系统相关 时间:
2018-09-22 17:01:52
阅读次数:
199
(一)解析class_device_create函数 (二)当我们使用class_create创建一个类之后我们就可以使用class_device_create函数在这个类下面创建一个设备了,class_create创建查看004_linux驱动之_class_create创建一个设备类 (三)cl ...
分类:
系统相关 时间:
2018-09-22 17:01:13
阅读次数:
189
1. 首先看应用程序 1. 首先分析第二点使用函数signal(SIGIO, my_signal_fun);来设置,当驱动程序传递信号给应用程序时候会调用第一点的程序 2. 第三点是设置相关参数 (二)当应用程序调用到底三点时候,就会在驱动程序中调用到第一点 上面的驱动程序初始化了信号的相关参数,然 ...
分类:
系统相关 时间:
2018-09-22 16:59:52
阅读次数:
188
1. 测试:配置S3C2440的GPF4,5,6为输出 2. 测试IO的地址从芯片手册中获取以下资料 3. 从上面可以看出配置输出对应的设置是01=输出,那么对应位如:[9:8]需要设置成=01 4. 解析配置之前我们需要先将对应IO使用命令“&”设置成00,然后使用命令“|”设置成01 5. 则可 ...
分类:
系统相关 时间:
2018-09-22 16:58:56
阅读次数:
168
阻塞操作 是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作。 被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。 非阻塞操作 进程在不能进行设备操作时并不挂起,它或者放弃,或者不停地查询,直至可以进行操作为止。 fd = open("...", ...
分类:
系统相关 时间:
2018-09-22 16:56:57
阅读次数:
145
1. 原子操作 原子操作指的是在执行过程中不会被别的代码路径所中断的操作。 常用原子操作函数举例: atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0 atomic_read(atomic_t *v); //返回原子变量的值 void atomic_inc(at ...
分类:
系统相关 时间:
2018-09-22 16:56:41
阅读次数:
155