create_sunxi_boot_files.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #/bin/sh
  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
  17. -c cross compilation
  18. EOF
  19. exit 1
  20. }
  21. THREADS=2
  22. MAINTAINER=${MAINTAINER:-'Emile'}
  23. MAINTAINERMAIL=${MAINTAINERMAIL:-'emile@bleuchtang.fr'}
  24. REP=$(dirname $0)
  25. TARGET=/olinux/sunxi
  26. while getopts ":ob:t:l:c" opt; do
  27. case $opt in
  28. o)
  29. OFFLINE=yes
  30. ;;
  31. b)
  32. BOARD=$OPTARG
  33. ;;
  34. j)
  35. THREADS=$OPTARG
  36. ;;
  37. t)
  38. TARGET=$OPTARG
  39. ;;
  40. l)
  41. LOGO=$OPTARG
  42. ;;
  43. c)
  44. CROSS=yes
  45. ;;
  46. \?)
  47. show_usage
  48. ;;
  49. esac
  50. done
  51. source ${REP}/config_board.sh
  52. clone_or_pull (){
  53. project=$1
  54. repo=$2
  55. name=$(echo $project | sed 's/.git$//')
  56. if [ "$OFFLINE" ] ; then
  57. if [ -f ${TARGET}/$name/Makefile ] ; then
  58. cd ${TARGET}/$name/ && make clean && git checkout .
  59. return 0
  60. else
  61. return 0
  62. fi
  63. fi
  64. if [ -d ${TARGET}/$name/ ] ; then
  65. if [ -f ${TARGET}/$name/Makefile ] ; then
  66. cd ${TARGET}/$name/ && make clean && git checkout . && git pull
  67. else
  68. cd ${TARGET}/$name/ && git checkout . && git pull
  69. fi
  70. else
  71. git clone $repo/$project ${TARGET}/$name/
  72. fi
  73. }
  74. mkdir -p ${TARGET}/
  75. ## Sunxi u-boot
  76. clone_or_pull u-boot.git http://git.denx.de
  77. cd ${TARGET}/u-boot/
  78. if [ ${CROSS} ] ; then
  79. make $U_BOOT_CONFIG ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  80. else
  81. make $U_BOOT_CONFIG CC=/usr/bin/gcc-4.7
  82. fi
  83. if [ "$LOGO" ] ; then
  84. cp ${REP}/logo/${LOGO}.bmp ${TARGET}/u-boot/tools/logos/denx.bmp
  85. 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
  86. fi
  87. if [ ${CROSS} ] ; then
  88. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  89. else
  90. make CC=/usr/bin/gcc-4.7
  91. fi
  92. # Linux kernel
  93. clone_or_pull linux.git http://git.kernel.org/pub/scm/linux/kernel/git/torvalds
  94. cd ${TARGET}/linux/
  95. # igorpecovnik patch for debian package
  96. patch -p1 < ${REP}/patch/packaging-next.patch
  97. cp ${REP}/config/linux-sunxi.config ${TARGET}/linux/.config
  98. if [ "$LOGO" ] ; then
  99. cp /${REP}/logo/${LOGO}.ppm ${TARGET}/linux/drivers/video/logo/logo_linux_clut224.ppm
  100. fi
  101. #make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfig
  102. #make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  103. if [ ${CROSS} ] ; then
  104. make -j${THREADS} ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all zImage
  105. else
  106. make -j${THREADS} CC=/usr/bin/gcc-4.7 all zImage
  107. fi
  108. # Install device tree blobs in separate package, link zImage to kernel image script
  109. rm -f ${TARGET}/*.deb
  110. if [ ${CROSS} ] ; then
  111. make -j1 deb-pkg KBUILD_DEBARCH=armhf ARCH=arm DEBFULLNAME="$MAINTAINER" DEBEMAIL="$MAINTAINERMAIL" CROSS_COMPILE=arm-linux-gnueabihf-
  112. else
  113. make -j1 deb-pkg KBUILD_DEBARCH=armhf DEBFULLNAME="$MAINTAINER" DEBEMAIL="$MAINTAINERMAIL" CC=/usr/bin/gcc-4.7
  114. fi
  115. rm -rf ${TARGET}/config/boot.scr
  116. mkimage -C none -A arm -T script -d ${REP}/config/boot.cmd ${TARGET}/boot.scr