Android System分区大小异常

平台:Freescale / Android 4.2.2

问题描述:

用 df 命令,看到/system分区大小275M。

用 busybox fdisk -l /dev/block/mmcblk0p5,看到 536M。

Freescale的刷机工具是Mfgtool,分区的动作在mksdcard-android.sh里面完成。

SYSTEM_ROM_SIZE=512

dd if=/dev/zero of=${node} bs=1024 count=1

sfdisk --force -uM ${node} << EOF
,${boot_rom_sizeb},83
,${RECOVERY_ROM_SIZE},83
,${extend_size},5
,${data_size},83
,${SYSTEM_ROM_SIZE},83
,${CACHE_SIZE},83
,${VENDER_SIZE},83
,${MISC_SIZE},83
EOF

注: dd 命令

格式:起始,大小,ID

起始 = 起始柱面(如果不进行指定则为第一可用柱面),大小 = 柱面数量(如果不进行指定则指所有柱面),ID号 = 分区类型(L: Linux, S: Swap, E:扩展分区)

Mfgtool的配置文件是ucl2.xml

其中,刷System.img的命令是:

<CMD state="Updater" type="push" body="pipe dd of=/dev/mmcblk0p5 bs=512" file="files/android/system.img">Sending and writting system.img</CMD>

可以看到,这边使用了 dd 命令,blocksize是512byte,将system.img拷贝到了/dev/mmcblk0p5分区。

但是,dd 命令的会改变分区的大小,改变后的分区大小就是system.img文件的实际大小。

所以,使用 df 命令会看到 275M。

解决方式:

修改 device/fsl/imx6/BoardConfigCommon.mk :

BOARD_SYSTEMIMAGE_PARTITION_SIZE := 524288000

BOARD_SYSTEMIMAGE_PARTITION_SIZE 会在 build/core/Makefile 中使用到:

define build-systemimage-target
  @echo "Target system fs image: $(1)"
  @mkdir -p $(dir $(1)) $(systemimage_intermediates) && rm -rf $(systemimage_intermediates)/system_image_info.txt
  $(call generate-userimage-prop-dictionary, $(systemimage_intermediates)/system_image_info.txt)
  $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH       ./build/tools/releasetools/build_image.py       $(TARGET_OUT) $(systemimage_intermediates)/system_image_info.txt $(1)
endef

generate-userimage-prop-dictionary 方法会对 system_image_info.txt 赋值:

