2009年11月24日 星期二

[2009-11-24-2] Build Android platform for Qualcomm chipsets

想要一窺Qualcomm's AOSP(The Android Open Source Project),可以連上[1]download以及build it,步驟如下:

Step1:
(如果沒有安裝repo,可以參考這裡的step1、2)
選好想要的branch及manifest(這裡brance選carrot.cupcake, manifest選M7201JSDCBALYA638501.xml)就可以準備下載source code
$ mkdir QAEP
$ cd QAEP
$ repo init -u git://codeaurora.org/platform/manifest.git -b carrot.cupcake -m M7201JSDCBALYA638501.xml 
$ repo sync

Step2:
設定環境變數, 選定1(device), 1(release), msm7201a_surf(target), eng(default mode), 開始make囉!!
$ source build/envsetup.sh
$ choosecombo 1 1 msm7201a_surf eng
$ make -j4

Step3:
build出來的img會在out/target/product/msm7201a_surf中, 包括了boot.img, systme.img等。再使用fastboot, 燒img到device(記得要先接上device)
$ sudo out/host/linux-x86/bin/fastboot flash boot out/target/product/msm7201a_surf/boot.img
$ sudo out/host/linux-x86/bin/fastboot flash system out/target/product/msm7201a_surf/system.img


Step4:
使用adb 確認device,

(to be continue)


[參考]
[1] MSM/QSD Android Enablement Project
[2] 工程模式與FASTBOOT - Android Dev Phone 1
[3] Developing on a Device
[4] Make UDC & Android ADB Gadget driver work
[5] 編譯android原始碼到模擬器上執行

2009年11月17日 星期二

[2009-11-17-2] Android usb driver for Windows

Android usb driver 其實是來自Android SDK, 不過SDK記得選Windows platform囉!再來就是解壓後,直接執行"SDK Setup.exe", 記得在Settings中勾選"Force https://...", 再如下圖不要勾選"Display updates only"就可以看到"Usb Driver package..", 再"Install Selected" --> "Accept All" --> "Install Accepted"即可以下載,看到"usb_driver" 資料匣囉!!



接下來,把device接上PC,再安裝剛抓下來的usb_driver就可以完成,如下圖找到ADB Interface

2009年11月9日 星期一

[2009-11-09-1] Android 的環境設定檔 - envsetup.sh

在Android要找關鍵字, build module 等等,確實有點不方便,所以就自己寫一個.sh file 或是用Android貼心的envsetup.sh。

$ cd ~/cupcake/buile
$ source envsetup.sh
$ help  #試一下help 吧!
$ croot #回到cupcake
$ cgrep 'main' #在c/c++ 找 main字串
$ jgrep 'main' #在jave 找 main字串
$ resgrep 'main' #在res/*.xml 找main字串
$ m lottery_ray #同 make lottery_ray, 記得touch lottery.c, 就可以rebuild了
還有很多好用的指令就 vim envsetup.sh吧!

2009年11月5日 星期四

[2009-11-05-4] Android NDK - 6/49 大樂透

續用"6/49 大樂透"的source file(C language),改用Android NDK(Native Development Kit)來編譯Android應用程式。

Step1:
建立一個raylottery目錄(這裡用的是cupcake)
$ cd cupcake/development #移到android的development下
$ mkdir raylottery

Step2:
複製lottery.c到development. 可在這下載download here

Step3:
撰寫一個Android.mk(標準的檔名不要更動), 至於.mk的寫法可參考其他應該程式的寫法
$ find  ~/cupcake -name "Android.mk" > log_list_all  #找出cupcake下所有的Android.mk, 並存到 log_list_all

raylottery 下的Android.mk如下
# filename: Android.mk
# 2009-11-04, RayZ

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
    lottery.c
    
LOCAL_MODULE:= lottery_ray #module name
include $(BUILD_EXECUTABLE)

Step4:
編譯lottery_ray
$ cd ~/cupcake
$ make lottery_ray
編譯的結果會告知相對的文件位置: target thumb C(原始檔案), target Executable(可執行檔),target Non-prelinked, target Strip, Install。


查看一下lottery_ray 檔案格式, 確實是ARM, executable...
$ file rayout/target/product/generic/system/bin/lottery_ray 


Step5:
把產生的lottery_ray(四個位置的任一個皆可)放到adb shell來執行
$ adb devices #查看有那些device
$ adb shell mkdir /dev/ray_test  #在emulator-5554中做一個目錄
$ adb push rayout/target/product/generic/obj/EXECUTABLES/lottery_ray_intermediates/LINKED/lottery_ray /dev/ray_test #把lottery_ray 放到emulator-5554
$ adb shell  #進入adb shell
# cd /dev/ray_test
# ./lottery_ray


