为了不被开发主机限制,做到有网便能开发。购买了一年的阿里云服务器,实现嵌入式云开发。实现云编译是比较容易的,和在本地主机上一样,无非是服务器只能使用命令行界面;此次的目标是实现多平台云编译,环境互不影响和易保存是关键。docker容器具有沙箱特性,容器互不影响,所以将嵌入式平台开发环境安装在容器中,在容器中编译。
服务器配置 | 目标 |
---|---|
8核、16G内存、100G硬盘、ubuntu20.04 | 实现多平台云编译,云编辑 |
1、实现嵌入式多平台云编译
安装Docker环境
安装docker
sudo apt install docker.io
通过修改daemon配置文件/etc/docker/daemon.json来设置镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://c64zf1n6.mirror.aliyuncs.com"]
}
重启docker守护进程
systemctl daemon-reload
systemctl restart docker
制作编译容器
基于ubuntu镜像安装
docker run -it \
--name build \
--hostname build \
-p 5002:22 \
-v "/root/workspaces:/root/workspaces" \
ubuntu \
/bin/bash
设置容器名--name build
设置容器主机名--hostname build
设置挂载工作目录-v "/root/workspaces:/root/workspaces"
设置端口映射-p 5002:22
安装openssh-server
方便调试时远程登陆编译
apt install openssh-server
apt install vim
vim /etc/ssh/sshd_config
添加如下
PubkeyAuthentication yes #启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/pub_key #公钥文件路径(和上面生成的文件同)
PermitRootLogin yes #root能使用ssh登录
ClientAliveInterval 60 #参数数值是秒 , 是指超时时间
ClientAliveCountMax 3 #设置允许超时的次数
添加ssh公钥
vim /root/.ssh/pub_key
启动ssh服务
service ssh start
编译示例
进入编译容器
docker exec -it build /bin/bash
安装依赖,省略;编译,stm32mp157 kernel
2、实现云编辑
大多数嵌入式开发员使用sourceinsight分析大型工程源码,但在服务器上显然不能使用这种方式。所以寻找一种前后端分离的编辑器,这里使用code server,可以理解为网页板的vscode,后端运行在服务器,前端网页显示。前后端分离是下一代编辑器必备特性哈
code server
安装code server
这里直接使用Docker Hub上的镜像
拉取镜像
docker pull codercom/code-server
创建容器
docker run -it --name code-server -p 1234:8080 \
-v "/root/code_server/.config:/home/coder/.config" \
-v "/root/workspaces:/home/coder/project" \
-u "$(id -u):$(id -g)" \
-e "DOCKER_USER=$USER" \
-e "PASSWORD=*****" \
codercom/code-server
指定挂载目录-v "/root/workspaces:/home/coder/project"
,将主机的workspaces目录挂载到容器project目录
设置用户名-e "DOCKER_USER=$USER"
设置登陆密码-e "PASSWORD=*****"
登陆
如下图所示,编辑界面和vscode一致,快捷键也是相同的
修改chrome快捷方式,以APP形式启动
"chrome.exe" --app=http://139.224.30.179:1234/
注意!:如果出现鼠标侧键退出到登录,则运行多个,保留略过登录的,再关闭其他的(抽象的描述,自行体会)
安装clangd插件
为了使vscode具备和sourceinsight一样的代码跳转速度;这里使用clangd插件,速度飞快,同时更加精准
code-server自带应用商店包含的插件较少,可以在vscode插件下载网站下载搜索clangd下载安装,是兼容的
在settings.json文件配置插件,特性全开,所点即所得,无延迟
{
"clangd.arguments": [
"--background-index",
"--compile-commands-dir=${workspaceFolder}",
"-j=8",
"--all-scopes-completion",
"--completion-style=detailed",
"--header-insertion=iwyu",
"--pch-storage=memory",
"--cross-file-rename",
"--enable-config",
"--fallback-style=WebKit",
"--pretty",
"--clang-tidy"
],
"clangd.path": "clangd-11"
}
除此之外,clangd插件只用于显示,还得在code-server容器里安装clangd和bear
apt install clangd-11
apt install bear
clangd通过compile_commands.json文件解析代码,这个文件描述了编译信息;在make命令前加bear命令,可生成此文件
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bear -a make UIMAGE_LOADADDR=0x8000 uImage -j8
除此之外,clangd还具有代码静态分析功能,借此功能,可减少debug时间
3、其他
CI-CD
如果是团队开发,可能需要持续集成;安装gitlab-ci和gitlab-running可以很方便的做到,通过网页界面,查看编译流水线,下载编译产物
对于个人开发者,不需要CI-CD功能,CI-CD会占用大量服务器资源,得不偿失
文件共享
如何将服务器上编译的产物下载下来呢?这里使用File Browser网页文件管理工具,相当于私有云盘
安装
docker pull filebrowser/filebrowser
docker run -d -v /root/workspaces/share:/srv -v /root/file_browser/config.json:/etc/config.json -v /root/file_browser/database.db:/etc/database.db -p 3030:80 filebrowser/filebrowser
关注博主公众号,优质文章不断更新