注意
- 服務器端與客戶端系統的版本號需為Ubuntu20.04
- ccache版本不能低于4.4
- 執行用戶需要為sudo權限
- 服務器端nfs目錄權限必須為nobody:nogroup
一、服務端配置:
在服務器192.168.60.142上配置 NFS 共享
1.安裝 NFS 服務器:
1 | sudo ?apt-get? install ?nfs-kernel-server |
2. 編輯 /etc/exports 文件,添加共享目錄,本次以/data/nfsroot目錄作為共享緩存目錄:
1 | /aosp/pvt1/nfsdata ?*(rw, sync ,no_subtree_check,all_squash,anonuid=65534,anongid=65534) |
3. 賦權?
1 2 | sudo ?chown ?-R nobody:nogroup? /aosp/pvt1/nfsdata sudo ?chmod ?-R 777? /aosp/pvt1/nfsdata |
4. 重新啟動 NFS 服務:
1 2 3 4 5 6 | # 重新導出所有共享目錄 sudo ?exportfs -a # 重新啟動 NFS 服務,使新配置生效 sudo ?systemctl restart nfs-kernel-server # 確保 NFS 服務在系統啟動時自動運行 sudo ?systemctl? enable ?nfs-kernel-server |
5. ccache參數配置
1 2 3 4 5 6 7 8 9 | # ccache參數配置 echo ?' export ?PATH= "$HOME/bin:$PATH" export ?USE_CCACHE=1 export ?CCACHE_COMPRESS=1 export ?CCACHE_DIR= "/aosp/pvt1/.nfsroot/.ccache" export ?CCACHE_EXEC= /usr/bin/ccache ${CCACHE_EXEC} -M 1T ' >>~/.bash_profile |
二、客戶端配置
1.安裝配置ccache
1.1 下載ccache(如下載不了則可從本頁面附件中下載)
1 | curl -Lo ~ /ccache-4 .10.1-linux-x86_64. tar .xz https: //github .com /ccache/ccache/releases/download/v4 .10.1 /ccache-4 .10.1-linux-x86_64. tar .xz |
1.2 配置ccache
1 2 3 4 5 6 7 | # 解壓ccache cd ?~ tar ?xvf ccache-4.10.1-linux-x86_64. tar .xz # 拷貝到/usr/bin目錄下 (用which ccache先查找/usr/bin目錄下是否已存在ccache,如有則刪除或備份) if ?[ -f? "/usr/bin/ccache" ?]; then ?sudo ?mv ?/usr/bin/ccache ?/usr/bin/ccache .bak; fi sudo ?cp ?ccache-4.10.1-linux-x86_64 /ccache ?/usr/bin/ |
做鏈接與參數配置(此步驟需要開發人員執行)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # 鏈接ccache mkdir ?~ /bin cd ?~ /bin ln ?-s? /usr/bin/ccache ?arm-linux-g++ ln ?-s? /usr/bin/ccache ?arm-linux-gcc ln ?-s? /usr/bin/ccache ?c++ ln ?-s? /usr/bin/ccache ?cc ln ?-s? /usr/bin/ccache ?ccache ln ?-s? /usr/bin/ccache ?g++ ln ?-s? /usr/bin/ccache ?gcc # ccache參數配置 echo ?' export ?PATH= "$HOME/bin:$PATH" export ?USE_CCACHE=1 export ?CCACHE_COMPRESS=1 export ?CCACHE_DIR= "/aosp/pvt1/.nfsroot/.ccache" export ?CCACHE_EXEC= /usr/bin/ccache ' >>~/.bash_profile # 重新加載 source ?~/.bash_profile |
1.3 測試ccache
編寫一個簡單的 C 程序:創建一個簡單的 C 文件,例如?hello.c,將以下內容寫入hell.c中
1 2 3 4 5 6 | #include <stdio.h> int main() { ???? printf ( "Hello, World!\n" ); ???? return ?0; } |
1.4 首次編譯:
1 2 3 4 | # 編譯 gcc -c hello.c # 查看ccache狀態, ccache -s |
1.5 再次編譯,如果ccache?hit
?的數量增加了,表示?ccache
?已成功緩存了編譯結果并在重復編譯時使用了緩存。
1 2 3 4 | # 編譯 gcc -c hello.c # 查看ccache狀態 ccache -s |
2. 在客戶端(編譯機)掛載 NFS 共享(管理員配置)
2.1 安裝 NFS 客戶端:
1 | sudo ?apt-get -y? install ?nfs-common |
2.2 創建掛載點并掛載 NFS 共享:
1 2 | sudo ?mkdir ?-p? /aosp/pvt1/ .nfsroot sudo ?mount ?192.168.60.142: /aosp/pvt1/nfsdata ?/aosp/pvt1/ .nfsroot |
?3 配置NFS開機自動掛載
3.1 在 /etc/systemd/system/mount-nfs.service中寫入以下內容(如沒有則新建此文件):
[Unit] Description=Mount NFS Share After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/bin/bash -c "sleep 10 && /usr/bin/mount 192.168.60.142:/aosp/pvt1/nfsdata /aosp/pvt1/.nfsroot" RemainAfterExit=yes [Install] WantedBy=multi-user.target |
這里添加了一個 sleep 10 命令來確保掛載命令在網絡完全啟動后執行。
3.2 保存并退出文件,然后重新加載 systemd 配置:
1 | sudo ?systemctl daemon-reload |
3.3 確保服務已啟用:
1 | sudo ?systemctl? enable ?mount -nfs.service |
3.4 重啟系統:
3.5 驗證掛載
重啟后再次檢查掛載:
如下圖則表示掛載成功:

3.6 查看日志
如果掛載仍然未成功,查看服務的狀態和日志以獲取更多信息:
1 2 | sudo ?systemctl status? mount -nfs.service sudo ?journalctl -u? mount -nfs.service |
三、使用ccache
在源代碼一級目錄下配置使用ccache共享緩存編譯 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 加載環境變量 source ?~/.bash_profile? ? #編譯命令使用相同的相對路徑 export ?CCACHE_BASEDIR=$( pwd ) export ?CCACHE_NOHASHDIR= true # 打開CCACHE開關,如不執行此條命令則代表不使用ccache sed ?-i -e? '/ifneq\s\+(\$(CCACHE_EXEC),)/i +CCACHE_EXEC := /usr/bin/ccache' ?build /make/core/ccache .mk # 8676 android編譯 time ?python vendor /mediatek/proprietary/scripts/releasetools/split_build_helper .py --run full_auto8676p1_64_bsp-userdebug 2>&1 |? tee ?logs.txt # 編譯時可使用以下命令查看ccache狀態 ccache -s # 如需要配置ccache日志輸出,則在編譯前執行下面命令 export ?CCACHE_LOGFILE= /tmp/ccache .log |
參考文檔:
Network File System (NFS) | Ubuntu
ccache/ccache: ccache – a fast compiler cache (github.com)
ccache --- ccache
Ccache — 文檔 --- Ccache — Documentation