【Linux应用】RADXA ZERO 3快速上手:镜像烧录、串口shell、外设挂载、WiFi配置、SSH连接、文件交互
【Linux应用】RADXA ZERO 3快速上手:镜像烧录、串口shell、外设挂载、运行程序
参考:
ZERO 3 | Radxa Docs
大部分的Linux开发板等设备都大同小异 如树莓派、香橙派、STM32MP135的Linux开发板等
使用该文章实际上是一种比较通用的方式 其操作与别的板子大同小异
文章目录
- ZERO 3烧录
- ZERO 3串口shell
- 外设挂载
- 连接WiFi
- SSH连接
- SSH的文件交互
- 附录:C语言到C++的入门知识点(主要适用于C语言精通到Qt的C++开发入门)
- C语言与C++的不同
- C++中写C语言代码
- C语言到C++的知识点
- Qt开发中需要了解的C++基础知识
- namespace
- 输入输出
- 字符串类型
- class类
- 构造函数和析构函数(解析函数)
- 类的继承
ZERO 3烧录
ZERO 3有两种 最本质的就是一个带WiFi一个不带WiFi
ZERO 3作为一个Linux板 其存储支持从sd卡EFI启动
系统安装则直接通过Balena Etcher来进行
可以使用其Windows版本即可
官方文档:
官方文档快速上手描述
镜像下载则也可以使用官方镜像:
Radxa ZERO 3 Debian Build 6
该镜像是最初的镜像 很多依赖都没有
如果开发的话 可以直接下载第三方镜像 或者自己在原有官方镜像上去安装镜像包等等
烧录很简单 直接用工具选择U盘 选择镜像即可
下图为烧录好了的sd卡
除了系统分区外 就是一个config分区 其挂载根根目录名称即为config
ZERO 3串口shell
串口与ZERO 3链接如下图:
链接后 配置串口为
baudrate: 1500000
data bit: 8
stop bit: 1
parity : none
flow control: none
启动后 用户名和密码都为radxa
外设挂载
根据df
命令查询系统挂载点
其做好了的U盘外部存储空间为/config
连接WiFi
使用如下指令链接WiFi:
nmcli device wifi #扫描WiFi
sudo nmcli device wifi connect <ssid> password <passwd> #连接WiFi
连上后 使用ip a
命令即可查看连接状态和ip
SSH连接
使用命令sudo systemctl status ssh
查看ssh状态
前提是要安装ssh
如果没有安装 则通过shell安装ssh:
sudo apt-get update
sudo apt-get install openssh-server openssh-sftp-server
根据Active
判断是否需要重启ssh服务:
重启ssh服务:
sudo systemctl restart ssh
启动后如下:
Active
状态就被设置为了running
开机自启动ssh则使用命令:
sudo systemctl enable --now ssh
在PC上 支持ssh的设备中 使用以下指令链接到板子:
ssh [username]@[IP address] # or ssh [username]@[hostname]
如下图:
SSH的文件交互
若是在PC上作为主机去访问设备
那么就是在PC的cmd中运行shell
有的终端软件配备了ssh的文件管理传输功能
连上以后就可以直接搜素到当前目录下的各类文件 以便于实现文件管理
并且可以直接download
# 复制 Windows 文件到 Linux
scp D:\data\1.txt root@192.168.88.161:/root/data
# 复制 Windows 目录到 Linux(记得加 -r)
scp -r D:\data root@192.168.88.161:/root/data# 复制 Linux 文件到 Windows
scp root@192.168.88.161:/root/data/1.txt D:\data
# 复制 Linux 目录到 Windows(记得加 -r)
scp -r root@192.168.88.161:/root/data D:\data
前提是设备开启了ssh可以被链接
发过去后便能在板子上看到:
回传文件夹:
如果是Linux设备去连接Windows设备 则需要在Windows里面设置对应的服务 相关教程很多 这里不过多赘述
如果是Linux设备访问Linux设备 则主设备也要指定IP
scp root@192.168.88.161:/root/1.txt root@192.168.88.162:/root# 如果设置了Linux之间的免密登录,可这样写:
scp 192.168.88.161:///root/1.txt 192.168.88.162:///root
附录:C语言到C++的入门知识点(主要适用于C语言精通到Qt的C++开发入门)
C语言与C++的不同
C语言是一门主要是面向工程的语言
C++则是面向对象
C语言中 某些功能实现起来较为繁琐
比如结构体定义:
一般写作:
typedef struct stu_A
{
}A;
也可以写作:
typedef struct
{
}A;
但 大括号后面的名称是不可省去的
不过 C++的写法就比较简单
除了支持上述写法外
也支持直接声明
typedef struct A
{
}
另外 C++是完全支持C语言库和语法的
不过C++里面的库也有些很方便的高级功能用法 只不过实现起来可能不如C的速度快
再者 C语言与C++的编译流程不一样
C语言没有函数重载 所以给编译器传参就是直接传函数名称
但是C++除了传函数名称外 还会穿函数的参数、类型等等 以实现函数重载
C++中写C语言代码
上文提到 C++可以完全兼容C的写法
但是编译流程也还是不一样
所以如果在编译层面进行C语言代码编译 则通常用以下方法:
extern "C"
{
...
}
表面大括号内的内容用C的方法进行编译
另外 如果还是用C++的编译器 但要实现C语言函数 则需要用到C语言的库
在C语言中 我们一般用如下方法导入库
#include <stdio.h>
此方法同样适用于C++ 但是C++可以更方便的写成去掉.h的方式
比如:
#include <iostream>
在C++中 为了调用C语言的库 可以采用在原库名称前加一个"c"的方式导入
如:
#include <cstdio>
这样就可以使用printf等函数了 甚至比C++的std方法更快
C语言到C++的知识点
Qt开发中需要了解的C++基础知识
namespace
C++面向对象的特性下诞生的一个名称
表示某个函数、变量在某个集合下 用作namespace
比如 <iostream>
库中的关键字cin在std下 则写作std::cin
std就是namespace
::表示某空间下的某某
前面是空间名称 后面是变量、函数名称
用using namespace
可以告诉编译器以下都用xx名称空间
比如:
using namespace std;
cout<<"a";
如果没有告诉编译器所使用的空间名称 则要写成:
std::cout<<"a";
同样 可以自定义某一段代码属于哪个空间:
namespace xx
{
...
}
输入输出
在C++中 用iostream作为输入输出流的库
#include <iostream>
用cin和cout关键字进行输入和输出
如:
using namespace std;
int a=0;
cin>>a; //输入到acout<<a; //输出a
类比scanf和printf
同样 还有一个关键字endl表示换行
cout和cin的传参是不固定的
由编译器自行裁定
字符串类型
在C语言中 常用char *表示字符串
但是在C++中 可以直接用string类型
比如:
char * s="456";
string str="123";
由于cout的特性 这两种字符串都可以直接打印
但如果使用C语言中printf的打印方式时 采用%s方式打印字符串 则不能传入string类型
class类
C++的核心就是class
同Python等支持面向对象的语言一样
可以理解成一个支持函数、继承、自动初始化、销毁的结构体
在class类中 有private
私有、public
公有变量
前者只能内部访问 后者可以外部调用使用
如:
class A
{
public:
int a;
private:
int b;
}
a可以用A.a的方式方位 b则外部无法访问
构造函数和析构函数(解析函数)
构造函数可以理解成对类的初始化 反之析构函数则是退出时进行销毁前的函数
两者需要与类的名称相同 析构函数则在前面加一个~表示非
如:
class A
{
public:
int a;
A();
~A();
private:
int b;
}A::A()
{
...
}A::~A()
{
...
}
构造函数可以定义传参 析构函数则不行
类的继承
如果有两个类A和B 想让A里面包含B 则可以写作继承的写法
继承后 A类的变量可以直接调用B下面的成员
如:
class B
{
int b;
}
class A: public B
{
int a;
}
在定义A后 可以访问到B的成员b 当然 继承也可以私有