如何驗證 arm toolchain ?!

相信大家在安裝好 arm toolchain 後, 會有一股衝動想要驗證 build 起來的 arm toolchain 能不能動?! 剛好試了一下, 雖然很簡單, 但還是記錄一下好了 XD

#include <stdio.h>
int main()
{
printf("Hello World!\n");
}

請出程式界最負盛名的 hello world, 把檔名存成 hello.c 後, 再下這個指令進行編譯, -static 的參數是因為… 我們並沒有把相關的 library 放到 android device 去, 因此下 -static 比較方便且不會有錯誤, 缺點就是…執行檔都很大 XD

arm-none-linux-gnueabi-gcc hello.c -o hello -static

再來就是 adb push 到 device 去了, 這邊要求的是 root 權限, 一般 sdcard 目錄被限制不能執行這種類似的執行檔, 所以小弟都是 push 到 /data 目錄的, 剩下的… 執行後就能看到傳說中的 Hello World! 啦 :)

檔案權限 for GIT

這個是今天思考很久的問題, 本想說建立了新的 GIT 後, 有可能會由許多人新增 Project 的動作, 或是透過 SSH push 新的檔案至 GIT server, 翻了好久, 才發現… ACL 這個東東, 一切的一切疑問就都瞭解了~~~ XD

以 UBuntu 來講, 預設是沒啟用 ACL 的, 請直接修改 /etc/fstab 檔案, 把 acl 加在 options 裡吧! 重開後用 setfacl & getfacl 去設定吧 :)

安裝 Apache2 + MySQL + PHP5 + phpmyadmin

這篇真的只是純記錄而以, 懶的每次裝都要再一個一個去找資料 ^^

  • sudo apt-get install apache2 mysql-server
  • sudo apt-get install php5 libapache2-mod-php5 php5-mysql libapache2-mod-auth-mysql
  • sudo apt-get install phpmyadmin

記得在安裝 phpmyadmin 時, 在選擇 web server 型態時, 要確認 apache2 有被選上喔!! 最後只要輸入 http://<server ip>/phpmyadmin 即可 :)

因為是針對 gerrit 系統, 且預期是透過 mysql 進行認證動作, 所以才要加上 libapache2-mod-auth-mysql 這個模組

GIT 的安裝與設定

這篇文章純粹是在記錄安裝和設定GIT SERVER的雜項, 畢竟也搞一年多的 Android 了, 多多了解 GIT 也是不錯的喔!!! 不過這邊應該算是以 "使用情境" 來寫的…

1. 安裝 GIT

這個單純, 就 sudo apt-get install git-core 就好了, 你就裝好… GIT 啦!! 什麼?! 你覺得我在畫老虎?! 呃~~ 好吧!! 請再多裝一個 sudo apt-get install git-daemon-run, 這樣就可以透過 git:// 的協定操作了, 不過這部份通當是 read-only 的, 讓所有人都可以取得這個 git project.

2. 設定 GIT

要讓 git:// 的協定能正常, 必須要做些許的修改, 請開啟 /etc/sv/git-daemon/run 檔案, 將 –base-path=XXXXXXXXXX 部份, 改成 GIT 的工作目錄, 且加上 –export-all 的參數後儲存, 然後執行 sudo sv restart git-daemon 重新啟動 git-daemon.

若你不想讓不知名的使用者透過GIT抓資料的話, 是可以忽略第二個步驟的啦~~ ^^||

Porting LTP to Android

