裸机下控制LED灯非常方便,只需要配置好GPIO引脚功能,然后向GPIO引脚映射的内存地址处写入数据即可,但linux下驱动就不那么简单了,需要结合字符设备驱动的架构,然后将功能实现添加进去,笔者参考linux设备驱动程序(第三版)中介绍的新的接口来实现驱动。友善之臂官网提供的源码是基于miscde ...
分类:
其他好文 时间:
2016-06-02 00:50:50
阅读次数:
162
在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问。因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类似“中断”的异步通知所取代。异步通知类似于硬件上的“中断”概念,比较准确的称谓是“信号驱动的异步I/O”。
9.1 异步通知的概念和作用
异步通知:一旦设备就绪,则主动通知应用程序,该应用程序无需查询设备状态
几种通知方式比较:
阻塞I/...
分类:
系统相关 时间:
2016-05-20 19:47:46
阅读次数:
356
#include
#include
#include
#include "ioctl_led.h"
#define DEV_NAME "test-dev"
volatile bool empty = true;
//定义一个进程资源的指针变量
struct task_struct *task;
int test_open(struct inode *inode, struct file ...
分类:
系统相关 时间:
2016-05-13 15:08:20
阅读次数:
212
LDD3的开发环境推荐的是2.6.10,安装了RHEL4-update4,其内核版本为2.6.9.42,编译mmap的程序时报错:Unknown symbol remap_pfn_range
在网上查了下,应将上述报错的函数改为remap_page_range,并且remap_page_range不再推荐使用了,两个内核函数第二个参数定义不相同:
int remap_page_range(st...
分类:
系统相关 时间:
2016-05-13 01:18:17
阅读次数:
1231
最简单的内核模块#include
#include
static int __init hello_init(void) //内核初始化函数
{
printk("hello world!\n"); //打印函数,和prinft类似
return 0;
}
static void __exit...
分类:
系统相关 时间:
2016-05-13 00:23:07
阅读次数:
170
设备号设备号由主设备号和次设备号组成。linux下,一切设备皆文件,所有的设备都能在/dev目录下找到相应的文件。这些文件除了名字不一样以外,还每个设备文件都有不一样的设备号;
一般地,主设备号对应一个类型的驱动设备,之所以有次设备号,它是用来驱动同类型的设备。如串口,所有的串口共用一个主设备号,每个串口有不同的次设备号。dev_t类型用来保存设备编号(包含主设备号和次设备号),实际上是一个3...
分类:
系统相关 时间:
2016-05-13 00:18:13
阅读次数:
190
一、并发与竞争 并发是指多个 多个执行单元同时执行,而这对对共享的资源,比如硬件的资源、软件的全局变量、静态变量 的访问,很容易导致竞态, 1.1、中断屏蔽 在单核的 CPU 里,避免竞态的一个简单有效的方法是,在进入临界区之前,就屏蔽系统的中断。也就是说,在进入临界区之前,中断被关闭,使得中断与进... ...
分类:
系统相关 时间:
2016-05-11 19:35:39
阅读次数:
199
第一章是Android系统移植与驱动开发概述,包含了Android系统架构、Android系统移植的主要工作、查看Linux内核版本、Linux内核版本号的定义规则、如何学习Linux驱动开发以及Linux设备驱动等六方面内容 Android系统架构分为四层,分别是Linux内核、C/C++代码库、 ...
分类:
移动开发 时间:
2016-05-03 00:09:43
阅读次数:
267
本章通过介绍android系统架构->介绍android系统移植的主要工作->查看linux内核版本->linux内核版本号的定义规则->如何学习linux驱动开发->linux设备驱动 给linux驱动举例的方式来对于Andriod系统移植与驱动开发的工作做出一个基本的概述。 首先,android ...
分类:
其他好文 时间:
2016-04-30 14:07:58
阅读次数:
120
分配内存
介绍设备驱动程序中使用内存的方法;
如何最好地利用系统内存资源。
kmalloc函数
kmalloc内存分配引擎是一个功能强大的工具。
#include
void *kmalloc(size_t size, int flags);
参数分配表示flags能够以多种方式控制kmalloc的行为。
标志GFP_KERNEL表示内存分配是代表运行在内核空间的进程执行的...
分类:
系统相关 时间:
2016-04-29 20:11:36
阅读次数:
278