zoukankan      html  css  js  c++  java
  • RK 打包脚本 make_ext4fs system.img

    https://blog.csdn.net/ttxgz/article/details/7542380

    一.打包到system.img 报的问题 生成镜像时提示Out of space

    1.1.mkimage.sh

    #!/bin/bash
    set -e
    cp -rf  kernel/arch/arm/boot/zImage  									out/target/product/rk312x/kernel
    
    if [ x$1 == x31a ]; then
    	MODEL="ZK-R31A"
    fi
    sed  -i  '/ro.product.usb_model=/s/=.*/='$MODEL'/g'   out/target/product/rk312x/system/build.prop
    sed  -i  '/ro.product.model=/s/=.*/='$MODEL'/g'   out/target/product/rk312x/system/build.prop
    . build/envsetup.sh >/dev/null && setpaths
    
    export PATH=$ANDROID_BUILD_PATHS:$PATH
    TARGET_PRODUCT=`get_build_var TARGET_PRODUCT`
    TARGET_HARDWARE=`get_build_var TARGET_BOARD_HARDWARE`
    TARGET_DEVICE_DIR=`get_build_var TARGET_DEVICE_DIR`
    echo TARGET_PRODUCT=$TARGET_PRODUCT
    echo TARGET_HARDWARE=$TARGET_HARDWARE
    TARGET="withoutkernel"
    if [ "$2"x != ""x  ]; then
             TARGET=$2
    fi
    
    IMAGE_PATH=rockdev/Image-$TARGET_PRODUCT
    
    KERNEL_PATH=kernel
    KERNEL_CONFIG=$KERNEL_PATH/.config
    rm -rf $IMAGE_PATH
    mkdir -p $IMAGE_PATH
    UBOOT_PATH=u-boot
    PARAMETER=${TARGET_DEVICE_DIR}/rk312x.parameter.txt
    FSTYPE=ext4
    echo system filesysystem is $FSTYPE
    
    BOARD_CONFIG=device/rockchip/common/device.mk
    
    KERNEL_SRC_PATH=`grep TARGET_PREBUILT_KERNEL ${BOARD_CONFIG} |grep "^s*TARGET_PREBUILT_KERNEL *:= *[w]*s" |awk  '{print $3}'`
    
    [ $(id -u) -eq 0 ] || FAKEROOT=fakeroot
    
    BOOT_OTA="ota"
    
    [ $TARGET != $BOOT_OTA -a $TARGET != "withoutkernel" ] && echo "unknow target[${TARGET}],exit!" && exit 0
    
        if [ ! -f $OUT/kernel ]
        then
    	    echo "kernel image not fount![$OUT/kernel] "
            read -p "copy kernel from TARGET_PREBUILT_KERNEL[$KERNEL_SRC_PATH] (y/n) n to exit?"
            if [ "$REPLY" == "y" ]
            then
                [ -f $KERNEL_SRC_PATH ]  || 
                    echo -n "fatal! TARGET_PREBUILT_KERNEL not eixit! " || 
                    echo -n "check you configuration in [${BOARD_CONFIG}] " || exit 0
    
                cp ${KERNEL_SRC_PATH} $OUT/kernel
    
            else
                exit 0
            fi
        fi
    
    if [ $TARGET == $BOOT_OTA ]
    then
    	echo "make ota images... "
    	echo -n "create boot.img with kernel... "
    	[ -d $OUT/root ] && 
    	mkbootfs $OUT/root | minigzip > $OUT/ramdisk.img && 
            truncate -s "%4" $OUT/ramdisk.img && 
    	mkbootimg --kernel $OUT/kernel --ramdisk $OUT/ramdisk.img --second kernel/resource.img --output $OUT/boot.img && 
    	cp -a $OUT/boot.img $IMAGE_PATH/
    	echo "done."
    else
    	echo -n "create boot.img without kernel... "
    	[ -d $OUT/root ] && 
    	mkbootfs $OUT/root | minigzip > $OUT/ramdisk.img && 
            truncate -s "%4" $OUT/ramdisk.img && 
    	rkst/mkkrnlimg $OUT/ramdisk.img $IMAGE_PATH/boot.img >/dev/null
    	echo "done."
    fi
    if [ $TARGET == $BOOT_OTA ]
    then
    	echo -n "create recovery.img with kernel... "
    	[ -d $OUT/recovery/root ] && 
    	mkbootfs $OUT/recovery/root | minigzip > $OUT/ramdisk-recovery.img && 
            truncate -s "%4" $OUT/ramdisk-recovery.img && 
    	mkbootimg --kernel $OUT/kernel --ramdisk $OUT/ramdisk-recovery.img --second kernel/resource.img  --output $OUT/recovery.img && 
    	cp -a $OUT/recovery.img $IMAGE_PATH/
    	echo "done."
    else
    	echo -n "create recovery.img with kernel and with out resource... "
    	[ -d $OUT/recovery/root ] && 
    	mkbootfs $OUT/recovery/root | minigzip > $OUT/ramdisk-recovery.img && 
            truncate -s "%4" $OUT/ramdisk-recovery.img && 
    	mkbootimg --kernel $OUT/kernel --ramdisk $OUT/ramdisk-recovery.img --output $OUT/recovery.img && 
    	cp -a $OUT/recovery.img $IMAGE_PATH/
    	echo "done."
    fi
    	echo -n "create misc.img.... "
    	cp -a rkst/Image/misc.img $IMAGE_PATH/misc.img
    	cp -a rkst/Image/pcba_small_misc.img $IMAGE_PATH/pcba_small_misc.img
    	cp -a rkst/Image/pcba_whole_misc.img $IMAGE_PATH/pcba_whole_misc.img
    	echo "done."
    if [ `grep "CONFIG_BUILD_REALTEK_WIFI_MODULES=y" $KERNEL_CONFIG` ]; then
    	echo "Install wifi ko to $OUT/system/lib/modules/"
    	mkdir -p $OUT/system/lib/modules/
    	find kernel/drivers/net/wireless/rockchip_wlan/*  -name "*.ko" | xargs -n1 -i cp {} $OUT/system/lib/modules/
    fi
    if [ -f $UBOOT_PATH/*Loader*.bin ]; then
    		echo -n "create loader..."
    		cd $UBOOT_PATH&&make&& cd ..
    		echo -n "make loader..."
    		cp -a $UBOOT_PATH/*Loader*.bin $IMAGE_PATH/RK3128MiniLoaderAll_V2.31.bin
    		cp -a $UBOOT_PATH/uboot.img $IMAGE_PATH/uboot.img
    		echo "done."
    fi
    if [ -f $PARAMETER ];then
    				echo -n "create parameter..."
    	      cp -a $PARAMETER $IMAGE_PATH/rk312x.parameter.txt
    	      echo "done."
    else
    				echo "${TARGET_DEVICE_DIR}/rk312x.parameter.txt not fount!"
    fi
    if [ -d $OUT/system ]
    then
    	echo -n "create system.img... "
    	if [ "$FSTYPE" = "cramfs" ]
    	then
    		chmod -R 777 $OUT/system
    		$FAKEROOT mkfs.cramfs $OUT/system $IMAGE_PATH/system.img
    	elif [ "$FSTYPE" = "squashfs" ]
    	then
    		chmod -R 777 $OUT/system
    		mksquashfs $OUT/system $IMAGE_PATH/system.img -all-root >/dev/null
    	elif [ "$FSTYPE" = "ext3" ] || [ "$FSTYPE" = "ext4" ]
    	then
                    system_size=`ls -l $OUT/system.img | awk '{print $5;}'`
                    [ $system_size -gt "0" ] || { echo "Please make first!!!" && exit 1; }
                    MAKE_EXT4FS_ARGS=" -L system -S $OUT/root/file_contexts -a system $IMAGE_PATH/system.img $OUT/system"
    		ok=0
    		while [ "$ok" = "0" ]; do
    			make_ext4fs -l $system_size $MAKE_EXT4FS_ARGS >/dev/null 2>&1 &&
    			tune2fs -c -1 -i 0 $IMAGE_PATH/system.img >/dev/null 2>&1 &&
    			ok=1 || system_size=$(($system_size + 5242880))
    		done
    		e2fsck -fyD $IMAGE_PATH/system.img >/dev/null 2>&1 || true
    	else
    		mkdir -p $IMAGE_PATH/2k $IMAGE_PATH/4k
    		mkyaffs2image -c 2032 -s 16 -f $OUT/system $IMAGE_PATH/2k/system.img
    		mkyaffs2image -c 4080 -s 16 -f $OUT/system $IMAGE_PATH/4k/system.img
    	fi
    	echo "done."
    fi
    
    chmod a+r -R $IMAGE_PATH/
    

    1.2.这个错误是由于增加了预置apk,导致system.img超过了分配的空间大小导致的

    make loader...done.
    create parameter...done.
    create system.img... ./mkimage.sh: line 151: 12094 Segmentation fault      (core dumped) make_ext4fs -l $system_size MAKE_EXT4FS_ARGS > /dev/null 2>&1
    done.
    

    1.3.解决办法 给system加536M 

    --- a/device/rockchip/common/BoardConfig.mk
    +++ b/device/rockchip/common/BoardConfig.mk
    @@ -79,7 +79,7 @@ TARGET_PROVIDES_INIT_RC ?= false
     BOARD_HAL_STATIC_LIBRARIES ?= libdumpstate.$(TARGET_PRODUCT) libhealthd.$(TARGET_PRODUCT)
     
     //MAX-SIZE=512M, for generate out/.../system.img
    -BOARD_SYSTEMIMAGE_PARTITION_SIZE ?= 1073741824
    +BOARD_SYSTEMIMAGE_PARTITION_SIZE ?= 1610612736
     BOARD_FLASH_BLOCK_SIZE ?= 131072
    

      

      

      

  • 相关阅读:
    天梯赛练习2 补题
    QFNU 天梯赛练习 1 补题
    2019 山东省赛 B 题
    CCPC2020 网络赛 总结
    一个比较好看的 Typora 主题
    〔OS〕磁盘调度算法
    〔OS〕页面置换算法
    〔OS〕多线程模拟实现生产者和消费者
    〔OS〕银行家算法
    LCS and LIS
  • 原文地址:https://www.cnblogs.com/crushgirl/p/15007577.html
Copyright © 2011-2022 走看看