create_device.sh 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #!/bin/bash
  2. set -e
  3. show_usage() {
  4. cat <<EOF
  5. # NAME
  6. $(basename $0) -- Script format device and copy rootfs on it
  7. # OPTIONS
  8. -d device name (img, /dev/sdc, /dev/mmc) (mandatory)
  9. -s size of img in MB (mandatory only for img device option)
  10. EOF
  11. exit 1
  12. }
  13. DEST=./olinux
  14. MNT=/mnt
  15. IMAGE=olinux.img
  16. while getopts "s:d:" opt; do
  17. case $opt in
  18. d)
  19. DEVICE=$OPTARG
  20. ;;
  21. s)
  22. SDSIZE=$OPTARG
  23. ;;
  24. \?)
  25. show_usage
  26. ;;
  27. esac
  28. done
  29. if [ -z $DEVICE ] ; then
  30. show_usage
  31. fi
  32. if [ "$DEVICE" == "img" ] && [ -z $SDSIZE ] ; then
  33. show_usage
  34. fi
  35. if [ "${DEVICE}" == "img" ] ; then
  36. echo "- Create image."
  37. rm -f olinux/$IMAGE
  38. # create image file
  39. dd if=/dev/zero of=olinux/$IMAGE bs=1MB count=$SDSIZE status=noxfer >/dev/null 2>&1
  40. # find first avaliable free device
  41. DEVICE=$(losetup -f)
  42. TYPE="loop"
  43. # mount image as block device
  44. losetup $DEVICE $DEST/$IMAGE >/dev/null 2>&1
  45. sync
  46. fi
  47. # create one partition starting at 2048 which is default
  48. echo "- Partitioning"
  49. parted --script -a optimal $DEVICE unit GB mklabel msdos
  50. parted --script -a optimal $DEVICE unit GB mkpart primary ext4 2048s 99%
  51. parted --script -a optimal $DEVICE unit GB align-check optimal 1
  52. if [ "${TYPE}" == "loop" ] ; then
  53. DEVICEP1=${DEVICE}p1
  54. else
  55. DEVICEP1=${DEVICE}1
  56. fi
  57. echo "- Formating"
  58. # create filesystem
  59. mkfs.ext4 $DEVICEP1 >/dev/null 2>&1
  60. # tune filesystem
  61. tune2fs -o journal_data_writeback $DEVICEP1 >/dev/null 2>&1
  62. echo "- Mount filesystem"
  63. # mount image to already prepared mount point
  64. mount -t ext4 $DEVICEP1 $MNT
  65. echo "- Copy bootstrap files"
  66. # copy debootstrap
  67. cp -ar olinux/debootstrap/* $MNT/
  68. sync
  69. echo "- Write sunxi-with-spl"
  70. dd if=olinux/sunxi/u-boot/u-boot-sunxi-with-spl.bin of=${DEVICE} bs=1024 seek=8 >/dev/null 2>&1
  71. echo "- Umount"
  72. if [ "${TYPE}" == "loop" ] ; then
  73. umount $MNT
  74. losetup -d $DEVICE
  75. else
  76. umount $MNT
  77. fi