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位架構統一了浮點支持,無需像 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/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系統下的自定義目錄,解壓該文件;

 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

番外篇

終端光標跳轉快捷鍵

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84469.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84469.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84469.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

push [特殊字符] present

push 🆚 present 前言present和dismiss特點代碼演示 push和pop特點代碼演示 前言 在 iOS 開發中,push 和 present 是兩種不同的視圖控制器切換方式,它們有著顯著的區別。 present和dismiss 特點 在當前控制器上方新建視圖層級需要手動調用…

Java項目中常用的中間件及其高頻問題避坑

Java項目中常用的中間件及其高頻問題避坑如下: 一、常用中間件分類及作用 1. ??消息隊列中間件?? ??作用??:解耦系統、異步通信、削峰填谷。??代表產品??: ??Kafka??:高吞吐量流處理,適合日志收集、實時分析。??RocketMQ??:金融級可靠性,支持事務消…

發布一個angular的npm包(包含多個模塊)

為什么要發布npm包 根本原因時為了能夠在更廣泛的區域復用代碼,比如公司不支持一般的外部網絡,但是支持npm包的下載,那么就可以發布npm包,然后在公司內使用。 angular的npm不同嗎 angular library angular 目前已經到angular20…

Web后端基礎:Maven基礎

課程內容: 初始MavenMaven概述 Maven模型Maven倉庫介紹Maven安裝與配置 IDEA集成Maven依賴管理單元測試 1.初始Maven 1.1介紹 Maven 是一款用于管理和構建Java項目的工具,是Apache旗下的一個開源項目 。 Apache 軟件基金會,成立于1999年7月…

http協議同時傳輸文本和數據的新理解

首先,承認本人對于http協議認知確實不夠,從來沒有仔細研究這一塊。 其次,這回確實要把自己十幾年的理解更新一下了,主要還是自己過去沒有認真研究過http協議。 這一次是這么回事,碰到一個情況,要在一次消…

《安富萊嵌入式周報》第354期: 開源36通道16bit同步數據采集卡,開源PoE以太網GPIB,分體式鍵盤DIY,微軟WSL開源,USB轉車載以太網

周報匯總地址:嵌入式周報 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬漢嵌入式論壇 - Powered by Discuz! 視頻版: https://www.bilibili.com/video/BV1kJThzxETY/ 《安富萊嵌入式周報》第354期: 開源36通道16bit同…

Hyperlane 框架詳解與使用指南

hyperlane 是一個高性能且輕量級的 Rust HTTP 框架,設計目標是簡化現代 Web 服務的開發,同時兼顧靈活性和性能表現。本文將詳細介紹 hyperlane 框架的核心功能、API 設計、生命周期模型、路由支持及性能測試結果,幫助開發者快速掌握和應用該框…

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:來自 Elastic Jeffrey Rengifo 學習如何將 ES|QL 與 JavaScript 的 Apache Arrow 客戶端工具一起使用。 想獲得 Elastic 認證嗎?了解下一期 Elasticsearch Engineer 培訓的時間吧! Elasticsearch 擁有眾多新功能,助你為自己…

從零實現富文本編輯器#5-編輯器選區模型的狀態結構表達

先前我們總結了瀏覽器選區模型的交互策略,并且實現了基本的選區操作,還調研了自繪選區的實現。那么相對的,我們還需要設計編輯器的選區表達,也可以稱為模型選區。編輯器中應用變更時的操作范圍,就是以模型選區為基準來…

一個小小的 flask app, 幾個小工具,拼湊一下

1. 起因, 目的: 自己的工具,為自己服務。給大家做參考。項目地址: https://github.com/buxuele/flask_utils 2. 先看效果 3. 過程: 一個有趣的 Flask 工具集:從無到有的開發歷程 緣起:為什么要做這個項目&#xff…

織夢dedecms怎樣用標簽調用隨機數?

