平台:Freescale / Android 4.2.2

问题描述:

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

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

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

SYSTEM_ROM_SIZE=512dd if=/dev/zero of=${node} bs=1024 count=1sfdisk --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 = Truebuild_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=$6MAKE_EXT4FS_CMD="make_ext4fs $ENABLE_SPARSE_IMAGE $FCOPT -l $SIZE -a $MOUNT_POINT $OUTPUT_FILE $SRC_DIR"

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

转载于:https://www.cnblogs.com/all-for-fiona/p/3925091.html

Android System分区大小异常相关推荐

  1. android system 分区大小,Android System分区大小异常

    平台:Freescale / Android 4.2.2 问题描述: 用 df 命令,看到/system分区大小275M. 用 busybox fdisk -l /dev/block/mmcblk0p ...

  2. android各分区大小,扫盲:安卓系统各大分区介绍1

    1. bootloader 当我们拿到一款手机,第一件事应该就是按下 电源键开机,那么从开机到进入到桌面程序这中 间发生了些什么呢, 大 家可以简单的把手机的ROM存储类比为我 们电脑上的硬盘,这个硬 ...

  3. android 读取各分区大小,Android userData分区大小查看

    首先,可以用个命令 cat /proc/partitions 查看分区大小如下所示:(单位KBytes) cat /proc/partitions major minor  #blocks  name ...

  4. Android Flash分区大小查看

    正常的8G Flash有多少可以用的 这样算吧: 硬盘和U盘厂家的算法:8GB*1000=8000MB*1000=8000000KB*1000=8000000000B 电脑系统的算法:80000000 ...

  5. Android system 分区讲解

    Android软家系统架构图 核心应用层 -------------------------------------- 框架层 JNI层 dalvik虚拟机 本地库 HAL 厂家适配层 ------- ...

  6. Android未找到分区,Android System分区文件丢失分析

    客户节前报告system分区出现文件丢失的情况,看了一些log,有如下几种情况: (1)文件系统的inode变量或数据被修改,如目录长度变量,应该是一个几百的数值,被修改成错误的数据"1&q ...

  7. android gpt分区大小,[MTK] 如何确认各个分区起始偏移与大小

    [MTK] 如何确认各个分区起始偏移与大小 无标签 2020-05-15 阅读:2972 分区表中(partition_table_MTXXXX_emmc.csv)中包含各分区预设大小信息,但是 (1 ...

  8. Android 修改分区大小

    这里以android的cache分区为例. 查看当前使用cache大小: python device/rockchip/common/get_partition_size.py rockdev/Ima ...

  9. android system image 编译出错,Android framework 编译常见错误

    常见错误: 1)  添加系统API或者修改@hide的API后,需要执行 make update-api,然后再make 2) 修改公共api后,需要 make update-api 比较framew ...

最新文章

  1. 动效设计的物理法则:动画的一切皆在于时间点和空间幅度(转)
  2. 替代还是扩展:云的下一站真是雾计算?
  3. 从封装函数到实现简易版自用jQuery (一)
  4. 2021年春季学期-信号与系统-第八次作业参考答案-第十小题
  5. js/jq基础(日常整理记录)-3-一个自定义表格
  6. vue 属性 computed
  7. C++引用计数(reference counting)技术简介(2)
  8. loop在python中什么意思_在python中使用loop打开多个文件
  9. 共享单车需求预测问题:建模篇
  10. jQuery中的gt和lt
  11. 小米工作室AIoT开发平台高校创新赛报名启动
  12. stokes方程matlab,Navier-Stokes matlab 238万源代码下载- www.pudn.com
  13. win服务器系统下的软路由,如何用Windows 2000 Server充当软路由
  14. JFreeChart展示柱状图和折线图的组合
  15. 不能同吃的食物组合(你知道吗?)
  16. python绘制表格并保存为图片_Python3基于plotly模块保存图片表格
  17. SQL学习之full outer join关键字
  18. vue在移动端实现电子签名手写板
  19. 鸿蒙系统真实评测,华为鸿蒙系统对比安卓系统评测
  20. C 程序设计语言——第四章练习题

热门文章

  1. 使用.Net 1.1的项目,TreeView控件不能正常显示
  2. android 仿qq it蓝豹,《IT蓝豹》listview实现各种版面设计功能
  3. python自动导出数据脚本_利用python生成一个导出数据库的bat脚本文件的方法
  4. python适合开发游戏吗_用python能制作游戏吗
  5. 内卷之下,前端工程师如何自救
  6. 学习、掌握运营岗位必备的基本能力和思维
  7. oracle 9i 手工建库,简单记录Oracle 9i数据库手工建库过程
  8. cstringw转lpctstr_新手必看:CString 和 LPCTSTR等之间的转换大全 | 求索阁
  9. 怎样打开计算机音频服务器,win10系统音频服务器未运行的修复步骤
  10. linux多进程 段错误,关于段错误