linux驱动学习
文章平均质量分 84
zhubin0613
这个作者很懒,什么都没留下…
展开
-
字符设备驱动详解
[html] view plaincopylinux字符设备驱动结构 linux内核中使用cdev结构体来描述字符设备,cdev结构体的定义如下:[html] view plaincopystruct cdev { struct kobject kobj; //内嵌的kob转载 2014-07-19 11:03:05 · 529 阅读 · 0 评论 -
Linux的原子操作与同步机制
并发问题现代操作系统支持多任务的并发,并发在提高计算资源利用率的同时也带来了资源竞争的问题。例如C语言语句“count++;”在未经编译器优化时生成的汇编代码为。当操作系统内存在多个进程同时执行这段代码时,就可能带来并发问题。假设count变量初始值为0。进程1执行完“mov eax, [count]”后,寄存器eax内保存了count的值0。此时,进程转载 2015-11-07 17:41:29 · 406 阅读 · 0 评论 -
spin_lock & mutex_lock的区别? .
本文由该问题引入到内核锁的讨论,归纳如下为什么需要内核锁?多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是可以访问所有内核数据的,因此要对共享数据进行保护,即互斥处理有哪些内核锁机制?(1)原子操作atomic_t数据类型,atomic_inc(atomic_t *v)将v加1原子操作比普通操作效率要低,因此转载 2015-11-07 17:48:57 · 587 阅读 · 0 评论 -
ARM裸机程序研究 - 编译和链接
1. Linux下的二进制可执行文件。 如果世界很简单,那么二进制可执行文件也应该很简单,只包括CPU要执行的指令就可以了。可惜,世界并不简单……。Linux下的二进制可执行文件(以下简称可执行文件),也并不是只包括了指令,还包括了很多其他的信息,比如,执行需要的数据,重定位信息,调试信息,动态链接信息,等等。 所有这些信息都按照一个预定的格式组织在一个可执行文件里面。Linux下叫转载 2015-07-23 21:31:32 · 594 阅读 · 0 评论 -
Linux Input子系统之第一篇(input_dev/input_handle/input_handler)
Input子系统是linux kernel中与部分外围器件驱动联系比较紧密的模块,常用于Sensor,TP(touch panel),power key等器件的驱动。这类模块有个共同特点:字符设备,且数据量都不大,比如sensor一般最多只有xyz三个维度的数据。 整体来看,Input子系统有一个主线,那就是题目中这三个结构体的关系(下面简称为三方关系),input_dev对应于实际原创 2015-07-03 09:09:58 · 590 阅读 · 0 评论 -
static char __setup_str_##unique_id[] __initdata __aligned(1) = str
__setup这条宏在Linux Kernel中使用最多的地方就是定义处理Kernel的启动参数的函数及数据结构,宏定义如下:#define __setup(str, fn) \__setup_param(str, fn, fn, 0)#define __setup_param(str, unique_id, fn, early) \static char __setu转载 2015-05-31 10:01:57 · 527 阅读 · 0 评论 -
linux2.6内核,如何指定内核启动参数
前两天调试加载文件系统时,由于cfe中参数写不进去,直接在内核中写死参数,碰到一个问题:static int __init init_setup(char *str){unsigned int i;execute_command = str;/** In case LILO is going to boot us with default command l转载 2015-05-31 10:06:46 · 394 阅读 · 0 评论 -
高精度定时器hrtimer使用示例
平台:MTK_android_KK_1483M_W503_mt6582touch_panel_gt9158_hotknot驱动里面添加部分如下:#include #define GT9158_kthread_hrtimer_zhubing 1#if GT9158_kthread_hrtimer_zhubingstatic struct hrtimer GT915原创 2015-04-01 16:45:18 · 1544 阅读 · 0 评论 -
字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
1. 字符设备结构体 内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里。该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下: static struct char_device_struct { struct char_device_struct *next; // 指向散列冲突链表中的下一转载 2015-03-30 19:05:22 · 804 阅读 · 0 评论 -
什么是sys文件系统
1. 什么是sysfssysfs是Linux 内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与 proc 有些类似,但除了与 proc 相同的具有查看和设定内核参数功能之外,还有为 Linux 统一设备模型作为管理之用。相比于 proc 文件系统,使用 sysfs 导出内核数据的方式更为统一,并且组织的方式更好,它的设计从 proc 中吸取了很多教训。2. sysfs 与 /sys转载 2015-03-30 20:07:53 · 1797 阅读 · 0 评论 -
Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现
2012-10-19 23:05 20192人阅读 评论(21) 收藏 举报目录(?)[+]上一篇文章,我介绍了传统的低分辨率定时器的实现原理。而随着内核的不断演进,大牛们已经对这种低分辨率定时器的精度不再满足,而且,硬件也在不断地发展,系统中的定时器硬件的精度也越来越高,这也给高分辨率定时器的出现创造了条件。内核从2.6.16开始加入了高精度定时器架构。在实现转载 2015-02-11 11:48:19 · 497 阅读 · 0 评论 -
linux驱动头文件说明
在不同版本的内核源码上,头文件所在的位置是不同的,比如说在#include#include同样是regs-gpio.h,是在比较低的版本(比如2.6.25)上位于arch/arm/include/asm中,而mach/regs-gpio.h则是位于arch/arm/mach-s3c2410/include/mach中,2.6.30版本的内核是这种结构,所以,要根据所采用的不转载 2014-11-14 12:17:50 · 372 阅读 · 0 评论 -
linux 内核定时器 timer_list详解 http://www.linux-cn.com/html/linux/kernel/20070412/1886.shtml http://lin
linux 内核定时器 timer_list详解http://www.linux-cn.com/html/linux/kernel/20070412/1886.shtml http://linux.ccidnet.com/art/741/20061116/952655_1.htmlLinux内核2.4版中去掉了老版本内核中的静态定时器机制,而只留下动态定时器。相应地在timer_bh()函数中也不转载 2014-11-13 16:44:09 · 714 阅读 · 0 评论 -
工作队列(workqueue) create_workqueue/schedule_work/queue_work
项目需要,在驱动模块里用内核计时器timer_list实现了一个状态机。郁闷的是,运行时总报错“Scheduling while atomic”,网上搜了一下:"Scheduling while atomic" indicates that you've tried to sleep somewhere that you shouldn't - like within a spinlo原创 2015-11-07 18:04:31 · 1426 阅读 · 0 评论