自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android 6.0 源码学习

千里之行始于足下,合抱之木生于毫末。

  • 博客(28)
  • 资源 (20)
  • 收藏
  • 关注

原创 QEMU模拟运行Zircon(原Magenta)

一 、下载源码:    $ git clone https://github.com/fuchsia-mirror/zircon.gitor $ git clone https://fuchsia.googlesource.com/zircon二、安装编译工具链:    进入源码目录执行(需要科学上网)    $ cd zircon    $ ./scripts/download-toolchai...

2018-03-22 21:13:30 4263

原创 Ubuntu 18.04 使用QEMU搭建ARM Linux开发环境

一、安装工具:    $ sudo apt-get install vim openssh-server net-tools nfs-kernel-server git qemu crash \build-essential libncurses-dev libssl-dev gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu systemtap二、下载源码: ...

2018-03-19 01:04:33 4644

原创 Android系统高通平台Kernel Watchdog

一Watchdog概念Watchdog主要应用于嵌入式系统,用于系统出现严重故障(如内核死锁,进入死循环,CPU跑飞等)不能恢复时,在无人为介入的情况下可以自动重新启动系统。在传统Linux 内核下, watchdog的基本工作原理是:当watchdog启动后(即/dev/watchdog 设备被打开后),如果在某一设定的时间间隔内/dev/watchdog没有被执行写操作

2017-08-05 17:25:12 7282

转载 Android debuggerd

debuggerdWhen a dynamically-linked executable starts, several signal handlers are registered that connect todebuggerd (or debuggerd64) in the event that signal is sent to the process. Thedebug

2016-12-07 18:59:14 2528

原创 Kernel启动流程源码解析 9 sched_init

