4、开发环境准备:安装Ubuntu、配置网络、安装串口驱动、SSH连接开发板

地平线旭日X3/X5开发板的部署工作,本质上是在一个完整的嵌入式Linux开发环境中完成的。无论是交叉编译模型、烧写镜像,还是调试运行中的AI应用,都离不开一个稳定、干净、可复现的主机开发环境。本章将围绕“从零搭建开发环境”这一目标,系统讲解四个关键环节:Ubuntu操作系统的安装与选型、网络配置的要点、串口驱动的安装与验证,以及通过SSH连接开发板的方法。这四个环节环环相扣,任何一个环节的疏漏都可能导致后续开发工作停滞。我们将从原理出发,结合实战操作和常见误区,帮助你建立一套高效、可靠的开发环境。

开发环境搭建链路与数据流向 开发主机(x86_64) Ubuntu 20.04/22.04 LTS 内核≥5.4 | 预留≥100GB磁盘 网络配置 静态IP | 网关 | DNS | 代理 串口驱动(CP210x/CH340) lsusb | dmesg | /dev/ttyUSB0 SSH Client(终端) USB/UART 以太网 旭日X3/X5开发板 串口控制台(UART0) 波特率 921600 | 8N1 以太网口(eth0) 默认DHCP | 可配置静态IP SSH Server(sshd) 默认端口22 | 用户:root/hobot AI推理应用(BPU/CPU) SSH (TCP:22) 远程调试终端 VS Code / MobaXterm 文件传输 / 端口转发 图:开发环境搭建链路与数据流向示意(主机 ↔ 开发板)

上图展示了开发环境搭建完成后的整体链路。开发主机通过USB转串口线连接开发板的调试串口(UART0),用于查看底层启动日志和进入U-Boot/系统控制台;同时通过以太网连接开发板的网口,用于SSH远程登录、文件传输和AI应用调试。两条通道互为补充:串口是“最后一道防线”,即使网络不通也能进行底层干预;SSH则是日常开发的主要入口。下面我们逐一拆解每个环节的具体操作。

4.1 安装Ubuntu:选型与分区策略

核心原理:地平线官方的交叉编译工具链、AI工具链(如OE包、HBDK)以及Docker镜像,均基于Ubuntu LTS版本进行验证。选择正确的Ubuntu版本和系统架构,是避免“环境依赖地狱”的第一步。旭日X3/X5的SDK主要支持x86_64架构的Ubuntu 20.04(Focal)和22.04(Jammy),且要求内核版本不低于5.4。虽然Ubuntu 24.04已经发布,但考虑到部分底层驱动和库的兼容性,目前仍建议优先使用20.04或22.04。

对比项Ubuntu 20.04 LTSUbuntu 22.04 LTS推荐选择
内核版本5.45.15两者均可
Python默认版本3.83.1022.04更优
GCC默认版本9.411.422.04更优
地平线OE包兼容性官方首选官方支持20.04最稳
Docker支持良好良好均可

操作流程:安装Ubuntu时,建议采用“最小安装”模式,避免预装大量无关软件。磁盘分区方面,推荐至少预留100GB空间,其中/根分区分配60GB,/home分配30GB,swap分配8GB(与内存大小一致)。如果使用固态硬盘,建议开启TRIM支持。安装完成后,立即执行系统更新:

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git vim net-tools curl wget \
    ssh openssh-server net-tools usbutils
经验提醒:如果你使用的是Windows系统,可以通过VMware或VirtualBox安装Ubuntu虚拟机。但请注意,虚拟机需要开启“USB 3.1兼容”和“桥接网络”模式,否则串口和网络连接会出现异常。对于性能要求较高的编译任务,建议使用物理机安装双系统。
风险提示:不要使用WSL(Windows Subsystem for Linux)作为主要开发环境。WSL的串口映射和USB设备直通机制与原生Linux存在差异,可能导致无法识别地平线调试工具或串口设备。如果必须使用WSL,请确保使用WSL2并配置好usbipd-win工具,但这会增加不必要的复杂度。

4.2 配置网络:静态IP与代理设置

核心原理:开发主机与开发板之间的网络通信,需要保证两者处于同一网段。开发板默认使用DHCP自动获取IP,但为了稳定调试,建议将开发主机配置为静态IP,并在路由器上为开发板绑定固定IP(或通过MAC地址分配)。此外,国内开发者访问外网资源(如GitHub、Docker Hub)时,可能需要配置代理。

操作流程:在Ubuntu中,使用netplan配置网络是最标准的方式。编辑/etc/netplan/01-network-manager-all.yaml文件:

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [114.114.114.114, 8.8.8.8]

应用配置并验证:

sudo netplan apply
ip addr show eth0
ping -c 3 192.168.1.1

如果使用代理,可以在/etc/environment中添加:

