ubuntu 22.04搭建SOC开发环境

目录

AArch64位编译器命名规则

安装交叉工具链编译

安装aarch64-none-elf工具链

安装aarch64-none-linux-gnu工具链

启动板载系统

板卡启动方式

硬件连接

准备阶段

硬件连接

udev规则配置

启动流程

开发板外观图

硬件准备清单

硬件连接

SSH登录系统

设置Windows为WLAN共享模式

设置以太网IP

开发板配置静态IP

基本概念

配置静态IP

​编辑

SSH登录验证

SSH安装

修改SSH配置文件

SSH登录验证

硬件连接

登录验证

番外篇

终端光标跳转快捷键


虚拟机: VMware

操作系统版本: ubuntu 22.04

文本编辑器: vscode

开发板: LubanCat-RK3568

USB转TTL模块:CH340

AArch64位编译器命名规则

aarch64 是全新的 64位指令集,aarch64 前缀直接表明64位架构,64位架构统一了浮点支持,无需像 arm32eabihf 标记硬浮点;
[arch] [-vendor] [-os] [-abi] [-gcc/g++]
arch: 目标芯片架构, RK3568开发板为Cortex-A55内核,架构为aarch64
vendor: 工具链提供商,当工具链不依赖特定芯片厂商,采用none替代
OS: 用于明确目标设备的操作环境,当 os字段值为 none 时,表示目标设备无操作系统(裸机),当os字段值为 linux 时,表示目标设备运行linux操作系统;

os字段值为 none 时,适用场景如下

  • 单片机、嵌入式系统初始化代码
  • Bootloader开发
  • 内核引导阶段代码
  • RTOS(实时操作系统)开发

os字段值为 linux 时,适用场景如下:

  • Linux 应用程序
  • 内核模块
  • 驱动程序
    abi: 工具链提供应用二进制接口,elf 表示裸机,GNU 表示GNU/Linuxglibc,其中glibcGNU项目提供的C标准库实现,为Linux 系统和其他基于GNU工具链的操作系统提供核心API。

安装交叉工具链编译

RK3568为ARM Cortex-A55内核(基于ARMV8-A架构),64位架构,目标开发板需要运行裸机程序,因此选择交叉编译工具链为 aarch64-none-elf-gcc;
首先查看当前ubuntu系统运行的cpu架构,方便官网下载与当前系统架构匹配的工具链;

官网地址:Arm GNU 工具链下载 -- Arm Developer

安装aarch64-none-elf工具链

步骤一:将下载到本地的工具链上传到ubuntu系统下的自定义目录,解压该文件;

bash 复制代码
 tar -xJvf arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-elf.tar.xz 

步骤二:查看解压后的bin目录所在路径,将此路径添加到~/.bashrc中;

bash 复制代码
sudo vim ~/.bashrc

bashrcBash Shell的 运行时配置文件,可以设置环境变量,将自定义路径添加到系统路径中,在 bashrc文件最后一行添加如下内容,需要注意路径替换;

bash 复制代码
export PATH="/home/shuju/Linux/ToolChain/aarch64-none-elf/arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-elf/bin:$PATH"

步骤三:使能环境变量,使配置文件生效;

bash 复制代码
source ~/.bashrc

步骤四:验证安装是否成功

bash 复制代码
aarch64-none-elf-gcc -v

安装aarch64-none-linux-gnu工具链

RK3568为ARM Cortex-A55内核(基于ARMV8-A架构),64位架构,目标开发板需要运行U-Boot程序,U-Boot 虽然属于裸机开发,但**U-Boot**是为 Linux 系统启动服务的,因此需要同时使用 裸机工具链 和 Linux 交叉编译工具链;

步骤一:将下载到本地的工具链上传到ubuntu系统下的自定义目录,解压该文件;

bash 复制代码
tar -xJvf arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz

步骤二:查看解压后的bin目录所在路径,将此路径添加到~/.bashrc中;