一 sched_init这里只是简单过了一下sched_init,收集一些疑问,以后看书或阅读代码的时候再来寻找答案。1.0 sched_init定义在kernel/sched/core.c中void __init sched_init(void){    int i, j;    unsigned long alloc_size = 0,

2016-11-22 19:19:09 1594

原创 Kernel启动流程源码解析 8 mm_init

一 mm_init1.0 mm_init定义在init/main.c中static void __init mm_init(void){    /*     * page_cgroup requires contiguous pages,     * bigger than MAX_ORDER unless SPARSEMEM.     */

2016-11-22 19:18:09 1842

原创 Kernel启动流程源码解析 10 init_IRQ

一 init_IRQ本文以arm,gic-v3兼容的中断控制器为例,介绍中断控制器的初始化过程。1.0 init_IRQ定义在arch/arm64/kernel/irq.c中void __init init_IRQ(void){    irqchip_init();    if (!handle_arch_irq)        panic("N

2016-11-18 23:14:31 2000

原创 Android System Server进程源码分析 下

一 System Server     上篇分析了Zygote创建SystemServer的流程,本篇则分析SystemServer的实际工作内容。1.0 mainpublic static void main(String[] args) {    new SystemServer().run(); // 先new一个SystemServer对象,然后

2016-11-15 20:00:17 1012

原创 Android System Server进程源码分析 上

一 System ServerSystem Server是Zygote启动的第一个进程,它的核心功能是启动和管理Android系统的各类服务。1.0 startSystemServerprivate static boolean startSystemServer(String abiList, String socketName) // abiList

2016-11-11 18:54:45 1630

原创 Android Zygote进程源码分析

一  app_process64Zygote所对应的可执行文件是/system/bin/app_process64Zygote的代码路径frameworks/base/cmds/app_process1.0  app_process64init.rc中import /init.${ro.zygote}.rc,而ro.zygote=zygote64_32i

2016-11-09 19:58:39 2026

原创 Android Init进程源码分析

一 Initinit进程,它是内核启动的第一个用户级进程。代码路径system/core/init/1.0 maininit程序的入口函数是init.cpp中的main函数int main(int argc, char** argv) {    if (!strcmp(basename(argv[0]), "ueventd")) { //  ln -sf

2016-11-03 19:37:57 1767

原创 Kernel启动流程源码解析 12 总结

kernel链接脚本vmlinux.lds在arm64芯片架构上是以arch/arm64/kernel/vmlinux.lds.S编译生成的。从中可以看到kernel的入口点是stext,这是一个汇编函数。从stext开始kernel将会完成一系列通过汇编语言实现芯片级的初始化工作,并以静态定义的方式创建kernel的第一个kernel进程init_task,即0号

2016-10-30 12:46:23 1116 1

原创 Kernel启动流程源码解析 7 rest_init()

一 rest_init1.0 rest_init定义在init/main.c中static noinline void __init_refok rest_init(void){    int pid;    const struct sched_param param = { .sched_priority = 1 };    rcu_sc

2016-10-26 21:03:16 4187

原创 Kernel启动流程源码解析 6 setup_arch

一 setup_archsetup_arch顾名思义就是架构相关的初始化函数,这里选取arm64结构进行分析。1.0 setup_arch定义在arch/arm64/kernel/setup.c中void __init setup_arch(char **cmdline_p){    setup_processor(); // 检

2016-10-23 20:09:44 2477

原创 Kernel启动流程源码解析 5 start_kernel 下

一 start_kernelstart_kernel函数是kernel启动过程执行的第一个c语言函数,其通过调用一系列初始化函数完成的内核的初始化工作,下篇分析local_irq_enable之后的代码。1.0 start_kernel定义在init/main.c中asmlinkage void __init star

2016-10-22 23:14:47 2689

原创 Kernel启动流程源码解析 4 start_kernel 上

一 start_kernelstart_kernel函数是kernel启动过程执行的第一个c语言函数,其通过调用一系列初始化函数完成的内核的初始化工作,上篇分析local_irq_enable之前的代码。1.0 start_kernel定义在init/main.c中asmlinkage void __init start_kernel(void)

2016-10-21 23:47:40 4107

原创 Kernel启动流程源码解析 3 init_task

init_task是kernel的第一个进程,0号进程,当kernel初始化完成后,它便化身为idle进程出现在我们的面前。一 init_thread_unionunion thread_union init_thread_union __init_task_data =    { INIT_THREAD_INFO(init_task) };#define

2016-10-19 15:00:56 2038

原创 Kernel启动流程源码解析 2 head.S

__cpu_setup。定义kernel\arch\arm64\mm\proc.S中。#define MAIR(attr, mt)    ((attr) /* *    __cpu_setup * *    Initialise the processor for turning the MMU on.  Return in x0 the *    valu

2016-06-07 17:40:18 1434

原创 Kernel启动流程源码解析 1 head.S

bootloader在跳转到kernel前,需要确保如下设置:MMU = off, D-cache = off, I-cache = on or offx0 = physical address to the FDT blobkernel的第一行代码在arch\arm64\kernel\head.S中。b    stext // 跳转到ste

2016-06-02 17:31:58 2384 1

原创 LK源码解析 9 总结

little kernel做为Android系统的bootloader,最早用google工程师实现,其后由高通,MTK的芯片厂商做了各自平台的适配。lk的主要功能:初始化硬件模块,如时钟,中断,UART,USB,LCD,PMIC,eMMC/UFS等。更新cmdline。其中重要的是区分启动模式。  选择和更新device tree。设置好系统状态,跳转到kernel。 MMU

2016-05-23 20:48:45 2842

原创 LK源码解析 8 exceptions.S

arm异常模式。#define FUNCTION(x) .global x; x:FUNCTION(arm_undefined) // 未定义指令异常    stmfd     sp!, { r0-r12, r14 } // 批量数据存储指令,用于将r0-r12及r14压入堆栈,stmfd指令的寻址方式为事前递减方式(DB),后缀“!”表示更新sp的值,即s

2016-05-23 20:47:52 1272

原创 LK源码解析 7 aboot.c

boot_linux()。typedef void entry_func_ptr(unsigned, unsigned, unsigned*);void boot_linux(void *kernel, unsigned *tags,        const char *cmdline, unsigned machtype,        void *ramdisk, uns

2016-05-23 20:47:08 2040

原创 LK源码解析 6 aboot.c

听闻高通将弃用lk转用uefi,在想还有继续分析lk源码的必要吗?后来一想分析lk源码的目的与lk亦或是uefi无关,于是决定继续进行。boot_linux_from_mmc()。struct boot_img_hdr{    unsigned char magic[BOOT_MAGIC_SIZE]; // BOOT_MAGIC "ANDROID!"

2016-05-23 20:46:07 3544

原创 LK源码解析 5 aboot.c

现在开始分析关键函数aboot_init(),岔开一句lk在分区表的名称即为aboot。aboot_init()。void aboot_init(const struct app_descriptor *app){    unsigned reboot_mode = 0;    unsigned hard_reboot_mode = 0;    bool boot_

2016-05-23 20:45:21 2573 1

原创 LK源码解析 4 main.c

bootstrap2()。static int bootstrap2(void *arg){    dprintf(SPEW, "top of bootstrap2()\n");    arch_init(); // 目前为空函数    // XXX put this somewhere else#if WITH_LIB_BIO    bio_ini

2016-05-23 20:44:18 1507

原创 LK源码解析 3 thread.c

从thread_resume(thread_create("bootstrap2", &bootstrap2, NULL, DEFAULT_PRIORITY, DEFAULT_STACK_SIZE));展开对lk中thread的分析。struct thread。typedef struct thread {    int magic; // thread魔数'thr

2016-05-23 20:42:21 1093

原创 LK源码解析 2 main.c

kmain()。/* called from crt0.S */void kmain(void) __NO_RETURN __EXTERNALLY_VISIBLE;void kmain(void){    // get us into some sort of thread context    thread_init_early(); // 初始化lk的线

2016-05-23 20:38:49 3086

原创 LK源码解析 1 crt0.s

lk/arch/crt0.s中的_start函数为入口函数,crt0.s主要初始化CPU,然后长跳转(bl)到lk/kernel/main.c中kmain函数。lk的代码起始位置在crt0.S中。#define DSB .byte 0x4f, 0xf0, 0x7f, 0xf5#define ISB .byte 0x6f, 0xf0, 0x7f, 0xf5

2016-05-23 19:35:15 3679 1

Google C++编程风格指南.pdf

Google C++编程风格指南 中文版

2012-06-21

MySQL 5.1参考手册

这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访问:dev.mysql.com。 原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。

2012-06-15

代码大全.pdf

代码大全(Code Complete) 中文版。 Steve McConnell编写

2012-06-15

UNIX程序员手册

UNIX PROGRAMMER’S MANUAL UNIX程序员手册 英文版

2012-05-19

Effective Java

Effective Java 中文版 Joshua Bloch编著

2012-05-19

Android开发教程&笔记

Android开发 教程&笔记

2011-11-07

人月神话

人月神话 编程非常有趣,在于它不仅满足了我们内心深处进行创造的渴望,而且还愉悦了每个人内在的情感。

2011-11-07

mini2440原理图

友善之臂 mini2440原理图

2011-11-07

HC6800原理图

普中科技 HC6800原理图

2011-11-07

正则表达式30分钟入门教程

正则表达式 30分钟入门教程

2011-11-07

Vim Cheat Sheet for Programmers

Vim Cheat Sheet for Programmers

2011-11-07

Eclipse快捷键

Eclipse 快捷键

2011-11-07

ASCII 码表

ASCII-Table ASCII码表

2011-11-07

C程序设计语言.pdf

C程序设计语言.pdf 中文第2版。 Brian W. Kernighan和Dennis M. Ritchie编写

2011-11-06

ISO C++ Standard 英文

ISO C++ Standard 标准! 不解释!

2011-11-03

ANSI C 99 英文

ANSI C99 标准! 不解释!

2011-11-03

空空如也

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

TA关注的人

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