顯示具有 Boot to Gecko 標籤的文章。 顯示所有文章
顯示具有 Boot to Gecko 標籤的文章。 顯示所有文章

2012年7月4日 星期三

Run B2G on Desktop

Run B2G on Desktop
如果想玩玩看 B2G 卻沒有手機怎麼辦?
沒關係,在電腦上玩,除了使用模擬器以外還有例外的選擇,
其中一個是編譯一份電腦上可以跑的 B2G 。

環境

我所使用的環境是 Ubuntu 12.04 LTS x86_64

download source

要在電腦上跑起 B2G 需要兩個部份,
一個是 B2G 的主程式,另一個是 gaia 也就是 B2G 的使用者界面。
$ hg clone http://hg.mozilla.org/mozilla-central
$ git clone https://github.com/mozilla-b2g/gaia.git

build

B2G

B2G 的部份我們需要先建立一個設定檔 .mozconfig
下面是我所使用的設定
mk_add_options MOZ_MAKE_FLAGS="-j6"
mk_add_options MOZ_OBJDIR=../build

ac_add_options --enable-application=b2g
ac_add_options --enable-debug
ac_add_options --enable-profiling
ac_add_options --with-ccache=/usr/bin/ccache
MOZ_OBJDIR 的部份是設定編譯後檔案存放的位置,不指定的話會放在 mozilla-central 下的 obj-xxxxx
MOZ_MAKE_FLAGS 設定編譯的參數, -j 接的數字是同時執行的 jobs 數量,適當調整可以加快編譯的速度
--enable-application=b2g 這邊設定所要編譯的程式( mozilla-central 包含了 Firefox, Thunderbird, B2G 等)
--with-ccache=/usr/bin/ccache 是使用 ccahe 來加快編譯,詳細內容可以參考 這篇
寫完設定檔後就可以開始編譯了,Makefile 是 client.mk
$ make -f client.mk
整個編譯的過程需要大約半小時左右吧,另外如果有缺少編譯需要的套件,
就安裝一下吧,我是沒遇到,大概裝了太多東西了....

gaia

編譯 gaia 前呢先設定兩個環境變數,一個是 gaia repo 的位置,
另一個就跟他的名稱一樣是 gaia 的 domain
$ GAIA=PATH_TO_GAIA_REPOSITORY
$ GAIA_DOMAIN=gaiamobile.org
接下來就可以編譯了
$ DEBUG=1 make
DEBUG=1 可加可不加,主要就是影響一些 debug 訊息

執行

完成 B2G 和 gaia 的編譯以後就可以執行了!
不過在執行前先設定一下 /etc/hosts 在裡面加上
127.0.0.1     gaiamobile.org
127.0.0.1     homescreen.gaiamobile.org
127.0.0.1     dialer.gaiamobile.org
127.0.0.1     sms.gaiamobile.org
127.0.0.1     browser.gaiamobile.org
127.0.0.1     maps.gaiamobile.org
127.0.0.1     camera.gaiamobile.org
127.0.0.1     gallery.gaiamobile.org
127.0.0.1     video.gaiamobile.org
127.0.0.1     market.gaiamobile.org
127.0.0.1     music.gaiamobile.org
127.0.0.1     settings.gaiamobile.org
127.0.0.1     clock.gaiamobile.org
127.0.0.1     crystalskull.gaiamobile.org
127.0.0.1     penguinpop.gaiamobile.org
127.0.0.1     towerjelly.gaiamobile.org
127.0.0.1     wikipedia.gaiamobile.org
127.0.0.1     cnn.gaiamobile.org
127.0.0.1     bbc.gaiamobile.org
127.0.0.1     nytimes.gaiamobile.org
127.0.0.1     calculator.gaiamobile.org
127.0.0.1     system.gaiamobile.org
後面的 gaiamobile.org 則依前面設定的 GAIA_DOMAIN 而定
之後移動到 B2G 的執行檔位置,他會在所設定的 MOZ_OBJDIR 底下的 dist/bin/ 內
$ cd MOZ_OBJDIR/dist/bin
不要移動過去也是可以,我們要執行的就是底下的 b2g 這隻程式
執行時幫他加上 gaia profile 資料夾的位置(profile 會在 gaia make 的時候產生)
$ ./b2g -profile GAIA/profile
上面兩個步驟的 MOZ_OBJDIR 和 GAIA 請自行更換成對應的路徑,
如果沒有意外的話就會看到 B2G 的 screen lock 了
https://github.com/float-tw/float-blog/raw/master/img/b2g_desktop_screenshot.jpeg -profile 的部份我的了解是他會利用後面的 profile 在本機上執行 service,
所以在 netstat 可以看到幾個由 b2g listen 的 port
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:2828          0.0.0.0:*               LISTEN      13371/b2g
tcp        0      0 127.0.0.1:5037          0.0.0.0:*               LISTEN      4702/adb
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      13371/b2g
tcp        0      0 127.0.0.1:4242          0.0.0.0:*               LISTEN      13371/b2g
這時除了在 b2g 本身的界面運行外,也可以試著用其他瀏覽器去連看看,
網址會是 appname.gaiamobile.org:8080 不過基本上要用 Firefox 15 以上才會有比較正常的效果。
如果想要自己丟一個 app 進去試試看的話,現在的 gaia/apps 底下有一個 template 的資料夾,
就是一個空的 app 可以參考他,以及其他其他底下的 app 來寫 manifest.webapp 這個檔案,
app 部份就主要是 HTML 和 javascript ,寫好後放在 gaia/apps 底下後重新 make 即可。
至於 app 的詳細寫法因為不是本篇重點便不詳述。
在參考資料的 gaia hacking 中也有其他多種除了在手機上執行 b2g 以外的方式,
另外如果執行上碰到什麼問題可能是我寫錯的地方也請留言指教,謝謝。

