引言
在嵌入式平臺性能飛速發展的時代,市場上如雨后春筍般涌現出各類高性能高性價比的新興平臺,為我們的開發帶來了諸多便利。RT-Thread Smart 正是為更好地利用這些性能優勢而生的一款解決方案。通過它,我們可以輕松復用豐富的 RT-Thread Smart 系統組件以及 POSIX ,UNIX,GNU 生態的軟件棧,實現更高效的驗證和功能開發。
我們通過終端環境中功能強大的終端多路復用工具 tmux 作為引子,在本文里展示眾多豐富的組件在多窗口多終端及遠程登陸應用上的實際體驗,同時了解RT-Thread Smart 系統對復雜應用依賴的各類基礎設施提供的完善支持。
在正文開始前,我們可以通過以下的視頻對這些功能的效果一睹為快。
上圖展示了通過終端工具 ssh 遠程登錄到 RT-Thread Smart 系統,并綁定一個原先創建,正在運行中的會話的效果。左邊窗口中通過 top 工具實時觀測系統占用率,右邊則是運行中的 tar 打包和 bz2 壓縮任務。同時,我們創建了一個新的窗口,執行了一個 ps 命令。
tmux 簡介
Tmux 是一個終端復用器,允許用戶在一個終端會話中管理多個終端會話。用戶可以在一個窗口中分割多個面板、創建多個窗口、以及在不同會話之間切換。更重要的是,它可以在會話分離后繼續運行任務,并在會話重新連接時恢復原來的狀態(正如我們在開篇中的視頻里展現的那樣)。這使得它非常適合需要同時處理多個任務和長時間運行任務的用戶。
配置遠程終端服務
rt-smart 已經支持基于 Dropbear 的SSH 服務器,從而可以使用主機電腦用SSH遠程登錄來使用板端Smart操作系統。
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-smart/introduction/rt-smart-experiences/rt-smart-experiences?id=%e6%8a%a2%e5%85%88%e9%a2%84%e8%a7%88
smart上手體驗 (rt-thread.org)
從以上鏈接可以獲取 smart-prebuild預構建鏡像。使用 prebuilt 版本啟動系統后,可以在 /etc/inittab中看到如下內容:
其中含有dropbear的啟動命令/bin/dropbear -F 2>/root/dropbear.log,故系統啟動時自動啟動dropbear ssh服務器。qemu啟動腳本則將qemu的22號端口映射到主機58080端口。
新建Tmux 會話與脫離
第一個啟動的 Tmux 窗口,編號是0,第二個窗口的編號是1,以此類推。這些窗口對應的會話,就是 0 號會話、1 號會話。當然,使用編號區分會話不太直觀。因此我們也可以為會話起名,便于記憶。
tmux new-s
使用上面的命令就可以創建一個指定名稱的會話。下圖展示了這個命令的使用。在創建會話后,我們可以如同普通 shell 那樣在tmux 中執行命令。
此外,在執行腳本的過程中,按下Ctrl+b d或者輸入tmux detach -t /命令,就會將當前會話與窗口分離。但是會話和里面的進程仍然在后臺運行。使用結果如同上圖最后操作的那樣,我們會看到 tmux 打印 “detached (from session test)”。同時,終端回到 shell 程序控制。
連接先前創建的 Tmux 會話
tmux attach -t
我們使用上面的命令接入先前創建的會話。這時終端回到原有的會話現場。這給我們檢查之前創建的管道狀態提供了巨大便利。
下圖展示了會話創建后脫離并重新連接的過程:
我們先使用tmux new-s hello 命令創建了一個名為hello的會話,接著使用Ctrl+b d 組合鍵將當前會話與窗口分離,接著又使用tmux attach -t hello接入hello會話現場。這時我們可以看到腳本仍在正常執行。
tmux switch -t /
此外,當我們創建了多個會話時,可以通過tmux switch 來切換不同的會話。這里以hello 為例子。
上圖中可以看到成功切換到hello,里面的進程仍在運行
tmux rename-session -t /
此外,我們還可以通過命令重命名已經創建的會話。
對于不想要的會話也可以通過tmux kill-session -t /來結束掉。當會話結束后,我們使用 tmux ls 命令就看不到 test2 會話了,并且也不能用attach再進行連接。
Tmux 窗格管理
Tmux 可以將窗口分成多個窗格(pane),每個窗格運行不同的命令。以下命令都是在 Tmux 窗口中執行。
●使用tmux split-window可以劃分上下兩個窗格,tmux split-window -h可以劃分為左右兩個窗格。
●窗格劃分后,可以通過tmux select-pane -U/D/L/R 命令移動光標位置,或者使用快捷鍵 ctrl+b 。
下面是窗格管理的快捷鍵使用大全:
Ctrl+b %:劃分左右兩個窗格。
Ctrl+b ":劃分上下兩個窗格。
Ctrl+b :光標切換到其他窗格。是指向要切換到的窗格的方向鍵,比如切換到下方窗格,就按方向鍵↓。
Ctrl+b ;:光標切換到上一個窗格。
Ctrl+b o:光標切換到下一個窗格。
Ctrl+b {:當前窗格與上一個窗格交換位置。
Ctrl+b }:當前窗格與下一個窗格交換位置。
Ctrl+b Ctrl+o:所有窗格向前移動一個位置,第一個窗格變成最后一個窗格。
Ctrl+b Alt+o:所有窗格向后移動一個位置,最后一個窗格變成第一個窗格。
Ctrl+b x:關閉當前窗格。
Ctrl+b !:將當前窗格拆分為一個獨立窗口。
Ctrl+b z:當前窗格全屏顯示,再使用一次會變回原來大小。
Ctrl+b Ctrl+:按箭頭方向調整窗格大小。
Ctrl+b q:顯示窗格編號。`在這里插入代碼片`
下面展示使用快捷鍵分割窗口和切換光標位置的過程:
Tmux 窗口管理
除了將一個窗口劃分成多個窗格,Tmux 也允許新建多個窗口。我們可以使用 tmuxnew-window命令創建新窗口,通過tmux select-window -t 命令用來切換窗口,通過tmux rename-window命令用于為當前窗口起名(或重命名)。
這些命令同樣有快捷鍵替代:
Ctrl+b c:創建一個新窗口,狀態欄會顯示多個窗口的信息。
Ctrl+b p:切換到上一個窗口(按照狀態欄上的順序)。
Ctrl+b n:切換到下一個窗口。
Ctrl+b :切換到指定編號的窗口,其中的是狀態欄上的窗口編號。
Ctrl+b w:從列表中選擇窗口。
Ctrl+b ,:窗口重命名。
使用快捷鍵進行窗口的創建,切換,重命名過程如下:
同樣如果想要關閉某個窗格可以使用Ctrl+b x組合命令,這里不再演示
tmux 中使用 scp 實現安全文件傳輸
RTT內核用作ssh服務器,我們就可以通過scp來向其傳輸文件。以通過終端工具傳輸 mksd 腳本為例。我們首先配置好 RT-Smart 服務器的地址和用戶名,密碼。然后可以直接拖動客戶端操作系統上的文件到左側文件系統視窗中。此時會自動建立 scp 進程完成文件拷貝。
在 Tmux 背后是……
Tmux 的這些強大功能依賴于操作系統的幾個核心機制。首先是會話和進程組,Tmux 利用這些機制來管理和組織不同的終端會話和進程。每個 Tmux 會話可以包含多個窗口,而每個窗口又可以包含多個進程,這些進程被組織成進程組,以便統一管理。
其次,終端和偽終端是 tmux 實現多窗口和分割面板的基礎。偽終端提供了一個虛擬終端設備,使得用戶可以創建和管理多個虛擬終端,這些終端可以獨立運行并顯示各自的輸出。
此外,Tmux 是一個基于前后端架構的應用。前端負責用戶輸入和顯示輸出,而后端負責實際的任務管理和執行。前后端通信及異步事件處理也依賴于 libevent 庫。libevent 是一個輕量級的事件驅動編程庫,它基于 Unix 域套接字(UDS)、netlink 等基礎設施,為進程間雙工通信、多播和內核異步事件通知提供了高效的實現。這使得 tmux 能夠在需要處理大量并發事件時,依然保持高效、穩定的運行。
信號處理也是 tmux 功能的關鍵部分。Tmux 可以在會話分離和重新連接時通過內核提供的 SIGCONT、SIGSTOP 等POSIX 作業控制信號正確地管理和恢復進程狀態,確保任務能夠持續運行而不受干擾
上圖總結了 Tmux 在 RT-Thread Smart 的運行環境中的各類軟硬件組件。它們保證了 RT-Thread Smart在多個方面為程序應用提供了便利和靈活。無論是進程間通信、與內核進行信息交換、還是通過netlink 處理異步事件,抑或是通過偽終端與終端仿真器進行交互,用戶程序都能夠更加輕松地操作系統,提高工作效率。RT-Smart 系統提供的豐富系統組件為嵌入式開發帶來了更多可能性,讓我們在這個快速發展的技術世界中走得更快、更遠。
結語
本文我們介紹了 RT-Thread Smart 系統在支持復雜應用方面的強大能力。從多窗口終端管理的 tmux 到遠程登錄的 SSH,RT-Thread Smart 展現了其在嵌入式開發中的靈活性和高效性。
希望通過本文,能夠讓更多的開發者了解并使用 RT-Thread Smart,在這個充滿活力的平臺上實現更多精彩的應用。讓我們一起期待,在未來的嵌入式開發旅程中,RT-Thread Smart 將繼續為我們帶來更多驚喜和便利。
-
操作系統
+關注
關注
37文章
6491瀏覽量
122597 -
終端
+關注
關注
1文章
1060瀏覽量
29695 -
RT-Thread
+關注
關注
31文章
1225瀏覽量
39223
發布評論請先 登錄
相關推薦
評論