fw_tool.sh 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #!/bin/sh
  2. #custom for V2
  3. set -x
  4. ACTION=$1
  5. KERNEL_OFFSET=$((64))
  6. ROOTFS_OFFSET=$((2097216))
  7. DRIVER_OFFSET=$((5570624))
  8. APPFS_OFFSET=$((6225984))
  9. if [ "$ACTION" = "unpack" ]; then
  10. DEMO_IN=$2
  11. OUT_DIR=$3
  12. dd if=${DEMO_IN} of=$OUT_DIR/kernel.bin skip=$KERNEL_OFFSET count=$(($ROOTFS_OFFSET-$KERNEL_OFFSET)) bs=1
  13. md5sum $OUT_DIR/kernel.bin
  14. dd if=${DEMO_IN} of=$OUT_DIR/rootfs.bin skip=$ROOTFS_OFFSET count=$(($DRIVER_OFFSET-$ROOTFS_OFFSET)) bs=1
  15. md5sum $OUT_DIR/rootfs.bin
  16. dd if=${DEMO_IN} of=$OUT_DIR/driver.bin skip=$DRIVER_OFFSET count=$(($APPFS_OFFSET-$DRIVER_OFFSET)) bs=1
  17. md5sum $OUT_DIR/driver.bin
  18. if [ "$(uname -s)" = "Darwin" ]; then
  19. IMAGE_END=$(($(stat -f %z ${DEMO_IN})))
  20. else
  21. IMAGE_END=$(($(stat -c %s ${DEMO_IN})))
  22. fi
  23. dd if=${DEMO_IN} of=$OUT_DIR/appfs.bin skip=$APPFS_OFFSET count=$(($IMAGE_END-$APPFS_OFFSET)) bs=1
  24. md5sum $OUT_DIR/appfs.bin
  25. elif [ "$ACTION" = "pack" ]; then
  26. TMP_DIR=$2
  27. DEMO_OUT=$3
  28. #need to pad kernel is its smaller than the stock kernel size, 2097152 bytes
  29. dd if=/dev/zero of=$TMP_DIR/kernel.bin bs=1 count=1 seek=2097151
  30. cat $TMP_DIR/kernel.bin $TMP_DIR/rootfs.bin $TMP_DIR/driver.bin $TMP_DIR/appfs.bin > $TMP_DIR/flash.bin
  31. mkimage -A MIPS -O linux -T firmware -C none -a 0 -e 0 -n jz_fw -d $TMP_DIR/flash.bin $DEMO_OUT
  32. else
  33. echo "Unknown action '$ACTION'"
  34. fi