補充

操作的部份
滑鼠
上一頁: esc
Home: home
音量: page up/down
沒找到 power 如果有人找到可以通知我補充一下嗎?謝謝

2012年6月21日 星期四

Build and Install B2G

Build and Install B2G

環境

括號為官方建議

  • Ubuntu 12.04 LTS x86_64 ( 11.10 x86_64 )
  • 2GB RAM ( 4GB )
  • 10GB swap space ( at least 4GB )
  • at least 80GB hard disk space
  • Samsung Nexus S GT-I9023 with ICS-kernel ( Samsung Nexus S[I9020,I9023], S2[I9100] )

需要的 tools

$ sudo apt-get install ia32-libs gcc-multilib g++-multilib bison \
flex gperf lib32z1-dev lib32ncurses5-dev lib32ncursesw5-dev \
libidl-dev lib32gomp1 autoconf2.13 ccache libx11-dev \
lib32readline-gplv2-dev lib32tinfo-dev

先安裝 java jdk 方便後面的步驟

$ sudo apt-get install openjdk-6-jdk

安裝 Android SDK

先到 Android SDK starter package 下載

解壓縮後執行 $ ./android-sdk-linux/tools/android

然後僅勾選頁面中的 Android SDK tools, Android SDK platform-tools 後,點選右下角的 Install 2 packges...(數字是由勾選的數目決定)

完成安裝後在 ~/.bashrc 中更新 PATH 方便使用

# in ~/.bashrc
# 依照 Android SDK 放置的路徑調整
PATH=$PATH:/path_to_android-sdk-linux/platform-tools
export PATH

將手機的 USB debugging 打開,應該在 應用程式->開發->USB 偵錯

接著設定 /etc/udev/rules.d/51-android.rules

#in /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666"

編譯

這部份和之後的刷機官方的說明有修改過,用幾個 script 通包了,還像蠻懶人包的,

原本是用 Makefile 那我還是依照當初用 Makefile 的作法介紹(這部份也沒有很複雜),

script 的部份可以參考官方文件

Preparing_for_your_first_B2G_build

Building_Boot_to_Gecko

首先從 github 下載 B2G 專案

git clone https://github.com/andreasgal/B2G.git

在這邊 git 我有遇到一個問題,當從 https clone 的時候會有錯誤

error: gnutls_handshake() failed: A TLS packet with unexpected length was received

改成 http 可以暫時解決這個問題,不過後續還很多 https 的部份,

我查到的解決辦法是把 git 抓回來自己重新編譯。

接下來 Makefile 的部份也可以參考 B2G 專案下的 INSTALL

首先把完整的專案下載

$ cd B2G
$ make sync

接著 config ,不同手機要用不同的,這邊以 Nexus S 做範例

$ make config-nexuss-ics

由於 gonk-ics 並沒有包含在前面 sync 完專案中所以這個步驟還會去作 make gonk-ics-sync

上面兩個部份都非常花時間,一兩個小時以上跑不掉,在加上 sync 錯誤的話要重作幾次,

建議在網路狀況好一點的時後做,或是睡前(不過就怕起來看到錯誤...)

完成以後就可以開始編譯 gonk

$ make gonk

這步驟也是有點久的,完成後編譯其他部份

$ make

刷機

首先把手機解鎖, Makefile 裡面連這個也有,夠懶吧

$ make unlock-bootloader
或是想要自己來
$ fastboot oem unlock

這邊要提一下,幾乎全部寫在 Makefile 中的動作都是當作手機是開機的狀態,

所以如果需要進 bootloader 他會先 adb reboot bootloader ,

如果手機已經在 bootloader 下的話會錯誤,就先把手機正常開機吧。

然後就可以開始刷機了,嗯這個也都寫好好了

$ make flash-only

這邊完成後手機就會重新開機到 B2G 底下了,不過看到的應該是 Server not found 的畫面,

因為 gaia 還沒安裝,所以接著安裝 gaia

$ make install-gaia

這個步驟會去把 gaia 裡的 home, apps 做快取然後手機上,所以如果不想在上面看到一堆程式,

可以在 B2G/gaia/apps 底下刪掉,想放進自己寫也可以丟進去。

這樣就完成了。

因為有些部份是照印象寫的,如果有漏掉或錯誤的部份煩請告訴我一下,謝謝。