在AVD上用Terminal Emulator看到的畫面就和用adb shell一樣, 確實好玩。


ps:
1) 這裡已經把android 的out 目錄改為rayout,可以參考cupcake/build/buildspec.mk.default說明。
2) adb shell 的command可以在adb shell中的/system/bin找到。

[參考]
[1] 編譯 Native C 的 helloworld模塊
[2] 手工編譯 C 模塊
[3] Android Toolchain 與 Bionic Libc
[4] Google 釋出 Android 1.5 原生開發套件
[5] GNU toolchain
[6] Android 1.6 NDK, r1

[2009-11-05-4] Install Android SDK on Linux

Step1:
下載 Android SDK(Android SDK and AVD Manaer), 在這下載android-sdk_r3-linux.tgz [1]
ps: SDK(Software Development Kits), AVD(Android Virtual Devices)

Step2:
選定目錄,解壓gzip
$ tar -zxv -f android-sdk_r3-linux.tgz #解壓由tar 打包的gzip
$ mv android-sdk-linux ~  #把解壓出的folder 搬到 home 目錄
$ cd android-sdk-linux/tools   
$ ./android   #執行android tool, 開始準備安裝Android Platform/Docs ...

Step3:
選擇Available Packages 然後 Refresh, 若出現錯誤跳到Step4, 沒有就跳到Step5


Step4:
設定強制連網, 記得Save&Apply, 然後回Available Packages, Refresh就可以看到Packages


Step5:
選擇Platform, Docs


Step6:
選擇Accept All 和 Install Accepted


Step7:
安裝AVD, New 一個AVD吧


Step8:
在這裡的AVD Hardware 設定如下, 完成後就直接"Starts the selected AVD", 耐心等待第一次見面吧~


Step9:
初體驗的Android 2.0, 也順便換成繁體中文~


Step10:
用Android 2.0來上網看看, 可以上網,還真不錯哦~


Step11:
關機選項(直接打叉叉比較快)


[參考]
[1] Download the Android SDK
[2] android tool

2009年11月2日 星期一

Bash - 常用指令

# 若發生奇怪的錯誤可能是bash 被換成 dash
$ sudo dpkg-reconfigure dash  (answer no)
     # or sudo rm /bin/sh   sudo ln -s /bin/bash /bin/sh
     # see more information: wiki.ubuntu.com/DashAsBinSh
     
     # 15 - 顯示man的位置
$ which man

     # 14 - 查看檔案大小
$ ls -alh

     # 13 - 查看檔案格式
$ file ray.env.sh

     # 12 - 查看系統訊息
$ uname -a     

     # 11 - 變數
$ ws=~/Desktop/test_shell_script
$ cd $ws

     # 10 - 化名/取消化名
$ alias lm='ls -al |more'
$ lm
$ unalias lm
$ alias cls='clear'
$ alias dir='ls -l'
$ alias gogogo='sudo apt-get install'
$ alias raywork='~/Desktop/test_shell_script'

     # 9 - 直接看檔案內容
$ cat ray.sh

     # 8 - 指令搜尋的順序
$ type -a ls

     # 7 - 壓縮/解壓縮, 打包
$ bzip2 -k-z ray.sh        #保留原檔並壓成ray.sh.bz2
$ bzip2 -k-d ray.sh.bz2    #保留原檔並解壓成ray.sh
$ unzip NERD_tree.zip      #解壓
$ unzip -l NERD_tree.zip   #看壓縮檔案內容
$ unzip -c NERD_tree.zip   #看壓縮說明檔
$ tar -jcv -f filename.tar.bz2  dirname        #壓縮打包
$ tar -jtv -f filename.tar.bz2                 #查詢內容物
$ tar -jxv -f filename.tar.bz2  -C  dirname   #解壓到dirname

     # 6 - 斷字元的改變
$ dos2unix -k ray_dos.sh  # ^M$ 改成$
$ unix2dos -k ray_unix.sh # $ 改成 ^M$
$ dos2unix -kn ray_dos.sh ray_unix.sh  #保留原檔,新檔為ray_unix.sh

     # 5 - 歷史記錄
$ history
$ !22   #選第22個

     # 4 - 用source 來執行檔案/腳本,就可以執行於父程序中
$ source ray.env.sh

     # 3 - 找檔案,建議是先換成root來找. 
$ find / -name "ray.sh" | less
$ fine / -type d -name ".vim" | less #找目錄
$ su

     # 2 - 改變user登入
$ su  

     # 1 - 變成執行檔/改變檔案權限
$ chomd 770 ray.sh  


[參考]
[1] Unix vs DOS 指令對照表
[2] 鳥哥的Linux私房菜