1. waft介紹
Waft:為AIoT應(yīng)用研發(fā)而生Waft(WebAssembly Framework for Things) 是一個面向 AIoT 的高性能應(yīng)用研發(fā)框架,Waft ?基于 WebAssembly 和自研的渲染引擎技術(shù)打造,適用于智能終端的軟件應(yīng)用研發(fā)場景。
它的特點網(wǎng)站從框架特性,技術(shù)優(yōu)勢,應(yīng)用場景幾個方面展開。其中強調(diào)的AIoT的應(yīng)用,高性能幾乎接近原生應(yīng)用體驗,跨平臺等特點令人關(guān)注。
參考文檔:https://www.yuque.com/waft/docs/melflo
2. 準(zhǔn)備
官方提供的語雀中包含了Waft快速開發(fā)指導(dǎo),框架使用,組件文檔,API手冊等內(nèi)容。
更新開發(fā)板waft應(yīng)用框架+庫(我前兩給官方提了BUG, 更新的)下載地址https://occ.t-head.cn/vendor/detail/download?spm=a2cl5.25411629.0.0.68d4180fSmBbBu&id=3978884137347461120&vendorId=3895463451199475712&module=3更新方法參考:https://occ.t-head.cn/community/post/detail?spm=a2cl5.26076654.0.0.4a43180fOV1h2K&id=4003830518746517504
3. 環(huán)境搭建
我使用ubuntu 20.04 物理機作為開發(fā)平臺。
3.1 安裝nodejs環(huán)境(我之前安裝過)
再提一下安裝命令 :
sudo apt install nodejs
3.2 安裝waft-cli工具
安裝好了nodejs環(huán)境后,接下來就是安裝waft-cli這個稱為腳手架的工具了。命令為:
sudo npm i waft-cli -g
如果指令順利執(zhí)行完成的話,我們就可以開始基本waft的工程創(chuàng)建了。
3.3 vscode 代碼編輯器
安裝VScode 代碼編輯器。(地球人都在用,我之用安裝過)可以通過vscode的官網(wǎng)下載安裝包https://code.visualstudio.com/Download也可以直接使用ubuntu的軟件包管理軟件搜索vscode安裝,這個方法比較簡單,一鍵完成,推薦。
4. 第一個例程測試
一切準(zhǔn)備就緒,學(xué)編程第一個節(jié)課,
就是向編程語言Say hello, ?Waft 也從Say hello開始吧, waft say hello, 不簡單, ?折騰了好幾天,
還沒Say hello, 官方給升級模板, 各運行庫, 還是沒成功, 最后是官方給的aot, ?才成功Say hello。
4.1創(chuàng)建項目
首先我們新建一個目錄,就命名為hello_waft吧,進入目錄后,運行
waft init
提示輸入開發(fā)者,可以不寫接下來就是選擇模板了,按方向下鍵選擇,我們選擇1: Say hello模板。接下來就是工程項目初始化過程,網(wǎng)絡(luò)必須暢通,否則就夠嗆了。我們可以看到他在執(zhí)行npm install的一個進度條。當(dāng)進度條走完了,出現(xiàn)init done的字樣后,項目創(chuàng)建就完成了。
4.2 啟動服務(wù)和項目預(yù)覽
進入剛才創(chuàng)建的項目目錄,
cd?hello_waft
然后執(zhí)行
sudo npm start
執(zhí)行后,看版本號,我的目前最新0.7.3,舊版編譯aot,會有問題
sun@sun-ubuntu:~/waft/hello_waft$ sudo npm start
>hello_waft@0.7.3 start /home/sun/waft/hello_waft
> waft start
web服務(wù)已啟動
靜態(tài)預(yù)覽:http://127.0.0.1:8080/web/preview.html?action=preview&path=pages/index/index
運行模式:http://127.0.0.1:8080/web/preview.html?action=run
start success
Welcome to waft development.
Type .help for more information.
waft:0.7.38
waft-cli:0.7.19
waft> waft工作臺已啟動
http://127.0.0.1:8080/ui
真機調(diào)試可連接到本機ip: 192.168.0.64
waft> /bin/sh: open: command not found
命令執(zhí)行后,可以看到終端的提示,我們來靜態(tài)預(yù)覽一下看看效果,再瀏覽器中打開
靜態(tài)預(yù)覽:http://127.0.0.1:8080/web/preview.html?action=preview&path=pages/index/index
動態(tài)效果預(yù)覽(與靜態(tài)一樣畫面,區(qū)別是靜態(tài)點圖標(biāo),無動作,動態(tài)有動作)
運行模式:http://127.0.0.1:8080/web/preview.html?action=run
調(diào)試模式:http://127.0.0.1:8080/ui
(build –aotTarget=riscv64參數(shù)指定不了平臺 , 也沒這個參數(shù)) 在這個調(diào)試平臺,可以指定target 為riscv,??點了調(diào)試后,同樣也在編譯(這是原廠升級后結(jié)果,不升級點riscv64,會失敗)
4.2 編譯
build怎么用,先help
build help
....
.build 編譯工程 --default=默認(rèn)頁面(可選) --page=指定單頁(可選) --card=指定的卡片(可選) --aot=true(可選, 是否輸出 .aot 文件) --push=true(可選, 構(gòu)建完自動推送)
(build –aotTarget=riscv64參數(shù)指定不了平臺 , 也沒這個參數(shù))
官方教程以下命令:
waft>.build –aot=true –aotTarget=riscv64
(build –aotTarget=riscv64參數(shù)指定不了平臺 , 也沒這個參數(shù))
......
官方教程里寫的說明指定target 不是在這個命令里,指定了還是arm的'--aotTarget=riscv64是無效的吧 所以指定不到 target
依據(jù)信息,可知編譯的目標(biāo)程序是armv7, ?在licheeRV86, ?跑肯定會出錯, 跑不起來的。。。
可以運行:
waft_app app.aot 192.168.0.64 8030
編譯后, 直接.pull,(或調(diào)試窗口,點推送) 就可以傳文件到開發(fā)板了,so wasy, 方便可以運行:waft_app app.aot 192.168.0.64 8030
root@MaixLinux:/waftapps# waft_app app.aot 192.168.0.64 8030
編譯成功后,會出現(xiàn)Compile success字樣。同時我們可以察看工程文件的編譯結(jié)果如下,存放在項目文件夾下的build文件夾內(nèi)。
sun@sun-ubuntu:~/waft/hello_waft$ ls build
app.aot app.wasm.map cards _waft_index.ts
app.wasm app.wat index.html
注: aot與平臺相關(guān)的 waft應(yīng)用
- 查看網(wǎng)絡(luò)連接
root@MaixLinux:/mnt/UDISK# ifconfig
eth0 Link encap:Ethernet HWaddr 22:77:81:E0:C7:3D
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:62
wlan0 Link encap:Ethernet HWaddr 08:BE:E0:98:24:70
inet addr:192.168.0.20 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::abe:e0ff:fe98:2470/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:120428 errors:0 dropped:24350 overruns:0 frame:0
TX packets:27595 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:110086034 (104.9 MiB) TX bytes:2799901 (2.6 MiB)
- 推送編譯結(jié)果
這里采用scp命令推送aot到開發(fā)板, 推送前建議先cp名為hello.aot。
sun@sun-ubuntu:~/waft/hello_waft/build$ cp app.aot hello.aot
sun@sun-ubuntu:~/waft/hello_waft/build$ scp hello.aot root@192.168.0.20:/waftapps
root@192.168.0.20's password:
hello.aot 100% 566KB 4.1MB/s 00:00
注意編譯結(jié)果在build目錄 下。
- 實測
再ssh終端中,執(zhí)行剛剛上傳的hello.aot文件。命令為:
waft_app hello.aot
不巧運行hello, 失敗, 群其他開發(fā)者同樣是運行失敗, 在釘釘, 更新了waft_cli, hello模版代碼,開板板運行庫, 運行結(jié)果