mirror of https://github.com/OpenIPC/firmware.git
59 lines
1.5 KiB
Bash
Executable File
59 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Binary file compiler.
|
|
# Creates a file for programming onto a flash chip.
|
|
#
|
|
# Example:
|
|
# ./compile4programmer.sh stock-uboot.bin uImage.t31 rootfs.squashfs.t31 8
|
|
#
|
|
# Running this command will produce a new binary file
|
|
# full4programmer-8MB.bin or full4programmer-16MB.bin
|
|
# suitable for flashing with a programmer.
|
|
#
|
|
# Paul Philippov <paul@themactep.com>
|
|
#
|
|
|
|
if [ $# -lt 4 ]; then
|
|
echo "Usage: $0 <uboot.bin> <kernel.bin> <rootfs.bin> <flash chip size in MB>"
|
|
exit 1
|
|
fi
|
|
|
|
case "$4" in
|
|
8)
|
|
flashsizemb="8MB"
|
|
flashsize=$((0x800000))
|
|
kerneloffset=$((0x50000))
|
|
rootfsoffset=$((0x250000))
|
|
;;
|
|
16)
|
|
flashsizemb="16MB"
|
|
flashsize=$((0x1000000))
|
|
kerneloffset=$((0x50000))
|
|
rootfsoffset=$((0x350000))
|
|
;;
|
|
*)
|
|
echo "Unknown flash size. Use 8 or 16."
|
|
exit 2
|
|
esac
|
|
|
|
check_file() {
|
|
if [ ! -f "$1" ]; then
|
|
echo "File $1 not found."
|
|
exit 3
|
|
fi
|
|
}
|
|
|
|
uboot=$1; check_file $uboot
|
|
kernel=$2; check_file $kernel
|
|
rootfs=$3; check_file $rootfs
|
|
|
|
tmpfile=$(mktemp)
|
|
|
|
dd if=/dev/zero bs="${flashsize}" skip=0 count=1 | tr '\000' '\377' > $tmpfile
|
|
dd if=$uboot bs=1 seek=0 count=$(wc -c $uboot | awk '{print $1}') of=$tmpfile conv=notrunc status=none
|
|
dd if=$kernel bs=1 seek="${kerneloffset}" count=$(wc -c $kernel | awk '{print $1}') of=$tmpfile conv=notrunc status=none
|
|
dd if=$rootfs bs=1 seek="${rootfsoffset}" count=$(wc -c $rootfs | awk '{print $1}') of=$tmpfile conv=notrunc status=none
|
|
mv $tmpfile "full4programmer-${flashsizemb}.bin"
|
|
|
|
echo "Done"
|
|
exit 0 |