Advertisement
Guest User

buildBananaPiM3OnSdCard.sh

a guest
May 9th, 2016
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.81 KB | None | 0 0
  1. # buildBananaPiM3OnSdCard.sh <sdcard> <mount directory>
  2. # This will attempt to build a jessie chroot
  3. # WARNING, this will wipe your SD Card
  4. # Damien Mascord <tusker@tusker.org>
  5.  
  6. # LINUX_SRC_DIR is a git clone https://github.com/wens/linux.git
  7. LINUX_SRC_DIR=./linux
  8. #UBOOT_SRC_DIR is a git clone http://git.denx.de/u-boot.git
  9. UBOOT_SRC_DIR=./u-boot-sunxi
  10. HOSTNAME=BPiM3
  11. ROOTPASS=`date | md5sum | cut -c1-16`
  12.  
  13. if [ $# -lt 2 ]; then
  14.     echo "Usage: $0 <sdcard (ie /dev/sdc)> <mount directory (ie /mnt)>"
  15.     echo " *** WARNING - this will repartition and wipe your sd card ***"
  16.     exit 1
  17. fi
  18. SDCARD=$1
  19. MNT_DIR=$2
  20. sudo echo "sudo successfully"
  21. if [ $? != 0 ]; then
  22.     echo "Unable to sudo, please ensure that global sudo is setup correctly for this user"
  23. fi
  24.  
  25. # partition the SD Card, leaving 2M at the beginning of the card for u-boot
  26. sudo sfdisk $SDCARD << EOF
  27. 2048,
  28. EOF
  29.    
  30. # make the ext4 filesystem
  31. sudo mkfs.ext4 ${SDCARD}1
  32. # mount the first partition of the SD Card
  33. sudo mount ${SDCARD}1 $MNT_DIR
  34. # build the jessie chroot
  35. sudo qemu-debootstrap --verbose --include=linux-image-armmp-lpae,locales,sunxi-tools,firmware-linux,ssh --arch=armhf --components=main,non-free jessie $MNT_DIR http://ftp.au.debian.org/debian/
  36. echo > /tmp/boot.cmd <<EOF
  37. setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p1 rootwait panic=10
  38. load mmc 0:1 0x43000000 sun8i-a83t-sinovoip-bpi-m3.dtb || load mmc 0:1 0x43000000 boot/sun8i-a83t-sinovoip-bpi-m3.dtb
  39. load mmc 0:1 0x42000000 zImage || load mmc 0:1 0x42000000 boot/zImage
  40. bootz 0x42000000 - 0x43000000
  41. EOF
  42. sudo mv /tmp/boot.cmd $MNT_DIR/boot.cmd
  43. sudo mkimage -C none -A arm -T script -d $MNT_DIR/boot.cmd $MNT_DIR/boot.scr
  44. if [ ! -e $LINUX_SRC_DIR ]; then
  45.     git clone https://github.com/wens/linux.git
  46.     git fetch
  47.     git checkout a83-emac -b remotes/origin/a83-emac
  48. fi
  49. # build the debian kernel package
  50. pushd $LINUX_SRC_DIR
  51. ARCH=arm make sinovoip_bpi_m3_defconfig
  52. # grab the latest from the repo
  53. git pull
  54. export ARCH=arm
  55. export DEB_HOST_ARCH=armhf
  56. export CROSS_COMPILE=arm-linux-gnueabihf-
  57.  
  58. export CONCURRENCY_LEVEL=`grep -m1 cpu\ cores /proc/cpuinfo | cut -d : -f 2`
  59. fakeroot make-kpkg --arch arm --cross-compile arm-linux-gnueabihf- --initrd --append-to-version=-custom1 kernel_image kernel_headers
  60. popd
  61. # copy the latest linux-headers and linux-image in the current directory to $MNT_DIR/tmp
  62. LATEST_LINUX_IMAGE=`ls -rt | grep linux-image | tail -1`
  63. LATEST_LINUX_HEADERS=`ls -rt | grep linux-headers | tail -1`
  64. sudo cp -rp $LATEST_LINUX_IMAGE $MNT_DIR/tmp
  65. sudo cp -rp $LATEST_LINUX_HEADERS $MNT_DIR/tmp
  66. # install the linux-headers and linux-image into the mounted chroot
  67. sudo chroot $MNT_DIR dpkg -i /tmp/$LATEST_LINUX_IMAGE
  68. sudo chroot $MNT_DIR dpkg -i /tmp/$LATEST_LINUX_HEADERS
  69. # find out the latest vmlinuz (just installed)
  70. LATEST_IN_CHROOT_VMLINUZ=`sudo ls -rt $MNT_DIR/boot/vmlinuz-* | tail -n1`
  71. LATEST_IN_CHROOT_VMLINUZ=`basename $LATEST_IN_CHROOT_VMLINUZ`
  72. sudo chroot $MNT_DIR ln -s /boot/$LATEST_IN_CHROOT_VMLINUZ /boot/zImage
  73. sudo chroot $MNT_DIR ln -s /boot/zImage /zImage
  74. # copy in the dtb file into the chroot
  75. sudo cp -rp $LINUX_SRC_DIR/arch/arm/boot/dts/sun8i-a83t-sinovoip-bpi-m3.dtb $MNT_DIR/boot
  76. sudo chroot ln -s $MNT_DIR/boot .
  77. if [ ! -e $LINUX_SRC_DIR ]; then
  78.     git clone http://git.denx.de/u-boot.git
  79.     git fetch
  80.     git checkout v2016.05-rc3
  81. fi
  82. pushd $UBOOT_SRC_DIR
  83. # grab the latest from the repo
  84. git pull
  85. export ARCH=arm
  86. export CROSS_COMPILE=arm-linux-gnueabihf-
  87. make Sinovoip_BPI_M3_defconfig
  88. sudo dd if=u-boot-sunxi-with-spl.bin of=$SDCARD bs=1024 seek=8
  89. popd
  90.  
  91. # once we have our jessie base system, latest built kernel, and u-boot installed, modify our root filesystem to be bootable
  92. echo "/dev/mmcblk0p1  /           ext4    relatime,errors=remount-ro        0       1" > /tmp/fstab
  93. sudo mv /tmp/fstab $MNT_DIR/etc/
  94. echo $HOSTNAME > /tmp/hostname
  95. sudo mv /tmp/hostname $MNT_DIR/etc/
  96. # make sure our hosts resolve our local domain
  97. sudo chroot $MNT_DIR perl -i -p -e "s/localhost/localhost $HOSTNAME/g" /etc/hosts
  98. # setup debian apt repos
  99. cat <<EOF > /tmp/sources.list
  100. #
  101.  
  102. deb http://ftp.au.debian.org/debian/ jessie main non-free contrib
  103. deb-src http://ftp.au.debian.org/debian/ jessie main non-free contrib
  104.  
  105. deb http://security.debian.org/ jessie/updates main contrib non-free
  106. deb-src http://security.debian.org/ jessie/updates main contrib non-free
  107.  
  108. # jessie-updates, previously known as 'volatile'
  109. deb http://ftp.au.debian.org/debian/ jessie-updates main contrib non-free
  110. deb-src http://ftp.au.debian.org/debian/ jessie-updates main contrib non-free
  111. EOF
  112. sudo mv /tmp/sources.list $MNT_DIR/etc/apt/
  113.  
  114. # setup network interfaces
  115. cat <<EOF > /tmp/interfaces
  116. # This file describes the network interfaces available on your system
  117. # and how to activate them. For more information, see interfaces(5).
  118.  
  119. # The loopback network interface
  120. auto lo
  121. iface lo inet loopback
  122.  
  123. # The primary network interface
  124. allow-hotplug eth0
  125. iface eth0 inet dhcp
  126. EOF
  127. sudo mv /tmp/interfaces $MNT_DIR/etc/network/
  128. # setup getty
  129. echo "T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100" >> /tmp/inittab
  130. sudo mv /tmp/inittab $MNT_DIR/etc/
  131. # allow root login via SSH
  132. sudo sed -i "s/^PermitRootLogin without-password/PermitRootLogin yes/" $MNT_DIR/etc/ssh/sshd_config
  133. sudo mount -t proc chproc $MNT_DIR/proc
  134. sudo mount chsys $MNT_DIR/sys -t sysfs
  135. sudo mount -t devtmpfs chdev $MNT_DIR/dev || mount --bind /dev $MNT_DIR/dev
  136. sudo mount -t devpts chpts $MNT_DIR/dev/pts
  137. sudo echo -e '#!/bin/sh\nexit 101' > $MNT_DIR/usr/sbin/policy-rc.d
  138. sudo chmod 755 $MNT_DIR/usr/sbin/policy-rc.d
  139. DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C sudo -E chroot $MNT_DIR dpkg --configure -a
  140. LC_ALL=C LANGUAGE=C LANG=C sudo -E chroot $MNT_DIR dpkg-reconfigure locales
  141. LC_ALL=C LANGUAGE=C LANG=C sudo -E chroot $MNT_DIR dpkg-reconfigure tzdata
  142. LC_ALL=C LANGUAGE=C LANG=C sudo -E chroot $MNT_DIR apt-get -q -y install u-boot u-boot-tools
  143. # get the wifi sdio
  144. LC_ALL=C LANGUAGE=C LANG=C sudo -E chroot $MNT_DIR apt-get -q -y install firmware-brcm80211
  145. sudo wget -O $MNT_DIR/lib/firmware/brcm/brcmfmac43430-sdio.bin https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm80211/brcm/brcmfmac43430-sdio.bin
  146. sudo wget -O $MNT_DIR/lib/firmware/brcm/brcmfmac43430-sdio.txt https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm80211/brcm/brcmfmac43430-sdio.txt
  147. # install some other things
  148. LC_ALL=C LANGUAGE=C LANG=C sudo -E chroot $MNT_DIR apt-get -q -y install console-setup keyboard-configuration openssh-server ntp
  149. # set the root password
  150. echo "root:$ROOTPASS"| LC_ALL=C LANGUAGE=C LANG=C sudo -E chroot $MNT_DIR chpasswd
  151. echo "Setting your root password to be $ROOTPASS"
  152. sudo rm $MNT_DIR/usr/sbin/policy-rc.d
  153. sudo rm $MNT_DIR/usr/bin/qemu-arm-static
  154. sudo umount $MNT_DIR/dev/pts && umount $MNT_DIR/dev && umount $MNT_DIR/sys && umount $MNT_DIR/proc && umount $MNT_DIR
  155. sudo sync
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement