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

RT-Thread實(shí)時操作系統(tǒng)安裝向?qū)?/a>
RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述

RT-Thread操作系統(tǒng)已經(jīng)成功部署至芯馳E3
RT-Thread操作系統(tǒng)的FreeRTOS兼容層
RT-Thread榮獲“最具影響力IoT操作系統(tǒng)獎”

新書發(fā)布——《實(shí)時操作系統(tǒng)應(yīng)用技術(shù):RT-Thread與ARM編程實(shí)踐》

RT-Thread操作系統(tǒng)應(yīng)用開發(fā)寒假師資培訓(xùn)

評論