2、Linux开发主机搭建:虚拟机安装、Ubuntu系统配置、SSH与VNC远程访问

做BSP开发,第一件事不是写代码,而是搭环境。我见过太多新手在环境配置上卡了一整天,最后发现是虚拟机网络没选对。说白了,开发主机就是你的武器,武器没磨好,上战场就是送人头。

这一章,我带你从零开始,把Linux开发主机彻底搞定。我们会用虚拟机装Ubuntu,然后配置SSH和VNC,让你能远程访问。嗯,这套流程我用了快十年,踩过的坑都帮你填平了。

本章核心目标:在Windows/Mac上通过虚拟机运行Ubuntu 22.04 LTS,并实现SSH命令行远程 + VNC图形远程访问。

Linux开发主机搭建知识体系 Linux开发主机搭建流程 宿主机 (Windows/Mac) 虚拟机软件 (VMware / VirtualBox) Ubuntu 22.04 LTS 系统 SSH 远程命令行 VNC 远程桌面 💡 核心思路:宿主机 → 虚拟机 → Ubuntu → SSH/VNC 双通道远程访问 SSH用于命令行开发,VNC用于图形界面调试,两者互补

2.1 为什么非要用虚拟机?

你可能想问:我直接装双系统不行吗?或者用WSL?

我的答案是:做BSP开发,虚拟机是最稳妥的选择。双系统切换太麻烦,WSL对硬件外设的支持有限。你想想看,调试一个SPI驱动,结果WSL不认USB设备,那得多崩溃。

我个人习惯用VMware Workstation,但VirtualBox也完全够用。区别不大,选一个你顺手的就行。

对比项 VMware Workstation VirtualBox
性能 略优,3D加速好 够用,轻量级
USB透传 稳定,支持USB 3.0 需要安装扩展包
快照功能 支持,速度快 支持,速度一般
价格 商业软件(有免费版) 完全免费
适合场景 生产环境、性能敏感 学习、轻量开发

我的建议:如果你是学生或个人学习,直接用VirtualBox,省心。如果是公司项目,用VMware,售后和稳定性更有保障。

2.2 虚拟机安装与Ubuntu系统配置

好,我们开始动手。假设你选了VirtualBox,下载安装包一路下一步就行。嗯,这里有个坑——记得勾选「支持网络」的选项,不然后面连网都上不了。

2.2.1 创建虚拟机

  1. 打开VirtualBox,点击「新建」。
  2. 名称填「Ubuntu_BSP」,类型选Linux,版本选Ubuntu (64-bit)。
  3. 内存分配:至少4GB,我建议8GB。BSP编译很吃内存。
  4. 硬盘:创建虚拟硬盘,大小建议80GB以上。选动态分配,省空间。

注意:硬盘大小别选「固定大小」,虽然性能好一点,但80GB直接占满你的物理硬盘,划不来。动态分配用多少占多少,更灵活。

2.2.2 安装Ubuntu 22.04 LTS

去Ubuntu官网下载iso镜像,然后挂载到虚拟机的光驱里。启动虚拟机,按提示安装。

这里我提几个关键点:

  • 分区方案:新手直接选「擦除磁盘并安装Ubuntu」,自动分区最省事。
  • 用户名和密码:记好了!后面SSH登录要用。我习惯用bspdev作为用户名。
  • 安装时联网:建议连上网络,安装过程中会下载更新和驱动。

安装完成后,重启虚拟机。你会看到一个干净的Ubuntu桌面。嗯,这时候别急着高兴,还有一堆配置等着我们。

2.2.3 系统基础配置

进系统后,第一件事:打开终端,更新软件源。

sudo apt update
sudo apt upgrade -y

然后安装一些BSP开发必备的工具包:

sudo apt install -y build-essential git vim curl wget net-tools openssh-server

我个人习惯把vim的配置也顺手改一下,不然默认的vim太难用了。不过这是后话,咱们先把环境跑通。

避坑指南:我曾经在安装完Ubuntu后直接开始装交叉编译工具链,结果发现gcc版本不对,折腾了半天。后来学乖了,先apt update && apt upgrade,把系统基础打牢,再装其他东西。

2.3 SSH远程访问配置

SSH是BSP开发的命脉。你不可能每次都打开虚拟机屏幕去敲命令,太原始了。用SSH从宿主机连进去,效率翻倍。

2.3.1 检查SSH服务状态

刚才我们已经装了openssh-server,现在确认一下它有没有跑起来:

sudo systemctl status ssh

如果显示active (running),说明OK。如果没有,手动启动:

sudo systemctl start ssh
sudo systemctl enable ssh   # 设置开机自启

2.3.2 配置网络模式

这是最容易踩坑的地方。虚拟机默认是NAT模式,宿主机可以访问虚拟机,但虚拟机不能反向访问宿主机。做BSP开发,我们通常需要桥接模式,让虚拟机跟宿主机在同一个网段。

在VirtualBox里,选中你的虚拟机 → 设置 → 网络 → 连接方式改为「桥接网卡」。

重启虚拟机,用ip addr查看IP地址。记下这个IP,后面SSH连接要用。

小技巧:如果你在公司网络环境复杂,桥接模式可能拿不到IP。这时候可以用「仅主机(Host-Only)网络」+「端口转发」的组合。具体做法:在虚拟机网络设置里加一个Host-Only网卡,然后在宿主机上配置端口转发(比如2222 → 22)。这样SSH连接ssh -p 2222 bspdev@127.0.0.1就能连上。

2.3.3 从宿主机SSH连接

打开宿主机(Windows用PowerShell,Mac/Linux用终端),执行:

ssh bspdev@192.168.1.100

输入密码,你就进入了虚拟机的命令行。这时候,你可以关掉VirtualBox的窗口了,以后都在SSH里操作。

进阶配置:配置SSH密钥登录,省去每次输密码的麻烦。

# 在宿主机生成密钥对
ssh-keygen -t rsa -b 4096

# 将公钥复制到虚拟机
ssh-copy-id bspdev@192.168.1.100

之后SSH连接就不再需要密码了。我每次重装系统后第一件事就是配这个,省时间。

2.4 VNC远程桌面配置

SSH虽然强大,但有些场景还是需要图形界面。比如调试一个GUI应用,或者你想用IDE(比如VS Code、Qt Creator)做开发。这时候VNC就派上用场了。

2.4.1 安装VNC服务器

在虚拟机里执行:

sudo apt install -y tigervnc-standalone-server tigervnc-common

我推荐TigerVNC,轻量、稳定。之前用过RealVNC,广告太多,果断弃了。

2.4.2 配置VNC密码

vncpasswd

输入两次密码。这个密码是VNC连接用的,跟系统密码可以不一样。

2.4.3 启动VNC服务

vncserver :1 -geometry 1920x1080 -depth 24

参数说明:

  • :1 表示显示编号,默认是5901端口(5900+1)。
  • -geometry 设置分辨率,我习惯用1920x1080。
  • -depth 颜色深度,24位真彩色。

第一次启动会创建配置文件~/.vnc/xstartup。我们需要修改这个文件,让它启动完整的桌面环境:

#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &

注意:这里我用了XFCE桌面,因为它轻量、响应快。如果你喜欢GNOME,也可以换成gnome-session &,但会比较吃资源。

修改完后,重启VNC服务:

vncserver -kill :1
vncserver :1 -geometry 1920x1080 -depth 24

2.4.4 从宿主机连接VNC

宿主机上需要安装VNC客户端。Windows推荐用VNC Viewer,Mac用系统自带的「屏幕共享」或者RealVNC都行。

连接地址:192.168.1.100:5901

输入刚才设置的VNC密码,就能看到虚拟机的桌面了。

安全提醒:VNC默认不加密,在公网环境下使用非常危险。如果你需要通过互联网访问,建议先SSH隧道转发:

ssh -L 5901:localhost:5901 bspdev@192.168.1.100

然后在VNC客户端连接localhost:5901。这样所有流量都走SSH加密通道,安全多了。

2.5 验证环境是否就绪

环境搭好了,我们来做个快速验证。在SSH终端里执行:

uname -a
gcc --version
which git

如果都能正常输出,恭喜你,开发主机已经就绪。

我的习惯:每次搭完环境,我都会创建一个快照。在VirtualBox里,选中虚拟机 → 快照 → 拍摄快照。这样万一后面搞崩了,一键恢复,不用重装。

好了,虚拟机装好了,Ubuntu配好了,SSH和VNC也能远程访问了。这套环境我用了很多年,从Ubuntu 16.04一直用到22.04,流程基本没变过。你跟着走一遍,后面30章的开发工作就都有落脚点了。