本文使用一个具体的简单的Demo介绍此系列文章的Dev、Debug环境的使用方法,Dev、Debug环境都使用Docker技术提供OS层的环境隔离。以避免在搭建嵌入式开发环境上浪费时间,或者因搭建此嵌入式环境影响了其他开发环境。Docker技术可以解决以上这些困扰。开发环境使用Vi + GNU Cross toolchain,测试环境使用Qemu仿真STM32-P103这款开发板。使用仿真软件仿真开发板也节省了大家购买硬件的开支,同时也方便在有即兴Idea时,随时进行验证。
准备开发、调试环境
开发、调试环境依赖于Docker,首先安装Docker。Docker有两个版本CE(Community Edition)和 EE(Enterprise Edition),EE功能强大些,且稳定可靠,公司用,收费。我们学习用当然选择CE版本啦。官方安装教程,不过Docker.com这个网站访问需要翻墙。不想翻墙的同学可以使用国内的aliyun。
Tag:使用Win10的bash的同学注意啦,由于Docker使用了Linux的cgroups和namespace等一些技术,Win10 bash并不完全支持。Docker安装在Win10 bash上不能使用。如果真想在Win10上使用Docker,请直接安装官方文档安装Docker for Win10. 底层环境直接使用Virtualbox提供Linux环境虚拟环境,Docker运行在虚拟化的Linux环境里。
安装完成后,可以使用以下命令查看是否安装成功:
input:
docker version
output:
Client:
Version: 17.09.0-ce
API version: 1.32
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:42:38 2017
OS/Arch: linux/amd64
Server:
Version: 17.09.0-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:41:20 2017
OS/Arch: linux/amd64
Experimental: false
有了Docker ,就可以下载我们使用的开发、调试环境的Docker image了。
For Dev:
Docker hub(官方镜像源):
docker pull zhanglianpin/stm32_compile_env:latest
Aliyun hub(阿里云镜像源):
docker pull registry.cn-hangzhou.aliyuncs.com/bahutou/stm32_compile_env
For Debug:
Docker hub(官方镜像源):
docker pull zhanglianpin/ucos_debug_env:latest
Aliyun hub(阿里云镜像源):
docker pull registry.cn-hangzhou.aliyuncs.com/bahutou/zhanglianpin/ucos_debug_env
下载完Dokcker image后,可以使用以下命令测试其是否下载成功:
input
docker image ls
output
REPOSITORY TAG IMAGE ID CREATED SIZE
zhanglianpin/stm32_compile_env latest 48cd33a2339f 3 days ago 527MB
zhanglianpin/ucos_debug_env latest 8d3c1b84e93f 3 days ago 203MB
ubuntu 16.04 0b1edfbffd27 11 days ago 113MB
ubuntu 14.04 8cef1fa16c77 11 days ago 223MB
linuxep/lepv0.1 latest 92e0fb0aa864 7 months ago 785MB
hello-world latest 05a3bd381fc2 7 months ago 1.84kB
从上面的输出我们可以看到,我的本地Docker iamge包含了 zhanglianpin/stm32_compile_env和zhanglianpin/ucos_debug_env这两个image。
怎么使用这两个Docker image呐?看下面:
input:
docker run --rm zhanglianpin/stm32_compile_env arm-none-eabi-gcc -v
output:
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/opt/gcc-arm-none-eabi-7-2017-q4-major/bin/../lib/gcc/arm-none-eabi/7.2.1/lto-wrapper
Target: arm-none-eabi
Configured with: /tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/src/gcc/configure --target=arm-none-eabi --prefix=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/install-native --libexecdir=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/install-native/lib --infodir=/tmp/jenkins/jenkins-GCC-</