嵌入式开发中常用的虚拟机与容器

嵌入式开发中常用的虚拟机与容器

  • 1.本文说明

  • 2.VMware Workstatio

  • 2.Oracle VM VirtualBox

  • 3.window10 中的WSL2 Linux子系统

  • 4.docker容器技术

  • 5.multipass

  • 6.qemu

1.本文说明

嵌入式开发已经从以往的单片机开发逐渐过渡到越来越依赖Linux的系统。虽然大多数情况下,windows的开发工具可以做很多嵌入式开发工作,也有很多好用的工具,但是Linux里面的好用的工具也很多。这种情况下,解决的办法就是装windows,linux双系统就可以解决,但是这样切换系统的效率太低了,传输文件也非常的麻烦。用虚拟机也可以解决该问题,虚拟机也是比较庞大的,而且性能也不怎么好。遇到这些问题,下面介绍几种常用的工具。

2.VMware Workstatio

自然这是一种强大的桌面虚拟计算机软件,可以非常方便的安装各种系统,也可以根据需要进行外设的开发。

一般嵌入式开发上,用来编译Linux、uboot等镜像,然后放到windows系统上利用各种工具烧录,比较的方便。

分为商业版本和个人体验版本,做个人学习开发时,可以使用该软件来学习,但是到公司开发则需要购买许可证才能使用。不然一堆的法务材料会找上门。

个人觉得使用该软件学习Linux的使用,同时个人做一些Linux开发等等,是不错的选择,上手简单,便于操作,而且界面也比较好用。当然,缺点就是虚拟机需要安装一整个系统,占用空间比较大,而且分配的内存、cpu使用都比较低,性能差一些。

2.Oracle VM VirtualBox

这个就是一款开源的虚拟机软件了,这款软件就是完全免费的。如果说VMware Workstatio担心会有版权的问题,那么用上这个虚拟机则完全不用担心这个问题了。

使用上和VMware Workstatio类似,也都是需要安装一个完整的系统镜像。

当然两者之间简单的使用来看,差别不大,一些基本的功能使用起来也差不多。需要注意的是,如果虚拟机镜像损坏,起不来了,那么这个系统镜像也就不能用了。所以使用这些虚拟机时,需要注意重要的资料及时备份。

使用虚拟机适合日常的开发工作,容易上手,学习成本不高,但是资源占用大,效率低。

3.window10 中的WSL2 Linux子系统

因为是windows自己实现的虚拟化技术,效果还是可以的。虽然被很多人说有一些bug,但是基本的应用程序的使用还是可以应对的,如果不涉及到复杂的使用,学习使用Linux的命令也是不错的选择。但是缺点就是bug太多,而且系统的占用也比较大,而且东西不可控。

在安装完成WSL2后可以安装Linux的内核。

可以安装的Linux版本非常的多。其中安装Ubuntu版本可以自由的选择。

比较遗憾的是只能用命令行进行操作,还有在开发Linux的过程中,一些软件支持的不是很好,还有就是没有图形化界面。

而且如果要使用Linux上的USB等外设驱动,也不能很好的支持。

4.docker容器技术

docker的思想就是利用操作系统资源,上面构建一些应用程序。因为操作系统的资源是共享的,所以只需要构建上层的应用即可。

docker的系统资源是在Linux基础上的,所以如果在windows上使用,需要安装wsl2后才能启动docker。

docker的好处在于跨平台,而且只需要构建一个镜像,可以在不同的平台上进行部署,镜像也可以推送到远程的仓库,以便于相同环境的搭建。

在嵌入式上使用时,可以搭建一个编译嵌入式Linux的环境,也可以构建编译uboot等环境,在分享给其他人使用时,不用再重复的搭建环境的操作。解决很多环境搭建的问题。

当然也可以编译很多好用的工具,比如编译qemu的源代码等等,编译操作系统镜像,编译开源的仓库里的工具的等等。

docker的远程仓库里有各种版本的linux的镜像,十分方便构建编译环境。利用docker搭建一个虚拟化的Linux内核学习lab是不错的选择。

