以Buildroot 建立ARM的 X11環境與Firefox49

前一篇 以Buildroot 建立ARM的 X11環境裡談到如何利用 buildroot 來建立 XWindows 環境,其最終目的也是為了可以讓 Firefox 運行起來,所以本篇是其後續。

這中間經歷了很多嘗試,但版本間存在著相依性,最後嘗試到可運行的組合是 Ubuntu 14.04 + Firefox 49,終間還包含了一些 tricky 在裡面。

本文需以 Ubuntu 14.04 來進行編譯,以產生 ARM 的 XWindow 和 Firefox 檔案,最終在 Windows QEMU運行。因 Ubuntu 14.04 的內建 QEMU 太舊,無法支援某些功能,只能在較新的版本執行,所以才會採取 Ubuntu 編譯,Windows 執行的方法。

套件安裝

請安裝下列套件,以在過程中正確運行。

忽略憑證錯誤

由於 Ubuntu 14.04 已經太舊了,至於有些根憑証已到期,可以下達以下命令,讓wget忽略此問題。

 

設定 Samba

由於編譯的環境全在 Ubunu 14.04 ,但QEMU虛擬機卻無法在其上運行,需在 Windows 執行會比較方便。因此需透過 samba 來分享檔案系統,以方便使用與開發。

Linux 設定

編輯 /etc/samba/smb.conf ,將 homes 的部份開啟,並將入 “read only = no”,以進行讀寫。

smb.conf

接著加入與登入帳號相同的 samba 帳號和密碼

重啟服務

 

Windows 設定

Windows (win10 home) 的部份,則需啟用 SMB 1.0 的協議。從控制台 –> 程式和功能 –> 開啟或關閉 Windows 功能 ,啟用所有 SMB 1.0 服務,然後重開。

啟用 SMB 1.0

瀏覽 Linux 目錄

接著以 Windows 檔案總管開啟 \\LINUX_IP,輸入 Linux 的帳號與密碼,應該就可以存取其家目錄。

範本檔案

為了簡化示範的流程,本文會用一個預先建立的目錄結構與script,來解說命令,檔案會附在文末。請先下載下來後,放在 ubuntu 內。用以下命令解壓縮。

下載編譯 Buildroot 以建立檔案系統與Toolchain

執行下列命令,下載 buildroot 套件,解壓縮並進入設定畫面

接著直接跳出,如果buildroot編譯後想重新設定,建議將 output 目錄整個刪除,會比較沒有問題。

ARM 設定

將 buildroot 範本設定檔複蓋設定檔,最後下達 make 來編譯。

若發生錯誤,可嘗試重編譯幾次 (make) 看看,似忽在 14.04 必定會發生此現象,最後仍可以編譯成功。

解壓 rootfs

完成後,會產生下列檔案

  • rootfs : output/images/rootfs.tar
  • toolchain 執行檔 : output/host/bin

為了符合範例script的設定,請下達下面命令,將 rootfs.tar 解開

 

頭一行命令,會先指定 toolchain 的路徑,以方便後面的kernel編譯。

下載並編譯 Kernel 4.4

接下來要下載並編譯 kernel 4.4,編譯器會使用剛 buildroot 所產生的編譯器。

複制範本設定檔,並開始編譯

編譯  Firefox

下達以下命令,解壓縮原始檔和複製設定參數

設定環境變數

將上面指令貼上,以進行編譯 firefox。

上面有一行 “rm -f $TC/bin/python*” 是特別修改的地方,若使用 firefox 編譯出來的 python 會需要重新下載一些套件,而預設的 python 是沒啟用 https 的,另外官方現在的 pypi repository 改成只支援https而且對 TLS 的版本也有要求,還有憑証也過期了,由於太麻煩,總之要讓其跑起來是失敗了。

所以將自己建出的刪除,採用系統的,就不會需要下載檔案了。

修改檔案與編譯

編輯並移除下列部份 $HOME/firefox-49.0/xpcom/io/nsLocalFileUnix.cpp,這部份我還不確定是在改什麼,等將來有發現問題再修正吧。

原始碼修改

然後以 ./mach build 來開始編譯,編譯成功後,以命令 ./mach package 來打包檔案。完整的檔案就會產生在

解壓到 rootfs 下

接下來要將 firefox 檔案放到 rootfs 下

 

打包虛擬機檔案

由於種種相依性的問題,目前只能在 Ubuntu 14.04 編譯,在 Windows 上 QEMU 執行,所以要進行一個打包的行為,來將需要的檔案收集起來。我有試過在Ubuntu 18.04虛擬機利運行 QEMU 來執行這些檔案,但會發生滑鼠不能用的情形,我猜有可能是在虛擬機裡再運行一個虛擬機的滑鼠對應問題,也許在實體 Linux 就無此現象。

此動作可以將需要的 Kernel Image、Device Tree 與檔案系統都放在 pack 目錄下,並生成一個 pack.zip 檔案與 pack 目錄。稍後就可以直接在 Windows 上啟動。

Windows 上啟動 QEMU 開機

當完成上面的動作後,基本上就具備了 rootfs / kernel,就可以準備開機了。在此自前,必需先在 Windows 上安裝 QEMU,此步驟就不在描述。將 runqemu.bat 放進 qemu 安裝目錄,並稍作修改。

這個batch檔, 主要是修改 PACKDIR 的部份,將其指向 Linux 下的 pack 目錄。修改完畢後,就可以執行 runqemu.bat 來啟動 QEMU 載入系統。

啟動 Firefox

QEMU 啟動後,會產生一個虛擬的圖型螢幕和文字console。在console進入系統執行下列命令

此時在虛擬螢幕會執行一個 xterm 的程式,在這個 xterm 的程式裡,我們啟動 firefox,就可以進行瀏覽了。

運行成功但有亂碼

Firefox 可以正常啟動並瀏覽了,但由於缺字型,所以中文都是一些麻將。我們可以在找一個 .ttc 的字型放入 rootfs 後,瀏覽時就會有中文了。由於可能有版權的問題,字型的部份請自型尋找。本文所使用的 demo 是由 Ubuntu 18.04 內 /usr/share/fonts 內找到的檔案 NotoSansCJK-Regular.ttc,將其複製到 rootfs 下 ~/qemu_sys_arm_firefox_template/sim/rootfs/usr/share/fonts/google-material/,再次打包運行。

加入中文字型就正常了

中文就出現了!

結語

有點辛苦的,終於讓 firefox 可以在虛擬機上運行了。仍然是初步,但有進展仍是另人開心的

相關聯結

qemu_sys_arm_firefox_template.tar.gz

Leave a Reply

請輸入答案 × 9 = 90