自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

邓永坚的blog

好记性、不如烂笔头

  • 博客(57)
  • 收藏
  • 关注

原创 gdb 显示结构体中成员的偏移量

在分析死机问题时,经常要阅读汇编代码,局部变量,或者形参经常是结构体指针变量 static inline void __rb_change_child(struct rb_node *old, struct rb_node *new, struct rb_node *parent, struct rb_root *root) { if (parent) {

2016-08-08 11:24:50 9488

转载 DBG、DMB、DSB 和 ISB

调试指令、数据内存屏障指令、数据同步屏障指令和指令同步屏障指令。DBG调试提示可向调试系统及其相关系统发送提示。 有关这些系统如何使用此指令的信息,请参这些系统的文档。DMB数据内存屏障可作为内存屏障使用。 它可确保会先检测到程序中位于 DMB 指令前的所有显式内存访问指令,然后再检测到程序中位于DMB 指令后的显式内存访问指令。它不影响其他指令

2016-07-27 17:14:01 2567

转载 Linux内核中的中断栈与内核栈的补充说明

Linux内核中的中断栈与内核栈的补充说明 (2012-02-20 20:17)标签:  Linux内核栈  中断栈  Linux中断处理  设备驱动  分类: Linux系统内核中断栈与内核栈的话题更多地属于内核的范畴,所以在《深入Linux设备驱动程序内核机制》第5章“中断处理”当中,基本上没怎么涉及到上述内容,只是在5.4节有些许的文字讨论中断栈在中断嵌套情形下可能的溢出

2016-07-22 17:01:02 1437

转载 Linux下函数调用堆栈帧的详细解释

http://www.ibm.com/developerworks/cn/linux/l-overflow/本文首先向读者讲解了Linux下进程地址空间的布局以及进程堆栈帧的结构,然后在此基础上介绍了Linux下缓冲区溢出攻击的 原理及对策。前言从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用。当函数调用发生时,新的堆栈帧被压入堆栈;当函数返回 时,相

2016-07-21 17:20:28 1227

原创 GCC对编译的优化试验

通过这两天的不断试验,研究反汇编代码,感觉GCC对编译的优化还是非常强的1:局部变量及语句优化:        函数内的,空局部变量,空语句都会被优化掉,不占用任何栈空间的代码空间2:局部变量一定占用栈空间吗?        众所周知,局部变量实际上是栈里存储的,如果局部变量都是基本数据类型,且都不大,会用寄存器    代替,直接运算,不开栈空间。    如果需要引有此

2016-07-20 15:42:25 1668

转载 arm v8汇编指令

A64指令 提供同A32和T32指令类似的功能, 也提供如下新功能1)一个清晰的,固定长度的指令集: 指令是32位宽度, 寄存器字段(fields)是 在固定位置的 连续的位,  立即数 通常也是占用连续的位2) 更多通用寄存器(r0-r30), 每个寄存器长度扩展为64位。  通用寄存器 编码在 5个位域寄存器r31是一个特殊的寄存器:Zero Register:

2016-07-20 09:34:56 6602

转载 ARMv8 Linux内核head.S源码分析

http://blog.csdn.net/qianlong4526888/article/details/10972035ARMv8Linux内核head.S主要工作内容:1、 从el2特权级退回到el12、 确认处理器类型3、 计算内核镜像的起始物理地址及物理地址与虚拟地址之间的偏移4、 验证设备树的地址是否有效5、 创建页表,用于启动内核

2016-07-19 15:05:37 1537

转载 ARM的栈帧

1.  ARM的栈帧    先来看看ARM的栈帧布局图:        上图描述的是ARM的栈帧布局方式,main stack frame为调用函数的栈帧,func1 stack frame为当前函数(被调用者)的栈帧,栈底在高地址,栈向下增长。图中FP就是栈基址,它指向函数的栈帧起始地址;SP则是函数的栈指针,它指向栈顶的位置。ARM压栈的顺序很是规矩(也比较容易被黑客攻破么),依次

