目前日期文章:201005 (2)

瀏覽方式: 標題列表 簡短摘要
身為一個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 發表在 痞客邦 PIXNET 留言(4) 人氣()

今天第三次去LZS,但是還是忘了帶褲子。路線好多,寫一下記錄,不知道可不可以在換點前爬完銀色

白色:全部爬一遍剛好當暖身
1 (04/30): 左到右橫渡
2 (04/30): 右到左橫渡,上天花板
3 (04/30): 右到左上天花版,完攀比較難,掛腳才摸的到
4 (04/30): 右到左,倒數第三點要跨開
5 (04/30): 右到左,上天花板
7 (04/30): 第二點大倒拉
8 (04/30): JJ 路線
9 (04/30): 完攀前腳要踩高高
10 (04/30): 清大風
11 (04/30): dyno,完攀有點難
12 (04/30): 清大風
13 (04/30): 起攀坐點很好玩,我喜歡
14 (04/30): 也是起攀坐點,不過身高高一點可以直接摸
15 (04/30): 跳點比較優,練交插手不錯。

銀色:
14 (05/12) : 有很奇怪的晃,如果沒力時候爬應該過不了
17 (05/05) : 指力換手 + 推open 點平衡
34 (05/05 : 很清大路線,但是最後一步應可以順一點,掛腳好像也不對,怪怪的
50 (05/05) : 輕鬆,腳踢踩手點,KO

cmchao 發表在 痞客邦 PIXNET 留言(0) 人氣()

找更多相關文章與討論