Linux Driver
文章平均质量分 82
EmbeddedGuru
懒癌
展开
-
Linux Driver 入门-1
first_cdev_module.c :#include #include #include #include #include #include #include MODULE_LICENSE("GPL");static dev_t dev_id;static struct cdev *my_cdev;static struct clas原创 2013-10-25 15:07:51 · 528 阅读 · 0 评论 -
原子操作
原子操作可以保证对一个整型数据的修改是排他性的。Linux内核提供了一系列函数来实现内核中的原子操作,这些函数分成两类位原子操作整型变量原子操作不管是哪种原子操作都依赖于底层CPU的原子操作,因此所有这些函数都与CPU架构密切相关。对于ARM处理器而言,底层试用LDREX和STREX指令,比如:/* * ARMv6 UP and SMP safe atomic ops. We use lo原创 2016-03-17 23:15:42 · 489 阅读 · 0 评论 -
中断屏蔽
在单CPU范围内避免竞态的一种简单而有效的方法是在进入临界区之前屏蔽系统的中断。但在一般的驱动编程中不值得推荐,驱动通常要考虑夸平台特点而不假定自己在单核上运行。 cpu一般都具备屏蔽中断和打开中断的功能,此项功能保证正在执行的内核执行路径不被中断处理程序所抢占,防止某些竞态条件的发生。 具体而言,中断屏蔽将使得中断与进程之间的并发不再发生。 由于Linux内核进程调度等操作都依赖中断来实现,原创 2016-03-17 22:26:50 · 2460 阅读 · 0 评论 -
Linux设备驱动程序中的并发控制
并发(Concurrency):多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件资源(全局变量、静态变量等))的访问则很容易导致竞态(Race Conditions)。在Linux内核中,主要竞态发生于如下几种情况: 1、对称多处理器(SMP)的多个CPU 图 SMP体系结构 在SMP情况下,两个核(CPU0和CPU1)的竞态可能发生于:CPU0进程与CPU1的进原创 2016-01-10 19:59:35 · 652 阅读 · 0 评论 -
关于内核空间或用户空间拷贝数据注意事项
关于内核空间或用户空间拷贝数据注意事项在内核空间与用户空间界面处,内核检查用户空间缓冲区的合法性显得尤其必要,Linux内核的许多安全漏洞都是因为遗忘了这一检查造成的,非法侵入者可以伪造一片内核空间的缓冲区地址传入系统调用接口,让内核对这个"指向内核空间的缓冲区"填充数据,可以从http://www.cvedetails.com网站查询Linux CVE(Common Vulnerabilities原创 2016-01-10 11:57:31 · 1727 阅读 · 0 评论 -
Linux Driver异步与同步---信号signal
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include sta原创 2013-11-01 09:45:55 · 854 阅读 · 0 评论 -
Linux Driver 实现poll
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static dev_t dev原创 2013-11-01 09:18:25 · 930 阅读 · 0 评论 -
Linux Driver互斥、异步通知、阻塞与非阻塞综合实例
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include sta原创 2013-11-13 18:43:53 · 842 阅读 · 0 评论 -
Linux Driver输入子系统和按键的实例
//关于去按键抖动和输入子系统的实例#include #include #include #include #include #include #include #include #include static struct input_dev *buttons_dev;static struct pin_desc *cur_de原创 2013-11-13 18:39:06 · 769 阅读 · 0 评论 -
Linux Driver之总线设备驱动bus-dev-drv模型
以下是led_platform_dev文件内容:#include #include #include #include static struct resource res[] = { [0] = { .start = 5, .end = 8, .name = "nled",原创 2013-11-13 22:38:42 · 1365 阅读 · 0 评论 -
Linux Driver中阻塞与非阻塞
阻塞:在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再执行操作。被挂起的进程进入休眠状态,被从调度器的运行队列移走直到等待条件被满足。非阻塞:进程在不能进行设备操作时并不挂起,它或者放弃或者不停的查询,直到可以进行操作为止。默认open函数以阻塞方式打开设备。使用非阻塞方式打开如下:fd = open("device", O_RDWR|原创 2013-11-01 10:22:56 · 652 阅读 · 0 评论 -
Linux Driver信号量semaphore
信号量:include/linux/semaphore.h信号量结构体:/* Please don't access any members of this structure directly */struct semaphore { raw_spinlock_t lock; unsigned int count; struc原创 2013-11-01 10:11:01 · 742 阅读 · 0 评论 -
Linux Driver原子操作
原子操作函数举例:arch/arm/include/asm/atomic.hatomic_t v=ATOMIC_INIT(0); //定义原子变量v并初始化为0atomic_read(atomic_t *v); //返回原子变量的值void atomic_inc(atomic_t *v); //原子变量+1void ato原创 2013-11-01 10:00:23 · 733 阅读 · 0 评论 -
简单分析Linux-3.2.0中断系统
ARM 异常向量表:Kernel startup code for all 32-bit CPUs:arch/arm/kernel/head.s汇编入口:ENTRY(stext)进入SVC模式,即在XP刚开始启动时的保护模式bl __lookup_processor_type 检测processor type在内核里是否支持。原创 2013-10-31 19:04:10 · 811 阅读 · 0 评论 -
Linux Driver 简单 按键驱动 - 1
#include #include #include #include //新版注册字符驱动API 主要是设置cdev相关的file_operations#include //存储管理相关API#include //file_operations结构#include // 驱动模型相关device API和结构体#in原创 2013-10-31 16:38:12 · 772 阅读 · 0 评论 -
Linux Driver 入门-2
second_cdrv.c :#include #include #include #include #include #include #include #include #include MODULE_LICENSE("GPL");static dev_t dev_id;static struct cdev *my_cdev;st原创 2013-10-25 16:17:33 · 613 阅读 · 0 评论 -
ARM Linux设备树
ARM设备树起源 在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,很多代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data。 设备树是一种描述硬件的原创 2016-04-03 11:04:36 · 1228 阅读 · 0 评论