![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
driver
zhangqingsup
这个作者很懒,什么都没留下…
展开
-
关于 ## 和#
讲的比较好的:#前后不用空格关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏:#define WARN_IF(EXP)转载 2010-06-06 17:29:00 · 220 阅读 · 0 评论 -
6410 中dvfs的实现
#include #include #include #include #include #include #include #include #include #include #define CPU_FREQ_EARLY_FLAG 0x100#if defined(CONFIG_MACH_SMDK6410)extern int set_pmic(unsigned int pwr, unsigned int voltage);#endifunsigned int S3C64XX_MAXFREQLEVE原创 2010-12-03 17:57:00 · 892 阅读 · 0 评论 -
Linux 2.6 内核中的最新电源管理技术综述
Linux 2.6 内核中的最新电源管理技术综述 2008年8月6日 IBM-王勇 前言 本系列文章将结合近年来不断在各种硬件(包括 CPU、芯片组、PCI Express 等各种最新总线标准以及外设)上新增的节能技术。 从 Linux® 2.6内核及整个 software stack (包括 kernel、middleware 以及各种用户态 utility)如何添加对这些创新的节能技术的支持这一角度,为读者介绍 Linux 操作系统近几年来在电源管理方面所取得的原创 2010-12-01 11:22:00 · 460 阅读 · 0 评论 -
Linux中的通知链技术
在Linux内核中,各个子系统之间有很强的相互关系,某些子系统可能对其它子系统产生的事件感兴趣。为了让某个子系统在发生某个事件时通知感兴趣的子系统,Linux内核引入了通知链技术。通知链只能够在内核的子系统之间使用,而不能够在内核和用户空间进行事件的通知。 1 数据结构: 通知链有四种类型: ·原子通知链( Atomic notifier chains ):通知链元素的回调函数(当事件发生时要执行的函数)只能在中断上下文中运行,不允许阻塞。对应的链表头结构:原创 2010-12-01 17:43:00 · 379 阅读 · 0 评论 -
arm7 的 cpufreq 的实现
在基于SEP4020(ARM720T内核)上实现Linux的cpufreq(动态变频)技术 针对sep4020的linux低功耗研究也有一段时间了,基本把低功耗的实现方式想清楚了(主要分成机制和策略),这段时间的工作主要在机制上。暂时想实现的主要的机制有:cpu级,设备驱动级,系统平台级。管理颗粒度不断递增,形成三驾马车齐驱的形势。 cpu级:主要实现比较容易的在系统处于目标在于频繁发生、更高粒度的电源状态改变,主要的实现方式为idle,包括今天的主要想讲的动态主频。原创 2010-12-01 16:51:00 · 510 阅读 · 0 评论 -
fb sample code
#include #include #include #include #include int main () { int fp=0; struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo; fp = open ("/dev/fb0",O_RDWR); if (fp #include #include #include #include int main () { int fp=0; struc原创 2010-11-30 11:39:00 · 374 阅读 · 0 评论 -
let's talk about touchscreen
1。电阻屏,比如说X+ X- Y+ Y-,有两个电平是不会变化的,另外两个比如X-, Y-是以一定比例的电平变化的。我的理解是这样的,比如说X+, Y+表示Vref,那么X+, Y+作为标准电压输入,通过ADC测量X-, Y-的电压,从而得出受力点所在的位置。2.原创 2010-09-05 00:09:00 · 186 阅读 · 0 评论 -
1.17
Today:尝试添加user data分区,添加后不能启动开始不能启动,分区表改回原来的后就可以了【TBD】选择devices driver中的switch class support选项后在vold启动时不再报错,但是covia的文件系统sd卡还是mount不上,后来换成2.0的vold和Oppo我自己编的vold,都不可以。暂时解决方案硬性mountbash-3.2# mount -t vfat /dev/mmcblk0p1 /sdcard在拔插后节点会消失掉然后在init.rc中mount vfa原创 2010-09-15 23:13:00 · 332 阅读 · 0 评论 -
1.17
Today:尝试添加user data分区,添加后不能启动开始不能启动,分区表改回原来的后就可以了【TBD】选择devices driver中的switch class support选项后在vold启动时不再报错,但是covia的文件系统sd卡还是mount不上,后来换成2.0的vold和Oppo我自己编的vold,都不可以。暂时解决方案硬性mountbash-3.2# mount -t vfat /dev/mmcblk0p1 /sdcard在拔插后节点会消失掉然后在init.rc中mount vfa原创 2010-09-15 23:14:00 · 257 阅读 · 0 评论 -
1.24
idea 2.6.29中的不行 很容易死误删2.6.29中dm9000.cregs-serial.csamsung.c串口最还是基于24的基础改上来补充24中的set_qos函数#define S3C_VA_SYSCON S3C_ADDR(0x02800000) /* System Controller */在plat/map.h,后移动到mach/map.hVA一般都用S3C_ADDRPA则直接写地址改了map.h后直接卡在了uncompressing linux原创 2010-09-15 23:13:00 · 164 阅读 · 0 评论 -
1.24
idea 2.6.29中的不行 很容易死误删2.6.29中dm9000.cregs-serial.csamsung.c串口最还是基于24的基础改上来补充24中的set_qos函数#define S3C_VA_SYSCON S3C_ADDR(0x02800000) /* System Controller */在plat/map.h,后移动到mach/map.hVA一般都用S3C_ADDRPA则直接写地址改了map.h后直接卡在了uncompressing linux原创 2010-09-13 23:47:00 · 170 阅读 · 0 评论 -
nor flash寿命及失效模式测试
动手写flash文件系统前,花几天实测了一下flash寿命和失效模式。从以往使用经验中,对flash的失效模式是有一个基本的感性认识的,但毕竟没有实测过,都是凭经验和手册使用。djyos的flash文件系统会利用这些测试结果,用以优化文件系统性能;但不会依赖这些测试结果,一是这些测试结果并没有得到器件datasheet的明文确认,二是如果将来flash技术如果改变,使flash特性与测试结果不再相符,不会导致致命错误,三是测试不能覆盖所有厂家和型号。 测试的flash型号是sst39vf160原创 2010-12-06 17:13:00 · 1139 阅读 · 0 评论 -
MABA AXI APB of arm
看了这些方面的一些协议,包括信号,时序,读写。了解了关于burst的几种类型(increment, wrap)等等。还有AXI和APB的区别,AXI是全双工的,另外AXI支持increment下的unaligned传输。有用么?原创 2010-12-09 15:52:00 · 386 阅读 · 0 评论 -
坏块
spare area的第六个byte作为坏块标记。。。老是忘记原创 2010-12-09 15:47:00 · 207 阅读 · 0 评论 -
Beacon Interval、DTIM、Fragment Length、RTS Length
一 .Beacon Interval (信標間隔) 一般無線網卡都是做所謂的被動式掃描(passive scanning) 當你開啟os下的無線網路管理程式 或是xp內建管理程式 無線網路卡其實都在從ISM 頻道一直輪番掃描 等待掃到 無線基地台的beacon 訊原创 2011-09-09 14:13:31 · 4577 阅读 · 1 评论 -
lcd的一些机制
欢迎转载,转载请注明出处(http://hi.baidu.com/bigrainbow) S3C44B0X内置LCD控制器灰度显示和256色彩色显示机理分析 【内容提要】关于S3C44B0X(ARM7TDMI)内置LCD控制器的编程在网上已经有很多文章讲述过了,尤其是杭州立宇泰公司的网站上对 44B0X内置LCD控制器有两篇文章讲述的非常详细。但是很少有文章描述灰度显示和256色彩色显示的细节的,这虽然不影响LCD控制器的一般使用,但是了解这种显示机理对于理解UCGUI中对颜色的处理还是很有帮助的。本文主要原创 2010-04-27 04:11:00 · 491 阅读 · 0 评论 -
古老的task机制
唯一的疑问是TASK_RUNNING后能schedule么 经常看到一些代码,比如 set_current_state(TASK_UNINTERRUPTABLE) 等等 实际上关键有这么几点 1. schedule的时候cpu会判断进程的状态,如果进程是主动放弃cpu,且状态不为TASK_RUNNING,就会被永远踢出运行队列 2.在进程从schedule中被wake_up,状态肯定被设置成TASK_RUNNING. 3. 如果是TASK_UNINTERRUPTABLT,那么只能被wakeup唤醒,如果是I原创 2010-04-27 11:56:00 · 648 阅读 · 0 评论 -
cancel _delayed_work 和 flush_delayed_work
ps aux 时看到的event线程(如果有多个cpu可能就有多event0~x)就是内核的大work_list, 通常是用schedule_work()之类的函数就是把job hang到这个list上面去。 而cancel_delayed_work实际是用来取消挂到执行队列上的job, 一般在调用这个函数后都会继续调用flush_delayed_work这个是用来等到正在执行的队列执行完。实际上后者是为了解决cancel时的死锁问题。原创 2010-04-20 03:38:00 · 2270 阅读 · 0 评论 -
try_to_freeze()
内核认为,每个进程都应该在适当的时候调用try_to_freeze() 除非设置了PF_NOFREEZE原创 2010-04-20 02:55:00 · 969 阅读 · 0 评论 -
关于IS_ERR()检测返回的指针是否造成缺页异常
当内核指针因为缺页或者等其他原因不能正常返回的时候,内核返回什么?ret?不太可能,因为本身定义的就是返回一个指针。内核的设计者将内核地址空间的最后一个页(具体地址空间要看地址是多少位的)作为出错地址,因为内核的errno最大有4095个,而一页一般是4096,所以可以在最后一页和出错代码之间建立关系。(unsigned long)-MAX_ERRNO。 比如kthread_run就是这样的机制。 返回的指针先用IS_ERR()来判断是否是错误指针,如果是的话就用PTR_ERROR来转化为错误代码。原创 2010-04-20 02:48:00 · 289 阅读 · 0 评论 -
attribute 合集
用来统计常用的attribute __attirbute__((packet)) __attribute__((bitwise))用来支持sparse工具,用来探测内核漏洞原创 2009-04-12 03:21:00 · 179 阅读 · 0 评论 -
might_sleep
如果害怕驱动在原子上下文中睡眠可以调用此函数,如果确实在中断上下文,会打印出log,如果没有定义debug项,则不会打印Log,而是直接重新schedule. 判断是否在原子上下文是这样的, !in_atomic() && !irqs_disable()原创 2009-04-12 02:39:00 · 387 阅读 · 0 评论 -
对中断的思考
在保护模式下,中断是通过IDT来创造中断上下文的执行空间。至于说中断上下文不能访问用户空间地址,并不是因为权限不够(考虑到IDT中中断描述符项中的segment selector的RPL),而是因为中断上下文并不是一个完整的进程空间,所以就虚拟地址空间而言,中断上下文不具备完整的虚拟地址空间的页表项,所以理所当然地,不具有用户空间的虚拟地址页表目录。 但是从理论上讲,让中断上下文环境中做到访问用户空间是完全可行的。在中断发生时,将被中断进程的CR3加入到为中断上下文创立的堆栈中,这样中断上原创 2011-03-07 08:17:00 · 334 阅读 · 0 评论 -
忆声卡
<br />声卡驱动是好久之前看的,因为最近需要跟进wm9714连接pcm voice card的问题,所以又回头审视了下。做个小节如下。<br /> <br />声卡的驱动主要干两件事:和上级搞好关系与和底层搞好关系。<br /> <br />但是声卡的上下层有些特殊,声卡的上层,阶级制度森严,是大名顶顶的alsa。alsa那写的可不是一般的好啊,好的代码都有个特点,看不太懂,一般的接口规范就是几个ioctl调用下来,alsa确实ioctl套ioctl,我映像最深的就是一堆ITEM。所以呢,sound目录原创 2010-11-05 22:33:00 · 339 阅读 · 0 评论 -
1.20
Today:1.解决uboot问题2.编译urbetter的1.5的文件系统,不能在hhtech上跑,原有的1.5也不能跑,各种错误,比如hhtech的板子上有的时候可以出hw/copy库找不到的错,有时候出ref table full的错在idea板子上也出错,出错为W/dalvikvm( 1806): threadid=17: thread exiting with uncaught exception (group=0x4000fe68)E/JNIHelp ( 907): Native regist原创 2010-09-13 23:43:00 · 193 阅读 · 0 评论 -
1230
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNormalTable {mso-style-nam原创 2010-09-13 23:28:00 · 168 阅读 · 0 评论 -
1.28
Today:1.开始使用自己编译的samsung文件系统,没有问题【OK】2.无法解决声卡问题好像是I2C错误就算改写userdata目录任然不行为什么同一个GPIO写值不同?学习I2S基本上这里就可以看出整个音频驱动的架构特点,就是从alsa层进入-->内核alsa层接口->core层,这里再调用上面说的三个方面的函数来处理,先是cpu级别的,再是platform的,再是codec级别的,这几层做完了,工作也就做得差不多了,后面会详细讲讲,当然这个执行顺序不是固定的(不知道是不是marvel写代码不专业导原创 2010-09-13 23:54:00 · 184 阅读 · 0 评论 -
OTG
XUSBDRVVBUS OF S3C6410,这个是符合UTIM协议的 1 USB OTG的工作原理 OTGl.Oa补充规范对USB2.O进行的最重要扩展是其更具节能性、电源管理,并允许设备以主机和外设2种形式工作。OTG有两种设备类型:两用OTG设备(dual—role 0TG device)和外设式OTG设备(peripher一al_only 0TG device)。两用0TG原创 2010-05-12 22:35:00 · 1136 阅读 · 0 评论 -
2.6.30支持多点触摸
<br /><br />#define ABS_MT_TOUCH_MAJOR0x30/* Major axis of touching ellipse */<br />#define ABS_MT_TOUCH_MINOR0x31/* Minor axis (omit if circular) */<br />#define ABS_MT_WIDTH_MAJOR0x32/* Major axis of approaching ellipse */<br />#define ABS_MT_WIDTH_MINOR原创 2010-06-30 17:02:00 · 447 阅读 · 0 评论 -
SD卡驱动
mmc1: new SDIO card at address 0001 power init sdhci_setup.h host card type会不会为null,就是终端在host没有被完善时被触发。原创 2010-05-04 15:08:00 · 174 阅读 · 0 评论 -
wifi usi sd8686重启后无法工作
sd8686需要reset,200ms。后来wifi重启后都仍然存在了原创 2010-04-13 16:19:00 · 377 阅读 · 0 评论 -
电池电量android
Eclair中电池电量的读取首先需要Kernel的支持,kernel将所得到的电池信息放到/sys/class/power_supply/Battery 中,由Eclair中frameworks/base/services/jni文件夹下的com_android_server_BatteryService.cpp进行读取。 总路径的定义:#define POWER_SUPPLY_PAT原创 2010-04-11 00:06:00 · 1937 阅读 · 3 评论 -
usb host
usb 枚举过程:(1)集线器检测新设备主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察。(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻。当用USB线将PC和设备接通后,设备的上拉电阻使信号线的电位升高,因此被主机集线器检测到。)(2)主机知道了新设备连接后每个集线器用中断传输来报告在集线器上的事件。当主机知道了这个事件,它给原创 2010-03-24 22:50:00 · 713 阅读 · 0 评论 -
PM of 6410
Prepare:6410真正做DVFS和SLEEP是需要硬件支持的:在sleep模式下VCCARM,VCCINT,VCCPLL是shutdown的。 SLEEP mode disconnects the internal power. Therefore, the power consumption due to CPU and the internal logic except the原创 2010-03-24 22:27:00 · 307 阅读 · 0 评论 -
2.6.28上的sd/mmc/sdio驱动
def_data用setup来设置,首先对def_data有个赋值,然后通过对其的引用来进行setup,最后达到填充了全部的结构体。 mod_timer(&host->timer, jiffies + 10 * HZ); //try thisline 868 in sdhci.c结果发现不是这个原因 后来又发现,昨天晚上用华恒的原创 2010-03-20 14:34:00 · 2316 阅读 · 3 评论 -
声卡驱动 FOR wm9714 debug
注册机制 driver注册/* ASoC platform driver */static struct platform_driver soc_driver = { .driver = { .name = "soc-audio", .owner = THIS_MODULE, }, .probe = soc_probe, .remove = soc_remove, .su原创 2010-03-07 11:35:00 · 1192 阅读 · 0 评论 -
电源部分驱动(DS2786 + MAX8677C)
尚未完成 DS2786中INITIAL_CAPACITY_SCALING_FACTOR的设置:初试化值是0x80IACR是Internal Accumulated Current Reg,就是充电的所有charge之和。单位是mVh。charge是从那个sensor resisitor上面测得的。而ICSF的单位是百分比/Vh。所以IACR*ICSF后就是百分比。原创 2010-02-26 21:44:00 · 808 阅读 · 0 评论 -
fsync
6.4. 异步通知尽管阻塞和非阻塞操作和 select 方法的结合对于查询设备在大部分时间是足够的, 一些情况还不能被我们迄今所见到的技术来有效地解决.让我们想象一个进程, 在低优先级上执行一个长计算循环, 但是需要尽可能快的处理输入数据. 如果这个进程在响应新的来自某些数据获取外设的报告, 它应当立刻知道当新数据可用时. 这个应用程序可能被编写来调用 poll 有规律地检查数据, 但是, 对许多情况, 有更好的方法. 通过使能异步通知, 这个应用程序可能接受一个信号无论何时数据可用并且不需要让自己去查询.转载 2010-07-06 10:23:00 · 696 阅读 · 0 评论 -
module_param(name, type, perm)的理解
module_param(name, type, perm)是一个宏,向当前模块传入参数,对源码分析如下在include/linux/moduleparam.h中#define module_param(name, type, perm) / module_param_named(name, name, type, perm)其实重点是这里的两个name,第一个转载 2010-05-26 21:56:00 · 348 阅读 · 0 评论 -
firmware加载原理
Firmware 加载原理分析 前言 前段时间移植 wifi 驱动到 android 的内核上,发现 firmware 的加载始终出错,问了几个人,都不是很了解,没办法,只好自己研究一下。原理分析 从本质上来说, firmware 需要做的事情包括两件:1, 通知用户态程序,我需要下载 firmware 了;2, 用户态程序转载 2010-05-28 22:31:00 · 510 阅读 · 0 评论