2016-07-19 14:09:00 6151

转载 性能之procrank命令

procrank是android system/xbin工具,能够列出各进程占用内存情况,从大到不排列,只有eng版本才会编译root@msm8952_64:/ # procrank                                                     PID       Vss      Rss      Pss      Uss  cmdline 

2016-07-16 15:17:38 6278

原创 android 4.4 zram内存压缩的优缺点

内存不足时: linux本身的做法是把程序不用的page交换到磁盘中去,并不是所有的page会被映视到物理内存,现代计算机为何用page管理内存,可以参考操作系统书籍 linux加入一个新的方案zram,即在内存划出一些区域,把不常用的page压缩然后放进去,需要用的时取出解压andrdoid 4.4的内核已经支持zram技术传统方式缺点:交换到磁盘中,需要启动io操作

2016-07-16 11:33:25 6382

转载 宏定义中使用do{}while(0)的好处

#define MACRO_NAME(para) do{macro content}while(0)的格式,总结了以下几个原因:1,空的宏定义避免warning:#define foo() do{}while(0)2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现:

2016-07-08 14:56:05 784

原创 android sensor 框架--Java层

通过阅读SensorManager等代码分析SensorManager是如何管理SensorEventListener,发送SensorEvent事件的。

2015-10-13 17:56:55 4735

转载 流水线技术

流水线技术编辑本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!流水线(pipeline)技术是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。流水线是Intel首次在486芯片中开始使用的。流水线的工作方式就象工业生产上的装配流水线。在CPU中由5—6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5—6步后再由这

2015-02-12 14:18:43 2758

转载 超标量技术

超标量技术编辑本词条缺少概述、信息栏、名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!超标量(superscalar)试图在一个周期取出多条指令并行执行,是通过内置多条流水线来同时执行多个处理,其实质是以空间换取时间。但由于指令之间的相关性,即后一条指令需要前一条指令的结果,超标量CPU的性能是一个周期能执行1.2条指令,而为了取得这20%的性能改善,超标量CPU

2015-02-12 14:16:59 3357

转载 精简指令集

精简指令集编辑risc(精简指令集)一般指精简指令集本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!RISC的英文全称是Reduced Instruction Set Computer,中文是精简指令集计算机。特点是所有指令的格式都是一致的,所有指令的指令周期也是相同的,并且采用流水线技术。在中高档服务器中采用RISC指令的CPU主要有Compa

2015-02-12 14:16:22 3328

转载 linux中Oops信息的调试及栈回溯—Linux人都知道,这是好东西!

linux中Oops信息的调试及栈回溯—Linux人都知道,这是好东西!发表于 2012 年 1 月 6 日Oops 信息来源及格式Oops 这个单词含义为“惊讶”,当内核出错时(比如访问非法地址)打印出来的信息被称为 Oops 信息。Oops 信息包含以下几部分内容。1 一段文本描述信息。比如类似“Unable to handle kernel N

2015-02-10 17:31:18 1543

原创 android L 的开机动画流程

其实与android开机动画启动流程基本一模一样。除了文件换了位置,就是添加了一些函数。内核起来后会启动第一个进程,即init进程。init进程会根据init.rc配置启动surfaceflinger进程。service surfaceflinger /system/bin/surfaceflinger class mai

2015-01-27 18:57:11 2747

原创 android L 的surfaceflinger服务启动分析

android L 与android 4.4相同,surfaceflinger直接由init启动,不是system server。init进程根据init.rc启动surfaceflinger服务service surfaceflinger /system/bin/surfaceflinger class core user system g

2015-01-27 17:48:14 1725

原创 android L 启动流程

android启动流程文章已经概述了android的启动流程,而andoird 5.0的流程其实也差不多,少数不同而已。如下图:整个启动流程与之前的一样,唯一不同的是android L支持64位的app,所以又起一个Zygote64来专门负责64位APK的孵化。而且创建Zygote进程脚本在init.zygoteXX.rc里。如下:system/co

