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私房菜

2009年10月30日 星期五

[2009-10-30-5] GNU make - 6/49大樂透

在android中,Makefile都很大。對初學的我,不容易了解。寫了一個來幫助自己加深印象。用vim 當編輯器,gcc 當編譯器, make是用來串很多的c, h等多個檔案的工具,它也可以用bash指令,真是了不起。就來寫一個lottery的執行檔囉!!

Step1: 寫lottery.c~
//filename: lottery.c
//2009-10-30, RayZ, 6/49大樂透

#include 
#include 
#include 

int main(int argc, char* argv[])
{
    int i;
    int no;
    int in;   
    while(1)
    {  
     printf("\n1: lottery \
                \n0: exit \
             \nenter is ");
     while(scanf("%d", &in)!=1)
        {
            fflush(stdin);
            printf("that's error\n");
            return 0;
        }
        
        if(in == 0)
            break;
        
        else if(in != 1)
            printf("\nPlease enter:0~1\n");
        else
        {
         for (i=0;i<6;i++)
            {
                no = rand()%49+1;
                if(i==5)
                    printf("%d\n", no);
                else
                    printf("%d,", no); 
         }
        }  
    }
    return 0;
}


Step2: 寫Makefile~
# filename: Makefile
# 2009-10-30, RayZ

objects = lottery.o

dell = $(ibm)
ibm = $(phone) 
phone = number?

lottery: $(objects)
 @gcc -o lottery $(objects)
lottery.o: lottery.c
 @gcc -c lottery.c


all:
 @echo $(phone)  # @是不秀出echo命令 

.PHONY:clean      #預防目錄下真有一個clean file
clean:
 -@rm -f $(objects)  # -是rm出錯也不顯示


Step3: 編譯/執行~
$ make   #產生lottery.o, lottery
$ make clean #刪除lottery.o
$ make all #測試用
$ ./lottery #執行lottery, 看能不能中個大獎

用vim來編輯Makefile,要記得檢查vim的設定環境(~/.vimrc)是否有set et(展開跳格鍵)。如果有就把它移走吧(或是:set noet)。為了避免Makefile: *** missing separator.Stop.

DOWNLOAD Here

[參考]
[1] wiki - make
[2] GNU Make 使用手冊
[3] cplusplus - c library
[4] The Open Group - c library