webOS OSE 研究筆記: 建立 QEMUx86 模擬器

webOS OSE 研究筆記: 編譯 webOS OSE 到 Raspberry Pi 3 一文中我們題到了如何透過 webOS OSE 提供的基於 Yocto Project 的編譯系統,建立開機卡片讓你的 Raspberry Pi 3 執行 webOS OSE 系統。

而在這邊文章中,我們將改建立用於 webOS OSE 的模擬器環境,以便於手邊沒有 Raspberry Pi 3 可以用時候的開發。

下載

首先,我們先透過 git 取得基本的編譯環境

coldnew@gentoo ~ $ git clone https://github.com/webosose/build-webos.git

由於這個編譯環境是基於 Yocto Project 所建立,因此請先確定你的系統有滿足 Yocto Project 編譯需要的一些基本依賴,如果不確定並且你的系統是 Ubuntu 系列的話,你可以透果以下腳本來確認環境是否有滿足編譯需求。

coldnew@gentoo ~/build-webos $ sudo ./scripts/prerequisites.sh

設定

第一次進入到這個編譯環境,我們需要透過 webOS OSE 提供的 mcf 腳本來指 定目標機器。對於模擬器這個目邊,我們需要這樣下命令讓我們編譯環境設定成 編譯給 qemux86 使用

coldnew@gentoo ~/build-webos $ ./mcf qemux86

設定完成後,接下來就是進行編譯的工作了

org9405684" class="outline-2">

編譯

首先我們先透過 source 命令設定好當前 shell 的環境

coldnew@gentoo ~/build-webos $ source oe-init-build-env

完成後,接下來就是選擇編譯目標,如果只是一般驗證用,可以選擇 webos-image

coldnew@gentoo ~/build-webos $ bitbake webos-image

如果是想要進行開發的話,推薦選擇 webos-image-devel 會比較好

coldnew@gentoo ~/build-webos $ bitbake webos-image-devel

接下來可以去睡一覺,因為編譯過程中會編譯到 Chromium,這會編譯非常久喔 ~

編譯完成後,會在 BUILD/deploy/image 下面出現我們想要的虛擬機映像檔: BUILD/deploy/images/qemux86/webos-image-qemux86.vmdk

執行虛擬機 (Ubuntu)

根據 QEMUx86 Emulator for Linux 一文,如果你是 Ubuntu 的使用者,你可以透過下載 webosose-emulator/prebuilt-emulator 這個 repo 裡面預先做好的 QEMU 執行檔,搭配 emulator 腳本來執行你的系統

(註: Gentoo Linux 使用者可以跳過這一步驟, 因為 emulator 腳本要修改才能在 Gentoo Linux 上執行)

我們首先先下載這個 repo

git clone https://github.com/webosose-emulator/prebuilt-emulator.git

仔細看一下,這整份 repo 基本上就是 QEMU 執行檔和執行腳本而已

coldnew@gentoo ~/prebuilt-emulator $ tree -L 2 .
. <b>
├── bin <b>
│   ├── pc-bios <b>
│   ├── x86 <b>
│   └── x86_64 <b>
├── emulator <g>
├── lib <b>
│   ├── x86 <b>
│   └── x86_64 <b>
├── README <g>
├── README-builds.md
├── README.md
└── webos-config-sample.json <g>

7 directories, 5 files

我們好奇的是 webos-config-sample.json 這個檔案,裡面到底有什麼呢?

{
    "description":"qemux86",
    "name":"webos-image-qemux86-master-20180524053534",
    "vmdk_file_path":"~/Downloads/webos-image-qemux86.vmdk",
    "hw.core":"1",
    "hw.ramSize":"1024",
    "hw.accel":"true",
    "hw.gl.accel":"true",
    "debug":"false",
    "portforwarding.SSH":"6622",
    "portforwarding.inspector":"9998"
}

實際上這份檔案就是用來設定你要執行的模擬器,比如剛剛編譯好的 image 的路徑,或是你要給你的虛擬機多少 RAM 來使用。 我們複製這份檔案成 webos-config.json 並加入我們自己的修改後,就可以這樣執行虛擬機。

coldnew@gentoo ~/prebuilt-emulator $ ./emulator webos-config.json

然後如果沒意外的話,你就會看到一個 QEMU 的視窗跑起來了

執行虛擬機 (Gentoo)

由於 webosose-emulator/prebuilt-emulator 裡面提供的 emulator 腳本是針對 Ubuntu 而寫,因此對於 Gentoo Linux 的使用者而言,你可以使用我改好的 emulator-gentoo 腳本來替代它,使用方式一樣是

coldnew@gentoo ~/build-webos $ ./emulator-gentoo webos-config.json

在執行之前,請先確定你的系統有透過 Portage 來安裝以下套件,並且需要的 USE flag 皆有打開

套件名稱 USE Flag
media-libs/virglrenderer  
app-emulation/qemu sdl alsa opengl virgl
media-libs/mesa gles2
orgddb2f21" class="outline-2">

截圖

如果一切順利,你應該會看到 QEMU 進入到 webOS OSE 的桌布

不順利的話,會看到進入到 QEMU, 但是卻沒有畫面顯示,這時後請確認一下你的 QEMU 使用的 backend 是否有問題

如果想要叫出內建的 App 的話,按下鍵盤上的 Super 按鍵 (或是 Windows 按鍵) 即可

使用 SSH 登入虛擬機

我們可以透過以下命令來 SSH 到你的虛擬機,注意到這邊的 Port: 6622 是設定在你的 webos-config.json

ssh -p 6622 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@localhost

使用瀏覽器找問題

除了 SSH 外,我們也可以透過網頁瀏覽器連線到 Port: 9998 的位置,來執行 inspector,注意到這邊的 Port 一樣是設定在 webos-config.json 上的。

不過此時我還是不知道這功能要怎樣用,因此後續再來談 :)

org77f32ff" class="outline-2">

Prebuilt image

如果你不想要自行編譯模擬器或是 Raspberry Pi3 的 image 的話,你可以到以下網址去下載已經編譯好的來玩玩看

http://build.webos-ports.org/webosose/