- 博客(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
4351
原创 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
4802
原创 Android系统高通平台Kernel Watchdog
一Watchdog概念Watchdog主要应用于嵌入式系统,用于系统出现严重故障(如内核死锁,进入死循环,CPU跑飞等)不能恢复时,在无人为介入的情况下可以自动重新启动系统。在传统Linux 内核下, watchdog的基本工作原理是:当watchdog启动后(即/dev/watchdog 设备被打开后),如果在某一设定的时间间隔内/dev/watchdog没有被执行写操作
2017-08-05 17:25:12
7900
转载 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
2602
原创 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
1672
原创 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
1955
原创 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
2112
原创 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
1067
原创 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
1703
原创 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
2097
原创 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
1960
原创 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
1192
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
4321
原创 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
2652
原创 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
2820
原创 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
4345
原创 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
2200
原创 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
1486
原创 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
2518
原创 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
2951
原创 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
1321
原创 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
2106
原创 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
3600
原创 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
2659
原创 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
1569
原创 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
1145
原创 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
3193
原创 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
3782
MySQL 5.1参考手册
2012-06-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人