create_sunxi_boot_files.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. archive=$(basename $tarball_url)
  66. format=$(basename "${archive##*.}")
  67. case $format in
  68. 'gz') tar_opts='xzf' ;;
  69. 'xz') tar_opts='xf' ;;
  70. 'bz2') tar_opts='xjf' ;;
  71. esac
  72. wget $tarball_url -O $archive
  73. mkdir -p tmp
  74. tar $tar_opts $archive -C tmp/
  75. mkdir -p $name
  76. mv tmp/$name*/* $name
  77. rm -rf tmp/
  78. return 0
  79. fi
  80. if [ "$OFFLINE" ] ; then
  81. if [ -f ${TARGET}/$name/Makefile ] ; then
  82. cd ${TARGET}/$name/ && make clean && git checkout .
  83. return 0
  84. else
  85. return 0
  86. fi
  87. fi
  88. if [ -d ${TARGET}/$name/ ] ; then
  89. if [ -f ${TARGET}/$name/Makefile ] ; then
  90. cd ${TARGET}/$name/ && make clean && git checkout . && git pull
  91. else
  92. cd ${TARGET}/$name/ && git checkout . && git pull
  93. fi
  94. else
  95. git clone $repo/$project ${TARGET}/$name/
  96. fi
  97. }
  98. mkdir -p ${TARGET}/
  99. ## Sunxi u-boot
  100. fetch u-boot.git http://git.denx.de $UBOOT_RELEASE
  101. cd ${TARGET}/u-boot/
  102. if [ ${CROSS} ] ; then
  103. make $U_BOOT_CONFIG ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  104. else
  105. make $U_BOOT_CONFIG CC=/usr/bin/gcc-4.7
  106. fi
  107. if [ "$LOGO" ] ; then
  108. cp ${REP}/logo/${LOGO}.bmp ${TARGET}/u-boot/tools/logos/denx.bmp
  109. 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
  110. fi
  111. if [ ${CROSS} ] ; then
  112. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  113. else
  114. make CC=/usr/bin/gcc-4.7
  115. fi
  116. # Linux kernel
  117. fetch linux.git http://git.kernel.org/pub/scm/linux/kernel/git/torvalds $LINUX_RELEASE
  118. cd ${TARGET}/linux/
  119. # igorpecovnik patch for debian package
  120. patch -p1 < ${REP}/patch/packaging-next.patch
  121. cp ${REP}/config/linux-sunxi.config ${TARGET}/linux/.config
  122. if [ "$LOGO" ] ; then
  123. cp /${REP}/logo/${LOGO}.ppm ${TARGET}/linux/drivers/video/logo/logo_linux_clut224.ppm
  124. fi
  125. #make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfig
  126. #make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  127. if [ ${CROSS} ] ; then
  128. make -j${THREADS} ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all zImage
  129. else
  130. make -j${THREADS} CC=/usr/bin/gcc-4.7 all zImage
  131. fi
  132. # Install device tree blobs in separate package, link zImage to kernel image script
  133. rm -f ${TARGET}/*.deb
  134. if [ ${CROSS} ] ; then
  135. make -j1 deb-pkg KBUILD_DEBARCH=armhf ARCH=arm DEBFULLNAME="$MAINTAINER" DEBEMAIL="$MAINTAINERMAIL" CROSS_COMPILE=arm-linux-gnueabihf-
  136. else
  137. make -j1 deb-pkg KBUILD_DEBARCH=armhf DEBFULLNAME="$MAINTAINER" DEBEMAIL="$MAINTAINERMAIL" CC=/usr/bin/gcc-4.7
  138. fi
  139. rm -rf ${TARGET}/config/boot.scr
  140. mkimage -C none -A arm -T script -d ${REP}/config/boot.cmd ${TARGET}/boot.scr