【基于RT-Thread和RA6M4實(shí)現(xiàn)samba服務(wù)的移動網(wǎng)盤】
本文詳細(xì)介紹了基于RT-Thread操作系統(tǒng)和RA6M4處理器,如何移植和適配samba服務(wù)。同時(shí),還提供Linux環(huán)境和QEMU仿真環(huán)境的參考移植,希望對大家有所啟發(fā)和幫助。
1 前言
本文重點(diǎn)介紹了基于RT-Thread和RA6M4實(shí)現(xiàn)samba服務(wù)的移動網(wǎng)盤,包括RT-Thread操作系統(tǒng)的使用情況、硬件載體RA6M4處理器、Samba服務(wù)的適配移植等核心內(nèi)容。
關(guān)于Samba服務(wù),使用Linux系統(tǒng)作為開發(fā)環(huán)境的小伙伴一定非常熟悉,它是Linux操作系統(tǒng)中的文件系統(tǒng)與Windows操作系統(tǒng)的文件系統(tǒng)溝通的重要橋梁。更多關(guān)于它的更多介紹,可以詳見 Samba 。
2 項(xiàng)目簡介
2.1 項(xiàng)目名稱
基于RT-Thread和RA6M4實(shí)現(xiàn)samba服務(wù)的移動網(wǎng)盤
2.2 設(shè)計(jì)思路
基于RT-Thread操作系統(tǒng),使用RA6M4硬件載體實(shí)現(xiàn)samba服務(wù)器的功能,把文件通過 samba 協(xié)議共享出去。
2.3 主要解決的問題
在使用場景上,這個(gè)嵌入式移動網(wǎng)盤的投入使用,可以滿足一定程度上解決云主機(jī)快速免費(fèi)存儲空間擴(kuò)容的難題,且數(shù)據(jù)本地可控。
2.4 項(xiàng)目創(chuàng)新點(diǎn)
samba服務(wù)在小型RTOS設(shè)備上的移植和使用。
3 系統(tǒng)架構(gòu)介紹
系統(tǒng)核心架構(gòu)圖如下圖所示:
一言以蔽之:Windows系統(tǒng)通過samba協(xié)議訪問搭載RT-Thread操作系統(tǒng)的RA6M4實(shí)現(xiàn)的smdb服務(wù) 。
4 系統(tǒng)設(shè)計(jì)說明
下面就系統(tǒng)的各個(gè)組件的設(shè)計(jì),做簡要的說明。
4.1 硬件部分
Wi-Fi模組 : ESP8266
我這里使用的搭建ESP8266 Wi-Fi芯片的模組ESP-12F,它是由安信可科技開發(fā)的,該模塊核心處理器 ESP8266 在較小尺寸封裝中集成了 業(yè)界領(lǐng)先的 Tensilica L106 超低功耗 32 位微型 MCU,帶有 16 位精簡模式,主頻支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ BB/RF/PA/LNA,板載天線。
MCU主控 :RA6M4
4.2 軟件部分
應(yīng)用邏輯部分
應(yīng)用邏輯部分,比較簡單,基本就是初始化系統(tǒng)、初始化Wi-Fi網(wǎng)絡(luò),初始化文件系統(tǒng)、初始化smbd的配置文件,以及啟動smbd服務(wù)器,并處于監(jiān)聽狀態(tài),等待客戶端來連接。
samba服務(wù)部分
本次移植samba源碼,考慮到嵌入式設(shè)備的ROM/RAM比較緊張,特意找了很老的samba源碼,最終的實(shí)現(xiàn)也證實(shí)了這一點(diǎn),太新的版本壓根不夠資源去移植,且它依賴了大量Linux原生的接口,根本無從適配。
經(jīng)過簡單驗(yàn)證和挑選,我選的是 smaba-1.9.13,這個(gè)版本大概是 1995年發(fā)布的,大家可以想象下:
更多samba的歷史版本,可以查看 這里。
軟件包部分
這里主要用了 at_device 軟件包,并且使用它搭載 ESP8266 Wi-Fi模塊,建立server角色的網(wǎng)絡(luò)服務(wù)。
在測試工程中,還使用了 ramdisk 這個(gè)軟件包,但是使用過程中,發(fā)現(xiàn)了一些問題,后面沒有再使用。
RT-Thread內(nèi)核部分
本項(xiàng)目使用了最新版本的RT-Thread,由于本項(xiàng)目需要使用 at-server 的功能,而Studio更新的 4.1.0 版本并沒有很好地支持這個(gè)特性,后面在最新的代碼倉庫中看到了有關(guān) at-server 的更新,于是手動更新到了最新的版本。
5 項(xiàng)目實(shí)施過程
主要實(shí)施過程如下所示:
5.1 項(xiàng)目預(yù)研
早期有做了一個(gè) 嵌入式移動網(wǎng)盤 的初步方案,不過當(dāng)時(shí)是想自己實(shí)現(xiàn)協(xié)議,真正實(shí)現(xiàn)下來,難度可是非常大;不僅要自己設(shè)計(jì)協(xié)議,還要自己設(shè)計(jì)客戶端、服務(wù)端,這期間的穩(wěn)定性也沒辦法保證。
后來,我考慮到了使用 現(xiàn)在的samba協(xié)議做移植,但看了最新版本的smaba協(xié)議源碼,感覺一般的嵌入式設(shè)備壓根可能跑不起來,因?yàn)閷?shí)現(xiàn)得太龐大了。
在這次項(xiàng)目前期,我想到會不會samba早期的實(shí)現(xiàn)包會比較輕量呢,也許能夠在RTOS上基于嵌入式設(shè)備把它跑起來?抱著試一試的態(tài)度,才有了這個(gè)項(xiàng)目。
5.2 方案設(shè)計(jì)
整體方案設(shè)計(jì),延續(xù)上文有提及的系統(tǒng)架構(gòu)示意圖,整體上思路還是比較簡單,核心工作就是完成samba協(xié)議基于RT-Thread和RA6M4上的移植適配。
這個(gè)方案下,客戶端(Windows側(cè))都是現(xiàn)成的,并不存在障礙,但是要保證實(shí)現(xiàn)的smbd服務(wù)能兼容Windows10的samba掛載請求。
5.3 方案移植
真正做方案移植的時(shí)候,我分三步走,每一步的輸出都是后一步輸入的重要前提:
第一步:檢索可用的samba源碼版本,使用原生的Linux系統(tǒng)快速驗(yàn)證
這一部分,重點(diǎn)是要快速驗(yàn)證可行性,并且只能是源碼編譯那種移植,不能用軟件包,期間我總共下載了近 20 個(gè)版本,最終選定使用 1.9.13 版本,理由是它使用了SMB2協(xié)議版本,同時(shí),它的源碼結(jié)構(gòu)是一開始的簡單版本模式的最后一個(gè)版本,后面的版本源碼目錄就變得復(fù)雜了,層次關(guān)系比較亂。
第二步:使用Qemu-vexpress-A9做基于RT-Thread操作系統(tǒng)的移植適配
單在Linux上跑通了并不稀奇,也不見得就一定能在RT-Thread系統(tǒng)上跑通,所以為了盡快驗(yàn)證在RT-Thread跑通的可能性,我選用Qemu-vexpress-A9做仿真驗(yàn)證,解決一些接口移植的問題,同時(shí)還要調(diào)通smbd跑起來后,對Windows10的samba請求的兼容。
幸運(yùn)地是,在Qemu上移植還是比較順利的,我把一些操作系統(tǒng)沒有實(shí)現(xiàn)的接口玻璃出來,同時(shí)一些RTT無法支持的特性就使用宏定義屏蔽,只要不影響核心邏輯功能即可。
另外一個(gè),使用QEMU模擬器,使用使用 網(wǎng)卡橋接或網(wǎng)卡共享 使得windows可以鏈接QEMU建立的服務(wù)器,這個(gè)課題也在這部分的移植中有所收獲,以后有時(shí)間可以寫篇教程介紹介紹。
第三步:將Qemu模擬器跑通的源碼移植到RA6M4上
最后一步才是真正的上戰(zhàn)場,這里就需要先熟悉RA6M4的開發(fā)環(huán)境,工程模板的主題框架等等。
隨后才慢慢開始移植ESP8266的接入,samba源碼的接入,下載調(diào)試等等。
這期間也遇到了一個(gè)很坑的的事,在接入ESP8266的時(shí)候,不知參考了論壇哪篇文章,它展示的UART3的引腳號是錯(cuò)誤的,結(jié)果把我誤導(dǎo)了,導(dǎo)致ESP8266死活不成功。
后面還是自己翻手冊,找到了配置引腳的地方,終于把Wi-Fi模塊搞定了,真的是 盡信書,不如無書 !
5.4 方案調(diào)試
方案調(diào)試,一個(gè)是把ESP8266接入進(jìn)來,讓RA6M4具備對外的網(wǎng)絡(luò)能力;另一個(gè)就是把samba服務(wù)在RA6M4上給跑起來。不過這說起來,真的就是一把鼻涕,一把累。后面的項(xiàng)目總結(jié)會祥講,每一個(gè)成功的項(xiàng)目背后一定少不了困難。
5.5 方案優(yōu)化
后續(xù)提升下RA6M4的server網(wǎng)絡(luò)模式的穩(wěn)定性、將文件系統(tǒng)掛載在flash上的可能性,同時(shí)實(shí)現(xiàn)samba服務(wù)中對用戶名和密碼的校驗(yàn)。
6 項(xiàng)目效果顯示
相關(guān)的展示圖片和演示視頻,見下文:
【項(xiàng)目展示圖片】
【項(xiàng)目演示視頻】點(diǎn)擊 這里 播放。
【項(xiàng)目開源代碼】
REPO: RT-ThreadRA6M4Samba
分支名 | 主要內(nèi)容 |
---|---|
rt_thread-ra6m4-samba | 基于RT-Thread操作系統(tǒng)及RA6M4適配移植,實(shí)現(xiàn)smbd服務(wù) |
rt_thread-qemu-vexpress-a9-samba | 基于RT-Thread操作系統(tǒng)及QEMU-VEXPRESS-A9模擬器環(huán)境適配移植,實(shí)現(xiàn)smbd服務(wù) |
linuxx64samba | 基于原生的Linux操作系統(tǒng)在X64服務(wù)器源碼移植適配,實(shí)現(xiàn)smbd服務(wù) |
7 項(xiàng)目復(fù)盤
RA6M4的下載真的太慢了,下載的過程都可以打個(gè)瞌睡了,比較影響調(diào)試。
samba 源碼的移植過程中,遇到很多Linux原生對文件系統(tǒng)權(quán)限管理的接口或內(nèi)容,考慮到RTT這邊實(shí)現(xiàn)的文件系統(tǒng)肯定沒有相關(guān)的,所以裁掉了很多關(guān)于這方面的校驗(yàn)。同時(shí),實(shí)現(xiàn)的samba目前還是guest模式,即不檢驗(yàn)用戶名和密碼,后續(xù)可以再改進(jìn)改進(jìn)。
在我的這個(gè)項(xiàng)目中,說實(shí)話 RA6M4 這個(gè)使用起來還是比較 吃力,主要由兩個(gè)方面:
1)這個(gè)項(xiàng)目強(qiáng)烈依賴網(wǎng)絡(luò),而本身資源環(huán)境并不帶網(wǎng)絡(luò)適配器,只能使用類似ESP8266這種外設(shè)網(wǎng)卡,而且是AT模式,加上RTT中的 at-server "并不穩(wěn)定好用",所以前期我這里摸索困惑了好久好久,一度有放棄的念頭;
2)這個(gè)項(xiàng)目強(qiáng)烈依賴文件系統(tǒng),而RA6M4的例程里,對文件系統(tǒng)這一塊也暫時(shí)未看到好的適配例程,只能自己去玩;所以為了加快方案的驗(yàn)證,我采用了 ramfs 用內(nèi)存去仿真文件系統(tǒng),一定程度上解決了一些問題;但是偏偏ramfs又不支持創(chuàng)建目錄,經(jīng)過搜索軟件包,得知ramdisk這個(gè)軟件包可以解決這個(gè)問題。結(jié)果使用后,掛載是掛載上了,也可以創(chuàng)建目錄,但是/tmp目錄下一堆的莫名文件,每個(gè)文件幾百M(fèi)B,也可能是一些配置搞錯(cuò)了,但是掛載出來的文件系統(tǒng)有問題;最后還是放棄了ramdisk。
綜上兩個(gè)最大的需求,都沒有很好的解決方案,所以最終在RA6M4上實(shí)現(xiàn)的并不是很穩(wěn)定。
類似的,同樣的samba源碼,在QEMU-VEXPRESS-A9上,跑得非常優(yōu)秀,非常穩(wěn)定,這個(gè)真就比不了。
RTT中實(shí)現(xiàn) at-server 的可參考例程很少,在論壇里也發(fā)現(xiàn)好幾個(gè)朋友有類似的困惑:第一個(gè)是如何使用,第二個(gè)是穩(wěn)定性如何。后續(xù)有時(shí)間我再總結(jié)總結(jié)我使用這個(gè) at-server 的一些經(jīng)驗(yàn)。
搞了幾個(gè)項(xiàng)目了,RT-Thread Studio還是用不慣,可能一直以來開發(fā)我都習(xí)慣了遠(yuǎn)離這種集成式的編程IDE,移植傾向于類似sublime這種輕量級的編輯工具,它只負(fù)責(zé)編輯,構(gòu)建編譯還是使用其他的方式進(jìn)行。我總是覺得這樣收放更加自如,現(xiàn)在使用Studio,有些時(shí)候總覺得縮手縮腳的,可能真的是使用不夠熟吧。
8 致謝
感謝論壇各路大佬的支持,感謝瑞賽和RT-Thread的大力支持,期待后續(xù)有更多這樣的優(yōu)秀活動開放。
9 更多分享
架構(gòu)師李肯
架構(gòu)師李肯(全網(wǎng)同名),一個(gè)專注于嵌入式IoT領(lǐng)域的架構(gòu)師。有著近10年的嵌入式一線開發(fā)經(jīng)驗(yàn),深耕IoT領(lǐng)域多年,熟知IoT領(lǐng)域的業(yè)務(wù)發(fā)展,深度掌握IoT領(lǐng)域的相關(guān)技術(shù)棧,包括但不限于主流RTOS內(nèi)核的實(shí)現(xiàn)及其移植、硬件驅(qū)動移植開發(fā)、網(wǎng)絡(luò)通訊協(xié)議開發(fā)、編譯構(gòu)建原理及其實(shí)現(xiàn)、底層匯編及編譯原理、編譯優(yōu)化及代碼重構(gòu)、主流IoT云平臺的對接、嵌入式IoT系統(tǒng)的架構(gòu)設(shè)計(jì)等等。擁有多項(xiàng)IoT領(lǐng)域的發(fā)明專利,熱衷于技術(shù)分享,有多年撰寫技術(shù)博客的經(jīng)驗(yàn)積累,連續(xù)多月獲得RT-Thread官方技術(shù)社區(qū)原創(chuàng)技術(shù)博文優(yōu)秀獎,榮獲CSDN博客專家、CSDN物聯(lián)網(wǎng)領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、2021年度CSDN&RT-Thread技術(shù)社區(qū)之星、2022年RT-Thread全球技術(shù)大會講師、RT-Thread官方嵌入式開源社區(qū)認(rèn)證專家、RT-Thread 2021年度論壇之星TOP4、華為云云享專家(嵌入式物聯(lián)網(wǎng)架構(gòu)設(shè)計(jì)師)等榮譽(yù)。堅(jiān)信【知識改變命運(yùn),技術(shù)改變世界】!
歡迎關(guān)注我的gitee倉庫01workstation ,日常分享一些開發(fā)筆記和項(xiàng)目實(shí)戰(zhàn),歡迎指正問題。
同時(shí)也非常歡迎關(guān)注我的CSDN主頁和專欄:
【CSDN主頁-架構(gòu)師李肯】
【RT-Thread主頁-架構(gòu)師李肯】
【C/C++語言編程專欄】
【GCC專欄】
【信息安全專欄】
【RT-Thread開發(fā)筆記】
【freeRTOS開發(fā)筆記】
有問題的話,可以跟我討論,知無不答,謝謝大家。
審核編輯:湯梓紅
-
Linux
+關(guān)注
關(guān)注
87文章
11232瀏覽量
208941 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6744瀏覽量
123198 -
Samba
+關(guān)注
關(guān)注
0文章
17瀏覽量
10336 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1273瀏覽量
39938 -
RA6M4
+關(guān)注
關(guān)注
0文章
51瀏覽量
430
發(fā)布評論請先 登錄
相關(guān)推薦
評論