目錄
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
位架構統一了浮點支持,無需像arm32
?用?eabihf
?標記硬浮點;
[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
/Linux
的glibc,其中glibc
是GNU
項目提供的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系統下的自定義目錄,解壓該文件;
tar -xJvf arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-elf.tar.xz
步驟二:查看解壓后的bin目錄所在路徑,將此路徑添加到~/.bashrc中;
sudo vim ~/.bashrc
?
bashrc
?是Bash Shell
的?運行時配置文件,可以設置環境變量,將自定義路徑添加到系統路徑中,在?bashrc
文件最后一行添加如下內容,需要注意路徑替換;
export PATH="/home/shuju/Linux/ToolChain/aarch64-none-elf/arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-elf/bin:$PATH"
步驟三:使能環境變量,使配置文件生效;
source ~/.bashrc
步驟四:驗證安裝是否成功
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系統下的自定義目錄,解壓該文件;
tar -xJvf arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
步驟二:查看解壓后的bin目錄所在路徑,將此路徑添加到~/.bashrc中;
?~/.
bashrc
文件最后一行添加如下內容,需要注意路徑替換
export PATH="/home/shuju/Linux/ToolChain/aarch64-none-linux-gnu/arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-linux-gnu/bin:$PATH"
步驟三:使能環境變量,使配置文件生效;
source ~/.bashrc
步驟四:驗證安裝是否成功
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
sudo apt install minicom
?硬件連接
魯班貓2 TX → TTL模塊 RX
魯班貓2 RX → TTL模塊 TX
魯班貓2 GND → TTL模塊 GND
點擊虛擬機--->點擊可移動設備--->點擊usb serial---->點擊連接到虛擬機
?查看內核是否識別USB TO TTL
lsusb
手動加載驅動,查看設備節點
sudo modprobe ch341 # 顯式加載驅動(CH340在Linux內核中通常命名為ch341)
sudo ls /dev/ttyUSB*
采用dmesg查看內核日志,dmesg指令用于查看Linux內核環形緩沖區(kernel ring buffer)消息,內核在啟動和運行過程中會輸出大量日志信息,包括硬件檢測、驅動程序加載、系統錯誤等,這些信息會被臨時存儲在內核的環形緩沖區中,而?
dmesg
?就是用來讀取和顯示這些消息的工具;
sudo dmesg | tail -n 10 # 查看內核日志是否有 "ch341-uart converter now attached to ttyUSB0"
根據dmesg日志可以看出,系統最初成功識別了
CH340
設備并創建了ttyUSB0
節點,但隨后被brltty
(盲文顯示終端程序)占用并斷開了連接,其中brltty是
一種專為視障人士設計的軟件工具,主要功能是將計算機或移動設備屏幕上的文本內容實時轉換為可觸摸的盲文點,并通過外接的盲文終端硬件呈現給用戶;
如果用戶確定不需要盲文支持,可以選擇永久禁用
brltty,執行如下指令
移除 brltty,然后重新插拔 USB 設備再確定設備節點,若確定存在ttyUSB0設備節點之后,務必斷開電源;
# 卸載brltty
sudo apt-get remove --purge brltty# 檢查設備節點是否存在
sudo ls /dev/ttyUSB*
?udev規則配置
步驟一: udev規則文件存放在
/etc/udev/rules.d/
目錄下,系統啟動時會自動加載這些規則,首先創建一個新的 udev 規則文件;
sudo vim /etc/udev/rules.d/99-ch340.rules
步驟二: 將如下內容寫入到99-ch340.rules文件中
# 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"
:創建固定的符號鏈接,避免設備節點名稱變化;
步驟三:保存并應用規則
# 重新加載所有 udev 規則
sudo udevadm control --reload-rules#觸發規則應用
sudo udevadm trigger
啟動流程
開發板外觀圖
硬件準備清單?
硬件連接
依次檢查內核是否識別USB TO TTL, 檢查設備節點/dev/ttyUSB0是否存在,當兩項條件滿足,先執行如下指令,再接通電源,此時以串口方式進行登錄,賬號名與密碼需要聯系廠家獲得;
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
)
# 常見公共 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
步驟一:以串口登錄方式登錄到開發板,首先檢查網絡是否聯通,即判斷目標主機是否返回應答數據包;
sudo ping www.baidu.com
?步驟二:查看網卡名稱
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是否正在運行
# 檢查systemd-networkd的狀態
sudo systemctl status systemd-networkd --no-pager# 如果沒有運行,執行如下指令啟動
sudo systemctl enable --now systemd-networkd
Linux系統中,可能存在多個網絡管理工具同時運行的情況,這會導致?
systemd-networkd
?的配置失效或沖突,需要臨時停止其他網絡管理工具,在系統重啟后,這些工具自動恢復運行,因為systemd-networkd
?的配置優先級高,如果?systemd-networkd
?在啟動時先于其他工具完成網卡配置,其他工具可能檢測到網卡已被占用,從而放棄管理,從而使得靜態 IP 生效;
常見的網絡管理工具
步驟四:臨時停止其他網絡管理工具
# 檢查除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
步驟五:創建網絡配置文件
網絡配置文件命名規則
sudo vim /etc/systemd/network/10-eth1.network
步驟五: 新創建的配置文件中新增如下內容,注意按照實際情形進行替換
[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
步驟六:重啟網絡服務
sudo systemctl restart systemd-networkd# 檢查配置是否生效
ip a show eth1
?步驟七:測試網絡連通性
SSH登錄驗證
SSH安裝
# 更新軟件源
sudo apt update# 安裝SSH客戶端
sudo apt install openssh-client# 安裝SSH服務端
sudo apt install openssh-server
?修改SSH配置文件
sudo vim /etc/ssh/sshd_config
# 重啟ssh,使配置生效
sudo /etc/init.d/ssh restart
SSH登錄驗證
硬件連接
登錄驗證
ubuntu 22.04虛擬機重啟,打開終端,按照如下方式登錄
# ssh 用戶名@IP地址
ssh shuju@192.168.137.200