NuttX(5)

作者同类文章X

版权声明:本文为博主原创文章,未经博主允许不得转载。

(2014年4月12日修改)
(嵌入式 实时操作系统 rtos nuttx 开发环境 交叉工具链 shell脚本)

NuttX 安装脚本

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

已测试的 Linux 发行版:
        linuxmint-16-cinnamon-64bit/32bit
        ubuntu-13.10-amd64/i386
        debian-7.4-gnome-amd64/i386
        debian-7.4-xfce-amd64/i386(要使用 Qt Creator 或 Eclipse 需额外的设置)
        crunchbang-11-amd64/i686

[ruby] view plaincopyprint?
  1. #!/bin/bash
  2. #nuttx7.1在linuxmint-16-cinnamon-64bit上测试通过
  3. #设置
  4. BASEDIR=`pwd`
  5. TOPDIR=my_nuttx
  6. BOARD=shenzhou
  7. TARGETCONFIG=shenzhou/nsh
  8. COMMIT=nuttx-7.1
  9. gmp_name=gmp-5.1.3.tar.xz
  10. mpfr_name=mpfr-3.1.2.tar.xz
  11. mpc_name=mpc-1.0.2.tar.gz
  12. binutils_name=binutils-2.24.tar.bz2
  13. gcc_name=gcc-4.8.2.tar.bz2
  14. gmp_basename=`echo $gmp_name | awk -F. 'NF-=2' OFS=.`
  15. mpfr_basename=`echo $mpfr_name | awk -F. 'NF-=2' OFS=.`
  16. mpc_basename=`echo $mpc_name | awk -F. 'NF-=2' OFS=.`
  17. binutils_basename=`echo $binutils_name | awk -F. 'NF-=2' OFS=.`
  18. gcc_basename=`echo $gcc_name | awk -F. 'NF-=2' OFS=.`
  19. #“按任意键继续。。。”的处理函数
  20. get_char()
  21. {
  22. SAVEDSTTY=`stty -g`
  23. stty -echo
  24. stty raw
  25. dd if=/dev/tty bs=1 count=1 2> /dev/null
  26. stty -raw
  27. stty echo
  28. stty $SAVEDSTTY
  29. }
  30. usage()
  31. {
  32. cat <<EOF
  33. -d             下载安装并创建压缩包->编译nuttx
  34. -e             从本地压缩包安装->编译nuttx
  35. -m             编译nuttx
  36. EOF
  37. }
  38. if [ -z "$1" ]; then
  39. usage
  40. exit 1
  41. fi
  42. DOWNLOAD=no
  43. EXTRACT=no
  44. MAKE_NUTTX=no
  45. while getopts debcma OPT
  46. do
  47. case "$OPT" in
  48. d) DOWNLOAD=yes; MAKE_NUTTX=yes;;
  49. e) EXTRACT=yes; MAKE_NUTTX=yes;;
  50. m) MAKE_NUTTX=yes;;
  51. *) usage; exit 1;;
  52. esac
  53. done
  54. if [ $DOWNLOAD = 'yes' ] || [ $EXTRACT = 'yes' ]; then
  55. echo "安装依赖项"
  56. sudo apt-get -d update 2>&1 | tee apt-get_update.log
  57. if (grep -q -E '^E:|^Err|^W:' apt-get_update.log); then
  58. if (grep -q '/var/lib/apt/lists/lock' apt-get_update.log); then
  59. sudo rm -vf /var/lib/apt/lists/*
  60. sudo apt-get update
  61. if [ $? -ne 0 ]; then
  62. echo "更新源出现错误,请稍候重试1"
  63. exit 1
  64. fi
  65. else
  66. echo "更新源出现错误,请稍候重试2"
  67. exit 1
  68. fi
  69. fi
  70. sudo apt-get install -y git build-essential bison flex gcc-multilib zlib1g-dev gperf libncurses5-dev texinfo autoconf automake libtool curl gettext libgmp-dev pkg-config
  71. if [ $? -ne 0 ]; then
  72. echo "安装依赖项出现错误,请稍候重试1"
  73. exit 1
  74. fi
  75. sudo apt-get install -y  libgmp3-dev libmpc-dev libmpfr-dev  #linuxmint、ubuntu不需要
  76. if [ $? -ne 0 ]; then
  77. echo "安装依赖项出现错误,请稍候重试2"
  78. exit 1
  79. fi
  80. #echo "按任意键继续。。。" && char=`get_char`
  81. if [ $DOWNLOAD = 'yes' ]; then
  82. echo "下载安装并创建压缩包"
  83. which proz > /dev/null 2>&1
  84. if [ $? -ne 0 ]; then
  85. echo "安装多线程下载工具"
  86. wget -c http://dxdown1.onlinedown.net/down/prozilla-2.0.4.tar.zip
  87. unzip prozilla-2.0.4.tar.zip prozilla-2.0.4.tar.bz2
  88. tar -xf prozilla-2.0.4.tar.bz2
  89. rm prozilla-2.0.4.tar.zip prozilla-2.0.4.tar.bz2
  90. cd prozilla-2.0.4
  91. sed -i 's/DL_Window:://' src/download_win.h
  92. ./configure
  93. make
  94. sudo make install
  95. cd ..
  96. fi
  97. which proz > /dev/null 2>&1
  98. if [ $? -ne 0 ]; then
  99. echo "安装多线程下载工具出现错误,中止运行"
  100. exit 1
  101. fi
  102. if [ -d "$TOPDIR" ]; then
  103. echo "错误:目录$TOPDIR已经存在"
  104. exit 1
  105. fi
  106. mkdir $TOPDIR
  107. cd $TOPDIR
  108. down_cmd='proz -k=20 '
  109. host1='http://mirrors.ustc.edu.cn/gnu'
  110. #host2='http://mirror.bjtu.edu.cn/gnu'
  111. $down_cmd$host1/gmp/$gmp_name
  112. $down_cmd$host1/mpfr/$mpfr_name
  113. $down_cmd$host1/mpc/$mpc_name
  114. $down_cmd$host1/binutils/$binutils_name
  115. $down_cmd$host1/gcc/$gcc_basename/$gcc_name
  116. session_id=`curl http://sourceforge.net/p/nuttx/git/ci/$COMMIT/tree/  | awk -F \" '/_session_id/{for(i=1; i<=NF; i++) if($i ~ /value/) print $i+1}'`
  117. for ((i=1; i<=10; i++)); do
  118. echo "获取http下载地址第$i次尝试"
  119. nuttx_http_url=`curl -d "path=&_session_id=$session_id" http://sourceforge.net/p/nuttx/git/ci/$COMMIT/tarball | awk -F \' '/window.location.href/{for(i=1; i<=NF; i++) if($i ~ /nuttx-git-/) print $i}'`
  120. if [ -n "$nuttx_http_url" ]; then
  121. break
  122. fi
  123. sleep 4s
  124. done
  125. echo "nuttx_http_url=$nuttx_http_url"
  126. $down_cmd$nuttx_http_url
  127. if [ $? -ne 0 ]; then
  128. echo "http下载失败,使用git下载"
  129. git clone -b $COMMIT git://git.code.sf.net/p/nuttx/git nuttx-code
  130. if [ $? -ne 0 ]; then
  131. echo "git下载失败,中止执行"
  132. exit 1
  133. fi
  134. mv nuttx-code/* .
  135. rm -rf nuttx-code
  136. else
  137. nuttx_http_pkg=`echo $nuttx_http_url | awk -F '/' '{print $NF}'`
  138. nuttx_http_dir=`echo $nuttx_http_pkg | awk -F '.' '{print $1}'`
  139. unzip -q $nuttx_http_pkg
  140. mv $nuttx_http_dir/* .
  141. rm -rf $nuttx_http_pkg $nuttx_http_dir
  142. fi
  143. cd ..
  144. echo "打包..."
  145. tar -zcf $TOPDIR-$(date +%Y%m%d-%H%M%S).tar.gz $TOPDIR
  146. else
  147. echo "从本地压缩包安装"
  148. nuttx_pkg=`find . -maxdepth 1 -type f -name "$TOPDIR-????????-??????.tar.gz" | sort -r | head -1`
  149. if [ -z "$nuttx_pkg" ]; then
  150. echo "错误:没有找到压缩包,中止执行"
  151. exit 1
  152. fi
  153. if [ -d "$TOPDIR" ]; then
  154. echo "错误:目录$TOPDIR已经存在"
  155. exit 1
  156. fi
  157. echo "解包..."
  158. tar -xf $nuttx_pkg
  159. fi
  160. #echo "按任意键继续。。。" && char=`get_char`
  161. echo "编译安装kconfig-frontends"
  162. cd $BASEDIR/$TOPDIR/misc/tools/kconfig-frontends
  163. ./bootstrap
  164. ./configure --enable-mconf
  165. LD_RUN_PATH=/usr/local/lib make
  166. if [ $? -ne 0 ]; then
  167. echo "编译安装kconfig-frontends出现错误,中止执行"
  168. exit 1
  169. fi
  170. #echo "按任意键继续。。。" && char=`get_char`
  171. sudo make install
  172. echo "编译库"
  173. cd $BASEDIR/$TOPDIR
  174. tar -xf $gmp_name
  175. tar -xf $mpfr_name
  176. tar -xf $mpc_name
  177. mkdir b-gmp
  178. cd b-gmp
  179. ../$gmp_basename/configure && make && sudo make install
  180. cd ..
  181. mkdir b-mpfr
  182. cd b-mpfr
  183. ../$mpfr_basename/configure && make && sudo make install
  184. cd ..
  185. mkdir b-mpc
  186. cd b-mpc
  187. ../$mpc_basename/configure && make && sudo make install
  188. cd ..
  189. echo "nuttx配置"
  190. cd $BASEDIR/$TOPDIR/nuttx/tools
  191. ./configure.sh $TARGETCONFIG
  192. if [ $? -ne 0 ]; then
  193. echo "nuttx配置出现错误,中止执行"
  194. exit 1
  195. fi
  196. echo "删除多余的目录"
  197. cd $BASEDIR/$TOPDIR/nuttx
  198. cp -r ../nuttx ../nuttx_backup
  199. del_dir=`find configs -maxdepth 1 -type d`
  200. del_dir=`echo $del_dir | sed "s,configs,,"`
  201. del_dir=`echo $del_dir | sed "s,configs/$BOARD,,"`
  202. for i in $del_dir; do
  203. echo "删除$i"
  204. rm -rf $i
  205. sed -i "s,^source \"$i/Kconfig\",# &," configs/Kconfig
  206. done
  207. del_dir=`find arch -maxdepth 1 -type d`
  208. del_dir=`echo $del_dir | sed "s,arch,,"`
  209. retain_dir=`awk -F \" '/^CONFIG_ARCH=/{print $2}' .config`
  210. del_dir=`echo $del_dir | sed "s,arch/$retain_dir,,"`
  211. for i in $del_dir; do
  212. echo "删除$i"
  213. rm -rf $i
  214. sed -i "s,^source $i/Kconfig,# &," arch/Kconfig
  215. done
  216. if [ $retain_dir="arm" ]; then
  217. del_dir=`find arch/arm/src -maxdepth 1 -type d`
  218. del_dir=`echo $del_dir | sed "s,arch/arm/src,,"`
  219. del_dir=`echo $del_dir | sed "s,arch/arm/src/common,,"`
  220. retain_dir=`awk -F \" '/^CONFIG_ARCH_FAMILY=/{print $2}' .config`
  221. del_dir=`echo $del_dir | sed "s,arch/arm/src/$retain_dir,,"`
  222. retain_dir=`awk -F \" '/^CONFIG_ARCH_CHIP=/{print $2}' .config`
  223. del_dir=`echo $del_dir | sed "s,arch/arm/src/$retain_dir,,"`
  224. for i in $del_dir; do
  225. echo "删除$i"
  226. rm -rf $i
  227. sed -i "s,^source $i/Kconfig,# &," arch/arm/Kconfig
  228. done
  229. fi
  230. #echo "按任意键继续。。。" && char=`get_char`
  231. echo "编译buildroot"
  232. cd $BASEDIR/$TOPDIR/nuttx
  233. sed -i 's,^CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYW=y,# CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYW is not set,' .config
  234. sed -i 's,^# CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT is not set,CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT=y,' .config
  235. make context
  236. if [ $? -ne 0 ]; then
  237. echo "编译buildroot出现错误,中止执行1"
  238. exit 1
  239. fi
  240. #echo "按任意键继续。。。" && char=`get_char`
  241. cd $BASEDIR/$TOPDIR/misc/buildroot
  242. sed -i 's,$(WGET) -P $(DL_DIR) $(BINUTILS_SITE)/$(BINUTILS_SOURCE),mv $(TOPDIR)/../../$(BINUTILS_SOURCE) $(DL_DIR),' toolchain/binutils/binutils.mk
  243. sed -i 's,$(WGET) -P $(DL_DIR) $(GCC_SITE)/$(GCC_SOURCE),mv $(TOPDIR)/../../$(GCC_SOURCE) $(DL_DIR),' toolchain/gcc/gcc-nuttx-4.x.mk
  244. cp configs/cortexm3-eabi-defconfig-4.8.2 .config
  245. sed -i 's,BR2_PACKAGE_NXFLAT=y,# BR2_PACKAGE_NXFLAT is not set,' .config
  246. sed -i '/BR2_PACKAGE_GENROMFS/a# BR2_PACKAGE_KCONFIG_FRONTENDS is not set\n# BR2_NCONF_FRONTEND is not set\n# BR2_GCONF_FRONTEND is not set\n# BR2_QCONF_FRONTEND is not set' .config
  247. make oldconfig
  248. if [ $? -ne 0 ]; then
  249. echo "编译buildroot出现错误,中止执行2"
  250. exit 1
  251. fi
  252. #echo "按任意键继续。。。" && char=`get_char`
  253. make
  254. if [ $? -ne 0 ]; then
  255. echo "编译buildroot出现错误,中止执行3"
  256. exit 1
  257. fi
  258. #echo "按任意键继续。。。" && char=`get_char`
  259. fi  #end [ $DOWNLOAD = 'yes' ] || [ $EXTRACT = 'yes' ]
  260. if [ $MAKE_NUTTX = 'yes' ]; then
  261. echo "编译nuttx"
  262. cd $BASEDIR/$TOPDIR/nuttx
  263. sed -i 's,^# CONFIG_RAW_BINARY is not set,CONFIG_RAW_BINARY=y,' .config
  264. sed -i 's,^CONFIG_TASK_NAME_SIZE=0,CONFIG_TASK_NAME_SIZE=16,' .config
  265. sed -i 's,^CONFIG_NSH_IPADDR=0x0a000002,CONFIG_NSH_IPADDR=0xc0a8020a,' .config    #192.168.2.10
  266. sed -i 's,^CONFIG_NSH_DRIPADDR=0x0a000001,CONFIG_NSH_DRIPADDR=0xc0a80201,' .config    #192.168.2.1
  267. if !(grep -q '  @echo "DUMP: $(BIN).out"' Makefile.unix); then
  268. sed -i '/pass2:/,/^$/{
  269. /^$/i\  @echo "DUMP: $(BIN).out"
  270. /^$/i\  $(Q) $(OBJDUMP) -x $(BIN) > $(HOME)/$(BIN).out
  271. /^$/i\  @echo "DUMP: $(BIN).S"
  272. /^$/i\  $(Q) $(OBJDUMP) -d -j .text -j .init_section -j .ARM.exidx -j .data -j .bss $(BIN) > $(HOME)/$(BIN).S
  273. /^$/i\  cp -f $(BIN) $(BIN).hex $(BIN).bin $(HOME)
  274. }' Makefile.unix
  275. fi
  276. TOOLCHAIN_BIN=$BASEDIR/$TOPDIR/misc/buildroot/build_arm_nofpu/staging_dir/bin
  277. TOOLS_DIR=$BASEDIR/$TOPDIR/nuttx/configs/$BOARD/tools
  278. if !(grep -q "PATH=\"$TOOLCHAIN_BIN:$TOOLS_DIR:\$PATH\"" $HOME/.profile); then
  279. echo >> $HOME/.profile
  280. echo PATH=\"$TOOLCHAIN_BIN:$TOOLS_DIR:\$PATH\" >> $HOME/.profile  #重起生效
  281. fi
  282. if !(echo $PATH | grep -q "$TOOLCHAIN_BIN:$TOOLS_DIR"); then
  283. export PATH=$TOOLCHAIN_BIN:$TOOLS_DIR:$PATH
  284. fi
  285. make
  286. fi  #end MAKE_NUTTX
  287. time=$SECONDS
  288. hour=$[$time/3600]
  289. min=$[$[$time/60]%60]
  290. sec=$[$time%60]
  291. echo "执行时间:$hour小时$min分$sec秒"
#!/bin/bash#nuttx7.1在linuxmint-16-cinnamon-64bit上测试通过#设置
BASEDIR=`pwd`
TOPDIR=my_nuttx
BOARD=shenzhou
TARGETCONFIG=shenzhou/nsh
COMMIT=nuttx-7.1gmp_name=gmp-5.1.3.tar.xz
mpfr_name=mpfr-3.1.2.tar.xz
mpc_name=mpc-1.0.2.tar.gz
binutils_name=binutils-2.24.tar.bz2
gcc_name=gcc-4.8.2.tar.bz2
gmp_basename=`echo $gmp_name | awk -F. 'NF-=2' OFS=.`
mpfr_basename=`echo $mpfr_name | awk -F. 'NF-=2' OFS=.`
mpc_basename=`echo $mpc_name | awk -F. 'NF-=2' OFS=.`
binutils_basename=`echo $binutils_name | awk -F. 'NF-=2' OFS=.`
gcc_basename=`echo $gcc_name | awk -F. 'NF-=2' OFS=.`#“按任意键继续。。。”的处理函数
get_char()
{SAVEDSTTY=`stty -g`stty -echostty rawdd if=/dev/tty bs=1 count=1 2> /dev/nullstty -rawstty echostty $SAVEDSTTY
}usage()
{
cat <<EOF-d             下载安装并创建压缩包->编译nuttx-e             从本地压缩包安装->编译nuttx-m             编译nuttxEOF
}if [ -z "$1" ]; thenusageexit 1
fiDOWNLOAD=no
EXTRACT=no
MAKE_NUTTX=nowhile getopts debcma OPT
docase "$OPT" ind) DOWNLOAD=yes; MAKE_NUTTX=yes;;e) EXTRACT=yes; MAKE_NUTTX=yes;;m) MAKE_NUTTX=yes;;*) usage; exit 1;;esac
doneif [ $DOWNLOAD = 'yes' ] || [ $EXTRACT = 'yes' ]; thenecho "安装依赖项"
sudo apt-get -d update 2>&1 | tee apt-get_update.log
if (grep -q -E '^E:|^Err|^W:' apt-get_update.log); thenif (grep -q '/var/lib/apt/lists/lock' apt-get_update.log); thensudo rm -vf /var/lib/apt/lists/*sudo apt-get updateif [ $? -ne 0 ]; thenecho "更新源出现错误,请稍候重试1"exit 1fielseecho "更新源出现错误,请稍候重试2"exit 1fi
fi
sudo apt-get install -y git build-essential bison flex gcc-multilib zlib1g-dev gperf libncurses5-dev texinfo autoconf automake libtool curl gettext libgmp-dev pkg-config
if [ $? -ne 0 ]; thenecho "安装依赖项出现错误,请稍候重试1"exit 1
fi
sudo apt-get install -y  libgmp3-dev libmpc-dev libmpfr-dev  #linuxmint、ubuntu不需要
if [ $? -ne 0 ]; thenecho "安装依赖项出现错误,请稍候重试2"exit 1
fi
#echo "按任意键继续。。。" && char=`get_char`if [ $DOWNLOAD = 'yes' ]; thenecho "下载安装并创建压缩包"which proz > /dev/null 2>&1if [ $? -ne 0 ]; thenecho "安装多线程下载工具"wget -c http://dxdown1.onlinedown.net/down/prozilla-2.0.4.tar.zipunzip prozilla-2.0.4.tar.zip prozilla-2.0.4.tar.bz2tar -xf prozilla-2.0.4.tar.bz2rm prozilla-2.0.4.tar.zip prozilla-2.0.4.tar.bz2cd prozilla-2.0.4sed -i 's/DL_Window:://' src/download_win.h./configuremakesudo make installcd ..fiwhich proz > /dev/null 2>&1if [ $? -ne 0 ]; thenecho "安装多线程下载工具出现错误,中止运行"exit 1fiif [ -d "$TOPDIR" ]; thenecho "错误:目录$TOPDIR已经存在"exit 1fimkdir $TOPDIRcd $TOPDIRdown_cmd='proz -k=20 'host1='http://mirrors.ustc.edu.cn/gnu'#host2='http://mirror.bjtu.edu.cn/gnu'$down_cmd$host1/gmp/$gmp_name$down_cmd$host1/mpfr/$mpfr_name$down_cmd$host1/mpc/$mpc_name$down_cmd$host1/binutils/$binutils_name$down_cmd$host1/gcc/$gcc_basename/$gcc_namesession_id=`curl http://sourceforge.net/p/nuttx/git/ci/$COMMIT/tree/  | awk -F \" '/_session_id/{for(i=1; i<=NF; i++) if($i ~ /value/) print $i+1}'`for ((i=1; i<=10; i++)); doecho "获取http下载地址第$i次尝试"nuttx_http_url=`curl -d "path=&_session_id=$session_id" http://sourceforge.net/p/nuttx/git/ci/$COMMIT/tarball | awk -F \' '/window.location.href/{for(i=1; i<=NF; i++) if($i ~ /nuttx-git-/) print $i}'`if [ -n "$nuttx_http_url" ]; thenbreakfisleep 4sdoneecho "nuttx_http_url=$nuttx_http_url"$down_cmd$nuttx_http_urlif [ $? -ne 0 ]; thenecho "http下载失败,使用git下载"git clone -b $COMMIT git://git.code.sf.net/p/nuttx/git nuttx-codeif [ $? -ne 0 ]; thenecho "git下载失败,中止执行"exit 1fimv nuttx-code/* .rm -rf nuttx-codeelsenuttx_http_pkg=`echo $nuttx_http_url | awk -F '/' '{print $NF}'`nuttx_http_dir=`echo $nuttx_http_pkg | awk -F '.' '{print $1}'`unzip -q $nuttx_http_pkg mv $nuttx_http_dir/* .rm -rf $nuttx_http_pkg $nuttx_http_dirficd ..echo "打包..."tar -zcf $TOPDIR-$(date +%Y%m%d-%H%M%S).tar.gz $TOPDIRelseecho "从本地压缩包安装"nuttx_pkg=`find . -maxdepth 1 -type f -name "$TOPDIR-????????-??????.tar.gz" | sort -r | head -1`if [ -z "$nuttx_pkg" ]; thenecho "错误:没有找到压缩包,中止执行"exit 1fiif [ -d "$TOPDIR" ]; thenecho "错误:目录$TOPDIR已经存在"exit 1fiecho "解包..."tar -xf $nuttx_pkg
fi
#echo "按任意键继续。。。" && char=`get_char`echo "编译安装kconfig-frontends"
cd $BASEDIR/$TOPDIR/misc/tools/kconfig-frontends
./bootstrap
./configure --enable-mconf
LD_RUN_PATH=/usr/local/lib make
if [ $? -ne 0 ]; thenecho "编译安装kconfig-frontends出现错误,中止执行"exit 1
fi
#echo "按任意键继续。。。" && char=`get_char`
sudo make installecho "编译库"
cd $BASEDIR/$TOPDIR
tar -xf $gmp_name
tar -xf $mpfr_name
tar -xf $mpc_namemkdir b-gmp
cd b-gmp
../$gmp_basename/configure && make && sudo make install
cd ..
mkdir b-mpfr
cd b-mpfr
../$mpfr_basename/configure && make && sudo make install
cd ..
mkdir b-mpc
cd b-mpc
../$mpc_basename/configure && make && sudo make install
cd ..echo "nuttx配置"
cd $BASEDIR/$TOPDIR/nuttx/tools
./configure.sh $TARGETCONFIG
if [ $? -ne 0 ]; thenecho "nuttx配置出现错误,中止执行"exit 1
fiecho "删除多余的目录"
cd $BASEDIR/$TOPDIR/nuttx
cp -r ../nuttx ../nuttx_backupdel_dir=`find configs -maxdepth 1 -type d`
del_dir=`echo $del_dir | sed "s,configs,,"`
del_dir=`echo $del_dir | sed "s,configs/$BOARD,,"`
for i in $del_dir; doecho "删除$i"rm -rf $ised -i "s,^source \"$i/Kconfig\",# &," configs/Kconfig
donedel_dir=`find arch -maxdepth 1 -type d`
del_dir=`echo $del_dir | sed "s,arch,,"`
retain_dir=`awk -F \" '/^CONFIG_ARCH=/{print $2}' .config`
del_dir=`echo $del_dir | sed "s,arch/$retain_dir,,"`
for i in $del_dir; doecho "删除$i"rm -rf $ised -i "s,^source $i/Kconfig,# &," arch/Kconfig
doneif [ $retain_dir="arm" ]; thendel_dir=`find arch/arm/src -maxdepth 1 -type d`del_dir=`echo $del_dir | sed "s,arch/arm/src,,"`del_dir=`echo $del_dir | sed "s,arch/arm/src/common,,"`retain_dir=`awk -F \" '/^CONFIG_ARCH_FAMILY=/{print $2}' .config`del_dir=`echo $del_dir | sed "s,arch/arm/src/$retain_dir,,"`retain_dir=`awk -F \" '/^CONFIG_ARCH_CHIP=/{print $2}' .config`del_dir=`echo $del_dir | sed "s,arch/arm/src/$retain_dir,,"`for i in $del_dir; doecho "删除$i"rm -rf $ised -i "s,^source $i/Kconfig,# &," arch/arm/Kconfigdone
fi
#echo "按任意键继续。。。" && char=`get_char`echo "编译buildroot"
cd $BASEDIR/$TOPDIR/nuttx
sed -i 's,^CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYW=y,# CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYW is not set,' .config
sed -i 's,^# CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT is not set,CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT=y,' .config
make context
if [ $? -ne 0 ]; thenecho "编译buildroot出现错误,中止执行1"exit 1
fi
#echo "按任意键继续。。。" && char=`get_char`cd $BASEDIR/$TOPDIR/misc/buildroot
sed -i 's,$(WGET) -P $(DL_DIR) $(BINUTILS_SITE)/$(BINUTILS_SOURCE),mv $(TOPDIR)/../../$(BINUTILS_SOURCE) $(DL_DIR),' toolchain/binutils/binutils.mk
sed -i 's,$(WGET) -P $(DL_DIR) $(GCC_SITE)/$(GCC_SOURCE),mv $(TOPDIR)/../../$(GCC_SOURCE) $(DL_DIR),' toolchain/gcc/gcc-nuttx-4.x.mk
cp configs/cortexm3-eabi-defconfig-4.8.2 .config
sed -i 's,BR2_PACKAGE_NXFLAT=y,# BR2_PACKAGE_NXFLAT is not set,' .config
sed -i '/BR2_PACKAGE_GENROMFS/a# BR2_PACKAGE_KCONFIG_FRONTENDS is not set\n# BR2_NCONF_FRONTEND is not set\n# BR2_GCONF_FRONTEND is not set\n# BR2_QCONF_FRONTEND is not set' .configmake oldconfig
if [ $? -ne 0 ]; thenecho "编译buildroot出现错误,中止执行2"exit 1
fi
#echo "按任意键继续。。。" && char=`get_char`
make
if [ $? -ne 0 ]; thenecho "编译buildroot出现错误,中止执行3"exit 1
fi
#echo "按任意键继续。。。" && char=`get_char`fi  #end [ $DOWNLOAD = 'yes' ] || [ $EXTRACT = 'yes' ]if [ $MAKE_NUTTX = 'yes' ]; thenecho "编译nuttx"
cd $BASEDIR/$TOPDIR/nuttx
sed -i 's,^# CONFIG_RAW_BINARY is not set,CONFIG_RAW_BINARY=y,' .config
sed -i 's,^CONFIG_TASK_NAME_SIZE=0,CONFIG_TASK_NAME_SIZE=16,' .config
sed -i 's,^CONFIG_NSH_IPADDR=0x0a000002,CONFIG_NSH_IPADDR=0xc0a8020a,' .config    #192.168.2.10
sed -i 's,^CONFIG_NSH_DRIPADDR=0x0a000001,CONFIG_NSH_DRIPADDR=0xc0a80201,' .config    #192.168.2.1
if !(grep -q ' @echo "DUMP: $(BIN).out"' Makefile.unix); thensed -i '/pass2:/,/^$/{/^$/i\ @echo "DUMP: $(BIN).out"/^$/i\   $(Q) $(OBJDUMP) -x $(BIN) > $(HOME)/$(BIN).out/^$/i\ @echo "DUMP: $(BIN).S"/^$/i\ $(Q) $(OBJDUMP) -d -j .text -j .init_section -j .ARM.exidx -j .data -j .bss $(BIN) > $(HOME)/$(BIN).S/^$/i\  cp -f $(BIN) $(BIN).hex $(BIN).bin $(HOME)}' Makefile.unix
fiTOOLCHAIN_BIN=$BASEDIR/$TOPDIR/misc/buildroot/build_arm_nofpu/staging_dir/bin
TOOLS_DIR=$BASEDIR/$TOPDIR/nuttx/configs/$BOARD/tools
if !(grep -q "PATH=\"$TOOLCHAIN_BIN:$TOOLS_DIR:\$PATH\"" $HOME/.profile); thenecho >> $HOME/.profileecho PATH=\"$TOOLCHAIN_BIN:$TOOLS_DIR:\$PATH\" >> $HOME/.profile  #重起生效
fi
if !(echo $PATH | grep -q "$TOOLCHAIN_BIN:$TOOLS_DIR"); thenexport PATH=$TOOLCHAIN_BIN:$TOOLS_DIR:$PATH
fimakefi  #end MAKE_NUTTXtime=$SECONDS
hour=$[$time/3600]
min=$[$[$time/60]%60]
sec=$[$time%60]
echo "执行时间:$hour小时$min分$sec秒"

使用上述脚本安装 NuttX 之后,在 Qt Creator 或 Eclipse 中以导入现有项目的方式新建项目,无需其它设置,点击构建按钮即可进行编译。

NuttX 安装脚本相关推荐

  1. linux编译安装jpeg,Linux下JPEG库安装脚本(转)

    Linux下JPEG库安装脚本(转)[@more@]该脚本用于在Linux下安装JPEG库,在安装GD库的时候如果没有JPEG库,GD将不能生成JPEG格式的图象. 作者: 何志强#----where ...

  2. lnmp shell安装脚本

    LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构.LNMP是现在大多数大型公司在用的web环境,nginx小巧高效的web服务器和反向代理服务器,相对于apach占 ...

  3. Linux中的无人职守安装脚本kickstart

    Linux中的无人职守安装脚本kickstart 1 kickstart自动安装脚本的作用 2 实验环境 3 kickstart自动安装脚本的制作 3.1 通过模板生成kickstart文件 3.2用 ...

  4. mariadb自动安装脚本

    Mariadb一键安装脚本 下载地址:https://mariadb.org/download/ #!/bin/bash #将安装文件放在/usr/loca/下面,根据mariadb版本号不一样,修改 ...

  5. zabbix1.8和2.0版本通用的安装脚本

    用zabbix监控服务器2年多了,早就写好了服务器端的安装部署脚本,现在拿出来和大家分享一下.zabbix1.8和2.0版本通用的安装脚本,默认的为1.8.9的版本,大家要是想安装2.0以上的版本,只 ...

  6. lnmp一键安装脚本

    前段时间,一个朋友需要在一个新服务器centos 6.5 x64安装lnmp,觉得手动安装比较耗时,需要写一个安装脚本. 后来我帮他写了一个lnmp_install.tar.gz,大小有55.3M 解 ...

  7. Puppet客户端自动安装脚本

    运维自动化发展已经是势不可挡,传统的靠大量人力运维的方式渐不能满足企业IT发展的需求,其中Puppet自动化更是受到IT人士的青睐,那今天我们一起来研究一下puppet客户端的自动安装脚本.脚本不足之 ...

  8. via浏览器下载路径_Via - 能够安装脚本插件的安卓浏览器

    Via 是一款能够安装 脚本插件 的 安卓浏览器,同时也是小编已知的 手机浏览器 中 体积最小 的(不到 1MB 大小),因此无论是应用 启动速度 还是页面 加载速度 都是 非常快.访问 插件网站 可 ...

  9. Linux从入门到精通——自动安装脚本

    ###kickstart 自动安装脚本的制作### KickStart是什么,有什么作用?    KickStart是一种无人职守安装方式.KickStart的工作原理是通过记录典型的安装过程中所需人 ...

最新文章

  1. 面向对象葵花宝典:思想、技巧与实践(36) - 设计原则如何用?
  2. Windows 7 提示AtBroke.exe初始化失败
  3. 微擎支付返回商户单号_一步一步教你在SpringBoot中集成微信扫码支付
  4. Laravel定时任务的每秒执行
  5. 技术揭秘:华为云DLI背后的核心计算引擎
  6. js面向对象的程序设计 --- 上篇(理解对象)
  7. 浅谈格斗游戏的精髓——方块的战争
  8. for myself
  9. linux界面如何进行文档排序,Linux中使用sort对文档中的内容进行排序
  10. win32com 操作excel
  11. tensorflow 张量
  12. linux最好的mp4软件,【良心推荐】5款好用的MP4视频编辑器
  13. GDB 调试 Nginx 磨刀不误砍柴工
  14. linux运行openfoam,OpenFOAM应用的准备工作
  15. java实现qq邮箱发送附件和图片
  16. pandas 转换为文本类型_python – pandas将文本特征转换为数值
  17. 音频编码分析:AAC、MP3、Opus
  18. Django.db.utils.OperationalError: (1045, Access denied for user 'root'@'localhost' (using passwo...
  19. lambada表达式介绍
  20. IDEAd的web工程配置

热门文章

  1. navicat12的安装与激活
  2. docker 容器之间通信_还不清楚docker容器间是如何通信的?看这篇文章就够了
  3. Opencv颜色空间转换---BGR和HSV详解
  4. UNI会是今年最后的DeFi狂欢吗? |链捕手
  5. 移动web网页开发——项目:生活资讯网(响应式开发)
  6. 铁路线束行业调研报告 - 市场现状分析与发展前景预测
  7. springboot+redis切换指定数据库or动态切换数据库
  8. 2018年不可错过的创意404报错设计
  9. Python文件整理
  10. 代码实现3X3矩阵求逆(C语言 用伴随矩阵实现)