基于RT-Thread和RA6M4实现samba服务移动网盘

【基于rt-thread和ra6m4实现samba服务的移动网盘】
本文详细介绍了基于rt-thread操作系统和ra6m4处理器,如何移植和适配samba服务。同时,还提供linux环境和qemu仿真环境的参考移植,希望对大家有所启发和帮助。
1 前言 本文重点介绍了基于rt-thread和ra6m4实现samba服务的移动网盘,包括rt-thread操作系统的使用情况、硬件载体ra6m4处理器、samba服务的适配移植等核心内容。
关于samba服务,使用linux系统作为开发环境的小伙伴一定非常熟悉,它是linux操作系统中的文件系统与windows操作系统的文件系统沟通的重要桥梁。更多关于它的更多介绍,可以详见 samba 。
2 项目简介 2.1 项目名称 基于rt-thread和ra6m4实现samba服务的移动网盘
2.2 设计思路 基于rt-thread操作系统,使用ra6m4硬件载体实现samba服务器的功能,把文件通过 samba 协议共享出去。
2.3 主要解决的问题 在使用场景上,这个嵌入式移动网盘的投入使用,可以满足一定程度上解决云主机快速免费存储空间扩容的难题,且数据本地可控。
2.4 项目创新点 samba服务在小型rtos设备上的移植和使用。
3 系统架构介绍 系统核心架构图如下图所示:
一言以蔽之:windows系统通过samba协议访问搭载rt-thread操作系统的ra6m4实现的smdb服务 。
4 系统设计说明 下面就系统的各个组件的设计,做简要的说明。
4.1 硬件部分 硬件部分主要分为四大部分:mcu主控、wi-fi模组。
wi-fi模组 : esp8266
我这里使用的搭建esp8266 wi-fi芯片的模组esp-12f,它是由安信可科技开发的,该模块核心处理器 esp8266 在较小尺寸封装中集成了 业界领先的 tensilica l106 超低功耗 32 位微型 mcu,带有 16 位精简模式,主频支持 80 mhz 和 160 mhz,支持 rtos,集成 wi-fi mac/ bb/rf/pa/lna,板载天线。
mcu主控 :ra6m4
4.2 软件部分 应用逻辑部分
应用逻辑部分,比较简单,基本就是初始化系统、初始化wi-fi网络,初始化文件系统、初始化smbd的配置文件,以及启动smbd服务器,并处于监听状态,等待客户端来连接。
samba服务部分
本次移植samba源码,考虑到嵌入式设备的rom/ram比较紧张,特意找了很老的samba源码,最终的实现也证实了这一点,太新的版本压根不够资源去移植,且它依赖了大量linux原生的接口,根本无从适配。
经过简单验证和挑选,我选的是 smaba-1.9.13,这个版本大概是 1995年发布的,大家可以想象下:
更多samba的历史版本,可以查看 这里。
软件包部分
这里主要用了 at_device 软件包,并且使用它搭载 esp8266 wi-fi模块,建立server角色的网络服务。
在测试工程中,还使用了 ramdisk 这个软件包,但是使用过程中,发现了一些问题,后面没有再使用。
rt-thread内核部分
本项目使用了最新版本的rt-thread,由于本项目需要使用 at-server 的功能,而studio更新的 4.1.0 版本并没有很好地支持这个特性,后面在最新的代码仓库中看到了有关 at-server 的更新,于是手动更新到了最新的版本。
5 项目实施过程 主要实施过程如下所示:
5.1 项目预研 早期有做了一个 嵌入式移动网盘 的初步方案,不过当时是想自己实现协议,真正实现下来,难度可是非常大;不仅要自己设计协议,还要自己设计客户端、服务端,这期间的稳定性也没办法保证。
后来,我考虑到了使用 现在的samba协议做移植,但看了最新版本的smaba协议源码,感觉一般的嵌入式设备压根可能跑不起来,因为实现得太庞大了。
在这次项目前期,我想到会不会samba早期的实现包会比较轻量呢,也许能够在rtos上基于嵌入式设备把它跑起来?抱着试一试的态度,才有了这个项目。
5.2 方案设计 整体方案设计,延续上文有提及的系统架构示意图,整体上思路还是比较简单,核心工作就是完成samba协议基于rt-thread和ra6m4上的移植适配。
这个方案下,客户端(windows侧)都是现成的,并不存在障碍,但是要保证实现的smbd服务能兼容windows10的samba挂载请求。
5.3 方案移植 真正做方案移植的时候,我分三步走,每一步的输出都是后一步输入的重要前提:
第一步:检索可用的samba源码版本,使用原生的linux系统快速验证
这一部分,重点是要快速验证可行性,并且只能是源码编译那种移植,不能用软件包,期间我总共下载了近 20 个版本,最终选定使用 1.9.13 版本,理由是它使用了smb2协议版本,同时,它的源码结构是一开始的简单版本模式的最后一个版本,后面的版本源码目录就变得复杂了,层次关系比较乱。
第二步:使用qemu-vexpress-a9做基于rt-thread操作系统的移植适配
单在linux上跑通了并不稀奇,也不见得就一定能在rt-thread系统上跑通,所以为了尽快验证在rt-thread跑通的可能性,我选用qemu-vexpress-a9做仿真验证,解决一些接口移植的问题,同时还要调通smbd跑起来后,对windows10的samba请求的兼容。
幸运地是,在qemu上移植还是比较顺利的,我把一些操作系统没有实现的接口玻璃出来,同时一些rtt无法支持的特性就使用宏定义屏蔽,只要不影响核心逻辑功能即可。
另外一个,使用qemu模拟器,使用使用 网卡桥接或网卡共享 使得windows可以链接qemu建立的服务器,这个课题也在这部分的移植中有所收获,以后有时间可以写篇教程介绍介绍。
第三步:将qemu模拟器跑通的源码移植到ra6m4上
最后一步才是真正的上战场,这里就需要先熟悉ra6m4的开发环境,工程模板的主题框架等等。
随后才慢慢开始移植esp8266的接入,samba源码的接入,下载调试等等。
这期间也遇到了一个很坑的的事,在接入esp8266的时候,不知参考了论坛哪篇文章,它展示的uart3的引脚号是错误的,结果把我误导了,导致esp8266死活不成功。
后面还是自己翻手册,找到了配置引脚的地方,终于把wi-fi模块搞定了,真的是 尽信书,不如无书 !
5.4 方案调试 方案调试,一个是把esp8266接入进来,让ra6m4具备对外的网络能力;另一个就是把samba服务在ra6m4上给跑起来。不过这说起来,真的就是一把鼻涕,一把累。后面的项目总结会祥讲,每一个成功的项目背后一定少不了困难。
5.5 方案优化 后续提升下ra6m4的server网络模式的稳定性、将文件系统挂载在flash上的可能性,同时实现samba服务中对用户名和密码的校验。
6 项目效果显示 相关的展示图片和演示视频,见下文:
【项目展示图片】
【项目演示视频】点击 这里 播放。
【项目开源代码】
repo: rt-threadra6m4samba
分支名 主要内容
rt_thread-ra6m4-samba 基于rt-thread操作系统及ra6m4适配移植,实现smbd服务
rt_thread-qemu-vexpress-a9-samba 基于rt-thread操作系统及qemu-vexpress-a9模拟器环境适配移植,实现smbd服务
linuxx64samba 基于原生的linux操作系统在x64服务器源码移植适配,实现smbd服务
7 项目复盘 ra6m4的下载真的太慢了,下载的过程都可以打个瞌睡了,比较影响调试。
samba 源码的移植过程中,遇到很多linux原生对文件系统权限管理的接口或内容,考虑到rtt这边实现的文件系统肯定没有相关的,所以裁掉了很多关于这方面的校验。同时,实现的samba目前还是guest模式,即不检验用户名和密码,后续可以再改进改进。
在我的这个项目中,说实话 ra6m4 这个使用起来还是比较 吃力,主要由两个方面:
1)这个项目强烈依赖网络,而本身资源环境并不带网络适配器,只能使用类似esp8266这种外设网卡,而且是at模式,加上rtt中的 at-server 并不稳定好用,所以前期我这里摸索困惑了好久好久,一度有放弃的念头;
2)这个项目强烈依赖文件系统,而ra6m4的例程里,对文件系统这一块也暂时未看到好的适配例程,只能自己去玩;所以为了加快方案的验证,我采用了 ramfs 用内存去仿真文件系统,一定程度上解决了一些问题;但是偏偏ramfs又不支持创建目录,经过搜索软件包,得知ramdisk这个软件包可以解决这个问题。结果使用后,挂载是挂载上了,也可以创建目录,但是/tmp目录下一堆的莫名文件,每个文件几百mb,也可能是一些配置搞错了,但是挂载出来的文件系统有问题;最后还是放弃了ramdisk。
综上两个最大的需求,都没有很好的解决方案,所以最终在ra6m4上实现的并不是很稳定。
类似的,同样的samba源码,在qemu-vexpress-a9上,跑得非常优秀,非常稳定,这个真就比不了。
rtt中实现 at-server 的可参考例程很少,在论坛里也发现好几个朋友有类似的困惑:第一个是如何使用,第二个是稳定性如何。后续有时间我再总结总结我使用这个 at-server 的一些经验。
搞了几个项目了,rt-thread studio还是用不惯,可能一直以来开发我都习惯了远离这种集成式的编程ide,移植倾向于类似sublime这种轻量级的编辑工具,它只负责编辑,构建编译还是使用其他的方式进行。我总是觉得这样收放更加自如,现在使用studio,有些时候总觉得缩手缩脚的,可能真的是使用不够熟吧。
8 致谢 感谢论坛各路大佬的支持,感谢瑞赛和rt-thread的大力支持,期待后续有更多这样的优秀活动开放。
9 更多分享 架构师李肯
架构师李肯(全网同名),一个专注于嵌入式iot领域的架构师。有着近10年的嵌入式一线开发经验,深耕iot领域多年,熟知iot领域的业务发展,深度掌握iot领域的相关技术栈,包括但不限于主流rtos内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、主流iot云平台的对接、嵌入式iot系统的架构设计等等。拥有多项iot领域的发明专利,热衷于技术分享,有多年撰写技术博客的经验积累,连续多月获得rt-thread官方技术社区原创技术博文优秀奖,荣获csdn博客专家、csdn物联网领域优质创作者、2021年度csdn&rt-thread技术社区之星、2022年rt-thread全球技术大会讲师、rt-thread官方嵌入式开源社区认证专家、rt-thread 2021年度论坛之星top4、华为云云享专家(嵌入式物联网架构设计师)等荣誉。坚信【知识改变命运,技术改变世界】!
欢迎关注我的gitee仓库01workstation ,日常分享一些开发笔记和项目实战,欢迎指正问题。
同时也非常欢迎关注我的csdn主页和专栏:
【csdn主页-架构师李肯】
【rt-thread主页-架构师李肯】
【c/c++语言编程专栏】
【gcc专栏】
【信息安全专栏】
【rt-thread开发笔记】
【freertos开发笔记】
有问题的话,可以跟我讨论,知无不答,谢谢大家。


微软最担忧的8大威胁
周大福Y时代携懒人听书联合打造的线下体验店正式启幕
条件语句/循环语句simulink的实现方法(一)
什么是Zigbee网关
16x16LED汉字显示电路的原理、组成及设计分析
基于RT-Thread和RA6M4实现samba服务移动网盘
半导体制冷片不需要制冷剂实现制冷的原因分析
友达光电将投30亿美元在昆山建7.5代面板线
浙江大学光电学院两位同学成功斩获竺可桢奖学金
人机交互:可现实文字信息的隐形眼睛
莱特波特Wi-Fi设备量产测试市占率达70% 满足移动产品量产需求
黑科技!三星S8将采用索尼IMX333传感器:可拍1000fps慢动作
基于MAXQ3212构建遥控钥匙
基于神经网络的微波均衡器建模与仿真
HPC SIG致力openEuler上的高性能计算软件生态
阿联酋ETISALAT携手华为完成中东首个网络数字地图验证,开启IPv6+自智网络之路
富士通半导体发布下一代单芯片收发器MB86L11A
极光大数据发布互联网行业数据研究报告 电商行业呈现上升趋势
关于我国工业应用移动机器人各应用市场浅析
运用AR增强现实和三维建模技术打造的AR线上展示技术