Android内核的根文件系统

基于Android13的系统启动流程分析(三)之FirstStageMain阶段 init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init1. Bootloader 引导当按下设备电源键时,最先运行的就是 bootloader(固化在ROM的程序),bootloader 的主要作用就是硬件设备(如 CPU、flash、内存)的初始化并加载到RAM,通过建立内存空间映射,为装载 Linux 内核做好准备,。 阅读详情

adb shell 进入linux内核:

首先是Android的文件系统根目录的结构:

# pwd && ls -a -l
/
drwxrwxrwt root      root                   2009-06-10 09:53 sqlite_stmt_journals
drwxrwx--- system   cache             2008-09-06 22:51 cache
d---rwxrwx system   system          1970-01-01 08:00 sdcard
lrwxrwxrwx root     root                    2009-06-09 22:11 etc -> /system/etc
drwxr-xr-x root     root                      2008-09-06 22:45 system
drwxr-xr-x root     root                      1970-01-01 08:00 sys
drwxr-x--- root     root                      1970-01-01 08:00 sbin
-rw-r--r-- root     root             117    1970-01-01 08:00 runme.sh
dr-xr-xr-x root     root                        1970-01-01 08:00 proc
-rwxr-x--- root     root         1704     1970-01-01 08:00 init.trout.rc
-rwxr-x--- root     root         9329     1970-01-01 08:00 init.rc
-rwxr-x--- root     root         1677     1970-01-01 08:00 init.goldfish.rc
-rwxr-x--- root     root       106636  1970-01-01 08:00 init
-rw-r--r-- root     root          118       1970-01-01 08:00 default.prop
drwxrwx--x system   system          2008-09-06 22:51 data
drwx------ root     root                       2009-06-07 16:29 root
drwxr-xr-x root     root                      2009-06-09 22:11 dev
sqlite_stmt_journals :一个根目录下的tmpfs文件系统,用于存放临时文件数据。
cache : 是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。
sdcard :是SD卡 中的FAT32文件系统挂载的目录
etc   :指向 /system/etc ,众所周知的配置文件存放目录
system :是一个很重要的目录,系统中的大部分东西都在这里了,以下是目录结构:

# ls -a -l /system
drwxr-xr-x root     208              1970-01-01 08:00 xbin
drwxr-xr-x root     root              1970-01-01 08:00 modules
drwxr-xr-x root     root              2008-08-01 20:00 framework
drwxr-xr-x root     root              2008-08-01 20:00 fonts
drwxr-xr-x root     root              2008-08-01 20:00 etc
-rw-r--r-- root     root      2197 2008-08-01 20:00 build.prop
drwxr-xr-x root     root              2008-08-01 20:00 media
drwxr-xr-x root     shell             2008-08-01 20:00 bin
drwxr-xr-x root     root              2008-08-01 20:00 usr
drwxr-xr-x root     root              2008-08-01 20:00 app 
drwxr-xr-x root     root              2008-09-06 22:45 lost+found
drwxr-xr-x root     root              2008-08-01 20:00 lib
drwxr-xr-x root     root              2008-08-01 20:00 sd
-rw-r--r-- root     root        145 2008-08-01 20:00 init.rc

sys :用于挂载 sysfs文件系统。 在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值 
sbin : 只放了一个用于调试的adbd程序 。 
proc :/proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。
data :存放用户安装的软件 以及各种数据。 
root :什么都没有。 
dev :不用多说了,设备节点文件的存放地。

 

下面介绍非目录的文件:


runme.sh用于 SD 卡中 EXT2文件系统的自动 挂载动作的脚本。 
init.trout.rc,init.rc,init.goldfish.rc 是初始化文件. 
init是系统启动到文件系统的时候第一个运行的程序。


从以上的根目录分析来看,Android的根文件系统并非标准的Linux文件系统,所以以后还得仔细分析一下启动过程,才能认识Android系统。
今天要来分析一下Android 文件 系统 的/system目录的结构。

  /system目录是在Android文件系统占有及其重要的位置,基本上所有的工具 和应用程序 都在这个目录下,我看来是一个真正的root fs。他在Android手机 中存放在nandflash的mtd3中,是一个yaffs2文件系统,在启动时被挂载在root的/system目录下,其中包含有:

