Orange Pi Zero 2W
Orange Pi Zero 2w的基本特性
什么是 Orange Pi Zero 2w
香橙派是一款开源的单板卡片电脑,新一代的arm64开发板,它可以运行Android TV 12、Ubuntu和Debian 等操作系统。香橙派开发板(Orange Pi Zero 2w)使用全志H618系统级芯片,同时可选1GB或1.5GB或2GB 或4GB LPDDR4内存。
Orange Pi Zero 2w的用途
我们可以用它实现:
- 一台小型的Linux桌面计算机
- 一台小型的Linux网络服务器
- 安装Klipper上位机控制3D打印机
- Android TV电视盒子
当然还有其他更多的功能,依托强大的生态系统以及各式各样的扩展配件,Orange Pi可以帮助用户轻松实现从创意到原型再到批量生产的交付,是创客、梦想家、业余爱好者的理想创意平台。
Orange Pi Zero 2w是为谁设计的
Orange Pi 开发板不仅仅是一款消费品,同时也是给任何想用技术来进行创作创新的人设计的。它是一款简单、有趣、实用的工具,你可以用它去打造你身边的世界。
Orange Pi Zero 2w的硬件特性
硬件特性介绍 | |
CPU | 全志H618四核64位1.5GHz高性能Cortex-A53处理器 |
GPU | Mali G31 MP2
Supports OpenGL ES 1.0/2.0/3.2、OpenCL 2.0 |
内存 | 1GB/1.5GB/2GB/4GB LPDDR4 (与GPU共享) |
板载存储 | TF卡插槽、16MB SPI Flash |
WIFI+蓝牙 | • 20U5622芯片、支持IEEE 802.11 a/b/g/n/ac、BT5.0 |
视频输出 | • Mini HDMI 2.0接口 |
音频输出 | • Mini HDMI输出 |
电源 | Type-C 5V/2A |
USB 2.0 端口 | Type-C USB2.0 x 2 |
40pin扩展接口 | 用于扩展GPIO、UART、I2C、SPI、PWM |
24pin扩展接口 | 用于扩展USB2.0 x 2、100M以太网、红外接 收、音频输出、TV-OUT输出、开关机按键、LRADC按键 x 2 |
LED灯 | 电源指示灯和状态指示灯 |
支持的操作系统 | Android 12 TV,Debi an11,Debian12,Ubuntu22.04,Ubuntu20.04,Orange Pi OS(Arch)等 |
外观规格介绍 | |
PCB尺寸 | 30mm x 65mm x 1.2mm |
重量 | 12.5g |
文件:Media/image1. png{width=“0.255 55555555555554in” h eight=“0.27638888 88888889in”}range Pi™ 是 深圳市迅龙软件有 限公司的注册商标 |
Orange Pi Zero 2w的顶层视图和底层视图
顶层视图:
底层视图:
Orange Pi Zero 2w的接口详情图
Orange Pi Zero 2w 24pin扩展板的接口详情图
四个定位孔的直径都是3.0mm。
开发板使用介绍
准备需要的配件
TF卡,最小8GB容量的class10级或以上的高速闪迪卡
使用其他品牌的TF卡(非闪迪的TF卡),如下图所示(包含但不仅限这些卡),已经有朋友反馈系统启动过程中会出现问题,比如系统启动到一半卡住不动,或者reboot命令无法正常使用,最后都是换了闪迪牌的TF卡后才解决的。所以如果您使用的是非闪迪牌的TF卡发现系统启动或者使用过程有问题,请更换闪迪牌的TF卡后再测试。
103x85px112x85px114x85px86x109px
目前反馈在Orange Pi Zero 2w上启动有问题的部分TF卡
另外,在其他型号的开发板上能正常使用的TF卡并不能保证在Orange Pi Zero 2w上也一定能正常启动,这点请特别注意。
TF卡读卡器,用于读写TF卡
Mini HDMI转HDMI连接线,用于将开发板连接到HDMI显示器或者电视进行显示
电源,如果有5V/2A或5V/3A的电源头那就只需要准备一根下面左边图片所示的USB转Type C接口的数据线,另外也可以使用类似下面右边图片所示的线和电源头一体的5V/2A或者5V/3A的高品质USB Typc C接口电源适配器。
IMG_4194(20201104-125502) IMG_6179(20220116-151727)
开发板上的两个Type-C接口都可以用来供电。
24pin扩展板
USB接口的鼠标和键盘,只要是标准USB接口的鼠标和键盘都可以,鼠标和键盘可以用来控制Orange Pi开发板
红外遥控器,主要用于控制安卓TV系统
注意,空调的遥控或者电视机的遥控是无法控制Orange Pi开发板的,默认只有Orange Pi提供的遥控才可以。
网线,用于将开发板连接到因特网
AV视频线,如果希望通过TV-OUT接口而不是HDMI接口来显示视频,那么就需要通过AV视频线将开发板连接到电视
散热片,如果担心开发板的温度过高,可以加些散热片,散热片贴在H618芯片和内存芯片上即可
5V的散热风扇,如下图所示,开发板的40pin接口上有5V和GND引脚可以接散热风扇,40pin排针的间距为2.54mm,散热风扇的电源接口参照这个规格去购买即可。
注意,开发板插上电源后5V引脚就可以直接使用,无需其他设置,另外5V引脚输出的电压是无法通过软件调节和关闭的。
40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。
Type-C转USB线,用于接USB设备
USB转TTL模块和杜邦线,使用串口调试功能时,需要USB转TTL模块和杜邦线来连接开发板和电脑
注意,开发板使用的TTL电平是3.3v的,除了上图所示的USB转TTL模块外,其他类似的3.3v的USB转TTL模块一般也都是可以的。
安装有Ubuntu和Windows操作系统的X64电脑
1 | Ubuntu22.04 PC | 可选,用于编译Android和Linux源码 |
2 | Windows PC | 用于烧录Android和Linux镜像 |
下载开发板的镜像和相关的资料
- 中文版资料的下载网址为
英文版资料的下载网址为
资料主要包含
Android源码:保存在百度云盘和谷歌网盘上
Linux源码:保存在Github上
Android镜像:保存在百度云盘和谷歌网盘上
Ubuntu镜像:保存在百度云盘和谷歌网盘上
Debian镜像:保存在百度云盘和谷歌网盘上
Orange Pi OS (Arch)镜像:保存在百度云盘和谷歌网盘上
用户手册和原理图:芯片相关的数据手册也会放在这里
官方工具:主要包括开发板使用过程中需要用到的软件
基于Windows PC将Linux镜像烧写到TF卡的方法
注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian或者Ubuntu这样的Linux发行版镜像。
使用balenaEtcher烧录Linux镜像的方法
- 首先准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为class10级或class10级以上,建议使用闪迪等品牌的TF卡
- 然后使用读卡器把TF卡插入电脑
- 从Orange Pi的资料下载页面下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”.img”结尾的文件就是操作系统的镜像文件,大小一般都在1GB以上
- 然后下载Linux镜像的烧录软件——balenaEtcher,下载地址为
进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方
然后可以选择下载balenaEtcher的Portable版本的软件,Portable版本无需安装,双击打开就可以使用
如果下载的是需要安装版本的balenaEtcher,请先安装再使用。如果下载的Portable版本balenaEtcher,直接双击打开即可,打开后的balenaEtcher界面如下图所示
打开balenaEtcher时如果提示下面的错误:
请选择balenaEtcher后点击右键,然后选择以管理员身份运行。
使用balenaEtcher烧录Linux镜像的具体步骤如下所示
首先选择要烧录的Linux镜像文件的路径
然后选择TF卡的盘符
最后点击Flash就会开始烧录Linux镜像到TF卡中
balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中
Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验
成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了
使用Win32Diskimager烧录Linux镜像的方法
首先准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为class10级或class10级以上,建议使用闪迪等品牌的TF卡
然后使用读卡器把TF卡插入电脑
接着格式化TF卡
- 可以使用SD Card Formatter这个软件格式化TF卡,其下载地址为
https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip
下载完后直接解压安装即可,然后打开软件
如果电脑只插入了TF卡,则”Select card”一栏中会显示TF卡的盘符,如果电脑插入了多个USB存储设备,可以通过下拉框选择TF卡对应的盘符
然后点击”Format”,格式化前会弹出一个警告框,选择”是(Y)”后就会开始格式化
格式化完TF卡后会弹出下图所示的信息,点击确定即可
从Orange Pi的资料下载页面下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”.img”结尾的文件就是操作系统的镜像文件,大小一般都在1GB以上
使用Win32Diskimager烧录Linux镜像到TF卡
- Win32Diskimager的下载页面为
http://sourceforge.net/projects/win32diskimager/files/Archive/
下载完后直接安装即可,Win32Diskimager界面如下所示
首先选择镜像文件的路径
然后确认下TF卡的盘符和”设备”一栏中显示的一致
最后点击”写入”即可开始烧录
镜像写入完成后,点击”退出”按钮退出即可,然后就可以拔出TF卡插到开发板中启动
基于Ubuntu PC将Linux镜像烧写到TF卡的方法
注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian或者Ubuntu这样的Linux发行版镜像,Ubuntu PC指的是安装了Ubuntu系统的个人电脑。
- 首先准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为class10级或class10级以上,建议使用闪迪等品牌的TF卡
- 然后使用读卡器把TF卡插入电脑
- 下载balenaEtcher软件,下载地址为
进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方
然后选择下载Linux版本的软件即可
从Orange Pi的资料下载页面下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”.img”结尾的文件就是操作系统的镜像文件,大小一般都在1GB以上。7z结尾的压缩包的解压命令如下所示:
test@test:~$ 7z x orangepizero2w_1.0.0_ubuntu_focal_desktop_linux6.1.31.7z
test@test:~$ ls orangepizero2w_1.0.0_ubuntu_focal_desktop_linux6.1.31.*
orangepizero2w_1.0.0_ubuntu_focal_desktop_linux6.1.31.7z orangepizero2w_1.0.0_ubuntu_focal_desktop_linux6.1.31.sha #校验和文件
orangepizero2w_1.0.0_ubuntu_focal_desktop_linux6.1.31.img #镜像文件
解压镜像后可以先用sha256sum -c *.sha命令计算下校验和是否正确,如果提示成功说明下载的镜像没有错,可以放心的烧录到TF卡,如果提示校验和不匹配说明下载的镜像有问题,请尝试重新下载
test@test:~$ sha256sum -c *.sha
orangepizero2w_1.0.0_ubuntu_focal_desktop_linux6.1.31.img: 成功
然后在Ubuntu PC的图形界面双击balenaEtcher-1.14.3-x64.AppImage即可打开balenaEtcher(无需安装),balenaEtcher打开后的界面显示如下图所示
使用balenaEtcher烧录Linux镜像的具体步骤如下所示
首先选择要烧录的Linux镜像文件的路径
然后选择TF卡的盘符
最后点击Flash就会开始烧录Linux镜像到TF卡中
balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中
Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验
成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了
烧写Android镜像到TF卡的方法
开发板的Android镜像只能在Windows平台下使用PhoenixCard软件烧录到TF卡中,PhoenixCard软件的版本必须为PhonixCard-4.2.8。
请不要用烧录Linux镜像的软件,如Win32Diskimager或者balenaEtcher来烧录安卓镜像。
另外PhoenixCard这款软件没有Linux和Mac平台的版本,所以在Linux和Mac平台下是无法烧录安卓镜像到TF卡中的。
首先请确保Windows系统已经安装了Microsoft Visual C++ 2008 Redistrbutable - x86
如果没有安装Microsoft Visual C++ 2008 Redistrbutable - x86
,使用PhoenixCard格式化TF卡或者烧录Android镜像会提示下面的错误
Microsoft Visual C++ 2008 Redistrbutable - x86的安装包可以从Orange Pi Zero 2w的官方工具中下载到,也可以去微软官网下载
然后准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为class10级或class10级以上,建议使用闪迪等品牌的TF卡
然后使用读卡器把TF卡插入电脑
从Orange Pi的资料下载页面下载Android镜像和PhoenixCard烧写工具,请确保PhonenixCrad工具的版本为PhonixCard-4.2.8,请不要用低于4.2.8版本的PhonixCard软件来烧录Android镜像,低于这个版本的PhonixCard工具烧写的Android镜像可能会有问题
然后使用解压软件解压下载的Android镜像的压缩包,解压后的文件中,以”.img” 结尾的文件就是Android镜像文件,大小在1GB以上。如果不知道怎么解压Android镜像的压缩包,可以安装一个360压缩软件来解压镜像。
然后使用解压软件解压PhonixCard4.2.8.zip,此软件无需安装,在解压后的文件夹中找到PhoenixCard打开即可
打开PhoenixCard后,如果TF卡识别正常,会在中间的列表中显示TF卡的盘符和容量,请务必确认显示的盘符和你想烧录的TF卡的盘符是一致的,如果没有显示可以尝试拔插下TF卡,或者点击PhoenixCard中的”刷新盘符”按钮
确认完盘符后,先格式化TF卡,点击PhoenixCard中”恢复卡”按钮即可(如果”恢复卡”按钮为灰色的无法按下,可以先点击下”刷新盘符”按钮)
如果格式化有问题,请尝试拔插下TF卡后再测试,如果重新拔插TF卡后还是有问题,可以重启下Window电脑或者换一台电脑再试下。
然后开始将Android镜像写入TF卡
首先在”固件”一栏中选择Android镜像的路径
在”制作卡的种类”中选择”启动卡”
然后点击”烧卡”按钮就会开始烧录
烧录完后PhoenixCard的显示如下图所示,此时点击”关闭”按钮即可退出PhoenixCard,然后就可以把TF卡从电脑中拔出来插到开发板中启动了
烧录完Android系统后在Windows中TF卡只能看到一个128 MB的分区,显示的分区如下图所示(有些电脑可能会弹出二十几个磁盘分区,但也只能打开128 MB的那个分区),请注意,这是正常的,请不要以为TF卡烧坏了。之所以这样,是因为安卓系统总共有二十几个分区,但大部分分区在Windows系统中是无法正常识别的。此时,请放心的拔下TF卡然后插入开发板中启动即可。
安卓系统启动后,使用下面的命令可以看到TF卡中的这二十几个分区:
使用df -h命令可以看到16GB的TF卡烧录完安卓系统后大概还有11 GB的空间可以用使用(二十几个分区并不会都挂载到安卓系统中,重点关注这些能看到的分区即可)。
板载SPI Flash中的微型linux系统使用说明
开发板上有一个16MB大小的SPI Flash,其所在位置如下图所示:
SPI Flash中默认烧录有一个微型的Linux系统,此系统主要用于证明开发板是能正常启动的。当拿到开发板后,不用烧录系统到TF卡中,只需要给开发板接上Type-C电源就能启动SPI Flash中的微型Linux系统。此系统的主要功能有:
开机进入内核后,会设置绿色的LED灯闪烁;
如果开发板接了HDMI屏幕,系统启动完成后,在HDMI屏幕中能看到微型Linux系统的命令行界面。
再强调下,SPI Flash中微型的Linux系统只是用于证明开发板是能正常启动的(不需要烧录系统就可以点亮开发板),如果你发现SPI Flash中的系统存在其他问题(比如串口无法登录),请直接忽略。
如果想正常使用开发板,请烧录Ubuntu、Debian等Linux镜像或者安卓镜像到TF卡中,然后再使用。
启动香橙派开发板
- 将烧录好镜像的TF卡插入香橙派开发板的TF卡插槽中。
- 开发板有Mini HDMI接口,可以通过Mini HDMI转HDMI连接线把开发板连接到电视或者HDMI显示器。
- 如果购买了24pin的扩展板,可以将24pin的扩展板通过排线接到开发板的24pin接口中。
- 接上USB鼠标和键盘,用于控制香橙派开发板。
- 连接一个5V/2A(5V/3A的也可以)的USB Type C接口的高品质的电源适配
切记不要插入电压输出大于5V的电源适配器,会烧坏开发板。
系统上电启动过程中很多不稳定的现象基本都是供电有问题导致的,所以一个靠谱的电源适配器很重要。如果启动过程中发现有不断重启的现象,请更换下电源或者Type C数据线再试下。
开发板上的两个Type-C接口都可以用来供电。
然后打开电源适配器的开关,如果一切正常,此时HDMI显示器就能看到系统的启动画面了。
如果想通过调试串口查看系统的输出信息,请使用串口线将开发板连接到电脑,串口的连接方法请参看调试串口的使用方法一节。
调试串口的使用方法
调试串口的连接说明
首先需要准备一个3.3v的USB转TTL模块,然后将USB转TTL模块的USB接口一端插入到电脑的USB接口中
开发板的调试串口GND、TX和RX引脚的对应关系如下图所示
注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。
USB转TTL模块GND、TX和RX引脚需要通过杜邦线连接到开发板的调试串口上
USB转TTL模块的GND接到开发板的GND上
USB转TTL模块的RX接到开发板的TX上
USB转TTL模块的TX接到开发板的RX上
USB转TTL模块连接电脑和Orange Pi开发板的示意图如下所示
串口的TX和RX是需要交叉连接的,如果不想仔细区分TX和RX的顺序,可以把串口的TX和RX先随便接上,如果测试串口没有输出再交换下TX和RX的顺序,这样就总有一种顺序是对的。
Ubuntu平台调试串口的使用方法
Linux下可以使用的串口调试软件有很多,如putty、minicom等,下面演示下putty的使用方法。
首先将USB转TTL模块插入Ubuntu电脑的USB接口,如果USB转TTL模块连接识别正常,在Ubuntu PC的/dev下就可以看到对应的设备节点名,记住这个节点名,后面设置串口软件时会用到
test@test:~$ ls /dev/ttyUSB*
/dev/ttyUSB0
然后使用下面的命令在Ubuntu PC上安装下putty
test@test:~$ sudo apt update
test@test:~$ sudo apt install -y putty
然后运行putty,记得加sudo权限
test@test:~$ sudo putty
执行putty命令后会弹出下面的界面
首先选择串口的设置界面
然后设置串口的参数
设置Serial line to connect > to为/dev/ttyUSB0(修改为对应的节点名,一般为/dev/ttyUSB0)
设置Speed(baud)为115200(串口的波特率)
设置Flow control为None
在串口的设置界面设置完后,再回到Session界面
首先选择Connection type为Serial
然后点击Open按钮连接串口
然后启动开发板,就能从打开的串口终端中看到系统输出的Log信息了
Windows平台调试串口的使用方法
Windows下可以使用的串口调试软件有很多,如SecureCRT、MobaXterm等,下面演示MobaXterm的使用方法,这款软件有免费版本,无需购买序列号即可使用。
下载MobaXterm
下载MobaXterm网址如下
进入MobaXterm下载网页后点击GET XOBATERM NOW!
然后选择下载Home版本
然后选择Portable便携式版本,下载完后无需安装,直接打开就可以使用
下载完后使用解压缩软件解压下载的压缩包,即可得到MobaXterm的可执软件,然后双击打开
打开软件后,设置串口连接的步骤如下
打开会话的设置界面
选择串口类型
选择串口的端口号(根据实际的情况选择对应的端口号),如果看不到端口号,请使用360驱动大师扫描安装USB转TTL串口芯片的驱动
选择串口的波特率为115200
最后点击”OK”按钮完成设置
点击”OK”按钮后会进入下面的界面,此时启动开发板就能看到串口的输出信息了
使用开发板40pin接口中的5v引脚供电说明
我们推荐的开发板的供电方式是使用5V/2A或者5V/3A的Type C接口的电源线插到开发板的Type C电源接口来供电的。如果需要使用40pin接口中的5V引脚来给开发板供电,请确保使用的电源线能满足开发板的供电需求。如果有使用不稳定的情况,请换回Type C电源供电。
注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。
首先需要准备一根下图所示的电源线
上图所示的电源线在淘宝可以买到,请自行搜索购买。
使用40pin接口中的5V引脚来给开发板供电,电源线的接法如下所示:
上图所示的电源线USB-A口需要插到5V/2A或者5V/3A的电源适配器接头上
红色的杜邦线需要插到开发板40pin接口的5V引脚上
黑色的杜邦线需要插到40pin接口的GND引脚上
40pin接口5V引脚和GND引脚在开发板中的位置如下图所示,切记不要接反了
Debian/Ubuntu Server和Xfce桌面系统使用说明
已支持的linux镜像类型和内核版本
Linux镜像类型 | 内核版本 | 服务器版 | 桌面版 |
Ubuntu 20.04 - Focal | Linux5.4 | 支持 | 支持 |
Debian 11 - Bullseye | Linux5.4 | 支持 | 支持 |
Ubuntu 22.04 - Jammy | Linux6.1 | 支持 | 支持 |
Debian 11 - Bullseye | Linux6.1 | 支持 | 支持 |
Debian 12 - Bookworm | Linux6.1 | 支持 | 支持 |
在Orange Pi的资料下载页面进入对应开发板的下载页面后可以看到下面的下载选项,在下文的描述中,Ubuntu镜像和Debian镜像一般统称为Linux镜像。
Linux镜像的命名规则为:
开发板型号_版本号_Linux发行版类型_发行版代号_服务器或桌面_内核版本
开发板的型号:都是orangepizero2w。不同开发板的型号名一般都是不同的,烧录镜像前,请确保所选择镜像的这个型号名和开发板是匹配的。
版本号:如1.x.x,这个版本号会随着镜像功能的更新而递增,另外开发板Linux镜像的版本号最后一个数字都是偶数。
Linux发行版的类型:目前支持Ubuntu和Debian。由于Ubuntu源自Debian,所以两个系统在使用上来说总体区别不大。但部分软件的默认配置和命令的使用上还是有些许区别的,另外Ubuntu和Debian都各自有维护所支持的软件仓库,在支持的可安装的软件包上也是有些许差异的。这些需要亲自去使用体验才会有比较深刻的认识。有关更多的细节,可以参考下Ubuntu和Debian官方提供的文档。
发行版代号:用来区分Ubuntu或者Debian这样具体的Linux发行版的不同版本。其中focal和jammy都是Ubuntu发行版,focal表示Ubuntu20.04,jammy表示Ubuntu22.04,不同版本的最大的区别是新版本的Ubuntu系统维护的软件仓库的中的软件很多都比旧版本的Ubuntu系统中的要新,比如Python和GCC编译工具链等。bullseye是Debian的具体版本代号,bullseye表示Debian11,bookworm表示Debian12。
服务器或桌面:用来表示系统是否带桌面环境,如果为server就表示系统没有安装桌面环境,镜像占用的存储空间和资源比较小,主要使用命令行来操作控制系统。如果为desktop_xfce就表示系统默认安装有XFCE桌面环境,镜像占用的存储空间和资源比较大,可以接显示器和鼠标键盘通过界面来操作系统。当然desktop版本的系统也可以像server版本的系统一样通过命令行来操作。
内核版本:用来表示linux内核的版本号,目前支持linux5.4和linux6.1。
linux内核驱动适配情况
主板功能 | Linux5.4 | Linux6.1 |
HDMI视频 | OK | OK |
HDMI音频 | OK | OK |
Type-C USB2.0 x 2 | OK | OK |
TF卡启动 | OK | OK |
WIFI | OK | OK |
蓝牙 | OK | OK |
USB摄像头 | OK | OK |
LED灯 | OK | OK |
40pin GPIO | OK | OK |
40pin I2C | OK | OK |
40pin SPI | OK | OK |
40pin UART | OK | OK |
40pin PWM | OK | OK |
温度传感器 | OK | OK |
硬件看门狗 | OK | OK |
Mali GPU | NO | NO |
视频编解码 | NO | NO |
24pin扩展板功能 | Linux5.4 | Linux6.1 |
百兆网口 | OK | OK |
百兆网口灯 | OK | OK |
USB2.0 HOST x 2 | OK | OK |
红外接收 | OK | OK |
耳机音频播放 | OK | OK |
开关机按键 | OK | OK |
LRADC自定义按键 x 2 | OK | OK |
TV-OUT | NO | NO |
本手册linux命令格式说明
本手册中所有需要在Linux系统中输入的命令都会使用下面的方框框起来
如下所示,黄色方框里内容表示需要特别注意的内容,这里面的命令除外。
命令前面的提示符类型说明
命令前面提示符指的是下面方框内红色部分的内容,这部分内容不是linux命令的一部分,所以在linux系统中输入命令时,请不要把红色字体部分的内容也输入进去。
orangepi@orangepi:~$ sudo apt update
root@orangepi:~# vim /boot/boot.cmd
test@test:~$ ssh root@192.168.1.xxx
root@test:~# ls
root@orangepi:~$ > 提示符表示这个命令是在开发板的linux系统中输入的, > 提示符最后的 $ > 表示系统当前用户为普通用户,当执行特权命令时,需要加上sudo
root@orangepi:~# > 提示符表示这个命令是在开发板的linux系统中输入的, > 提示符最后的 # > 表示系统当前用户为root用户,可以执行任何想要执行的命令
test@test:~$ 提示符表示这个命令是在Ubuntu > PC或者Ubuntu虚拟机中输入的,而不是开发板的linux系统中。提示符最后的 > $ > 表示系统当前用户为普通用户,当执行特权命令时,需要加上sudo
root@test:~# 提示符表示这个命令是在Ubuntu > PC或者Ubuntu虚拟机中输入的,而不是开发板的linux系统中。提示符最后的 > # 表示系统当前用户为root用户,可以执行任何想要执行的命令
哪些是需要输入的命令?
如下所示,黑色加粗部分是需要输入的命令,命令下面的是输出的内容(有些命令有输出,有些可能没有输出),这部分内容是不需要输入的
root@orangepi:~# cat /boot/orangepiEnv.txt
verbosity=7
bootlogo=false
console=serial
如下所示,有些命令一行写不下会放到下一行,只要黑色加粗的部分就都是需要输入的命令。当这些命令输入到一行的时候,每行最后的”\”是需要去掉的,这个不是命令的一部分。另外命令的不同部分都是有空格的,请别漏了
orangepi@orangepi:~$ echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
linux系统登录说明
linux系统默认登录账号和密码
账号 | 密码 |
root | orangepi |
orangepi | orangepi |
注意,输入密码的时候,屏幕上是不会显示输入的密码的具体内容的,请不要以为是有什么故障,输入完后直接回车即可。
当输入密码提示错误,或者ssh连接有问题,请注意,只要使用的是Orange Pi提供的Linux镜像,就请不要怀疑上面的密码不对,而是要找其它的原因。
设置linux系统终端自动登录的方法
linux系统默认就是自动登录终端的,默认登录的用户名是orangepi
使用下面的命令可以设置root用户自动登录终端
orangepi@orangepi:~$ sudo auto_login_cli.sh root
使用下面的命令可以禁止自动登录终端
orangepi@orangepi:~$ sudo auto_login_cli.sh -d
使用下面的命令可以再次设置orangepi用户自动登录终端
orangepi@orangepi:~$ sudo auto_login_cli.sh orangepi
linux桌面版系统自动登录说明
桌面版系统启动后会自动登录进入桌面,无需输入密码
运行下面的命令可以禁止桌面版系统自动登录桌面
orangepi@orangepi:~$ sudo disable_desktop_autologin.sh
然后重启系统就会出现登录对话框,此时需要输入密码才能进入系统
Linux桌面版系统root用户自动登录的设置方法
执行下面的命令可以设置桌面版系统使用root用户自动登录
orangepi@orangepi:~$ sudo desktop_login.sh root
然后重启系统,就会自动使用root用户登录桌面了
注意,如果使用root用户登录桌面系统,是无法使用右上角的pulseaudio来管理音频设备的。
另外请注意这并不是一个bug,因为pulseaudio本来就不允许在root用户下运行。
执行下面的命令可以再次设置桌面版系统使用orangepi用户自动登录
orangepi@orangepi:~$ sudo desktop_login.sh orangepi
Linux桌面版系统禁用桌面的方法
首先在命令行中输入下面的命令,请记得加sudo权限
orangepi@orangepi:~$ sudo systemctl disable lightdm.service
然后重启Linux系统就会发现不会显示桌面了
orangepi@orangepi:~$ sudo reboot
重新打开桌面的命令如下所示,请记得加sudo权限
orangepi@orangepi:~$ sudo systemctl start lightdm.service
orangepi@orangepi:~$ sudo systemctl enable lightdm.service
板载LED灯测试说明
- 开发板上有两个LED灯,一个绿灯,一个红灯,系统启动时LED灯默认显示情况如下所示:
绿灯 | 红灯 | |
u-boot启动阶段 | 灭 | 亮 |
内核启动到进入系统 | 闪烁 | 亮 |
开发板上的绿灯可以通过软件来控制,红灯上电后就会常亮,无法通过软件来控制。
当拿到开发板后,您可能会发现开发板上就算没有插入烧录有系统的TF卡,给开发板接上电源后,绿灯也会闪烁,这是因为开发板上的16MB SPI Flash出厂默认会烧录一个微型的Linux系统,此系统在进入内核后会设置绿灯闪烁。
如果SPI Flash中的Linux系统被清空了,那么不插入烧录有系统的TF卡,接通电源后,开发板上就只会看到红灯常亮了。
设置绿灯亮灭和闪烁的方法如下所示:
注意,下面的操作请在root用户下进行。
首先进入绿灯的设置目录
root@orangepi:~# cd /sys/class/leds/green_led
设置绿灯停止闪烁的命令如下
root@orangepi:/sys/class/leds/green_led# echo none > trigger
设置绿灯常亮的命令如下
root@orangepi:/sys/class/leds/green_led# echo default-on > trigger
设置绿灯闪烁的命令如下
root@orangepi:/sys/class/leds/green_led# echo heartbeat > trigger
如果开机后不需要LED灯闪烁,可以使用下面的方法来关闭绿灯闪烁
TF卡中linux系统rootfs分区容量操作说明
第一次启动会自动扩容TF卡中rootfs分区的容量
将开发板的Linux镜像烧录到TF卡中后,可以在Ubuntu电脑中查看下TF卡容量的使用情况,步骤如下所示:
注意,这一步不操作是不影响开发板的Linux系统自动扩容的。这里只是想说明TF卡烧录完Linux镜像后,怎么查看TF卡容量的方法。
首先在Ubuntu电脑中安装下gparted这个软件
test@test:~$ sudo apt install -y gparted
然后打开gparted
test@test:~$ sudo gparted
打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况
上图显示的是烧录完Linux桌面版系统后TF卡的情况,可以看到,虽然TF卡的总容量是16GB的(在GParted中显示为14.84GiB),但是rootfs分区(/dev/sdc1)实际只分配了4.05GiB,还剩下10.79GiB未分配
然后可以将烧录好Linux系统的TF卡插入开发板中启动,TF卡第一次启动linux系统时会通过orangepi-resize-filesystem.service这个systemd服务来调用orangepi-resize-filesystem脚本自动进行rootfs分区的扩容,所以无需再手动扩容
登录系统后可以通过df -h命令来查看rootfs的大小,如果和TF卡的实际容量一致,说明自动扩容运行正确
orangepi@orangepi:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 430M 0 430M 0% /dev
tmpfs 100M 5.6M 95M 6% /run
/dev/mmcblk0p1 15G 915M 14G 7% /
tmpfs 500M 0 500M 0% /dev/shm
第一次启动完Linux系统后,我们还可以将TF卡从开发板中取下来重新插入Ubuntu电脑,然后再次使用gparted查看下TF卡的情况,如下图所示,rootfs分区(/dev/sdc1)的容量已经扩展到了14.69GiB了
需要注意的是,linux系统只有一个ext4格式的分区,没有使用单独的BOOT分区来存放内核镜像等文件,所以也就不存在BOOT分区扩容的问题。
禁止自动扩容TF卡中rootfs分区容量的方法
首先在Ubuntu电脑(Windows不行)中将开发板的linux镜像烧录到TF卡中,然后重新拔插下TF卡
然后Ubuntu电脑一般会自动挂载TF卡的分区,如果自动挂载正常,使用ls命令可以看到下面的输出
test@test:~$ ls /media/test/opi_root/
bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var
然后在Ubuntu电脑中将当前用户切换成root用户
test@test:~$ sudo -i
[sudo] test 的密码:
root@test:~#
然后进入TF卡中的linux系统的root目录下新建一个名为.no_rootfs_resize的文件
root@test:~# cd /media/test/opi_root/
root@test:/media/test/opi_root/# cd root
root@test:/media/test/opi_root/root# touch .no_rootfs_resize
root@test:/media/test/opi_root/root# ls .no_rootfs*
.no_rootfs_resize
然后就可以卸载TF卡,再拔出TF卡插到开发板中启动,linux系统启动时,当检测到/root目录下有.no_rootfs_resize这个文件就不会再自动扩容rootfs了
禁止rootfs自动扩容后进入Linux系统可以看到rootfs分区的总容量只有4GB(这里测试的是桌面版本的镜像),远小于TF卡的实际容量,说明禁止rootfs自动扩容成功
orangepi@orangepi:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 925M 0 925M 0% /dev
tmpfs 199M 3.2M 196M 2% /run
/dev/mmcblk0p1 4.0G 3.2G 686M 83% /
如果需要重新扩容TF卡中rootfs分区的容量,只需要执行下面的命令,然后重新启动开发板的Linux系统即可
注意,请在root用户下执行下面的命令。
root@orangepi:~# rm /root/.no_rootfs_resize
root@orangepi:~# systemctl enable orangepi-resize-filesystem.service
root@orangepi:~# sudo reboot
重启后再次进入开发板的Linux系统就可以看到rootfs分区已经扩展为TF卡的实际容量了
root@orangepi:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 925M 0 925M 0% /dev
tmpfs 199M 3.2M 196M 2% /run
/dev/mmcblk0p1 15G 3.2G 12G 23% /
手动扩容TF卡中rootfs分区容量的方法
如果TF卡的总容量很大,比如为128GB,不想Linux系统rootfs分区使用TF卡所有的容量,只想分配一部分容量,比如16GB,给Linux系统使用,然后TF卡的剩余容量就可以用作其他用途。那么可以使用此小节介绍的内容来手动扩容TF中rootfs分区的容量。
首先在Ubuntu电脑(Windows不行)中将开发板的linux镜像烧录到TF卡中,然后重新拔插下TF卡
然后Ubuntu电脑一般会自动挂载TF卡的分区,如果自动挂载正常,使用ls命令可以看到下面的输出
test@test:~$ ls /media/test/opi_root/
bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var
然后在Ubuntu电脑中将当前用户切换成root用户
test@test:~$ sudo -i
[sudo] test 的密码:
root@test:~#
然后进入TF卡中的linux系统的root目录下新建一个名为.no_rootfs_resize的文件
root@test:~# cd /media/test/opi_root/
root@test:/media/test/opi_root/# cd root
root@test:/media/test/opi_root/root# touch .no_rootfs_resize
root@test:/media/test/opi_root/root# ls .no_rootfs*
.no_rootfs_resize
然后在Ubuntu电脑中安装下gparted这个软件
test@test:~$ sudo apt install -y gparted
然后打开gparted
test@test:~$ sudo gparted
打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况。下图显示的是烧录完Linux桌面版系统后TF卡的情况,可以看到,虽然TF卡的总容量是16GB的(在GParted中显示为14.84GiB),但是rootfs分区(/dev/sdc1)实际只分配了4.05GiB,还剩下10.79GiB未分配
然后选中rootfs分区(/dev/sdc1)
再点击鼠标右键就可以看到下图所示的操作选项,如果TF卡已经挂载了,首先需要Umount掉TF卡的rootfs分区
然后再次选中rootfs分区,再点击鼠标右键,然后选择Resize/Move开始扩容rootfs分区的大小
Resize/Move选项打开后会弹出下面的设置界面
然后可以直接拖动下图所示的位置来设置容量的大小,也可以通过设置New size(MiB)中的数字来设置rootfs分区的大小
设置好容量后,再点击右下角的Resize/Move即可
最后确认无误后,再点击下图所示的绿色√
然后选择Apply,就会正式开始扩容rootfs分区的容量
扩容完成后点击Close关闭即可
然后就可以把TF卡拔下来,再插到开发板中启动,进入开发板的Linux系统中后如果使用df -h命令可以看到rootfs分区的大小和前面设置的大小一致的话就说明手动扩容成功
root@orangepi:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 925M 0 925M 0% /dev
tmpfs 199M 3.2M 196M 2% /run
/dev/mmcblk0p1 7.7G 3.2G 4.4G 42% /
缩小TF卡中rootfs分区容量的方法
在TF卡的Linux系统中配置好应用程序或者其他的开发环境后,如果想备份下TF卡中的Linux系统,可以使用此小节的方法先缩小下rootfs分区的大小,然后再开始备份。
首先在Ubuntu电脑(Windows不行)中插入想要操作的TF卡
然后在Ubuntu电脑中安装下gparted这个软件
test@test:~$ sudo apt install -y gparted
然后打开gparted
test@test:~$ sudo gparted
打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况
然后选中rootfs分区(/dev/sdc1)
再点击鼠标右键就可以看到下图所示的操作选项,如果TF卡已经挂载了,首先需要Umount掉TF卡的rootfs分区
然后再次选中rootfs分区,再点击鼠标右键,然后选择Resize/Move开始设置rootfs分区的大小
Resize/Move选项打开后会弹出下面的设置界面
然后可以直接拖动下图所示的位置来设置容量的大小,也可以通过设置New sieze(MiB)中的数字来设置rootfs分区的大小
设置好容量后,再点击右下角的Resize/Move即可
最后确认无误后,再点击下图所示的绿色√
然后选择Apply,就会正式开始扩容rootfs分区的容量
扩容完成后点击Close关闭即可
然后就可以把TF卡拔下来,再插到开发板中启动,进入开发板的Linux系统中后如果使用df -h命令可以看到rootfs分区的大小和前面设置的大小一致的话就说明缩小容量成功
root@orangepi:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 925M 0 925M 0% /dev
tmpfs 199M 3.2M 196M 2% /run
/dev/mmcblk0p1 7.7G 3.2G 4.4G 42% /
24Pin扩展板接口引脚说明
开发板24 pin扩展板接口引脚的顺序请参考下图
开发板24pin扩展板接口的原理图如下所示
扩展板接入开发板的方式如下所示,请注意排线的正反方向,不要插反了
扩展板可以扩展的功能有
1 | 百兆网口 | 用于连接有线网络来上网 |
2 | 模拟音视频输出接口 | 在Linux系统中可用于接耳机播放音乐,TV-OUT功能无法使用 |
3 | USB 2.0 Host x 2 | 用于接USB键盘、鼠标以及USB存储设备 |
4 | 红外接收功能 | 目前主要用于Android系统,Linux系统主要适配了内核驱动 |
5 | 开关机按键 | 用于关闭或开启开发板 |
6 | LRADC自定义按键 x 2 | Linux系统默认设置为KEY_1(数字1按键)和KEY_ENTER(回车按键),可以通过修改dts配置自定义为其他功能按键 |
- Linux5.4和Linux6.1系统对扩展板的适配情况如下表所示
24pin扩展板功能 | Linux5.4 | Linux6.1 |
百兆网口 | OK | OK |
百兆网口灯 | OK | OK |
USB2.0 HOST x 2 | OK | OK |
红外接收 | OK | OK |
耳机音频播放 | OK | OK |
开关机按键 | OK | OK |
LRADC自定义按键 x 2 | OK | OK |
TV-OUT | NO | NO |
24pin扩展板上的2个LRADC按键的使用方法
24pin扩展板上有两个LRADC按键,位置如下图所示:
在Linux系统中,KEY1和KEY2默认设置的键值为
Linux内核 | KEY1 | KEY2 |
Linux5.4 | KEY_1,即键盘上的数字1 | KEY_ENTER,即回车键 |
Linux6.1 | KEY_1,即键盘上的数字1 | KEY_ENTER,即回车键 |
通过evtest命令我们可以查看下KEY1和KEY2按下后上报的键值
linux5.4
orangepi@orangepizero2w:~$ evtest
No device specified, trying to scan all of /dev/input/event*
Not running as root, no devices may be available.
Available devices:
/dev/input/event0: sunxi-keyboard
/dev/input/event1: sunxi-ir
/dev/input/event2: axp2101-pek
/dev/input/event3: SONiX USB Keyboard
/dev/input/event4: SONiX USB Keyboard Consumer Control
/dev/input/event5: SONiX USB Keyboard System Control
/dev/input/event6: PixArt USB Optical Mouse
/dev/input/event7: BRLTTY 6.3 Linux Screen Driver Keyboard
Select the device event number [0-7]: 0 #需要输入sunxi-keyboard对应的序号
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "sunxi-keyboard"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 2 (KEY_1)
Event code 28 (KEY_ENTER)
Properties:
Testing ... (interrupt to exit)
#下面是按下KEY1和KEY2后上报的键值
Event: time 1693555298.132314, type 1 (EV_KEY), code 2 (KEY_1), value 1
Event: time 1693555298.132314, -------------- SYN_REPORT ------------
Event: time 1693555298.226071, type 1 (EV_KEY), code 2 (KEY_1), value 0
Event: time 1693555298.226071, -------------- SYN_REPORT ------------
Event: time 1693555298.601042, type 1 (EV_KEY), code 28 (KEY_ENTER), value 1
Event: time 1693555298.601042, -------------- SYN_REPORT ------------
Event: time 1693555298.710415, type 1 (EV_KEY), code 28 (KEY_ENTER), value 0
Event: time 1693555298.710415, -------------- SYN_REPORT ------------
linux6.1
orangepi@orangepizero2w:~$ evtest
No device specified, trying to scan all of /dev/input/event*
Not running as root, no devices may be available.
Available devices:
/dev/input/event0: axp20x-pek
/dev/input/event1: 5070800.lradc
/dev/input/event2: SONiX USB Keyboard
/dev/input/event3: SONiX USB Keyboard Consumer Control
/dev/input/event4: SONiX USB Keyboard System Control
/dev/input/event5: PixArt USB Optical Mouse
/dev/input/event6: sunxi-ir
Select the device event number [0-6]: 1 #需要输入5070800.lradc对应的序号
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "5070800.lradc"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 2 (KEY_1)
Event code 28 (KEY_ENTER)
Properties:
Testing ... (interrupt to exit)
#下面是按下KEY1和KEY2后上报的键值
Event: time 1694075818.810877, type 1 (EV_KEY), code 2 (KEY_1), value 1
Event: time 1694075818.810877, -------------- SYN_REPORT ------------
Event: time 1694075818.961345, type 1 (EV_KEY), code 2 (KEY_1), value 0
Event: time 1694075818.961345, -------------- SYN_REPORT ------------
Event: time 1694075819.536128, type 1 (EV_KEY), code 28 (KEY_ENTER), value 1
Event: time 1694075819.536128, -------------- SYN_REPORT ------------
Event: time 1694075819.705009, type 1 (EV_KEY), code 28 (KEY_ENTER), value 0
Event: time 1694075819.705009, -------------- SYN_REPORT ------------
如果需要修改KEY1和KEY2按下后上报的按键值,可以使用下面的方法:
在/usr/src/路径下有一个sun50i-h618-lradc-keys.dts文件,我们可以通过它来定义KEY1和KEY2为想要的按键值
orangepi@orangepizero2w:~$ cd /usr/src/
orangepi@orangepizero2w:/usr/src$ ls *.dts
sun50i-h618-lradc-keys.dts
linux5.4系统sun50i-h618-lradc-keys.dts文件的内容如下所示:
KEY1对应:修改key0 = <600 > 2>;中的2为想要的按键值对应的数字
KEY2对应:修改key1 = <800 > 28>;中的28为想要的按键值对应的数字
orangepi@orangepizero2w:/usr/src$ sudo vim sun50i-h618-lradc-keys.dts
/dts-v1/;
/plugin/;
/ {
fragment@0 {
target = <&keyboard>;
__overlay__ {
status = "okay";
key0 = <600 2>;
key1 = <800 28>;
};
};
};
linux6.1系统sun50i-h618-lradc-keys.dts文件的内容如下所示:
KEY1对应:修改linux,code = > <2>;中的2为想要的按键值对应的数字
KEY2对应:修改linux,code = > <28>;中的28为想要的按键值对应的数字
orangepi@orangepizero2w:/usr/src$ sudo vim sun50i-h618-lradc-keys.dts
/dts-v1/;
/plugin/;
/ {
fragment@0 {
target = <&r_lradc>;
__overlay__ {
status = "okay";
button-500 {
label = "KEY_1";
linux,code = <2>;
};
button-800 {
label = "KEY_ENTER";
linux,code = <28>;
};
};
};
};
可以设置的按键值请参考下input-event-codes.h头文件中的宏定义,其在内核源码中的路径为:
orange-pi-5.4-sun50iw9/include/uapi/linux/input-event-codes.h
orange-pi-6.1-sun50iw9/include/uapi/linux/input-event-codes.h
修改完后,再使用orangepi-add-overlay命令让sun50i-h618-lradc-keys.dts配置添加到系统中
orangepi@orangepizero2w:/usr/src$ sudo orangepi-add-overlay sun50i-h618-lradc-keys.dts
Compiling the overlay
Copying the compiled overlay file to /boot/overlay-user/
Reboot is required to apply the changes
然后重启系统自定义的按键值就会生效了
网络连接测试
以太网口测试
开发板主板上是没有有线网络接口的,我们可以通过24pin扩展板来扩展百兆有线网络接口
然后将网线的一端插入扩展板的以太网接口,网线的另一端接入路由器,并确保网络是畅通的
系统启动后会通过DHCP自动给以太网卡分配IP地址,不需要其他任何配置
在开发板的Linux系统中查看IP地址的命令如下所示:
下面的命令请不要照抄,比如debian12中的网络节点名为end0,下面的命令就需要修改为ip a s end0。
orangepi@orangepi:~$ ip a s eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 5e:ac:14:a5:93:b3 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.16/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
valid_lft 259174sec preferred_lft 259174sec
inet6 240e:3b7:3240:c3a0:e269:8305:dc08:135e/64 scope global dynamic noprefixroute
valid_lft 259176sec preferred_lft 172776sec
inet6 fe80::957d:bbbd:4928:3604/64 scope link noprefixroute
valid_lft forever preferred_lft forever
开发板启动后查看IP地址有三种方法:
- 接HDMI显示器,然后登录系统使用ip a s eth0命令查看IP地址
- 在调试串口终端输入ip a s eth0命令来查看IP地址
- 如果没有调试串口,也没有HDMI显示器,还可以通过路由器的管理界面来查看开发板网口的IP地址。不过这种方法经常有人会无法正常看到开发板的IP地址。如果看不到,调试方法如下所示:
首先检查Linux系统是否已经正常启动,如果开发板的绿灯闪烁了,一般是正常启动了,如果只亮红灯,或者红灯绿灯都没亮,说明系统都没正常启动;
检查网线有没有插紧,或者换根网线试下;
换个路由器试下(路由器的问题有遇到过很多,比如路由器无法正常分配IP地址,或者已正常分配IP地址但在路由器中看不到);
如果没有路由器可换就只能连接HDMI显示器或者使用调试串口来查看IP地址。
另外需要注意的是开发板DHCP自动分配IP地址是不需要任何设置的。
测试网络连通性的命令如下,ping命令可以通过Ctrl+C快捷键来中断运行
下面的命令请不要照抄,比如debian12中的网络节点名为end0,下面的命令就需要修改为ping www.baidu.com -I end0。
orangepi@orangepi:~$ ping www.baidu.com -I eth0
PING www.a.shifen.com (14.215.177.38) from 192.168.1.12 eth0: 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=56 time=6.74 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=56 time=6.80 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=56 time=6.26 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=56 time=7.27 ms
^C
--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 6.260/6.770/7.275/0.373 ms
WIFI连接测试
请不要通过修改/etc/network/interfaces配置文件的方式来连接WIFI,通过这种方式连接WIFI网络使用会有问题。
服务器版镜像通过命令连接WIFI
当开发板没有连接以太网,没有连接HDMI显示器,只连接了串口时,推荐使用此小节演示的命令来连接WIFI网络。因为nmtui在某些串口软件(如minicom)中只能显示字符,无法正常显示图形界面。当然,如果开发板连接了以太网或者HDMI显示屏,也可以使用此小节演示的命令来连接WIFI网络的。
先登录linux系统,有下面三种方式
- 如果开发板连接了网线,可以通过ssh远程登录linux系统
如果开发板连接好了调试串口,可以使用串口终端登录linux系统
如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到linux系统
首先使用nmcli dev wifi命令扫描周围的WIFI热点
orangepi@orangepi:~$ nmcli dev wifi
然后使用nmcli 命令连接扫描到的WIFI热点,其中:
wifi_name需要换成想连接的WIFI热点的名字
wifi_passwd需要换成想连接的WIFI热点的密码
orangepi@orangepi:~$ sudo nmcli dev wifi connect wifi_name password wifi_passwd
Device 'wlan0' successfully activated with 'cf937f88-ca1e-4411-bb50-61f402eef293'.
通过ip addr show wlan0命令可以查看wifi的IP地址
orangepi@orangepi:~$ ip a s wlan0
11: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 23:8c:d6:ae:76:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.1.11/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
valid_lft 259192sec preferred_lft 259192sec
inet6 240e:3b7:3240:c3a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute
valid_lft 259192sec preferred_lft 172792sec
inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute
valid_lft forever preferred_lft forever
使用ping命令可以测试wifi网络的连通性,ping命令可以通过Ctrl+C快捷键来中断运行
orangepi@orangepi:~$ ping www.orangepi.org -I wlan0
PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=1 ttl=52 time=43.5 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=2 ttl=52 time=41.3 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=3 ttl=52 time=44.9 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=4 ttl=52 time=45.6 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=5 ttl=52 time=48.8 ms
^C
--- www.orangepi.org ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms
服务器版镜像通过图形化方式连接WIFI
先登录linux系统,有下面三种方式
如果开发板连接了网线,可以通过ssh远程登录linux系统
如果开发板连接好了调试串口,可以使用串口终端登录linux系统(串口软件请使用MobaXterm,使用minicom无法显示图形界面)
如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到linux系统
然后在命令行中输入nmtui命令打开wifi连接的界面
orangepi@orangepi:~$ sudo nmtui
输入nmtui命令打开的界面如下所示
选择Activate a connect后回车
然后就能看到所有搜索到的WIFI热点
选择想要连接的WIFI热点后再使用Tab键将光标定位到Activate后回车
然后会弹出输入密码的对话框,在Pssword内输入对应的密码然后回车就会开始连接WIFI
WIFI连接成功后会在已连接的WIFI名称前显示一个”*”
通过ip a s wlan0命令可以查看wifi的IP地址
orangepi@orangepi:~$ ip a s wlan0
11: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 24:8c:d3:aa:76:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.1.11/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
valid_lft 259069sec preferred_lft 259069sec
inet6 240e:3b7:3240:c4a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute
valid_lft 259071sec preferred_lft 172671sec
inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute
valid_lft forever preferred_lft forever
使用ping命令可以测试wifi网络的连通性,ping命令可以通过Ctrl+C快捷键来中断运行
orangepi@orangepi:~$ ping www.orangepi.org -I wlan0
PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=1 ttl=52 time=43.5 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=2 ttl=52 time=41.3 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=3 ttl=52 time=44.9 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=4 ttl=52 time=45.6 ms
64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=5 ttl=52 time=48.8 ms
^C
--- www.orangepi.org ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms
桌面版镜像的测试方法
点击桌面右上角的网络配置图标(测试WIFI时请不要连接网线)
在弹出的下拉框中点击More networks可以看到所有扫描到的WIFI热点,然后选择想要连接的WIFI热点
然后输入WIFI热点的密码,再点击Connect就会开始连接WIFI
连接好WIFI后,可以打开浏览器查看是否能上网,浏览器的入口如下图所示
打开浏览器后如果能打开其他网页说明WIFI连接正常
通过create_ap创建WIFI热点的方法
create_ap是一个帮助快速创建Linux上的WIFI热点的脚本,并且支持bridge和NAT模式,能够自动结合hostapd, dnsmasq和iptables完成WIFI热点的设置,避免了用户进行复杂的配置,github地址如下:
https://github.com/oblique/create_ap
OPi发布的Linux镜像已经预装了create_ap脚本,可以通过create_ap命令来创建WIFI热点,create_ap的基本命令格式如下所示:
create_ap [options] <wifi-interface> [<interface-with-internet>] [<access-point-name> [<passphrase>]]
* options:可以通过该参数指定加密方式、WIFI热点的频段、频宽模式、网络共享方式等,具体可以通过create_ap -h获取到有哪些option
* wifi-interface:无线网卡的名称
* interface-with-internet:可以联网的网卡名称,一般是eth0
* access-point-name:热点名称
* passphrase:热点的密码
create_ap以NAT模式创建WIFI热点的方法
输入下面的命令以NAT模式创建名称为orangepi、密码为orangepi的WIFI热点
注意,下面的命令中,Debian12需要修改eth0为end0。
orangepi@orangepi:~$ sudo create_ap -m nat wlan0 eth0 orangepi orangepi --no-virt
如果有下面的信息输出,说明WIFI热点创建成功
orangepi@orangepi:~$ sudo create_ap -m nat wlan0 eth0 orangepi orangepi --no-virt
Config dir: /tmp/create_ap.wlan0.conf.TQkJtsz1
PID: 26139
Network Manager found, set wlan0 as unmanaged device... DONE
Sharing Internet using method: nat
hostapd command-line interface: hostapd_cli -p /tmp/create_ap.wlan0.conf.TQkJtsz1/hostapd_ctrl
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
wlan0: STA ce:bd:9a:dd:a5:86 IEEE 802.11: associated
wlan0: AP-STA-CONNECTED ce:bd:9a:dd:a5:86
wlan0: STA ce:bd:9a:dd:a5:86 RADIUS: starting accounting session D4FBF7E5C604F169
wlan0: STA ce:bd:9a:dd:a5:86 WPA: pairwise key handshake completed (RSN)
wlan0: EAPOL-4WAY-HS-COMPLETED ce:bd:9a:dd:a5:86
此时拿出手机,在搜索到的WIFI列表中就能找到开发板创建的名为orangepi的WIFI热点,然后可以点击 orangepi连接热点,密码就是上面设置的orangepi
连接成功后的显示如下图所示
在NAT模式下,连接到开发板热点的无线设备是向开发板的DHCP服务请求IP地址的,所以会有两个不同的网段,如这里开发板的IP是192.168.1.X
注意,下面的命令中,Debian12需要修改eth0为end0。
orangepi@orangepi:~$ sudo ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.150 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::938f:8776:5783:afa2 prefixlen 64 scopeid 0x20<link>
ether 4a:a0:c8:25:42:82 txqueuelen 1000 (Ethernet)
RX packets 25370 bytes 2709590 (2.7 MB)
RX errors 0 dropped 50 overruns 0 frame 0
TX packets 3798 bytes 1519493 (1.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 83
而开发板的DHCP服务默认会给接入热点的设备分配192.168.12.0/24的IP地址,这时点击已经连接的WIFI热点orangepi,然后就可以看到手机的IP地址是192.168.12.X。
如果想要为接入的设备指定不同的网段,可以通过-g参数指定,如通过-g参数指定接入点AP的网段为192.168.2.1
注意,下面的命令中,Debian12需要修改eth0为end0。
orangepi@orangepi:~$ sudo create_ap -m nat wlan0 eth0 orangepi orangepi -g 192.168.2.1 --no-virt
此时通过手机连接到热点后,点击已经连接的WIFI热点orangepi,然后可以看到手机的IP地址是192.168.2.X。
在不指定--freq-band参数的情况下,默认创建的热点是2.4G频段的,如果想要创建5G频段的热点可以通过--freq-band 5参数指定,具体命令如下
注意,下面的命令中,Debian12需要修改eth0为end0。
orangepi@orangepi:~$ sudo create_ap -m nat wlan0 eth0 orangepi orangepi --freq-band 5 --no-virt
如果需要隐藏SSID,可以指定--hidden参数,具体命令如下
注意,下面的命令中,Debian12需要修改eth0为end0。
orangepi@orangepi:~$ sudo create_ap -m nat wlan0 eth0 orangepi orangepi --hidden --no-virt
此时手机是搜索不到WIFI热点的,需要手动指定WIFI热点名称,并输入密码来连接WIFI热点
create_ap以bridge模式创建WIFI热点的方法
输入下面的命令以bridge模式创建名称为orangepi、密码为orangepi的WIFI热点
注意,下面的命令中,Debian12需要修改eth0为end0。
orangepi@orangepi:~$ sudo create_ap -m bridge wlan0 eth0 orangepi orangepi --no-virt
如果有下面的信息输出,说明WIFI热点创建成功
orangepi@orangepi:~$ sudo create_ap -m bridge wlan0 eth0 orangepi orangepi --no-virt
Config dir: /tmp/create_ap.wlan0.conf.zAcFlYTx
PID: 27707
Network Manager found, set wlan0 as unmanaged device... DONE
Sharing Internet using method: bridge
Create a bridge interface... br0 created.
hostapd command-line interface: hostapd_cli -p /tmp/create_ap.wlan0.conf.zAcFlYTx/hostapd_ctrl
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
wlan0: STA ce:bd:9a:dd:a5:86 IEEE 802.11: associated
wlan0: AP-STA-CONNECTED ce:bd:9a:dd:a5:86
wlan0: STA ce:bd:9a:dd:a5:86 RADIUS: starting accounting session 937BF40E51897A7B
wlan0: STA ce:bd:9a:dd:a5:86 WPA: pairwise key handshake completed (RSN)
wlan0: EAPOL-4WAY-HS-COMPLETED ce:bd:9a:dd:a5:86
此时拿出手机,在搜索到的WIFI列表中就能找到开发板创建的名为orangepi的WIFI热点,然后可以点击orangepi连接热点,密码就是上面设置的orangepi
连接成功后的显示如下图所示
在bridge模式下,连接到开发板热点的无线设备也是向主路由(开发板连接的路由器)的DHCP服务请求IP地址的,如这里开发板的IP是192.168.1.X
orangepi@orangepi:~$ sudo ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.150 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::938f:8776:5783:afa2 prefixlen 64 scopeid 0x20<link>
ether 4a:a0:c8:25:42:82 txqueuelen 1000 (Ethernet)
RX packets 25370 bytes 2709590 (2.7 MB)
RX errors 0 dropped 50 overruns 0 frame 0
TX packets 3798 bytes 1519493 (1.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 83
而接入WIFI热点的设备的IP也是由主路由分配的,所以连接WIFI热点的手机和开发板处于相同的网段,这时点击已经连接的WIFI热点orangepi,然后就可以看到手机的IP地址也是192.168.1.X。
在不指定--freq-band参数的情况下,默认创建的热点是2.4G频段的,如果想要创建5G频段的热点可以通过--freq-band 5参数指定,具体命令如下
注意,下面的命令中,Debian12需要修改eth0为end0。
orangepi@orangepi:~$ sudo create_ap -m bridge wlan0 eth0 orangepi orangepi --freq-band 5 --no-virt
如果需要隐藏SSID,可以指定--hidden参数,具体命令如下
注意,下面的命令中,Debian12需要修改eth0为end0。
orangepi@orangepi:~$ sudo create_ap -m bridge wlan0 eth0 orangepi orangepi --hidden --no-virt
此时手机是搜索不到WIFI热点的,需要手动指定WIFI热点名称,并输入密码来连接WIFI热点
设置静态IP地址的方法
请不要通过修改/etc/network/interfaces配置文件的方式来设置静态IP地址。
使用nmtui命令来设置静态IP地址
首先运行nmtui命令
orangepi@orangepi:~$ sudo nmtui
然后选择Edit a connection并按下回车键
然后选择需要设置静态IP地址的网络接口,比如设置Ethernet接口的静态IP地址选择Wired connection 1就可以了
然后通过Tab键选择Edit并按下回车键
然后通过Tab键将光标移动到下图所示的<Automatic>位置进行IPv4的配置
然后回车,通过上下方向键选择Manual,然后回车确定
选择完后的显示如下图所示
然后通过Tab键将光标移动到<Show>
然后回车,回车后会弹出下面的设置界面
然后就可以在下图所示的位置设置IP地址(Addresses)、网关(Gateway)和DNS服务器的地址(里面还有很多其他设置选项,请自行探索),请根据自己的具体需求来设置,下图中设置的值只是一个示例
设置完后将光标移动到右下角的<OK>,然后回车确认
然后点击<Back>回退到上一级选择界面
然后选择Activate a connection,再将光标移动到<OK>,最后点击回车
然后选择需要设置的网络接口,比如Wired connection 1,然后将光标移动到<Deactivate>,再按下回车键禁用Wired connection 1
然后请不要移动光标,再按下回车键重新使能Wired connection 1,这样前面设置的静态IP地址就会生效了
然后通过<Back>和Quit按钮就可以退出nmtui
然后通过ip a s eth0就能看到网口的IP地址已经变成前面设置的静态IP地址了
注意,下面的命令中,Debian12需要修改eth0为end0。
orangepi@orangepi:~$ ip a s eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 5e:ac:14:a5:92:b3 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.177/24 brd 192.168.1.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 241e:3b8:3240:c3a0:e269:8305:dc08:135e/64 scope global dynamic noprefixroute
valid_lft 259149sec preferred_lft 172749sec
inet6 fe80::957d:bbbe:4928:3604/64 scope link noprefixroute
valid_lft forever preferred_lft forever
然后就可以测试网络的连通性来检查IP地址是否配置OK了,ping命令可以通过Ctrl+C快捷键来中断运行
注意,下面的命令中,Debian12需要修改eth0为end0。
orangepi@orangepi:~$ ping 192.168.1.177 -I eth0
PING 192.168.1.47 (192.168.1.47) from 192.168.1.188 eth0: 56(84) bytes of data.
64 bytes from 192.168.1.47: icmp_seq=1 ttl=64 time=0.233 ms
64 bytes from 192.168.1.47: icmp_seq=2 ttl=64 time=0.263 ms
64 bytes from 192.168.1.47: icmp_seq=3 ttl=64 time=0.273 ms
64 bytes from 192.168.1.47: icmp_seq=4 ttl=64 time=0.269 ms
64 bytes from 192.168.1.47: icmp_seq=5 ttl=64 time=0.275 ms
^C
--- 192.168.1.47 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4042ms
rtt min/avg/max/mdev = 0.233/0.262/0.275/0.015 ms
使用nmcli命令来设置静态IP地址
如果要设置网口的静态IP地址,请先将网线插入开发板,如果需要设置WIFI的静态IP地址,请先连接好WIFI,然后再开始设置静态IP地址
然后通过nmcli con show命令可以查看网络设备的名字,如下所示
orangepi为WIFI网络接口的名字(名字不一定相同)
Wired connection 1为以太网接口的名字
orangepi@orangepi:~$ nmcli con show
NAME UUID TYPE DEVICE
orangepi cfc4f922-ae48-46f1-84e1-2f19e9ec5e2a wifi wlan0
Wired connection 1 9db058b7-7701-37b8-9411-efc2ae8bfa30 ethernet eth0
然后输入下面的命令,其中
"Wired connection 1" > 表示设置以太网口的静态IP地址,如果需要设置WIFI的静态IP地址,请修改为WIFI网络接口对应的名字(通过nmcli > con show命令可以获取到)
ipv4.addresses后面是要设置的静态IP地址,可以修改为自己想要设置的值
ipv4.gateway 表示网关的地址
orangepi@orangepi:~$ sudo nmcli con mod "Wired connection 1" \
ipv4.addresses "192.168.1.110" \ipv4.gateway "192.168.1.1" \
ipv4.dns "8.8.8.8" \
ipv4.method "manual"
然后重启linux系统
orangepi@orangepi:~$ sudo reboot
然后重新进入linux系统使用ip addr show eth0命令就可以看到IP地址已经设置为想要的值了
orangepi@orangepi:~$ ip addr show eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 5e:ae:14:a5:91:b3 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.110/32 brd 192.168.1.110 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 240e:3b7:3240:c3a0:97de:1d01:b290:fe3a/64 scope global dynamic noprefixroute
valid_lft 259183sec preferred_lft 172783sec
inet6 fe80::3312:861a:a589:d3c/64 scope link noprefixroute
valid_lft forever preferred_lft forever
设置Linux系统第一次启动自动连接网络的方法
开发板有以太网口,如果想通过以太网口来远程登录开发板的Linux系统,只需要给以太网口插上能正常上网的网线,在启动完Linux系统后会自动通过DHCP给以太网口分配一个IP地址,然后我们通过HDMI屏幕、串口或者查看路由器后台的方式就可以获取以太网口的IP地址,然后就能远程登录Linux系统。
开发板也有无线WIFI,如果想通过WIFI来远程登录开发板的Linux系统,则需要通过以太网口的IP地址ssh远程登录Linux系统后通过命令来连接WIFI,或者在HDMI屏幕或串口中通过命令来连接WIFI。
但如果HDMI屏幕和串口模块都没有,虽然有网线,但无法通过路由器后台查看到开发板的IP地址。或者HDMI屏幕、串口模块和网线都没有,只有WIFI可以连接,则可以使用此小节介绍的方法来自动连接WIFI并且还能设置WIFI的静态IP地址或者自动设置以太网口的静态IP地址。
要使用此小节的方法,首先需要准备一台Linux系统的机器。比如一台安装有Ubuntu系统的电脑或者虚拟机。
为什么需要Linux系统的机器,因为TF卡中烧录的开发板Linux系统的根文件系统是ext4格式的,Linux系统的机器可以正常的挂载它,然后对其中的配置文件进行修改。
如果想要在Windows系统中来修改,可以使用Paragon ExtFS for Windows这款软件,由于此软件需要付费,而目前又没有比较好用的类似的免费软件,这里就不具体演示了。
另外如果尝试Paragon ExtFS for Windows这款软件使用有问题请自行解决,我们不答疑。
首先烧录想使用的开发板的Linux镜像到TF卡中,然后使用读卡器,将烧录好开发板Linux镜像的TF卡插入安装有Linux系统的机器中(比如安装有Ubuntu系统的电脑,下面都以Ubuntu电脑为例来演示)
当TF卡插入Ubuntu电脑后,Ubuntu电脑一般会自动挂载TF卡中的Linux根文件系统的分区,由下面的命令可以知道,/media/test/opi_root即为TF卡中的Linux根文件系统挂载的路径
test@test:~$ df -h | grep "media"
/dev/sdd1 1.4G 1.2G 167M 88% /media/test/opi_root
test@test:~$ ls /media/test/opi_root
bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var
然后进入TF卡中烧录的Linux系统的/boot目录中
test@test:~$ cd /media/test/opi_root/boot/
然后将其中的orangepi_first_run.txt.template复制为orangepi_first_run.txt,通过orangepi_first_run.txt配置文件可以设置开发板Linux系统第一次启动时自动连接某个WIFI热点,也可以设置WIFI或者以太网口的静态IP地址
test@test:/media/test/opi_root/boot$ sudo cp orangepi_first_run.txt.template orangepi_first_run.txt
通过下面的命令可以打开orangepi_first_run.txt文件,然后就可以查看修改其中的内容
test@test:/media/test/opi_root/boot$ sudo vim orangepi_first_run.txt
orangepi_first_run.txt文件中的变量使用说明
FR_general_delete_this_file_after_completion变量用来设置第一次启动完后是否删除orangepi_first_run.txt这个文件,默认为1,也就是删除,如果设置为0,第一次启动后会将orangepi_first_run.txt重命名为orangepi_first_run.txt.old,一般保持默认值即可
FR_net_change_defaults变量用于设置是否改变默认网络设置,这个必须要设置为1,否则所有的网络设置都不会生效
FR_net_ethernet_enabled变量用来控制是否使能以太网口的配置,如果需要设置以太网口的静态IP地址,请设置为1
FR_net_wifi_enabled变量用来控制是否使能WIFI的配置,如果需要设置开发板自动连接WIFI热点,则必须将其设置为1,另外请注意,如果此变量设置为1,则以太网口的设置就会失效。也就是说WIFI和以太网口不能同时设置(为什么,因为没必要...)
FR_net_wifi_ssid变量用于设置想要连接的WIFI热点的名字
FR_net_wifi_key变量用于设置想要连接的WIFI热点的密码
FR_net_use_static变量用于设置是否需要设置WIFI或者以太网口的静态IP地址
FR_net_static_ip变量用于设置静态IP的地址,请根据自己的实际情况设置
FR_net_static_gateway变量用于设置网关,请根据自己的实际情况设置
下面演示几个具体的设置示例:
比如想要开发板的Linux系统第一次启动后自动连接WIFI热点,可以这样设置:
设置FR_net_change_defaults为1
设置FR_net_wifi_enabled为1
设置FR_net_wifi_ssid为想要连接的WIFI热点的名字
设置FR_net_wifi_key为想要连接的WIFI热点的密码
比如想要开发板的Linux系统第一次启动后自动连接WIFI热点,并且设置WIFI的IP地址为特定的静态IP地址(这样当Linux系统启动后,可以直接使用设置的静态IP地址ssh远程登录开发板,无需通过路由器后台来查看开发板的IP地址),可以这样设置:
设置FR_net_change_defaults为1
设置FR_net_wifi_enabled为1
设置FR_net_wifi_ssid为想要连接的WIFI热点的名字
设置FR_net_wifi_key为想要连接的WIFI热点的密码
设置FR_net_use_static为1
设置FR_net_static_ip为想要的IP地址
设置FR_net_static_gateway为对应的网关地址
比如想要开发板的Linux系统第一次启动后自动设置以太网口的IP地址为想要的静态IP地址,可以这样设置:
设置FR_net_change_defaults为1
设置FR_net_ethernet_enabled为1
设置FR_net_use_static为1
设置FR_net_static_ip为想要的IP地址
设置FR_net_static_gateway为对应的网关地址
修改完orangepi_first_run.txt文件后,就可以退出TF卡中开发板Linux系统的/boot目录,再卸载TF卡,然后就可以将TF卡插入开发板中启动了
如果没有设置静态IP地址,则还是需要通过路由器后台来查看IP地址,如果设置了静态IP地址,则可以在电脑上ping下设置的静态IP地址,如果能ping说明系统已经正常启动,并且网络也已设置正确,然后就可以使用设置的IP地址ssh远程登录开发板的Linux系统了
开发板的Linux系统第一次启动完后,orangepi_first_run.txt会被删除或者重命名为orangepi_first_run.txt.old,此时就算重新设置orangepi_first_run.txt配置文件,然后重新启动开发板的Linux系统,orangepi_first_run.txt中的配置也不会再次生效,因为此配置只在烧录完Linux系统后第一次启动才会有作用,这点请特别注意。
SSH远程登录开发板
Linux系统默认都开启了ssh远程登录,并且允许root用户登录系统。ssh登录前首先需要确保以太网或者wifi网络已连接,然后使用ip addr命令或者通过查看路由器的方式获取开发板的IP地址。
Ubuntu下SSH远程登录开发板
- 获取开发板的IP地址
- 然后就可以通过ssh命令远程登录linux系统
test@test:~$ ssh orangepi@192.168.1.xxx (需要替换为开发板的IP地址)
orangepi@192.168.1.xx's password: (在这里输入密码,默认密码为orangepi)
注意,输入密码的时候,屏幕上是不会显示输入的密码的具体内容的,请不要以为是有什么故障,输入完后直接回车即可。
如果提示拒绝连接,只要使用的是Orange Pi提供的镜像,就请不要怀疑orangepi这个密码是不是不对,而是要找其他原因。
成功登录系统后的显示如下图所示
如果ssh无法正常登陆linux系统,首先请检查下开发板的IP地址是否能ping通,如果ping通没问题的话,可以通过串口或者HDMI显示器登录linux系统然后在开发板上输入下面的命令后再尝试是否能连接:
root@orangepi:~# reset_ssh.sh
如果还不行,请重烧系统试下。
Windows下SSH远程登录开发板
首先获取开发板的IP地址
在windows下可以使用MobaXterm远程登录开发板,首先新建一个ssh会话
打开Session
然后在Session Setting中选择SSH
然后在Remote host中输入开发板的IP地址
然后在Specify > username中输入linux系统的用户名root或orangepi
最后点击OK即可
然后会提示输入密码,默认root和orangepi用户的密码都为orangepi
注意,输入密码的时候,屏幕上是不会显示输入的密码的具体内容的,请不要以为是有什么故障,输入完后直接回车即可。
成功登录系统后的显示如下图所示
HDMI测试
HDMI显示测试
使用Mini HDMI转HDMI线连接Orange Pi开发板和HDMI显示器
启动linux系统后如果HDMI显示器有图像输出说明HDMI接口使用正常
注意,很多笔记本电脑虽然带有HDMI接口,但是笔记本的HDMI接口一般只有输出功能,并没有HDMI in的功能,也就是说并不能将其他设备的HDMI输出显示到笔记本的屏幕上。
当想把开发板的HDMI接到笔记本电脑HDMI接口时,请先确认清楚您的笔记本是支持HDMI in的功能。
当HDMI没有显示的时候,请先检查下HDMI线有没有插紧,确认接线没问题后,可以换一个不同的屏幕试下有没有显示。
HDMI转VGA显示测试
首先需要准备下面的配件
HDMI转VGA显示测试如下所示
使用HDMI转VGA显示时,开发板以及开发板的Linux系统是不需要做任何设置的,只需要开发板Mini HDMI接口能正常显示就可以了。所以如果测试有问题,请检查HDMI转VGA转换器、VGA线以及显示器是否有问题。
Linux5.4系统HDMI分辨率设置的方法
注意: 此方法只适用于linux5.4内核的系统。
在linux系统的/boot/orangepiEnv.txt中有个disp_mode变量,可以通过它来设置HDMI输出的分辨率,linux系统默认设置的分辨率为1080p60
orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt
verbosity=1
console=both
disp_mode=1080p60
fb0_width=1920
fb0_height=1080
disp_mode变量支持设置的值如下表所示
disp_mode支持的值 | HDMI分辨率 | HDMI刷新率 |
480i | 720x480 | 60 |
576i | 720x480 | 50 |
480p | 720x480 | 60 |
576p | 720x576 | 60 |
720p50 | 1280x720 | 50 |
720p60 | 1280x720 | 60 |
1080i50 | 1920x1080 | 50 |
1080i60 | 1920x1080 | 60 |
1080p24 | 1920x1080 | 24 |
1080p50 | 1920x1080 | 50 |
1080p60 | 1920x1080 | 60 |
注意:Linux系统目前不支持4K分辨率。
将disp_mode变量的值修改为想要输出的分辨率,然后重启系统,HDMI就会输出所设置的分辨率了
查看HDMI输出分辨率的方法如下所示,如果显示的分辨率和设置的分辨率一样,说明开发板这端的设置正确
orangepi@orangepi:~$ sudo cat /sys/class/disp/disp/attr/sys
Linux5.4系统Framebuffer宽度和高度的修改方法
注意: 此方法只适用于linux5.4内核的系统。
在linux系统的/boot/orangepiEnv.txt中有fb0_width和fb0_height两个变量,可以通过它们来设置Framebuffer的宽度和高度,linux系统默认设置fb0_width=1920、fb0_height=1080。
orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt
verbosity=1
console=both
disp_mode=1080p60
fb0_width=1920
fb0_height=1080
fb0_width和fb0_height不同分辨率对应的参考值如下所示:
HDMI分辨率 | fb0_width | fb0_height |
480p | 720 | 480 |
576p | 720 | 576 |
720p | 1280 | 720 |
1080p | 1920 | 1080 |
在相同的HDMI分辨下,当fb0_width和fb0_height设置的值越大时,屏幕显示的文字就越小,当fb0_width和fb0_height设置的值越小时,屏幕显示的文字就越大。
Framebuffer光标设置
Framebuffer使用的softcursor,设置光标闪烁或者不闪烁的方法如下所示
root@orangepi:~# echo 1 > /sys/class/graphics/fbcon/cursor_blink #光标闪烁
root@orangepi:~# echo 0 > /sys/class/graphics/fbcon/cursor_blink #光标不闪烁
如果需要隐藏光标,可以在/boot/orangepiEnv.txt的extraargs变量(extraargs的值会赋值给bootargs环境变量最终传递给内核)中加入vt.global_cursor_default=0(如果vt.global_cursor_default=1则是显示光标),然后重启系统就能看到光标已经消失
orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt
verbosity=1
console=both
disp_mode=1080p60
fb0_width=1920
fb0_height=1080
extraargs=vt.global_cursor_default=0
蓝牙使用方法
桌面版镜像的测试方法
点击桌面右上角的蓝牙图标
然后选择适配器
如果有提示下面的界面,请选择Yes
然后在蓝牙的适配器设置界面中设置Visibility Setting为Always visible,然后关闭即可
然后打开蓝牙设备的配置界面
点击Search即可开始扫描周围的蓝牙设备
然后选择想要连接的蓝牙设备,再点击鼠标右键就会弹出对此蓝牙设备的操作界面,选择Pair即可开始配对,这里演示的是和Android手机配对
配对时,桌面的右上角会弹出配对确认框,选择Confirm确认即可,此时手机上也同样需要进行确认
和手机配对完后,可以选择已配对的蓝牙设备,然后右键选择Send a File即可开始给手机发送一张图片
发送图片的界面如下所示
服务器版镜像的使用方法
进入系统后首先可以通过hciconfig命令来查看是否存在蓝牙的设备节点,如果存在,说明蓝牙初始化正常
orangepi@orangepi:~$ sudo apt update && sudo apt install -y bluez
orangepi@orangepi:~$ hciconfig -a
hci0: Type: Primary Bus: UART
BD Address: 3E:61:3D:19:0E:52 ACL MTU: 1021:8 SCO MTU: 240:3
UP RUNNING
RX bytes:925 acl:0 sco:0 events:72 errors:0
TX bytes:5498 acl:0 sco:0 commands:72 errors:0
Features: 0xbf 0xff 0x8d 0xfe 0xdb 0x3d 0x7b 0xc7
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH SNIFF
Link mode: SLAVE ACCEPT
Name: 'orangepi'
Class: 0x3c0000
Service Classes: Rendering, Capturing, Object Transfer, Audio
Device Class: Miscellaneous,
HCI Version: 5.0 (0x9) Revision: 0x400
LMP Version: 5.0 (0x9) Subversion: 0x400
Manufacturer: Spreadtrum Communications Shanghai Ltd (492)
使用bluetoothctl扫描蓝牙设备
orangepi@orangepi:~$ sudo bluetoothctl
[NEW] Controller 10:11:12:13:14:15 orangepizero2w [default]
Agent registered
[bluetooth]# power on #使能控制器
Changing power on succeeded
[bluetooth]# discoverable on #设置控制器为可被发现的
Changing discoverable on succeeded
[CHG] Controller 10:11:12:13:14:15 Discoverable: yes
[bluetooth]# pairable on #设置控制器为可配对的
Changing pairable on succeeded
[bluetooth]# scan on #开始扫描周围的蓝牙设备
Discovery started
[CHG] Controller 10:11:12:13:14:15 Discovering: yes
[NEW] Device 76:60:79:29:B9:31 76-60-79-29-B9-31
[NEW] Device 9C:2E:A1:42:71:11 小米手机
[NEW] Device DC:72:9B:4C:F4:CF orangepi
[bluetooth]# scan off #扫描到想连接的蓝牙设备后就可以关闭扫描了,然后记下蓝牙设备的MAC地址,这里测试的蓝牙设备为Android手机,蓝牙的名字为orangepi,对应的MAC地址为DC:72:9B:4C:F4:CF
Discovery stopped
[CHG] Controller 10:11:12:13:14:15 Discovering: no
[CHG] Device DC:72:9B:4C:F4:CF RSSI is nil
扫描到想配对的设备后就可以进行配对了,配对需要使用设备的MAC地址
[bluetooth]# pair DC:72:9B:4C:F4:CF #使用扫描到的蓝牙设备的MAC地址进行配对
Attempting to pair with DC:72:9B:4C:F4:CF
[CHG] Device DC:72:9B:4C:F4:CF Connected: yes
Request confirmation
[leeb1m[agent] Confirm passkey 764475 (yes/no): yes #在这里输入yes,在手机上也需要确认
[CHG] Device DC:72:9B:4C:F4:CF Modalias: bluetooth:v010Fp107Ed1436
[CHG] Device DC:72:9B:4C:F4:CF UUIDs: 0000046a-0000-1000-8000-00805f9b34fb
[CHG] Device DC:72:9B:4C:F4:CF ServicesResolved: yes
[CHG] Device DC:72:9B:4C:F4:CF Paired: yes
Pairing successful #提示配对成功
[CHG] Device DC:72:9B:4C:F4:CF ServicesResolved: no
[CHG] Device DC:72:9B:4C:F4:CF Connected: no
配对成功后,手机蓝牙界面的显示如下所示
连接蓝牙设备需要安装 pulseaudio-module-bluetooth软件包,然后再启动pulseaudio 服务
orangepi@orangepi:~$ sudo apt update
orangepi@orangepi:~$ sudo apt -y install pulseaudio-module-bluetooth
orangepi@orangepi:~$ pulseaudio --start
连接蓝牙设备的方法
orangepi@orangepi:~$ sudo bluetoothctl
Agent registered
[bluetooth]# paired-devices #查看已配对的蓝牙设备的MAC地址
Device DC:72:9B:4C:F4:CF orangepi
[bluetooth]# connect DC:72:9B:4C:F4:CF #使用MAC地址连接蓝牙设备
Attempting to connect to DC:72:9B:4C:F4:CF
[CHG] Device DC:72:9B:4C:F4:CF Connected: yes
Connection successful
[CHG] Device DC:72:9B:4C:F4:CF ServicesResolved: yes
[CHG] Controller 10:11:12:13:14:15 Discoverable: no
[orangepi]# #出现这个提示符说明连接成功
连接完蓝牙设备后,Android手机的蓝牙配置界面就可以看到已连接用于通话和媒体的音频的提示
USB接口测试
USB接口是可以接USB hub来扩展USB接口的数量的。
USB接口扩展说明
如下图所示,开发板的主板上只有两个Type-C类型的USB2.0接口,是无法直接接USB Type-A类型的鼠标、键盘等USB设备的。
如果只购买了主板,没有购买24pin扩展板,可以准备一根线下图所示的Type-C转USB线,将其Type-C接口的一端插入主板的Type-C接口中,然后另一端就可以接鼠标键盘等USB设备了,如果觉得一个 USB接口不够用,还可以通过USB Hub来扩展多个USB接口。
如果购买了24pin扩展板,就无需Type-C转USB线,因为24pin扩展板可以扩展出两个USB2.0 接口。
USB0设置为HOST模式的方法
如下图所示,开发板的主板上有两个Type-C类型的接口:USB0和USB1,这两个接口都可以用来给开发板供电,也都可以用来当做USB2.0 HOST接口。USB0和USB1的区别是:USB0除了可以设置为HOST模式外,还可以设置为Device模式,而USB1只有HOST模式。
Orange Pi发布的Linux系统USB0默认设置为Device模式,所以在不需要使用USB0 Device模式时,建议使用USB0来供电,这样USB1就可以直接用来接USB设备。
如果需要使用USB0来接USB设备,需要把USB0设置为HOST模式,方法如下所示:
首先运行下orangepi-config,普通用户记得加sudo权限
orangepi@orangepi:~$ sudo orangepi-config
然后选择System
然后选择Hardware
然后使用键盘的方向键定位到下图所示的位置,再使用空格选中usb0-host
然后选择<Save>保存
然后选择<Back>
然后选择<Reboot>重启系统使配置生效
重启后USB0就能正常使用鼠标键盘等USB设备了
连接USB鼠标或键盘测试
- 将USB接口的键盘插入Orange Pi开发板的USB接口中
- 连接Orange Pi开发板到HDMI显示器
- 如果鼠标或键盘能正常操作系统说明USB接口使用正常(鼠标只有在桌面版的系统中才能使用)
连接USB存储设备测试
- 首先将U盘或者USB移动硬盘插入Orange Pi开发板的USB接口中
- 执行下面的命令如果能看到sdX的输出说明U盘识别成功
orangepi@orangepi:~$ cat /proc/partitions | grep "sd*"
major minor #blocks name
8 0 30044160 sda
8 1 30043119 sda1
- 使用mount命令可以将U盘挂载到/mnt中,然后就能查看U盘中的文件了
orangepi@orangepi:~$ sudo mount /dev/sda1 /mnt/
orangepi@orangepi:~$ ls /mnt/
test.txt
- 挂载完后通过df -h命令就能查看U盘的容量使用情况和挂载点
orangepi@orangepi:~$ df -h | grep "sd"
/dev/sda1 29G 208K 29G 1% /mnt
USB以太网卡测试
- 目前测试过能用的USB以太网卡如下所示,其中RTL8153 USB千兆网卡插入开发板的USB 2.0 Host接口中测试可以正常使用,但是速率是达不到千兆的,这点请注意
序号 | 型号 |
1 | RTL8152B USB百兆网卡 |
2 | RTL8153 USB千兆网卡 |
首先将USB网卡插入开发板的USB接口中,然后在USB网卡中插入网线,确保网线能正常上网,如果通过dmesg命令可以看到下面的log信息,说明USB网卡识别正常
orangepi@orangepi:~$ dmesg | tail
[ 121.985016] usb 3-1: USB disconnect, device number 2
[ 126.873772] sunxi-ehci 5311000.ehci3-controller: ehci_irq: highspeed device connect
[ 127.094054] usb 3-1: new high-speed USB device number 3 using sunxi-ehci
[ 127.357472] usb 3-1: reset high-speed USB device number 3 using sunxi-ehci
[ 127.557960] r8152 3-1:1.0 eth1: v1.08.9
[ 127.602642] r8152 3-1:1.0 enx00e04c362017: renamed from eth1
[ 127.731874] IPv6: ADDRCONF(NETDEV_UP): enx00e04c362017: link is not ready
[ 127.763031] IPv6: ADDRCONF(NETDEV_UP): enx00e04c362017: link is not ready
[ 129.892465] r8152 3-1:1.0 enx00e04c362017: carrier on
[ 129.892583] IPv6: ADDRCONF(NETDEV_CHANGE): enx00e04c362017: link becomes ready
然后通过ifconfig命令可以看到USB网卡的设备节点,以及自动分配的IP地址
orangepi@orangepi:~$ sudo ifconfig
enx00e04c362017: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.177 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::681f:d293:4bc5:e9fd prefixlen 64 scopeid 0x20<link>
ether 00:e0:4c:36:20:17 txqueuelen 1000 (Ethernet)
RX packets 1849 bytes 134590 (134.5 KB)
RX errors 0 dropped 125 overruns 0 frame 0
TX packets 33 bytes 2834 (2.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
测试网络连通性的命令如下
orangepi@orangepi:~$ ping www.baidu.com -I enx00e04c362017
PING www.a.shifen.com (14.215.177.38) from 192.168.1.12 eth0: 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=56 time=6.74 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=56 time=6.80 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=56 time=6.26 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=56 time=7.27 ms
^C
--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 6.260/6.770/7.275/0.373 ms
USB摄像头测试
首先将USB摄像头插入到Orange Pi开发板的USB接口中
然后通过lsmod命令可以看到内核自动加载了下面的模块
orangepi@orangepi:~$ lsmod
Module Size Used by
uvcvideo 106496 0
通过v4l2-ctl命令可以看到USB摄像头的设备节点信息为/dev/video0
orangepi@orangepi:~$ sudo apt update
orangepi@orangepi:~$ sudo apt install -y v4l-utils
orangepi@orangepi:~$ v4l2-ctl --list-devices
USB 2.0 Camera (usb-sunxi-ehci-1):
/dev/video0
注意v4l2中的l是小写字母l,不是数字1。
另外video的序号不一定都是video0,请以实际看到的为准。
使用fswebcam测试USB摄像头
安装fswebcam
orangepi@orangepi:~$ sudo apt update
orangepi@orangepi:~$ sudo apt-get install -y fswebcam
安装完fswebcam后可以使用下面的命令来拍照
-d 选项用于指定USB摄像头的设备节点
--no-banner用于去除照片的水印
-r 选项用于指定照片的分辨率
-S 选项用设置于跳过前面的帧数
./image.jpg 用于设置生成的照片的名字和路径
orangepi@orangepi:~$ sudo fswebcam -d /dev/video0 \
--no-banner -r 1280x720 -S 5 ./image.jpg
在服务器版的linux系统中,拍完照后可以使用scp命令将拍好的图片传到Ubuntu > PC上镜像观看
orangepi@orangepi:~$ scp image.jpg test@192.168.1.55:/home/test (根据实际情况修改IP地址和路径)
在桌面版的linux系统中,可以通过HDMI显示器直接查看拍摄的图片
使用mjpg-streamer测试USB摄像头
下载mjpg-streamer
Github的下载地址:
orangepi@orangepi:~$ git clone https://github.com/jacksonliam/mjpg-streamer
Gitee的镜像下载地址为:
orangepi@orangepi:~$ git clone https://gitee.com/leeboby/mjpg-streamer
安装依赖的软件包
Ubuntu系统
orangepi@orangepi:~$ sudo apt-get install -y cmake libjpeg8-dev
Debian系统
orangepi@orangepi:~$ sudo apt-get install -y cmake libjpeg62-turbo-dev
编译安装mjpg-streamer
orangepi@orangepi:~$ cd mjpg-streamer/mjpg-streamer-experimental
orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ make -j4
orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ sudo make install
然后输入下面的命令启动mjpg_streamer
注意,video的序号不一定都是video0,请以实际看到的为准。
orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ export LD_LIBRARY_PATH=.
orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ sudo ./mjpg_streamer -i "./input_uvc.so -d \
/dev/video0 -u -f 30" -o "./output_http.so -w ./www"
然后在和开发板同一局域网的Ubuntu PC或者Windows > PC或者手机的浏览器中输入【开发板的IP地址:8080】就能看到摄像头输出的视频了
音频测试
使用命令行播放音频的方法
耳机接口播放音频测试
开发板主板上是没有耳机接口的,我们可以通过24pin扩展板来扩展
通过aplay -l命令可以查看linux系统支持的声卡设备
linux5.4系统的输出如下所示,其中card 0: > audiocodec就是耳机播放需要的声卡设备
root@orangepi:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: audiocodec [audiocodec], device 0: soc@3000000:codec_plat-5096000.codec 5096000.codec-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
linux6.1系统的输出如下,其中audiocodec就是耳机播放需要的声卡设备
root@orangepi:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: audiocodec [audiocodec], device 0: CDC PCM Codec-0 [CDC PCM Codec-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
然后使用aplay命令播放音频,耳机就能听到声音了
root@orangepi:~# aplay -D hw:0,0 /usr/share/sounds/alsa/audio.wav
Playing WAVE 'audio.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
如果耳机测试有杂音,请将耳机拔出来一些,不要全部插到底。
HDMI音频播放测试
首先使用Mini HDMI 转HDMI线将Orange Pi开发板连接到电视机上(其他的HDMI显示器需要确保可以播放音频)
HDMI音频播放无需其他设置,直接使用aplay命令播放即可
root@orangepi:~# aplay -D hw:2,0 /usr/share/sounds/alsa/audio.wav
在桌面系统中测试音频方法
首先打开文件管理器
然后找到下面这个文件(如果系统中没有这个音频文件,可以自己上传一个音频文件到系统中)
然后选中audio.wav文件,右键选择使用vlc打开就可以开始播放
切换HDMI播放和耳机播放等不同音频设备的方法
首先打开音量控制界面
播放音频的时候,在Playback中会显示播放软件可以使用的音频设备选项,如下图所示,在这里可以设置需要播放到哪个音频设备
红外接收测试
开发板主板上是没有红外接收器的,我们可以通过24pin扩展板来扩展
安装ir-keytable 红外测试软件
orangepi@orangepi:~$ sudo apt update
orangepi@orangepi:~$ sudo apt-get install -y ir-keytable
然后执行ir-keytable可以查看红外设备的信息
- linux5.4系统输出如下所示
orangepi@orangepi:~$ ir-keytable
Found /sys/class/rc/rc0/ with:
Name: sunxi-ir
Driver: sunxi-rc-recv
Default keymap: rc_map_sunxi
Input device: /dev/input/event1
LIRC device: /dev/lirc0
Attached BPF protocols: Operation not permitted
Supported kernel protocols: lirc nec
Enabled kernel protocols: lirc nec
bus: 25, vendor/product: 0001:0001, version: 0x0100
Repeat delay = 500 ms, repeat period = 125 ms
linux6.1系统的输出如下所示
orangepi@orangepi:~$ ir-keytable
Found /sys/class/rc/rc0/ with:
Name: sunxi-ir
Driver: sunxi-ir
Default keymap: rc-empty
Input device: /dev/input/event5
LIRC device: /dev/lirc0
Attached BPF protocols: Operation not permitted
Supported kernel protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon rc-mm
Enabled kernel protocols: lirc
bus: 25, vendor/product: 0001:0001, version: 0x0100
Repeat delay = 500 ms, repeat period = 125 ms
测试红外接收功能前需要准备一个Orange Pi专用的红外遥控器,其他遥控器不支持
然后在终端中输入ir-keytable -t命令,再使用红外遥控器对着Orange Pi开发板的红外接收头按下按键就能在终端中看到接收到的按键编码了
- linux5.4系统输出如下所示
orangepi@orangepi:~$ sudo ir-keytable -t
Testing events. Please, press CTRL-C to abort.
1598339152.260376: event type EV_MSC(0x04): scancode = 0xfb0413
1598339152.260376: event type EV_SYN(0x00).
1598339152.914715: event type EV_MSC(0x04): scancode = 0xfb0410
linux6.1系统输出如下所示
orangepi@orangepi:~$ sudo ir-keytable -c -p NEC -t
Old keytable cleared
Protocols changed to nec
Testing events. Please, press CTRL-C to abort.
202.063219: lirc protocol(nec): scancode = 0x45c
202.063249: event type EV_MSC(0x04): scancode = 0x45c
202.063249: event type EV_SYN(0x00).
温度传感器
linux5.4系统查看温度的方法
H618总共有4个温度传感器,查看温度的命令如下所示:
显示的温度值需要除以1000,单位才是摄氏度。
- sensor0:CPU的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值
orangepi@orangepi:~$ cat /sys/class/thermal/thermal_zone0/type
cpu_thermal_zone
orangepi@orangepi:~$ cat /sys/class/thermal/thermal_zone0/temp
57734
sensor1:DDR的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值
orangepi@orangepi:~$ cat /sys/class/thermal/thermal_zone1/type
ddr_thermal_zone
orangepi@orangepi:~$ cat /sys/class/thermal/thermal_zone1/temp
57410
sensor2:GPU的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值
orangepi@orangepi:~$ cat /sys/class/thermal/thermal_zone2/type
gpu_thermal_zone
orangepi@orangepi:~$ cat /sys/class/thermal/thermal_zone2/temp
59273
sensor3:VE的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值
orangepi@orangepi:~$ cat /sys/class/thermal/thermal_zone3/type
ve_thermal_zone
orangepi@orangepi:~$ cat /sys/class/thermal/thermal_zone3/temp
58949
linux6.1系统查看温度的方法
orangepi@orangepi:~$ sensors
cpu_thermal-virtual-0
Adapter: Virtual device
temp1: +47.4°C (crit = +110.0°C)
gpu_thermal-virtual-0
Adapter: Virtual device
temp1: +48.7°C (crit = +110.0°C)
ddr_thermal-virtual-0
Adapter: Virtual device
temp1: +47.8°C (crit = +110.0°C)
ve_thermal-virtual-0
Adapter: Virtual device
temp1: +47.2°C (crit = +110.0°C)
40 Pin接口引脚说明
注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。
Orange Pi Zero 2w开发板40 Pin接口引脚的顺序请参开发板上的丝印图
开发板40 Pin接口引脚的功能如下表所示
GPIO序号 | GPIO | 功能 | 引脚 | 引脚 | 功能 | GPIO | GPIO序号 | |
3.3V | 1 | 2 | 5V | |||||
264 | PI8 | TWI1-SDA | 3 | 4 | 5V | |||
263 | PI7 | TWI1-SCL | 5 | 6 | GND | |||
269 | PI13 | PWM3/UART4_TX | 7 | 8 | UART0_TX | PH0 | 224 | |
GND | 9 | 10 | UART0_RX | PH1 | 225 | |||
226 | PH2 | UART5_TX | 11 | 12 | PI1 | 257 | ||
227 | PH3 | UART5_RX | 13 | 14 | GND | |||
261 | PI5 | TWI0_SCL/UART2_TX | 15 | 16 | PWM4/UART4_RX | PI14 | 270 | |
3.3V | 17 | 18 | PH4 | 228 | ||||
231 | PH7 | SPI1_MOSI | 19 | 20 | GND | |||
232 | PH8 | SPI1_MISO | 21 | 22 | TWI0_SDA/UART2_RX | PI6 | 262 | |
230 | PH6 | SPI1_CLK | 23 | 24 | SPI1_CS0 | PH5 | 229 | |
GND | 25 | 26 | SPI1_CS1 | PH9 | 233 | |||
266 | PI10 | TWI2-SDA/UART3_RX | 27 | 28 | TWI2-SCL/UART3_TX | PI9 | 265 | |
256 | PI0 | 29 | 30 | GND | ||||
271 | PI15 | 31 | 32 | PWM1 | PI11 | 267 | ||
268 | PI12 | PWM2 | 33 | 34 | GND | |||
258 | PI2 | 35 | 36 | PC12 | 76 | |||
272 | PI16 | 37 | 38 | PI4 | 260 | |||
GND | 39 | 40 | PI3 | 259 |
- 40pin接口中总共有28个GPIO口,所有GPIO口的高电平电压都是3.3v
安装wiringOP的方法
注意,Orange Pi发布的linux镜像中已经预装了wiringOP,除非wiringOP的代码有更新,否则无需重新下载编译安装,直接使用即可。
编译好的wiringOP的deb包在orangepi-build中的存放路径为:
orangepi-build/external/cache/debs/arm64/wiringpi_x.xx.deb
进入系统后可以运行下gpio readall命令,如果能看到下面的输出,说明wiringOP已经预装并且能正常使用。
wiringOP目前主要适配了设置GPIO口输入输出,设置GPIO口输出高低电平以及设置上下拉电阻的功能,像硬件PWM这样的功能是用不了的。
下载wiringOP的代码
orangepi@orangepi:~$ sudo apt update
orangepi@orangepi:~$ sudo apt install -y git
orangepi@orangepi:~$ git clone https://github.com/orangepi-xunlong/wiringOP.git -b next
注意,源码需要下载wiringOP next分支的代码,请别漏了-b next这个参数。
如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP源码,存放位置为:/usr/src/wiringOP。
编译安装wiringOP
orangepi@orangepi:~$ cd wiringOP
orangepi@orangepi:~/wiringOP$ sudo ./build clean
orangepi@orangepi:~/wiringOP$ sudo ./build
测试gpio readall命令的输出如下
40pin接口GPIO、I2C、UART、SPI和PWM测试
注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。
40pin GPIO口测试
下面以7号引脚——对应GPIO为PI13——对应wPi序号为2——为例演示如何设置GPIO口的高低电平
首先设置GPIO口为输出模式,其中第三个参数需要输入引脚对应的wPi的序号
root@orangepi:~/wiringOP# gpio mode 2 out
然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功
root@orangepi:~/wiringOP# gpio write 2 0
然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功
root@orangepi:~/wiringOP# gpio write 2 1
其他引脚的设置方法类似,只需修改wPi的序号为引脚对应的序号即可
40 Pin GPIO口上下拉电阻的设置方法
下面以7号引脚——对应GPIO为PI13——对应wPi序号为2——为例演示如何设置GPIO口的上下拉电阻
首先需要设置GPIO口为输入模式,其中第三个参数需要输入引脚对应的wPi的序号
root@orangepi:~/wiringOP# gpio mode 2 in
设置为输入模式后,执行下面的命令可以设置GPIO口为上拉模式
root@orangepi:~/wiringOP# gpio mode 2 up
然后输入下面的命令读取GPIO口的电平,如果电平为1,说明上拉模式设置成功
root@orangepi:~/wiringOP# gpio read 2
1
然后执行下面的命令可以设置GPIO口为下拉模式
root@orangepi:~/wiringOP# gpio mode 2 down
然后输入下面的命令读取GPIO口的电平,如果电平为0,说明下拉模式设置成功
root@orangepi:~/wiringOP# gpio read 2
0
40pin SPI测试
- 由下表可知,40pin接口可用的spi为spi1,有两个片选引脚cs0和cs1
GPIO序号 | GPIO | 功能 | 引脚 | 引脚 | 功能 | GPIO | GPIO序号 | |
3.3V | 1 | 2 | 5V | |||||
264 | PI8 | TWI1-SDA | 3 | 4 | 5V | |||
263 | PI7 | TWI1-SCL | 5 | 6 | GND | |||
269 | PI13 | PWM3/UART4_TX | 7 | 8 | UART0_TX | PH0 | 224 | |
GND | 9 | 10 | UART0_RX | PH1 | 225 | |||
226 | PH2 | UART5_TX | 11 | 12 | PI1 | 257 | ||
227 | PH3 | UART5_RX | 13 | 14 | GND | |||
261 | PI5 | TWI0_SCL/UART2_TX | 15 | 16 | PWM4/UART4_RX | PI14 | 270 | |
3.3V | 17 | 18 | PH4 | 228 | ||||
231 | PH7 | SPI1_MOSI | 19 | 20 | GND | |||
232 | PH8 | SPI1_MISO | 21 | 22 | TWI0_SDA/UART2_RX | PI6 | 262 | |
230 | PH6 | SPI1_CLK | 23 | 24 | SPI1_CS0 | PH5 | 229 | |
GND | 25 | 26 | SPI1_CS1 | PH9 | 233 | |||
266 | PI10 | TWI2-SDA/UART3_RX | 27 | 28 | TWI2-SCL/UART3_TX | PI9 | 265 | |
256 | PI0 | 29 | 30 | GND | ||||
271 | PI15 | 31 | 32 | PWM1 | PI11 | 267 | ||
268 | PI12 | PWM2 | 33 | 34 | GND | |||
258 | PI2 | 35 | 36 | PC12 | 76 | |||
272 | PI16 | 37 | 38 | PI4 | 260 | |||
GND | 39 | 40 | PI3 | 259 |
Linux系统中spi1默认是关闭的,需要手动打开才能使用。打开步骤如下所示:
dtbo配置 | 说明 |
spi1-cs0-cs1-spidev | 同时打开spi1的cs0和cs1 |
spi1-cs0-spidev | 只打开spi1的cs0 |
spi1-cs1-spidev | 只打开spi1的cs1 |
然后查看下linux系统中是否存在spidev1.x的设备节点,如果存在,说明SPI1的配置已经生效了
orangepi@orangepi:~$ ls /dev/spidev1*
/dev/spidev1.0 /dev/spidev1.1
注意,只有打开spi1-cs0-cs1-spidev时,才会看到两个spi的设备节点。
下面开始spi的回环测试,先不短接SPI1的mosi和miso两个引脚,运行spidev_test的输出结果如下所示,可以看到TX和RX的数据不一致
orangepi@orangepi:~$ sudo spidev_test -v -D /dev/spidev1.0
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
RX | FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ............................….
然后短接SPI1的mosi(40pin接口中的第19号引脚)和miso(40pin接口中的第21号引脚)两个引脚再运行spidev_test的输出如下,可以看到发送和接收的数据一样,说明回环测试通过。
orangepi@orangepi:~$ sudo spidev_test -v -D /dev/spidev1.0
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
40pin I2C测试
- 由下表可知,40pin接口可用的i2c为i2c0、i2c1和i2c2
GPIO序号 | GPIO | 功能 | 引脚 | 引脚 | 功能 | GPIO | GPIO序号 | |
3.3V | 1 | 2 | 5V | |||||
264 | PI8 | TWI1-SDA | 3 | 4 | 5V | |||
263 | PI7 | TWI1-SCL | 5 | 6 | GND | |||
269 | PI13 | PWM3/UART4_TX | 7 | 8 | UART0_TX | PH0 | 224 | |
GND | 9 | 10 | UART0_RX | PH1 | 225 | |||
226 | PH2 | UART5_TX | 11 | 12 | PI1 | 257 | ||
227 | PH3 | UART5_RX | 13 | 14 | GND | |||
261 | PI5 | TWI0_SCL/UART2_TX | 15 | 16 | PWM4/UART4_RX | PI14 | 270 | |
3.3V | 17 | 18 | PH4 | 228 | ||||
231 | PH7 | SPI1_MOSI | 19 | 20 | GND | |||
232 | PH8 | SPI1_MISO | 21 | 22 | TWI0_SDA/UART2_RX | PI6 | 262 | |
230 | PH6 | SPI1_CLK | 23 | 24 | SPI1_CS0 | PH5 | 229 | |
GND | 25 | 26 | SPI1_CS1 | PH9 | 233 | |||
266 | PI10 | TWI2-SDA/UART3_RX | 27 | 28 | TWI2-SCL/UART3_TX | PI9 | 265 | |
256 | PI0 | 29 | 30 | GND | ||||
271 | PI15 | 31 | 32 | PWM1 | PI11 | 267 | ||
268 | PI12 | PWM2 | 33 | 34 | GND | |||
258 | PI2 | 35 | 36 | PC12 | 76 | |||
272 | PI16 | 37 | 38 | PI4 | 260 | |||
GND | 39 | 40 | PI3 | 259 |
Linux系统中i2c默认都是关闭的,需要手动打开才能使用。打开步骤如下所示:
40pin中的复用功能 | 对应的dtbo配置 |
40pin - i2c0 | pi-i2c0 |
40pin - i2c1 | pi-i2c1 |
40pin - i2c2 | pi-i2c2 |
启动linux系统后,先确认下/dev下存在已打开的i2c的设备节点
orangepi@orangepi:~$ ls /dev/i2c-*
/dev/i2c-*
有时i2c的设备节点和i2c总线的序号不是一一对应的,比如i2c1总线的i2c设备节点可能是/dev/i2c-3。
准确确认i2c总线对应的/dev下设备节点方法为:
首先运行下面的命令,查看i2c的对应关系
orangepi@orangepizero2w:~$ ls /sys/devices/platform/soc*/*/i2c-* | grep "i2c-[0-9]"
/sys/devices/platform/soc/5002000.i2c/i2c-0:
/sys/devices/platform/soc/5002400.i2c/i2c-3:
/sys/devices/platform/soc/5002800.i2c/i2c-4:
/sys/devices/platform/soc/5002c00.i2c/i2c-5:
/sys/devices/platform/soc/6000000.hdmi/i2c-2:
/sys/devices/platform/soc/7081400.i2c/i2c-1:
上面的输出中
5002000为i2c0总线的寄存器基地址,其后面显示i2c-0就是其对应的i2c设备节点
5002400为i2c1总线的寄存器基地址,其后面显示i2c-3就是其对应的i2c设备节点
5002800为i2c2总线的寄存器基地址,其后面显示i2c-4就是其对应的i2c设备节点
然后开始测试i2c,首先安装i2c-tools
orangepi@orangepi:~$ sudo apt-get update
orangepi@orangepi:~$ sudo apt-get install -y i2c-tools
然后在40pin接头的i2c引脚上接一个i2c设备
然后使用i2cdetect -y x命令如果能检测到连接的i2c设备的地址,就说明i2c能正常使用
注意,i2cdetect -y x命令中的x需要替换为i2c总线对应的设备节点的序号。
不同的i2c设备地址是不同的,下图0x50地址只是一个示例。请以实际看到的为准。
40pin的UART测试
- 由下表可知,可用的uart为uart2、uart3、uart4和uart5。请注意uart0默认设置为调试串口,请不要把uart0当成普通串口使用
GPIO序号 | GPIO | 功能 | 引脚 | 引脚 | 功能 | GPIO | GPIO序号 | |
3.3V | 1 | 2 | 5V | |||||
264 | PI8 | TWI1-SDA | 3 | 4 | 5V | |||
263 | PI7 | TWI1-SCL | 5 | 6 | GND | |||
269 | PI13 | PWM3/UART4_TX | 7 | 8 | UART0_TX | PH0 | 224 | |
GND | 9 | 10 | UART0_RX | PH1 | 225 | |||
226 | PH2 | UART5_TX | 11 | 12 | PI1 | 257 | ||
227 | PH3 | UART5_RX | 13 | 14 | GND | |||
261 | PI5 | TWI0_SCL/UART2_TX | 15 | 16 | PWM4/UART4_RX | PI14 | 270 | |
3.3V | 17 | 18 | PH4 | 228 | ||||
231 | PH7 | SPI1_MOSI | 19 | 20 | GND | |||
232 | PH8 | SPI1_MISO | 21 | 22 | TWI0_SDA/UART2_RX | PI6 | 262 | |
230 | PH6 | SPI1_CLK | 23 | 24 | SPI1_CS0 | PH5 | 229 | |
GND | 25 | 26 | SPI1_CS1 | PH9 | 233 | |||
266 | PI10 | TWI2-SDA/UART3_RX | 27 | 28 | TWI2-SCL/UART3_TX | PI9 | 265 | |
256 | PI0 | 29 | 30 | GND | ||||
271 | PI15 | 31 | 32 | PWM1 | PI11 | 267 | ||
268 | PI12 | PWM2 | 33 | 34 | GND | |||
258 | PI2 | 35 | 36 | PC12 | 76 | |||
272 | PI16 | 37 | 38 | PI4 | 260 | |||
GND | 39 | 40 | PI3 | 259 |
Linux系统中uart默认都是关闭的,需要手动打开才能使用。打开步骤如下所示:
40pin中的复用功能 | 对应的dtbo配置 |
40pin - uart2 | pi-uart2 |
40pin - uart3 | pi-uart3 |
40pin - uart4 | pi-uart4 |
40pin - uart5 | ph-uart5 |
进入linux系统后,先确认下/dev下是否存在uart5的设备节点
注意,linux5.4系统为/dev/ttyASx。
orangepi@orangepi:~$ ls /dev/ttyS*
/dev/ttySx
然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx引脚
使用wiringOP中的gpio命令测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常
注意,gpio serial /dev/ttySx命令中最后的x需要替换为对应的uart设备节点的序号。
orangepi@orangepi:~$ gpio serial /dev/ttySx # linux-6.1测试命令
orangepi@orangepi:~$ gpio serial /dev/ttyASx # linux-5.4测试命令
Out: 0: -> 0
Out: 1: -> 1
Out: 2: -> 2
Out: 3: -> 3^C
PWM的测试方法
- 由下表可知,可用的pwm为pwm1、pwm2、pwm3和pwm4。
GPIO序号 | GPIO | 功能 | 引脚 | 引脚 | 功能 | GPIO | GPIO序号 | |
3.3V | 1 | 2 | 5V | |||||
264 | PI8 | TWI1-SDA | 3 | 4 | 5V | |||
263 | PI7 | TWI1-SCL | 5 | 6 | GND | |||
269 | PI13 | PWM3/UART4_TX | 7 | 8 | UART0_TX | PH0 | 224 | |
GND | 9 | 10 | UART0_RX | PH1 | 225 | |||
226 | PH2 | UART5_TX | 11 | 12 | PI1 | 257 | ||
227 | PH3 | UART5_RX | 13 | 14 | GND | |||
261 | PI5 | TWI0_SCL/UART2_TX | 15 | 16 | PWM4/UART4_RX | PI14 | 270 | |
3.3V | 17 | 18 | PH4 | 228 | ||||
231 | PH7 | SPI1_MOSI | 19 | 20 | GND | |||
232 | PH8 | SPI1_MISO | 21 | 22 | TWI0_SDA/UART2_RX | PI6 | 262 | |
230 | PH6 | SPI1_CLK | 23 | 24 | SPI1_CS0 | PH5 | 229 | |
GND | 25 | 26 | SPI1_CS1 | PH9 | 233 | |||
266 | PI10 | TWI2-SDA/UART3_RX | 27 | 28 | TWI2-SCL/UART3_TX | PI9 | 265 | |
256 | PI0 | 29 | 30 | GND | ||||
271 | PI15 | 31 | 32 | PWM1 | PI11 | 267 | ||
268 | PI12 | PWM2 | 33 | 34 | GND | |||
258 | PI2 | 35 | 36 | PC12 | 76 | |||
272 | PI16 | 37 | 38 | PI4 | 260 | |||
GND | 39 | 40 | PI3 | 259 |
Linux系统中pwm默认是关闭的,需要手动打开才能使用。打开步骤如下所示:
重启后就可以开始PWM的测试
下面的命令请在root用户下执行。
在命令行中输入下面的命令可以让pwm1输出一个50Hz的方波
root@orangepi:~# echo 1 > /sys/class/pwm/pwmchip0/export
root@orangepi:~# echo 20000000 > /sys/class/pwm/pwmchip0/pwm1/period
root@orangepi:~# echo 1000000 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle
root@orangepi:~# echo 1 > /sys/class/pwm/pwmchip0/pwm1/enable
在命令行中输入下面的命令可以让pwm2输出一个50Hz的方波
root@orangepi:~# echo 2 > /sys/class/pwm/pwmchip0/export
root@orangepi:~# echo 20000000 > /sys/class/pwm/pwmchip0/pwm2/period
root@orangepi:~# echo 1000000 > /sys/class/pwm/pwmchip0/pwm2/duty_cycle
root@orangepi:~# echo 1 > /sys/class/pwm/pwmchip0/pwm2/enable
- 在命令行中输入下面的命令可以让pwm3输出一个50Hz的方波
root@orangepi:~# echo 3 > /sys/class/pwm/pwmchip0/export
root@orangepi:~# echo 20000000 > /sys/class/pwm/pwmchip0/pwm3/period
root@orangepi:~# echo 1000000 > /sys/class/pwm/pwmchip0/pwm3/duty_cycle
root@orangepi:~# echo 1 > /sys/class/pwm/pwmchip0/pwm3/enable
- 在命令行中输入下面的命令可以让pwm4输出一个50Hz的方波
root@orangepi:~# echo 4 > /sys/class/pwm/pwmchip0/export
root@orangepi:~# echo 20000000 > /sys/class/pwm/pwmchip0/pwm4/period
root@orangepi:~# echo 1000000 > /sys/class/pwm/pwmchip0/pwm4/duty_cycle
root@orangepi:~# echo 1 > /sys/class/pwm/pwmchip0/pwm4/enable
wiringOP-Python的安装使用方法
注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。
wiringOP-Python是wiringOP的Python语言版本的库,用于在Python程序中操作开发板的GPIO、I2C、SPI和UART等硬件资源。
另外请注意下面所有的命令都是在root用户下操作的。
wiringOP-Python的安装方法
首先安装依赖包
root@orangepi:~# sudo apt-get update
root@orangepi:~# sudo apt-get -y install git swig python3-dev python3-setuptools
然后使用下面的命令下载wiringOP-Python的源码
注意,下面的git clone--recursive命令会自动下载wiringOP的源码,因为wiringOP-Python是依赖wiringOP的。请确保下载过程没有因为网络问题而报错。
如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP-Python源码,存放位置为:/usr/src/wiringOP-Python。
root@orangepi:~# git clone --recursive https://github.com/orangepi-xunlong/wiringOP-Python -b next
root@orangepi:~# cd wiringOP-Python
root@orangepi:~/wiringOP-Python# git submodule update --init --remote
然后使用下面的命令编译wiringOP-Python并将其安装到开发板的Linux系统中
root@orangepi:~# cd wiringOP-Python
root@orangepi:~/wiringOP-Python# python3 generate-bindings.py > bindings.i
root@orangepi:~/wiringOP-Python# sudo python3 setup.py install
然后输入下面的命令,如果有帮助信息输出,说明wiringOP-Python安装成功,按下q键可以退出帮助信息的界面
root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; help(wiringpi)"
Help on module wiringpi:
NAME
wiringpi
DESCRIPTION
- This file was automatically generated by SWIG (http://www.swig.org).
- Version 4.0.2
- Do not make changes to this file unless you know what you are doing--modify
- the SWIG interface file instead.
在python命令行下测试wiringOP-Python是否安装成功的步骤如下所示:
- 首先使用python3命令进入python3的命令行模式
root@orangepi:~# python3
- 然后导入wiringpi的python模块
>>> import wiringpi;
- 最后输入下面的命令可以查看下wiringOP-Python的帮助信息,按下q键可以退出帮助信息的界面
>>> help(wiringpi)
Help on module wiringpi:
NAME
wiringpi
DESCRIPTION
- This file was automatically generated by SWIG (http://www.swig.org).
- Version 4.0.2
- Do not make changes to this file unless you know what you are doing--modify
- the SWIG interface file instead.
CLASSES
builtins.object
GPIO
I2C
Serial
nes
class GPIO(builtins.object)
| GPIO(pinmode=0)
|
>>>
40pin GPIO口测试
wiringOP-Python跟wiringOP一样,也是可以通过指定wPi号来确定操作哪一个GPIO引脚,因为wiringOP-Python中没有查看wPi号的命令,所以只能通过wiringOP中的gpio命令来查看板子wPi号与物理引脚的对应关系。
下面以7号引脚——对应GPIO为PI13 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平
直接用命令测试的步骤如下所示:
首先设置GPIO口为输出模式,其中pinMode函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式
root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; \
from wiringpi import GPIO; wiringpi.wiringPiSetup() ; \
wiringpi.pinMode(2, GPIO.OUTPUT) ; "
然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功
root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; \
from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\
wiringpi.digitalWrite(2, GPIO.LOW)"
然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功
root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; \
from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\
wiringpi.digitalWrite(2, GPIO.HIGH)"
在python3的命令行中测试的步骤如下所示:
首先使用python3命令进入python3的命令行模式
root@orangepi:~# python3
然后导入wiringpi的python模块
>>> import wiringpi
>>> from wiringpi import GPIO
然后设置GPIO口为输出模式,其中pinMode函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式
>>> wiringpi.wiringPiSetup()
0
>>> wiringpi.pinMode(2, GPIO.OUTPUT)
然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功
>>> wiringpi.digitalWrite(2, GPIO.LOW)
然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功
>>> wiringpi.digitalWrite(2, GPIO.HIGH)
wiringOP-Python在python代码中设置GPIO高低电平的方法可以参考下examples中的blink.py测试程序,blink.py测试程序会设置开发板40 Pin中所有的GPIO口的电压不断的高低变化
root@orangepi:~/wiringOP-Python# cd examples
root@orangepi:~/wiringOP-Python/examples# ls blink.py
blink.py
root@orangepi:~/wiringOP-Python/examples# python3 blink.py
40pin SPI测试
- 由下表可知,40pin接口可用的spi为spi1,有两个片选引脚cs0和cs1
GPIO序号 | GPIO | 功能 | 引脚 | 引脚 | 功能 | GPIO | GPIO序号 | |
3.3V | 1 | 2 | 5V | |||||
264 | PI8 | TWI1-SDA | 3 | 4 | 5V | |||
263 | PI7 | TWI1-SCL | 5 | 6 | GND | |||
269 | PI13 | PWM3/UART4_TX | 7 | 8 | UART0_TX | PH0 | 224 | |
GND | 9 | 10 | UART0_RX | PH1 | 225 | |||
226 | PH2 | UART5_TX | 11 | 12 | PI1 | 257 | ||
227 | PH3 | UART5_RX | 13 | 14 | GND | |||
261 | PI5 | TWI0_SCL/UART2_TX | 15 | 16 | PWM4/UART4_RX | PI14 | 270 | |
3.3V | 17 | 18 | PH4 | 228 | ||||
231 | PH7 | SPI1_MOSI | 19 | 20 | GND | |||
232 | PH8 | SPI1_MISO | 21 | 22 | TWI0_SDA/UART2_RX | PI6 | 262 | |
230 | PH6 | SPI1_CLK | 23 | 24 | SPI1_CS0 | PH5 | 229 | |
GND | 25 | 26 | SPI1_CS1 | PH9 | 233 | |||
266 | PI10 | TWI2-SDA/UART3_RX | 27 | 28 | TWI2-SCL/UART3_TX | PI9 | 265 | |
256 | PI0 | 29 | 30 | GND | ||||
271 | PI15 | 31 | 32 | PWM1 | PI11 | 267 | ||
268 | PI12 | PWM2 | 33 | 34 | GND | |||
258 | PI2 | 35 | 36 | PC12 | 76 | |||
272 | PI16 | 37 | 38 | PI4 | 260 | |||
GND | 39 | 40 | PI3 | 259 |
Linux系统中spi1默认是关闭的,需要手动打开才能使用。打开步骤如下所示:
dtbo配置 | 说明 |
spi1-cs0-cs1-spidev | 同时打开spi1的cs0和cs1 |
spi1-cs0-spidev | 只打开spi1的cs0 |
spi1-cs1-spidev | 只打开spi1的cs1 |
然后查看下linux系统中是否存在spidev1.x的设备节点,如果存在,说明SPI1的配置已经生效了
orangepi@orangepi:~$ ls /dev/spidev1*
/dev/spidev1.0 /dev/spidev1.1
注意,只有打开spi1-cs0-cs1-spidev时,才会看到两个spi的设备节点。
然后可以使用examples中的spidev_test.py程序测试下SPI的回环功能,spidev_test.py程序需要指定下面的两个参数:
--channel:指定SPI的通道号
--port:指定SPI的端口号
先不短接 SPI1 的 mosi 和 miso 两个引脚,运行spidev_test.py的输出结果如下所示,可以看到 TX 和 RX 的数据不一致
root@orangepi:~/wiringOP-Python# cd examples
root@orangepi:~/wiringOP-Python/examples# python3 spidev_test.py \
--channel 1 --port 0
spi mode: 0x0
max speed: 500000 Hz (500 KHz)
Opening device /dev/spidev1.1
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
RX | FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |.............….|
然后使用杜邦线短接SPI1的txd(40pin接口中的第19号引脚)和rxd(40pin接口中的第21号引脚)两个引脚再运行spidev_test.py的输出如下,可以看到发送和接收的数据一样,说明SPI1回环测试正常
root@orangepi:~/wiringOP-Python# cd examples
root@orangepi:~/wiringOP-Python/examples# python3 spidev_test.py \
--channel 1 --port 0
spi mode: 0x0
max speed: 500000 Hz (500 KHz)
Opening device /dev/spidev1.1
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
40pin I2C测试
- 由下表可知,40pin接口可用的i2c为i2c0、i2c1和i2c2
GPIO序号 | GPIO | 功能 | 引脚 | 引脚 | 功能 | GPIO | GPIO序号 | |
3.3V | 1 | 2 | 5V | |||||
264 | PI8 | TWI1-SDA | 3 | 4 | 5V | |||
263 | PI7 | TWI1-SCL | 5 | 6 | GND | |||
269 | PI13 | PWM3/UART4_TX | 7 | 8 | UART0_TX | PH0 | 224 | |
GND | 9 | 10 | UART0_RX | PH1 | 225 | |||
226 | PH2 | UART5_TX | 11 | 12 | PI1 | 257 | ||
227 | PH3 | UART5_RX | 13 | 14 | GND | |||
261 | PI5 | TWI0_SCL/UART2_TX | 15 | 16 | PWM4/UART4_RX | PI14 | 270 | |
3.3V | 17 | 18 | PH4 | 228 | ||||
231 | PH7 | SPI1_MOSI | 19 | 20 | GND | |||
232 | PH8 | SPI1_MISO | 21 | 22 | TWI0_SDA/UART2_RX | PI6 | 262 | |
230 | PH6 | SPI1_CLK | 23 | 24 | SPI1_CS0 | PH5 | 229 | |
GND | 25 | 26 | SPI1_CS1 | PH9 | 233 | |||
266 | PI10 | TWI2-SDA/UART3_RX | 27 | 28 | TWI2-SCL/UART3_TX | PI9 | 265 | |
256 | PI0 | 29 | 30 | GND | ||||
271 | PI15 | 31 | 32 | PWM1 | PI11 | 267 | ||
268 | PI12 | PWM2 | 33 | 34 | GND | |||
258 | PI2 | 35 | 36 | PC12 | 76 | |||
272 | PI16 | 37 | 38 | PI4 | 260 | |||
GND | 39 | 40 | PI3 | 259 |
Linux系统中i2c默认都是关闭的,需要手动打开才能使用。打开步骤如下所示:
40pin中的复用功能 | 对应的dtbo配置 |
40pin - i2c0 | pi-i2c0 |
40pin - i2c1 | pi-i2c1 |
40pin - i2c2 | pi-i2c2 |
启动linux系统后,先确认下/dev下存在已打开的i2c的设备节点
orangepi@orangepi:~$ ls /dev/i2c-*
/dev/i2c-*
有时i2c的设备节点和i2c总线的序号不是一一对应的,比如i2c1总线的i2c设备节点可能是/dev/i2c-3。
准确确认i2c总线对应的/dev下设备节点方法为:
首先运行下面的命令,查看i2c的对应关系
orangepi@orangepizero2w:~$ ls /sys/devices/platform/soc*/*/i2c-* | grep "i2c-[0-9]"
/sys/devices/platform/soc/5002000.i2c/i2c-0:
/sys/devices/platform/soc/5002400.i2c/i2c-3:
/sys/devices/platform/soc/5002800.i2c/i2c-4:
/sys/devices/platform/soc/5002c00.i2c/i2c-5:
/sys/devices/platform/soc/6000000.hdmi/i2c-2:
/sys/devices/platform/soc/7081400.i2c/i2c-1:
上面的输出中
5002000为i2c0总线的寄存器基地址,其后面显示i2c-0就是其对应的i2c设备节点
5002400为i2c1总线的寄存器基地址,其后面显示i2c-3就是其对应的i2c设备节点
5002800为i2c2总线的寄存器基地址,其后面显示i2c-4就是其对应的i2c设备节点
然后开始测试i2c,首先安装下i2c-tools
orangepi@orangepi:~$ sudo apt-get update
orangepi@orangepi:~$ sudo apt-get install -y i2c-tools
然后在40pin接头的i2c引脚上接一个i2c设备,这里以DS1307 RTC模块为例
然后使用i2cdetect -y x命令如果能检测到连接的i2c设备的地址,就说明i2c设备连接正确
注意,i2cdetect -y x命令中的x需要替换为i2c总线对应的设备节点的序号。
然后可以运行examples中的ds1307.py测试程序读取RTC的时间
注意,下面命令中i2c-x中的x需要替换为i2c总线对应的设备节点的序号。
root@orangepi:~/wiringOP-Python# cd examples
root@orangepi:~/wiringOP-Python/examples# python3 ds1307.py --device \
"/dev/i2c-x"
Thu 2022-06-16 04:35:46
Thu 2022-06-16 04:35:47
Thu 2022-06-16 04:35:48
^C
exit
40pin的UART测试
- 由下表可知,可用的uart为uart2、uart3、uart4和uart5。请注意uart0默认设置为调试串口,请不要把uart0当成普通串口使用
GPIO序号 | GPIO | 功能 | 引脚 | 引脚 | 功能 | GPIO | GPIO序号 | |
3.3V | 1 | 2 | 5V | |||||
264 | PI8 | TWI1-SDA | 3 | 4 | 5V | |||
263 | PI7 | TWI1-SCL | 5 | 6 | GND | |||
269 | PI13 | PWM3/UART4_TX | 7 | 8 | UART0_TX | PH0 | 224 | |
GND | 9 | 10 | UART0_RX | PH1 | 225 | |||
226 | PH2 | UART5_TX | 11 | 12 | PI1 | 257 | ||
227 | PH3 | UART5_RX | 13 | 14 | GND | |||
261 | PI5 | TWI0_SCL/UART2_TX | 15 | 16 | PWM4/UART4_RX | PI14 | 270 | |
3.3V | 17 | 18 | PH4 | 228 | ||||
231 | PH7 | SPI1_MOSI | 19 | 20 | GND | |||
232 | PH8 | SPI1_MISO | 21 | 22 | TWI0_SDA/UART2_RX | PI6 | 262 | |
230 | PH6 | SPI1_CLK | 23 | 24 | SPI1_CS0 | PH5 | 229 | |
GND | 25 | 26 | SPI1_CS1 | PH9 | 233 | |||
266 | PI10 | TWI2-SDA/UART3_RX | 27 | 28 | TWI2-SCL/UART3_TX | PI9 | 265 | |
256 | PI0 | 29 | 30 | GND | ||||
271 | PI15 | 31 | 32 | PWM1 | PI11 | 267 | ||
268 | PI12 | PWM2 | 33 | 34 | GND | |||
258 | PI2 | 35 | 36 | PC12 | 76 | |||
272 | PI16 | 37 | 38 | PI4 | 260 | |||
GND | 39 | 40 | PI3 | 259 |
Linux系统中uart默认都是关闭的,需要手动打开才能使用。打开步骤如下所示:
40pin中的复用功能 | 对应的dtbo配置 |
40pin - uart2 | pi-uart2 |
40pin - uart3 | pi-uart3 |
40pin - uart4 | pi-uart4 |
40pin - uart5 | ph-uart5 |
进入linux系统后,先确认下/dev下是否存在uart5的设备节点
注意,linux5.4系统为/dev/ttyASx。
orangepi@orangepi:~$ ls /dev/ttyS*
/dev/ttySx
然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx引脚
使用wiringOP中的gpio命令测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常
注意,gpio serial /dev/ttySx命令中最后的x需要替换为对应的uart设备节点的序号。
orangepi@orangepi:~$ gpio serial /dev/ttySx # linux-6.1测试命令
orangepi@orangepi:~$ gpio serial /dev/ttyASx # linux-5.4测试命令
Out: 0: -> 0
Out: 1: -> 1
Out: 2: -> 2
Out: 3: -> 3^C
最后可以运行examples中的serialTest.py程序来测试下串口的回环功能,如果能看到下面的打印,说明串口回环测试正常
注意,命令中/dev/ttySx或/dev/ttyASx中的x需要替换为对应的uart设备节点的序号。
root@orangepi:~/wiringOP-Python# cd examples
root@orangepi:~/wiringOP-Python/examples# python3 serialTest.py --device "/dev/ttySx" # linux6.1使用
root@orangepi:~/wiringOP-Python/examples# python3 serialTest.py --device "/dev/ttyASx" # linux5.4使用
Out: 0: -> 0
Out: 1: -> 1
Out: 2: -> 2
Out: 3: -> 3
Out: 4:^C
exit
硬件看门狗测试
Orange Pi发布的linux系统中预装了watchdog_test程序,可以直接测试。
运行watchdog_test程序的方法如下所示:
第二个参数10表示看门狗的计数时间,如果这个时间内没有喂狗,系统会重启
我们可以通过按下键盘上的任意键(ESC除外)来喂狗,喂狗后,程序会打印一行keep alive表示喂狗成功
orangepi@orangepi:~$ sudo watchdog_test 10
open success
options is 33152,identity is sunxi-wdt
put_usr return,if 0,success:0
The old reset time is: 16
return ENOTTY,if -1,success:0
return ENOTTY,if -1,success:0
put_user return,if 0,success:0
put_usr return,if 0,success:0
keep alive
keep alive
keep alive
查看H618芯片的chipid
查看H618芯片chipid的命令如下所示,每个芯片的chipid都是不同的,所以可以使用chipid来区分多个开发板。
orangepi@orangepi:~$ cat /sys/class/sunxi_info/sys_info | grep "chipid"
sunxi_chipid : 338020004c0048080147478824681ed1
Python相关说明
Python源码编译安装的方法
如果使用的Ubuntu或者Debian系统软件仓库中的Python版本不符合开发的要求,想要使用最新版本的Python,可以使用下面的方法下载Python的源码包来编译安装最新版本的Python。
下面演示的是编译安装Python3.9的最新版本,如果要编译安装其他的版本的Python,方法也是一样的(需要下载想要安装的Python对应的源码)。
首先安装编译Python需要的依赖包
orangepi@orangepi:~$ sudo apt-get update
orangepi@orangepi:~$ sudo apt-get install -y build-essential zlib1g-dev \
libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev \
libreadline-dev libffi-dev curl libbz2-dev
然后下载最新版本的Python3.9源码并解压
orangepi@orangepi:~$ wget \
https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz
orangepi@orangepi:~$ tar xvf Python-3.9.10.tgz
然后运行配置命令
orangepi@orangepi:~$ cd Python-3.9.10
orangepi@orangepi:~$ ./configure --enable-optimizations
然后编译安装Python3.9,编译时间大概需要半个小时左右
orangepi@orangepi:~$ make -j4
orangepi@orangepi:~$ sudo make altinstall
安装完后可以使用下面的命令查看下刚安装的Python的版本号
orangepi@orangepi:~$ python3.9 --version
Python 3.9.10
然后更新下pip
orangepi@orangepi:~$ /usr/local/bin/python3.9 -m pip install --upgrade pip
Python更换pip源的方法
Linux系统pip默认使用的源为Python官方的源,但是国内访问Python官方的源速度是很慢的,并且经常会由于网络原因导致Python软件包安装失败。所以在使用pip安装Python库时,请记得更换下pip源。
首先安装下python3-pip
orangepi@orangepi:~$ sudo apt-get update
orangepi@orangepi:~$ sudo apt-get install -y python3-pip
Linux下永久更换pip源的方法
先新建~/.pip目录,然后添加pip.conf配置文件,并在其中设置pip的源为清华源
orangepi@orangepi:~$ mkdir -p ~/.pip
orangepi@orangepi:~$ cat <<EOF > ~/.pip/pip.conf
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF
然后使用pip3安装Python库速度就会很快了
Linux下临时更换pip源的方法,其中的<packagename>需要替换为具体的包名
orangepi@orangepi:~$ pip3 install <packagename> -i \
https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
安装Docker的方法
Orange Pi提供的linux镜像已经预装了Docker,只是Docker服务默认没有打开。使用enable_docker.sh脚本可以使能docker服务,然后就可以开始使用docker命令了,并且在下次启动系统时也会自动启动docker服务。
orangepi@orangepi:~$ enable_docker.sh
可以使用下面的命令测试下docker,如果能运行hello-world说明docker能正常使用了。
orangepi@orangepi:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
256ab8fe8778: Pull complete
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449ef11e0941a1fd0bf4a8e6c9408b2600777c5
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
.….
使用docker命令时,如果提示permission denied,请将当前用户加入到docker用户组,这样不需要sudo就能运行docker命令了。
orangepi@orangepi:~$ sudo usermod -aG docker $USER
注意:需要退出重新登录系统才能生效,重启系统也可以。
Home Assistant的安装方法
注意,这里只会提供在Ubuntu或者Debian系统中安装Home Assistant的方法,Home Assistant详细的使用方法请参考官方文档或者相应的书籍。
通过docker安装
首先请安装好docker,并确保docker能正常运行。docker的安装步骤请参考安装Docker的方法一节的说明。
然后可以搜索下Home Assistant的docker镜像
orangepi@orangepi:~$ docker search homeassistant
然后使用下面的命令下载Home Assistant的docker镜像到本地,镜像大小大概有1GB多,下载时间会比较长,请耐心等待下载完成
orangepi@orangepi:~$ docker pull homeassistant/home-assistant
Using default tag: latest
latest: Pulling from homeassistant/home-assistant
be307f383ecc: Downloading
5fbc4c07ac88: Download complete
...... (省略部分输出)
3cc6a1510c9f: Pull complete
7a4e4d5b979f: Pull complete
Digest: sha256:81d381f5008c082a37da97d8b08dd8b358dae7ecf49e62ce3ef1eeaefc4381bb
Status: Downloaded newer image for homeassistant/home-assistant:latest
docker.io/homeassistant/home-assistant:latest
然后可以使用下面的命令查看下刚下载的Home Assistant的docker镜像
orangepi@orangepi:~$ docker images homeassistant/home-assistant
REPOSITORY TAG IMAGE ID CREATED SIZE
homeassistant/home-assistant latest bfa0ab9e1cf5 2 months ago 1.17GB
此时就可以运行Home Assistant的docker容器了
orangepi@orangepi:~$ docker run -d \
--name homeassistant \
--privileged \
--restart=unless-stopped \
-e TZ=Asia/Shanghai \
-v /home/orangepi/home-assistant:/config \
--network=host \
homeassistant/home-assistant:latest
然后在浏览器中输入【开发板的IP地址:8123】就能看到Home Assistant的界面
Home Assistant容器的启动需要一段时间,如果下面的界面没有正常显示,请等待几秒钟再刷新。如果等待一分钟以上还没有正常显示下面的界面说明Home Assistant安装有问题,此时需要去检查前面的安装设置过程是否有问题了。
然后输入姓名、用户名和密码再点击创建账号
然后按照界面提示根据自己的喜好设置,再点击下一步
然后点击下一步
然后点击完成
Home Assistant最终显示的主界面如下图所示
停止Home Assistant容器的方法
查看docker容器的命令如下所示
orangepi@orangepi:~$ docker ps -a
停止Home Assistant容器的命令如下所示
orangepi@orangepi:~$ docker stop homeassistant
删除Home Assistant容器的命令如下所示
orangepi@orangepi:~$ docker rm homeassistant
通过python安装
安装前请先更换下pip的源为国内源,加快Python包的安装速度,配置方法见Python更换pip源的方法一节的说明。
首先安装依赖包
orangepi@orangepi:~$ sudo apt-get update
orangepi@orangepi:~$ sudo apt-get install -y python3 python3-dev python3-venv \
python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \
libopenjp2-7 libtiff5 libturbojpeg0-dev tzdata
如果是debian12请使用下面的命令:
orangepi@orangepi:~$ sudo apt-get update
orangepi@orangepi:~$ sudo apt-get install -y python3 python3-dev python3-venv \
python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \
libopenjp2-7 libturbojpeg0-dev tzdata
然后需要编译安装Python3.9,方法请参考Python源码编译安装的方法一节
Debian Bullseye默认的Python版本就是Python3.9,所以无需编译安装。
Ubuntu Jammy默认的Python版本就是Python3.10,所以也无需编译安装。
Debian Bookworm默认的Python版本就是Python3.11,所以也无需编译安装。
然后创建Python虚拟环境
Debian Bookworm中是python3.11,请记得替换对应的命令。
orangepi@orangepi:~$ sudo mkdir /srv/homeassistant
orangepi@orangepi:~$ sudo chown orangepi:orangepi /srv/homeassistant
orangepi@orangepi:~$ cd /srv/homeassistant
orangepi@orangepi:~$ python3.9 -m venv .
orangepi@orangepi:~$ source bin/activate
(homeassistant) orangepi@orangepi:/srv/homeassistant$
然后安装需要的Python包
(homeassistant) orangepi@orangepi:/srv/homeassistant$ python3 -m pip install wheel
然后就可以安装Home Assistant Core
(homeassistant) orangepi@orangepi:/srv/homeassistant$ pip3 install homeassistant
然后输入下面的命令就可以运行Home Assistant Core
(homeassistant) orangepi@orangepi:/srv/homeassistant$ hass
然后在浏览器中输入【开发板的IP地址:8123】就能看到Home Assistant的界面
第一次运行hass命令时,会下载安装和缓存一些运行必须的库和依赖包。这个过程可能会花费几分钟的时间。注意,此时在浏览器中是无法看到Home Assistant的界面的,请等待一段时间后再刷新下。
OpenCV的安装方法
使用apt来安装OpenCV
安装命令如下所示
orangepi@orangepi:~$ sudo apt-get update
orangepi@orangepi:~$ sudo apt-get install -y libopencv-dev python3-opencv
然后使用下面的命令打印OpenCV的版本号输出正常,说明OpenCV安装成功
Ubuntu22.04中OpenCV的版本如下所示:
orangepi@orangepi:~$ python3 -c "import cv2; print(cv2.__version__)"
4.5.4
Ubuntu20.04中OpenCV的版本如下所示:
orangepi@orangepi:~$ python3 -c "import cv2; print(cv2.__version__)"
4.2.0
Debian11中OpenCV的版本如下所示:
orangepi@orangepi:~$ python3 -c "import cv2; print(cv2.__version__)"
4.5.1
Debian12中OpenCV的版本如下所示:
orangepi@orangepi:~$ python3 -c "import cv2; print(cv2.__version__)"
4.6.0
设置中文环境以及安装中文输入法
注意,安装中文输入法前请确保开发板使用的Linux系统为桌面版系统。
Debian 系统的安装方法
首先设置默认locale为中文
输入下面的命令可以开始配置locale
orangepi@orangepi:~$ sudo dpkg-reconfigure locales
然后在弹出的界面中选择zh_CN.UTF-8 > UTF-8(通过键盘上的上下方向按键来上下移动,通过空格键来选择,最后通过Tab键可以将光标移动到<OK>,然后回车即可)
然后设置默认locale为zh_CN.UTF-8
退出界面后就会开始locale的设置,命令行显示的输出如下所示
orangepi@orangepi:~$ sudo dpkg-reconfigure locales
Generating locales (this might take a while)...
en_US.UTF-8... done
zh_CN.UTF-8... done
Generation complete.
然后打开Input Method
然后选择OK
然后选择Yes
然后选择fcitx
然后选择OK
然后重启Linux系统才能使配置生效
然后打开Fcitx configuration
然后点击下图所示位置的+号
然后搜索Google Pinyin再点击OK
然后将Google Pinyin放到最前面
然后打开Geany这个编辑器测试下中文输入法
中文输入法测试如下所示
通过Ctrl+Space快捷键可以切换中英文输入法
如果需要整个系统都显示为中文,可以将/etc/default/locale中的变量都设置为zh_CN.UTF-8
orangepi@orangepi:~$ sudo vim /etc/default/locale
# File generated by update-locale
LC_MESSAGES=zh_CN.UTF-8
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN.UTF-8
然后重启系统就能看到系统显示为中文了
Ubuntu 20.04系统的安装方法
首先打开Language Support
然后找到汉语(中国)选项
然后请使用鼠标左键选中汉语(中国)并按住不动,然后往上将其拖到最开始的位置,拖完后的显示如下图所示:
注意,这一步不是很好拖动的,请耐心多试几次。
然后选择Apply System-Wide将中文设置应用到整个系统
然后设置Keyboard input method system为fcitx
然后重启Linux系统使配置生效
重新进入系统后,在下面的界面请选择不要再次询问我,然后请根据自己的喜好决定标准文件夹是否也要更新为中文
然后可以看到桌面都显示为中文了
然后我们可以打开Geany测试下中文输入法,打开方式如下图所示
打开Geany后,默认还是英文输入法,我们可以通过Ctrl+Space快捷键来切换成中文输入法,然后就能输入中文了
Ubuntu 22.04系统的安装方法
首先打开Language Support
然后找到汉语(中国)选项
然后请使用鼠标左键选中汉语(中国)并按住不动,然后往上将其拖到最开始的位置,拖完后的显示如下图所示:
注意,这一步不是很好拖动的,请耐心多试几次。
然后选择Apply System-Wide将中文设置应用到整个系统
然后重启Linux系统使配置生效
重新进入系统后,在下面的界面请选择不要再次询问我,然后请根据自己的喜好决定标准文件夹是否也要更新为中文
然后可以看到桌面都显示为中文了
然后打开Fcitx5配置程序
然后选择使用拼音输入法
选择后的界面如下所示,再点击确定即可
然后我们可以打开Geany测试下中文输入法,打开方式如下图所示
打开Geany后,默认还是英文输入法,我们可以通过Ctrl+Space快捷键来切换成中文输入法,然后就能输入中文了
远程登录Linux系统桌面的方法
使用NoMachine远程登录
请确保开发板安装的Ubuntu或者Debian系统为桌面版本的系统。另外NoMachine也提供了详细的使用文档,强烈建议通读此文档来熟悉NoMachine的使用,文档链接如下所示:
https://knowledgebase.nomachine.com/DT10R00166
NoMachine支持Windows、Mac、Linux、iOS和安卓平台,所以我们可以在多种设备上通过NoMachine来远程登录控制Orange Pi开发板。下面演示下在Windows中通过NoMachine来远程登录Orange Pi开发板的Linux系统桌面。其他平台的安装方法请参考下NoMachine的官方文档。
操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。
首先下载NoMachine软件Linux arm64 deb版本的安装包,然后安装到开发板的Linux系统中
- 由于H618是ARMv8架构的SOC,我们使用的系统为Ubuntu或者Debian,所以这里需要下载NoMachine > for ARM ARMv8 DEB安装包,下载链接如下所示:
注意,这个下载链接可能会变,请认准Armv8/Arm64版本的deb包。
https://downloads.nomachine.com/download/?id=118&distro=ARM
另外在官方工具中也可以下载到NoMachine的安装包
先进入远程登录软件-NoMachine文件夹
然后下载arm64版本的deb安装包
然后将下载的nomachine_x.x.x_x_arm64.deb上传到开发板的Linux系统中
然后使用下面的命令在开发板的Linux系统中安装NoMachine
orangepi@orangepi:~$ sudo dpkg -i nomachine_x.x.x_x_arm64_arm64.deb
- 然后下载NoMachine软件Windows版本的安装包,下载地址如下所示
注意,这个下载链接可能会变。
https://downloads.nomachine.com/download/?id=9
然后在Windows中安装NoMachine,安装完后请重启下电脑
然后在Window中打开NoMachine
NoMachine启动后会自动扫描局域网内其他安装有NoMachine的设备,进入NoMachine的主界面后就可以看到开发板已经在可连接的设备列表里了,然后点击下图红色方框所示的位置即可开始登录开发板的Linux系统桌面
然后点击OK
然后在下图对应的位置输入开发板Linux系统的用户名和密码,再点击OK开始登陆
然后在接下来的界面中都点击OK
最后就能看到开发板Linux系统的桌面了
使用VNC远程登录
操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。
Ubuntu20.04测试VNC很多问题,请不要使用这种方法。
首先运行set_vnc.sh脚本设置下vnc,记得加sudo权限
orangepi@orangepi:~$ sudo set_vnc.sh
You will require a password to access your desktops.
Password: #在这里设置vnc的密码,8位字符
Verify: #在这里设置vnc的密码,8位字符
Would you like to enter a view-only password (y/n)? n
xauth: file /root/.Xauthority does not exist
New 'X' desktop is orangepi:1
Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/orangepi:1.log
Killing Xtightvnc process ID 3047
New 'X' desktop is orangepi:1
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/orangepi:1.log
使用MobaXterm软件连接开发板linux系统桌面的步骤如下所示:
- 首先点击Session,然后选择VNC,再填写开发板的IP地址和端口,最后点击OK确认
然后输入前面设置的VNC的密码
登录成功后的界面显示如下图所示,然后就可以远程操作开发板linux系统的桌面了
QT的安装方法
使用下面的脚本可以安装QT5和QT Creator
orangepi@orangepi:~$ install_qt.sh
安装完后会自动打印QT的版本号
Ubuntu20.04自带的qt版本为5.12.8
orangepi@orangepi:~$ install_qt.sh
......
QMake version 3.1
Using Qt version 5.12.8 in /usr/lib/aarch64-linux-gnu
Ubuntu22.04自带的QT版本为5.15.3
orangepi@orangepi:~$ install_qt.sh
......
QMake version 3.1
Using Qt version 5.15.3 in /usr/lib/aarch64-linux-gnu
Debian11自带的QT版本为5.15.2
orangepi@orangepi:~$ install_qt.sh
......
QMake version 3.1
Using Qt version 5.15.2 in /usr/lib/aarch64-linux-gnu
Debian12自带的QT版本为5.15.8
orangepi@orangepi:~$ install_qt.sh
......
QMake version 3.1
Using Qt version 5.15.8 in /usr/lib/aarch64-linux-gnu
然后在Applications中就可以看到QT Creator的启动图标
也可以使用下面的命令打开QT Creator
orangepi@orangepi:~$ qtcreator
QT Creator打开后的界面如下所示
QT Creator的版本如下所示
然后设置下QT
然后就可以打开一个示例代码
点击示例代码后会自动打开对应的说明文档,可以仔细看下其中的使用说明
然后点击下Configure Project
然后点击左下角的绿色三角形编译运行下示例代码
等待一段时间后,会弹出下图所示的界面,此时就说明QT能正常编译运行
参考资料
https://wiki.qt.io/Install_Qt_5_on_Ubuntu
ROS安装方法
Ubuntu20.04安装ROS 1 Noetic的方法
- ROS 1当前活跃的版本如下所示,推荐版本为Noetic Ninjemys
https://wiki.ros.org/Distributions
ROS 1 Noetic Ninjemys官方安装文档链接如下所示:
ROS Noetic Ninjemys官方安装文档中Ubuntu推荐使用Ubuntu20.04,所以请确保开发板使用的系统为Ubuntu20.04桌面版系统
然后使用下面的脚本安装ros1
orangepi@orangepi:~$ install_ros.sh ros1
使用ROS工具前,首先需要初始化下rosdep,然后编译源码时就能快速的安装一些系统依赖和一些ROS中的核心组件
注意,运行下面的命令需要确保开发板能正常访问github,否则会由于网络问题而报错。
install_ros.sh脚本会尝试修改/etc/hosts并自动运行下面的命令。但是这种方法无法保证每次都能正常访问github,如果install_ros.sh安装完ros1后有提示下面的错误,请自己想其它办法让开发板的linux系统能正常访问github,然后再手动运行下面的命令。
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
ERROR: error loading sources list:
The read operation timed out
orangepi@orangepi:~$ source /opt/ros/noetic/setup.bash
orangepi@orangepi:~$ sudo rosdep init
Wrote /etc/ros/rosdep/sources.list.d/20-default.list
Recommended: please run
rosdep update
orangepi@orangepi:~$ rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
Skip end-of-life distro "ardent"
Skip end-of-life distro "bouncy"
Skip end-of-life distro "crystal"
Skip end-of-life distro "dashing"
Skip end-of-life distro "eloquent"
Add distro "foxy"
Add distro "galactic"
Skip end-of-life distro "groovy"
Add distro "humble"
Skip end-of-life distro "hydro"
Skip end-of-life distro "indigo"
Skip end-of-life distro "jade"
Skip end-of-life distro "kinetic"
Skip end-of-life distro "lunar"
Add distro "melodic"
Add distro "noetic"
Add distro "rolling"
updated cache in /home/orangepi/.ros/rosdep/sources.cache
然后在桌面中打开一个命令行终端窗口,再使用test_ros.sh脚本可以启动一个小海龟的例程来测试下ROS是否能正常使用
orangepi@orangepi:~$ test_ros.sh
运行完test_ros.sh脚本后,会弹出下图所示的一个小海龟
然后请保持刚才打开终端窗口在最上面
此时按下键盘上的方向按键就可以控制小海龟上下左右移动了
Ubuntu20.04安装ROS 2 Galactic的方法
ROS 2当前活跃的版本如下所示,推荐版本为Galactic Geochelone
ROS 2 Galactic Geochelone官方安装文档链接如下所示:
docs.ros.org/en/galactic/Installation.html
http://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.html
ROS 2 Galactic Geochelone官方安装文档中Ubuntu Linux推荐使用Ubuntu20.04,所以请确保开发板使用的系统为Ubuntu20.04桌面版系统。安装ROS 2有几种方法,下面演示下通过Debian packages的方式来安装ROS 2 Galactic Geochelone
使用install_ros.sh脚本可以安装ros2
orangepi@orangepi:~$ install_ros.sh ros2
install_ros.sh脚本安装完ros2后会自动运行下ros2 -h命令,如果能看到下面的打印,说明ros2安装完成
usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...
ros2 is an extensible command-line tool for ROS 2.
optional arguments:
-h, --help show this help message and exit
Commands:
action Various action related sub-commands
bag Various rosbag related sub-commands
component Various component related sub-commands
daemon Various daemon related sub-commands
doctor Check ROS setup and other potential issues
interface Show information about ROS interfaces
launch Run a launch file
lifecycle Various lifecycle related sub-commands
multicast Various multicast related sub-commands
node Various node related sub-commands
param Various param related sub-commands
pkg Various package related sub-commands
run Run a package specific executable
security Various security related sub-commands
service Various service related sub-commands
topic Various topic related sub-commands
wtf Use `wtf` as alias to `doctor`
Call `ros2 <command> -h` for more detailed usage.
然后可以使用 test_ros.sh脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行
orangepi@orangepi:~$ test_ros.sh
[INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1'
[INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]
[INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2'
[INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]
[INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'
[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]
运行下面的命令可以打开rviz2
orangepi@orangepi:~$ source /opt/ros/galactic/setup.bash
orangepi@orangepi:~$ ros2 run rviz2 rviz2
ROS的使用方法请参考下ROS 2的文档
Ubuntu22.04安装ROS 2 Humble的方法
使用install_ros.sh脚本可以安装ros2
orangepi@orangepi:~$ install_ros.sh ros2
install_ros.sh脚本安装完ros2后会自动运行下ros2 -h命令,如果能看到下面的打印,说明ros2安装完成
usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...
ros2 is an extensible command-line tool for ROS 2.
optional arguments:
-h, --help show this help message and exit
Commands:
action Various action related sub-commands
bag Various rosbag related sub-commands
component Various component related sub-commands
daemon Various daemon related sub-commands
doctor Check ROS setup and other potential issues
interface Show information about ROS interfaces
launch Run a launch file
lifecycle Various lifecycle related sub-commands
multicast Various multicast related sub-commands
node Various node related sub-commands
param Various param related sub-commands
pkg Various package related sub-commands
run Run a package specific executable
security Various security related sub-commands
service Various service related sub-commands
topic Various topic related sub-commands
wtf Use `wtf` as alias to `doctor`
Call `ros2 <command> -h` for more detailed usage.
然后可以使用 test_ros.sh脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行
orangepi@orangepi:~$ test_ros.sh
[INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1'
[INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]
[INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2'
[INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]
[INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'
[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]
运行下面的命令可以打开rviz2
orangepi@orangepi:~$ source /opt/ros/humble/setup.bash
orangepi@orangepi:~$ ros2 run rviz2 rviz2
参考文档
http://docs.ros.org/en/humble/index.html
http://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html
安装内核头文件的方法
Linux6.1内核的Debian11系统编译内核模块时会报GCC的错误。所以如果要编译内核模块请使用Debian12或者Ubuntu22.04。
OPi发布的Linux镜像默认自带了内核头文件的deb包,存放的位置为/opt/
orangepi@orangepi:~$ ls /opt/linux-headers*
/opt/linux-headers-xxx-sun50iw9_x.x.x_arm64.deb
使用下面的命令可以安装内核头文件的deb包
orangepi@orangepi:~$ sudo dpkg -i /opt/linux-headers*.deb
安装完后在/usr/src下就能看到内核头文件所在的文件夹
orangepi@orangepi:~$ ls /usr/src
linux-headers-x.x.x
然后可以编译下Linux镜像中自带的hello内核模块的源码,hello模块的源码在/usr/src/hello中,进入此目录后,然后使用make命令编译即可。
orangepi@orangepi:~$ cd /usr/src/hello/
orangepi@orangepi:/usr/src/hello$ sudo make
make -C /lib/modules/5.4.125/build M=/usr/src/hello modules
make[1]: Entering directory '/usr/src/linux-headers-5.4.125'
CC [M] /usr/src/hello/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC [M] /usr/src/hello/hello.mod.o
LD [M] /usr/src/hello/hello.ko
make[1]: Leaving directory '/usr/src/linux-headers-5.4.125'
编译完后会生成hello.ko内核模块
orangepi@orangepi:/usr/src/hello$ ls *.ko
hello.ko
使用insmod命令可以将hello.ko内核模块插入内核中
orangepi@orangepi:/usr/src/hello$ sudo insmod hello.ko
然后使用demsg命令可以查看下hello.ko内核模块的输出,如果能看到下面的输出说明hello.ko内核模块加载正确
orangepi@orangepi:/usr/src/hello$ dmesg | grep "Hello"
[ 2871.893988] Hello Orange Pi -- init
使用rmmod命令可以卸载hello.ko内核模块
orangepi@orangepi:/usr/src/hello$ sudo rmmod hello
orangepi@orangepi:/usr/src/hello$ dmesg | grep "Hello"
[ 2871.893988] Hello Orange Pi -- init
[ 3173.800892] Hello Orange Pi -- exit
Linux系统支持的部分编程语言测试
Debian Bullseye系统
Debian Bullseye默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序
gcc的版本如下所示
orangepi@orangepi:~$ gcc --version
gcc (Debian 10.2.1-6) 10.2.1 20210110
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编写C语言的hello_world.c程序
orangepi@orangepi:~$ vim hello_world.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
然后编译运行hello_world.c
orangepi@orangepi:~$ gcc -o hello_world hello_world.c
orangepi@orangepi:~$ ./hello_world
Hello World!
Debian Bullseye默认安装有Python3
Python具体版本如下所示
orangepi@orangepi:~$ python3
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
使用Ctrl+D快捷键可退出python的交互模式。
编写Python语言的hello_world.py程序
orangepi@orangepi:~$ vim hello_world.py
print('Hello World!')
运行hello_world.py的结果如下所示
orangepi@orangepi:~$ python3 hello_world.py
Hello World!
Debian Bullseye默认没有安装Java的编译工具和运行环境
可以使用下面的命令安装openjdk,Debian > Bullseye中最新版本为openjdk-17
orangepi@orangepi:~$ sudo apt install -y openjdk-17-jdk
安装完后可以查看下Java的版本
orangepi@orangepi:~$ java --version
编写Java版本的hello_world.java
orangepi@orangepi:~$ vim hello_world.java
public class hello_world
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
然后编译运行hello_world.java
orangepi@orangepi:~$ javac hello_world.java
orangepi@orangepi:~$ java hello_world
Hello World!
Debian Bookworm系统
Debian Bookworm默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序
gcc的版本如下所示
orangepi@orangepi:~$ gcc --version
gcc (Debian 12.2.0-14) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编写C语言的hello_world.c程序
orangepi@orangepi:~$ vim hello_world.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
然后编译运行hello_world.c
orangepi@orangepi:~$ gcc -o hello_world hello_world.c
orangepi@orangepi:~$ ./hello_world
Hello World!
Debian Bookworm默认安装有Python3
Python具体版本如下所示
orangepi@orangepi:~$ python3
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
使用Ctrl+D快捷键可退出python的交互模式。
编写Python语言的hello_world.py程序
orangepi@orangepi:~$ vim hello_world.py
print('Hello World!')
运行hello_world.py的结果如下所示
orangepi@orangepi:~$ python3 hello_world.py
Hello World!
Debian Bookworm默认没有安装Java的编译工具和运行环境
可以使用下面的命令安装openjdk,Debian > Bookworm中最新版本为openjdk-17
orangepi@orangepi:~$ sudo apt install -y openjdk-17-jdk
安装完后可以查看下Java的版本
orangepi@orangepi:~$ java --version
编写Java版本的hello_world.java
orangepi@orangepi:~$ vim hello_world.java
public class hello_world
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
然后编译运行hello_world.java
orangepi@orangepi:~$ javac hello_world.java
orangepi@orangepi:~$ java hello_world
Hello World!
Ubuntu Focal系统
Ubuntu Focal默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序
gcc的版本如下所示
orangepi@orangepi:~$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编写C语言的hello_world.c程序
orangepi@orangepi:~$ vim hello_world.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
然后编译运行hello_world.c
orangepi@orangepi:~$ gcc -o hello_world hello_world.c
orangepi@orangepi:~$ ./hello_world
Hello World!
Ubuntu Focal默认安装有Python3
Python3具体版本如下所示
orangepi@orangepi:~$ python3
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
使用Ctrl+D快捷键可退出python的交互模式。
编写Python语言的hello_world.py程序
orangepi@orangepi:~$ vim hello_world.py
print('Hello World!')
运行hello_world.py的结果如下所示
orangepi@orangepi:~$ python3 hello_world.py
Hello World!
Ubuntu Focal默认没有安装Java的编译工具和运行环境
可以使用下面的命令安装openjdk-17
orangepi@orangepi:~$ sudo apt install -y openjdk-17-jdk
安装完后可以查看下Java的版本
orangepi@orangepi:~$ java --version
openjdk 17.0.2 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-Ubuntu-120.04)
OpenJDK 64-Bit Server VM (build 17.0.2+8-Ubuntu-120.04, mixed mode, sharing)
编写Java版本的hello_world.java
orangepi@orangepi:~$ vim hello_world.java
public class hello_world
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
然后编译运行hello_world.java
orangepi@orangepi:~$ javac hello_world.java
orangepi@orangepi:~$ java hello_world
Hello World!
Ubuntu Jammy系统
Ubuntu Jammy默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序
gcc的版本如下所示
orangepi@orangepi:~$ gcc --version
gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编写C语言的hello_world.c程序
orangepi@orangepi:~$ vim hello_world.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
然后编译运行hello_world.c
orangepi@orangepi:~$ gcc -o hello_world hello_world.c
orangepi@orangepi:~$ ./hello_world
Hello World!
Ubuntu Jammy默认安装有Python3
Python3具体版本如下所示
orangepi@orangepi:~$ python3
Python 3.10.6 (main, May 29 2023, 11:10:38) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
使用Ctrl+D快捷键可退出python的交互模式。
编写Python语言的hello_world.py程序
orangepi@orangepi:~$ vim hello_world.py
print('Hello World!')
运行hello_world.py的结果如下所示
orangepi@orangepi:~$ python3 hello_world.py
Hello World!
Ubuntu Jammy默认没有安装Java的编译工具和运行环境
可以使用下面的命令安装openjdk-18
orangepi@orangepi:~$ sudo apt install -y openjdk-18-jdk
安装完后可以查看下Java的版本
orangepi@orangepi:~$ java --version
openjdk 18.0.2-ea 2022-07-19
OpenJDK Runtime Environment (build 18.0.2-ea+9-Ubuntu-222.04)
OpenJDK 64-Bit Server VM (build 18.0.2-ea+9-Ubuntu-222.04, mixed mode, sharing)
编写Java版本的hello_world.java
orangepi@orangepi:~$ vim hello_world.java
public class hello_world
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
然后编译运行hello_world.java
orangepi@orangepi:~$ javac hello_world.java
orangepi@orangepi:~$ java hello_world
Hello World!
上传文件到开发板Linux系统中的方法
在Ubuntu PC中上传文件到开发板Linux系统中的方法
使用scp命令上传文件的方法
使用scp命令可以在Ubuntu PC中上传文件到开发板的Linux系统中,具体命令如下所示
file_path:需要替换为要上传文件的路径
orangepi:为开发板linux系统的用户名,也可以替换成其它的,比如root
192.168.xx.xx: 为开发板的IP地址,请根据实际情况进行修改
/home/orangepi: > 开发板linux系统中的路径,也可以修改为其它的路径
test@test:~$ scp file_path orangepi@192.168.xx.xx:/home/orangepi/
如果要上传文件夹,需要加上-r参数
test@test:~$ scp -r dir_path orangepi@192.168.xx.xx:/home/orangepi/
scp还有更多的用法,请使用下面的命令查看man手册
test@test:~$ man scp
使用filezilla上传文件的方法
首先在Ubuntu PC中安装filezilla
test@test:~$ sudo apt install -y filezilla
然后使用下面的命令打开filezilla
test@test:~$ filezilla
filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的
连接开发板的方法如下图所示
然后选择保存密码,再点击确定
然后选择总是信任该主机,再点击确定
- 连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了
- 然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Ubuntu PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了。
上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了
上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了
在Windows PC中上传文件到开发板Linux系统中的方法
使用filezilla上传文件的方法
- 首先下载filezilla软件Windows版本的安装文件,下载链接如下所示
https://filezilla-project.org/download.php?type=clientIMG_256
下载的安装包如下所示,然后双击直接安装即可
FileZilla_Server_1.5.1_win64-setup.exe
安装过程中,下面的安装界面请选择Decline,然后再选择Next>
- filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的
- 连接开发板的方法如下图所示:
- 然后选择保存密码,再点击确定
- 然后选择总是信任该主机,再点击确定
- 连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了
- 然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Windows PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了
上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了
上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了
开关机logo使用说明
开关机logo默认只在桌面版的系统中才会显示
在/boot/orangepiEnv.txt中设置bootlogo变量为false可以关闭开关机logo
orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt
verbosity=1
bootlogo=false
在/boot/orangepiEnv.txt中设置bootlogo变量为true可以开启开关机logo
orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt
verbosity=1
bootlogo=true
开机logo图片在linux系统中的位置为
/usr/share/plymouth/themes/orangepi/watermark.png
替换开机logo图片后需要运行下命令才能生效
orangepi@orangepi:~$ sudo update-initramfs -u
Linux5.4打开开关机按键的方法
开发板主板上没有开关机按键,我们可以通过24pin扩展板来扩展。开关机按键在扩展板上的位置如下所示:
Linux6.1镜像开关机按键默认是打开的,但Linux5.4内核镜像的开关机按键默认是关闭的,需要手动打开才能正常使用。步骤如下所示:
首先运行下orangepi-config,普通用户记得加sudo权限
orangepi@orangepi:~$ sudo orangepi-config
然后选择System
然后选择Hardware
然后使用键盘的方向键定位到下图所示的位置,再使用空格选中想要打开的SPI的dtbo配置
然后选择<Save>保存
然后选择<Back>
然后选择<Reboot>重启系统使配置生效
关机和重启开发板的方法
在Linux系统运行的过程中,如果直接拔掉电源断电,可能会导致文件系统丢失某些数据,建议断电前先使用poweroff命令关闭开发板的Linux系统,然后再拔掉电源
orangepi@orangepi:~$ sudo poweroff
注意,关闭开发板后需要重新拔插电源才能开机。
除了使用poweroff命令关机外,还可以使用扩展板上的开关机按键来关机
注意,Linux5.4需要手动打开开关机按键的配置才能使用。打开方法请参考Linux5.4打开开关机按键的方法。
使用reboot命令即可重启开发板中的Linux系统
orangepi@orangepi:~$ sudo reboot
Linux SDK——orangepi-build使用说明
编译系统需求
Linux SDK,即orangepi-build,只支持在安装有Ubuntu 22.04的X64电脑上运行,所以下载orangepi-build前,请首先确保自己电脑已安装的Ubuntu版本是Ubuntu 22.04。查看电脑已安装的Ubuntu版本的命令如下所示,如果Release字段显示的不是22.04,说明当前使用的Ubuntu版本不符合要求,请更换系统后再进行下面的操作。
test@test:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04 LTS
Release: 22.04
Codename: jammy
如果电脑安装的是Windows系统,没有安装有Ubuntu 22.04的电脑,可以考虑使用VirtualBox或者VMware来在Windows系统中安装一个Ubuntu 22.04虚拟机。但是请注意,不要在WSL虚拟机上编译orangepi-build,因为orangepi-build没有在WSL虚拟机中测试过,所以无法确保能正常在WSL中使用orangepi-build,另外请不要在开发板的Linux系统中使用orangepi-build。Ubuntu 22.04 amd64版本的安装镜像下载地址为:
https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/ubuntu-22.04-desktop-amd64.iso
在电脑中或者虚拟机中安装完Ubuntu 22.04后,请先设置Ubuntu 22.04的软件源为清华源(或者其它你觉得速度快的国内源),不然后面安装软件的时候很容易由于网络原因而出错。替换清华源的步骤如下所示:
- 替换清华源的方法参考这个网页的说明即可。
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
注意Ubuntu版本需要切换到22.04。
需要替换的/etc/apt/sources.list文件的内容为:
test@test:~$ sudo mv /etc/apt/sources.list cat /etc/apt/sources.list.bak
test@test:~$ sudo vim /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
替换完后需要更新下包信息,并确保没有报错。
test@test:~$ sudo apt-get update
另外,由于内核和U-boot等源码都是存放在GitHub上的,所以编译镜像的时候请确保电脑能正常从GitHub下载代码,这点是非常重要的。
获取linux sdk的源码
从github下载orangepi-build
linux sdk指的是orangepi-build这套代码,orangepi-build是基于armbian build编译系统修改而来的,使用orangepi-build可以编译出多个版本的linux镜像。使用下面的命令可以下载orangepi-build的代码:
test@test:~$ sudo apt-get update
test@test:~$ sudo apt-get install -y git
test@test:~$ git clone https://github.com/orangepi-xunlong/orangepi-build.git -b next
注意,使用H618 Soc的开发板是需要下载orangepi-build的next分支源码的,上面的git clone命令需要指定orangepi-build源码的分支为next。
通过git clone命令下载orangepi-build的代码是不需要输入github账号的用户名和密码的(下载本手册中的其他代码也是一样的),如果如输入git clone命令后Ubuntu PC提示需要输入github账号的用户名和密码,一般都是git clone后面的orangepi-build仓库的地址输入错误了,请仔细检查命令拼写是否有错误,而不是以为我们这里忘了提供github账号的用户名和密码。
H618系列开发板当前使用的u-boot和linux内核版本如下所示:
分支 | u-boot版本 | linux内核版本 |
current | u-boot v2018.05 | linux5.4 |
next | u-boot v2021.07 | linux6.1 |
这里所说的分支和orangepi-build源代码的分支不是同一个东西,请不要搞混了。此分支主要是用来区分不同内核源码版本的。
目前全志提供的linux5.4 bsp内核我们定义为current分支。最新的linux6.1 LTS内核定义为next分支。
orangepi-build下载完后会包含下面的文件和文件夹:
build.sh: 编译启动脚本
external: > 包含编译镜像需要用的配置文件、特定的脚本以及部分程序的源码等
LICENSE: GPL 2许可证文件
README.md: orangepi-build说明文件
scripts: 编译linux镜像的通用脚本
test@test:~/orangepi-build$ ls
build.sh external LICENSE README.md scripts
如果是从github下载的orangepi-build的代码,下载完后你可能会发现orangepi-build中并没有包含u-boot和linux内核的源码,也没有编译u-boot和linux内核需要用到交叉编译工具链,这是正常的,因为这些东西都存放在其它单独的github仓库或者某些服务器上了(下文会详述其地址)。orangepi-build在脚本和配置文件中会指定u-boot、linux内核和交叉编译工具链的地址,运行orangepi-build时,当其发现本地没有这些东西,会自动去相应的地方下载的。
下载交叉编译工具链
orangepi-build第一次运行的时候会自动下载交叉编译工具链放在toolchains文件夹中,每次运行orangepi-build的build.sh脚本后,都会检查toolchains中的交叉编译工具链是否都存在,如果不存在则会重新开始下载,如果存在则直接使用,不会重复下载。
交叉编译工具链在中国境内的镜像网址为清华大学的开源软件镜像站:
https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/
toolchains下载完后会包含多个版本的交叉编译工具链:
test@test:~/orangepi-build$ ls toolchains/
gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi
gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi gcc-linaro-aarch64-none-elf-4.8-2013.11_linux
gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux
gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu gcc-linaro-arm-none-eabi-4.8-2014.04_linux
编译H618 Linux内核源码使用的交叉编译工具链为:
linux5.4
gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu
linux6.1
gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu
编译H618 u-boot源码使用的交叉编译工具链为:
v2018.05
gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi
v2021.07
gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu
orangepi-build完整目录结构说明
orangepi-build仓库下载完后并不包含linux内核、u-boot的源码以及交叉编译工具链,linux内核和u-boot的源码存放在独立的git仓库中
linux内核源码存放的git仓库如下,注意切换linux-orangepi仓库的分支为
Linux5.4
https://github.com/orangepi-xunlong/linux-orangepi/tree/orange-pi-5.4-sun50iw9
Linux6.1
https://github.com/orangepi-xunlong/linux-orangepi/tree/orange-pi-6.1-sun50iw9
u-boot源码存放的git仓库如下,注意切换u-boot-orangepi仓库的分支为
v2018.05
https://github.com/orangepi-xunlong/u-boot-orangepi/tree/v2018.05-h618
v2021.07
https://github.com/orangepi-xunlong/u-boot-orangepi/tree/v2021.07-sunxi
orangepi-build第一次运行的时候会去下载交叉编译工具链、u-boot和linux内核源码,成功编译完一次linux镜像后在orangepi-build中可以看到的文件和文件夹有
build.sh: 编译启动脚本
external: > 包含编译镜像需要用的配置文件、特定功能的脚本以及部分程序的源码,编译镜像过程中缓存的rootfs压缩包也存放在external中
kernel: 存放linux内核的源码
LICENSE: GPL 2许可证文件
README.md: orangepi-build说明文件
output: > 存放编译生成的u-boot、linux等deb包、编译日志以及编译生成的镜像等文件
scripts: 编译linux镜像的通用脚本
toolchains: 存放交叉编译工具链
u-boot: 存放u-boot的源码
userpatches: 存放编译脚本需要用到的配置文件
test@test:~/orangepi-build$ ls
build.sh external kernel LICENSE output README.md scripts toolchains u-boot userpatches
编译u-boot
运行build.sh脚本,记得加sudo权限
test@test:~/orangepi-build$ sudo ./build.sh
选择U-boot package,然后回车
接着选择开发板的型号
然后选择u-boot的分支类型
current分支会编译linux5.4镜像需要使用的u-boot v2018.05版本的代码
next分支会编译linux6.1镜像需要使用的u-boot v2021.07版本的代码
如果选择的next分支还会提示需要选择内存的大小,current分支不需要选择
如果购买的开发板为1.5GB内存大小的,请选择第一项
如果购买的开发板为1GB或2GB或4GB内存大小的,请选择第二项
然后就会开始编译u-boot,编译next分支时提示的部分信息说明如下所示:
u-boot源码的版本
[ o.k. ] Compiling u-boot [ v2021.07 ]
交叉编译工具链的版本
[ o.k. ] Compiler version [ aarch64-linux-gnu-gcc 11 ]
编译生成的u-boot deb包的路径
[ o.k. ] Target directory [ orangepi-build/output/debs/u-boot ]
编译生成的u-boot deb包的包名
[ o.k. ] File name [ linux-u-boot-next-orangepizero2w_x.x.x_arm64.deb ]
编译使用的时间
[ o.k. ] Runtime [ 1 min ]
重复编译u-boot的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译u-boot
[ o.k. ] Repeat Build Options [ sudo ./build.sh BOARD=orangepizero2w BRANCH=next BUILD_OPT=u-boot ]
查看编译生成的u-boot deb包
test@test:~/orangepi-build$ ls output/debs/u-boot/
linux-u-boot-next-orangepizero2w_x.x.x_arm64.deb
orangepi-bulid编译系统编译u-boot源码时首先会将u-boot的源码和github服务器的u-boot源码进行同步,所以如果想修改u-boot的源码,首先需要关闭源码的下载更新功能(需要完整编译过一次u-boot后才能关闭这个功能,否则会提示找不到u-boot的源码),否则所作的修改都会被还原,方法如下:
设置userpatches/config-default.conf中的IGNORE_UPDATES变量为”yes”
test@test:~/orangepi-build$ vim userpatches/config-default.conf
......
IGNORE_UPDATES="yes"
......
调试u-boot代码时,可以使用下面的方法来更新linux镜像中的u-boot进行测试
首先将编译好的u-boot的deb包上传到开发板的linux系统中
test@test:~/orangepi-build$ cd output/debs/u-boot
test@test:~/orangepi_build/output/debs/u-boot$ scp \
linux-u-boot-next-orangepizero2w_x.x.x_arm64.deb root@192.168.1.xxx:/root
再安装刚才上传的新的u-boot的deb包
orangepi@orangepi:~$ sudo dpkg -i linux-u-boot-next-orangepizero2w_x.x.x_arm64.deb
然后运行 nand-sata-install脚本
orangepi@orangepi:~$ sudo nand-sata-install
然后选择5 Install/Update the bootloader on SD/eMMC
按下回车键后首先会弹出一个Warning
再按下回车键就会开始更新u-boot,更新完后会显示下面的信息
然后就可以重启开发板来测试u-boot的修改是否生效了
编译linux内核
运行build.sh脚本,记得加sudo权限
test@test:~/orangepi-build$ sudo ./build.sh
选择Kernel package,然后回车
然后会提示是否需要显示内核配置界面,如果不需要修改内核配置,则选择第一个即可,如果需要修改内核配置,则选择第二个
接着选择开发板的型号
然后选择内核源码的分支类型
current分支会编译linux5.4内核源码
next分支会编译linux6.1内核源码
如果第3)步选择了需要显示内核配置菜单(第二个选项),则会弹出通过make menuconfig打开的内核配置的界面,此时可以直接修改内核的配置,修改完后再保存退出即可,退出后会开始编译内核源码。
如果不需要修改内核的配置选项,在运行build.sh脚本时,传入KERNEL_CONFIGURE=no就可临时屏蔽弹出内核的配置界面了
test@test:~/orangepi-build$ sudo ./build.sh KERNEL_CONFIGURE=no
也可以设置orangepi-build/userpatches/config-default.conf配置文件中的KERNEL_CONFIGURE=no,这样可以永久禁用这个功能
编译内核的时候如果提示下面的错误,这是由于Ubuntu > PC的终端界面太小,导致make menuconfig的界面无法显示,请把Ubuntu > PC的终端调到最大,然后重新运行build.sh脚本
编译next分支内核源码时提示的部分信息说明如下:
linux内核源码的版本
[ o.k. ] Compiling current kernel [ 6.1.31 ]
使用的交叉编译工具链的版本
[ o.k. ] Compiler version [ aarch64-linux-gnu-gcc 11 ]
内核默认使用的配置文件以及它存放的路径如下所示
[ o.k. ] Using kernel config file [ orangepi-build/external/config/kernel/linux-6.1-sun50iw9-next.config ]
编译生成的内核相关的deb包的路径
[ o.k. ] Target directory [ output/debs/ ]
编译生成的内核镜像deb包的包名
[ o.k. ] File name [ linux-image-next-sun50iw9_x.x.x_arm64.deb ]
编译使用的时间
[ o.k. ] Runtime [ 10 min ]
最后会显示重复编译上一次选择的内核的编译命令,使用下面的命令无需通过图形界面选择,可以直接开始编译内核源码
[ o.k. ] Repeat Build Options [ sudo ./build.sh BOARD=orangepizero2w BRANCH=next BUILD_OPT=kernel KERNEL_CONFIGURE=no ]
查看编译生成的内核相关的deb包
linux-dtb-next-sun50iw9_x.x.x_arm64.deb包含有内核使用的dtb文件
linux-headers-next-sun50iw9_x.x.x_arm64.deb包含内核头文件
linux-image-next-sun50iw9_x.x.x_arm64.deb包含内核镜像和内核模块
test@test:~/orangepi-build$ ls output/debs/linux-*
output/debs/linux-dtb-next-sun50iw9_x.x.x_arm64.deb
output/debs/linux-headers-next-sun50iw9_x.x.x_arm64.deb
output/debs/linux-image-next-sun50iw9_x.x.x_arm64.deb
orangepi-bulid编译系统编译linux内核源码时首先会将linux内核源码和github服务器的linux内核源码进行同步,所以如果想修改linux内核的源码,首先需要关闭源码的更新功能(需要完整编译过一次linux内核源码后才能关闭这个功能,否则会提示找不到linux内核的源码),否则所作的修改都会被还原,方法如下:
设置userpatches/config-default.conf中的IGNORE_UPDATES变量为”yes”
test@test:~/orangepi-build$ vim userpatches/config-default.conf
IGNORE_UPDATES="yes"
如果对内核做了修改,可以使用下面的方法来更新开发板linux系统的内核和内核模块
将编译好的linux内核的deb包上传到开发板的linux系统中
test@test:~/orangepi-build$ cd output/debs
test@test:~/orangepi-build/output/debs$ scp \
linux-image-next-sun50iw9_x.x.x_arm64.deb root@192.168.1.xxx:/root
再安装刚才上传的新的linux内核的deb包
orangepi@orangepi:~$ sudo dpkg -i linux-image-next-sun50iw9_x.x.x_arm64.deb
然后重启开发板,再查看内核相关的修改是否已生效
orangepi@orangepi:~$ sudo reboot
编译rootfs
运行build.sh脚本,记得加sudo权限
test@test:~/orangepi-build$ sudo ./build.sh
选择Rootfs and all deb packages,然后回车
接着选择开发板的型号
然后选择内核源码的分支类型,不同版本的内核源码维护的rootfs类型有区别
current分支可以看到debian11、ubuntu20.04、ubuntu22.04三个选项
next分支可以看到debian11、debian12、ubuntu22.04三个选项
然后选择rootfs的类型
然后选择镜像的类型
Image with console interface > (server)表示服务器版的镜像,体积比较小
Image with desktop environment表示带桌面的镜像,体积比较大
如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多(没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了)
如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护XFCE,所以请选择XFCE类型的桌面
然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。
然后就会开始编译rootfs,编译时提示的部分信息说明如下
rootfs的类型
[ o.k. ] local not found [ Creating new rootfs cache for bullseye ]
编译生成的rootfs压缩包的存放路径
[ o.k. ] Target directory [ orangepi-build/external/cache/rootfs ]
编译生成的rootfs压缩包的名字
[ o.k. ] File name [ bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4 ]
查看编译生成的rootfs压缩包
bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4是rootfs的压缩包,名字各字段的含义为
bullseye表示rootfs的linux发行版的类型
xfce表示rootfs为桌面版的类型,如果为cli则表示服务器版类型
arm64表示rootfs的架构类型
25250ec7002de9e81a41de169f1f89721是由rootfs安装的所有软件包的包名生成的MD5哈希值,只要没有修改rootfs安装的软件包的列表,那么这个值就不会变,编译脚本会通过这个MD5哈希值来判断是否需要重新编译rootfs
bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list列出了rootfs安装的所有软件包的包名
test@test:~/orangepi-build$ ls external/cache/rootfs/
bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4
bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.current
bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list
如果需要的rootfs在external/cache/rootfs下已经存在,那么再次编译rootfs就会直接跳过编译过程,不会重新开始编译,编译镜像的时候也会去external/cache/rootfs下查找是否已经有缓存可用的rootfs,如果有就直接使用,这样可以节省大量的下载编译时间
编译linux镜像
运行build.sh脚本,记得加sudo权限
test@test:~/orangepi-build$ sudo ./build.sh
选择Full OS image for flashing,然后回车
然后选择开发板的型号
然后选择内核源码的分支类型,不同版本的内核源码维护的rootfs类型有区别
current分支可以看到debian11、ubuntu20.04、ubuntu22.04三个选项
next分支可以看到debian11、debian12、ubuntu22.04三个选项
如果选择的next分支还会提示需要选择内存的大小,current分支不需要选择
如果购买的开发板为1.5GB内存大小的,请选择第一项
如果购买的开发板为1GB或2GB或4GB内存大小的,请选择第二项
然后选择rootfs的类型
然后选择镜像的类型
Image with console interface > (server)表示服务器版的镜像,体积比较小
Image with desktop environment表示带桌面的镜像,体积比较大
如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多(没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了)
如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护XFCE,所以请选择XFCE类型的桌面
然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。
然后就会开始编译linux镜像,编译的大致流程如下
初始化Ubuntu PC的编译环境,安装编译过程需要的软件包
下载u-boot和linux内核的源码(如果已经缓存,则只更新代码)
编译u-boot源码,生成u-boot的deb包
编译linux源码,生成linux相关的deb包
制作linux firmware的deb包
制作orangepi-config工具的deb包
制作板级支持的deb包
如果是编译desktop版镜像,还会制作desktop相关的deb包
检查rootfs是否已经缓存,如果没有缓存,则重新制作rootfs,如果已经缓存,则直接解压使用
安装前面生成的deb包到rootfs中
对不同的开发板和不同类型镜像做一些特定的设置,如预装额外的软件包,修改系统配置等
然后制作镜像文件,并格式化分区,默认类型为ext4
再将配置好的rootfs拷贝到镜像的分区中
然后更新initramfs
最后将u-boot的bin文件通过dd命令写入到镜像中
编译完镜像后会提示下面的信息
编译生成的镜像的存放路径
[ o.k. ] Done building [ output/images/orangepizero2w_x.x.x_debian_bullseye_linux6.1.xx_xfce_desktop/orangepizero2w_x.x.x_debian_bullseye_linux6.1.xx_xfce_desktop.img ]
编译使用的时间
[ o.k. ] Runtime [ 19 min ]
重复编译镜像的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译镜像
[ o.k. ] Repeat Build Options [ sudo ./build.sh BOARD=orangepizero2w BRANCH=next BUILD_OPT=image RELEASE=bullseye BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=yes ]
Orange Pi OS Arch系统的使用说明
Orange Pi OS Arch系统功能适配情况
主板功能 | OPi OS Arch |
HDMI视频 | OK |
HDMI音频 | OK |
Type-C USB2.0 x 2 | OK |
TF卡启动 | OK |
WIFI | OK |
蓝牙 | OK |
LED灯 | OK |
40pin GPIO | OK |
40pin I2C | OK |
40pin SPI | OK |
40pin UART | OK |
40pin PWM | OK |
温度传感器 | OK |
硬件看门狗 | OK |
Mali GPU | NO |
视频编解码 | NO |
24pin扩展板功能 | OPi OS Arch |
百兆网口 | OK |
百兆网口灯 | OK |
USB2.0 HOST x 2 | OK |
红外接收 | OK |
耳机音频播放 | OK |
开关机按键 | OK |
LRADC自定义按键 x 2 | OK |
TV-OUT | NO |
Orange Pi OS Arch系统用户向导使用说明
首先请注意,OPi OS Arch系统是没有设置默认的orangepi用户和密码的,所以烧录完系统启动后是无法直接通过串口和ssh远程登录的(root用户也不行)。这一点和Ubuntu、Debian系统是有区别的。
OPi OS Arch系统第一次启动时需要接上HDMI显示器,然后通过用户向导来初始化系统设置(其中包括新建用户名和设置密码)。用户向导的设置步骤如下所示:
烧录完系统第一次启动进入桌面后会看到下图所示的用户向导程序
首先需要选择想要语言
在选择完语言后,用户向导会立即切换为对应的语言界面,如中文显示如下所示
然后选择区域
然后选择键盘型号
然后新建用户名和设置密码
然后确保选择没问题后,再点击安装按钮
然后等待安装完成
安装完成需要点击完成按钮重启系统
重启后会自动启动Orange Pi Hello程序,此时需要去掉右下角开机时启动的勾选状态,不然每次启动都需要手动关闭Orange Pi Hello程序
此时就可以使用刚才新建的用户名和密码通过串口或者ssh登录OPi OS系统了。
设置DT overlays的方法
开发板40pin中的I2C/SPI/UART/PWM等复用功能默认在内核的dts中都是关闭的,需要手动打开对应的DT overlays才能使用。
在OPi OS Arch系统中打开DT overlays的方法如下所示:
首先打开/boot/extlinux/extlinux.conf配置文件
[orangepi@orangepi-pc ~]$ sudo vim /boot/extlinux/extlinux.conf
然后在/boot/extlinux/extlinux.conf中通过添加FDTOVERLAYS /dtbs/allwinner/overlay/xxx.dtbo来打开对应的配置
注意FDTOVERLAYS /dtbs/allwinner/overlay/xxx.dtbo中的xxx.dtbo需要替换为具体的dtbo配置,请不要照抄。
[orangepi@orangepi-pc ~]$ sudo vim /boot/extlinux/extlinux.conf
LABEL Orange Pi
KERNEL /Image
FDT /dtbs/allwinner/sun50i-h616-orangepi-zero2w.dtb
FDTOVERLAYS /dtbs/allwinner/overlay/xxx.dtbo #需要添加的配置
xxx.dtbo在OPi OS Arch镜像中的存放路径如下所示,请注意,此路径下面不是所有的dtbo都可以使用的。
/boot/dtbs/allwinner/overlay/
开发板可以使用的DT overlays配置如下所示
开发板上的功能 | 对应的DT overlays配置 |
40pin - i2c0 | sun50i-h616-pi-i2c0.dtbo |
40pin - i2c1 | sun50i-h616-pi-i2c1.dtbo |
40pin - i2c2 | sun50i-h616-pi-i2c2.dtbo |
40pin - uart2 | sun50i-h616-pi-uart2.dtbo |
40pin - uart3 | sun50i-h616-pi-uart3.dtbo |
40pin - uart4 | sun50i-h616-pi-uart4.dtbo |
40pin - uart5 | sun50i-h616-ph-uart5.dtbo |
40pin - pwm1 | sun50i-h616-pi-pwm1.dtbo |
40pin - pwm2 | sun50i-h616-pi-pwm2.dtbo |
40pin - pwm3 | sun50i-h616-pi-pwm3.dtbo |
40pin - pwm4 | sun50i-h616-pi-pwm4.dtbo |
40pin - spi1 cs0 | sun50i-h616-spi1-cs0-spidev.dtbo |
40pin - spi1 cs1 | sun50i-h616-spi1-cs1-spidev.dtbo |
40pin - spi1 cs0 cs1 | sun50i-h616-spi1-cs0-cs1-spidev.dtbo |
设置USB0为Host模式 | sun50i-h616-usb0-host.dtbo |
关闭绿色的LED灯 | sun50i-h616-zero2w-disable-led.dtbo |
关闭UART0调试串口的方法 | sun50i-h616-disable-uart0.dtbo |
如果需要同时打开多个配置,直接在FDTOVERLAYS后面将多个配置的路径加上即可,比如同时打开i2c1和uart5的配置如下所示
[orangepi@orangepi-pc ~]$ sudo vim /boot/extlinux/extlinux.conf
LABEL Orange Pi
KERNEL /Image
FDT /dtbs/allwinner/sun50i-h616-orangepi-zero2w.dtb
FDTOVERLAYS /dtbs/allwinner/overlay/sun50i-h616-pi-i2c1.dtbo /dtbs/allwinner/overlay/sun50i-h616-ph-uart5.dtbo
设置好后需要重启系统才能让配置生效
[orangepi@orangepi-pc ~]$ sudo reboot
安装软件的方法
使用pacman包管理工具可以安装OPi OS中没有的软件,比如安装vim编辑器的命令如下所示,如果想安装其他软件,只需要把vim替换想要安装的软件的包名即可。
[orangepi@orangepi-pc ~]$ sudo pacman -Syy vim
Android 12 TV系统使用说明
已支持的Android版本
Android版本 | 内核版本 |
Android 12 TV版 | linux5.4 |
Android 12 TV功能适配情况
主板功能 | Android12 TV |
HDMI视频 | OK |
HDMI音频 | OK |
Type-C USB2.0 x 2 | OK |
TF卡启动 | OK |
WIFI | OK |
蓝牙 | OK |
USB摄像头 | OK |
LED灯 | OK |
40pin GPIO | OK |
40pin I2C | OK |
40pin SPI1 | OK |
40pin UART | OK |
40pin PWM | OK |
温度传感器 | OK |
硬件看门狗 | OK |
Mali GPU | OK |
视频编解码 | OK |
24pin扩展板功能 | Android12 TV |
百兆网口 | OK |
百兆网口灯 | OK |
USB2.0 HOST x 2 | OK |
红外接收 | OK |
耳机音频播放 | OK |
开关机按键 | OK |
LRADC自定义按键 x 2 | OK,默认设置为音量加减按键 |
TV-OUT | OK |
板载LED灯显示说明
绿灯 | 红灯 | |
u-boot启动阶段 | 灭 | 亮 |
内核启动到进入系统 | 亮 | 亮 |
Android返回上一级界面的方法
我们一般都是使用鼠标和键盘来控制开发板的安卓系统,当进入某些界面,需要返回上一级界面或者桌面时,只能通过鼠标右键来返回,键盘是无法返回的。
如果有购买开发板配套的红外遥控(其他遥控不行)和24pin扩展板,将24pin扩展板接入开发板后,还可以通过遥控中的返回键来返回上一级菜单,返回键的位置如下图所示:
ADB的使用方法
使用网络连接adb调试
使用网络adb无需USB Typc C接口的数据线来连接电脑和开发板,而是通过网络来通信,所以首先请确保开发板的有线或者无线网络已经连接好了,然后获取开发板的IP地址,后面要用到。
确保Android系统的service.adb.tcp.port设置为5555端口号
apollo-p2:/ # getprop | grep "adb.tcp"
[service.adb.tcp.port]: [5555]
如果service.adb.tcp.port没有设置,可以在串口中使用下面的命令设置网络adb的端口号
apollo-p2:/ # setprop service.adb.tcp.port 5555
apollo-p2:/ # stop adbd
apollo-p2:/ # start adbd
在Ubuntu PC上安装adb工具
test@test:~$ sudo apt-get update
test@test:~$ sudo apt-get install -y adb
然后在Ubuntu PC上连接网络adb
test@test:~$ adb connect 192.168.1.xxx:5555 (需要修改为开发板的IP地址)
* daemon not running; starting now at tcp:5037
* daemon started successfully
connected to 192.168.1.xxx:5555
test@test:~$ adb devices
List of devices attached
192.168.1.xxx:5555 device
然后在Ubuntu PC上通过adb shell就可以登录android系统
test@test:~$ adb shell
apollo-p2:/ #
使用数据线连接adb调试
准备一根USB Typc C接口的数据线, USB接口一端插入电脑的USB接口中,USB Type C接口一端插入开发板的USB0接口中(USB0的位置请见下面右边图片的说明)。在这种情况下是由电脑的USB接口给开发板供电,所以请确保电脑的USB接口能提供最够的功率驱动开发板。
在Ubuntu PC上安装adb工具
test@test:~$ sudo apt-get update
test@test:~$ sudo apt-get install -y adb
查看识别到ADB设备
test@test:~$ adb devices
List of devices attached
4c00146473c28651dd0 device
然后在Ubuntu PC上通过adb shell就可以登录android系统
test@test:~$ adb shell
apollo-p2:/ $
查看设置HDMI显示分辨率的方法
首先进入Settings
然后选择Device Preferences
然后选择Display & Sound
然后选择Advanced display settings
然后选择HDMI output mode
然后就能看到显示器支持的分辨率列表了。此时点击对应的选项就会切换到对应的分辨率。请注意,不同显示器支持的分辨率可能是不同的,如果接到电视上,一般会看到比下图更多的分辨率选项。
开发板的HDMI输出是支持4K显示的,当接到4K电视时就可以看到4K分辨率的选项
HDMI转VGA显示测试
首先需要准备下面的配件
HDMI转VGA显示测试如下所示
使用HDMI转VGA显示时,开发板以及开发板的Android系统是不需要做任何设置的,只需要开发板Mini HDMI接口能正常显示就可以了。所以如果测试有问题,请检查HDMI转VGA转换器、VGA线以及显示器是否有问题。
WI-FI的连接方法
首先选择Settings
然后选择Network & Internet
然后打开WI-FI
打开WI-FI后在Available networks下面就可以看到搜索到的信号
选择想连接的WI-FI后会弹出下图所示的密码输入界面
然后使用键盘输入WI-FI对应的密码,再使用鼠标点击虚拟键盘中的回车按钮就会开始连接WI-FI了
WI-FI连接成功后的显示如下图所示
WI-FI hotspot的使用方法
首先请确保以太网口已连接网线,并且能正常上网
然后选择Settings
然后选择Network & Internet
然后选择WIFI hotspot
然后打开Hotspot Enable,下图中还可以看到生成的热点的名字和密码,记住它们,在连接热点的时候要用到(如果需要修改热点的名字和密码,需要先关闭Hotspot Enable,然后才能修改)
此时可以拿出你的手机,如果一切正常,在手机搜索到的WI-FI列表中就能找到上图Hotspot name下面显示的同名(这里为AndroidAP_7132)的WIFI热点了。然后可以点击AndroidAP_7132连接热点,密码在上图的Hotspot password下面可以看到
连接成功后显示如下图所示(不同手机界面会有区别,具体界面以你手机显示的为准)。此时就可以在手机上打开一个网页看下能否上网了,如果能正常打开网页,说明开发板的WI-FI Hotspot能正常使用
查看以太网口IP地址的方法
开发板主板上是没有有线网络接口的,我们可以通过24pin扩展板来扩展百兆以太网
然后请确保扩展板的网口连接到了路由器或者交换机
然后打开Settings
然后选择Network & Internet
然后在下图所示的位置就能看到开发板有线网口的IP地址了
蓝牙的连接方法
首先选择Settings
然后选择Bluetooth
然后打开Bluetooth Enable
然后点击Pair new device开始扫描周围的蓝牙设备
搜索到的蓝牙设备会在Available devices下面显示出来
然后点击想要连接的蓝牙设备就可以开始配对了,当弹出下面的界面时,请使用鼠标选择Pair选项
这里测试的是开发板和安卓手机蓝牙的配置过程,此时在手机上会弹出下面的确认界面,在手机上也点击配对按钮后就会开始配对过程
配对完成后,再打开Paired devices下面就可以看到已配对的蓝牙设备
此时可以使用手机蓝牙给开发板发送一张图片,发送后,在开发板的安卓系统中可以看到下面的确认界面,然后点击Accept就可以开始接收手机发过来的图片了
开发板Android系统蓝牙接收到的图片可以打开Received files中查看
USB0设置为HOST模式的方法
如下图所示,开发板的主板上有两个Type-C类型的接口:USB0和USB1,这两个接口都可以用来给开发板供电,也都可以用来当做USB2.0 HOST接口。USB0和USB1的区别是:USB0除了可以设置为HOST模式外,还可以设置为Device模式,而USB1只有HOST模式。
Orange Pi发布的Android12 TV系统USB0默认设置为Device模式,所以在不需要使用USB0 Device模式时(ADB功能需要确保USB0为Device模式),建议使用USB0来供电,这样USB1就可以直接用来接USB设备。
如果想使用USB0来接USB设备,需要把USB0设置为HOST模式,方法如下所示:
运行下面的命令可以将USB0设置为HOST模式:
apollo-p2:/ # cat /sys/devices/platform/soc@3000000/soc@3000000\:usbc0@0/usb_host
host_chose finished!
apollo-p2:/ #
运行下面的命令可以切回Device模式
apollo-p2:/ # cat /sys/devices/platform/soc@3000000/soc@3000000\:usbc0@0/usb_device
device_chose finished!
apollo-p2:/ #
查看USB0当前模式的命令为
apollo-p2:/ # cat /sys/devices/platform/soc@3000000/soc@3000000\:usbc0@0/otg_role
usb_host
USB摄像头使用方法
首先在开发板的USB接口中插入USB(UVC协议)摄像头
USB摄像头如果识别正常,在/dev下会生成相应的video设备节点
console:/ # ls /dev/video0
/dev/video0
然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考ADB的使用方法一小节的说明
在开发板资料下载页面的官方工具中下载USB摄像头测试APP
然后使用adb命令安装USB摄像头测试APP到Android系统中,当然也可以使用U盘拷贝的方式进行安装
test@test:~$ adb install usbcamera.apk
安装完后在Android的桌面可以看到USB摄像头的启动图标
然后双击打开USB摄像头APP就可以看到USB摄像头的输出视频了
Android系统ROOT说明
Orange Pi发布的Android系统已经ROOT,可以使用下面的方法来测试。
在开发板资料下载页面的官方工具中下载rootcheck.apk
然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考ADB的使用方法一小节的说明
然后使用adb命令安装rootcheck.apk到Android系统中,当然也可以使用U盘拷贝的方式进行安装
test@test:~$ adb install rootcheck.apk
安装完后在Android的桌面可以看到ROOT测试工具的启动图标
第一次打开ROOT测试工具后的显示界面如下图所示
然后就可以点击CHECK NOW开始Android系统的ROOT状态的检查,检查完后的显示如下所示,可以看到Android系统已取得ROOT权限
使用MiracastReceiver将手机屏幕投屏到开发板的方法
首先请确保开发板和手机都连接了同一个WIFI热点,开发板连接WIFI的方法请参考WI-FI的连接方法一小节的说明
然后打开开发板安卓系统中的MiracastReceiver应用
MiracastReceiver打开后的界面如下所示
然后在手机设置中找到投屏功能,这里以小米12S Pro手机为例,其他品牌的手机请自行研究下,如下图所示,点击红色方框位置的按钮即可打开手机的投屏功能
等待一段时间后在手机上就能看到搜索到的可连接的设备,然后我们选择开发板对应的设备连接即可
然后在开发板的MiracastReceiver应用界面会弹出下图所示的选择框,这里我们选择Accept即可
然后就能在开发板连接的HDMI屏幕上看到手机屏幕的内容了
通过按键或红外遥控开关机的方法
我们可以通过开关机按键或者红外遥控来关闭或开启开发板的安卓系统。但是需要注意的是,开发板主板上是没有开关机按键和红外接收器的,需要通过24pin扩展板来扩展。
24pin扩展板上的开关机按键所在位置如下图所示:
红外遥控电源按键所在位置如下所示:
关机时,我们需要长按开关机按键或者红外遥控上的电源按键,然后安卓系统会弹出下图所示的确认对话框,然后选择OK就会关闭安卓系统了。
关机后,再次长按开关机按键或者红外遥控上的电源按键就会开机了。
40pin 接口 GPIO、UART、SPI 测试
注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。
40pin的GPIO口测试方法
首先在桌面中打开wiringOP APP
然后点击GPIO_TEST按钮打开GPIO测试界面
GPIO测试界面如下图所示,左边的两排CheckBox按钮和40pin引脚是一一对应的关系。当勾选CheckBox按钮时,对应的GPIO引脚会被设置为OUT模式,引脚电平设置为高电平;当取消勾选时,GPIO引脚电平会设置为低电平;当点击GPIO READALL按钮时,可以获取到wPi号、GPIO模式、引脚电平等信息;当点击BLINK ALL GPIO按钮时,会让所有的GPIO口循环输出高低电平,使用这个功能可以用来测试40pin中所有的GPIO口。
然后点击GPIO READALL按钮,输出信息如下图所示:
开发板40pin中总共有28个GPIO口可以使用,下面以12号引脚——对应GPIO为PI01——对应wPi序号为6——为例演示如何设置GPIO口的高低电平。首先点击12号引脚对应的CheckBox按钮,当按钮为选中状态时,12号引脚会设置为高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功。
然后点击GPIO READALL按钮,可以看到当前的12号引脚模式为OUT,引脚电平为高电平
再次点击下图的CheckBox按钮取消勾选状态,12号引脚就会设置为低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功
然后点击GPIO READALL按钮,可以看到当前的12号引脚模式为OUT,引脚电平为低电平
40pin的UART测试方法
- 由下表可知,Android12 TV系统默认可用的uart有uart2和uart5。请注意uart0默认设置为调试串口,请不要把uart0当成普通串口使用。
GPIO序号 | GPIO | 功能 | 引脚 | 引脚 | 功能 | GPIO | GPIO序号 | |
3.3V | 1 | 2 | 5V | |||||
264 | PI8 | TWI1-SDA | 3 | 4 | 5V | |||
263 | PI7 | TWI1-SCL | 5 | 6 | GND | |||
269 | PI13 | PWM3 | 7 | 8 | UART0_TX | PH0 | 224 | |
GND | 9 | 10 | UART0_RX | PH1 | 225 | |||
226 | PH2 | UART5_TX | 11 | 12 | PI1 | 257 | ||
227 | PH3 | UART5_RX | 13 | 14 | GND | |||
261 | PI5 | UART2_TX | 15 | 16 | PWM4 | PI14 | 270 | |
3.3V | 17 | 18 | PH4 | 228 | ||||
231 | PH7 | SPI1_MOSI | 19 | 20 | GND | |||
232 | PH8 | SPI1_MISO | 21 | 22 | UART2_RX | PI6 | 262 | |
230 | PH6 | SPI1_CLK | 23 | 24 | SPI1_CS0 | PH5 | 229 | |
GND | 25 | 26 | SPI1_CS1 | PH9 | 233 | |||
266 | PI10 | TWI2-SDA | 27 | 28 | TWI2-SCL | PI9 | 265 | |
256 | PI0 | 29 | 30 | GND | ||||
271 | PI15 | 31 | 32 | PWM1 | PI11 | 267 | ||
268 | PI12 | PWM2 | 33 | 34 | GND | |||
258 | PI2 | 35 | 36 | PC12 | 76 | |||
272 | PI16 | 37 | 38 | PI4 | 260 | |||
GND | 39 | 40 | PI3 | 259 |
uart2对应的设备节点为/dev/ttyAS2,uart5对应的设备节点为/dev/ttyAS5
apollo-p2:/ # ls /dev/ttyAS*
/dev/ttyAS0 /dev/ttyAS1 /dev/ttyAS2 /dev/ttyAS5
首先在桌面中打开wiringOP APP
然后点击UART_TEST按钮打开UART测试界面
wiringOP的串口测试界面如下图所示
然后在选择框中选择/dev/ttyAS2或者/dev/ttyAS5节点
再在编辑框中输入想要设置的波特率,然后点击OPEN按钮打开uart节点,打开成功后,OPEN按钮变为不可选中状态,CLOSE按钮和SEND按钮变为可选中状态
然后使用杜邦线短接uart的rx和tx引脚
然后可以在下面的发送编辑框中输入一段字符,点击SEND按钮开始发送
- 如果一切正常,接收框内会显示已接收到的字符串
40pin的SPI测试方法
- 由下表可知,40pin接口可用的spi为spi1,有两个片选引脚cs0和cs1
GPIO序号 | GPIO | 功能 | 引脚 | 引脚 | 功能 | GPIO | GPIO序号 | |
3.3V | 1 | 2 | 5V | |||||
264 | PI8 | TWI1-SDA | 3 | 4 | 5V | |||
263 | PI7 | TWI1-SCL | 5 | 6 | GND | |||
269 | PI13 | PWM3 | 7 | 8 | UART0_TX | PH0 | 224 | |
GND | 9 | 10 | UART0_RX | PH1 | 225 | |||
226 | PH2 | UART5_TX | 11 | 12 | PI1 | 257 | ||
227 | PH3 | UART5_RX | 13 | 14 | GND | |||
261 | PI5 | UART2_TX | 15 | 16 | PWM4 | PI14 | 270 | |
3.3V | 17 | 18 | PH4 | 228 | ||||
231 | PH7 | SPI1_MOSI | 19 | 20 | GND | |||
232 | PH8 | SPI1_MISO | 21 | 22 | UART2_RX | PI6 | 262 | |
230 | PH6 | SPI1_CLK | 23 | 24 | SPI1_CS0 | PH5 | 229 | |
GND | 25 | 26 | SPI1_CS1 | PH9 | 233 | |||
266 | PI10 | TWI2-SDA | 27 | 28 | TWI2-SCL | PI9 | 265 | |
256 | PI0 | 29 | 30 | GND | ||||
271 | PI15 | 31 | 32 | PWM1 | PI11 | 267 | ||
268 | PI12 | PWM2 | 33 | 34 | GND | |||
258 | PI2 | 35 | 36 | PC12 | 76 |
- SPI1 CS0对应的设备节点为/dev/spidev1.0,SPI1 CS1对应的设备节点为/dev/spidev1.1
apollo-p2:/ # ls /dev/spidev1.*
/dev/spidev1.0 /dev/spidev1.1
- 这里演示下通过w25qxx模块来测试SPI1接口,首先在SPI1接口接入w25qxx模块
如果没有w25qxx模块也没关系,因为开发板上有一个SPIFlash接在了SPI0上,在安卓中SPI0的配置默认也打开了,所以我们也可以直接使用板载的SPIFlash测试。
然后在桌面中打开wiringOP APP
然后点击SPI_TEST按钮打开SPI的测试界面
然后在左上角选择spi的设备节点,如果直接测试板载的SPIFlash,那么保持默认的/dev/spidev0.0即可,如果在40pin的spi1 cs0上接了w25qxx模块,那么就请选择/dev/spidev1.0,如果在40pin的spi1 cs1上接了w25qxx模块,那么就请选择/dev/spidev1.1
然后点击OPEN按钮初始化SPI
然后填充需要发送的字节,比如读取板载SPIFlash的ID信息,在data[0]中填入地址0x9f,然后点击TRANSFER按钮
最后APP会显示读取到的板载SPI Flash的ID信息
- 如果是读取接在40pin SPI1上的w25qxx模块,和板载SPI Flash的ID信息也是类似的
40pin的I2C测试方法
- 由下表可知,Android12 TV系统默认打开了i2c1和i2c2
GPIO序号 | GPIO | 功能 | 引脚 | 引脚 | 功能 | GPIO | GPIO序号 | |
3.3V | 1 | 2 | 5V | |||||
264 | PI8 | TWI1-SDA | 3 | 4 | 5V | |||
263 | PI7 | TWI1-SCL | 5 | 6 | GND | |||
269 | PI13 | PWM3 | 7 | 8 | UART0_TX | PH0 | 224 | |
GND | 9 | 10 | UART0_RX | PH1 | 225 | |||
226 | PH2 | UART5_TX | 11 | 12 | PI1 | 257 | ||
227 | PH3 | UART5_RX | 13 | 14 | GND | |||
261 | PI5 | UART2_TX | 15 | 16 | PWM4 | PI14 | 270 | |
3.3V | 17 | 18 | PH4 | 228 | ||||
231 | PH7 | SPI1_MOSI | 19 | 20 | GND | |||
232 | PH8 | SPI1_MISO | 21 | 22 | UART2_RX | PI6 | 262 | |
230 | PH6 | SPI1_CLK | 23 | 24 | SPI1_CS0 | PH5 | 229 | |
GND | 25 | 26 | SPI1_CS1 | PH9 | 233 | |||
266 | PI10 | TWI2-SDA | 27 | 28 | TWI2-SCL | PI9 | 265 | |
256 | PI0 | 29 | 30 | GND | ||||
271 | PI15 | 31 | 32 | PWM1 | PI11 | 267 | ||
268 | PI12 | PWM2 | 33 | 34 | GND | |||
258 | PI2 | 35 | 36 | PC12 | 76 | |||
272 | PI16 | 37 | 38 | PI4 | 260 | |||
GND | 39 | 40 | PI3 | 259 |
i2c1对应的设备节点为/dev/i2c-1,i2c2对应的设备节点为/dev/i2c-2
apollo-p2:/ # ls /dev/i2c-*
/dev/i2c-1 /dev/i2c-2 /dev/i2c-5
首先在桌面中打开wiringOP APP
然后点击I2C_TEST按钮打开i2c的测试界面
wiringOP的i2c测试界面如下图所示
然后点击左上角的设备节点选择框选择想要测试的i2c
然后在40pin的i2c引脚上接一个i2c设备,这里以ds1307 rtc模块为例
ds1307 rtc模块的i2c地址为0x68,接好线后,我们可以在串口命令行中使用i2cdetect -y 1或i2cdetect -y 2命令查看下是否能扫描到ds1307 rtc模块的i2c地址。如果能看到0x68这个地址,说明ds1307 rtc模块接线正确。
apollo-p2:/ # i2cdetect -y 1
或
apollo-p2:/ # i2cdetect -y 2
然后在wiringOP中设置i2c的地址为0x68,再点击OPEN按钮打开i2c
点击OPEN按钮打开i2c后的显示如下所示
然后我们测试下往rtc模块的寄存器中写入一个值,比如往0x1c地址写入0x55
然后点击READ BYTE按钮读取下0x1c寄存器的值,如果显示为0x55,就说明i2c读写测试通过
40pin的PWM测试
- 由下表可知,可用的pwm为pwm1、pwm2、pwm3和pwm4。
GPIO序号 | GPIO | 功能 | 引脚 | 引脚 | 功能 | GPIO | GPIO序号 | |
3.3V | 1 | 2 | 5V | |||||
264 | PI8 | TWI1-SDA | 3 | 4 | 5V | |||
263 | PI7 | TWI1-SCL | 5 | 6 | GND | |||
269 | PI13 | PWM3 | 7 | 8 | UART0_TX | PH0 | 224 | |
GND | 9 | 10 | UART0_RX | PH1 | 225 | |||
226 | PH2 | UART5_TX | 11 | 12 | PI1 | 257 | ||
227 | PH3 | UART5_RX | 13 | 14 | GND | |||
261 | PI5 | UART2_TX | 15 | 16 | PWM4 | PI14 | 270 | |
3.3V | 17 | 18 | PH4 | 228 | ||||
231 | PH7 | SPI1_MOSI | 19 | 20 | GND | |||
232 | PH8 | SPI1_MISO | 21 | 22 | UART2_RX | PI6 | 262 | |
230 | PH6 | SPI1_CLK | 23 | 24 | SPI1_CS0 | PH5 | 229 | |
GND | 25 | 26 | SPI1_CS1 | PH9 | 233 | |||
266 | PI10 | TWI2-SDA | 27 | 28 | TWI2-SCL | PI9 | 265 | |
256 | PI0 | 29 | 30 | GND | ||||
271 | PI15 | 31 | 32 | PWM1 | PI11 | 267 | ||
268 | PI12 | PWM2 | 33 | 34 | GND | |||
258 | PI2 | 35 | 36 | PC12 | 76 | |||
272 | PI16 | 37 | 38 | PI4 | 260 | |||
GND | 39 | 40 | PI3 | 259 |
首先点击wiringOP图标打开wiringOP APP
然后在wiringOP的主界面点击PWM_TEST按钮进入PWM的测试界面
PWM测试界面如下所示
然后在Channel中设置下想用哪个PWM,默认是PWM1,如果想设置为PWM2,则在Channel中输入2即可,PWM3和PWM4以此类推
然后可以设置下PWM的周期,默认的配置是50000ns,转换为PWM频率是20KHz
然后点击EXPORT按钮导出PWM
然后拖动下面的进度条,就可以改变PWM的占空比,然后勾选Enable就可以输出PWM波形了
- 然后使用示波器测量开发板40pin中的对应引脚就可以看到下面的波形了
Android 12源码的编译方法
下载Android 12的源码
首先从百度或者谷歌网盘下载Android 12源码的分卷压缩包和Orange Pi Zero2w修改的文件的压缩包
Android 12源码的分卷压缩包下载完后,请先检查下MD5校验和是否正确,如果不正确,请重新下载源码。检查MD5校验和的方法如下所示:
test@test:~$ md5sum -c H618-Android12-Src.tar.gz.md5sum
H618-Android12-Src.tar.gzaa: OK
H618-Android12-Src.tar.gzab: OK
......
然后需要将多个压缩文件合并成一个,再解压出安卓源码。命令如下所示:
test@test:~$ cat H618-Android12-Src.tar.gza* > H618-Android12-Src.tar.gz
test@test:~$ tar -xvf H618-Android12-Src.tar.gz
然后解压Orange Pi Zero2w修改的文件的压缩包
test@test:~$ tar zxf opizero2w_android12_patches.tar.gz
test@test:~$ ls
opizero2w_android12_patches opizero2w_android12_patches.tar.gz
然后将Orange Pi Zero2w修改的文件复制到安卓源码中
test@test:~$ cp -rf opizero2w_android12_patches/* H618-Android12-Src/
编译Android 12的源码
Android12的编译是在安装有Ubuntu 22.04的x86_64电脑上进行的,其它版本的Ubuntu系统包依赖可能会有一些区别,Ubuntu 22.04 amd64版本的镜像下载地址如下所示:
https://repo.huaweicloud.com/ubuntu-releases/22.04/ubuntu-22.04.2-desktop-amd64.iso
编译Android12源码的x86_64电脑硬件配置建议内存为16GB或16GB以上,硬盘空间建议预留200GB或以上,CPU核心数越多越好。
首先安装编译Android12源码需要的软件包
test@test:~$ sudo apt-get update
test@test:~$ sudo apt-get install -y git gnupg flex bison gperf build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache \
libgl1-mesa-dev libxml2-utils xsltproc unzip u-boot-tools python-is-python3 \
libssl-dev libncurses5 clang gawk
然后编译longan文件夹中的代码,里面主要包含u-boot和linux内核
首先运行 ./build.sh config设置编译选项
test@test:~$ cd H618-Android12-Src/longan
test@test:~/H618-Android12-Src/longan$ ./build.sh config
Welcome to mkscript setup progress
All available platform:
0. android
1. linux
Choice [android]: 0
All available ic:
0. h618
Choice [h618]: 0
All available board:
0. ft
1. p1
2. p2
3. p7
4. p7l
5. perf1
6. perf2
7. perf3
8. qa
Choice [p2]: 2
All available flash:
0. default
1. nor
Choice [default]: 0
All available kern_ver:
0. linux-5.4
Choice [linux-5.4]: 0
All available arch:
0. arm
1. arm64
Choice [arm64]: 1
......
*** Default configuration is based on 'sun50iw9p1smp_h618_android_defconfig'
#
# configuration written to .config
#
make[1]: Leaving directory '/home/test/H618-Android12-Src/longan/out/kernel/build'
make: Leaving directory '/home/test/H618-Android12-Src/longan/kernel/linux-5.4'
INFO: clean buildserver
INFO: prepare_buildserver
然后运行./build.sh脚本就可以开始编译了
test@test:~/H618-Android12-Src/longan$ ./build.sh
编译完成后会看到下面的输出
sun50iw9p1 compile Kernel successful
INFO: Prepare toolchain ...
......
INFO: build kernel OK.
INFO: build rootfs ...
INFO: skip make rootfs for android
INFO: ----------------------------------------
INFO: build lichee OK.
INFO: ----------------------------------------
然后使用下面的命令编译安卓源码并生成最终的安卓镜像
test@test:~$ cd H618-Android12-Src
test@test:~/H618-Android12-Src$ source build/envsetup.sh
test@test:~/H618-Android12-Src$ lunch apollo_p2-userdebug
test@test:~/H618-Android12-Src$ make -j8
test@test:~/H618-Android12-Src$ pack
编译生成的安卓镜像存放路径为:
longan/out/h618_android12_p2_uart0.img
附录
用户手册更新历史
版本 | 日期 | 更新说明 |
v1.0 | 2023-09-14 | 初始版本 |
镜像更新历史
日期 | 更新说明 |
2023-09-14 |
orangepizero2w_1.0.0_debian_bullseye_server_linux5.4.125.7z orangepizero2w_1.0.0_ubuntu_focal_server_linux5.4.125.7z orangepizero2w_1.0.0_ubuntu_focal_desktop_xfce_linux5.4.125.7z orangepizero2w_1.0.0_debian_bullseye_desktop_xfce_linux5.4.125.7z orangepizero2w_1.0.0_ubuntu_jammy_server_linux6.1.31.7z orangepizero2w_1.0.0_debian_bookworm_server_linux6.1.31.7z orangepizero2w_1.0.0_debian_bullseye_server_linux6.1.31.7z orangepizero2w_1.0.0_ubuntu_jammy_desktop_xfce_linux6.1.31.7z orangepizero2w_1.0.0_debian_bookworm_desktop_xfce_linux6.1.31.7z orangepizero2w_1.0.0_debian_bullseye_desktop_xfce_linux6.1.31.7z OrangePi_Zero2w_Android12_v1.0.tar.gz Opios-arch-aarch64-xfce-opizero2w-23.09-linux6.1.31.img.xz
|