2. 嵌入式Linux系统搭建:烧录系统镜像、系统初始化配置、SSH远程连接、VNC远程桌面、换源与基础软件安装
系统搭建是嵌入式开发的第一步,也是后续所有工作的基础。说实话,我见过不少项目在后期出问题,追根溯源都是系统初始化没做好。这一章,咱们就把这块硬骨头啃下来。
本章核心目标:让一块“裸板”变成一台可以通过网络远程访问、具备基础开发环境的嵌入式Linux主机。
2.1 烧录系统镜像——给硬件注入灵魂
拿到一块新的开发板,比如我常用的RK3588或树莓派,第一件事就是给它烧录系统。这就像给电脑装操作系统,但嵌入式设备通常没有BIOS,得用专用工具把镜像写到SD卡或eMMC里。
2.1.1 准备工作
- 硬件:开发板、TF卡(建议32GB以上,Class 10)、读卡器、USB转TTL串口模块(备用)。
- 软件:系统镜像文件(.img或.img.xz)、烧录工具(balenaEtcher、Win32DiskImager或dd命令)。
我的习惯:我一般用balenaEtcher,跨平台、界面直观,还能自动校验写入数据。曾经有一次用dd命令写镜像,手抖写错了设备号,直接把我的工作硬盘给覆盖了……从那以后,我写镜像前都会再三确认目标设备。
2.1.2 烧录步骤(以balenaEtcher为例)
- 插入TF卡到读卡器,连接电脑。
- 打开balenaEtcher,点击“Flash from file”,选择下载好的系统镜像。
- 点击“Select target”,选择你的TF卡(注意别选错!)。
- 点击“Flash!”,等待进度条走完。
- 烧录完成后,工具会自动校验,确保数据完整。
# 如果你喜欢命令行,也可以用dd(Linux/Mac):
sudo dd if=your_image.img of=/dev/sdX bs=4M status=progress
sync
注意:dd命令中的of=参数一定要写对!/dev/sda通常是系统盘,/dev/sdb或/dev/sdc才是你的TF卡。用lsblk或fdisk -l先确认一下。
2.2 系统初始化配置——让系统跑起来
镜像烧好了,插卡上电。第一次启动,系统会自动扩展分区、生成SSH密钥。这个过程大概需要1-2分钟,别急。
2.2.1 首次启动与登录
通过串口或HDMI连接显示器,你会看到系统启动日志。登录信息通常在官方文档里,比如树莓派的默认账号是pi/raspberry,很多ARM开发板是root/root或root/123456。
避坑指南:我曾经遇到过一块板子,默认密码怎么都登不上去。后来发现是镜像版本太老,默认密码被改了。解决办法是重新下载最新版镜像,或者通过串口进入uboot修改启动参数,挂载根文件系统后手动改密码。
2.2.2 基础配置清单
| 配置项 | 说明 | 常用命令/工具 |
|---|---|---|
| 修改root密码 | 设置一个强密码,别用默认的 | passwd |
| 设置主机名 | 方便网络识别 | hostnamectl set-hostname edge-ai-01 |
| 配置时区 | 默认是UTC,改成Asia/Shanghai | timedatectl set-timezone Asia/Shanghai |
| 启用网络 | 有线或WiFi连接 | nmtui 或编辑 /etc/network/interfaces |
| 查看IP地址 | 记下来,后面远程连接要用 | ip addr 或 ifconfig |
2.3 SSH远程连接——告别串口线
系统初始化好了,接下来我们要实现远程控制。SSH是嵌入式开发中最常用的远程连接方式,没有之一。
2.3.1 启用SSH服务
大多数官方镜像默认关闭SSH,需要手动开启。在树莓派上,你可以在TF卡的boot分区创建一个名为ssh的空文件(无后缀名)。其他板子通常需要执行:
sudo systemctl enable ssh
sudo systemctl start ssh
2.3.2 从电脑连接开发板
打开终端(Windows用户用PowerShell或Putty),输入:
ssh root@192.168.1.100 # 换成你板子的实际IP
第一次连接会提示确认主机指纹,输入yes,然后输入密码。搞定!
进阶技巧:配置SSH密钥登录,省去每次输密码的麻烦。我习惯在本地生成一对密钥,把公钥传到板子上:
ssh-keygen -t rsa -b 4096
ssh-copy-id root@192.168.1.100
2.4 VNC远程桌面——图形化操作
有些时候,命令行搞不定,比如调试摄像头预览、配置桌面环境。这时候就需要VNC了。
2.4.1 安装VNC服务器
我推荐用TightVNC或TigerVNC,轻量且稳定。在板子上执行:
sudo apt update
sudo apt install tightvncserver
2.4.2 启动VNC服务
vncserver :1 -geometry 1280x720 -depth 24
这会启动一个分辨率为1280x720的虚拟桌面,编号为:1。你可以在电脑上用VNC Viewer连接:192.168.1.100:5901(5900 + 显示编号)。
注意:VNC默认不加密,不要在公网上直接暴露。如果需要在公网访问,建议通过SSH隧道转发:
ssh -L 5901:localhost:5901 root@192.168.1.100
然后在本地连接 localhost:5901,这样所有流量都经过SSH加密。
2.5 换源与基础软件安装——打造开发环境
默认的软件源在国外,下载速度慢得让人抓狂。换源是必须的。
2.5.1 更换APT源
以Ubuntu/Debian系统为例,编辑 /etc/apt/sources.list:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 备份
sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sudo apt update
我用的是中科大源,你也可以用清华、阿里云的源,速度都不错。
2.5.2 安装基础软件包
以下是我每次搭建新环境必装的软件:
| 软件包 | 用途 | 安装命令 |
|---|---|---|
| build-essential | 编译工具链(gcc, g++, make) | sudo apt install build-essential |
| git | 版本控制 | sudo apt install git |
| vim / nano | 文本编辑器 | sudo apt install vim |
| htop | 系统资源监控 | sudo apt install htop |
| net-tools | 网络工具(ifconfig等) | sudo apt install net-tools |
| python3-pip | Python包管理 | sudo apt install python3-pip |
| cmake | 跨平台构建工具 | sudo apt install cmake |
我的经验:装完这些基础包后,我还会顺手装一个tree命令,查看目录结构非常直观。另外,screen或tmux也推荐装上,SSH断开后任务不会中断,这个在远程编译大项目时特别有用。
2.6 本章知识体系
下面这张图总结了嵌入式Linux系统搭建的完整流程,你可以把它当作一个检查清单: