create_sunxi_boot_files.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #!/bin/bash
  2. ######################
  3. # Sunxi compilation #
  4. ######################
  5. set -e
  6. set -x
  7. show_usage() {
  8. cat <<EOF
  9. # NAME
  10. $(basename $0) -- Script to build sunxi kernel and boot files
  11. # OPTIONS
  12. -o offline mode (mandatory)
  13. -b olinux board (a10lime, a20lime, a20lime2, a20micro) (default: a20lime)
  14. -t target directory for compilation (default: /olinux/sunxi)
  15. -j number of thread (default: 2)
  16. -l change linux boot logo (default: false)
  17. -c cross compilation (default: false)
  18. -s use stable tarball (and not GIT tree) (default: false)
  19. EOF
  20. exit 1
  21. }
  22. THREADS=2
  23. MAINTAINER=${MAINTAINER:-'Emile'}
  24. MAINTAINERMAIL=${MAINTAINERMAIL:-'emile@bleuchtang.fr'}
  25. REP=$(dirname $0)
  26. TARGET=/olinux/sunxi
  27. UBOOT_RELEASE=${UBOOT_RELEASE:-'ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2'}
  28. LINUX_RELEASE=${LINUX_RELEASE:-'https://kernel.org/pub/linux/kernel/v4.x/linux-4.0.tar.xz'}
  29. while getopts ":ob:t:l:cs" opt; do
  30. case $opt in
  31. o)
  32. OFFLINE=yes
  33. ;;
  34. b)
  35. BOARD=$OPTARG
  36. ;;
  37. j)
  38. THREADS=$OPTARG
  39. ;;
  40. t)
  41. TARGET=$OPTARG
  42. ;;
  43. l)
  44. LOGO=$OPTARG
  45. ;;
  46. c)
  47. CROSS=yes
  48. ;;
  49. s)
  50. TARBALL=yes
  51. ;;
  52. \?)
  53. show_usage
  54. ;;
  55. esac
  56. done
  57. . ${REP}/config_board.sh
  58. fetch (){
  59. project=$1
  60. repo=$2
  61. tarball_url=$3
  62. name=$(echo $project | sed 's/.git$//')
  63. if [ ${TARBALL} ] ; then
  64. cd ${TARGET}
  65. [ -d ${name} ] && rm -rf "${name:?}/"*
  66. archive=$(basename $tarball_url)
  67. format=$(basename "${archive##*.}")
  68. case $format in
  69. 'gz') tar_opts='xzf' ;;
  70. 'xz') tar_opts='xf' ;;
  71. 'bz2') tar_opts='xjf' ;;
  72. esac
  73. wget $tarball_url -O $archive
  74. mkdir -p tmp
  75. tar $tar_opts $archive -C tmp/
  76. mkdir -p $name
  77. mv tmp/$name*/* $name
  78. rm -rf tmp/
  79. return 0
  80. fi
  81. if [ "$OFFLINE" ] ; then
  82. if [ -f ${TARGET}/$name/Makefile ] ; then
  83. cd ${TARGET}/$name/ && make clean && git checkout .
  84. return 0
  85. else
  86. return 0
  87. fi
  88. fi
  89. if [ -d ${TARGET}/$name/ ] ; then
  90. if [ -f ${TARGET}/$name/Makefile ] ; then
  91. cd ${TARGET}/$name/ && make clean && git checkout . && git pull
  92. else
  93. cd ${TARGET}/$name/ && git checkout . && git pull
  94. fi
  95. else
  96. git clone $repo/$project ${TARGET}/$name/
  97. fi
  98. }
  99. mkdir -p ${TARGET}/
  100. ## Sunxi u-boot
  101. fetch u-boot.git http://git.denx.de $UBOOT_RELEASE
  102. cd ${TARGET}/u-boot/
  103. if [ ${CROSS} ] ; then
  104. make $U_BOOT_CONFIG ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  105. else
  106. make $U_BOOT_CONFIG CC=/usr/bin/gcc-4.9
  107. fi
  108. if [ "$LOGO" ] ; then
  109. cp ${REP}/logo/${LOGO}.bmp ${TARGET}/u-boot/tools/logos/denx.bmp
  110. sed -i -e 's/#define CONFIG_VIDEO_LOGO/#define CONFIG_VIDEO_LOGO\n#define CONFIG_VIDEO_BMP_LOGO/' ${TARGET}/u-boot/include/configs/sunxi-common.h
  111. fi
  112. if [ ${CROSS} ] ; then
  113. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  114. else
  115. make CC=/usr/bin/gcc-4.9
  116. fi
  117. # Linux kernel
  118. fetch linux.git http://git.kernel.org/pub/scm/linux/kernel/git/torvalds $LINUX_RELEASE
  119. cd ${TARGET}/linux/
  120. # igorpecovnik patch for debian package
  121. patch -p1 < ${REP}/patch/packaging-next.patch
  122. cp ${REP}/config/linux-sunxi.config ${TARGET}/linux/.config
  123. if [ "$LOGO" ] ; then
  124. cp /${REP}/logo/${LOGO}.ppm ${TARGET}/linux/drivers/video/logo/logo_linux_clut224.ppm
  125. fi
  126. #make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfig
  127. #make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  128. if [ ${CROSS} ] ; then
  129. make -j${THREADS} ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all zImage
  130. else
  131. make -j${THREADS} CC=/usr/bin/gcc-4.9 all zImage
  132. fi
  133. # Install device tree blobs in separate package, link zImage to kernel image script
  134. rm -f ${TARGET}/*.deb
  135. if [ ${CROSS} ] ; then
  136. make -j1 deb-pkg KBUILD_DEBARCH=armhf ARCH=arm DEBFULLNAME="$MAINTAINER" DEBEMAIL="$MAINTAINERMAIL" CROSS_COMPILE=arm-linux-gnueabihf-
  137. else
  138. make -j1 deb-pkg KBUILD_DEBARCH=armhf DEBFULLNAME="$MAINTAINER" DEBEMAIL="$MAINTAINERMAIL" CC=/usr/bin/gcc-4.9
  139. fi
  140. rm -rf ${TARGET}/config/boot.scr
  141. mkimage -C none -A arm -T script -d ${REP}/config/boot.cmd ${TARGET}/boot.scr