2015-01-15 17:49:21 5818 1

原创 简谈高通Trustzone的实现

从trust zone之我见知道,支持trustzone的芯片会跑在两个世界。普通世界、安全世界,对应高通这边是HLOS,QSEE。如下图:如下是HLOS与QSEE的软件架构图HLOS这两分为kernel层,user层。user层的通过qseecom提供的API起动trustzone那边的app。qseecom driver 除了提供AP

2015-01-14 15:37:06 16929 5

原创 trust zone之我见

老板交待任务,这个星期我都在研究trust zone的东东,之前有看过代码,但没有深入了解!好吧,这次看来我要跟它杠上了。网上有很多资料,但很多讲得太抽象,至少对门外汉来说有些难以理解,我估计有些文单可能翻译过来的吧,有些拗口。

2015-01-08 19:52:53 18580 6

原创 android L 关机流程图

下面是简单的流程图,从java到kernel层。ShutdownThread.java文件stop playing music,因为后面可能要playing shutdown music.代码如下:private static void beginShutdownSequence(Context context) { ....

2015-01-07 20:01:16 8878 1

原创 android开机动画启动流程

从android的Surface Flinger服务启动分析知道,开机动画是在SurfaceFlinger实例通过调用startBootAnim()启动的。下面我们就一起学习BootAnim是如何启动和结束的,我精读代码前都喜欢先描出框架图,以此图为基础再去研读会达到事半功倍的效果。好吧,直接上图。内核起来后会启动第一个进程,即init进程。init进程

2014-12-31 16:21:10 5733 3

原创 android的Surface Flinger服务启动分析

这篇文章android启动流程讲到android的启动流程,其实中间还蕴藏了SurfaceFlinger服务的内容,但没有包括进去,目的是为尽可能简单的讲述android启动流程,从整体上把握。好吧,现在咱们就一起学习下Surface Flinger中如何启动的。在android4.3与android4.4版本上有所不同,下面是两个版本简单的流程图在Ando

2014-12-29 16:21:38 3218

转载 Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析

http://www.apkbus.com/android-100286-1-1.htmlAndroid系统的运行时库层代码是用C++来编写的,用C++来写代码最容易出错的地方就是指针了,一旦使用不当,轻则造成内存泄漏,重则造成系统崩溃。不过系统为我们提供了智能指针,避免出现上述问题,本文将系统地分析Android系统智能指针(轻量级指针、强指针和弱指针)的实现原理。    

2014-12-27 14:54:02 815

原创 android启动流程

android启动到界面显示流程图1:Linux内核启动2:init进程启动。3:本地系统服务,Java系统服务 启动: 1):init启动service manager,这个进程主要负责系统服务的注册管理,包括“java系统服务”“本地系统服务” 2):init启动Media server,这个进程负责启动C/C++的“本地系统服务”。

2014-12-26 16:07:30 1902

原创 android reboot流程视图

下面是android简单的reboot流程视图下面是源码分析从Java层的ShutdownThread.java的shutdown()开始:frameworks/base/services/java/com/android/server/power/ShutdownThread.java发出shutdown的广播,

2014-12-24 17:42:43 3692

转载 深入理解SELinux SEAndroid(第一部分)

深入理解SELinux SEAndroid转自:http://blog.csdn.net/innost/article/details/19299937SEAndroid是Google在Android 4.4上正式推出的一套以SELinux为基础于核心的系统安全机制。而SELinux则是由美国NSA(国安局)和一些公司(RedHat、Tresys)设计的一个针对Linux的安全加强系统

2014-12-06 21:18:26 988

转载 SELinux 初探

SELinux 初探在進入了 CentOS 5.x 之後,SELinux 已經是個非常完備的核心模組了!CentOS 5.x 提供了很多管理 SELinux 的指令與機制, 因此在整體架構上面比以前的版本要單純且容易操作管理!所以,在這一版以後,我們建議大家千萬不要關掉 SELinux 這玩意兒! 讓我們來仔細的玩玩這傢伙吧!什麼是 SELinux什麼是 S

2014-12-03 14:48:26 18051

转载 Linux Namespaces机制

Linux Namespaces机制提供一种资源隔离方案。PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace。每个Namespace里面的资源对其他Namespace都是透明的。要创建新的Namespace,只需要在调用clone时指定相应的flag。Linux Namespaces机制为实现基于容器的虚拟化技术提供了很好的基础,LXC(Linux conta

2014-12-01 14:58:08 604

转载 Java性能小技巧

局部决定整体。一个应用的整体性能取决于每个组件的性能。下面是一些帮助你提高应用性能的Java编程技巧:编程技巧原因及策略避免重复创建对象为什么:更少的对象会需要更少的垃圾回收使用的空间越少,应用的性能越好怎么做:重复利用一个对象,而不是在每次需要的时候都去创建一个功能一样的对象(这样做)

2014-11-29 22:05:50 522

转载 /proc/meminfo

cat /proc/meminfo    读出的内核信息进行解释,下篇文章会简单对读出该信息的代码进行简单的分析。MemTotal:       507480 kB MemFree:         10800 kB Buffers:         34728 kB Cached:          98852 kB SwapCached:    

2014-05-20 10:43:01 813

原创 /proc/interrupts /proc/stat 查看中断信息

/proc/interrupts列出当前所以系统注册的系统

2014-05-19 10:50:11 8263 1

原创 /proc/config.gz文件

config.gz文件是kernel的配置文件,一adb pull proc/config.gz .

2014-05-17 17:37:28 8460

原创 什么是BogoMIPS?

Bogomips(读作bogumips)是Linux操作系统中衡量计算机处理器运行速度的的一种尺度,而提供这种度量的程序也被称为BogoMips,是由Linux主要开发者linus Torvalds写的。

2014-05-17 16:58:06 33357

转载 关于oop错误定位的学习

6.4 必修实验3--内核异常分析(3)接下来的这些信息,和这个模块的调试没多大关系,它们是虚拟内存页目录、页表信息、oops错误号以及最后访问的sysfs文件等。pgd = c39d8000 [00000000] *pgd=339cf031, *pte=00000000, *ppte=00000000 Internal error: Oops: 817 [#1]  last sysf

2014-04-29 18:56:32 829

转载 DVFS--动态电压频率调整

linux低功耗研究也有一段时间了,基本把低功耗的实现方式想清楚了(主要分成机制和策略),这段时间的工作主要在机制上。暂时想实现的主要的机制有:cpu级,设备驱动级,系统平台级。管理颗粒度不断递增,形成三驾马车齐驱的形势。 cpu级:主要实现比较容易的在系统处于目标在于频繁发生、更高粒度的电源状态改变,主要的实现方式为idle,包括今天的主要想讲的动态主频。设备驱动级:主要实现对单个设

2013-12-15 13:00:48 1499

转载 嵌入式Linux之我行——ARM MMU工作原理剖析

一、MMU的产生      许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成

2013-11-10 15:37:14 885

转载 Mercurial(hg)

Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。其是基于 GNU General Public License (GPL) 授权的开源项目。特点相对于传统的版本控制,具有如下优点:更轻松的管理。传统的版本控制系统使用集中式的 repository,一些和 repository相关的管理就只能由管理员一个人进行。

2013-08-18 08:19:49 1428

原创 [5] Zygote

Android设备中的两大进程,如下图1,由init进程创建的Daemon进程2,由Zygote进程创建的应用程序进程什么是Zygote?zygote是“受精卵”的意思。在Android里,它是一个进程(java编写的)Zygote进程怎么创建?init进程启动完系统所需的各种daemon后,通过app_proce

2013-08-17 13:57:46 1870

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除