Advertisement
Guest User

linux-3.10/scripts/build.sh

a guest
Dec 12th, 2015
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.17 KB | None | 0 0
  1. #!/bin/bash
  2. set -e
  3.  
  4. #Setup common variables
  5. export ARCH=arm
  6. if [ -n "`echo ${LICHEE_CHIP} | grep "sun5[0-9]i"`" ]; then
  7. export ARCH=arm64
  8. fi
  9. export CROSS_COMPILE=${ARCH}-linux-gnueabi-
  10. if [ -d ${LICHEE_TOOLCHAIN_PATH} ]; then
  11. GCC=$(find ${LICHEE_TOOLCHAIN_PATH} -perm /a+x -a -regex '.*-gcc');
  12. export CROSS_COMPILE="${GCC%-*}-";
  13. elif [ -n "${LICHEE_CROSS_COMPILER}" ]; then
  14. export CROSS_COMPILE="${LICHEE_CROSS_COMPILER}-"
  15. fi
  16.  
  17. export AS=${CROSS_COMPILE}as
  18. export LD=${CROSS_COMPILE}ld
  19. export CC=${CROSS_COMPILE}gcc
  20. export AR=${CROSS_COMPILE}ar
  21. export NM=${CROSS_COMPILE}nm
  22. export STRIP=${CROSS_COMPILE}strip
  23. export OBJCOPY=${CROSS_COMPILE}objcopy
  24. export OBJDUMP=${CROSS_COMPILE}objdump
  25. export LOCALVERSION=""
  26. export MKBOOTIMG=${LICHEE_TOOLS_DIR}/pack/pctools/linux/android/mkbootimg
  27.  
  28. KERNEL_VERSION=`make -s kernelversion -C ./`
  29. LICHEE_KDIR=`pwd`
  30. LICHEE_MOD_DIR=${LICHEE_KDIR}/output/lib/modules/${KERNEL_VERSION}
  31. export LICHEE_KDIR
  32.  
  33. update_kern_ver()
  34. {
  35. if [ -r include/generated/utsrelease.h ]; then
  36. KERNEL_VERSION=`cat include/generated/utsrelease.h |awk -F\" '{print $2}'`
  37. fi
  38. LICHEE_MOD_DIR=${LICHEE_KDIR}/output/lib/modules/${KERNEL_VERSION}
  39. }
  40.  
  41. show_help()
  42. {
  43. printf "
  44. Build script for Lichee platform
  45.  
  46. Invalid Options:
  47.  
  48. help - show this help
  49. kernel - build kernel
  50. modules - build kernel module in modules dir
  51. clean - clean kernel and modules
  52.  
  53. "
  54. }
  55.  
  56. NAND_ROOT=${LICHEE_KDIR}/modules/nand
  57.  
  58. build_nand_lib()
  59. {
  60. echo "build nand library ${NAND_ROOT}/${LICHEE_CHIP}/lib"
  61. if [ -d ${NAND_ROOT}/${LICHEE_CHIP}/lib ]; then
  62. echo "build nand library now"
  63. make -C modules/nand/${LICHEE_CHIP}/lib clean 2>/dev/null
  64. make -C modules/nand/${LICHEE_CHIP}/lib lib install
  65. else
  66. echo "build nand with existing library"
  67. fi
  68. }
  69.  
  70. build_gpu_sun8i()
  71. {
  72. echo "$0"
  73. }
  74.  
  75. build_gpu_sun8iw6()
  76. {
  77. echo "$0"
  78. }
  79.  
  80. build_gpu_sun9iw1()
  81. {
  82. echo "$0"
  83. }
  84.  
  85. build_gpu()
  86. {
  87. if [ "x${LICHEE_PLATFORM}" = "xandroid" ] ; then
  88. {
  89. unset OUT
  90. unset TOP
  91. }
  92. fi
  93.  
  94. make -C modules/gpu LICHEE_MOD_DIR=${LICHEE_MOD_DIR} LICHEE_KDIR=${LICHEE_KDIR}
  95. }
  96.  
  97. clean_gpu_sun9iw1()
  98. {
  99. echo "$0"
  100. }
  101.  
  102. clean_gpu_sun8iw6()
  103. {
  104. echo "$0"
  105. }
  106.  
  107. clean_gpu()
  108. {
  109. echo "Nothing to do."
  110. }
  111.  
  112.  
  113. build_kernel()
  114. {
  115. echo "Building kernel"
  116.  
  117. cd ${LICHEE_KDIR}
  118.  
  119. rm -rf output/
  120. echo "${LICHEE_MOD_DIR}"
  121. mkdir -p ${LICHEE_MOD_DIR}
  122.  
  123. # We need to copy rootfs files to compile kernel for linux image
  124. cp -f rootfs.cpio.gz output/
  125.  
  126. if [ ! -f .config ] ; then
  127. printf "\n\033[0;31;1mUsing default config ${LICHEE_KERN_DEFCONF} ...\033[0m\n\n"
  128. cp arch/${ARCH}/configs/${LICHEE_KERN_DEFCONF} .config
  129. fi
  130.  
  131. if [ "x$SUNXI_CHECK" = "x1" ];then
  132. SUNXI_SPARSE_CHECK=1
  133. SUNXI_SMATCH_CHECK=1
  134. SUNXI_STACK_CHECK=1
  135. fi
  136. if [ "x$SUNXI_SPARSE_CHECK" = "x" ] && [ "x$SUNXI_SMATCH_CHECK" = "x" ];then
  137. make ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} -j${LICHEE_JLEVEL} all modules
  138. else
  139. if [ "x$SUNXI_SPARSE_CHECK" = "x1" ] && [ -f ../tools/codecheck/sparse/sparse ];then
  140. echo "\n\033[0;31;1mBuilding Round for sparse check ${KERNEL_CFG}...\033[0m\n\n"
  141. make clean
  142. make CHECK="../tools/codecheck/sparse/sparse" ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} -j${LICHEE_JLEVEL} C=2 all modules 2>&1|tee output/build_sparse.txt
  143. cat output/build_sparse.txt|egrep -w '(warn|error|warning)' >output/warn_sparse.txt
  144. fi
  145. if [ "x$SUNXI_SMATCH_CHECK" = "x1" ]&& [ -f ../tools/codecheck/smatch/smatch ];then
  146. echo "\n\033[0;31;1mBuilding Round for smatch check ${KERNEL_CFG}...\033[0m\n\n"
  147. make clean
  148. make CHECK="../tools/codecheck/smatch/smatch --full-path --no-data -p=kkernel" ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} -j${LICHEE_JLEVEL} C=2 all modules 2>&1|tee output/build_smatch.txt
  149. cat output/build_smatch.txt|egrep -w '(warn|error|warning)' >output/warn_smatch.txt
  150. fi
  151. fi
  152. if [ "x$SUNXI_STACK_CHECK" = "x1" ];then
  153. make ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} -j${LICHEE_JLEVEL} checkstack 2>&1|tee output/warn_stack.txt
  154. fi
  155. update_kern_ver
  156.  
  157. #The Image is origin binary from vmlinux.
  158. if [ -f arch/${ARCH}/boot/Image ]; then
  159. cp -vf arch/${ARCH}/boot/Image output/bImage
  160. fi
  161.  
  162. if [ -f arch/${ARCH}/boot/zImage ] || [ -f arch/${ARCH}/boot/uImage ]; then
  163. cp -vf arch/${ARCH}/boot/[zu]Image output/
  164. fi
  165.  
  166. if [ -f arch/${ARCH}/boot/Image.gz ]; then
  167. cp -vf arch/${ARCH}/boot/Image.gz output/
  168. fi
  169.  
  170. cp .config output/
  171.  
  172. tar -jcf output/vmlinux.tar.bz2 vmlinux
  173. for file in $(find drivers sound crypto block fs security net -name "*.ko"); do
  174. cp $file ${LICHEE_MOD_DIR}
  175. done
  176. cp -f Module.symvers ${LICHEE_MOD_DIR}
  177.  
  178. }
  179.  
  180. build_modules()
  181. {
  182.  
  183. echo "Building modules"
  184.  
  185. if [ ! -f include/generated/utsrelease.h ]; then
  186. printf "Please build kernel first!\n"
  187. exit 1
  188. fi
  189.  
  190. update_kern_ver
  191. build_nand_lib
  192. make -C modules/nand LICHEE_MOD_DIR=${LICHEE_MOD_DIR} LICHEE_KDIR=${LICHEE_KDIR} \
  193. CONFIG_CHIP_ID=${CONFIG_CHIP_ID} install
  194. make -C modules/aw_schw LICHEE_MOD_DIR=${LICHEE_MOD_DIR} LICHEE_KDIR=${LICHEE_KDIR} \
  195. CONFIG_CHIP_ID=${CONFIG_CHIP_ID} install
  196.  
  197. build_gpu
  198. }
  199.  
  200. regen_rootfs_cpio()
  201. {
  202. echo "regenerate rootfs cpio"
  203.  
  204. cd ${LICHEE_KDIR}/output
  205. if [ -x "../scripts/build_rootfs.sh" ]; then
  206. ../scripts/build_rootfs.sh e ./rootfs.cpio.gz > /dev/null
  207. else
  208. echo "No such file: scripts/build_rootfs.sh"
  209. exit 1
  210. fi
  211.  
  212. mkdir -p ./skel/lib/modules/${KERNEL_VERSION}
  213.  
  214. if [ -e ${LICHEE_MOD_DIR}/nand.ko ]; then
  215. cp ${LICHEE_MOD_DIR}/nand.ko ./skel/lib/modules/${KERNEL_VERSION}
  216. if [ $? -ne 0 ]; then
  217. echo "copy nand module error: $?"
  218. exit 1
  219. fi
  220. fi
  221. ko_file=`find ./skel/lib/modules/$KERNEL_VERSION/ -name *.ko`
  222. if [ ! -z "$ko_file" ]; then
  223. ${STRIP} -d ./skel/lib/modules/$KERNEL_VERSION/*.ko
  224. fi
  225. rm -f rootfs.cpio.gz
  226. ../scripts/build_rootfs.sh c rootfs.cpio.gz > /dev/null
  227. rm -rf skel
  228. cd - > /dev/null
  229. }
  230.  
  231. build_ramfs()
  232. {
  233. local bss_sz=0;
  234. local CHIP="";
  235.  
  236. local BIMAGE="output/bImage";
  237. local RAMDISK="output/rootfs.cpio.gz";
  238. local BASE="";
  239. local RAMDISK_OFFSET="";
  240. local KERNEL_OFFSET="";
  241.  
  242. # update rootfs.cpio.gz with new module files
  243. regen_rootfs_cpio
  244.  
  245. CHIP=`echo ${LICHEE_CHIP} | sed -e 's/.*\(sun[0-9x]*i\).*/\1/g'`;
  246.  
  247. if [ "${CHIP}" = "sun9i" ]; then
  248. BASE="0x20000000";
  249. KERNEL_OFFSET="0x8000";
  250. elif [ "${CHIP}" = "sun50i" ]; then
  251. BASE="0x41000000";
  252. KERNEL_OFFSET="0x80000";
  253. else
  254. BASE="0x40000000";
  255. KERNEL_OFFSET="0x8000";
  256. fi
  257.  
  258. if [ -f vmlinux ]; then
  259. bss_sz=`${CROSS_COMPILE}readelf -S vmlinux | \
  260. awk '/\.bss/ {print strtonum("0x"$5)+strtonum("0x"$6)}'`;
  261. fi
  262. #bss_sz=`du -sb ${BIMAGE} | awk '{printf("%u", $1)}'`;
  263. #
  264. # If the size of bImage larger than 16M, will offset 0x02000000
  265. #
  266. if [ ${bss_sz} -gt $((16#1000000)) ]; then
  267. RAMDISK_OFFSET="0x02000000";
  268. else
  269. RAMDISK_OFFSET="0x01000000";
  270. fi
  271.  
  272. ${MKBOOTIMG} --kernel ${BIMAGE} \
  273. --ramdisk ${RAMDISK} \
  274. --board ${CHIP} \
  275. --base ${BASE} \
  276. --kernel_offset ${KERNEL_OFFSET} \
  277. --ramdisk_offset ${RAMDISK_OFFSET} \
  278. -o output/boot.img
  279.  
  280. # If uboot use *bootm* to boot kernel, we should use uImage.
  281. echo build_ramfs
  282. echo "Copy boot.img to output directory ..."
  283. cp output/boot.img ${LICHEE_PLAT_OUT}
  284. cp output/vmlinux.tar.bz2 ${LICHEE_PLAT_OUT}
  285.  
  286. if [ ! -f output/arisc ]; then
  287. echo "arisc" > output/arisc
  288. fi
  289. cp output/arisc ${LICHEE_PLAT_OUT}
  290.  
  291. if [ ! -f arch/${ARCH}/boot/dts/${LICHEE_CHIP}-${LICHEE_BOARD}.dtb ]; then
  292. echo "sunxi.dtb" > output/sunxi.dtb
  293. else
  294. cp arch/${ARCH}/boot/dts/${LICHEE_CHIP}-${LICHEE_BOARD}.dtb output/sunxi.dtb
  295. fi
  296. cp output/sunxi.dtb ${LICHEE_PLAT_OUT}
  297. }
  298.  
  299. gen_output()
  300. {
  301. if [ "x${LICHEE_PLATFORM}" = "xandroid" ] ; then
  302. echo "Copy modules to target ..."
  303. rm -rf ${LICHEE_PLAT_OUT}/lib
  304. cp -rf ${LICHEE_KDIR}/output/* ${LICHEE_PLAT_OUT}
  305. return
  306. fi
  307. echo "$0"
  308. }
  309.  
  310. clean_kernel()
  311. {
  312. echo "Cleaning kernel ..."
  313. make ARCH=${ARCH} clean
  314. rm -rf output/*
  315. echo
  316. }
  317.  
  318. clean_modules()
  319. {
  320. echo "Cleaning modules ..."
  321. clean_gpu
  322. echo
  323. }
  324.  
  325. #####################################################################
  326. #
  327. # Main Runtine
  328. #
  329. #####################################################################
  330.  
  331. #LICHEE_ROOT=`(cd ${LICHEE_KDIR}/..; pwd)`
  332. #export PATH=${LICHEE_ROOT}/buildroot/output/external-toolchain/bin:${LICHEE_ROOT}/tools/pack/pctools/linux/android:$PATH
  333. #if [ x$2 = x ];then
  334. # echo Error! you show pass chip name as param 2
  335. # exit 1
  336. #else
  337. # chip_name=$2
  338. # platform_name=${chip_name:0:5}
  339. #fi
  340.  
  341. case "$1" in
  342. kernel)
  343. build_kernel
  344. ;;
  345. modules)
  346. build_modules
  347. ;;
  348. clean)
  349. clean_kernel
  350. clean_modules
  351. ;;
  352. *)
  353. build_kernel
  354. build_modules
  355. build_ramfs
  356. gen_output
  357. echo -e "\n\033[0;31;1m${LICHEE_CHIP} compile Kernel successful\033[0m\n\n"
  358. ;;
  359. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement