關鍵技術:
- 邊緣計算網關。邊緣計算是一種分布式計算范式,邊緣計算將使得在離散位置執行計算變得更加容易。是將計算資源和數據處理功能放置在接近數據源的邊緣設備上,以降低延遲、提高性能。邊緣計算網關作為邊緣計算的重要組成部分,負責連接邊緣設備與高級服務設備,并提供邊緣計算服務。
-
Docker容器技術已經在云計算領域取得了巨大成功。它提供了一種輕量級、可移植的方式來打包應用程序和其依賴項,確保在不同環境中的一致性運行。
- 可移植性:Docker容器非常便于在不同邊緣位置之間移動。無論是在工廠車間、智能城市中的傳感器節點,還是遠程邊緣服務器,容器都可以輕松部署和管理。這種可移植性確保了應用程序的一致性,無論它們在哪個邊緣位置運行。
- 資源隔離:Docker容器提供了資源隔離的能力,確保不同容器之間不會相互干擾。這對于在資源有限的邊緣設備上運行多個應用程序非常重要。資源隔離還可以提供更好的安全性,以防止不良應用程序影響其他正常運行的應用程序。
- 自動化部署和伸縮:Docker容器可以輕松進行自動化部署和伸縮。這對于在邊緣環境中管理大量設備和應用程序非常重要。使用容器編排工具(如Kubernetes)可以實現自動化部署、伸縮和健康檢查,確保應用程序的高可用性。
-
Rust語言,Rust運行效率高、開發效率好、適用范圍廣。作為一門編譯型語言,它直接編譯輸出到匯編代碼,通常公認裸機的Rust語言性能略高于C語言級別,擁有較高的運行效率。Rust語言的開發效率很高,文檔完善、編譯器提示有幫助,能節省軟件開發所需的時間。它能應用在多個平臺和指令集中。
- 內存安全性:Rust通過借用檢查器和所有權系統,在編譯期間就能檢測出潛在的內存安全問題,避免了內存泄漏、緩沖區溢出等常見問題。
- 并發性:Rust的并發模型允許開發者輕松編寫安全且高效的并發代碼,無需擔心數據競爭和死鎖等問題。
- 豐富的類型系統:Rust擁有豐富的類型系統,可以在編譯時發現和修復大多數類型錯誤,從而大大提高了代碼的可讀性和可維護性。
- 運行速度:Rust的運行速度和內存使用效率都非常優秀。
- 跨平臺兼容性:Rust支持跨平臺開發,意味著可以在多個系統上編譯代碼而不需要太多的修改代碼。
基本目標:
- 基于國產瑞芯微RK3568芯片
—— 瑞芯微RK3568芯片是一款定位中高端的通用型SOC,是一款高性能低功耗四核應用處理器,采用22nm制程工藝,集成4核ARM架構A55處理器和Mali G52 2EE圖形處理器,支持4K解碼和1080P編碼。RK3568支持SATA/PCIE/USB3.0等各類型外圍接口,內置獨立的NPU,可用于輕量級人工智能應用。
—— 理解 Cortex-A55 的真正潛力,先來簡要回顧一下其上一代產品:ARM Cortex-A53。采用這款 CPU 的設備已超過 15億臺,該 CPU 依然是當今業界出貨量最高的 64 位 Cortex-A 系列 CPU。Cortex-A53 于 2012 年發布,其獨一無二的設計,集性能、低功耗以及尺寸擴展性于一身,具備一系列多用途特性,因而可應用于諸多市場,其中包括高端智能手機、網絡基礎設施、汽車信息娛樂、高級駕駛員輔助系統 (ADAS)、數字電視、入門級移動設備和消費級設備乃至人造衛星。
—— Cortex-A55 支持ARMv8.1,并采用最新的 ARMv8.2 架構,并在其前代產品的基礎上打造而成。它在性能方面突破了極限,同時依舊保持了與 Cortex-A53 相同的功耗水平。在相同的頻率與工藝條件下,內存性能最高可達 Cortex-A53 的兩倍;在相同的頻率與工藝條件下,效能比 Cortex-A53 高 15%;擴展性比 Cortex-A53 高十倍以上。
- 基于瑞芯微為RK3568定制與優化的Debian系統
- 實現至少2路CAN總線,同時支持CAN2.0與CAN-FD(ISO11898-1)
- 實現不少于2路串口,不少于2路485總線
研發動線:
- 2024年8月16日,在Linux下將項目運行起來了,基本的Log服務,EdagHub服務都已正確啟動;這兩天在read canChannel的時候發現了一個與串口與tcp不同的地方,當沒有讀取到內容或未讀取完成時,read動作會阻塞住,這個特殊點折騰了我好幾個晚上。
- 2024年8月11日,基本項目架構已搭建完畢,但是從docker容器里映射宿主機的can端口不太靈,還得再學習;另外從windows如何采用socketcan進行調試也太不絲滑,還得再設計,更方便快捷。
-
2024年7月25日,基于實時Linux下的Docker的項目搭建基本成功,難點在于dockerfile的編寫與編譯,已全部實現。
2024-07-25 222250.png - 2024年6月27日,完成CAN總線的收發的基本原理實現;下一步進行CAN2.0的實際收發測試。
- 2024年6月26日,基于Docker容器技術的研發模式試驗完成并成功,基本達到預期目標。
- 2024年5月22日,個人購買野火魯班貓2(RK3568J)利用業余時間進行邊緣網關的預研。
技術記錄
在研發機建立一個docker registy
- 首先,確保本機已經安裝了 Docker。
- 通過執行以下命令來運行 Docker Registry 作為一個容器,該命令會下載官方的 Docker Registry 鏡像(版本 2),以 registry 為名稱運行它作為一個容器,將您本機的 5000 端口綁定到容器的 5000 端口,并確保如果容器崩潰或服務器重啟時容器能夠自動重啟。
docker run -d -p 5000:5000 --restart=always --name registry registry:2
編譯為ARM64/V8,并推送到本機Registry2
第一步:構建鏡像。這樣做可以在推送之前檢查或測試構建的鏡像,或者在不同的時間推送鏡像。
docker buildx build --platform linux/arm64/v8 -f Dockerfile --tag localhost:5000/jupitercli:1.0.6-arm64 --output type=docker .
第二步:推送鏡像:構建完成并確認鏡像無誤后,使用 docker push 命令將鏡像推送到注冊表。
docker push localhost:5000/jupitercli:1.0.6-arm64
在網關拉取已編譯的鏡像
docker pull 192.168.x.xxx:5000/jupitercli:1.0.6-arm64
在網關運行鏡像
sudo docker run -d \
--name jupitercli \
-p 10101:10101 \
-p 10100:10100 \
-v /dev/can/can0:/dev/can/can0 \
-v /dev/can/can1:/dev/can/can1 \
192.168.3.18:5000/jupitercli:1.0.6-arm64
這個命令的組成部分解釋如下:
-
-d
: 表示以“分離模式”運行容器,即容器在后臺運行。 -
--name
后面跟著的是給容器起的名字,這個名字可以自定義。 -
192.168.x.xxx:5000/xxxxxx:5.0-arm64
指定要運行的鏡像名稱和標簽。 - 使用
-p
參數來映射端口。例如,如果應用在容器內監聽 8080 端口,并且希望將其映射到宿主機的99上。
顯示運行日志
sudo docker logs -f jupitercli104
實時查看 Docker 容器的日志。如果已經有了一個正在運行的容器,并且想實時查看它的日志輸出,可以使用 docker logs
命令加上 -f
(follow)選項。這會讓命令持續運行并顯示任何新產生的日志輸出。
想限制顯示的日志行數,你可以使用 --tail
選項,例如只顯示最新的 10 行日志:
sudo docker logs -f --tail 10 myname