# pwd && ls -a -l 
/system
drwxr-xr-x root     208              1970-01-01 08:00 xbin
drwxr-xr-x root     root              1970-01-01 08:00 modules
drwxr-xr-x root     root              2008-08-01 20:00 framework
drwxr-xr-x root     root              2008-08-01 20:00 fonts
drwxr-xr-x root     root              2008-08-01 20:00 etc
-rw-r--r-- root     root      2197 2008-08-01 20:00 build.prop
drwxr-xr-x root     root              2008-08-01 20:00 media
drwxr-xr-x root     shell             2008-08-01 20:00 bin
drwxr-xr-x root     root              2008-08-01 20:00 usr
drwxr-xr-x root     root              2008-08-01 20:00 app 
drwxr-xr-x root     root              2008-09-06 22:45 lost+found
drwxr-xr-x root     root              2008-08-01 20:00 lib
drwxr-xr-x root     root              2008-08-01 20:00 sd
-rw-r--r-- root     root        145 2008-08-01 20:00 init.rc
下面逐个分析其中的目录:

xbin      :下放了很多系统管理工具,这些工具不是到 toolbox的链接,每个都是可执行程序。如果你看到这些命令你会发现他们根本不常用,他们都是为系统管理员准备的,是一些系统管理和配置工具。这个文件夹的作用相当于标准Linux文件系统中的 /sbin。我的手机此目录下有busybox,肯定是改过的,应该是破解者加上的。
modules :使用来存放内核模块(主要是fs和net)和模块配置文件的地方。
framework : 是JAVA平台 的一些核心文件,属于JAVA平台系统框架文件。里面的文件都是.jar和.odex文件。
                   备注:什么是odex文件? odex是被优化过的JAVA程序文件,体积通常是.jar的4倍左右。执行效率比.jar高。
fonts          :很显然,这是字体库文件的存放目录。
etc             :这里存放了系统中几乎所有的配置文件,根目录下的/etc就链结于此。
build.prop   :是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置 和改变,类似于/etc中的文件。
media       :里面主要是存放了系统的铃声 的,分为 notifications(通知)、ui(界面)、alarms(警告)和ringtones(铃声),里面都是.ogg音频文件。
bin             :众所周知,是存放用户常用的工具程序的,其中大部分是到toolbox的链接(类似嵌入式Linux中的busybox)。toolbox应该是google简化版的busybox,我还没深入研究过。
usr            :用户的配置文件,如键盘 布局、共享、时区文件等等。您可以cat 来看看。
app           :顾名思义,存放的是Android系统自带的JAVA应用程序。
lost+found :yaffs文件系统固有的,类似回收站的文件夹,只有是yaffs文件系统都会有。
lib               :存放几乎所有的共享库(.so)文件。
sd              :SD卡 中的EXT2分区的挂载目录
init.rc        :一个初始化脚本,用于将/system/modules和/system/xbin挂载为cramfs,避免系统被无意破坏。

