身為一個open source 的阿宅,只有新toolchain就會很想試用看看,雖然Code Sourcery 每半年才release 一版,但有時候會需要做交插測試要換來要去。之前在晶心科技工作,在強力的toolchain team支援下,二三天就可以有一版新版,一直都缺少一個有方便的方法可以切換toolchain,想記錄一下用過的方法。 基本的工作環境假設是連到沒有sudo 權限的server(這樣本機看叫叫叫片的時候才不會lag) 方法一:設在 PATH 環境變數 export PATH=$HOME/tool/gnuarm/arm-2010q1/bin:$PATH 優點:這就是最常看到的方法 簡單,直覺,霸王硬上弓 缺點:但如果要在同一個shell下換來換去,你的PATH 就會一次次長大,而且每次都要按tab 補齊buildtype,就是none-eabi-ooxx之類的 方法二:用一個link指向現在要用的toolchain,PATH 一直都一樣 export PATH=$HOME/tool/gnuarm/cur/bin #寫在 bashrc cd ~/tool/gnuarm/ ln -s arm-2010q1 cur 優點:看起來很厲害 缺點:每次都要砍掉重link,然後command cache 要你重新export PATH 後才有效,超蠢,可是我用了很久,忍耐度超高 方法三:在bashrc 裡寫一個小function alias toolchain #很像這樣,看個人環境 function nds_setup() { if [ ! -z $1 && ! -z $2]; then alias agcc "$2/bin/arm-$1-gcc; alias agcc "$2/bin/arm-$1-gcc; alias agcc "$2/bin/arm-$1-gcc; alias agcc "$2/bin/arm-$1-gcc; alias agcc "$2/bin/arm-$1-gcc; fi } $nds_setup linux $HOME/tool/gnuarm/arm-2010q1 優點:感覺還不錯, 缺點:實際使用時,都會忘記buildtype(其實是三不五時就在改,不是說ARM),要ls 一下才知道,然後要打二個參數,累....,另外bash 的subshell 不吃alias,下給CROSS_COMPILE 就會爛掉 方法四:用wrapper 吃環境變數決定要選擇那個toolchain #!/bin/bash #arm-gcc if [ ! -z $ARM_TOOLPATH ]; then $ARM_TOOLPATH/bin/arm-$ARM_TOOLTYPE-gcc $* fi 優點:指令固定,subshell 可以吃 缺點:還是要看一下buildtype,另外toolchain 裡含binutil 大概有20隻指令,如果每個都寫一隻,之後要改會死人,還是要設二個參數 方法五:比較厲害的wrapper 用有點像busybox的方式,把所有的命令都link到同一隻script,再由script去分辦要執行的程式是什麼,版本為何 優點:好像還不錯 缺點:不知 #!/bin/bash #set -x #I assume # the wrapper command format is "arm-command", # the origin toolchain name is "arm-what-ever-you-want-gcc # the gcc must exist toolname=`echo ${0##/*/} | cut -d '-' -f 2`; tooltype=`ls $ARM_TOOLPATH/bin/arm-*-gcc` if [ -z $ARM_TOOLPATH ]; then echo '$ARM_TOOLPATH' is not set; exit 1; fi if [ ! -e $tooltype ]; then echo "Can't find tooltype"; exit 1; fi tooltype=${tooltype##*arm-} tooltype=${tooltype%%-gcc} realtool="$ARM_TOOLPATH/bin/arm-$tooltype-$toolname"; if [ -z $toolname ]; then echo "Unknown ARM tool"; exit 1; fi if [ ! -x $realtool ]; then "file is not executable" exit 1; fi $realtool $*
文章標籤
全站熱搜
創作者介紹
創作者 cmchao 的頭像
cmchao

軟趴趴

cmchao 發表在 痞客邦 留言(6) 人氣(363)