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

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


  • ramfs, tmpfs, rootfs, initramfs的区别

    什么是文件系统? 如果你接触过Linux系统中的文件系统,相信你对下面这些名词肯定不会陌生,例如:ext2, ext3, ext4, FAT, FAT32, tmpfs, rootfs, NTFS, YAFFS, sysfs, procfs 等等。俺滴神啊,怎么会有这么多不同类型的文件系统啊,那么文件系统到底是个什么东西呢? 下面是引用自Wikipedia上关于文件系统的介绍: 在计算机系统中,文件系统(file system)是一种存储和组织数据的一种方法,它使得对数据发访问和查找变得更加容易。 文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理存储设备所用的数据块的概念,用户使用文件系统来保存数据而不必关系数据实际保存在物理存储设备的地址为多少的数据块中,用户只需要记住这个文件的所属目录和文件名即可。在写入数据之前,用户也不必关心硬盘上哪个数据块没有被使用,所有的物理存储设备的存储空间的分配和释放功能都是由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。 文件系统可以用来在不同的物理存储介质上存储和组织数据,通常最常见的物理存储设备是硬盘,光盘以及Flash,磁带等等。但是,在某些情况下文件系统也可以使用内存(random-access memory,RAM)作为文件的存储介质,例如tmpfs,当文件存储在这种存储介质上时,一旦计算机掉电之后,该介质上面的所有文件就都消失了。甚至有的文件系统可能根本没有对应的文件,例如如proc文件系统。 什么是...


  • 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...


  • 单生产者和单消费者共同操作同一个环形缓冲区的问题

    问题描述 本问题只针对单个生产者进程和单个消费者进程的问题进行讨论。 生产者进程和消费者进程之间通过共享内存的方式进行IPC通信。 环形缓冲区存放在共享内存中,并且环形缓冲区中环形缓冲单元的个数为 2^N 个(N为大于1的正整数),环形缓冲区的数据结构定义为: #define RING_BUFFER_SIZE N struct RingBuffer{ int w_pos; //环形缓冲区写入位置值 int r_pos; //环形缓冲区读取位置值 data_block data[(1<<N)]; //data_block...