官方網頁:https://docs.qualcomm.com/bundle/publicresource/topics/80-41102-1/use-telaf-simulation.html
Qualcomm 有提供 docker container 可以用來模擬 TelAF 跑在 tagert machine 的狀況。這個模擬用的 docker container 有 Ubuntu 18.04 和 Ubuntu 22.04,而他們的 cgroup
都必須是 cgroup1
,不可以是 cgroup2
。
我一開始是開一個 LXD 的 Ubuntu 18.04 container 安裝 TelAF simulation 所需的 packages,以及安裝它的 docker image。但由於我桌機裝的 Ubuntu 是 24.04,預設是 cgroup2
,而 LXD container 的 cgroup
也會一併受 host 影響而變成 cgroup2
。
雖然有試過一些方法將桌機 Ubuntu 24.04 改成 cgroup1
,但 LXD container 頂多變成是 cgroup1
和 cgroup2
同時存在,無法變成 cgroup1
only,這樣仍會導致模擬時的一些功能有受限。
最後是改成用 VirtualBox 跑 Ubuntu 18.04 虛擬機來跑 TelAF simulation 才有效。
所以以下是以 VirtualBox 跑 Ubuntu 18.04 虛擬機安裝 TelAF simulation 的步驟。
檢查是 cgroup1
或 cgroup2
可以用以下指令:
以下結果是 cgroup1
:
以下結果是 cgroup2
:
PS. 以下所說的 host 都是指執行在 VirtualBox 的 Ubuntu 18.04 虛擬機。
安裝 Ubuntu 18.04 host 所需的 packages:
將使用者加入 docker 群組後,執行 newgrp docker
,然後重新登入此使用者,此時就可執行 docker 相關指令,如:
TelAF source code 的 git 頁面:https://git.codelinaro.org/clo/le/platform/TelAF/-/tree/telaf.lnx.1.1
可使用以下指令下載:
在 TelAF root directory 內執行以下指令:
在 TelAF root directory 內執行以下指令以 build docker images:
建立完之後可以用以下指令查看 docker images:
可以看到會安裝兩個 TelAF simulation 的 images,runtime
是用來執行模擬的,develop
則可以用來開發。
雖然有 develop 的 container,但我比較習慣在 host(也就是 Ubuntu 18.04 虛擬機)上 build application 🤔
讓 ~/TelAF/simulation/setup_simulation.sh
此腳本有執行的權限:
執行 setup_simulation.sh
:
執行完此腳本後,會在執行此腳本的資料夾內產生 simulation_env
資料夾,裡面有 5 個 git 專案(細節可參閱官網說明 https://docs.qualcomm.com/bundle/publicresource/topics/80-41102-1/get-the-source-code-from-the-clo-website.html ),開發人員可依據需求選擇特定的 branch,只要修改 patch_me.json
此檔案即可。
若有修改 patch_me.json
,則要在 simulation_env
資料夾內執行以下指令:
即使沒有要選擇特定的 branch,在第一次執行 setup_simulation.sh
腳本後,仍然要在 simulation_env
內執行 make update
,否則後續會一直出錯 😵
我之前不知道,一直不停重新安裝,弄了好久才發現是這個問題 😭😭😭😭😭
由於 TelAF 是執行在 TelSDK 上面,所以要先建立 TelSDK simulation project,TelSDK 官網:https://docs.qualcomm.com/bundle/publicresource/topics/80-PF458-1/introduction.html
先 cd
到 simulation_env/sdk
此資料夾內,執行以下兩個指令以設定和建立 TelSDK 基本的開發環境:
另外,也可以在 TelAF develop docker container 內建立 TelSDK simulation project:
當建立完 TelSDK simulation project 後,預設上會在 sdk
資料夾底下產生 rootfs
此資料夾,先紀錄此資料夾的路徑,後續會用到:
cd
至 simulation_env/telaf/simulation
資料夾內,建立一個名為 .simulation.build
的檔案,將以下內容寫入此檔案:
記得要將 sdk_rootf
的值改成前面執行 realpath rootfs
得到的路徑喔~
在 simulation_env/telaf/simulation/workstation/
此資料夾內建立 .simula.dev.action.sh
此檔案,並將以下內容寫入此檔案:
在 simulation_env/telaf
內執行以下指令:
在 ~/TelAF/simulation/simulation_env/telaf
內執行以下指令即可進入 TelAF simulation 的 docker container:
進入 container 後,執行 telaf start
才會啟動 TelAF,才能用 app
、update
等 target tools(https://docs.qualcomm.com/bundle/publicresource/topics/80-41102-4/Target-Tools.html )。
離開 container 時,若是輸入 exit
則會將 container 關掉。若要不將 container 關掉的方式離開 container,則必須:
ctrl
+ p
ctrl
+ q
這樣就會退出 container 而沒有將其關閉,之後若要再回到 container 則可用 docker attach <container_id>
回到 container,而 <container_id>
則可用 docker ps
查看。
在 ~/TelAF
內執行 make simula-up-develop
則可進入 TelAF develop docker container:
helloApp
ExamplehelloApp
app在 host 建立以下專案:
helloApp.adef
printClientComponent/client.c
printClientComponent/Component.cdef
printServerComponent/server.c
printServerComponent/Component.cdef
在 build 此 app 之前,先在 ~/TelAF/simulation/simulation_env/telaf
執行以下兩個指令:
執行完以上兩個指後才可以 build app,指令如下:
例如:
執行完之後會多出 helloApp.simulation.update
此檔案,要將它傳到 target machine,也就是 TelAF simulation docker container。
可以使用 docker cp
指令或 scp
指令將檔案傳到 TelAF simulation docker container。
docker cp
指令例如:
scp
指令例如:
使用 scp
傳送的話會需要輸入密碼,密碼是 simula
。
使用 scp
時須指定 port number 是 9022
。使用 docker ps
指令時,可以看到 PORTS
欄位是 0.0.0.0:9022->22/tcp, :::9022->22/tcp
:
這個設定會將所有送往 host network interface IP 且 port number 是 9022 的封包都映射到 docker container 裡面。
helloApp
on TelAF simulation在 TelAF simulation docker container 裡面執行 telaf start
以啟動 TelAF simulation。
執行 app status
可以看到有安裝的 App,以及該 App 的狀態:
cd
至 /root/simulation
資料夾,執行以下指令以安裝 helloApp
:
這時再執行一次 app status
就可看到有安裝了 helloApp
,且狀態是 running
:
執行 logread | grep helloPrint
可以看到 client 跟 server 的 log 訊息:
helloApp
若要讓 helloApp
停止運作,可以執行 app stop helloApp
:
若要移除 helloApp
,則可執行 update -r helloApp
: