- 博客(142)
- 资源 (28)
- 收藏
- 关注
原创 安卓linux uevent内核上报机制实例
uevent可以实现内核通知上层的一种机制,最常见的电池状态的变化就是kernel uevent通知的,每次百分比或者其他的变化通过power_supply_changed通知上层update;每个device下面都有kobj,找到device就可以通过kobject_uevent_env 通知android了;以拔出T卡为例,内核通知上层。这里的T卡是一种sdio设备,普通T
2015-01-20 21:21:29 5142 2
原创 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 2795
原创 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 6058
原创 Linux音频ALSA机制学习笔记<二>
首先是dapm是什么?就是音频电源动态管理。相信电源管理大家都不会陌生。dapm设计的目的就是只有需要时才打开必要的部件(widget),不需要时则关闭部件, 达到省电的目的。ALSA通过kcontrol来切换音频通道,当playback或者capture时会更新通道激活下的widget power,这个是由内核event统一完成的,无须上层干预。widget定义widgets
2014-11-04 21:28:15 3673
原创 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 9710 1
原创 做高通平台安卓驱动感言
第二次写这类博客,之前还是求职期间写的面试之类的经历。 不知不觉做驱动再过2个月就3年了,可以说这3年学习到的很多,老大或者同事们的指教,针对性通过百度等搜索等,还有就是自己一边工作一边自己研究到的。知识,解决问题的能力也是慢慢积累起来的。这二年多来一直在做驱动,由开始开始接触调试LCD TP等等,每次会重复做事,但是自己学习到的也很多,学会分析关键问题,掌握一些驱
2014-10-13 22:23:03 5162 8
原创 linux内核notifier机制 linux通知链
在linux内核系统中,各个模块、子系统之间是相互独立的。Linux内核可以通过通 知链机制来获取由其它模块或子系统产生的它感兴趣的某些事 件。使用notifier由通知者可以传递给被通知者整形参数与指针,在linux中有许多地 方用到,比如reboot通知,cpu调频通知,电池低 电警报等等。熟悉使用notifier有助于驱动开发。notifier_block结构:s
2014-09-23 21:02:18 3059
原创 从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 12234
原创 安卓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 4671 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 3870
原创 linux网卡数据流 发送与接收
通常在驱动中看见的网卡代码很多,但是都离不开发送与接收,掌握好骨干也就好阅读网卡驱动了。数据发送 :发送函数:xxx_start_xmit()上层封装好了sk_buff丢进kernel后,buf存储在skb->data中,通 过 xxx_start_xmit(),发送出去。下面的实例是通过写入某个设备节点发送出去,当然这个设备肯定是串口或者sdio等传输设备,也可以直接
2014-09-03 21:34:11 4332
原创 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 6494
原创 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 13248
转载 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 1184
原创 高通平台串口调试 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 7955
原创 android alarm底层理解
分享以前调试alarm关机闹钟时,写的关于alarm的总结; alarm上层调用包括RTC唤醒和闹钟,前者使用的更频繁,接口一样;上层应用频繁调用rtc唤醒系统会增加功耗,所有有些厂家做了所谓的同步心跳技术来统一规划RTC唤醒系统; alarm本质是底层起了timer,在系统未睡眠时当达到上层设定时间之后timer会trigger同时调用alarm的回调函数来改变全局变量,从而
2014-03-28 21:53:46 2448
原创 linux 进程睡眠与wait_even t_interruptible()分析
驱动中最底层处理buffer通常会对该进程睡眠和唤醒操作,比如上层写入buffer时,内核buffer缓冲区是满的,那么写入进程需要阻塞住,直到内核buffer缓冲区可以容纳上层写入的buffer才唤醒该进程。首先必须认清一个事实:先将进程置为INTERRUPTIBLE,再调用schedule()后本进程才睡眠;而不是执行set_current_state(TASK_INTERRUPT
2014-03-19 22:38:24 6688
转载 Linux ARM Device Tree
一、ARM Device Tree起源 历史问题:1、在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码; 相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾, 如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬
2014-03-11 21:45:31 1825
原创 针对高通BMS的研究 高通电量计
高通8064 8974 8926等pm芯片都集成了电量计,估计后续芯片都会一直存在,现在许多项目电池旁都有百分比显示,所以需要深入分析BMS有助于解决电量方面的BUG。一: SOC(荷电状态)计算方法名词:FCC Full-charge capacity UC Remaining capacityCC Coulumb counter UUC
2014-03-08 08:29:02 8455 1
转载 UART中的硬件流控RTS与CTS
转载地址:http://blog.csdn.net/zeroboundary/article/details/8966586最近太忙了,没时间写对Ucos-II的移植,先将工作中容易搞错的一个知识点记录下来,关于CTS与RTS的。在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) 推出了聪明猫(SmartModem)后就有点混淆了,不过现在这种意义为主流意
2014-02-11 20:59:45 2727
原创 android restart reason机制
Reboot传递参数,使得开机进入参数固定的模式(通常有我们熟悉的bootloader和recovery等),本质是在kernel shutdown时会调用到restart,将模式数值写到share memory中,那么在开机bootloader阶段,再去读取这块内存,boot进入指定的模式,要是匹配不起来就正常boot,以下是贴出的代码;a: android_reboot(A
2014-01-06 21:12:04 5668 3
原创 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 5819
原创 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 3302
原创 android adb网络调试 Android中使用WIFI来连接ADB 简单100%成功
android adb网络调试 Android中使用WIFI来连接ADB 简单100%成功
2013-11-25 20:22:57 2325 1
原创 apq 8064 uart debug
一般需要示波器测试TX,但是8064有个内部循环,直接enable可以不需要示波器也能判断,UART是否是通的:
2013-08-06 22:13:37 1872 2
转载 linux cpufeq相关知识
转载地址: http://www.soft6.com/tech/16/167430.htmlCPUfreq 的一般设置 我们先来介绍 Linux CPUfreq 子系统的使用设置并提供一些接口选项,看看使用它是多么容易。先讨论一些一般设置: /sys 接口 cpuspeed 设置文件 cpufreq-utils 使用 /sys 接口
2013-05-26 20:44:12 1822
原创 如何输出dev_dbg log
kernel里面默认都配置了CONFIG_DYNAMIC_DEBUG=y; 假如我们要打印acpuclock-krait.c中的 dev_dbg(drv.dev, "ACPU%d speed change complete\n", cpu); 在adb shell中输入: mount –t debugfs none /sys/kernel/debug
2013-05-25 22:33:46 4298
原创 Qualcomm pmic充电流程分析(msm8660)
首先软件上Pmic CHGVAL中断触发,pm8058_chg_chgval_handler函数被调用,即表明pmic检测到usb_vbus,说明有usb或者dc的插入,接着进入充电流程;之后调用msm_charger_notify_event(),在该函数中调度工作队列msm_chg.queue_work;之后调用到工作队列处理函数process_events();再之后逐步调用到pmi
2013-04-22 22:09:01 6628
原创 高通平台发送mipi参数的分析
我们知道,调试lk里面mipi lcd显示,需要在kernel里面参数数组里面改写包头(长包还是短包)和注意4字节对齐,不够则补齐0xff;其实我们kernel是对参数进行了封装,参数经过DMA发送到DSI_BASE偏移0x44的寄存器中的值是和lk里面是一致的。在mipi_dsi_host.c中mipi_dsi_cmd_dma_tx()函数打开DSI_HOST_DEBUG宏即可
2013-04-13 12:04:06 6260 1
原创 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 13608
原创 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 5406
原创 电池温度脚检测电池温度原理
电池温度检测原理电池温度检测原理:电路图如下所示,温度脚所在的串联电路。已知温度与R的线性关系,温度越高电阻阻值越小,通过pmic adc采样到Vbat_therm来确定电池的温度。软件中只要定义一个温度与电压的数组,通过ADC采样到电压就可以查出此时的温度了。温度(℃)电阻(kΩ)电阻精度(%)温度精度(
2013-02-24 21:17:48 7905
转载 指针使用的注意事项
相信大家对指针的用法已经很熟了,这里也不多说些定义性的东西了,只说一下指针使用中的注意事项吧。一.在定义指针的时候注意连续声明多个指针时容易犯的错误,例如int* a,b;这种声明是声明了一个指向int类型变量的指针a和一个int型的变量b,这时候要清醒的记着,而不要混淆成是声明了两个int型指针。二.要避免使用未初始化的指针。很多运行时错误都是由未初始化的指针导致的,而且这种错误又不能被
2013-01-26 18:49:44 1472
转载 学习指针-指针终极理解
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。在32
2013-01-26 18:48:56 1801
转载 Qualcomm Android display架构分析
Android display架构分析(一)http://blog.csdn.net/BonderWu/archive/2010/08/12/5805961.aspxhttp://hi.baidu.com/leowenj/blog/item/429c2dd6ac1480c851da4b95.html高通7系列硬件架构分析如上图,高通7系列 Display的硬件部
2013-01-12 15:41:07 3562
转载 deadlock linux死锁
所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等竺的进程称为死锁进程.目录具体定义由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。一种
2013-01-12 14:57:44 1872
原创 Linux系统ioctl使用示例 ioctl实验
本文是我在andoid实验的ioctl的功能,如双向传递参数。贴出来希望对学习ioctl的人很有帮助。 linux的ioctl功能是很强大的,android显示模块还有camera模块都离不开ioctl让上层和内核交互。这个实验对初学者很有帮助的。board中添加platform_devcestatic struct ioctl_test_platform_data io
2013-01-12 14:35:56 7800 2
原创 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 5647
原创 高通平台开机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 7637 12
原创 linux delayed _work使用小结
Delayed _work使用小结直接使用delay_work将任务推迟执行,如同queue work一样。//声明static struct delayed_work wlan_suspend_worker;//处理任务函数static void xxx_worker(struct work_struct *work){ .........; sch
2012-09-22 23:06:07 7607
s3c2440开发板nandflash启动u-boot.bin下载支持dm9000
2011-05-13
移植好的mini2440开发板u-boot 内存启动 支持dm9000 tftp下载
2011-05-07
u-boot1.1.6在mini2440上nor和nandflash启动
2011-04-02
s3c2440开发板原理图及pcb及常见pads2007封装库
2010-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人