RK 打包脚本 make_ext4fs system.img

摘要:
=“withoutkernel”]&

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

  

  

  

免责声明:文章转载自《RK 打包脚本 make_ext4fs system.img》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Synplify9.6.2破解(转帖)理解flex布局下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mysql 修改数据库,mysql修改表类型,Mysql增加表字段,Mysql删除表字段,Mysql修改字段名,Mysql修改字段排列顺序,Mysql修改表名

对于已经创建好的表,尤其是已经有大量数据的表,如果需要对表做一些结构上的改变,我们可以先将表删除(drop),然后再按照新的表定义重建表。这样做没有问题,但是必然要做一些额外的工作,比如数据的重新加载。而且,如果有服务在访问表,也会对服务产生影响。因此,在大多数情况下,表结构的更改一般都使用alter table 语句,以下是一些常用的命令。 (1) 修改...

visual studio编译错误集(转)

1、error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 在项目属性->Configration Properties->C/C++->Command Line页面的Additional Options中加入/wd...

postgresql 查询表结构

sql查询 SELECT A.attnum, ( SELECT description FROM pg_catalog.pg_description WHERE objoid = A.attrelid AND objsubid = A.attnum ) AS descript, A.attname, ( select typname from p...

C++指针(二)

  指针提供间接操作其所指对象的功能。与对迭代器进行解引用操作一样,对指针进行解引用可访问它所指的对象,*操作符将获取指针所指的对象:     string s("hello world");     string *sp = &s;         cout<<*sp;             //结果为:hello world   ...

对List中每个对象元素按时间顺序排序

1 import java.util.*; 2 3 public class ListSort { 4 public static class UserBean { 5 private String id; 6 private String birthday; 7...

用jq中jSignature做手动签名

<!DOCTYPE html><html lang="zh-CN"><head> <title>手写板签名demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <...