大伟 · 2020年01月11日

[TF-M]容器内的TF-M进阶-Windows下共享文件夹

通过使用容器部署TF-M开发环境这篇文章,大家了解了如何使用Docker的容器技术快速部署TF-M开发环境。
在Windows下,与容器共享本地驱动器,可以Windows下查看编辑源码,容器下编译,Windows下直接使用编译出的文件。这种开发模型对使用者非常方便。
本文着重介绍下在Windows下,如何配置共享文件夹

前期准备和系统要求

Windows 10 x64 (其他版本未测试)
请按照上面的链接在Windows下安装Docker Desktop。
请确保有在Windows上有管理员权限并且可以创建本地账户。
本文演示以本地驱动器F(网络映射驱动器未测试,理论上是一样的)为例,通过本地用户docker-share的权限来与容器实现共享。

在Docker Desktop中设置需要共享的驱动器

Docker在Windows下共享文件夹,首先需要在Docker Desktop中设置需要共享的驱动器。目前没法以文件夹为粒度共享,但是可以在启动容器的时候,只mount某个目录来共享,不必整个驱动器mount到容器中。

右键点击系统托盘中的Docker Desktop图标,然后选择Settings
setting.png

在弹出来的设置页面中,选择Shared Drives
shared-drives.png
然后勾选需要share的驱动器F。
第一次勾选时,会提示你输入Windows用户名和密码。

给Docker共享创建Windows本地用户

建议不要使用公司域账户或者Microsoft账号去共享驱动器。我们可以给Docker创建一个本地用户专门用来共享文件。这样后续也方便账号管理。比如在卸载Docker或者不要共享文件之后,可以直接删除这个本地帐号。

点击系统托盘右下角的设置和通知按钮,弹出界面
all-setting.png

选择所有设置,然后选择账户
account.png

选择家庭和其他用户
other-account.png

其他用户栏目下点击将其他人添加到这台电脑
add-user.png

在弹出的对话框中,选择我没有这个人的登录信息
no-info.png

下一步后,选择添加一个没有Microsoft账户的用户
add-local.png

下一步后,填写用户名和密码,这里以docker-share用户名为例:
add-local-pw.png

下一步之后,就创建好了给Docker用来共享文件的本地用户了。

继续在Docker Desktop设置中共享驱动器

继续前面一个章节的内容,在勾选共享驱动器F之后,在弹出的用户名密码框中,填写上面创建的docker-share的信息。

然后所有设置就完成了!

使用共享目录启动容器

通过-v命令行参数,可以实现本地文件夹(必须在刚才共享的驱动器内)mount到容器里面的目录。
下面以本地文件夹f:\docker-share\tfm mount到容器内/my-tfm目录为例。启动命令行在原有的基础上增加-v f:/docker-share/tfm:/my-tfm
完整命令:
docker run --name tfm-share -i --tty -v f:/docker-share/tfm:/my-tfm davidwang2015/tfm-env:TF-Mv1.0-RC3

启动后,容器内的/my-tfm文件夹就是本地文件夹f:\docker-share\tfm的内容,可以直接在里面编译源码。

更简一步:非交互式启动容器,只编译

前面都是以交互方式启动(--interactive或-i),然后在容器内的命令行手动编译。
其实容器启动可以只执行编译命令,因为我们现在的查看编辑都是在本机的共享目录下完成。
直接编译的命令行(容器完成后会自动clean)
docker run --rm -v f:/docker-share/tfm:/my-tfm davidwang2015/tfm-env:TF-Mv1.0-RC3 bash -c "cd my-tfm/trusted-firmware-m/build;cmake --build ./ -- install -j8"

--rm:运行后自动clean up,容器会自动被删除,不占用系统资源
bash -c后面跟需要运行的命令脚本。这里以进入my-tfm/trusted-firmware-m/build目录编译为例。可以自行添加需要的bash命令。或者写一个bash脚本(注:如果直接docker run一个脚本,因为系统不会自动执行环境变量配置,所以需要在脚本中手动添加编译器的路径到PATH)在tfm的目录下,docker run时直接运行该脚本。

值得一提的是,这种方式编译tfm,我们仍然可以在当前启动容器的Shell窗口(比如Windows command line or Powershell)中看到编译的信息,如同进入容器中手动编译一样。方便定位编译错误。

使用容器,可以使开发和测试过程更加方便高效和智能。大家如果感兴趣,后面可以介绍使用容器自动化测试tfm。

推荐阅读
关注数
4570
内容数
191
Arm发布的PSA旨在为物联网安全提供一套全面的安全指导方针,使从芯片制造商到设备开发商等价值链中的每位成员都能成功实现安全运行。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息