?在使用織夢模板建站中,隨機數作為一個偶爾使用到的參數,在具體使用中雖然用的少,但是今天跟版網小編給大家介紹下,大家可以參考下: 實現隨機數的調用可以使用下面的js: 方法一:js代碼 Math…

訪問服務器項目,服務器可以ping通,但是端口訪問不到

原因:端口未開放 假設項目部署服務器為205,在90服務器訪問205項目 1、首先在205確定項目啟動,看端口是否占用 # Windows(檢查端口占用) netstat -ano | findstr "8103"期望輸出: TCP 0.0.…

云原生核心技術 (7/12): K8s 核心概念白話解讀(上):Pod 和 Deployment 究竟是什么?

大家好,歡迎來到《云原生核心技術》系列的第七篇! 在上一篇,我們成功地使用 Minikube 或 kind 在自己的電腦上搭建起了一個迷你但功能完備的 Kubernetes 集群。現在,我們就像一個擁有了一塊嶄新數字土地的農場主,是時…

華為云Flexus+DeepSeek征文 | 基于ModelArts Studio、DeepSeek大模型和Dify搭建網站智能客服助手

目錄 一、前言 二、ModelArts Studio(MaaS)介紹與應用場景 2.1ModelArts Studio(MaaS)介紹 2.2 ModelArts Studio(MaaS)使用場景 2.3 開通MaaS服務 2.4 開通DeepSeek-V3商用服務 三、華為云Flexus簡介 3.1 …

『uniapp』url攔截屏蔽 避免webview中打開淘寶店鋪自動跳轉淘寶

目錄 分析1. wv.overrideUrlLoading2. 參數 `mode: allow`3. 參數 `match: ^(http|https)://.*`4. 回調函數 `function(e) { console.warn(allow url:, e.url); }`作用:可能的應用場景:核心代碼總結歡迎關注 『uniapp』 專欄,持續更新中 歡迎關注 『uniapp』 專欄,持續更新…

將對透視變換后的圖像使用Otsu進行閾值化,來分離黑色和白色像素。這句話中的Otsu是什么意思?

Otsu 是一種自動閾值化方法,用于將圖像分割為前景和背景。它通過最小化圖像的類內方差或等價地最大化類間方差來選擇最佳閾值。這種方法特別適用于圖像的二值化處理,能夠自動確定一個閾值,將圖像中的像素分為黑色和白色兩類。 Otsu 方法的原…

Zookeeper 和 Kafka 版本與 JDK 要求

Apache Zookeeper 和 Apache Kafka 在不同版本中對 JDK 的要求如下表所示(基于官方文檔和歷史版本記錄整理): 1. Zookeeper 版本與 JDK 要求 Zookeeper 版本要求的最低 JDK 版本說明3.4.x 系列JDK 6生產環境建議用 JDK 8(舊版兼容性強)。3.5.x 系列(3.5.5+)JDK 83.5.0 …

V837s-SDK Telnetd服務連接不上異常解決

目錄 前言 一、檢查 Telnetd 服務是否啟動 二、問題解決 總結 前言 在基于 V837s-SDK 進行開發的過程中,Telnetd 服務連接不上是一個較為常見且棘手的問題。Telnet 作為一種遠程登錄協議,在開發調試時為我們提供了便捷的遠程操作方式。若其連接出現異常,將嚴重影響開發進度…

滑動窗口最大值和最小值

題目: 思路: 窗口進行滑動時,需要快速獲取min和max,因此需要一個結構來保存最值,而不是臨時計算。動態的最值更新容易聯想到單調棧,但是這里需要頻繁增刪元素,因此用雙端隊列,front…

JVM——對象創建全家桶:JVM中對象創建的模式及最佳實踐

引入 在 Java 應用開發中,對象創建是最基礎且高頻的操作,但往往也是性能優化的關鍵切入點。想象一個在線閱讀平臺,每天需要創建數百萬個 Book 對象來統計閱讀數據。如果每個對象的創建過程存在內存浪費或性能瓶頸,累積效應將導致…