友善 friendlycore 挂载 overlayfs 过程:

uboot 引导系统启动的时候加载 ramdisk.img  这个 cpio 格式的 initrd(虚拟文件系统)。

  注意: ramdisk.img 是 cpio 文件的 gzip 压缩文件。 要解压需要添加 .gz 后缀,否则解压软件不认。

内核启动最后运行 initrd 文件系统下的 /init 脚本。

  init 脚本调用 mountroot 方法。    mountroot 在 /script/local 文件内。

    mountroot 调用 local_mount_overlay 方法。

      local_mount_overlay 内执行  mount -t overlay.....   挂载 overlayfs。

      此时,emmc 的分区正式被挂载。 ramdisk 被覆盖。 /script 目录将不可见。 也就找不到挂载 overlayfs 相关的代码了。

      系统启动后是找不到挂载代码的。

overlayfs 介绍

FriendlyCore  Emmc 被分为三个分区。 可以通过 sudo fdisk -l 进行查看。

  mmcblk0p1  /boot 分区

  mmcblk0p2  overlay low 分区 只读

  mmcblk0p3  overlay 工作分区,可读可写。

uboot 启动内核时传入了 overlay 的工作分区路径。

如果想查看 overlay 原始使用的分区可以手动挂载 相应分区(挂载为只读)。

一些指令操作:

起点在 /boot 目录 的 ramdisk.img
// 挂载真正的boot到目录下
mount /dev/mmcblk0p1 /boot

// 可以看到文件 /boot/ramdisk.img
// copy出来单独分析:
cp ramdisk.img ~
cd ~

file ramdisk.img
// 文件格式为 gzip

// 添加.gz后缀。并解压
mv ramdisk.img ramdisk.img.gz
gunzip ramdisk.img.gz
// 解压得到 ramdisk.img
file ramdisk.img
// 可以看到文件的真正格式是 cpio

// 解压
cpio -i -F ramdisk.img

// 得到ramdisk的完整内容。

分析得到:

根目录下 init 引用 /script/local   并调用 /script/local 文件内 mountroot 方法。
    mountroot() 调用  local_mount_overlay()   mount -t overlay.....

FriendlyCore overlayfs 挂载方式的更多相关文章

  1. Nginx入门之两种handler函数的挂载方式

    请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 接着上次的文章,今天研究<深入理解Nginx模块开发与架构解析>一书中给出的mytest的例子,发现和 /tengine.t ...

  2. Docker与数据:三种挂载方式

    操作系统与存储 操作系统中将存储定义为 Volume(卷) ,这是对物理存储的逻辑抽象,以达到对物理存储提供有弹性的分割方式.另外,将外部存储关联到操作系统的动作定义为 Mount(挂载). Dock ...

  3. aliyun添加数据盘后的物理分区和lvm逻辑卷两种挂载方式

    一.普通磁盘分区管理方式 1.对磁盘进行分区 列出磁盘 # fdisk -l # fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Change ...

  4. Glusterfs volume 的三种挂载方式

    在上一篇中我们介绍了Glusterfs在CentOS7上的安装,并且提到Glusterfs client端有三种:Native client,NFS,Samba, 今天我们就来一起学习下这三种方式. ...

  5. parastor2000挂载方式

    1.先授权 2.客户端安装使用0528parastor-client-centos6.6-38390.tar.xz clusconf -f fatnodes --sync-do "cd /m ...

  6. [Vue]实例化Vue时的两种挂载方式el与$mount

    Vue 的$mount()为手动挂载,在项目中可用于延时挂载(例如在挂载之前要进行一些其他操作.判断等),之后要手动挂载上.new Vue时,el和$mount并没有本质上的不同. 1.el Vue实 ...

  7. 实例化Vue时的两种挂载方式el与$mount

    el 与mount 都是挂载. el vue官网的介绍https://cn.vuejs.org/v2/api/#el mount vue官网的介绍 https://cn.vuejs.org/v2/ap ...

  8. win10专业版Hyper-v下Docker挂载volume的方式使用Gitlab(汉化版)保存资料数据(使用外部redis)

    目录 话题 (191) 笔记 (137) 资料区 (2) 评价 (33) 介绍 讨论区 话题 win10专业版Hyper-v下Docker挂载volume的方式使用Gitlab(汉化版)保存资料数据( ...

  9. CVE-2015-1328 Ubuntu 12.04, 14.04, 14.10, 15.04 overlayfs Local Root

    catalog . 引言 . Description . Effected Scope . Exploit Analysis . Principle Of Vulnerability . Patch ...

随机推荐

  1. IntelliJ IDEA 安装使用 FindBugs 代码分析详述

    1 下载 2 重启idea 选中文件,右键 附:一些常见的错误信息 Bad practice 代码中的一些坏习惯 Class names should start with an upper case ...

  2. docker 安装jenkins 发布 asp.net core 2.0

    安装Docker 其实安装Docker的过程,大家可以到Docker官网找到自己相对应的安装文档进行安装,Docker区分CE和EE的两个版本,具体这两个版本有什么区别,大家自行查阅相关资料,这里不再 ...

  3. 怎样在sql server profiler跟踪时只显示自己关心的内容

    当我们想知道.net程序到底执行了哪些SQL的时候,通常会使用sql server profiler,但是如果不加设置,我们程序执行的sql通常会被系统的SQL淹没,通过以下的方法,可以只显示我们需要 ...

  4. djang-celery使用带密码的redis

    前言: 网上很多django-celery使用redis(使用不带密码的redis)的用法都是千篇一律,那带密码的redis该怎么使用了呢,没有看到一篇有帮助的,在官网搜了下,发现以下用法,请看下面 ...

  5. codesmith设置mysql的连接字符串

    .net core,codesmith连不上 server=192.168.3.240;Initial Catalog=tpmdb;User=root;Password=root .net frame ...

  6. 【视频开发】opencv不能读取MP4格式文件

    用OpenCV对视频进行处理时,不能打开.mp4格式的文件.后来解决办法是用ffmpeg.exe将mp4文件转码为avi文件,然后再进行处理.但是转码过程比较慢.后来查看opencv源代码,发现它也是 ...

  7. [ERROR ]Failed to execute goal org.codehaus.mojo:flatten-maven-plugin:1.1.0:flatten (flatten) on project

    今天在启动项目的时候,莫名的Maven install命令的时候出现错误 错误提示:Failed to execute goal org.codehaus.mojo:flatten-maven-plu ...

  8. [原创]K8Cscan for Python 2.0

    0x000 简介 K8Cscan扫描器Python版支持Windows和Linux系统 详情参考:https://www.cnblogs.com/k8gege/p/10519321.html 0x00 ...

  9. nginx 反向代理报400错误与Host关系

    转载自:https://blog.csdn.net/qq_22208737/article/details/80787396 如果后端真是的服务器设置有类似防盗链或者根据http请求头中的host字段 ...

  10. C++和c语言的区别

    在大家眼中c++与C语言很像,但两个有本质的区别,C语言是面向过程的,而C++是面向对象的,下面就给大家梳理梳理. 1.C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中:而C++ ...