~/.bashrc文件最后一行添加如下内容,需要注意路径替换

bash 复制代码
export PATH="/home/shuju/Linux/ToolChain/aarch64-none-linux-gnu/arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-linux-gnu/bin:$PATH"

步骤三:使能环境变量,使配置文件生效;

bash 复制代码
source ~/.bashrc

步骤四:验证安装是否成功

bash 复制代码
aarch64-none-linux-gnu-gcc -v

启动板载系统

运行板卡时需要三个步骤:烧录系统,启动系统 ,系统登录;
LubanCat-RK3568开发板出厂时默认烧录Debian系统镜像,所以无需烧录系统镜像;

板卡启动方式

LubanCat-RK3568开发板具有板载eMMC并留有TF卡槽的板卡,支持eMMC和SD卡两种启动方式,启动流程如下:

  • 当SD卡有镜像时,则优先使用sd卡进行启动;

  • 当SD卡没有镜像,emmc有镜像则使用emmc的镜像进行启动;

  • sd卡和emmc都没有镜像,则不会启动;

由于LubanCat-RK3568开发板emmc中烧录了Debian系统镜像,本文选择以emmc的方式启动系统;

硬件连接

准备阶段

步骤一:windows安装USB TO TTL模块的驱动程序

步骤二:VMware虚拟机配置

需要关闭Ubuntu虚拟机,只开启VMware界面

由于VMware默认拦截外部USB设备,所以VMware需要启用USB穿透,按照下图配置;

步骤三:ubuntu虚拟机安装串口终端工具

启动ubuntu虚拟机,安装串口终端工具minicom

bash 复制代码
sudo apt install minicom
硬件连接
bash 复制代码
鲁班猫2 TX  →  TTL模块 RX 
鲁班猫2 RX  →  TTL模块 TX   
鲁班猫2 GND →  TTL模块 GND 

点击虚拟机--->点击可移动设备--->点击usb serial---->点击连接到虚拟机

查看内核是否识别USB TO TTL

bash 复制代码
lsusb

手动加载驱动,查看设备节点

bash 复制代码
sudo modprobe ch341  # 显式加载驱动(CH340在Linux内核中通常命名为ch341)
sudo ls /dev/ttyUSB*

采用dmesg查看内核日志,dmesg 指令用于查看Linux内核环形缓冲区(kernel ring buffer)消息, 内核在启动和运行过程中会输出大量日志信息,包括硬件检测、驱动程序加载、系统错误等,这些信息会被临时存储在内核的环形缓冲区中,而 dmesg 就是用来读取和显示这些消息的工具;

bash 复制代码
sudo dmesg | tail -n 10  # 查看内核日志是否有 "ch341-uart converter now attached to ttyUSB0"

根据dmesg日志可以看出,系统最初成功识别了 CH340设备并创建了ttyUSB0节点,但随后被brltty(盲文显示终端程序)占用并断开了连接,其中brltty是一种专为视障人士设计的软件工具,主要功能是将计算机或移动设备屏幕上的文本内容实时转换为可触摸的盲文点,并通过外接的盲文终端硬件呈现给用户;
如果用户确定不需要盲文支持,可以选择永久禁用brltty,执行如下指令移除 brltty,然后重新插拔 USB 设备再确定设备节点,若确定存在ttyUSB0设备节点之后,务必断开电源;

bash 复制代码
# 卸载brltty
sudo apt-get remove --purge brltty

# 检查设备节点是否存在
sudo ls /dev/ttyUSB*

udev规则配置

步骤一: udev规则文件存放在/etc/udev/rules.d/目录下,系统启动时会自动加载这些规则,首先创建一个新的 udev 规则文件;

bash 复制代码
sudo vim /etc/udev/rules.d/99-ch340.rules

步骤二: 将如下内容写入到99-ch340.rules文件中