Linux Test Project (LTP) 並不是一個效能測試工具, 可算是一個測試可靠性的工具, 我們可以將其 Porting 到 Android 的環境去, 但… 要先說清楚, 不保證測試後能夠全部通過 LTP 的測試, 有些測試方法也許不符合 Embedded Linux 系統, 這部份就不在本篇討論的範圍喔, 這一篇所編譯的版本為 20120104 的版本.

  1. 先進行 configure 的動作, 因為是 for Android 的, 因此要針對所建置的 ARM toolchain 做調整, 本例中是採用 arm-none-linux-gnueabi 的環境來設置的 ./configure AR=arm-none-linux-gnueabi-ar CC=arm-none-linux-gnueabi-gcc RANLIB=arm-none-linux-gnueabi-ranlib STRIP=arm-none-linux-gnueabi-strip –host=arm-linux –target=arm-linux CFLAGS="-static" LDFLAGS="-static -pthread”
  2. ltp-full-20120104/testcases/kernel/controllers/libcontrollers/libcontrollers.h 裡增加 LINE_MAX 的 define, 這邊是設定為 255.
  3. ltp-full-20120104/testcases/kernel/fs/fs-benchrandom-access.c, random-del-create.c & random-access-del-create.c 這三個檔案裡的 openlog[] 陣列名稱修改成其他的名稱, 避免衝突.
  4. ltp-full-20120104/testcases/kernel/sched/sched_stress/sched_driver.c ltp-full-20120104/testcases/kernel/fs/ftest/libftest.c 這兩個檔案裡, 增加 PATH_MAX 的 define 值, 這裡是設定成 1024.
  5. ltp-full-20120104/testcases/kernel/sched/cfs-scheduler/hackbench.c 裡加上 PTHREAD_STACK_MIN 的 define, 這兒是設成 1024.
  6. 接著就是 make 了, 看你要 -jx 都隨你了 XD
  7. 最後是 make install prefix=/[Install Folder], 這裡會將 build 好的 LTP 安裝到所指定的目錄, 只要將這目錄塞到 Android 上即可.

以上 7 個動作, 就可以 build 好 LTP 啦~ 測試的部份嘛~~~ 再開另一篇來充文章數 XD

Porting LMBench3 to Android

LMBench 也是一個在 Linux 環境下很常見的測試程式, 這套的測試範圍就比 IOZone 大很多, 不過這不是我們這篇文章的主要內容, 我們還是來說說怎麼 porting, 這邊採用的版本是 LMBench3.

Porting 的過程一樣簡單, 現在就把 lmbench3/src/Makefile 用文字編輯器開起來改吧~

  • 把有 bk.ver 字樣的全部 mark 掉, 因為我們沒有使用 bk.ver 工具, mark 掉的原因是避免錯誤訊息而以
  • 找到 COMPILE=$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) 這行, 加上 -static 字樣, 也就是改成 COMPILE=$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -static
  • 找到 all: $(EXES) $O/lmbench 這段, 拿掉 /lmbench 即可, 也就是改成 all: $(EXES) $O
  • CC=`../scripts/compiler` 更改成 CC=arm-none-linux-gnueabi-gcc
  • AR=ar 改成 AR=arm-none-linux-gnueabi-ar

改好後, 就執行 make 吧!! 理論上會有一些警告訊息而以, 但…無彷, 到 lmbench3/bin 裡, 就能看到 build 出來的東東了, 把檔案 push 到 eng build 的 android device 裡, 基本上就能 run 了, 但也不代表所有的 binary execute file 都能 run 喔~~

關於 HoneyComb 3G 版的 Network Operator Name

最近為了追這個 issue, 總共改了下列 5 個地方… Orz

  1. 中文名稱:這能理解, 所以這不能算是問題
  2. 顯示 (No Service):這個問題是某些電信商透過 NITZ 送電信名稱下來, 好死不死的是送長度為 zero 的名稱… OOXX 咧
  3. 話說改了第二點後, 以為天下太平~ 媽的, 有些 SIM 卡跟你說要顯示 SPN, 但 SPN 長度一樣是 zero, 哇哩咧~
  4. 再來因為是弄 GSM/CDMA 雙模平台, CDMA 的名稱就不正確, 看了一下, 只能說靠~ 因為這段路沒接上, 只好硬接去找 Table, 不過… 下一版就有接了, 這次的修正…雖然不用在新版的 merge 進去, 但得重新驗證啊~~~
  5. 再來變成有時會有 "Searching Network" 的問題, 結果是底層報上來後, SIM卡還沒 ready, 只好… 髒解處理了.
這篇只是記錄一下找的方向兼砍普練而以 XD