0%

The Only Fair Is Not Fair.
em

前些天去看华仔的《解救吾先生》,当“吾先生”在将死之际清唱《小丑》时,我感动得眼泛泪光。

Read more »

Platform Information :
 System: Android5.1
 Platform: Qualcomm msm8916
 Author: Andy Lee
 Email: huaqianlee@gmail.com

如有错误欢迎指出,共同学习,共同进步
 
在我第一次接触Android得时候,我就很想知道Android设备在按下电源键后是怎么启动到主界面的,但是到现在为止也没有完全理清这个过程,所以就决定从按下power键开始来分析一下这个流程。虽然Android基于Linux内核开发的一个操作系统,但是在init进程后Android附加了很多其他操作,所以其启动流程还是有比较大的差别的,关于Linux系统的启动流程可以参考我的另一篇博文:深入理解linux启动过程

因为我现在工作中用到的是高通的源码,并且高通也是目前Android手机的主流芯片,所以我就按照高通的msm8916来分析了,不过其他的也应该大同小异。
 
首先来看一下官方给出的Android系统架构:

Read more »

第一篇完全译文,因为自己对技术和英文的热爱,所以决定翻译此文,水平有限,所以肯定会有不恰当的地方,欢迎移驾至原地址:http://www.ibm.com/developerworks/linux/library/l-linuxboot/
注:因为想写一篇博文来阐述并理清Android启动的完全过程,发现了这篇文章,觉得写得十分好,帮我解答了很多疑惑。

##引言
Linux系统的启动过程由很多阶段组成,但是无论你是启动标准的x86桌面还是启动嵌入式PowerPC目标,许多流程都是惊人的相似的。这篇文章从初始化引导程序到第一个用户空间应用程序探索Linux启动进程。顺着这个流程,你将知道很多和启动相关的主题,比如:引导程序,内核解压, 初始RAM磁盘,以及其他Linux引导元素。

Read more »

刚开始接触Android源码的时候,发现在kernel里面多了一种dts文件,因为当初自学Linux时和在第一家公司做物联网模型时都是用的比较老的内核,内核代码还比较混乱,没有采用dts这种方便简洁的格式。后面才知道这是因为Linus的一句”this whole arm thing is a fucking pain in ass“促进改革的,记得Linux早期代码里面板级细节都是在C文件中描述的,代码就显得十分臃肿和混乱。如此优化之后就显得简洁多了,并且也更易于学习、移植。
 
今天准备专门来分析一下内核设备树,主要按照如下三个方向来分析:

  • Device Tree组成及用法;
  • DTS文件解析常用api介绍;
  • DTS文件的编译;
  • 高通Android源码中dts文件引用流程;
    Read more »

高通平台Android源码bootloader分析之sbl1(一)
高通平台Android源码bootloader分析之sbl1(二)
高通平台Android源码bootloader分析之sbl1(三)

前两篇博文分析了启动流程、代码流程、cdt,接下来就分析另外几个需要格外关注的部分。

log系统

sbl1中的log系统也是sbl1部分调试会经常接触得部分高通平台在sbl中做的log系统并不是很强大, 但是对于我们调试已经远远足够了。
###sbl1_boot_logger_init
sbl1_boot_logger_init是log系统的初始化函数,被sbl1_main_ctl函数调用(详细参考:高通平台Android源码bootloader分析之sbl1(一)),其源码如下:

Read more »

高通平台Android源码bootloader分析之sbl1(一)
高通平台Android源码bootloader分析之sbl1(二)
高通平台Android源码bootloader分析之sbl1(三)

在上一篇博文中主要描述了启动流程,及代码执行流程,并重点介绍了一下我重点关注的部分。这个sbl部分也算有点庞大,我们没有精力也没有必要去分析全部,所以接下来就来分析一下sbl1中另外几个需要格外关注的部分:

  • CDT :主要提供平台设备数据
  • log system:log日志系统,当然没有kernel里面那么强大了
  • download:代码下载烧写实现
  • ramdump:异常信息dump
     
    本篇博文就先来分析一下CDT, 其他部分后面再分析。
    Read more »

高通平台Android源码bootloader分析之sbl1(一)
高通平台Android源码bootloader分析之sbl1(二)
高通平台Android源码bootloader分析之sbl1(三)

高通8k平台的boot过程搞得比较复杂, 我也是前段时间遇到一些问题深入研究了一下才搞明白。不过虽然弄得很复杂,我们需要动的东西其实很少,modem侧基本就sbl1(全称:Secondary boot loader)的代码需要动一下,ap侧就APPSBL代码需要动(对此部分不了解,可参照:bootable 源码解析),其他的都是高通搞好了的,甚至有些我们看不到代码。今天就要分析一下开机前几秒钟起着关键作用的sbl1, 这套代码在modem侧的boot_images\中。

启动流程

首先来看一下高通的bootloader流程框图,主要由ap、RPM及modem三部分构成,由于我工作主要涉及到ap侧,所以对RPM和modem侧代码不了解,以后有空时间的话到可以研究一下,框图如下:

Read more »

记得当初学Linux时候,bootloader 代码相对来说还比较简单,主要几个汇编文件加上几个C文件,编译一个uboot就ok了。做Android驱动后,发现Android专门做了一个目录bootable来实现boot等相关功能。功能也比较多,所以就准备来研究一下这一部分。今天就先研究一下LK,LK全称为Little Kernel,是AP模块bootloader中实现的一个微型系统。

boot架构

Read more »

  昨天写Android日志系统相关博客时发觉自己对adb命令认知十分不够,所以特意去http://developer.android.com/tools/help/adb.html学习了一下,今天准备按照自己的理解加以修改总结并整理出一篇博文。

概览

  adb是Android Debug Bridge的简写,按字面意思理解就是在开发者和Android之间搭建的一个debug桥。adb是一个连接仿真实例或者Android设备的命令行工具,是一个客服端-服务器模式的程序,包括如下三部分:
 
  1. 一个运行在开发用的Android手机或者仿真器上面的client,我们可以通过adb命令调用client。其他像ADT插件和DDMS也会创建client。
 
  2. 一个运行在开发用的Android手机或者仿真器后台的server,这个server负责管理本设备上运行的client和daemon(守护进程)。
 
  3. 一个在每个仿真器或者Android设备后台运行的daemon。

adb tool 可以再/platform-tools/中找到 

Read more »

  Android日志系统详解
  How to debug with Android logging
  怎么抓取Android日志文件

  前两篇blog分别介绍了Android logging系统及编程时怎么应用,关于kernel中的log系统,前面只是大概提及了一下,下次再详细分析。相信大家都知道调试时需要打开USB调试模式,接下来就分析一下怎么抓取日志文件。

logcat命令详解

  logcat是最常用的命令之一,其语法如下;

Read more »