docker搭建环境、部署很方便,缺点就是上手难度有一些,需要掌握docker的使用思想。

5.multipass

如果觉得docker比较复杂,用起来也不如虚拟机一样方便。同时又觉得安装VM VirtualBox等占用太多资源,那么multipass就是一个不错的选择。

https://multipass.run/

选择Multipass的优势在于操作简单,而且可以完全搭建一个全新的ubuntu环境。

支持Linux、Windows和macos的平台。

操作上与完整Ubuntu的控制台操作无差别,而且可以自己定义系统的硬盘、内存大小。

使用时,如果不想破坏原生Ubuntu环境,又想在Ubuntu环境下开发,multipass可以提供一个干净的隔离空间。也想安装不同版本的Ubuntu。

基本的Ubuntu版本都可以供选择。

这个虚拟机使用稍微比docker简单一些,但是差别就是multipass的镜像是无法分享的,只能自己使用。

每次开一个镜像就是一个新的干净的工作空间。

6.qemu

对于qemu的使用,一般都会作为嵌入式虚拟环境来使用。用软件模拟不同硬件的平台,比如arm、mips、riscv等等开发,都可以模拟硬件平台。同时借助模拟硬件虚拟化技术,可以很好的开发上层软件。

这样在做嵌入式开发时,可以节约调试的时间成本,在开发嵌入式Linux、嵌入式上层软件的业务逻辑的设计时,也非常的有优势,在qemu上调试完成后,再移植到真实的设备上。

当然,在qemu上也能安装一些大型的操作系统。对于嵌入式开发,可以通过软件模拟硬件的实现,利用这一点,很方便写上层应用、网络应用、图形化界面的交互等等。


1.外媒谈英伟达-Arm并购案~

2.这里聚焦了全球嵌入式技术风景~

3.航天器、导弹喜欢用单片机?

4.工程师的硬核单片机编程思想~

5.嵌入式开发需要架构设计吗?

6.【技术转管理必备】嵌入式产品的研发流程

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CarpVM 是一个用 C 语言编写的小型虚拟机。可以嵌入在应用程序使用。 包含的指令集有: HALT (code): Halts and attempts to clean up stack, data memory, and label memory before exiting with given exit code. NOP (): Does nothing. Seriously. LOAD (reg, val): Loads given integer value into given register. MOV (dst, src): Copies contents of src register into dst register. ADD (): Pops the top two integers from the stack and pushes their sum. SUB (): Pops the top two integers from the stack and pushes the difference (lower minus upper). MUL (): Pops the top two integers from the stack and pushes their product. MOD (rega, regb): Computes rega % regb and stores in ERX. NOT (reg): Computes bitwise NOT of reg and stores in reg. XOR (): Pops the top two integers from the stack and XORs them. OR (): Pops the top two integers from the stack and ORs them. AND (): Pops the top two integers from the stack and ANDs them. INCR (reg): Increments value in given register. DECR (reg): Decrements value in given register. INC (): Increments the value at the top of the stack. DEC (): Decrements the value at the top of the stack. PUSHR (reg): Pushes value in given register. PUSH (val): Pushes given value. POP (val): Pops an integer from the stack and dumps it into GBG. CMP (): Pops the top two integers from the stack and checks if equal. 0 means equal. Result will be pushed onto the stack. MOV (rega, regb): Move value in rega to regb. JZ (addr): Jumps to given absolute address if top of the stack is 0. RJZ (diff): Adds differential to current EIP (relative jump) if top of the stack is 0. JNZ (addr): Jumps to given absolute address if top of the stack is not 0. RJNZ (diff): Adds differential to current EIP (relative jump) if top of the stack is not 0. JMP (addr): Jumps to given absolute address. RJMP (diff): Adds differential to current EIP (relative jump). DBS (key, val): Sets data memory at key (string pointer) to given value. DBG (key, reg): Gets value from data memory at key (string pointer) and dumps it into given register. CALL (key, nargs): Save state and set EIP to value in data memory at key. RET (val): Push return value and load state. PREG (reg): Prints contents of given register. PTOP (): Peeks top of stack and prints top value. 标签:CarpVM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值