export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export all_proxy="socks5://127.0.0.1:7890"
实战场景:假设你的开发板通过网线直连开发主机(不经过路由器)。此时需要将开发主机的有线网卡配置为静态IP(如192.168.1.100),并将开发板手动设置为192.168.1.101。同时,在开发主机上开启IP转发和NAT,使开发板能够通过主机上网。具体命令如下:
# 开启IP转发
sudo sysctl -w net.ipv4.ip_forward=1
# 配置NAT(假设eth0为外网口,eth1为连接开发板的网口)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

4.3 安装串口驱动:识别与验证

核心原理:旭日X3/X5开发板通常配备USB转串口调试接口,板载芯片多为CP2102或CH340。在Ubuntu系统中,这些芯片的驱动已经集成在内核中,但部分新版本芯片可能需要手动安装驱动。串口连接是开发板调试的“生命线”,尤其是在系统无法正常启动或网络不通时,只能通过串口进行故障排查。

操作流程:首先,使用USB线连接开发板的调试串口与开发主机。然后执行以下命令验证驱动是否加载:

# 查看USB设备列表
lsusb
# 查看内核日志,确认驱动加载
dmesg | grep -i "cp210x\|ch341\|ttyUSB"
# 查看串口设备节点
ls -l /dev/ttyUSB*

如果lsusb显示设备ID为10c4:ea60(CP210x)或1a86:7523(CH340),且/dev/ttyUSB0存在,说明驱动已正常加载。如果设备节点不存在,可以尝试手动加载模块:

sudo modprobe cp210x
sudo modprobe ch341

接下来,使用串口终端工具(如minicom、picocom或screen)连接开发板。推荐使用picocom,因为它支持波特率自动识别和快捷键操作:

sudo apt install -y picocom
sudo picocom -b 921600 /dev/ttyUSB0
常见误区:很多初学者在连接串口时,发现屏幕无输出或乱码。这通常是因为波特率设置错误。旭日X3/X5的调试串口波特率为921600,而不是常见的115200。另外,请确保使用原装USB线,部分劣质USB线仅支持充电,不支持数据传输。
检查项命令预期结果
USB设备枚举lsusb显示10c4:ea60或1a86:7523
内核驱动加载dmesg | grep ttyUSB出现ttyUSB0注册信息
设备节点权限ls -l /dev/ttyUSB0crw-rw---- root dialout
当前用户组groups $USER包含dialout组

如果当前用户不在dialout组中,需要添加并重新登录:

sudo usermod -aG dialout $USER
# 重新登录后生效

4.4 SSH连接开发板:从登录到文件传输

核心原理:SSH(Secure Shell)是开发板远程调试的主要通道。旭日X3/X5开发板默认开启了SSH服务,默认用户名为root或hobot,密码在出厂说明书中标注(通常为地平线或123456)。SSH不仅用于命令行操作,还支持SCP/SFTP文件传输和X11图形转发。

操作流程:首先,确保开发板已启动并获取到IP地址。可以通过串口登录开发板,执行ip addr show eth0查看IP。然后在开发主机上执行:

ssh root@192.168.1.101

首次连接会提示确认指纹,输入yes后输入密码即可登录。为了提升开发效率,建议配置SSH密钥免密登录:

# 在开发主机上生成密钥(如果已有可跳过)
ssh-keygen -t rsa -b 4096
# 将公钥复制到开发板
ssh-copy-id root@192.168.1.101

配置完成后,后续登录将不再需要密码。此外,可以通过SSH隧道进行端口转发,例如将开发板的BPU调试端口映射到本地:

ssh -L 8080:localhost:8080 root@192.168.1.101
案例拆解:某项目需要将训练好的YOLOv5模型部署到X3开发板。开发人员小张在完成环境搭建后,发现通过SSH传输模型文件时速度极慢(约200KB/s)。经过排查,发现开发主机与开发板之间通过Wi-Fi连接,信号强度只有两格。小张改用网线直连后,传输速度提升至11MB/s,模型部署时间从15分钟缩短至20秒。这个案例说明,物理链路质量对开发效率的影响远大于软件配置。建议在固定工位调试时,始终使用有线连接。

常见误区与复盘:

  • 误区一:SSH连接超时。原因多为开发板IP地址变化或防火墙拦截。解决方法是使用ping测试连通性,并检查开发板防火墙状态(sudo ufw status)。
  • 误区二:SSH登录后中文乱码。这是因为开发板默认locale为UTF-8,而终端模拟器编码不一致。在MobaXterm或VS Code中设置终端编码为UTF-8即可。
  • 误区三:SCP传输大文件中断。建议使用rsync替代scp,支持断点续传:rsync -avz --progress model.bin root@192.168.1.101:/root/。

最后,建议在开发主机上创建一个~/.ssh/config文件,为开发板配置别名,简化日常操作:

Host x3
    HostName 192.168.1.101
    User root
    Port 22
    IdentityFile ~/.ssh/id_rsa