bash 复制代码
# CH340/CH341 USB转TTL模块udev规则

SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0666", SYMLINK+="ttyCH340"                                                                                                    

各字段解释如下:

  • SUBSYSTEM=="tty":只匹配串口设备
  • ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523":指定 CH340 设备
  • MODE="0666":为所有用户设置设备权限为读写;
  • SYMLINK+="ch340-tty":创建固定的符号链接,避免设备节点名称变化;
    步骤三:保存并应用规则
bash 复制代码
# 重新加载所有 udev 规则
sudo udevadm control --reload-rules

#触发规则应用
sudo udevadm trigger

启动流程

开发板外观图

硬件准备清单

硬件连接

依次检查**内核是否识别USB TO TTL, 检查设备节点/dev/ttyUSB0是否存在,**当两项条件满足,先执行如下指令,再接通电源,此时以串口方式进行登录,账号名与密码需要联系厂家获得;

bash 复制代码
sudo minicom -D /dev/ttyUSB0 -b 1500000

SSH登录系统

为方便快速构建临时网络,需要将 Windows 主机变为网络中枢,所以需要开启本地Windows的WLAN 共享模式,当 Windows 开启 WLAN 共享时,系统会强制将共享目标网卡有线网卡的 IP 设置为**192.168.137.1** ,子网掩码**255.255.255.0**。这是Internet连接共享的强制规则,无法直接修改;

设置Windows为WLAN共享模式

设置以太网IP

开发板配置静态IP

通过 DHCP(动态主机配置协议)自动获取的 IP 地址,由于会定期变更,称之为动态IP;

由用户手动固定分配给设备的 IP 地址称为静态IP,特点是不会自动变更,但是需要手动修改,由于Windows强制将共享目标网卡的 IP地址设置为**192.168.137.1,因此需要将开发板IP地址配置为**同一网段内;

基本概念

