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

3DMax马克杯制作教程

01 在前视图创建一个【圆柱体】,设置参数,长度为32,高度为82;高度分段12、边数为16;如图所示。 02 点击鼠标右键,把圆柱体转换为可编辑多边形,如图所示。 03 在修改面板中,选择【多边形】层级,在视图中选择所示的面,使用缩放工具稍微缩小一点,如图所示。 04 点击【插入设置】,如图所示。 设置插入数量为2.5mm。 05 点击【挤出设置】,如图所示。 ...

youximoxingEDO的博客 3479

基于OpenCV的驾驶疲劳检测与预警系统设计

PERCLOS(Percentage of Eye Closure)是一种基于眼睑闭合程度的疲劳度量指标。在基于OpenCV的驾驶疲劳检测与预警系统设计中,PERCLOS可以用于检测驾驶员的眼睑闭合程度,以判断其是否疲劳。该函数用于检测视频流中人脸的疲劳程度。具体地,该函数通过检测人脸的眼睛和嘴巴的状态来评估人脸的疲劳程度。眼睛状态是通过计算眼睛的长宽比(eyear)来判断,如果长宽比小于某个阈值,则认为眼睛闭合,表示人处于疲劳状态。

2301_79810943的博客 2327

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

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

ConceptCon 1476

在摩尔线程 MTT S80 上使用 Ollama 进行 DeepSeek R1 蒸馏版模型推理

本文主要介绍了如何在摩尔线程 MTT S80 上通过 Ollama 快速完成DeepSeek R1 蒸馏系列模型的推理。

摩尔线程blog中心 3600

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

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

ConceptCon 953

从零搭建VGGNet

在 forward 方法中实现了前向传播过程,包括卷积、激活、池化和平铺操作,最后通过全连接层得到分类结果。使用 torch.onnx.export 将模型导出为 ONNX 格式的文件 vgg.onnx。导出 ONNX:将模型导出为 ONNX 格式,便于在其他平台或框架中使用。定义 VGG 网络:构建了一个包含多个卷积层、池化层和全连接层的网络。使用 torch.save 将整个模型保存为 vgg.pth 文件。前向传播:对输入数据进行前向传播,得到输出结果。保存模型:将模型保存为 .pth 文件。

开源驱动,创造价值;坦诚清晰,快速失败;让复杂可计算。 521

从Gitee上部署视觉工程到Linux虚拟机

(使用SVM来识别装甲板的编号,此处手机上的图片中只有灯条没有数字,SVM无法识别出编号。这两行代码的意义是,当SVM识别不出或者识别不到编号时,把装甲板的编号默认为2号。找到自瞄程序中,数字识别类下的这两行代码,把注释去掉。这样,每次打开新的终端时,环境变量都会自动设置。(2)查看虚拟机设置选项,检查虚拟机USB接口是否为3.0及以上的接口。如果不是,要更改好。这样,每次打开新的终端时,环境变量都会自动设置。后,每次打开终端时自动设置这些环境变量,你可以将。打开第一个终端,用来挂ROS的内核启动页面。

2301_81035291的博客 1520

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

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

weixin_34496367的博客 268

从零开始之stm32之CAN通信

CAN通信极简教程(小白友好版),从小白的视角了解并实现简单的STM32F103的CAN通信,直接上手。

qq_30993593的博客 1308

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

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

IT人生 1645

天气预测模型:基于时间序列分析的数学建模与实战案例

目录引言时间序列分析介绍使用Matlab进行天气预测实战案例:天气预测结论天气预测一直是气象学和相关领域的重要研究问题之一。数学建模是进行天气预测的有效方法之一,其中时间序列分析是常用的技术。在本篇博客中,我们将介绍时间序列分析的基本原理,演示如何使用Matlab进行模型建立和预测,并通过一个实战案例来展示模型的应用和分析。时间序列分析是一种用于分析和预测时间序列数据的统计方法。天气数据通常具有时间依赖性和随机性,因此时间序列分析可以帮助我们了解天气的变化趋势和规律,并提供对未来天气的预测。时间序列分析通常

YOLO 1546

大聪明教你学Java | Seata 2.5 从下载到运行:全流程编译部署教程

Seata 2.5 版本带来了不少特性优化,但实际部署时却发现一个尴尬问题:全网找不到一篇完整覆盖「Git 源码下载→本地编译→环境配置→启动验证」的实操教程。作为一名踩遍无数坑才成功跑通的开发者,我深知这个过程的煎熬:Git 拉取源码后编译失败、依赖版本冲突、配置文件参数混乱、启动时端口占用或连接报错… 每一个坑都能耗费数小时排查。为了让后续开发者少走弯路,我将自己从0到1的完整实操经验整理成文,跟着步骤走即可成功运行 Seata 2.5.

不肯过江东丶 2072

安卓手机挂载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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

weixin_33890499的博客 170

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

魔侠的博客 312

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: 基于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、付费专栏及课程。

余额充值