Fly Higher's Blog
Do one thing and do it well
-
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...
-
Ubuntu 软件源详解
什么是软件源? Ubuntu 中安装软件的方式 在 Ubuntu 中软件安装的方式和 Windows 系统中双击 exe 文件的傻瓜式软件安装的方式有很大的不同,它主要可以分为下面三种安装方式: 通过 apt 包管理工具从软件源中安装 通过 deb 格式的软件包安装 从软件源码手动编译安装 软件源介绍 Ubuntu 系统中软件源其实本质上就是一个软件仓库,在这个仓库中包含了...