2、Linux开发主机搭建:虚拟机安装、Ubuntu系统配置、SSH与VNC远程访问
做BSP开发,第一件事不是写代码,而是搭环境。我见过太多新手在环境配置上卡了一整天,最后发现是虚拟机网络没选对。说白了,开发主机就是你的武器,武器没磨好,上战场就是送人头。
这一章,我带你从零开始,把Linux开发主机彻底搞定。我们会用虚拟机装Ubuntu,然后配置SSH和VNC,让你能远程访问。嗯,这套流程我用了快十年,踩过的坑都帮你填平了。
本章核心目标:在Windows/Mac上通过虚拟机运行Ubuntu 22.04 LTS,并实现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 创建虚拟机
- 打开VirtualBox,点击「新建」。
- 名称填「Ubuntu_BSP」,类型选Linux,版本选Ubuntu (64-bit)。
- 内存分配:至少4GB,我建议8GB。BSP编译很吃内存。
- 硬盘:创建虚拟硬盘,大小建议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章的开发工作就都有落脚点了。