• Linux I/O 模型详解

    Linux I/O 模型 在 Linux/Unix 系统环境下进行 I/O 编程时,我们经常会遇到这些似懂非懂的名词: Synchronous I/O Asynchronous I/O Blocking I/O Non-blocking I/O 首先,这里讲的 I/O 指的是用户空间的 I/O,并且主要侧重于网络编程中的...


  • Linux 内核加载启动过程分析

    本文是基于 Linux Kernel 4.4.49 版本内核源码中的 x86 32 位体系结构进行分析。 BIOS 传统模式下的 X86 PC 启动过程 什么是 BIOS? 简单来说 BIOS 也是一段程序代码,但是它比较特殊,它是 CPU 启动后执行的第一段代码,存储在...


  • ramfs, tmpfs, rootfs, initramfs的区别

    什么是 ramfs? Ramfs 是一个空间大小动态可变的基于 RAM 的文件系统,它是Linux 用来实现磁盘缓存(page cache and dentry cache)的文件系统。 ramfs 是一个仅存在与内存中文件系统,它没有后备存储(例如磁盘),也就是说 ramfs 文件系统所管理的文件都是存放在内存中,而不存放在磁盘中,如果计算机掉电关闭,那么 ramfs 文件系统中所有文件也就都没有了。 当普通磁盘中的文件被操作系统加载到内存中并分配 page 来存储文件中的内容,然后进程通过读写内存中文件对应的...


  • Android HAL 层原理分析

    Android HAL 简介 Android 系统硬件抽象层(Hardware Abstract Layer)运行在用户空间中,它向下屏蔽了硬件驱动的实现细节,向上提供了硬件访问的服务。通过 HAL 层,Android 系统分为两层来支持硬件设备,其中一层实现在用户空间,另外一层实现在内核空间中,它在 Android 系统框架中的位置如下图所示。传统的 Linux 系统则把对硬件的支持和管理全部放在内核空间中,即把对硬件的全部支持都放在硬件驱动模块当中。 为什么要添加一个 HAL 层? Android 在用户空间中新建一个的 HAL...


  • Android NDK vs AOSP Build System

    前言 最近自己一直在做有关 Android 系统源码底层的开发,就经常接触到 Android NDK 和 AOSP(Android Open Source Project) Build System 这两个东西,但是由于他们两者都可以将 C/C++ 代码编译成可执行文件或者动态链接库,导致我经常将这两者弄混淆了。所以,痛定思痛,不想再被这种似四而非的感觉折磨了,今天就抽空写下这篇文章来捋清楚两者之间关系。 Android NDK Android NDK...