Linux驱动
文章平均质量分 56
eleven_yy
这个作者很懒,什么都没留下…
展开
-
驱动程序添加到内核
一 . 概述:在 linux 内核中增加程序需要完成以下三项工作: 1. 将编写的源代码复制到 Linux 内核源代码的相应目录 2. 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项 3. 在目录的 Makefile 文件中增加对新源代码的编译转载 2011-09-16 11:05:17 · 1042 阅读 · 0 评论 -
主设备号和file_operations结构关系; ioctl和unlocked_ioctl, ioctl简单测试例子
open一个字符设备的过程是从VFS层open系统调用 ===> def_chr_fops-->open ===> cdev->fops->open===> device specific operation 如果是同一类设备,比如系统中有多个framebuffer,那么就把共有的操作放在cdev->fops->open ,这时向系统注册的仅仅是这一个驱动程序;将这类主设备原创 2012-07-18 14:43:14 · 2955 阅读 · 0 评论 -
如何将图片转换成*.img
手机开机界面是在bootloader阶段完成的,这时需要将开机log图片转换成.img,存在flash的某个分区中。系统启动时会从该分区读取。转换步骤:1.图片必须是png的,如果不是用ps另存为png格式。 2.在linux下,任意路径。 convert ***.png -depth 8 rgb:***.raw 3. out/host/linux-x86/bin/原创 2012-07-18 15:45:50 · 9856 阅读 · 0 评论 -
Android display架构分析
Android display架构分析(一)http://hi.baidu.com/leowenj/blog/item/429c2dd6ac1480c851da4b95.html高通7系列硬件架构分析如上图,高通7系列 Display的硬件部分主要由下面几个部分组成:A、MDP高通MSM7200A内部模块,主要负责显示数据的转换和部分图像处理功能理,如YUV转RGB,放大缩转载 2012-08-08 15:43:45 · 1289 阅读 · 0 评论 -
Linux内核驱动程序初始化顺序的调整
这几天再调试两家TP,因为项目需要两家TP兼容,所以考虑到了两个TP驱动初始化的先后顺序的问题。TP的驱动在I2C初始化之前就运行起来了,而这时I2C提供的API还处于不可用状态。在网上查了一些资料总结一下。所有的__init函数在区段.initcall.init中保存了一份函数指针,在初始化时内核会通过这些函数指针调用这些__init函数指针,并在整个初始化完成后,释放整个init区段(原创 2012-08-01 10:21:13 · 2037 阅读 · 0 评论 -
Android4.0 TP多点变单点,单点变多点问题
由于某些IC的特性,当为多点时,默认靠近Y轴的点ID为ID0,这样就会造成当多点变单点时,单点失效,单点变多点时,会变成单点的划线动作。解决这个BUG的方法:当按在触摸屏上的point数与上次的point数不同,就不上报此次坐标。这样就可以解决问题。 //fix one touch two touch issueif ( preFingerNum!=touchData.nFinger原创 2012-08-01 09:52:45 · 1204 阅读 · 0 评论 -
关机充电降低功耗方法
在新项目中,关机充电时,由于AP没有休眠,功耗过大,导致关机充电时间过长。于是想到一下解决办法。具体措施如下:(1) 背光关闭后,进入EARLY_SUSPEND,并且停止刷屏。(2) 使CPU的频率进入动态管理模式,这样的话,在关闭背光后CPU的主频会降到最小频率122M。经过上述措施,关机充电的耗流能降低到。----------------------------原创 2012-08-01 11:19:55 · 1466 阅读 · 0 评论 -
Android4.0 TouchScreen
1. TouchScreen功能在Android4.0下不工作 原来在Android2.3.5下能正常工作的TouchScreen功能,移植到Android 4.0就不能正常工作了。凭直觉,Android4.0肯定有鬼。真是不看不知道,一看吓一跳。在Android 4.0中,Event Input地位提高了,你看看,在Adroid2.3.5中,它在frameworks/base/l转载 2012-08-31 16:39:33 · 3208 阅读 · 0 评论 -
Linux设备驱动之I2C架构分析
一:前言I2c是philips提出的外设总线.I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL.正因为这样,它方便了工程人员的布线.另外,I2C是一种多主机控制总线.它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以.而 I2C 是基于multi master机制.一同总线上可允许多个master.关于I2C协议的知识,这里不再赘述.可转载 2012-08-28 16:03:42 · 916 阅读 · 0 评论 -
软中断,tasklet和工作队列的区别与联系
软中断,tasklet和工作队列的区别与联系 为了让中断处理运行的快,同时要完成相应的全部工作。根据具体的内容将中断分为两个部分:上半部分(中断处理程序)和下半部分(推后处理程序)。上半部分需要立即执行,并且有严格的时间限制,这些工作是在所有中断被禁止的情况下完成的,剩余部分工作推迟到下半部分。下半部分的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作。在Linu原创 2012-10-09 09:43:21 · 4011 阅读 · 0 评论 -
spin_lock详解
与UP和SMP无关的定义:typedef struct { volatile unsigned int lock; } spinlock_t; #define SPIN_LOCK_UNLOCKED (spinlock_t){ 0 }#define local_irq_save(x) __asm__ __volatile__(\"pushfl ; popl %0 ; c转载 2012-09-25 16:35:15 · 5860 阅读 · 0 评论 -
信号量和自旋锁的差别 .
1)内核同步措施 为了避免并发,防止竞争。内核提供了一组同步方法来提供对共享数据的保护。我们的重点不是介绍这些方法的详细用法,而是强调为什么使用这些方法和它们之间的差别。 Linux 使用的同步机制可以说从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux从单处理器到对称多处理器的过度;伴随着从非转载 2012-09-26 10:05:28 · 1355 阅读 · 0 评论 -
如何编写linux下nand flash驱动
【简介】如何编写linux下nand flash驱动Version: V0.1Time:10/06/2008Author:green-waste@163.com【编写驱动之前要了解的知识】1.硬件方面:【Flash的种类】Flash主要分nand flash和nor flash除了网上最流行的这个解释之外:NAND和NOR的比较我再多说几句,nor的转载 2012-09-26 09:24:32 · 1237 阅读 · 0 评论 -
Android 中电源状态切换
1, Android中支持的电源状态: PM_SUSPEND_ON -- 设备处于全电源状态,也就是正常工作状态; PM_SUSPEND_MEM -- suspend to memory,设备进入睡眠状态,但所有的数据还保存在内存中,只有某些外部中断才可以唤醒设备。 PM_SUSPEND_STANDBY ----- 在大部分的Android设备转载 2012-08-02 14:45:32 · 8568 阅读 · 2 评论 -
Android 进入休眠分析
在 Android 的上层是使用 goToSleep() 这个函数让系统进入休眠的。但是这个命令为什么会让 Android 进入 Suspend Mode。 以前在做其他系统的时候, 一般都要自己手工去控制 apm_bios 这个设备的,比如使用 ioctl() 调用 apm_bios。所有的系统其原理都是差不多的。只是 Android 加入了一个封装, 使程序员可以更简单的操作, 可以不原创 2012-08-02 14:43:19 · 3569 阅读 · 0 评论 -
Platform_device 和 Platform_driver
来自: http://www.diybl.com/course/6_system/linux/Linuxjs/200871/129585.html 从 Linux 2.6 起引入了一套新的驱动管理和注册机制 :Platform_device 和 Platform_dr转载 2011-10-10 17:30:52 · 500 阅读 · 0 评论 -
container_of 理解
问题:如何通过结构中的某个变量获取结构本身的指针???关于container_of见kernel.h中:/*** container_of - cast a member of a structure out to the containing structure* @ptr: the pointer to the member.* @type: the t转载 2011-12-02 09:08:22 · 388 阅读 · 0 评论 -
Linux USB驱动框架分析
Linux USB驱动框架分析(一) 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了。好,言归正传,我说一说这段时间的收获,跟大家分享一下Linux的驱动开发。但这次只先针对Linux的USB子系统作分析,因为周五研讨老板催货。当然,还会顺带提一下其他的驱动程序写法。 事实上,Linux的转载 2012-03-23 18:08:46 · 450 阅读 · 0 评论 -
command mode 和 video mode
Command mode: 以命令(command)和数据(data)的形式传递给外设(通常是显示模块,或者显示控制器display controller, 这里,显示控制器可能包括本地寄存器(local register)和frame buffer)。 系统可以通过command mode向本地寄存器和frame buffer memory写或读。这样,处理器就可以通过向显示控制器下达命令,转载 2012-03-14 10:32:55 · 1648 阅读 · 0 评论 -
多点触摸与单点触摸接口主要区别
上发单点触摸事件input_report_key(input,ABS_MT_TRACKING_ID,0);input_report_key(input, BTN_TOUCH, 1);input_report_abs(input, ABS_MT_POSITION_X, ts->tc.x1);input_report_abs(input, ABS_MT_POSITION_Y, ts->原创 2012-07-06 18:01:46 · 11439 阅读 · 1 评论 -
Linux与Android 多点触摸协议
单点触摸信息是以ABS承载并按一定顺序发送,多点触摸信息则是以ABS_MT承载并按一定顺序发送,然后通过调用input_mt_sync()产生一个 SYN_MT_REPORT event来标记一个点的结束,告诉接收方接收当前手指的信息并准备接收其它手指的触控信息。为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指触摸数据。这个文档所描述的多点触控协议可以让内核驱动程序向原创 2012-07-06 11:17:47 · 854 阅读 · 0 评论 -
Android 4.0.3 Home键失效 有点意思~~
刚在调试TP驱动时发现,MENU,BACK可以用,就是HOME有问题。Kernel送上去是102,但上层打印的却是122. 后来我在/system/usr/keylayout中没找到加载的7x27a_kp_tp.kl,只有7x27a_kp_cx.kl。后来我把7x27a_kp_tp.kl直接 push到/system/usr/keylayout目录下,再重启一下Home键就可以用了原创 2012-07-12 15:35:05 · 8739 阅读 · 8 评论 -
TP多点触摸协议
http://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt转载 2012-07-12 15:39:48 · 1730 阅读 · 0 评论 -
android 按键映射***.kl文件中的WAKE和WAKE_DROPPED的定义
android系统中,获取到键盘的键值后,会搜索/system/usr/keylayout/*.kl这个文件key 115 VOLUME_UP WAKE_DROPPEDkey 114 VOLUME_DOWN WAKE_DROPPEDkey 102 HOME WAKE如果驱动code与其中的键值相对应,andr原创 2012-07-12 15:45:36 · 12898 阅读 · 1 评论 -
LCM调试总结
1.PWM的频率 对于LCD的背光来说,一般做法是通过升压芯片来提供对电压的支持。而这些升压芯片都会有PWM输入PIN,通过PWM来调节背光的明暗度。 不过有时候我们会发现背光调节幅度陡然增大缩小,或是背光不足够亮(相对于作为GPIO PIN输出HIGH来说),但是通过万用表测量PWM输入,电压降的幅度都是处于正常情况下,这时候我们不妨调低PWM的输出频率。因为有很多升压芯片对PWM原创 2012-07-02 17:43:36 · 6252 阅读 · 0 评论 -
__main() 和 main()
__main() 和 main()(转载)因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置,可能会与我们的初始化发生冲突,故在我们做好初始化后最好别调用__main()。仿真时若调了__main()且没设置entry会报警告,__main()库函数转载 2012-07-16 16:09:25 · 14870 阅读 · 0 评论 -
linux多线程驱动中调用udelay()对系统的影响
以前没考虑过这个问题,而且之前可能运气比较好,虽然用了udelay但也没出什么奇怪的问题,今天在 CSDN上看到了liukun321咕唧咕唧的帖子,觉得很受用,再此做简要的记录和分析: 驱动建立线程的是内核线程 跟普通进程一样都是可以调度的,然而udelay是靠死循环来实现的延迟,当你的内核线程没有占用cpu时,很可能超过1ms都不会执行你的程序,100us是小于进程可能的最小时原创 2012-07-16 17:20:11 · 3122 阅读 · 0 评论 -
Linux2.6中断下半部分的三种实现机制---工作队列 .
Linux 2.6内核使用了工作队列来处理任务,他在使用上和 tasklet最大的不同是工作队列的函数可以使用休眠,而tasklet的函数是不允许使用休眠的。工作队列的使用又分两种情况,一种是利用系统共享的工作队列来增加自己的工作,这种情况处理函数不能消耗过多时间,这样会影响共享队列中其他任务的处理;别的一种是创建自己的工作队列并添加工作。(一)利用系统共享的工作队列添加工作:原创 2012-09-25 15:55:25 · 737 阅读 · 0 评论