IP地址:标识网络中的唯一设备 ,由 网络部分主机部分 组成

  • IP 地址:192.168.137.200

  • 子网掩码:255.255.255.0(用于划分网络和主机部分)

  • 网络地址 :通过 IP地址 & 子网掩码 计算得出,即 192.168.137.0(表示设备所属的局域网)

  • 主机地址200(表示局域网内的具体设备)
    子网掩码:划分网络与主机的 "剪刀", 通过二进制掩码确定 IP 地址的 网络部分主机部分

  • IP 地址:192.168.137.200

  • 子网掩码:255.255.255.0 (二进制:11111111.11111111.11111111.00000000)

  • 前 24 位(192.168.137)是网络部分,后 8 位(200)是主机部分

  • 判断不同设备是否处于同一网段:两台设备的 IP 地址与子网掩码按位 "与" 后,若网络地址相同,则属于同一局域网,可直接通信;否则需通过网关转发
    网关:跨网络通信的 "大门, 当设备需要与 不同网段的设备通信 时,数据必须先发送到 网关 (通常是路由器的IP地址),由网关转发
    DNS服务器Domain Name System Server,域名系统服务器 ): 负责将人类易读的域名 (如 www.baidu.com解析 为计算机能识别的IP 地址 (如 14.215.177.38

bash 复制代码
# 常见公共 DNS 服务器

# 阿里云DNS:
	IPv4:223.5.5.5、223.6.6.6

# 114 DNS:
	IPv4:114.114.114.114

# 腾讯云 DNS:
	IPv4:119.29.29.29

# 百度 DNS:
	IPv4:180.76.76.76

# Google DNS:
	IPv4:8.8.8.8

配置静态IP

**步骤一:**以串口登录方式登录到开发板,首先检查网络是否联通,即判断目标主机是否返回应答数据包;

bash 复制代码
sudo ping www.baidu.com

步骤二:查看网卡名称

bash 复制代码
ifconfig

本文采用systemd-network配置开发板静态IP**,** 配置方案如下:

  • IP地址:192.168.137.200
  • 子网掩码:255.255.255.0
  • 网关:192.168.137.1
  • DNS服务器:114.114.114.114 8.8.8.8
    步骤三:检查 systemd-networkd是否正在运行
bash 复制代码
# 检查systemd-networkd的状态
sudo systemctl status systemd-networkd --no-pager

# 如果没有运行,执行如下指令启动
sudo systemctl enable --now systemd-networkd

Linux系统中,可能存在多个网络管理工具同时运行的情况,这会导致 systemd-networkd 的配置失效或冲突,需要临时停止其他网络管理工具,在系统重启后,这些工具自动恢复运行,因为**systemd-networkd** 的配置优先级高,如果 systemd-networkd 在启动时先于其他工具完成网卡配置,其他工具可能检测到网卡已被占用,从而放弃管理,从而使得静态 IP 生效;

常见的网络管理工具

步骤四:临时停止其他网络管理工具

bash 复制代码
# 检查除systemd-networkd正在运行的网络管理工具
sudo systemctl --type=service | grep -E 'NetworkManager|networking|wicd|dhcpcd'

# 禁用NetworkManager(如果存在)
sudo systemctl disable --now NetworkManager

# 禁用传统networking服务(Debian/Ubuntu)
sudo systemctl disable --now networking

步骤五:创建网络配置文件

网络配置文件命名规则

bash 复制代码
sudo vim /etc/systemd/network/10-eth1.network

步骤五: 新创建的配置文件中新增如下内容,注意按照实际情形进行替换

bash 复制代码
[Match]
Name=eth1

[Network]
Address=192.168.137.200/24
# 同时使用Gateway和Route参数确保路由生效
Gateway=192.168.137.1
Route=0.0.0.0/0 via 192.168.137.1

[Route]
Destination=0.0.0.0/0
Gateway=192.168.137.1
Metric=1024

步骤六:重启网络服务

bash 复制代码
sudo systemctl restart systemd-networkd

# 检查配置是否生效
ip a show eth1

步骤七:测试网络连通性

SSH登录验证

SSH安装

bash 复制代码
# 更新软件源
sudo apt update

# 安装SSH客户端
sudo apt install openssh-client

# 安装SSH服务端
sudo apt install openssh-server

修改SSH配置文件

bash 复制代码
sudo vim /etc/ssh/sshd_config
bash 复制代码
# 重启ssh,使配置生效
sudo /etc/init.d/ssh restart

SSH登录验证

硬件连接
登录验证

ubuntu 22.04虚拟机重启,打开终端,按照如下方式登录

bash 复制代码
# ssh 用户名@IP地址
ssh [email protected]

番外篇

终端光标跳转快捷键

相关推荐
SZ170110231几秒前
IGP(Interior Gateway Protocol,内部网关协议)
运维·服务器·gateway
moxiaoran57539 分钟前
Spring Cloud Gateway 动态路由实现方案
运维·服务器·前端
运维日常手记27 分钟前
最新1.33.1 k8s高可用集群搭建(免翻墙)
运维
爱瑞瑞40 分钟前
🐧深入浅出的认识 Linux 指令
linux·shell
星哥说事1 小时前
开源综合性网络安全检测和运维工具-TscanClient
运维·web安全·开源
ajassi20001 小时前
开源 java android app 开发(十一)调试、发布
android·java·linux·开源
小李飞刀李寻欢1 小时前
使用kubeadm部署Kubernetes(k8s)集群的步骤
linux·服务器·ubuntu·kubernetes·k8s
运维成长记2 小时前
阿里云实践创建实例步骤
linux·运维·服务器·阿里云·云计算
THe CHallEnge of THe BrAve2 小时前
Linux检验库是否安装成功
linux·运维·服务器
Hello.Reader2 小时前
NGINX 四层 SSL/TLS 支持ngx_stream_ssl_module
运维·nginx·ssl