RTEMS 安装脚本



(嵌入式 实时操作系统 rtos rtems 开发环境 交叉工具链 shell脚本)

RTEMS 安装脚本

rtems_building_v10.sh
转载请注明出处:http://blog.csdn.net/zhumaill/article/details/21478895

  1. #!/bin/bash    
  2. #rtems4.11在linuxmint-16-cinnamon-64bit上测试通过  
  3.   
  4. #设置  
  5. TARGET=arm-rtemseabi4.11  
  6. PREFIX=/opt/rtems-4.11  
  7. BSP=stm32f4  
  8. BASEDIR=`pwd`  
  9. TOPDIR=my_rtems  
  10.   
  11. binutils_name=binutils-2.24.tar.bz2  
  12.      gcc_name=gcc-4.8.2.tar.bz2  
  13. gcc_diff_name=gcc-4.8.2-rtems4.11-20131031.diff  
  14.      gdb_name=gdb-7.6.2.tar.bz2  
  15. gdb_diff_name=gdb-7.6.2-rtems4.11-20131208.diff  
  16.      newlib_name=newlib-1.20.0.tar.gz  
  17. newlib_diff_name=newlib-1.20.0-rtems4.11-20130325.diff  
  18. binutils_basename=`echo $binutils_name | awk -F. 'NF-=2' OFS=.`  
  19. gcc_basename=`echo $gcc_name | awk -F. 'NF-=2' OFS=.`  
  20. gdb_basename=`echo $gdb_name | awk -F. 'NF-=2' OFS=.`  
  21. newlib_basename=`echo $newlib_name | awk -F. 'NF-=2' OFS=.`  
  22.   
  23. #“按任意键继续。。。”的处理函数  
  24. get_char()  
  25. {  
  26.   SAVEDSTTY=`stty -g`  
  27.   stty -echo  
  28.   stty raw  
  29.   dd if=/dev/tty bs=1 count=1 2> /dev/null  
  30.   stty -raw  
  31.   stty echo  
  32.   stty $SAVEDSTTY  
  33. }  
  34.   
  35. usage()  
  36. {  
  37. cat <<EOF  
  38.   -d             下载安装并创建压缩包->引导rtems->配置rtems->编译安装rtems->编译应用程序  
  39.   -e             从本地压缩包安装->引导rtems->配置rtems->编译安装rtems->编译应用程序  
  40.   -b             引导rtems->配置rtems->编译安装rtems->编译应用程序  
  41.   -c             配置rtems->编译安装rtems->编译应用程序  
  42.   -m             编译安装rtems->编译应用程序  
  43.   -a             编译应用程序  
  44.   
  45. EOF  
  46. }  
  47.   
  48. if [ -z "$1" ]; then  
  49.   usage  
  50.   exit 1  
  51. fi  
  52.   
  53. DOWNLOAD=no  
  54. EXTRACT=no  
  55. BOOTSTRAP=no  
  56. CONFIGURE=no  
  57. MAKERTEMS=no  
  58. APPLICATION=no  
  59.   
  60. while getopts debcma OPT  
  61. do  
  62.   case "$OPT" in  
  63.     d) DOWNLOAD=yes; BOOTSTRAP=yes; CONFIGURE=yes; MAKERTEMS=yes; APPLICATION=yes;;  
  64.     e) EXTRACT=yes; BOOTSTRAP=yes; CONFIGURE=yes; MAKERTEMS=yes; APPLICATION=yes;;  
  65.     b) BOOTSTRAP=yes; CONFIGURE=yes; MAKERTEMS=yes; APPLICATION=yes;;  
  66.     c) CONFIGURE=yes; MAKERTEMS=yes; APPLICATION=yes;;  
  67.     m) MAKERTEMS=yes; APPLICATION=yes;;  
  68.     a) APPLICATION=yes;;  
  69.     *) usage; exit 1;;  
  70.   esac  
  71. done  
  72.   
  73.   
  74.   
  75. if [ $DOWNLOAD = 'yes' ] || [ $EXTRACT = 'yes' ]; then  
  76.   
  77. echo "创建交叉工具链安装目录"  
  78. if [ ! -d "$PREFIX" ]; then  
  79.   sudo mkdir $PREFIX  
  80.   sudo chown $USER:$USER $PREFIX  
  81. fi  
  82. if [ -d "$TOPDIR" ]; then  
  83.   echo "错误:目录$TOPDIR已经存在"  
  84.   exit 1  
  85. fi  
  86.   
  87. echo "设置环境变量"  
  88. if [ ! -f "$HOME/.bashrc" ]; then  
  89.   touch $HOME/.bashrc  
  90. fi  
  91. if !(grep -q "export PATH=$PREFIX/bin:"'$PATH' $HOME/.bashrc); then  
  92.   echo export PATH=$PREFIX/bin:'$PATH' >> $HOME/.bashrc  
  93. fi  
  94. if !(grep -q "export RTEMS_MAKEFILE_PATH=$PREFIX/$TARGET/$BSP" $HOME/.bashrc); then  
  95.   echo export RTEMS_MAKEFILE_PATH=$PREFIX/$TARGET/$BSP >> $HOME/.bashrc  
  96. fi  
  97. source $HOME/.bashrc  
  98.   
  99. echo "安装依赖项"  
  100. sudo apt-get -d update 2>&1 | tee apt-get_update.log  
  101. if (grep -q -E '^E:|^Err|^W:' apt-get_update.log); then  
  102.   if (grep -q '/var/lib/apt/lists/lock' apt-get_update.log); then  
  103.     sudo rm /var/lib/apt/lists/* -vf  
  104.     sudo apt-get update  
  105.     if [ $? -ne 0 ]; then  
  106.       echo "更新源出现错误,请稍候重试1"  
  107.       exit 1  
  108.     fi  
  109.   else  
  110.     echo "更新源出现错误,请稍候重试2"  
  111.     exit 1  
  112.   fi  
  113. fi  
  114. sudo apt-get install -y autoconf automake autotools-dev build-essential git dpkg-dev g++ libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libdpkg-perl libgmp-dev libgmp3-dev libgmpxx4ldbl libltdl-dev libmpc-dev libmpfr-dev libtimedate-perl libtool texinfo flex libncurses5-dev libc6-dev  
  115. if [ $? -ne 0 ]; then  
  116.   echo "安装依赖项出现错误,请稍候重试"  
  117.   exit 1  
  118. fi  
  119. #echo "按任意键继续。。。" && char=`get_char`  
  120.   
  121.   
  122.   
  123. if [ $DOWNLOAD = 'yes' ]; then  
  124.   echo "下载安装并创建压缩包"  
  125.   which proz > /dev/null 2>&1  
  126.   if [ $? -ne 0 ]; then  
  127.   echo "安装多线程下载工具"  
  128.     wget -c http://dxdown1.onlinedown.net/down/prozilla-2.0.4.tar.zip  
  129.     unzip prozilla-2.0.4.tar.zip prozilla-2.0.4.tar.bz2  
  130.     tar -xf prozilla-2.0.4.tar.bz2  
  131.     cd prozilla-2.0.4  
  132.     sed -i 's/DL_Window:://' src/download_win.h  
  133.     ./configure  
  134.     make  
  135.     sudo make install  
  136.     cd ..  
  137.   fi  
  138.   which proz > /dev/null 2>&1  
  139.   if [ $? -ne 0 ]; then  
  140.     echo "安装多线程下载工具出现错误,中止运行"  
  141.     exit 1  
  142.   fi  
  143.   if [ -d "$TOPDIR" ]; then  
  144.     echo "错误:目录$TOPDIR已经存在"  
  145.     exit 1  
  146.   fi  
  147.   mkdir $TOPDIR  
  148.   cd $TOPDIR  
  149.   
  150.   down_cmd='proz -k=20 '  
  151.   host1='http://mirrors.ustc.edu.cn/gnu'  
  152.   #host2='http://mirror.bjtu.edu.cn/gnu'  
  153.   $down_cmd$host1/binutils/$binutils_name  
  154.   $down_cmd$host1/gcc/$gcc_basename/$gcc_name  
  155.   $down_cmd$host1/gdb/$gdb_name  
  156.   
  157.   host1='http://www.rtems.org/ftp/pub/rtems/SOURCES/4.11'  
  158.   $down_cmd$host1/$gcc_diff_name  
  159.   $down_cmd$host1/$gdb_diff_name  
  160.   $down_cmd$host1/$newlib_name  
  161.   $down_cmd$host1/$newlib_diff_name  
  162.   
  163.   git_cmd='git clone git://git.rtems.org'  
  164.   $git_cmd/examples-v2.git examples-v2  
  165.   $git_cmd/rtems.git rtems  
  166.   $git_cmd/rtems-schedsim.git rtems-schedsim  
  167.   $git_cmd/rtems-testing.git rtems-testing  
  168.   $git_cmd/rtems-addon-packages.git rtems-addon-packages  
  169.   
  170.   cd ..  
  171.   echo "打包..."  
  172.   tar -zcf $TOPDIR-$(date +%Y%m%d-%H%M%S).tar.gz $TOPDIR  
  173.                        
  174. else  
  175.   echo "从本地压缩包安装"  
  176.   rtems_pkg=`find . -maxdepth 1 -type f -name "$TOPDIR-????????-??????.tar.gz" | sort -r | head -1`  
  177.   if [ -z "$rtems_pkg" ]; then  
  178.     echo "错误:没有找到压缩包,中止执行"  
  179.     exit 1  
  180.   fi  
  181.   if [ -d "$TOPDIR" ]; then  
  182.     echo "错误:目录$TOPDIR已经存在"  
  183.     exit 1  
  184.   fi  
  185.   echo "解包..."  
  186.   tar -xf $rtems_pkg  
  187. fi  
  188. #echo "按任意键继续。。。" && char=`get_char`  
  189.   
  190. echo "编译安装交叉工具链"  
  191. cd $BASEDIR/$TOPDIR  
  192. tar -xf $binutils_name  
  193. tar -xf $gcc_name  
  194. patch -p0 < $gcc__diff_name  
  195. tar -xf $gdb_name  
  196. patch -p0 < $gdb_diff_name  
  197. tar -xf $newlib_name  
  198. patch -p0 < $newlib_diff_name  
  199.   
  200. mkdir b-binutils  
  201. cd b-binutils  
  202. ../$binutils_basename/configure --target=$TARGET --prefix=$PREFIX && make && make install  
  203. cd ..  
  204. cd $gcc_basename  
  205. ln -s ../$newlib_basename/newlib .  
  206. cd ..  
  207. mkdir b-gcc  
  208. cd b-gcc  
  209. ../$gcc_basename/configure --target=$TARGET --with-gnu-as --with-gnu-ld --with-newlib --verbose --enable-threads --enable-obsolete --enable-languages="c,c++" --prefix=$PREFIX  
  210. make  
  211. if [ $? -ne 0 ]; then  
  212.   echo "编译安装交叉工具链出现错误,中止执行"  
  213.   exit 1  
  214. fi  
  215. #echo "按任意键继续。。。" && char=`get_char`  
  216. make install  
  217. cd ..  
  218. mkdir b-gdb  
  219. cd b-gdb  
  220. ../$gdb_basename/configure --target=$TARGET --prefix=$PREFIX && make && make install  
  221. cd ..  
  222.   
  223. echo "删除多余的BSP"  #注释掉的行将被保留  
  224. delbsps='  
  225. arm/csb336  
  226. arm/csb337  
  227. arm/edb7312  
  228. arm/gba  
  229. arm/gdbarmsim  
  230. arm/gp32  
  231. arm/gumstix  
  232. arm/lm3s69xx  
  233. arm/lpc24xx  
  234. arm/lpc32xx  
  235. arm/nds  
  236. arm/raspberrypi  
  237. arm/realview-pbx-a9  
  238. arm/rtl22xx  
  239. arm/smdk2410  
  240. #arm/stm32f4  
  241. arm/xilinx-zynq  
  242. avr  
  243. bfin  
  244. h8300  
  245. i386  
  246. lm32  
  247. m32c  
  248. m32r  
  249. m68k  
  250. mips  
  251. moxie  
  252. nios2  
  253. no_cpu  
  254. powerpc  
  255. sh  
  256. sparc  
  257. sparc64  
  258. v850  
  259. '  
  260. for i in $delbspsdo  
  261.   if [ -d "rtems/c/src/lib/libbsp/$i" ]; then  
  262.     rm -r rtems/c/src/lib/libbsp/$i  
  263.   fi  
  264.   if [ -d "rtems/c/src/lib/libcpu/$i" ]; then  
  265.     rm -r rtems/c/src/lib/libcpu/$i  
  266.   fi  
  267.   if [ -d "rtems/cpukit/score/cpu/$i" ]; then  
  268.     rm -r rtems/cpukit/score/cpu/$i  
  269.   fi  
  270.   ii=`echo $i | sed 's#\/#\\\/#g'`  
  271.   sed -i "/$ii/d" rtems/cpukit/configure.ac  
  272.   sed -i "/$ii/d" rtems/cpukit/score/cpu/Makefile.am  
  273. done  
  274.   
  275. echo "删除自带的示例"  
  276. rm -r rtems/testsuites  
  277. rm -r rtems/c/src/ada-tests  
  278. #echo "按任意键继续。。。" && char=`get_char`  
  279.   
  280. fi  #end [ $DOWNLOAD = 'yes' ] || [ $EXTRACT = 'yes' ]  
  281.   
  282.   
  283.   
  284. if [ $BOOTSTRAP = 'yes' ]; then  
  285.   
  286. echo "引导rtems"  
  287. cd $BASEDIR/$TOPDIR/rtems  
  288. ./bootstrap -c  
  289. ./bootstrap -p  
  290. ./bootstrap  
  291. if [ $? -ne 0 ]; then  
  292.   echo "引导rtems出现错误,中止执行"  
  293.   exit 1  
  294. fi  
  295. #echo "按任意键继续。。。" && char=`get_char`  
  296. cd ..  
  297.   
  298. fi  #end BOOTSTRAP  
  299.   
  300.   
  301.   
  302. if [ $CONFIGURE = 'yes' ]; then  
  303.   
  304. echo "配置rtems"  
  305. cd $BASEDIR/$TOPDIR  
  306. if [ -d "b-$BSP" ]; then  
  307.   rm -r b-$BSP  
  308. fi  
  309. mkdir b-$BSP  
  310. cd b-$BSP  
  311. ../rtems/configure --target=$TARGET --enable-rtemsbsp=$BSP --disable-tests --enable-posix --disable-networking --prefix=$PREFIX | tee configure.log  
  312. if [ $? -ne 0 ]; then  
  313.   echo "配置rtems出现错误,中止执行1"  
  314.   exit 1  
  315. fi  
  316. if !(grep -q "'make all' will build the following BSPs" configure.log); then  
  317.   echo "配置rtems出现错误,中止执行2"  
  318.   exit 1  
  319. fi  
  320. echo "如果上面几行出现如下类似语句说明配置成功"  
  321. echo "'make all' will build the following BSPs: stm32f107."  
  322. echo "other BSPs can be built with 'make RTEMS_BSP=\"bsp1 bsp2 ...\"'"  
  323. #echo "按任意键继续。。。" && char=`get_char`  
  324.   
  325. fi  #end CONFIGURE  
  326.   
  327.   
  328.   
  329. if [ $MAKERTEMS = 'yes' ]; then  
  330.   
  331. echo "编译安装rtems"  
  332. cd $BASEDIR/$TOPDIR/b-$BSP  
  333. make clean  
  334. make  
  335. if [ $? -ne 0 ]; then  
  336.   echo "编译安装rtems出现错误,中止执行"  
  337.   exit 1  
  338. fi  
  339. #echo "按任意键继续。。。" && char=`get_char`  
  340. make install  
  341.   
  342. fi  #end MAKERTEMS  
  343.   
  344.   
  345.   
  346. if [ $APPLICATION = 'yes' ]; then  
  347.   
  348. echo "编译应用程序"  
  349. cd $BASEDIR/$TOPDIR/examples-v2/hello/hello_world_c  
  350. make clean  
  351. make  
  352. if [ $? -ne 0 ]; then  
  353.   echo "编译应用程序出现错误,中止执行"  
  354.   exit 1  
  355. fi  
  356. echo "如果上面几行出现如下类似语句说明编译成功"  
  357. echo "   text      data     bss     dec     hex filename"  
  358. echo "  76032      1908  129160  207100   328fc o-optimize/hello.exe"  
  359. #echo "按任意键继续。。。" && char=`get_char`  
  360. cd o-optimize  
  361. $TARGET-objdump -x hello.exe > hello.out  
  362. $TARGET-objdump -d -j .start -j .vector -j .text -j .init -j .fini -j .rodata -j .ARM.exidx -j .eh_frame -j .init_array -j .fini_array -j .jcr -j .data -j .bss -j .work -j .comment -j .ARM.attributes hello.exe > hello.S  
  363. $TARGET-objcopy -O binary hello.exe -S hello.bin  
  364. cp hello.exe hello.out hello.S hello.bin $BASEDIR  
  365.   
  366. fi  #end APPLICATION  
  367.   
  368. time=$SECONDS  
  369. hour=$[$time/3600]  
  370. min=$[$[$time/60]%60]  
  371. sec=$[$time%60]  

你可能感兴趣的:(RTEMS 安装脚本)