Root/scripts/pad_image

Source at commit 85ea640 created 13 years 10 months ago.
By Mirko Vogt, kernel image name changed since the profile is now part of the image name(s)
1#!/bin/bash
2
3function usage {
4  echo "Usage: prepare_image image_type kernel_image rootfs_image header_size"
5  echo "Padd root and kernel image to the correct size and append the jffs2 start marker as needed"
6  exit 1
7}
8
9function pad_file {
10    echo "Padding $1 to size $2"
11    dd if=$1 of=$1.paddingtempfile bs=$2 count=1 conv=sync &> /dev/null
12    mv $1.paddingtempfile $1
13}
14
15#filesize filestart padding
16function calc_pad {
17    [ $((($1 + $2) & ($3 - 1))) == 0 ] && {
18        echo $1
19        return 0
20        }
21    echo $(((($1 + $2) | ($3 - 1)) + 1 - $2))
22}
23
24function prep_squash {
25    echo "kernel_size: $kernel_size"
26    echo "header_size: $header_size"
27    kernel_pad_size=$(calc_pad $kernel_size $header_size 32)
28    kernel_end=$(($header_size + $kernel_pad_size))
29    pad_file $kernel_image $kernel_pad_size
30
31    #4k
32    rootfs_pad_size=$(calc_pad $rootfs_size $kernel_end 4096)
33    pad_file $rootfs_image $rootfs_pad_size
34    echo -ne '\xde\xad\xc0\xde' >> $rootfs_image
35    
36    #8k
37    rootfs_pad_size=$(calc_pad $rootfs_size $kernel_end 8192)
38    [ $rootfs_pad_size == rootfs_old_padsize ] || {
39        pad_file $rootfs_image $rootfs_pad_size
40        rootfs_old_padsize=$rootfs_pad_size
41        echo -ne '\xde\xad\xc0\xde' >> $rootfs_image
42    }
43
44    #64k
45    rootfs_pad_size=$(calc_pad $rootfs_size $kernel_end 65536)
46    [ $rootfs_pad_size == rootfs_old_padsize ] || {
47        pad_file $rootfs_image $rootfs_pad_size
48        rootfs_old_padsize=$rootfs_pad_size
49        echo -ne '\xde\xad\xc0\xde' >> $rootfs_image
50    }
51
52    #128k
53    rootfs_pad_size=$(calc_pad $rootfs_size $kernel_end 131072)
54    [ $rootfs_pad_size == rootfs_old_padsize ] || {
55        pad_file $rootfs_image $rootfs_pad_size
56        rootfs_old_padsize=$rootfs_pad_size
57        echo -ne '\xde\xad\xc0\xde' >> $rootfs_image
58    }
59    
60}
61
62function prep_jffs2 {
63    kernel_pad_size=$(calc_pad $kernel_size $header_size $1)
64    pad_file $kernel_image $kernel_pad_size
65}
66
67image_type=$1
68kernel_image=$2
69rootfs_image=$3
70header_size=$4
71
72if [ -z "$image_type" ] || [ -z "$rootfs_image" ] || [ -z "$kernel_image" ] || [ -z "$header_size" ]; then
73    usage
74fi
75
76if [ ! -e "$rootfs_image" ] || [ -z "$kernel_image" ]; then
77    echo "input file not found"
78    exit 1
79fi
80
81kernel_size=$(stat -c "%s" "$kernel_image")
82rootfs_size=$(stat -c "%s" "$rootfs_image")
83
84if [ $kernel_size == 0 ] || [ $rootfs_size == 0 ]; then
85    echo "kernel or rootfs empty"
86    exit 1
87fi
88
89case $image_type in
90    squashfs )
91        prep_squash ;;
92    jffs2-64k )
93        prep_jffs2 65536 ;;
94    jffs2-128k )
95        prep_jffs2 131072 ;;
96    * )
97        echo "Unknown image type"
98        exit 1 ;;
99esac
100
101

Archive Download this file



interactive