Finally, I successfully compiled AOSP in WSL (Windows Subsystem for Linux) 終於讓WSL成功運作AOSP

Microsoft Love Linux

Microsoft Love Linux
echo “hello!!!” > /mnt/c/temp/log.txt

安裝 WSL 與 Ubuntu

WSL 的限制與不同

  1. 只能只行64位元的程式。也就是常見的 ELF32 是不能夠在 WSL 上執行的。
  2. WSL 下,能夠用行 Win32 EXE 程式。但是注意,對執行的Windows程式來說,本質上還是運行於 Windows 上的程式,所有的檔案結構依然是Windows 那套。也就是說,/mnt/c/ 這樣的檔案名稱是無法被這樣的Windows 程式存取的。(這點很重要,也成為我們解套AOSP編譯的一個重要契機)
  3. WSL 預設是用 lxfs 檔案系統來當成 rootfs。而且這個檔案系統是分大小寫的。
  4. 你可以存取 NTFS,但是 NTFS 預設是不分大小寫。但請注意 AOSP 只能在區分大小寫的檔案系統上編譯。所幸,在新版的 Windows 10 中,NTFS 已經能夠開啟大小寫區分了。我們可以動態的開啟這些功能。
  5. WSL 藉由 DrvFs 來存取Windows 的檔案系統。
    C:\ on /mnt/c type drvfs (rw,noatime,uid=1000,gid=1000,metadata,case=off)
  6. 接續 5. 你的外接裝置比方 USB DISK,並不會自動的加入 WSL 的系統。最簡單的方式就是重新啟動 WSL。
    wsl — shutdown or wsl -t Ubuntu or Restart-Service LxssManager
  7. WSL的安裝位置。預設來說安裝於:這個位置是能夠被改變的,只是相對來說有些難處。
    %userprofile%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc
  8. Symbolic Link 的問題:
    如果你在 rootfs 上建立 symbolic link,這點跟一般 Linux 下沒甚麼不同。但是如果你在 DrvFs 下的 NTFS 編譯 AOSP,那麼你記住你的檔案系統是與 Windows 共用的。 Windows 下有兩種連結方式,"SYMBOLIC" 與 "JUNCTION" 其中 "S" 類的需要有較高的權限才能使用。另外,我測試的結果是想對目錄時,SYMLINK 是可以的,但是 /mnt/xxx 這類是完全無法在 Windows上正常工作的。

開始編譯AOSP

下載開發工具:

安裝adb: (Android Debug Bridge)

mkdir ~/android && cd ~/androidwget https://dl.google.com/android/repository/platform-tools-latest-linux.zip && unzip platform-tools-latest-linux.zipecho “alias adb=’~/android/platform-tools/adb’” >> ~/.bash_aliases
echo “alias fastboot=’~/android/platform-tools/fastboot’” >> ~/.bash_aliases
source ~/.bash_aliases

安裝舊版OpenSSL:

mkdir ~/openssl && cd ~/opensslwget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz
tar -zxvf openssl-1.0.1u.tar.gz
cd openssl-1.0.1usudo ./config && sudo make && sudo make install# (backup current openssl tool)
sudo cp `which openssl` `which openssl`_new
# (create link to the new openssl)
sudo ln -sf /usr/local/ssl/bin/openssl `which openssl`

克服各種ELF32不相容問題:

Bison
aosp_android_9.0.0/source/prebuilts/misc/linux-x86/bison/bison ==> /aosp_9/prebuilts/build-tools/linux-x86/bin
Using soft-link bison -> ../../../../../aosp_9/prebuilts/build-tools/linux-x86/bin/bison
ln -s ../../../../../aosp_9/prebuilts/build-tools/linux-x86/bin/bison bison
Error: prebuilts/misc/linux-x86/bison/bison: prebuilts/build-tools/common/bison/m4sugar/m4sugar.m4: cannot open: No such file or directorycp ../aosp_9/prebuilts/build-tools/common/ ./prebuilts/build-tools/ -rfOrmake bison
export BISON_EXEC=$ANDROID_BUILD_TOP/out/host/linux-x86/bin/bison
ijar’s problem
wsl: https://github.com/Microsoft/WSL/issues/3157
possible patch: https://review.lineageos.org/c/LineageOS/android_build/+/208102/5/tools/ijar/zip.cccd build/make/tools/ijara18c1d9.diff
a18c1d9.diff
git apply a18c1d9.diff
make ijar
export IJAR_EXEC=$ANDROID_BUILD_TOP/out/host/linux-x86/bin/ijar
Orreplace prebuilts/build-tools/linux-x86/bin/ijar with $ANDROID_BUILD_TOP/out/host/linux-x86/bin/ijarmv ijar ijar_back && cp -f $ANDROID_BUILD_TOP/out/host/linux-x86/bin/ijar .Ormake ijar
export IJAR_EXEC=$ANDROID_BUILD_TOP/out/host/linux-x86/bin/ijar

關於那些預先安裝沒有代碼的執行檔案:

用Win32 EXE替換ELF32:

Qualcomm’s image sign tool bin is 32bits. We must use 64bits.Fortunately, WSL could run win32 .exe directly. We use WIN version to replace LIN.qcom/proprietary/common/scripts/SecImage/bin/LIN
mv crypto_ccm crypto_ccm_32bit_not_work
cp ../WIN/crypto_ccm.exe ./crypto_ccm
cp ../WIN/openssl.* .
Although, we can run .exe from WSL direcrtly. The file input and path are not accessible from .exe. 🙁Using mklink junction to connect wsl/ubuntu/tmp with root tmpmklink /j tmp %userprofile%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\tmp

增快執行效能:

結論:

--

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Allen Kuo (kwyshell)

Allen Kuo (kwyshell)

More from Medium

What Makes You Beautiful?

INTRODUCTION

Unimportant crazy letter