驱动总结
eqwewr
这个作者很懒,什么都没留下…
展开
-
linux select与poll实现机制与实例分析
我们直到上层对文件操作结合select与poll可以实现阻塞操作,那么究竟是如何实现的呢?select接口: int select(int nfds, fd_set *readset, fd_set *writeset, fd_set *exceptset, struct timeval *timeout); 其中: nf原创 2015-01-20 18:09:13 · 2764 阅读 · 0 评论 -
android restart reason机制
Reboot传递参数,使得开机进入参数固定的模式(通常有我们熟悉的bootloader和recovery等),本质是在kernel shutdown时会调用到restart,将模式数值写到share memory中,那么在开机bootloader阶段,再去读取这块内存,boot进入指定的模式,要是匹配不起来就正常boot,以下是贴出的代码;a: android_reboot(A原创 2014-01-06 21:12:04 · 5615 阅读 · 3 评论 -
Android通过tcpdump抓包
1. 手机要有root权限2. 下载tcpdump http://www.strazzere.com/android/tcpdump3. adb push c:\wherever_you_put\tcpdump /data/local/tcpdump4. adb shell chmod 6755 /data/local/tcpdump5, adb shell,转载 2014-06-24 22:08:50 · 1168 阅读 · 0 评论 -
linux内核notifier机制 linux通知链
在linux内核系统中,各个模块、子系统之间是相互独立的。Linux内核可以通过通 知链机制来获取由其它模块或子系统产生的它感兴趣的某些事 件。使用notifier由通知者可以传递给被通知者整形参数与指针,在linux中有许多地 方用到,比如reboot通知,cpu调频通知,电池低 电警报等等。熟悉使用notifier有助于驱动开发。notifier_block结构:s原创 2014-09-23 21:02:18 · 3007 阅读 · 0 评论 -
linux sdio card休眠处理 sdio card removed解决办法
最近调试几款sdio card suspend时都会出现sdio card removed,之后 要么死机要么模块不能正常工作,根本原因也就是休眠没有处理好。昨天在博通网卡上终于找到了解决方法。 1:host端需要设置nonremovable,软件设置:mmc->caps |= MMC_CAP_NONREMOVABLE; 2:host端需要设置k原创 2014-09-02 21:25:56 · 6431 阅读 · 0 评论 -
Linux USB驱动工作流程
1. USB主机在Linux驱动中,USB驱动处于最底层的是USB主机控制器硬件,在其之上运行的是USB主机控制器驱动,主机控制器之上为USB核心层,再上层为USB设备驱动层(插入主机上的U盘、鼠标、USB转串口等设备驱动)。因此,在主机侧的层次结构中,要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何与主机通信。Li转载 2014-09-13 20:40:39 · 2239 阅读 · 0 评论 -
高通平台串口调试 AP与模块串口通讯调试总结
1:检查AP端串口配置是否ok:a:高通平台查看DMA传输:echo 1 > /sys/kernel/debug/msm_serial_hsl/loopback.0 //打开回环开关adb shell cat /dev/ttyHSL1另起窗口# adb shell# echo 11111111 > /dev/ttyHSL1若DMA通道ok,控制台会循环显示;b:查看原创 2014-04-22 22:05:29 · 7899 阅读 · 0 评论 -
从linux usb bus节点来认识usb linux usb认识
首先从dmesg来认识usb:[ 19.610046] msm_hsic_host msm_hsic_host: Qualcomm EHCI Host Controller using HSIC[ 19.620391] msm_hsic_host msm_hsic_host: new USB bus registered, assigned bus number 1[ 19原创 2014-09-22 21:34:35 · 12121 阅读 · 0 评论 -
lcd刷新率计算方法
frame_rate通常低于50通常仔细会看到闪烁,在55-60最合适,这时候屏最安静,通常pclk决定frame_rate,pclk要适中,pclk过高会导致平台功耗过高,虽然肉眼看不见但确实是实实在在的。在mipi lcd中有参数frame_rate可以填入,发现填入frame_rate=60时 pclk确达到了166M,通过高通自己的算法会导致pclk过高,所以mipi参数中原创 2013-12-18 21:44:31 · 5751 阅读 · 0 评论 -
针对高通BMS的研究 高通电量计
高通8064 8974 8926等pm芯片都集成了电量计,估计后续芯片都会一直存在,现在许多项目电池旁都有百分比显示,所以需要深入分析BMS有助于解决电量方面的BUG。一: SOC(荷电状态)计算方法名词:FCC Full-charge capacity UC Remaining capacityCC Coulumb counter UUC原创 2014-03-08 08:29:02 · 8391 阅读 · 1 评论 -
linux kernel将buf保存到文件做法 很好的调试方法
linux kernel将关键信息保存到文件做法 很好的调试方法下面有2个示例: 1:保存机器从开机到结束的VBATT; 2:保存uart接收到的数据到文件;意义不多说了。以下是代码:#include #include #include static struct file *fp =NULL;int write_to_file原创 2014-09-05 21:46:00 · 3832 阅读 · 0 评论 -
kernel power off流程分析
凡是linux内核上层关机时,底层均会调到kernel_power_off(),电脑可以使用按键ctr+alt+del键进入关机,下面我们看看代码流程: SYSCALL_DEFINE4() -> kernel_power_off()-> pm_power_off_prepare() -> machine_power_off()-> pm_power_off() 在这里我想原创 2013-03-12 22:59:06 · 13380 阅读 · 0 评论 -
linux下判断 串口是否通讯 UART DEBUG
在调试BT中发现以下方法: 通常uart连接其他设备例如BT,首先要调通该uart,最简单方法如下:uart 调试方法adb shellcat /dev/ttyHS0&(ls -s /dev/ttyHS*)(ttyHS0代表所要调试的串口)使用手触摸rx即可有字符输出或者 echo djqewdhheudfueufu > /dev/ttyHS0再将rx与tx短接原创 2012-05-13 22:50:07 · 6890 阅读 · 1 评论 -
android lcd调试 高通平台lcd调试深入分析总结(mipi和rgb接口)
各位网友:最近发现我这篇文章转载的到处都是,有的则以原创存在,转载时请注明出处,还有文中错误的地方请指正!谢谢合作。一:点亮lcd in kernel其实点亮lcd很简单必须保证以后几个步骤正确:1:确认Lcd信息所在文件被编译进去,并且lcd 和board name里面注册一质,倘若这部正确,那么log里面应该有对应分辨率的一段framebuffer同时调到相对应的power_on函原创 2012-07-19 22:34:59 · 28088 阅读 · 33 评论 -
linux内核3.4基于wakeup_source的autosleep机制分析
一:wakeup_source简介: linux 3.4内核PM使用了wakeup_source来保持唤醒状态,也就是keep awake。之前android一直是基于Linux加入了wake_lock机制来阻止系统休眠,后来Linux 3.4内核加入了wakeup_source来管理,安卓4.4跟着升级内核也就摒弃了自己的臃肿的wake_lock机制,在对上层接口并不改变,在内核wak原创 2014-11-24 19:25:53 · 6031 阅读 · 0 评论 -
Linux音频ALSA机制学习笔记<二>
首先是dapm是什么?就是音频电源动态管理。相信电源管理大家都不会陌生。dapm设计的目的就是只有需要时才打开必要的部件(widget),不需要时则关闭部件, 达到省电的目的。ALSA通过kcontrol来切换音频通道,当playback或者capture时会更新通道激活下的widget power,这个是由内核event统一完成的,无须上层干预。widget定义widgets原创 2014-11-04 21:28:15 · 3624 阅读 · 0 评论 -
jiffies机制及其实验与使用 jiffies与HZ换算
全局变量jiffies用来记录自系统启动以来产生的节拍的总数。启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值。一秒内时钟中断的次数等于Hz,所以jiffies一秒内增加的值也就是Hz。系统运行时间以秒为单位,等于jiffies/Hz。注意,jiffies类型为无符号长整型(unsigned long),其他任何类型存放它都不正确。将以秒为单位的时间转化为j原创 2012-09-21 22:37:51 · 6480 阅读 · 0 评论 -
linux runtime pm机制的深入理解
一:runtime机制说明 何为runtime机制?也就是系统在非睡眠状态,设备在空闲时可以进入runtime suspend状态同时不依赖系统wake_lock机制,非空闲时执行runtime resume使得设备进入正常工作状态。 主要代码放在Runtime.c (drivers\base\power)中,同时附带的Runtime_pm.txt (documentati原创 2014-07-24 21:26:50 · 13126 阅读 · 0 评论 -
Linux音频ALSA机制学习笔记<一>
首先宏观看内核暴露给上层的接口:root@android:/ # cat /dev/snd/controlC0 pcmC0D10p pcmC0D13c pcmC0D15c pcmC0D2c pcmC0D3c pcmC0D5p pcmC0D8cpcmC0D0c pcmC0D11p pcmC0D13p pcmC0D15p pcmC0D2p pcmC0D3p pcmC0D6c pcmC0D9原创 2014-11-04 21:26:02 · 9656 阅读 · 1 评论 -
安卓kernel自主唤醒系统方法—设置alarm
#include 1:定义alarm变量:struct alarm xx_alarm;2:alarm绑定:alarm 触发时callback:static voidxx_callback(struct alarm *alarm){ structchip *chip = container_of(alarm, structchip,原创 2014-09-17 22:45:18 · 4641 阅读 · 1 评论 -
linux网卡数据流 发送与接收
通常在驱动中看见的网卡代码很多,但是都离不开发送与接收,掌握好骨干也就好阅读网卡驱动了。数据发送 :发送函数:xxx_start_xmit()上层封装好了sk_buff丢进kernel后,buf存储在skb->data中,通 过 xxx_start_xmit(),发送出去。下面的实例是通过写入某个设备节点发送出去,当然这个设备肯定是串口或者sdio等传输设备,也可以直接原创 2014-09-03 21:34:11 · 4293 阅读 · 0 评论 -
linux 进程睡眠与wait_even t_interruptible()分析
驱动中最底层处理buffer通常会对该进程睡眠和唤醒操作,比如上层写入buffer时,内核buffer缓冲区是满的,那么写入进程需要阻塞住,直到内核buffer缓冲区可以容纳上层写入的buffer才唤醒该进程。首先必须认清一个事实:先将进程置为INTERRUPTIBLE,再调用schedule()后本进程才睡眠;而不是执行set_current_state(TASK_INTERRUPT原创 2014-03-19 22:38:24 · 6650 阅读 · 0 评论 -
android关机闹钟设计思路
1: 首先需要硬件支持,支持alarm中断触发开机,目前高通平台几乎都支持;2:关机前需要在rtc-xxx.c中做到enable_irq_wake,和不disable alarm功能(默认开机后alarm功能就会打开,通常关机时qct会关闭该功能避免alarm触发乱开机);3: 在AlarmManagerService.java当set请求来自闹钟时改变type类型,alarm_dev.c原创 2013-12-10 22:31:41 · 3273 阅读 · 0 评论 -
android kernel devices睡眠唤醒调试
下面是跟踪log方法,可以调试suspend,resume,earlysuspend lateresume等方面的问题,如哪一过程时间过长,跟踪log才可以很好定位问题,解决问题。1:early_suspend late_resume添加log在earlysuspend.c中static int debug_mask = DEBUG_USER_STATE;->static原创 2013-02-28 21:16:53 · 5368 阅读 · 0 评论 -
android alarm底层理解
分享以前调试alarm关机闹钟时,写的关于alarm的总结; alarm上层调用包括RTC唤醒和闹钟,前者使用的更频繁,接口一样;上层应用频繁调用rtc唤醒系统会增加功耗,所有有些厂家做了所谓的同步心跳技术来统一规划RTC唤醒系统; alarm本质是底层起了timer,在系统未睡眠时当达到上层设定时间之后timer会trigger同时调用alarm的回调函数来改变全局变量,从而原创 2014-03-28 21:53:46 · 2433 阅读 · 0 评论 -
Android HAL基础
最近开始看Android的HAL开发方面,发现现在国内研究这个的并不多,来自Jollen可能是走在Android HAL研究的最前沿,这也和他以前专注做嵌入式linux(openmoko)的工作经历有关,毕竟Android的application开发是基于Java的,而之前Jollen做的更多的还是C/C++开发,因此选择从HAL作为进入Android的shortcut还是很明智的,我以前也主转载 2013-12-10 22:47:16 · 1554 阅读 · 0 评论 -
高通平台mipi panel kernel读包方法
熟悉高通平台mipi panel kernel读包方法,我想我们可以是的同一客户要是使用2块mipi panel的话我想我们可以通过读取id来下不同序列而不用更换boot.img,还有能否读id可以说明mipi通讯是否正常。还有我们只需在lk下面读一次id再对全局变量赋值通过lk传递到kernel里面,通过不同赋值发送不同初始化序列,至于时序clk则调整好兼容2块屏的,也可以通过全局变量来区分原创 2012-08-23 19:47:54 · 11717 阅读 · 12 评论 -
高通平台开机logo连续显示调试总结
所谓开机logo连续显示即我们在bootloader里面即lk下面将开机logo点亮了。但是进入到kernel会掉掉。那么究竟怎么才能保持连续显示呢? 下面以rgb屏为例: 1:在lk下面出lk时不关闭mdp引擎,让开机logo保持到kernel接管。还有lk下面fb_base要定义高点,为了kernel起来时模块不会冲走lk下面那段framebuffer。原创 2012-09-23 21:42:47 · 7607 阅读 · 12 评论 -
linux work queue工作队列小结与使用
1、linux内核中断处理的工作队列workqueue机制工作队列(workqueue)是另外一种将工作 推后执行的形式。工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。 这样,通过工作队列执行的代码能占尽进程上下文的所有优势。最重要的就是工作队列允许被重新调度甚至是睡眠。那么,什么情况下使用工作队列,什么情况下使用tasklet。如果推后执行原创 2012-09-20 22:22:46 · 3800 阅读 · 0 评论 -
android wifi调试总结 theros AR6K命令小结 android wifi debug
高通平台wifi命令:首先inmod ar6000.ko(ics则有2个.ko cfg8*.ko和ath6kl.ko)dmesg看log,有经验的一看log就知道wifi是否正常。adb push iwconfig /system/binadb push iwlist /system/bin查看无线网络:iwconfig;ifconfig wlan0 up;iwli原创 2012-02-01 11:54:03 · 4900 阅读 · 0 评论 -
高通平台camera调试
今后会调一些sensor,故转载过来学习。近来刚接手项目的camera驱动,除了查看平台文档和sensor的到规格书,也在网上查看了高手们到经验。本人对camera还是比较陌生的,奈何公司无人过问,只好按部就班的来吧! 和大部分驱动的调试相差无几,还是在前人的工作基础上进行的。项目采用高通7627平台,sensor采用ov7675。驱动移植1.内核驱动移植sensor信息记录在android\ke转载 2012-09-02 22:21:56 · 8350 阅读 · 1 评论 -
高通平台bootloader里面串口log输出配置方法
1:在modem端将相应的gpio设置成相应功能。2:在/lk/project/xxx.mk打开uart输出log功能。3:在platform/msm_shared/uart.c中定义uart几输出log,#if PLATFORM_MSM7X30static unsigned uart_base = MSM_UART2_BASE;#elif PLATFORM_MSM7X27A原创 2012-08-11 21:37:50 · 10702 阅读 · 2 评论 -
高通平台android kernel 开机logo显示和传统linux一样
由于高通8k平台lk下只有2s多点 故直接在kernel显示logo,这篇文章转载过来制作linux logo,其实这个当时学习就会,只不过忘记了。在这里重提一下ubuntu下的GIMP图片工具真的很不错!!!曾经在lk下把mipi panel给驱动显示起来了,但是使用了高通官方给的连续显示logo的方法并不给力,在出lk到kernel注册fb之前,会闪烁一样,也就是关了再显示了。由于late原创 2012-07-21 15:58:02 · 8117 阅读 · 1 评论 -
修改和制作Android开机Logo(最终版)
以下在Telechips tcc8900上,用Android 2.3的源码编译通过1.bootloader图片修改 bootable\bootloader\lk\platform\tcc_shared\include\lcd\logo.h替换就行了 logo.h的制作:准备一张图片,然后用Img2Lcd工具把图片转成C语言数组注意:在使用Img2Lcd工具转换的图片转载 2012-07-21 17:44:45 · 4842 阅读 · 0 评论 -
自己写的双电池IC driver(linux 框架下driver部分)
/* Copyright (c) 2011-2012, CAll rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and原创 2012-06-12 09:15:11 · 4561 阅读 · 0 评论 -
小结linux框架下函数如何可以使其被其他文件调用
1:通常export该函数。2:获取结构体指针:在driver设个全局变量。下面贴出自己写的xenon flash driver部分代码。struct xenon_flash_chip { struct i2c_client *xenon_flash_client;};static struct xenon_flash_chip *xenon_chip;原创 2012-06-14 22:58:40 · 1702 阅读 · 0 评论 -
关于Android LCD和键盘背光亮度
应用设计1.1 设置进度条范围背光设置是在:设置->声音和显示->亮度,通过进度条来设置的。 文件:packages/apps/Settings/src/com/Android/settings/BrightnessPreference.java private static final int MINIMUM_BACKLIGHT = Android.os.Power.BR转载 2012-10-22 10:13:19 · 2049 阅读 · 0 评论 -
linux debugfs使用分享 软件查看gpio状态
在调试中加入debugfs有时可以起到事半功倍的效果: adb shell#mkdir /data/debug#mount -t debugfs debugfs /data/debug#cd /data/debug 查看gpio状态root@android:/data/debugfs # cat gpioGPIOs 0-15: gpio-0 (fr原创 2012-12-15 23:10:14 · 5618 阅读 · 0 评论 -
android adb网络调试 Android中使用WIFI来连接ADB 简单100%成功
android adb网络调试 Android中使用WIFI来连接ADB 简单100%成功原创 2013-11-25 20:22:57 · 2300 阅读 · 1 评论 -
linux cpufeq相关知识
转载地址: http://www.soft6.com/tech/16/167430.htmlCPUfreq 的一般设置 我们先来介绍 Linux CPUfreq 子系统的使用设置并提供一些接口选项,看看使用它是多么容易。先讨论一些一般设置: /sys 接口 cpuspeed 设置文件 cpufreq-utils 使用 /sys 接口转载 2013-05-26 20:44:12 · 1797 阅读 · 0 评论