cyb4_linux/mkrescue

75 lines
1.8 KiB
Bash

#!/bin/bash
# Qisda,Howard Hsu,2009/11/18
# The script is used to create rescue.bin under ./arch/arm/boot/
# Steps:
# 1. Take rescue config and make its kernel
# 2. Pad the zeros to kernel up to 1586688 bytes
# 3. Cat kernel with pre-made rescue file system.
# 4. Pad the zeros to 4-byte boundary,
# the resulted is rescue.bin under ./arch/arm/boot/
#
# arguments: "skip" : do not remake the kernel, directly do rescue.bin packing
#
# Qisda,Howard Hsu,2009/11/20
# restore the original .config to avoid affect the original kernel build .config
# input
# this file should be executable
rescueKernel=./arch/arm/boot/zImageRescue
rescueFs=../RescueFS/img/urootfs.img
# output
rescueBin=./arch/arm/boot/rescue.bin
# intermediate
rescureKernelBackupDir=../RescueFS/img/uzImage
rescueKernelTemp=./arch/arm/boot/zImage
arg1="none"
if [ -n $1 ]; then
arg1=$1
fi
if [ $arg1 == "skip" ]; then
echo "skip make rescue kernel"
cp $rescureKernelBackupDir $rescueKernelTemp
else
echo "step1: make rescue kernel..."
make rescueOS_defconfig
make
if [ -f .config.old ]; then
mv .config.old .config
fi
fi
rescueKsize=$(stat -c%s "$rescueKernelTemp")
echo " $rescueKernelTemp size is $rescueKsize"
expectrescueKsize=1586688
let padzero=$expectrescueKsize-$rescueKsize
echo "step2: append $padzero zeros"
dd if=/dev/zero of=./zero.bin bs=$padzero count=1
cat $rescueKernelTemp ./zero.bin > $rescueKernel
rm ./zero.bin
#rm $rescueKernelTemp
cp $rescueKernelTemp $rescureKernelBackupDir
if [ -f $rescueFs ]; then
echo "step3: cat kernel and Fs into rescue.bin"
cat $rescueKernel $rescueFs > $rescueBin
else
echo "$rescueFs does not exist!!!"
exit 1;
fi
size=$(stat -c%s "$rescueBin")
let padzero=4-size%4
if [ padzero != 0 ]; then
echo "step4: need $padzero to 4-byte align"
dd if=/dev/zero of=./zero.bin bs=$padzero count=1
cat ./zero.bin >> $rescueBin
rm ./zero.bin
fi