精华内容
下载资源
问答
  • 怎么挂载android system.img

    千次阅读 2016-01-05 10:42:47
    首先使用simg2img将其解压为raw image, 然后用mount 挂载。 如  out/host/linux-x86/bin/simg2img out/target/product//system.img raw_system.img sudo mount -t ext4 raw_system.img /mnt/android/system

    首先使用simg2img将其解压为raw image, 然后用mount 挂载。

     out/host/linux-x86/bin/simg2img out/target/product/<type>/system.img raw_system.img

    sudo mount -t ext4 raw_system.img /mnt/android/system

    展开全文
  • Android P 如何挂载system镜像到根目录

    千次阅读 热门讨论 2018-10-22 16:38:55
    而系统起来之后也就不存在system分区了,而是直接把system镜像挂载到/根目录上。那么这个操作是怎么进行的呢? system.img默认是需要使能dm-verity来挂载的,那么这就涉及到如何使能dm-verity来挂载/根分区。还有一...

    Android O/P 版本以来,谷歌加入了A/B system的特性,此时ramdisk和system是一起放在同一个system.img镜像中的。而系统起来之后也就不存在system分区了,而是直接把system镜像挂载到/根目录上。那么这个操作是怎么进行的呢?
    system.img默认是需要使能dm-verity来挂载的,那么这就涉及到如何使能dm-verity来挂载/根分区。还有一个重要的点,如果我们想要禁用dm-verity功能又要如何操作,这又涉及更深的层次,如果可配置/根分区的挂载方式为dm-verity或者非dm-verity方式。带着这些问题,我们进行逐步的深入研究。

    vbmeta

    Android P 中有一个vbmeta分区,这是一个主要起检验作用的分区,存放有各个分区的校验数据以及签名和其他信息。主要分三个部分:Vbmeta Header(头部)/Authentication Data(校验数据)/Auxiliary Data(其他附加信息)。我们可以使用android在带的avbtool对vbmeta.img进行解析:

    avbtool info_image --image vbmeta.img > vbmeta.img.info
    

    解析出来的结果实例如下:

     Minimum libavb version:   1.0
     Header Block:             256 bytes
     Authentication Block:     576 bytes
     Auxiliary Block:          3456 bytes
     Algorithm:                SHA256_RSA4096
     Rollback Index:           0
     Flags:                    0
     Release String:           'avbtool 1.1.0'
     Descriptors:
         Chain Partition descriptor:
           Partition Name:          system
           Rollback Index Location: 2
           Public key (sha1):       cdbb77177f731920bbe0a0f94f84d9038ae0617d
         Chain Partition descriptor:
           Partition Name:          recovery
           Rollback Index Location: 1
           Public key (sha1):       2597c218aae470a130f61162feaae70afd97f011
         Hash descriptor:
           Image Size:            35553280 bytes
           Hash Algorithm:        sha256
           Partition Name:        boot
           Salt:                  baa1ce5d7db69d1b3943a78b5b142ae4d77b4ed60b9885c8661e845172b29a13
           Digest:                ec7cb1ad89fed3104a03191434d5487b5b4acc78e6bfeb84d7178af40df7db75
           Flags:                 0
         Hashtree descriptor:
           Version of dm-verity:  1
           Image Size:            1056714752 bytes
           Tree Offset:           1056714752
           Tree Size:             8327168 bytes
           Data Block Size:       4096 bytes
           Hash Block Size:       4096 bytes
           FEC num roots:         2
           FEC offset:            1065041920
           FEC size:              8421376 bytes
           Hash Algorithm:        sha1
           Partition Name:        vendor
           Salt:                  abbf0829ed7bc08913b83f9a994a37ad2a85b5e9
           Root Digest:           39a22a035ebff2d339dc682603adedb91da01374
           Flags:                 0
         Hash descriptor:
           Image Size:            176641 bytes
           Hash Algorithm:        sha256
           Partition Name:        dtbo
           Salt:                  386837807aa5a7d9cbe51e7f768009f4e5fca5190af4b3e856a7c96a96c33e0a
           Digest:                dabdbe5be19c38a3428efd046182d215f8522ab7cd3804e84f196fe73e9052f7
           Flags:                 0
    
    
    • Vbmeta Header

    在Android自带的Library/avb/libavb/avb_vbmeta_image.h中可以找到该结构体的定义:

    typedef struct AvbVBMetaImageHeader {
    	...
    /* 120: Flags from the AvbVBMetaImageFlags enumeration. This must be
     * set to zero if the vbmeta image is not a top-level image.
     */
    uint32_t flags;
    	...
    }AVB_ATTR_PACKED AvbVBMetaImageHeader;
    

    这里我们仅仅截取关键的部分 flags,这个成员标志着是否要使能dm-verity或者verification。

     typedef enum {
       AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED = (1 << 0),
       AVB_VBMETA_IMAGE_FLAGS_VERIFICATION_DISABLED = (1 << 1)
     } AvbVBMetaImageFlags;
    

    这个也就是今天要解说的重点了,刚刚我们提到system image使用dm-verity挂载应该是一个可配置选项,那这个可配置功能就是利用这个flag中的AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED位。如果我们利用adb disable-verity命令操作了设备,设备就会去重写vbmeta分区中对应的该bit位为1,这样在后续的bootloader加载时就会做这个flag的判断,由此确定是否使能dm-verity去挂载system镜像。

    • Authentication Data

    校验数据主要包含了hash摘要和签名,这是为了AVB启动准备的,不再本文讨论范围内,不做深入讲解。

    • Auxiliary Data

    附加数据在system挂载时是需要讲解的,附加数据包含了三类信息:描述符/公钥/公钥元数据。主要介绍描述符,上面的实例可以看到,在Descriptors:一项的后面有很多内容,描述符包括很多类型的描述符,其中有一个与system挂载有关,那就是cmdline descriptor,当然这个并不在vbmeta.img中有体现,因为vbmeta并不需要挂载,这个描述符只会存在于需要被kernel挂载的分区中。

    cmdline

    这里需要提到一些背景,我们知道system.img现在已经和ramdisk打包在一起了,那么system.img就不是挂载到/system的地方了,而是需要直接挂载在/根目录上,以往的版本,对于system的挂载都是由init来完成的,我们只需要修改fstab即可完成对system的挂载,但是现在不同了,根目录的挂载必须要由kernel去完成了。因为根目录挂载是先于init的运行的,没有根目录就不会有init。那么如何由kernel去挂载system.img镜像呢?
    首先我们解析出来system.img中的vbmeta校验数据:

    avbtool info_image --image system.img > system.img.info
    

    解析出来的结果实例如下:

    Footer version:           1.0
    Image size:               3221225472 bytes
    Original image size:      3170316288 bytes
    VBMeta offset:            3220549632
    VBMeta size:              1856 bytes
    --
    Minimum libavb version:   1.0 (Sparse)
    Header Block:             256 bytes
    Authentication Block:     320 bytes
    Auxiliary Block:          1280 bytes
    Algorithm:                SHA256_RSA2048
    Rollback Index:           0
    Flags:                    0
    Release String:           'avbtool 1.1.0'
    Descriptors:
        Hashtree descriptor:
          Version of dm-verity:  1
          Image Size:            3170316288 bytes
          Tree Offset:           3170316288
          Tree Size:             24969216 bytes
          Data Block Size:       4096 bytes
          Hash Block Size:       4096 bytes
          FEC num roots:         2
          FEC offset:            3195285504
          FEC size:              25264128 bytes
          Hash Algorithm:        sha1
          Partition Name:        system
          Salt:                  1215bb10e3488f3f030d9f412c29dd5f3ca07d5a
          Root Digest:           ac8d587b82748d9128e84e8cfd2c004889ba3fd4
          Flags:                 0
        Kernel Cmdline descriptor:
          Flags:                 1
          Kernel Cmdline:        'dm="1 vroot none ro 1,0 6192024 verity 1 PARTUUID=$(ANDROID_SYSTEM_PARTUUID) PARTUUID=$(ANDROID_SYSTEM_PARTUUID) 4096 4096 774003 774003 sha1 ac8d587b82748d9128e84e8cfd2c0
    04889ba3fd4 1215bb10e3488f3f030d9f412c29dd5f3ca07d5a 10 $(ANDROID_VERITY_MODE) ignore_zero_blocks use_fec_from_device PARTUUID=$(ANDROID_SYSTEM_PARTUUID) fec_roots 2 fec_blocks 780099 fec_start 780099"
     root=/dev/dm-0'
        Kernel Cmdline descriptor:
          Flags:                 2
          Kernel Cmdline:        'root=PARTUUID=$(ANDROID_SYSTEM_PARTUUID)'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
    
    

    这里我们终于可以看到前文提到的Kernel Cmdline descriptor,但是很奇怪,这里为什么会有两个描述符呢?
    还记得前面说的可配置功能吗?原来如此,这里第一个cmdline描述符,是使能dm-verity要使用的cmdline,而第二个cmdline描述符,则是禁止掉dm-verity要使用的cmdline。bootloader中需要根据我们前面vbmeta分区中的flag值来确定使用哪一个描述符。然后把cmdline添加到最终的cmdline中并写回到dtb(内存中的dtb),然后把dtb在ram中的存放地址传递给kernel去启动。

    关键的处理流程也是需要libavb的依赖,在avb_slot_verify.c中:

    typedef enum {
      AVB_KERNEL_CMDLINE_FLAGS_USE_ONLY_IF_HASHTREE_NOT_DISABLED = (1 << 0),
      AVB_KERNEL_CMDLINE_FLAGS_USE_ONLY_IF_HASHTREE_DISABLED = (1 << 1)
    } AvbKernelCmdlineFlags;
    
    
     /* Compare the flags for top-level VBMeta struct with flags in
      * the command-line descriptor so command-line snippets only
      * intended for a certain mode (dm-verity enabled/disabled)
      * are skipped if applicable.
      */
     apply_cmdline = true;
     if (toplevel_vbmeta_flags & AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED) {
       if (kernel_cmdline_desc.flags &
           AVB_KERNEL_CMDLINE_FLAGS_USE_ONLY_IF_HASHTREE_NOT_DISABLED) {
         apply_cmdline = false;
       }
     } else {
       if (kernel_cmdline_desc.flags &
           AVB_KERNEL_CMDLINE_FLAGS_USE_ONLY_IF_HASHTREE_DISABLED) {
         apply_cmdline = false;
       }
     }
    
    

    上面是轮询描述符的操作,其中的toplevel_vbmeta_flags就是vbmeta.img中header保存的flags,如果其中AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED被设置为1,那么代表了dm-verity是禁止的,那么会选择cmdline descriptor中的flags为2的作为cmdline,反之选择cmdline descriptor中的flags为1的作为cmdline。

    由此我们就通过传入不同的cmdline的方式来启动kernel,进而挂载根目录,也就是system.img镜像。

    展开全文
  • 方法一: 将他们制作成文件系然后统烧写... 最后将该分区上的文件系统挂载到指定目录即可  请查看init.rc 就知道了  on emmc  mkdir /system  mkdir /data 0771 system system  mkdir /persist 0771 syst

    方法一: 将他们制作成文件系然后统烧写到板子的存储分区上,

                     最后将该分区上的文件系统挂载到指定目录即可

                     请查看init.rc 就知道了 

    on emmc

        mkdir /system
        mkdir /data 0771 system system
        mkdir /persist 0771 system system
        devwait /dev/block/mmcblk0p12
        mount ext3 /dev/block/mmcblk0p12 /system ro
        devwait /dev/block/mmcblk0p13
        exec /system/bin/e2fsck -p /dev/block/mmcblk0p13
        mount ext3 /dev/block/mmcblk0p13 /data nosuid nodev
        mount ext3 /dev/block/mmcblk0p14 /persist nosuid nodev

    on nand

        mkdir /system
        mkdir /data 0771 system system
        mkdir /persist 0771 system system
        # Mount /system rw first to give the filesystem a chance to save a checkpoint
        mount yaffs2 mtd@system /system
        #mount yaffs2 mtd@system /system ro remount
        mount yaffs2 mtd@userdata /data nosuid nodev
        mount yaffs2 mtd@persist /persist nosuid nodev

                 从以上即可知道。

     

    方法二:通过NFS将主机上的文件系统挂载到板子上

     1.  板子上的 nfs 要启动起来(在kernl的文件系统有支持: /android/kernel/fs)

     

    2.  首先定义一个执行mount的脚本,我把它位于/system/etc/mount_nfs.sh

          如常见的工具通过busybox生成之后,可以通过以下方式挂载到指定的目录即可用

          #!/system/bin/sh
          /system/bin/busybox mount -o rw,nolock -t nfs 192.168.1.6:/nfs_srv /data/mnt

         而我们想在是要将文件系统 ramdisk, system, userdata挂载;

        #!/system/bin/sh
       out/target/product/littleton/root/   内核需要使用的 initramfs
       out/target/product/littleton/system  文件系统的系统分区
       out/target/product/littleton/data/   文件系统数据分区

        mount  out/target/product/littleton/system/    /system
        mount    out/target/product/littleton/data/  /data 

        而对于根文件系统ramdisk需要

        Device Drivers ---> Block devices  ---> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
       General setup ---> () Initramfs source file(s),回车然后输入initframfs目录的绝对路径.

       如:out/target/product/m1ref/root/

     3. 通过服务启动该脚本

         在init.rc中加入一个Service定义,定义如下:

        service mount_nfs /system/etc/mount_nfs.sh
        oneshot
        disabled

     4. 修改init.rc

         可以将mount 文件系统的几条命令修改掉

    从方法二可以知道;要想开机后就做什么动作在init.rc中修改,如果是脚本则需要启动一个服务来启动它即可

     


    展开全文
  • 方法一: 将他们制作成文件系然后统烧写到板子的存储分区上, 最后将该分区上的文件系统挂载到指定目录即可 请查看init.rc 就知道了 on emmc mkdir /system mkdir /data

    方法一: 将他们制作成文件系然后统烧写到板子的存储分区上,

                     最后将该分区上的文件系统挂载到指定目录即可

                     请查看init.rc 就知道了 

    on emmc

        mkdir /system
        mkdir /data 0771 system system
        mkdir /persist 0771 system system
        devwait /dev/block/mmcblk0p12
        mount ext3 /dev/block/mmcblk0p12 /system ro
        devwait /dev/block/mmcblk0p13
        exec /system/bin/e2fsck -p /dev/block/mmcblk0p13
        mount ext3 /dev/block/mmcblk0p13 /data nosuid nodev
        mount ext3 /dev/block/mmcblk0p14 /persist nosuid nodev

    on nand

        mkdir /system
        mkdir /data 0771 system system
        mkdir /persist 0771 system system
        # Mount /system rw first to give the filesystem a chance to save a checkpoint
        mount yaffs2 mtd@system /system
        #mount yaffs2 mtd@system /system ro remount
        mount yaffs2 mtd@userdata /data nosuid nodev
        mount yaffs2 mtd@persist /persist nosuid nodev

                 从以上即可知道。

     

    方法二:通过NFS将主机上的文件系统挂载到板子上

     1.  板子上的 nfs 要启动起来(在kernl的文件系统有支持: /android/kernel/fs)

     

    2.  首先定义一个执行mount的脚本,我把它位于/system/etc/mount_nfs.sh

          如常见的工具通过busybox生成之后,可以通过以下方式挂载到指定的目录即可用

          #!/system/bin/sh
          /system/bin/busybox mount -o rw,nolock -t nfs 192.168.1.6:/nfs_srv /data/mnt

         而我们想在是要将文件系统 ramdisk, system, userdata挂载;

        #!/system/bin/sh
       out/target/product/littleton/root/   内核需要使用的 initramfs
       out/target/product/littleton/system  文件系统的系统分区
       out/target/product/littleton/data/   文件系统数据分区

        mount  out/target/product/littleton/system/    /system
        mount    out/target/product/littleton/data/  /data 

        而对于根文件系统ramdisk需要

        Device Drivers ---> Block devices  ---> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
       General setup ---> () Initramfs source file(s),回车然后输入initframfs目录的绝对路径.

       如:out/target/product/m1ref/root/

     3. 通过服务启动该脚本

         在init.rc中加入一个Service定义,定义如下:

        service mount_nfs /system/etc/mount_nfs.sh
        oneshot
        disabled

     4. 修改init.rc

         可以将mount 文件系统的几条命令修改掉

    从方法二可以知道;要想开机后就做什么动作在init.rc中修改,如果是脚本则需要启动一个服务来启动它即可

     

    展开全文
  • CentOS 6 挂载 USB 移动硬盘是可以读的,但是不能写。起因用 XenServer 生成了几个摸板文件,想备份到移动硬盘。XenServer 集群用一个无线路由连起来,当然主机是用网线连接到路由的;一个装有 XenCenter 的笔记本...
  • NFS挂载

    2021-01-16 19:21:09
    NFS:Network File System(网络文件系统),NFS只是一种文件系统,本身并没有传输功能,是基于RPC协议实现的,为C/S架构。也就是说,NFS也只是文件系统而已,与jffs2,yaffs,ext4等是一类东西。但是NFS的特殊之处...
  • ubuntu开机挂载

    2013-10-25 17:47:24
    公司的开发环境部署在内网的服务器上,每次开机都要手动挂载挂载服务器)项目目录,怎么设置成自动挂载? /etc/fstab(file system table)是开机时的配置文件,就是将我们利用mount命令进行挂载时,将所有...
  • 上一节,我们已经知道怎么挂载一个目录,那么这一节我们把系统指定目录挂载到容器上-v [host-dir]:[container-dir]:[rw|wo]我们先在系统环境中创建systemDir目录,当然不创建也是可以的,volume挂载会判断的,如果...
  • 启动之后输入ls找不到挂载的文件了,请问怎么回事?: ``` docker@boot2docker:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 30df6a654394 python:3.7 "/bin/bash" 8 minutes ...
  • 首先根据经验可以知道这是权限的问题,可以使用mount命令查看下目录的属性,好巧不巧发现挂载的属性是只读的 如何修改文件的挂载属性呢 mount /proc/sys -o rw,remount 这句强大的命令执行后,再查看挂载属性就...
  • 但是这样以来很麻烦,而且利用nginx rtmp模块去访问的时候很麻烦,所以想利用nfs将hdfs挂载到本地来,前后折腾了两天吧,主要是按照博客上的教程配了一边之后,发现总是提示mount.nfs:mount system call failed!...
  • 对于标准的rootfs,不建议普通用户直接去更改它,在uboot挂载该文件系统时直接赋予它只读权限。将bootargs的最后一项赋值为“ro”即为read only。若需临时修改为读写模式,可使用mount -o remount,rw /,用于临时...
  • Device Boot Start End Blocks Id System /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 9486 76091872+ 8e Linux LVM ---------------------------------------------------------------------------- 别人...
  • only file system的处理方法今天有个同学问我在怎么将linux文件拷贝到U盘里面,我也连不上她们实验室网络,就告诉她怎么挂载U盘什么的,结果怎么搞都提示挂载的路径下面是Read-only file system,还以为她的U盘有...
  • Linux 1、原厂线刷包提取:system.img 2、simg2img system.img system_raw.img 3、mkdir system 4、mount -t ext4 -o loop system_raw.img system ...我这里的512是按挂载system文件夹的大小,不知道正确不?
  • 最近有个需求需要给安卓手机上安装 xposed 框架,然后用Android Xposed Installer 安装的时候提示 /system 文件夹是只读文件, 我就去找怎么修改android的只读文件为可读写 在网上找到以下方法: 1、使用 adb ...
  • 怎么写? 关键词:fstab、mount -a、fsck等等。 1. fstab是干什么的? fstab是file system table的意思,即文件系统表。 它在开机的时候告诉系统挂载哪些分区、挂载点是什么、以什么格式挂载挂载的选项等等...
  • 直接原因是容器挂载的目录满了,没有剩余空间可用,导致容器无法启动 磁盘满的原因是某个容器内的程序产生了一个超大的core文件,占满了磁盘 那么问题来了,我们的core文件是使用了google breakpad管理,只会产生...
  • Unity中有很多Button需要监听时,怎么处理更方便逻辑 逻辑 将该脚本挂载到场景中的空物体上,并将要监听的诸多按钮挂载到列表下 其中“Btn1”、“Brn2”、“Btn3”、“Btn4”为场景中按钮的名字,这个脚本是通过...
  • 其解决方法是先将/system处于挂载状态,允许读写,命令如下: mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 就这一条命令我就又卡住了,总是出现 mount: Permission denied ``` 因为虚拟机一直...
  • 用射线检测,以下是代码,挂载到摄像机上并附上物体就可以了运行实现了 using UnityEngine; using System.Collections; public class aaa : MonoBehaviour { public Camera camera1; public GameObject cube1; ...
  • android 源码编译完成后会生成三个镜像文件system.img ->yaffs2格式userdata.img ->yaffs2格式ramdisk.img ->cpio前两个文件可以挂载,但ubantu14.04默认不支持yaffs2格式,需编译内核。windows下有解析此...
  • 1.我们需要手动配置好ckf文件 cfk文件是保存了安装虚拟机的设置 用同样的cfk文件会安装出一模一样的虚拟机 设置好yum源 ...yum install httpd system-config-kickstart安装这个软件 systemctl st...
  • 文件系统 容量 已用 可用 已用% 挂载点 /dev/sdb6 119G 4.5G 108G 4% / devtmpfs 1.8G 0 1.8G 0% /dev tmpfs 1.9G 35M 1.8G 2% /dev/shm tmpfs 1.9G 9.8M 1.8G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /...
  • rtems 文件系统(7)

    2018-01-22 09:52:48
    上一次说了base file system,那么理解了首先要有一个base file system,这个文件系统就是IMFS,有了这个base file system以后才能挂载其他的文件系统。我最后希望能够挂载一个flash的文件系统,但是现在还是不知道...
  • Android Verified Boot dm-verity 优化和实战

    千次阅读 2019-05-31 16:28:04
    而系统起来之后也就不存在system分区了,而是直接把system镜像挂载到/根目录上。那么这个操作是怎么进行的呢? system.img默认是需要使能dm-verity来挂载的,那么这就涉及到如何使能dm-verity来挂载...
  • 安卓命令

    2021-02-27 16:14:49
    1)卸载软件 知道包名 adb shell uninstall 包名 2) 知道怎么打开一个app 命令打开 adb shell am start -n 包名 /activity ...adb remount 重新挂载system分区 4)退出shell 使用exit 5)adb reboot 重启设备 7)
  • 查看flash文件系统该怎么挂载呢?首先在confdefs.h中看到下面的说明 /** * @defgroup ConfigFilesystems Filesystems and Mount Table Configuration * * @ingroup Configuration * * Defines to control ...
  • android adb shell 获取root权限

    千次阅读 2014-02-18 20:53:54
    今天用Genymotion模拟器调试程序时,需要修改一下etc/hosts权限。模拟器中是有superUser的但是怎么也获取不到 root权限。 出现这样的提示: no androVM.su.bypass prop...重新挂载一下/system,把只读挂载成可读写。she

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

怎么挂载system