Android系统启动流程3 ---linux根文件系统的构建 linux启动内核后,会构建根文件系统,之后才可以使用init进程,进而启动其他应用程序 1. 为什么需要根文件系统 init进程在根文件系统中,因此需要根文件系统,来向内核提供init进程 根文件系统提供了根目录,linux通过根文件系统,可以对linux的文件进行管理。 etc目录下的文件,是对linux内核进行配置的。而这些文件是存储在根文件系统中的。 shell命令程序在根文件系统中(busybox在根文件系统中) 只有内核本身,是不能工作的。必须要有根文件系统(/etc目录下的配置文件,she 阅读详情

相关推荐

虚拟根文件系统与真实根文件系统

引言:根文件系统的noinitramfs已经分析,继续上文未完的initramfs和Android根文件系统分析,这两者有什么关系?1.initramfs对于initramfs,kernel 2.5开始引入,其实质是在内核镜像中附加一个cpio包(cpio一个用于备份、还原的工具,主要用于cpio和tar文件),在该cpio包中包含了一个小型的文件系统。当内核启动时,会尝试解开这人 cpio包,并且

kevin_wz的专栏 3897

Android 10.0 根文件系统和编译系统

1, 讲解android根文件系统结构和组成2, 讲解android系统镜像的概念和拆包3, 讲解Android系统源码结构4, 讲解Android系统编译规则5, 讲解Android系统ADB使用和Log日志调试方法6, 讲解Android系统Android.mk和Android.bp是各种规则 

Android根文件系统与内核镜像构建实战详解

手动敲命令终究效率低下。建议封装一键构建脚本:/bin/bashset -eecho "🎉 构建完成!输出位于 out/dist/"再加上CI/CD流水线,真正实现“提交即构建”。整个Android系统从源码到运行的过程,就像一场精密的交响乐演奏。每一个组件都有其角色,每一次交互都有其节奏。只有当你真正理解了init为何等待,明白了SELinux如何阻止非法访问,才会意识到:这不是一堆静态文件的堆积,而是一个充满生命力的有机体。而这,正是嵌入式开发的魅力所在。💡。

weixin_42524864的博客 699

Android的linux内核解耦

Android的linux内核解耦

鹅鹅鹅的博客 5938

STM32U575 ADC+DMA+UART数据采集实战:CubeMX配置避坑与代码实现

在嵌入式开发中,ADC采集与DMA传输是提升系统实时性的关键技术。通过DMA将ADC数据直接搬运到内存,可大幅降低CPU占用,实现高效连续采样。结合UART的DMA发送,能进一步解放CPU,适用于工业采集、信号监测等场景。本文以STM32U575为例,详解CubeMX中ADC、DMA、UART的配置要点,包括时钟树、DMAMUX映射、循环模式等,并给出代码实现与常见问题排查,帮助开发者快速构建稳定的数据采集链路。

weixin_29194255的博客 170

解决Anaconda环境下catkin_make编译报错:Python路径冲突与empy模块缺失

本文详细分析了在Anaconda环境下使用catkin_make编译时出现的Python路径冲突与empy模块缺失问题,提供了快速解决方案和永久性环境配置方法。通过显式指定Python解释器路径或调整Anaconda配置,有效解决编译报错问题,适用于ROS开发与科学计算并行的场景。

weixin_28829629的博客 353

Linux 内核启动挂载android根文件系统过程分析

源代码编译来的,编译后在/out/target/product/generic/root/ 其源码在/system/core/init/init.c Init.c 主要功能: (1)安装SIGCHLD 信号。(如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。因此需要对SIGCHLD 信号做出处理,回收僵尸进程的资源,避免造成不必要的资源浪费。)

ConceptCon 1476

EL6751实战指南:从协议解析到工业现场部署

本文详细介绍了EL6751网关在工业通信协议转换中的应用,从CANopen协议解析到EtherCAT系统部署的实战指南。通过协议栈位置、数据封装方式和通信模型差异的深入分析,帮助工程师高效实现EtherCAT主站与CANopen从站设备间的无缝对接,提升工业现场通信效率。

weixin_30338481的博客 547

linux 内核启动过程以及挂载android 根文件系统的过程

主要介绍linux 内核启动过程以及挂载android 根文件系统的过程,以及介绍android 源代码中文件系统部分的浅析。       主要源代码目录介绍 Makefile (全局的Makefile) bionic (Bionic 含义为仿生,这里面是一些基础的库的源代码) bootable (引导加载器) build (build 目录中的内容不是目标所用的代码,而是编译和配置所需

ConceptCon 953

ESP32S3接入讯飞在线语音识别教程及配套源代码

本文介绍了如何使用ESP32-S3开发板实现讯飞在线语音识别功能。首先,需要准备硬件设备,包括ESP32-S3开发板、麦克风模块、MicroSD卡模块和扬声器模块。接着,安装Arduino IDE并配置ESP32-S3开发环境,注册讯飞开放平台账号并获取API凭证。然后,通过I2S接口连接麦克风模块,并编写代码实现语音录制、Base64编码、API请求和识别结果处理。代码包括初始化WiFi、麦克风、系统时间,以及录制语音、发送请求、解析响应等功能。最后,通过按键触发录音,并将识别结果输出到串口。

2401_88800025的博客 748

【系统架构设计师-2024下半年真题】案例分析-参考答案及部分详解(完整回忆版)

根据h中描述,为了保证高可靠性,有ping/echo,心跳机制两种策略,从资源利用率问为啥心跳更好。王工觉得使用ping/echo好,但李工觉得从系统资源利用率来说,使用心跳机制好 1、针对质量属性可以使用ping/echo和心跳模式实现,分别简述ping/echo和心跳的实现原理。 2、张工认为心跳策略比较适合,简述为什么?

数据知道的博客 1万+

linux文件系统启动流程,linux 内核启动过程以及挂载android 根文件系统的过程

转载作者:汕头大学—黄珠唐时间:2009 年10 月29日主要介绍linux 内核启动过程以及挂载android 根文件系统的过程,以及介绍android 源代码中文件系统部分的浅析。主要源代码目录介绍Makefile (全局的Makefile)bionic (Bionic 含义为仿生,这里面是一些基础的库的源代码)bootable (引导加载器)build (build 目录中的内容不是目标所...

weixin_34496367的博客 268

2026爬虫反爬终极对抗:AST解混淆+算法还原+Python复现全流程实战

本文分享了破解JS加密参数的完整流程,重点介绍AST解混淆和算法还原方法。针对电商网站常见的混淆手段(变量名混淆、控制流平坦化、字符串加密等),作者提出一套高效解决方案:通过AST解析还原可读代码,结合Chrome断点调试定位加密函数,最后用Python精准复现加密逻辑。文章包含具体的代码实现,如字符串数组还原的AST操作示例,并详细说明了从样本采集到验证测试的全流程。该方法已成功应用于10多个网站,将破解时间从一周缩短至一天,为处理JS加密参数提供了可复用的技术方案。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1525

linux 内核启动过程以及挂载android 根文件系统的过程,以及介绍android 源代码中文件系统部分的浅析

以前下载的一个文档,回过头来看还是挺好的,再次分享给大家: 原下载链接:http://download.youkuaiyun.com/detail/tommy_wxie/3966900        主要源代码目录介绍 Makefile (全局的Makefile) bionic (Bionic 含义为仿生,这里面是一些基础的库的源代码) bootable (引导加载器) build (bui

IT人生 1645

SAP DRC 是什么?一文读懂 SAP Document and Reporting Compliance 的定位、架构与落地案例

把视线拉长,会发现SAP DRC的价值并不仅是用来交差的工具。它更像是企业在全球化经营中建设的一套公共底座:既能以最低的重复成本去应对各国不断演进的监管要求,也能为财务数字化与供应链协同提供可信数据回路。依托本地与云的分层职责、与的生态联动、以及按国家不断更新的任务目录,企业可以将合规变成一种标准化、工程化、可持续运营的能力。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1654

YOLOv26与其他目标检测算法的对比分析

本文对YOLOv26与其他主流目标检测算法进行了全面对比分析。YOLOv26在COCO数据集上达到96.0% mAP@0.5和79.0% mAP@0.5:0.95,显著优于其他YOLO系列算法,同时保持85FPS的推理速度和35MB的轻量级模型。相比两阶段算法(如Faster R-CNN),YOLOv26在速度、模型大小和内存占用方面优势明显;相比Anchor-free算法(如CenterNet),YOLOv26在速度和模型压缩方面更优。其核心创新包括动态锚框分配、自注意力机制和轻量级设计,使其成为适用于复

一键难忘的博客 994

安卓手机挂载Linux,android 挂载NFS教程

0,在Ubuntu新建nfs目录:#mkdir/home/shuimu/arm_project/rootfs将FORLINX_6410_yaffs2_v1.0.tgz复制到rootfs中,解压当前文件夹#tar–zxfFORLINX_6410_yaffs2_v1.0.tgz1.烧写mmc,uboot,zImage到开发板。2,在ubuntu上安装nfs-server-kernal。编辑/etc...

weixin_28851659的博客 2216

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

linux 内核启动过程以及挂载android 根文件系统的过程 ( 转)

       主要介绍linux 内核启动过程以及挂载android 根文件系统的过程,以及介绍android 源代码中文件系统部分的浅析。       主要源代码目录介绍Makefile (全局的Makefile)bionic (Bionic 含义为仿生,这里面是一些基础的库的源代码)bootable (引导加载器)build (build 目录中的内容不是目标所用的代码,而是编译和配置所需要...

weixin_33890499的博客 170

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

linux根文件系统目录与linux原码目录

为学习一下android驱动开发,安装了linux系统,编译android必只能在linux系统下进行。选用了使用freescale的android开发板,下载开发文档后几乎只有关开怎么烧录镜像与编译镜像与根文件系统的方法,然后就没有了,了解根android系统是使用linux内核,android硬件厂商不提供开源代码,只提供二进制文件使得android平台变成一个开放不开源的平台,在一些老书资料...

魔侠的博客 312
上一篇: 基于android2.3.5系统:开天辟地Android启动机制[一]
下一篇: 基于mjpg-streamer-r63的源码分析之:基础知识详细解释[一]
wang-bob
博客等级 码龄20年 356粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值