define generate-userimage-prop-dictionary
$(if $(INTERNAL_USERIMAGES_EXT_VARIANT),$(hide) echo "fs_type=$(INTERNAL_USERIMAGES_EXT_VARIANT)" >> $(1))
$(if $(BOARD_SYSTEMIMAGE_PARTITION_SIZE),$(hide) echo "system_size=$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)" >> $(1))
$(if $(BOARD_USERDATAIMAGE_PARTITION_SIZE),$(hide) echo "userdata_size=$(BOARD_USERDATAIMAGE_PARTITION_SIZE)" >> $(1))
$(if $(BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "cache_fs_type=$(BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
$(if $(BOARD_CACHEIMAGE_PARTITION_SIZE),$(hide) echo "cache_size=$(BOARD_CACHEIMAGE_PARTITION_SIZE)" >> $(1))
$(if $(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG),$(hide) echo "extfs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG)" >> $(1))
$(if $(mkyaffs2_extra_flags),$(hide) echo "mkyaffs2_extra_flags=$(mkyaffs2_extra_flags)" >> $(1))
$(if $(TARGET_MKUBIFS_ARGS),$(hide) echo "mkfsubifs_flags=$(TARGET_MKUBIFS_ARGS)" >> $(1))
$(if $(filter true, $(strip $(HAVE_SELINUX))), echo "selinux_fc=$(TARGET_ROOT_OUT)/file_contexts" >> $(1))
endef

关键词汇是:system_size

随后调用了./build/tools/releasetools/build_image.py,传入的参数就是system_image_info.txt:

  if mount_point == "system":
    copy_prop("fs_type", "fs_type")
    copy_prop("system_size", "partition_size")

...... ......

 if fs_type.startswith("ext"):
    build_command = ["mkuserimg.sh"]
    if "extfs_sparse_flag" in prop_dict:
      build_command.append(prop_dict["extfs_sparse_flag"])
      run_fsck = True
    build_command.extend([in_dir, out_file, fs_type,
                          prop_dict["mount_point"]])
    if "partition_size" in prop_dict:
      build_command.append(prop_dict["partition_size"])
    if "selinux_fc" in prop_dict:
      build_command.append(prop_dict["selinux_fc"])
exit_code = RunCommand(build_command)

转来转去又调用了 mkuserimg.sh,记住 partition_size 是作为第五个参数传进去的:

OUTPUT_FILE=$2
EXT_VARIANT=$3
MOUNT_POINT=$4
SIZE=$5
FC=$6

MAKE_EXT4FS_CMD="make_ext4fs $ENABLE_SPARSE_IMAGE $FCOPT -l $SIZE -a $MOUNT_POINT $OUTPUT_FILE $SRC_DIR"

终于看到核心了,使用了make_ext4fs来制作img了。

Android System分区大小异常

时间: 2024-11-10 11:13:03

Android System分区大小异常的相关文章

/home 分区大小异常

df 文件系统出现异常 [[email protected] ~]# df -h Filesystem            Size  Used Avail Use% Mounted on /dev/sda2             4.0G  249M  3.5G   7% / /dev/sda1             1.1G   39M 1000M   4% /boot none                  4.0G     0  4.0G   0% /dev/shm /dev/

Android:百度定位异常Couldn&#39;t load locSDK4d from loader dalvik.system.PathClassLoader

Android Studio项目,使用百度定位时出现异常: Couldn't load locSDK4d from loader dalvik.system.PathClassLoader....findLibrary returned null 从网上找过解决方案,许多人说将 armeabi 下的 locSDK4d.so 复制一份到 armeabi-v7a下,可是我这么做之后问题依然存在. 后来找到的的有效的解决方案是,在项目的build.gradle下,在android标签内添加如下内容:

如何完全备份android系统上的system分区和data分区

安卓的系统备份在很多场合下可能会用到,下面这个python的脚本,可以用来备份整个的data分区:将所有data分区的文件和目录打包到data.zip,并生成recovery的专用edify脚本到update-script.sh.当然,简单的修改下脚本的备份路径就可以备份system分区了,如果再加上几行代码,就可以备份boot,recovery,uboot等等分区,不过这要根据不同的分区来写不同的备份代码: backup.py import sys import os from os.path

修改Android模拟器的system分区,以及加入SuperSU

  http://www.claudxiao.net/2013/10/persistent-change-emulator-system-partition/ 对Android的模拟器,如果要修改其system分区里的文件,除了remount之外,还需要对数据进行持久化--因为默认情况下emulator会以只读的形式加载system.img,即便remount之后对其进行的修改也不会实际被保存下来. 网络上提到多种解决这一持久化问题的方案.例如[1],将/system拷贝至清空后的/data分区

如何完全备份android在系统system分区和data分

安德鲁斯系统备份是非常的情况下,可以使用.下面的这个python脚本.它可以用来备份整个data分:所有data分区的文件和文件夹打包data.zip.并产生recovery专用edify脚本update-script.sh. 当然,备份system分区了,假设再加上几行代码,就能够备份boot,recovery,uboot等等分区.只是这要依据不同的分区来写不同的备份代码: backup.py import sys import os from os.path import join from

虚拟机中Opensuse扩展分区大小

一.Virtual Machine 扩展硬盘大小 在vmware虚拟机中设置 硬盘大小,扩展至需要的大小.这里简要略去. 然后进入系统: sudo parted //启动parted (parted) print list Model: VMware, VMware Virtual S (scsi) Disk /dev/sda: 129GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: N

linux 逻辑卷管理 调整分区大小

测试机各种报错,创建个目录都报错,df看了一下,发现VolGroup-lv_root 100%,虚拟磁盘满了,怎么办呢 1,解决过程 # df -h //查看分区 # umount /home //取消挂载 # e2fsck -f /dev/mapper/VolGroup-lv_home //分区检测 # resize2fs -p /dev/mapper/VolGroup-lv_home 100G //将lv_home虚拟分区设为100G # mount /home //挂载home # df

redhat 6.6 重新调整分区大小

安装系统的时候贪图省事使用了系统的自动分区,系统装好后发现/home分区太大了,500G的硬盘,400多G的空间分给了/home.需将/home的空间划一点出来,分到根分区下去 df 查看分区 [[email protected] ~]# dfFilesystem           1K-blocks     Used Available Use% Mounted on/dev/mapper/VolGroup-lv_root                      51475068 1014

linux下分区大小改变及fdisk应用

linux下分区大小改变及fdisk应用 实例解说Linux中fdisk分区使用方法 一.fdisk 的介绍 fdisk - Partition table manipulator for Linux ,译成中文的意思是磁盘分区表操作工具:本人译的不太好,也没有看中文文档:其实就是分区工具. fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux .fat32. linux .linux swap .fat16 以及其实类Unix类操作系统的文件系统等:当然我们