- 博客(19)
- 收藏
- 关注
原创 Ashmem 内存分析
稍微记录一下ashmem的分析。到底是先讲驱动的代码还是调用的代码呢? 还是从外部入手吧。 android中调用ashmem的地方很多,我给一个dalvik中的例子:void *dvmAllocRegion(size_t byteCount, int prot, const char *name) { void *base; int fd, ret;
2012-02-23 14:20:16
2308
原创 Pmem使用小结
Pmem很好的满足高通芯片中MDP、GPU等需要连续物理内存的设备,这里我稍微小结一些自己的理解,做个记录:1.如何使用,这里要分两种情况: 第一种:在一个进程中自己分配自己使用,直接open之后mmap就ok了。 pmem_fd = open("/dev/pmem_device", O_RDWR, 0) pmem_base = mmap(0, size
2011-07-12 16:10:09
3759
原创 android pmem使用小结
Pmem很好的满足高通芯片中MDP、GPU等需要连续物理内存的设备,这里我稍微小结一些自己的理解,做个记录:1. 如何使用,这里要分两种情况: 第一种:在一个进程中自己分配自己使用,直接open之后mmap就ok了。 pmem_fd = open("/dev/pm
2011-07-12 15:21:43
431
原创 android memory leak analysis tools
<br /> 如何在Android中来检测系统中可能存在的内存泄漏问题呢?本篇文章给大家起一个头,分享一下基本的步骤。<br /> 1.首先,打开DDMS, 在左边的device视图区点击你想要分析的进程,这里以system_process为例:<br /><br /> 2.选中上图左上角的两个绿色按钮,即选中”Update Heap”和”Dump HPROF file”. 之后,会弹出对话框让您选择hprof文件的存放路径.<br /> 3.此时,我们已经得到了hprof文件,但是
2011-02-23 16:07:00
3206
原创 搭建android git server
主要给自己做一个记录,老是忘东西. 1.安装git daemon和gitosis.git daemon主要用于用户匿名访问,最好把所有工程都导出.gitosis 主要用于用户权限设置.切换到需要访问工程的用户名下,敲ssh-keygen -t rsa得到密钥,添加到工程中. 2.设置好权限之后,使用repo来镜像一份android代码.repo init -u git://xxx/platform/manifest.git -b branch_name --mirror 3.repo sync之
2011-01-12 10:57:00
1401
原创 下载编译GingerBread
<br /><br /><br />1. 下载地址:<br /> repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread<br /> repo sync<br /> <br />2. 修改build/core目录下的main.mk文件:<br /> ifeq ($(BUILD_OS),linux)<br /> build_arch := $(shell uname -m)<br /> -
2011-01-07 09:43:00
532
原创 高通芯片中的MDP模块[msm7x27]
在高通芯片msm7x27中,有一个MDP模块,显示相关的数据都会经由其处理后送至目标设备。如下图所示,MDP模块主要包括PPP和DMA两大部分,系统可以利用PPP模块对数据进行加速处理,譬如缩放、旋转、叠加等等;7X27中的MDP具有四条DMA通道,分别是DMA_P、MDA_S、DMA_E、DMA_TV,可以外接lcd panel和TV。其中,DMA_S不可以接主屏。 先来讲讲PPP模块,这个模块在android中被copybit库抽象。在android中,很多对图像的操作,譬如缩放、BLIT
2010-12-05 11:03:00
5800
2
原创 surfaceflinger中的composition小结[msm7x27为例]
在高通7x27平台上,surfaceflinger可以使用gpu/mdp/sw来做composition。因为mdp没有mmu,所以需要使用pmem才能正常工作。GPU可以通过mmu来使用非连续的内存,因此可以节省pmem的空间。 下面来简单的讲讲surfaceflinger的composition过程,每个surface都会分配一个内存空间,当surface需要更新时,给surfaceflinger发送消息,surfaceflinger的主线程收到消息后,从阻塞状态恢复,首先按照每个surf
2010-11-25 22:00:00
2709
原创 如何察看android smem log
<br /><br /> 现在大部分的android手机都是基于双核架构的,这必然导致双核之间的通信,一些crash bug经常出在这一部分。这里,我给大家介绍两种方法:<br /> 1、用trace32。trace32无疑是强大的,几乎可以做任何debug的事情,有高通代码的兄弟可以在/AMSS/products/76XX/tools/debug目录下找到smemlog.cmm和smem_log.pl这两个文件,可以dump出log.<br /> 2、没有trace32的兄弟也不要灰心,
2010-11-16 16:14:00
1071
原创 android framebuffer driver 小结[msm7627为例]
主要讲android中lcd驱动注册的主线,以msm7627为例。熟悉这个芯片的兄弟应该知道,msm7627的2d是通过一个mdp的硬件来做的,7627上这个硬件的版本是3.02。它支持EBI2/MDDI/RGB接口,这里以RGB接口为例,给大家看张图: 首先,在board.c文件里会注册panel/lcdc/mdp/framebuffer四个devices, 然后从panel的驱动初始化函数开始,做init,然后注册panel的驱动,如果驱动的name和device的name match上
2010-11-05 19:21:00
3750
原创 用trace32调试android kernel[msm7627为例]
之前我讲了怎么用eclipse调试android的framework代码以及用gdb server调试native代码,但是由于gdb无法调试多线程代码,所以用起来还是很不方便。今天我来讲讲怎么用trace32调试kernel. 首先讲讲硬件连接,必须保证你的trace32是连接到arm11的JTAG口上,其他连接不细说了。 打开trace32的命令窗口,并对cpu设置,如下图所示: 进入设置界面,设置如下: 然后依次输入命令“cd Z:/out/target/product
2010-10-29 16:28:00
4433
1
原创 display tearing小结
<br /> <br /> 小结一下tearing的问题,tearing可以分为source buffer tearing和destination tearing:<br /> 1、source buffer tearing<br /> source buffer tearing是由于上层软件写framebuffer的速度快于MDP dma更新lcd的速度导致的,具体下下面的示意图。具体怎么判断呢?可以在MDP_drv.c中的mdp_pipe_ctrl()函数设置断点,按F5调试运行,如果
2010-10-27 14:07:00
1783
原创 android 内存分配小结
有android手机的童鞋们可能经常会有这样的疑问,为什么我的G2手机明明是256M的内存,可用任务管理器或者free之类的命令,看到的实际值会远远小于256。看到网上的很多误导言论,这里我给大家澄清一下吧: 在android中,内存主要分给modem/pmem/android三个部分使用: 1、modem部分一般会占用40M~50M的内存,主要用于跑Amss。如果你有源码的话,可以在device/qcom/msmxxx/Boardconfig.mk看到。还有一种方法,可以用adb pu
2010-10-26 10:42:00
2172
1
原创 video bug fix小结
<br /><br /> 今天碰到一个video解码的问题,无论播什么视频,视频都失真。经过一番排查,最终发现问题出现在了render的选择上面。vendor/qcom/android-open/libopencorehw/下的Android.mk文件没有将render配置进去。<br /> 下面主要小结一下video debug的一些方法:<br /> 1、开启所有的bug option: 修改在vendor/qcom/proprietary/mm-video/qdsp5/vdec-co
2010-10-25 18:31:00
1343
2
原创 用gdb和gdbserver调试android native code
其实网上有很多类似的文章,但是你会发现几乎都不可重现,要么是细节没讲清楚,要么是压根自己没有真正去试过。这里,我仅给出自己用gdb和gdbserver调试android native code的实际过程,希望对大家有用。 注:以调试mediaserver进程为例. 第一步:你需要下载android,以debug方式编译,并以生成的image起模拟器或者设备。 第二步:你需要从“http://developer.download.nvidia.com/tegra/fi
2010-09-27 16:50:00
10326
原创 Android 按键消息path
下面是我自己总结的android中的按键消息传递path, 首先我们可以来看一下general flow: 如上图所示,Window manager service会起两个Thread,一个线程负责从kernel读取消息到keyQ队列;另外一个线程负责将keyQ队列中的消息分发给应用程序。具体的path见下面的几个图,大家可以参考几个图对着代码看一遍,就理解了。
2010-09-20 13:41:00
1425
原创 调试android java framework and app
首先,需要将修改后的framework编译,烧写进设备。然后打开eclipse,新建工程,如下图:然后将需要调试的framework代码加入工程:建好工程后,连接设备,进入ddms视图,并点击需要调试的进程:点击Run->Debug Configuration->Remote JavaApplication->New,设置如下:在sourcecode里设置断点,并在ddms视图中选择开始调试:然后切换到debug视图,点击:调试即可完成。如果需要调试app, 需要在java视图中点击如下:弹出后的界面
2010-09-15 14:13:00
1384
原创 Android display Path analysis
使用过Linux framebuffer的人都知道,我们需要在屏幕上显示一幅图像时,只需要将framebuffer mmap到用户空间,然后直接写这块内存即可,操作的结果会立即反映在display上。作为分析Android display path的基础知识,我先来讲讲Linux这部分的原理,如下图所示: MDP会以一个固定的刷新率取得framebuffer中的数据送往panel,只要我们更新的framebuffer, 更新的内容会在一个刷新周期内反映在panel上。同时,Linux disp
2010-08-20 14:07:00
1874
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人