日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android System分区大小异常

發布時間:2023/12/1 Android 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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=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分区大小异常的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。