8,460
个编辑
更改
创建页面,内容为“'''Orange Pi 4A''' '''用户手册''' <div class="figure"> 575x419px|_MG_3225 </div> <span id="orange-pi-4a的基本特性"></…”
'''Orange Pi 4A'''
'''用户手册'''
<div class="figure">
[[File:Orange_Pi_4A-image2.jpeg|575x419px|_MG_3225]]
</div>
<span id="orange-pi-4a的基本特性"></span>
= Orange Pi 4A的基本特性 =
<span id="什么是-orange-pi-4a"></span>
== 什么是 Orange Pi 4A ==
Orange Pi 4A采用了全志T527八核Cortex-A55 + HiFI4 DSP + RISV-V多核异构工业级处理器,支持2TOPS NPU,满足边缘智能AI加速应用;支持2GB/4GB LPDDR4/4X,提供H.265 4K@60fps和H.264 4K@60fps视频解码,H.264 4K@25fps编码;接口丰富,包括千兆以太网、PCIe2.0、USB2.0、MIPI-CSI、MIPI-DSI、40Pin扩展接口等常用功能接口。支持Ubuntu、Debian、Android 13等操作系统。
Orange Pi 4A可为生成式AI、人工智能 算法的场景化落地提供坚实的硬件基础,可广泛应用于智能工控、智能商显、零售支付、智慧教育、商用机器人、车载终端、视觉辅驾、边缘计算、智能配电终端等。
<span id="orange-pi-4a的用途"></span>
== Orange Pi 4A的用途 ==
我们可以用它实现:
* 一台小型的Linux桌面计算机
* 一台小型的Linux网络服务器
* Android平板
* Android 游戏机等
'''当然还有其他更多的功能,依托强大的生态系统以及各式各样的扩展配件,Orange Pi可以帮助用户轻松实现从创意到原型再到批量生产的交付,是创客、梦想家、业余爱好者的理想创意平台。'''
<span id="orange-pi-4a是为谁设计的"></span>
== Orange Pi 4A是为谁设计的 ==
Orange Pi 开发板不仅仅是一款消费品,同时也是给任何想用技术来进行创作创新的人设计的。它是一款简单、有趣、实用的工具,你可以用它去打造你身边的世界。
<span id="orange-pi-4a的硬件特性"></span>
== Orange Pi 4A的硬件特性 ==
{| class="wikitable"
|-
| style="text-align: center;"| '''硬件特性介绍'''
| style="text-align: center;"|
|-
| style="text-align: center;"| '''处理器'''
| style="text-align: center;"| <span class="mark">T527</span>,8核ARM CortexTM-A55@1.8GHz
HIFI4 Audio DSP@600MHz
RISC-V@200MHz
GPU:G57 MC1
VPU: H.265 4K@60fps解码,H.264 4K@60fps解码,H.264 4K@25fps编码
<span class="mark">NPU:2TOPS</span>
|-
| style="text-align: center;"| '''内存'''
| style="text-align: center;"| LPDDR4/4X:2GB/4GB可选
|-
| style="text-align: center;"| '''存储'''
| style="text-align: center;"| eMMC module可选:16GB/32GB/64GB/128GB可选
<span class="mark">SPI Flash:128Mb(默认贴)</span>、256Mb可选
M.2 M-KEY Socket:PCIe2.0 NVMe SSD
uSD card slot:supports up to 128GB uSD card
|-
| style="text-align: center;"| '''Wi-Fi+蓝牙'''
| style="text-align: center;"| Wi-Fi+蓝牙二合一模块
Wi-Fi5.0+BT 5.0,BLE
|-
| style="text-align: center;"| '''以太网'''
| style="text-align: center;"| <span class="mark">10/100/1000Mbps以太网</span>
|-
| style="text-align: center;"| '''显示'''
| style="text-align: center;"| 1x HDMI TX 2.0 interface up to 4K@60fps
1x 4-lane MIPI-DSI
1x eDP1.3
|-
| style="text-align: center;"| '''摄像头'''
| style="text-align: center;"| 1x 2-lane MIPI-CSI camera interface
1x 4-lane MIPI-CSI camera interface
|-
| style="text-align: center;"| '''USB'''
| style="text-align: center;"| <span class="mark">1xUSB Type-A 2.0</span>
<span class="mark">3xUSB Type-A 2.0 HOS</span><span class="mark">T</span>
1xUSB 2.0 HOST 预留供客户扩展
|-
| style="text-align: center;"| '''ADC'''
| style="text-align: center;"| 预留4Pin接口,可接入2路ADC,最大输入1.8V
|-
| style="text-align: center;"| '''音频'''
| style="text-align: center;"| 3.5mm耳机孔音频输入/输出
|-
| style="text-align: center;"| '''按键'''
| style="text-align: center;"| 1* BOOT,1*RESET,1 *PWR ON
|-
| style="text-align: center;"| '''RTC'''
| style="text-align: center;"| 2Pin备用电池接口(Pitch=1.27mm)
|-
| style="text-align: center;"| '''40Pin'''
| style="text-align: center;"| 40Pin功能扩展接口,支持以下接口类型:
<span class="mark">GPIO、UART、I2C、SPI、PWM</span>
|-
| style="text-align: center;"| '''DEBUG'''
| style="text-align: center;"| <span class="mark">3Pin</span><span class="mark">调试串口</span>
|-
| style="text-align: center;"| '''电源'''
| style="text-align: center;"| <span class="mark">Type-C 5V 5A DCIN</span>
|-
| style="text-align: center;"| '''支持的OS'''
| style="text-align: center;"| Ubuntu、Debian、Android13等
|-
| style="text-align: center;"| '''外观规格介绍'''
| style="text-align: center;"|
|-
| style="text-align: center;"| '''PCB'''
| style="text-align: center;"| 89mm*56mm*1.6mm
|-
| style="text-align: center;"| '''重量'''
| style="text-align: center;"| 52g
|}
<span id="orange-pi-4a的顶层视图和底层视图"></span>
== Orange Pi 4A的顶层视图和底层视图 ==
'''顶层视图:'''
[[File:Orange_Pi_4A-image3.png|439x269px]]
'''底层视图:'''
[[File:Orange_Pi_4A-image4.png|448x278px]]
<span id="orange-pi-4a的接口详情图"></span>
== Orange Pi 4A的接口详情图 ==
<div class="figure">
[[File:Orange_Pi_4A-image5.jpeg|575x770px|OPI_4A__cn]]
</div>
[[File:Orange_Pi_4A-image6.png|575x251px]]
'''四个定位孔的直径都是3.0mm。'''
= '''开发板使用介绍''' =
== 准备需要的配件 ==
<ol style="list-style-type: decimal;">
<li><p>TF卡,最小8GB容量的'''class10'''级或以上的高速闪迪卡</p>
<p>[[File:Orange_Pi_4A-image7.png|124x96px]]</p></li>
<li><p>TF卡读卡器,用于读写TF卡</p>
<p>[[File:Orange_Pi_4A-image8.png|139x96px]]</p></li>
<li><p>HDMI接口的显示器</p>
<p>[[File:Orange_Pi_4A-image9.png|256x195px]]</p></li>
<li><p>HDMI转HDMI连接线,用于将开发板连接到HDMI显示器或者电视进行显示</p>
<p>[[File:Orange_Pi_4A-image10.png|199x129px]]</p></li>
<li><p>10.1寸MIPI屏幕,用于显示开发板的系统界面(此屏幕包括转接板和OPi5Plus/OPi5B/OPi5/OPi5Pro/OPi5Max/OPi4A通用)</p>
<div class="figure">
[[File:Orange_Pi_4A-image11.jpeg|223x203px|IMG_7546]]
</div></li>
<li><p>电源适配器,Orange Pi 4A建议使用5V/5A的Type-C电源供电</p>
<p>[[File:Orange_Pi_4A-image12.png|188x133px]]</p>
<p>'''开发板的Type-C电源接口不支持PD协商功能,只支持固定的5V电压输入。'''</p></li>
<li><p>USB接口的鼠标和键盘,只要是标准USB接口的鼠标和键盘都可以,鼠标和键盘可以用来控制Orange Pi开发板</p>
<p>[[File:Orange_Pi_4A-image13.png|206x170px]]</p></li>
<li><p>USB摄像头</p>
<p>[[File:Orange_Pi_4A-image14.png|255x148px]]</p></li>
<li><p>百兆或者千兆网线,用于将开发板连接到因特网</p>
<p>[[File:Orange_Pi_4A-image15.png|143x112px]]</p></li>
<li><p>5V的散热风扇,如下图所示,开发板专门引出5V输出接口用于接散热风扇,间距为'''2.54mm''',散热风扇的电源接口参照这个规格去购买即可。</p>
<p>'''注意,开发板插上电源后5V引脚就可以直接使用,无需其他设置,另外5V引脚输出的电压是无法通过软件调节和关闭的。'''</p>
<p>[[File:Orange_Pi_4A-image16.png|420x124px]]</p></li>
<li><p>USB2.0公对公数据线,用于adb调试、烧录镜像到eMMC等功能</p>
<div class="figure">
[[File:Orange_Pi_4A-image17.png|158x155px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
</div></li>
<li><p>USB转TTL模块和杜邦线,使用串口调试功能时,需要USB转TTL模块和杜邦线来连接开发板和电脑</p>
<p>[[File:Orange_Pi_4A-image18.png|176x145px]] [[File:Orange_Pi_4A-image19.png|305x110px]]</p>
<p>'''注意,开发板使用的TTL电平是3.3v的,除了上图所示的USB转TTL模块外,其他类似的3.3v的USB转TTL模块一般也都是可以的。'''</p></li>
<li><p>安装有Ubuntu和Windows操作系统的X64电脑</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| 1
| style="text-align: left;"| Ubuntu22.04 PC
| style="text-align: left;"| 可选,用于编译Android和Linux源码
|-
| style="text-align: left;"| 2
| style="text-align: left;"| Windows PC
| style="text-align: left;"| 用于烧录Android和Linux镜像
|}
== 下载开发板的镜像和相关的资料 ==
# 中文版资料的下载网址为
'''http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-4A.html'''
<ol start="2" style="list-style-type: decimal;">
<li><p>英文版资料的下载网址为</p>
<p>'''http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-4A.html'''</p></li>
<li><p>资料主要包含</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''Linux源码''':保存在Github上</p></li>
<li><p>'''Android镜像''':保存在百度云盘和谷歌网盘上</p></li>
<li><p>'''Ubuntu镜像''':保存在百度云盘和谷歌网盘上</p></li>
<li><p>'''Debian镜像''':保存在百度云盘和谷歌网盘上</p></li>
<li><p>'''用户手册和原理图:'''芯片相关的数据手册也会放在这里</p></li>
<li><p>'''官方工具:'''主要包括开发板使用过程中需要用到的软件</p></li></ol>
</li></ol>
<span id="基于windows-pc将linux镜像烧写到tf卡的方法"></span>
== 基于Windows PC将Linux镜像烧写到TF卡的方法 ==
'''注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian或者Ubuntu这样的Linux发行版镜像。'''
<span id="使用balenaetcher烧录linux镜像的方法"></span>
=== '''使用'''balenaEtcher'''烧录Linux镜像的方法''' ===
# 首先准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡
# 然后使用读卡器把TF卡插入电脑
# 从[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”'''.img'''”结尾的文件就是操作系统的镜像文件,大小一般都在1GB以上
# 然后下载Linux镜像的烧录软件——'''balenaEtcher''',下载地址为
[https://www.balena.io/etcher/ '''https://www.balena.io/etcher/''']
<ol start="5" style="list-style-type: decimal;">
<li><p>进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方</p>
<p>[[File:Orange_Pi_4A-image20.png|456x219px]]</p></li>
<li><p>然后可以选择下载balenaEtcher的Portable版本的软件,Portable版本无需安装,双击打开就可以使用</p>
<p>[[File:Orange_Pi_4A-image21.png|468x173px]]</p></li>
<li><p>如果下载的是需要安装版本的balenaEtcher,请先安装再使用。如果下载的Portable版本balenaEtcher,直接双击打开即可,打开后的balenaEtcher界面如下图所示</p>
<p>[[File:Orange_Pi_4A-image22.png|335x211px]]</p></li></ol>
'''打开balenaEtcher时如果提示下面的错误:'''
[[File:Orange_Pi_4A-image23.png|206x162px]]
'''请选择balenaEtcher后点击右键,然后选择以管理员身份运行。'''
[[File:Orange_Pi_4A-image24.png|114x37px]]
<ol start="8" style="list-style-type: decimal;">
<li><p>使用balenaEtcher烧录Linux镜像的具体步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先选择要烧录的Linux镜像文件的路径</p></li>
<li><p>然后选择TF卡的盘符</p></li>
<li><p>最后点击Flash就会开始烧录Linux镜像到TF卡中</p>
<p>[[File:Orange_Pi_4A-image25.png|501x281px]]</p></li></ol>
</li>
<li><p>balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中</p>
<p>[[File:Orange_Pi_4A-image26.png|506x317px]]</p></li>
<li><p>Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验</p>
<p>[[File:Orange_Pi_4A-image27.png|519x325px]]</p></li>
<li><p>成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了</p>
<p>[[File:Orange_Pi_4A-image28.png|523x324px]]</p></li></ol>
<span id="使用win32diskimager烧录linux镜像的方法"></span>
=== '''使用Win32Diskimager烧录Linux镜像的方法''' ===
<ol style="list-style-type: decimal;">
<li><p>首先准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡</p></li>
<li><p>然后使用读卡器把TF卡插入电脑</p></li>
<li><p>接着格式化TF卡</p>
<ol style="list-style-type: lower-alpha;">
<li>可以使用'''SD Card Formatter'''这个软件格式化TF卡,其下载地址为</li></ol>
</li></ol>
[https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip '''https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip''']
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>下载完后直接解压安装即可,然后打开软件</p></li>
<li><p>如果电脑只插入了TF卡,则”'''Select card'''”一栏中会显示TF卡的盘符,如果电脑插入了多个USB存储设备,可以通过下拉框选择TF卡对应的盘符</p>
<div class="figure">
[[File:Orange_Pi_4A-image29.png|209x228px|选区_199]]
</div></li>
<li><p>然后点击”'''Format'''”,格式化前会弹出一个警告框,选择”'''是(Y)'''”后就会开始格式化</p></li></ol>
[[File:Orange_Pi_4A-image30.png|304x147px]]
<ol start="5" style="list-style-type: lower-alpha;">
<li><p>格式化完TF卡后会弹出下图所示的信息,点击确定即可</p>
<p>[[File:Orange_Pi_4A-image31.png|186x149px]]</p></li></ol>
<!-- -->
<ol start="4" style="list-style-type: decimal;">
<li><p>从[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”'''.img'''”结尾的文件就是操作系统的镜像文件,大小一般都在1GB以上</p></li>
<li><p>使用'''Win32Diskimager'''烧录Linux镜像到TF卡</p>
<ol style="list-style-type: lower-alpha;">
<li>Win32Diskimager的下载页面为</li></ol>
</li></ol>
[http://sourceforge.net/projects/win32diskimager/files/Archive/ '''http://sourceforge.net/projects/win32diskimager/files/Archive/''']
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>下载完后直接安装即可,Win32Diskimager界面如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先选择镜像文件的路径</p></li>
<li><p>然后确认下TF卡的盘符和”'''设备'''”一栏中显示的一致</p></li>
<li><p>最后点击”'''写入'''”即可开始烧录</p>
<p>[[File:Orange_Pi_4A-image32.png|297x206px]]</p></li></ol>
</li>
<li><p>镜像写入完成后,点击”'''退出'''”按钮退出即可,然后就可以拔出TF卡插到开发板中启动</p></li></ol>
<span id="基于ubuntu-pc将linux镜像烧写到tf卡的方法"></span>
== 基于Ubuntu PC将Linux镜像烧写到TF卡的方法 ==
'''注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian或者Ubuntu这样的Linux发行版镜像,Ubuntu PC指的是安装了Ubuntu系统的个人电脑。'''
# 首先准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡
# 然后使用读卡器把TF卡插入电脑
# 下载balenaEtcher软件,下载地址为
[https://www.balena.io/etcher/ '''https://www.balena.io/etcher/''']
<ol start="4" style="list-style-type: decimal;">
<li><p>进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方</p>
<p>[[File:Orange_Pi_4A-image20.png|489x235px]]</p></li>
<li><p>然后选择下载Linux版本的软件即可</p>
<p>[[File:Orange_Pi_4A-image33.png|485x184px]]</p></li>
<li><p>从[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”'''.img'''”结尾的文件就是操作系统的镜像文件,大小一般都在1GB以上。7z结尾的压缩包的解压命令如下所示:</p>
<p>test@test:~$ '''7z x Orangepi4a_1.0.0_ubuntu_jammy_desktop_linux5.15.147.7z'''</p>
<p>test@test:~$ '''ls Orangepi4a_1.0.0_ubuntu_jammy_desktop_linux5.15.147.*'''</p>
<p>Orangepi4a_1.0.0_ubuntu_jammy_desktop_linux5.15.147.7z '''Orangepi4a_1.0.0_ubuntu_jammy_desktop_linux5.15.147.sha''' #校验和文件</p>
<p>'''Orangepi4a_1.0.0_ubuntu_jammy_desktop_linux5.15.147.img''' #镜像文件</p></li>
<li><p>解压镜像后可以先用'''sha256sum -c *.sha'''命令计算下校验和是否正确,如果提示'''成功'''说明下载的镜像没有错,可以放心的烧录到TF卡,如果提示'''校验和不匹配'''说明下载的镜像有问题,请尝试重新下载</p>
<p>test@test:~$ '''sha256sum -c *.sha'''</p>
<p>Orangepi4a_1.0.0_ubuntu_jammy_desktop_linux5.15.147.img: '''成功'''</p></li>
<li><p>然后在Ubuntu PC的图形界面双击'''balenaEtcher-1.14.3-x64.AppImage'''即可打开balenaEtcher('''无需安装'''),balenaEtcher打开后的界面显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image34.png|423x251px]]</p></li>
<li><p>使用balenaEtcher烧录Linux镜像的具体步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先选择要烧录的Linux镜像文件的路径</p></li>
<li><p>然后选择TF卡的盘符</p></li>
<li><p>最后点击Flash就会开始烧录Linux镜像到TF卡中</p>
<p>[[File:Orange_Pi_4A-image35.png|431x278px]]</p></li></ol>
</li>
<li><p>balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中</p>
<p>[[File:Orange_Pi_4A-image36.png|576x247px]]</p></li>
<li><p>Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验</p>
<p>[[File:Orange_Pi_4A-image37.png|576x252px]]</p></li>
<li><p>成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了</p>
<p>[[File:Orange_Pi_4A-image38.png|576x340px]]</p></li></ol>
<span id="烧写linux镜像到emmc中的方法"></span>
== 烧写Linux镜像到eMMC中的方法 ==
见[[#烧写linux镜像到emmc的方法|'''烧写linux镜像到EMMC的方法''']]
<span id="烧写android镜像到tf卡的方法"></span>
== 烧写Android镜像到TF卡的方法 ==
'''开发板的Android镜像只能在Windows平台下使用PhoenixCard软件烧录到TF卡中,PhoenixCard软件的版本必须为PhonixCard-4.2.8。'''
'''请不要用烧录Linux镜像的软件,如Win32Diskimager或者balenaEtcher来烧录安卓镜像。'''
'''另外PhoenixCard这款软件没有Linux和Mac平台的版本,所以在Linux和Mac平台下是无法烧录安卓镜像到TF卡中的。'''
<ol style="list-style-type: decimal;">
<li><p>首先请确保Windows系统已经安装了'''Microsoft Visual C++ 2008 Redistrbutable - x86'''</p>
<p>[[File:Orange_Pi_4A-image39.png|449x293px]]</p></li>
<li><p>如果没有安装'''Microsoft Visual C++ 2008 Redistrbutable - x86'''</p>
<p>,使用'''PhoenixCard'''格式化TF卡或者烧录Android镜像会提示下面的错误</p>
<div class="figure">
[[File:Orange_Pi_4A-image40.png|527x369px|NUQB$Q%(){1CV6M6WK4N`5J]]
</div></li>
<li><p>'''Microsoft Visual C++ 2008 Redistrbutable - x86'''的安装包可以从Orange Pi 4A的[http://www.orangepi.cn/html/serviceAndSupport/index.html '''官方工具''']中下载到,也可以去[https://www.microsoft.com/zh-cn/download/details.aspx?id=26368 '''微软官网''']下载</p>
<p>[[File:Orange_Pi_4A-image41.png|240x93px]] [[File:Orange_Pi_4A-image42.png|200x95px]]</p></li>
<li><p>然后准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡</p></li>
<li><p>然后使用读卡器把TF卡插入电脑</p></li>
<li><p>从[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']下载Android镜像和PhoenixCard烧写工具,请确保PhonenixCrad工具的版本为'''PhonixCard-4.2.8,请不要用低于4.2.8版本的PhonixCard软件来烧录Android镜像,'''低于这个版本的PhonixCard工具烧写的Android镜像可能会有问题</p>
<p>[[File:Orange_Pi_4A-image43.png|575x169px]]</p></li>
<li><p>然后使用解压软件解压下载的Android镜像的压缩包,解压后的文件中,以”'''.img'''” 结尾的文件就是Android镜像文件,大小在1GB以上。如果不知道怎么解压Android镜像的压缩包,可以安装一个[https://yasuo.360.cn/ '''360压缩软件''']来解压镜像。</p>
<p>[[File:Orange_Pi_4A-image44.png|438x158px]]</p></li>
<li><p>然后使用解压软件解压'''PhonixCard4.2.8.zip''',此软件无需安装,在解压后的文件夹中找到PhoenixCard打开即可</p>
<p>[[File:Orange_Pi_4A-image45.png|576x113px]]</p></li>
<li><p>打开PhoenixCard后,如果TF卡识别正常,会在中间的列表中显示TF卡的盘符和容量,'''请务必确认显示的盘符和你想烧录的TF卡的盘符是一致的''',如果没有显示可以尝试拔插下TF卡,或者点击PhoenixCard中的”'''刷新盘符'''”按钮</p></li></ol>
[[File:Orange_Pi_4A-image46.png|575x137px]]
<ol start="10" style="list-style-type: decimal;">
<li><p>确认完盘符后,先格式化TF卡,点击PhoenixCard中”'''恢复卡'''”按钮即可(如果”'''恢复卡'''”按钮为灰色的无法按下,可以先点击下”'''刷新盘符'''”按钮)</p>
<p>[[File:Orange_Pi_4A-image47.png|575x316px]]</p>
<p>'''如果格式化有问题,请尝试拔插下TF卡后再测试,如果重新拔插TF卡后还是有问题,可以重启下Window电脑或者换一台电脑再试下。'''</p></li>
<li><p>然后开始将Android镜像写入TF卡</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先在”'''固件'''”一栏中选择Android镜像的路径</p></li>
<li><p>在”'''制作卡的种类'''”中选择”'''启动卡'''”</p></li>
<li><p>然后点击”'''烧卡'''”按钮就会开始烧录</p>
<p>[[File:Orange_Pi_4A-image48.png|576x452px]]</p></li></ol>
</li>
<li><p>烧录完后PhoenixCard的显示如下图所示,此时点击”'''关闭'''”按钮即可退出PhoenixCard,然后就可以把TF卡从电脑中拔出来插到开发板中启动了</p>
<p>[[File:Orange_Pi_4A-image49.png|575x452px]]</p>
<p>'''烧录完Android系统后在Windows中TF卡只能看到一个128 MB的分区,显示的分区如下图所示(有些电脑可能会弹出二十几个磁盘分区,但也只能打开128 MB的那个分区),请注意,这是正常的,请不要以为TF卡烧坏了。之所以这样,是因为安卓系统总共有二十几个分区,但大部分分区在Windows系统中是无法正常识别的。此时,请放心的拔下TF卡然后插入开发板中启动即可。'''</p>
<p>[[File:Orange_Pi_4A-image50.png|193x45px]]</p>
<p>'''安卓系统启动后,使用下面的命令可以看到TF卡中的这二十几个分区:'''</p>
<p>[[File:Orange_Pi_4A-image51.png|391x116px]]</p>
<p>'''使用df -h命令可以看到32GB的TF卡烧录完安卓系统后大概还有24 GB的空间可以用使用(二十几个分区并不会都挂载到安卓系统中,重点关注这些能看到的分区即可)。'''</p>
<p>[[File:Orange_Pi_4A-image52.png|371x192px]]</p></li></ol>
<span id="烧写android镜像到emmc的方法"></span>
== 烧写Android镜像到eMMC的方法 ==
'''开发板的Android镜像只能在Windows平台下使用PhoenixCard软件烧录到eMMC中,PhoenixCard软件的版本必须为PhonixCard-4.2.8。'''
'''请不要用烧录Linux镜像的软件,如Win32Diskimager或者balenaEtcher来烧录安卓镜像。'''
'''另外PhoenixCard这款软件没有Linux和Mac平台的版本,所以在Linux和Mac平台下是无法烧录安卓镜像到eMMC中的。'''
<ol style="list-style-type: decimal;">
<li><p>开发板预留了eMMC模块的扩展接口,烧录系统到eMMC前,首先需要购买一个与开发板eMMC接口相匹配的eMMC模块。然后将eMMC模块安装到开发板上。eMMC模块和插入开发板的方法如下所示:</p>
<p>[[File:Orange_Pi_4A-image53.png|115x84px]] [[File:Orange_Pi_4A-image54.png|120x87px]]</p>
<p>[[File:Orange_Pi_4A-image55.png|270x159px]]</p></li>
<li><p>首先请注意,此方法需要借助TF卡来完成,主要分为如下两步</p>
<ol style="list-style-type: lower-alpha;">
<li><p>先使用PhoenixCard将Android固件以量产卡的方式烧录到TF卡中</p></li>
<li><p>然后使用TF卡将Android固件烧录到 eMMC 中</p></li></ol>
</li>
<li><p>请确保Windows系统已经安装了'''Microsoft Visual C++ 2008 Redistrbutable - x86'''</p>
<p>[[File:Orange_Pi_4A-image39.png|449x293px]]</p></li>
<li><p>如果没有安装'''Microsoft Visual C++ 2008 Redistrbutable - x86'''</p>
<p>,使用'''PhoenixCard'''格式化TF卡或者烧录Android镜像会提示下面的错误</p>
<div class="figure">
[[File:Orange_Pi_4A-image40.png|527x369px|NUQB$Q%(){1CV6M6WK4N`5J]]
</div></li>
<li><p>'''Microsoft Visual C++ 2008 Redistrbutable - x86'''的安装包可以从Orange Pi 4A的[http://www.orangepi.cn/html/serviceAndSupport/index.html '''官方工具''']中下载到,也可以去[https://www.microsoft.com/zh-cn/download/details.aspx?id=26368 '''微软官网''']下载</p>
<p>[[File:Orange_Pi_4A-image41.png|240x93px]] [[File:Orange_Pi_4A-image42.png|200x95px]]</p></li>
<li><p>然后准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡</p></li>
<li><p>然后使用读卡器把TF卡插入电脑</p></li>
<li><p>从[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']下载Android镜像和PhoenixCard烧写工具,请确保PhonenixCrad工具的版本为'''PhonixCard-4.2.8,请不要用低于4.2.8版本的PhonixCard软件来烧录Android镜像,'''低于这个版本的PhonixCard工具烧写的Android镜像可能会有问题</p>
<p>[[File:Orange_Pi_4A-image43.png|575x169px]]</p></li>
<li><p>然后使用解压软件解压下载的Android镜像的压缩包,解压后的文件中,以”'''.img'''” 结尾的文件就是Android镜像文件,大小在1GB以上。如果不知道怎么解压Android镜像的压缩包,可以安装一个[https://yasuo.360.cn/ '''360压缩软件''']来解压镜像。</p>
<p>[[File:Orange_Pi_4A-image44.png|438x158px]]</p></li>
<li><p>然后使用解压软件解压'''PhonixCard4.2.8.zip''',此软件无需安装,在解压后的文件夹中找到PhoenixCard打开即可</p>
<p>[[File:Orange_Pi_4A-image45.png|576x113px]]</p></li>
<li><p>打开PhoenixCard后,如果TF卡识别正常,会在中间的列表中显示TF卡的盘符和容量,'''请务必确认显示的盘符和你想烧录的TF卡的盘符是一致的''',如果没有显示可以尝试拔插下TF卡,或者点击PhoenixCard中的”'''刷新盘符'''”按钮</p></li></ol>
[[File:Orange_Pi_4A-image56.png|576x154px]]
<ol start="12" style="list-style-type: decimal;">
<li><p>确认完盘符后,先格式化TF卡,点击PhoenixCard中”'''恢复卡'''”按钮即可(如果”'''恢复卡'''”按钮为灰色的无法按下,可以先点击下”'''刷新盘符'''”按钮)</p>
<p>[[File:Orange_Pi_4A-image57.png|576x341px]]</p>
<p>'''如果格式化有问题,请尝试拔插下TF卡后再测试,如果重新拔插TF卡后还是有问题,可以重启下Window电脑或者换一台电脑再试下。'''</p></li>
<li><p>然后开始将Android镜像写入TF卡</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先在”'''固件'''”一栏中选择Android镜像的路径</p></li>
<li><p>在”'''制作卡的种类'''”中选择”'''量产卡'''”</p></li>
<li><p>然后点击”'''烧卡'''”按钮就会开始烧录</p>
<p>[[File:Orange_Pi_4A-image58.png|575x423px]]</p></li></ol>
</li>
<li><p>烧录完后PhoenixCard的显示如下图所示,此时点击”'''关闭'''”按钮即可退出PhoenixCard</p>
<p>[[File:Orange_Pi_4A-image59.png|575x356px]]</p></li>
<li><p>然后将TF卡插入开发板,上电启动开发板后会自动将TF卡中的Android固件烧录到开发板的eMMC 中,烧录完成后会自动关机,开发板上的LED灯会熄灭</p></li>
<li><p>此时就可以拔出TF卡,然后重新上电,就会启动eMMC中的Android系统了</p></li></ol>
== 启动香橙派开发板 ==
# 将烧录好镜像的TF卡插入香橙派开发板的TF卡插槽中
# 开发板有HDMI接口,可以通过HDMI转HDMI连接线把开发板连接到电视或者HDMI显示器。如果有购买LCD屏幕,也可以使用LCD屏幕来显示开发板的系统界面。
# 接上USB鼠标和键盘,用于控制香橙派开发板
# 开发板有以太网口,可以插入网线用来上网
# 连接一个5V/5A(5V/4A的也可以)的USB Type C接口的'''高品质'''的电源适配器
'''切记不要插入电压输出大于5V的电源适配器,会烧坏开发板。'''
'''系统上电启动过程中很多不稳定的现象基本都是供电有问题导致的,所以一个靠谱的电源适配器很重要。如果启动过程中发现有不断重启的现象,请更换下电源或者Type C数据线再试下。'''
<ol start="6" style="list-style-type: decimal;">
<li><p>然后打开电源适配器的开关,如果一切正常,此时HDMI显示器就能看到系统的启动画面了</p></li>
<li><p>如果想通过调试串口查看系统的输出信息,请使用串口线将开发板连接到电脑,串口的连接方法请参看[[#调试串口的使用方法|'''调试串口的使用方法''']]一节</p></li></ol>
== 调试串口的使用方法 ==
=== 调试串口的连接说明 ===
<ol style="list-style-type: decimal;">
<li><p>首先需要准备一个'''3.3v'''的USB转TTL模块,然后将USB转TTL模块的USB接口一端插入到电脑的USB接口中</p>
<p>[[File:Orange_Pi_4A-image60.png|575x245px]]</p></li>
<li><p>开发板的调试串口GND、TX和RX引脚的对应关系如下图所示</p>
<p>[[File:Orange_Pi_4A-image61.png|497x125px]]</p></li>
<li><p>USB转TTL模块GND、TX和RX引脚需要通过杜邦线连接到开发板的调试串口上</p>
<ol style="list-style-type: lower-alpha;">
<li><p>USB转TTL模块的GND接到开发板的GND上</p></li>
<li><p>USB转TTL模块的'''RX接到开发板的TX上'''</p></li>
<li><p>USB转TTL模块的'''TX接到开发板的RX上'''</p></li></ol>
</li>
<li><p>USB转TTL模块连接电脑和Orange Pi开发板的示意图如下所示</p>
<p>[[File:Orange_Pi_4A-image62.png|576x208px]]</p>
<p>'''串口的TX和RX是需要交叉连接的,如果不想仔细区分TX和RX的顺序,可以把串口的TX和RX先随便接上,如果测试串口没有输出再交换下TX和RX的顺序,这样就总有一种顺序是对的。'''</p></li></ol>
<span id="ubuntu平台调试串口的使用方法"></span>
=== Ubuntu平台调试串口的使用方法 ===
'''Linux下可以使用的串口调试软件有很多,如putty、minicom等,下面演示下putty的使用方法。'''
<ol style="list-style-type: decimal;">
<li><p>首先将USB转TTL模块插入Ubuntu电脑的USB接口,如果USB转TTL模块连接识别正常,在Ubuntu PC的'''/dev'''下就可以看到对应的设备节点名,记住这个节点名,后面设置串口软件时会用到</p>
<p>test@test:~$ '''ls /dev/ttyUSB*'''</p>
<p>'''/dev/ttyUSB0'''</p></li>
<li><p>然后使用下面的命令在Ubuntu PC上安装下putty</p>
<p>test@test:~$ '''sudo apt update'''</p>
<p>test@test:~$ '''sudo apt install -y putty'''</p></li>
<li><p>然后运行putty,'''记得加sudo权限'''</p>
<p>test@test:~$ '''sudo putty'''</p></li>
<li><p>执行putty命令后会弹出下面的界面</p>
<p>[[File:Orange_Pi_4A-image63.png|332x290px]]</p></li>
<li><p>首先选择串口的设置界面</p>
<p>[[File:Orange_Pi_4A-image64.png|337x297px]]</p></li>
<li><p>然后设置串口的参数</p>
<ol style="list-style-type: lower-alpha;">
<li><p>设置'''Serial line to connect to'''为'''/dev/ttyUSB0'''(修改为对应的节点名,一般为'''/dev/ttyUSB0''')</p></li>
<li><p>设置'''Speed(baud)'''为'''115200'''(串口的波特率)</p></li>
<li><p>设置'''Flow control'''为'''None'''</p>
<p>[[File:Orange_Pi_4A-image65.png|398x352px]]</p></li></ol>
</li>
<li><p>在串口的设置界面设置完后,再回到Session界面</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先选择'''Connection type'''为'''Serial'''</p></li>
<li><p>然后点击'''Open'''按钮连接串口</p>
<p>[[File:Orange_Pi_4A-image66.png|375x332px]]</p></li></ol>
</li>
<li><p>然后启动开发板,就能从打开的串口终端中看到系统输出的Log信息了</p>
<p>[[File:Orange_Pi_4A-image67.png|376x249px]]</p></li></ol>
<span id="windows平台调试串口的使用方法"></span>
=== Windows平台调试串口的使用方法 ===
'''Windows下可以使用的串口调试软件有很多,如SecureCRT、MobaXterm等,下面演示MobaXterm的使用方法,这款软件有免费版本,无需购买序列号即可使用。'''
<ol style="list-style-type: decimal;">
<li><p>下载MobaXterm</p>
<ol style="list-style-type: lower-alpha;">
<li><p>下载MobaXterm网址如下</p>
<p>[https://mobaxterm.mobatek.net/ '''https://mobaxterm.mobatek.net/''']</p></li>
<li><p>进入MobaXterm下载网页后点击'''GET XOBATERM NOW!'''</p>
<p>[[File:Orange_Pi_4A-image68.png|382x233px]]</p></li>
<li><p>然后选择下载Home版本</p>
<p>[[File:Orange_Pi_4A-image69.png|353x231px]]</p></li>
<li><p>然后选择Portable便携式版本,下载完后无需安装,直接打开就可以使用</p>
<div class="figure">
[[File:Orange_Pi_4A-image70.png|322x175px|选区_232]]
</div></li></ol>
</li>
<li><p>下载完后使用解压缩软件解压下载的压缩包,即可得到MobaXterm的可执软件,然后双击打开</p>
<p>[[File:Orange_Pi_4A-image71.png|576x83px]]</p></li>
<li><p>打开软件后,设置串口连接的步骤如下</p>
<ol style="list-style-type: lower-alpha;">
<li><p>打开会话的设置界面</p></li>
<li><p>选择串口类型</p></li>
<li><p>选择串口的端口号(根据实际的情况选择对应的端口号),如果看不到端口号,请使用[http://weishi.360.cn/qudongdashi/ '''360驱动大师''']扫描安装USB转TTL串口芯片的驱动</p></li>
<li><p>选择串口的波特率为'''115200'''</p></li>
<li><p>最后点击”'''OK'''”按钮完成设置</p></li></ol>
</li></ol>
[[File:Orange_Pi_4A-image72.png|575x291px]]
<ol start="4" style="list-style-type: decimal;">
<li><p>点击”'''OK'''”按钮后会进入下面的界面,此时启动开发板就能看到串口的输出信息了</p>
<p>[[File:Orange_Pi_4A-image73.png|575x291px]]</p></li></ol>
<span id="使用开发板40-pin接口中的5v引脚供电说明"></span>
== 使用开发板40 pin接口中的5v引脚供电说明 ==
'''我们推荐的开发板的供电方式是使用5V/5A或者5V/4A的Type C接口的电源线插到开发板的Type C电源接口来供电的。如果需要使用40 pin接口中的5V引脚来给开发板供电,请确保使用的电源线能满足开发板的供电需求。如果有使用不稳定的情况,请换回Type C电源供电。'''
<ol style="list-style-type: decimal;">
<li><p>首先需要准备一根下图所示的电源线</p>
<div class="figure">
[[File:Orange_Pi_4A-image74.jpeg|216x154px|4ff86e49b6624616f9498fe44c366f29]]
</div>
<p>'''上图所示的电源线在淘宝可以买到,请自行搜索购买。'''</p></li>
<li><p>使用40 pin接口中的5V引脚来给开发板供电,电源线的接法如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>上图所示的电源线USB A口需要插到5V/5A的电源适配器接头上('''不建议插到电脑的USB接口来供电,如果开发板接的外设过多,使用会不稳定''')</p></li>
<li><p>红色的杜邦线需要插到开发板40 pin接口的5V引脚上</p></li>
<li><p>黑色的杜邦线需要插到40 pin接口的GND引脚上</p></li>
<li><p>40 pin接口5V引脚和GND引脚在开发板中的位置如下图所示,'''切记不要接反了'''</p>
<p>[[File:Orange_Pi_4A-image75.png|456x110px]]</p></li></ol>
</li></ol>
<span id="debianubuntu-server和gnome桌面系统使用说明"></span>
= Debian/Ubuntu Server和Gnome桌面系统使用说明 =
== 已支持的linux镜像类型和内核版本 ==
{| class="wikitable"
|-
| style="text-align: center;"| '''Linux镜像类型'''
| style="text-align: center;"| '''内核版本'''
| style="text-align: center;"| '''服务器版'''
| style="text-align: center;"| '''桌面版'''
|-
| style="text-align: center;"| '''Ubuntu 22.04 - Jammy'''
| style="text-align: center;"| '''Linux5.15'''
| style="text-align: center;"| '''支持'''
| style="text-align: center;"| '''支持'''
|-
| style="text-align: center;"| '''Debian 12 - Bookworm'''
| style="text-align: center;"| '''Linux5.15'''
| style="text-align: center;"| '''支持'''
| style="text-align: center;"| '''支持'''
|}
在[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']进入对应开发板的下载页面后可以看到下面的下载选项,在下文的描述中,'''Ubuntu镜像和Debian镜像一般统称为Linux镜像'''。
<div class="figure">
[[File:Orange_Pi_4A-image76.png|236x108px|659B0DE6-F15C-4005-A5F9-DFF881EE647B]]
</div>
Linux镜像的命名规则为:
'''开发板型号_版本号_Linux发行版类型_发行版代号_服务器或桌面_内核版本'''
<ol style="list-style-type: lower-alpha;">
<li><p>'''开发板的型号''':都是'''Orangepi4a'''。不同开发板的型号名一般都是不同的,烧录镜像前,请确保所选择镜像的这个型号名和开发板是匹配的。</p></li>
<li><p>'''版本号''':如'''1.x.x''',这个版本号会随着镜像功能的更新而递增,另外开发板Linux镜像的版本号最后一个数字都是偶数。</p></li>
<li><p>'''Linux发行版的类型''':目前支持'''Ubuntu'''和'''Debian。'''由于Ubuntu源自Debian,所以两个系统在使用上来说总体区别不大。但部分软件的默认配置和命令的使用上还是有些许区别的,另外Ubuntu和Debian都各自有维护所支持的软件仓库,在支持的可安装的软件包上也是有些许差异的。这些需要亲自去使用体验才会有比较深刻的认识。有关更多的细节,可以参考下Ubuntu和Debian官方提供的文档。</p></li>
<li><p>'''发行版代号''':用来区分Ubuntu或者Debian这样具体的Linux发行版的不同版本。其中'''jammy'''是Ubuntu发行版,jammy表示Ubuntu22.04,不同版本的最大的区别是新版本的Ubuntu系统维护的软件仓库的中的软件很多都比旧版本的Ubuntu系统中的要新,比如Python和GCC编译工具链等。'''bookworm'''是Debian的具体版本代号,'''bookworm'''表示Debian12。</p></li>
<li><p>'''服务器或桌面''':用来表示系统是否带桌面环境,如果为'''server'''就表示系统没有安装桌面环境,镜像占用的存储空间和资源比较小,主要使用命令行来操作控制系统。如果为'''desktop_gnome'''就表示系统默认安装有GNOME桌面环境,镜像占用的存储空间和资源比较大,可以接显示器和鼠标键盘通过界面来操作系统。当然desktop版本的系统也可以像server版本的系统一样通过命令行来操作。</p></li>
<li><p>'''内核版本''':用来表示linux内核的版本号,目前支持'''linux5.15'''。</p></li></ol>
== linux内核驱动适配情况 ==
{| class="wikitable"
|-
| style="text-align: center;"| '''功能'''
| style="text-align: center;"| '''Linux5.15'''
|-
| style="text-align: center;"| '''HDMI视频'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''HDMI音频'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''USB2.0 x 4'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''TF卡启动'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''eMMC'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''NVME SSD识别'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''千兆网卡'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''WIFI'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''蓝牙'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''RTC芯片'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''耳机音频'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''LCD屏幕'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''EDP'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''CAM1'''
| style="text-align: center;"| '''内核驱动OK,3A未调'''
|-
| style="text-align: center;"| '''CAM2'''
| style="text-align: center;"| '''内核驱动OK,3A未调'''
|-
| style="text-align: center;"| '''LED灯'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin GPIO'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin I2C'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin SPI'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin UART'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin PWM'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''按键'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''温度传感器'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''硬件看门狗'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''Mali GPU'''
| style="text-align: center;"| '''NO'''
|-
| style="text-align: center;"| '''视频编解码'''
| style="text-align: center;"| '''NO'''
|}
== 本手册linux命令格式说明 ==
<ol style="list-style-type: decimal;">
<li><p>本手册中所有需要在Linux系统中输入的命令都会使用下面的方框框起来</p>
<p>如下所示,黄色方框里内容表示需要特别注意的内容,这里面的命令除外。</p></li>
<li><p>命令前面的提示符类型说明</p>
<ol style="list-style-type: lower-alpha;">
<li><p>命令前面提示符指的是下面方框内红色部分的内容,这部分内容不是linux命令的一部分,所以在linux系统中输入命令时,请不要把红色字体部分的内容也输入进去。</p>
<p>'''orangepi@orangepi:~$ sudo apt update'''</p>
<p>'''root@orangepi:~#''' '''vim /boot/boot.cmd'''</p>
<p>'''test@test:~$ ssh [mailto:root@192.168.1.36 root@192.168.1.]xxx'''</p>
<p>'''root@test:~# ls'''</p></li>
<li><p>'''orangepi@orangepi:~$''' 提示符表示这个命令是在'''开发板的linux系统'''中输入的, 提示符最后的 '''$''' 表示系统当前用户为普通用户,当执行特权命令时,需要加上'''sudo'''</p></li>
<li><p>'''root@orangepi:~#''' 提示符表示这个命令是在'''开发板的linux系统'''中输入的, 提示符最后的 '''#''' 表示系统当前用户为root用户,可以执行任何想要执行的命令</p></li>
<li><p>'''test@test:~$''' 提示符表示这个命令是在Ubuntu PC或者Ubuntu虚拟机中输入的,而不是开发板的linux系统中。提示符最后的 '''$''' 表示系统当前用户为普通用户,当执行特权命令时,需要加上'''sudo'''</p></li>
<li><p>'''root@test:~#''' 提示符表示这个命令是在Ubuntu PC或者Ubuntu虚拟机中输入的,而不是开发板的linux系统中。提示符最后的 '''#''' 表示系统当前用户为root用户,可以执行任何想要执行的命令</p></li></ol>
</li>
<li><p>哪些是需要输入的命令?</p>
<ol style="list-style-type: lower-alpha;">
<li><p>如下所示,'''黑色加粗部分'''是需要输入的命令,命令下面的是输出的内容(有些命令有输出,有些可能没有输出),这部分内容是不需要输入的</p>
<p>root@orangepi:~# '''cat /boot/orangepiEnv.txt'''</p>
<p>'''verbosity=7'''</p>
<p>bootlogo=false</p>
<p>'''console=serial'''</p></li>
<li><p>如下所示,有些命令一行写不下会放到下一行,只要黑色加粗的部分就都是需要输入的命令。当这些命令输入到一行的时候,每行最后的”'''\'''”是需要去掉的,这个不是命令的一部分。另外命令的不同部分都是有空格的,请别漏了</p>
<p>orangepi@orangepi:~$ '''echo \'''</p>
<p>'''"deb [arch=$(dpkg --print-architecture) \'''</p>
<p>'''signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \'''</p>
<p>'''https://download.docker.com/linux/debian \'''</p>
<p>'''$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null'''</p></li></ol>
</li></ol>
== linux系统登录说明 ==
=== linux系统默认登录账号和密码 ===
{| class="wikitable"
|-
| style="text-align: left;"| '''账号'''
| style="text-align: left;"| '''密码'''
|-
| style="text-align: left;"| '''root'''
| style="text-align: left;"| '''orangepi'''
|-
| style="text-align: left;"| '''orangepi'''
| style="text-align: left;"| '''orangepi'''
|}
'''注意,输入密码的时候,屏幕上是不会显示输入的密码的具体内容的,请不要以为是有什么故障,输入完后直接回车即可。'''
'''当输入密码提示错误,或者ssh连接有问题,请注意,只要使用的是Orange Pi提供的Linux镜像,就请不要怀疑上面的密码不对,而是要找其它的原因。'''
=== 设置linux系统终端自动登录的方法 ===
<ol style="list-style-type: decimal;">
<li><p>linux系统默认就是自动登录终端的,默认登录的用户名是'''orangepi'''</p>
<p>[[File:Orange_Pi_4A-image77.png|396x240px]]</p></li>
<li><p>使用下面的命令可以设置root用户自动登录终端</p>
<p>orangepi@orangepi:~$ '''sudo auto_login_cli.sh root'''</p></li>
<li><p>使用下面的命令可以禁止自动登录终端</p>
<p>orangepi@orangepi:~$ '''sudo auto_login_cli.sh -d'''</p></li>
<li><p>使用下面的命令可以再次设置orangepi用户自动登录终端</p>
<p>orangepi@orangepi:~$ '''sudo auto_login_cli.sh orangepi'''</p></li></ol>
=== linux桌面版系统自动登录说明 ===
<ol style="list-style-type: decimal;">
<li><p>桌面版系统启动后会自动登录进入桌面,无需输入密码</p>
<div class="figure">
[[File:Orange_Pi_4A-image78.png|576x324px|Screenshot from 2024-08-27 11-30-45]]
</div></li></ol>
<span id="linux桌面版系统root用户自动登录的设置方法"></span>
=== Linux桌面版系统root用户自动登录的设置方法 ===
<ol style="list-style-type: decimal;">
<li><p>执行下面的命令可以设置桌面版系统使用root用户自动登录</p>
<p>orangepi@orangepi:~$ '''sudo desktop_login.sh root'''</p></li>
<li><p>然后重启系统,就会自动使用root用户登录桌面了</p>
<div class="figure">
[[File:Orange_Pi_4A-image79.png|576x324px|Screenshot from 2024-08-27 11-31-55]]
</div></li>
<li><p>执行下面的命令可以再次设置桌面版系统使用orangepi用户自动登录</p>
<p>orangepi@orangepi:~$ '''sudo desktop_login.sh orangepi'''</p></li></ol>
<span id="linux桌面版系统禁用桌面的方法"></span>
=== Linux桌面版系统禁用桌面的方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先在命令行中输入下面的命令,'''请记得加sudo权限'''</p>
<p>orangepi@orangepi:~$ '''sudo systemctl disable lightdm.service'''</p></li>
<li><p>然后重启Linux系统就会发现不会显示桌面了</p>
<p>orangepi@orangepi:~$ '''sudo reboot'''</p></li>
<li><p>重新打开桌面的命令如下所示,'''请记得加sudo权限'''</p>
<p>orangepi@orangepi:~$ '''sudo systemctl start lightdm.service'''</p>
<p>orangepi@orangepi:~$ '''sudo systemctl enable lightdm.service'''</p></li></ol>
<span id="板载led灯测试说明"></span>
== 板载LED灯测试说明 ==
<ol style="list-style-type: decimal;">
<li><p>开发板上有三个LED灯,一个绿灯,一个红灯,一个PCIe指示灯,所在位置如下图所示:</p></li>
<li><p>'''只要开发板接通了电源,红色的LED灯就会常亮,这是由硬件控制的,软件无法关闭。'''</p></li>
<li><p>绿色的LED灯在内核启动后会一直闪烁,这是由软件控制的。</p></li>
<li><p>PCIe指示灯在PCIe接口有数据传输时会闪烁。</p></li>
<li><p>设置绿灯亮灭和闪烁的方法如下所示:</p>
<p>'''注意,下面的操作请在root用户下进行。'''</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先进入绿灯的设置目录</p>
<p>root@orangepi:~# '''cd /sys/class/leds/status_led'''</p></li>
<li><p>设置绿灯停止闪烁的命令如下</p>
<p>root@orangepi:/sys/class/leds/status_led# '''echo none > trigger'''</p></li>
<li><p>设置绿灯常亮的命令如下</p>
<p>root@orangepi:/sys/class/leds/status_led# '''echo default-on > trigger'''</p></li>
<li><p>设置绿灯闪烁的命令如下</p>
<p>root@orangepi:/sys/class/leds/status_led# '''echo heartbeat > trigger'''</p></li></ol>
</li></ol>
<span id="tf卡中linux系统rootfs分区容量操作说明"></span>
== TF卡中linux系统rootfs分区容量操作说明 ==
<span id="第一次启动会自动扩容tf卡中rootfs分区的容量"></span>
=== 第一次启动会自动扩容TF卡中rootfs分区的容量 ===
<ol style="list-style-type: decimal;">
<li><p>将开发板的Linux镜像烧录到TF卡中后,可以在'''Ubuntu电脑'''中查看下TF卡容量的使用情况,步骤如下所示:</p>
<p>'''注意,这一步不操作是不影响开发板的Linux系统自动扩容的。这里只是想说明TF卡烧录完Linux镜像后,怎么查看TF卡容量的方法。'''</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先在Ubuntu电脑中安装下gparted这个软件</p>
<p>test@test:~$ '''sudo apt install -y gparted'''</p></li>
<li><p>然后打开gparted</p>
<p>test@test:~$ '''sudo gparted'''</p></li>
<li><p>打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况</p>
<p>[[File:Orange_Pi_4A-image80.png|575x210px]]</p></li>
<li><p>上图显示的是烧录完Linux桌面版系统后TF卡的情况,可以看到,虽然TF卡的总容量是16GB的(在GParted中显示为14.84GiB),但是rootfs分区(/dev/sdc1)实际只分配了4.05GiB,还剩下10.79GiB未分配</p></li></ol>
</li>
<li><p>然后可以将烧录好Linux系统的TF卡插入开发板中启动,TF卡第一次启动linux系统时会通过'''orangepi-resize-filesystem.service'''这个systemd服务来调用'''orangepi-resize-filesystem'''脚本自动进行rootfs分区的扩容,所以'''无需再手动扩容'''</p></li>
<li><p>登录系统后可以通过'''df -h'''命令来查看rootfs的大小,如果和TF卡的实际容量一致,说明自动扩容运行正确</p></li></ol>
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
<ol start="4" style="list-style-type: decimal;">
<li><p>第一次启动完Linux系统后,我们还可以将TF卡从开发板中取下来重新插入'''Ubuntu电脑''',然后再次使用gparted查看下TF卡的情况,如下图所示,rootfs分区(/dev/sdc1)的容量已经扩展到了14.69GiB了</p>
<p>[[File:Orange_Pi_4A-image81.png|575x211px]]</p></li></ol>
'''需要注意的是,linux系统只有一个ext4格式的分区,没有使用单独的BOOT分区来存放内核镜像等文件,所以也就不存在BOOT分区扩容的问题。'''
<span id="禁止自动扩容tf卡中rootfs分区容量的方法"></span>
=== 禁止自动扩容TF卡中rootfs分区容量的方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先在'''Ubuntu电脑'''(Windows不行)中将开发板的linux镜像烧录到TF卡中,'''然后重新拔插下TF卡'''</p></li>
<li><p>然后Ubuntu电脑一般会自动挂载TF卡的分区,如果自动挂载正常,使用ls命令可以看到下面的输出</p>
<p>test@test:~$ '''ls /media/test/opi_root/'''</p>
<p>bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var</p></li>
<li><p>然后在Ubuntu电脑中将当前用户切换成root用户</p>
<p>test@test:~$ '''sudo -i'''</p>
<p>[sudo] test 的密码:</p>
<p>root@test:~'''#'''</p></li>
<li><p>然后进入TF卡中的linux系统的root目录下新建一个名为'''.no_rootfs_resize'''的文件</p>
<p>root@test:~# '''cd /media/test/opi_root/'''</p>
<p>root@test:/media/test/opi_root/# '''cd root'''</p>
<p>root@test:/media/test/opi_root/root# '''touch .no_rootfs_resize'''</p>
<p>root@test:/media/test/opi_root/root# '''ls .no_rootfs*'''</p>
<p>'''.no_rootfs_resize'''</p></li>
<li><p>然后就可以卸载TF卡,再拔出TF卡插到开发板中启动,linux系统启动时,当检测到'''/root'''目录下有'''.no_rootfs_resize'''这个文件就不会再自动扩容rootfs了</p></li>
<li><p>禁止rootfs自动扩容后进入Linux系统可以看到rootfs分区的总容量只有4GB(这里测试的是桌面版本的镜像),远小于TF卡的实际容量,说明禁止rootfs自动扩容成功</p>
<p>orangepi@orangepi:~$ '''df -h'''</p>
<p>Filesystem Size Used Avail Use% Mounted on</p>
<p>udev 925M 0 925M 0% /dev</p>
<p>tmpfs 199M 3.2M 196M 2% /run</p>
<p>'''/dev/mmcblk0p1 4.0G 3.2G 686M 83% /'''</p></li>
<li><p>如果需要重新扩容TF卡中rootfs分区的容量,只需要执行下面的命令,然后重新启动开发板的Linux系统即可</p></li></ol>
'''注意,请在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% /'''
<span id="手动扩容tf卡中rootfs分区容量的方法"></span>
=== 手动扩容TF卡中rootfs分区容量的方法 ===
'''如果TF卡的总容量很大,比如为128GB,不想Linux系统rootfs分区使用TF卡所有的容量,只想分配一部分容量,比如16GB,给Linux系统使用,然后TF卡的剩余容量就可以用作其他用途。那么可以使用此小节介绍的内容来手动扩容TF中rootfs分区的容量。'''
<ol style="list-style-type: decimal;">
<li><p>首先在'''Ubuntu电脑'''(Windows不行)中将开发板的linux镜像烧录到TF卡中,'''然后重新拔插下TF卡'''</p></li>
<li><p>然后Ubuntu电脑一般会自动挂载TF卡的分区,如果自动挂载正常,使用'''ls'''命令可以看到下面的输出</p>
<p>test@test:~$ '''ls /media/test/opi_root/'''</p>
<p>bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var</p></li>
<li><p>然后在Ubuntu电脑中将当前用户切换成root用户</p>
<p>test@test:~$ '''sudo -i'''</p>
<p>[sudo] test 的密码:</p>
<p>root@test:~'''#'''</p></li>
<li><p>然后进入TF卡中的linux系统的root目录下新建一个名为'''.no_rootfs_resize'''的文件</p>
<p>root@test:~# '''cd /media/test/opi_root/'''</p>
<p>root@test:/media/test/opi_root/# '''cd root'''</p>
<p>root@test:/media/test/opi_root/root# '''touch .no_rootfs_resize'''</p>
<p>root@test:/media/test/opi_root/root# '''ls .no_rootfs*'''</p>
<p>'''.no_rootfs_resize'''</p></li></ol>
<!-- -->
<ol start="5" style="list-style-type: decimal;">
<li><p>然后在Ubuntu电脑中安装下gparted这个软件</p>
<p>test@test:~$ '''sudo apt install -y gparted'''</p></li>
<li><p>然后打开gparted</p>
<p>test@test:~$ '''sudo gparted'''</p></li>
<li><p>打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况。下图显示的是烧录完Linux桌面版系统后TF卡的情况,可以看到,虽然TF卡的总容量是16GB的(在GParted中显示为14.84GiB),但是rootfs分区(/dev/sdc1)实际只分配了4.05GiB,还剩下10.79GiB未分配</p>
<p>[[File:Orange_Pi_4A-image80.png|575x210px]]</p></li>
<li><p>然后选中rootfs分区(/dev/sdc1)</p>
<p>[[File:Orange_Pi_4A-image82.png|575x211px]]</p></li>
<li><p>再点击鼠标右键就可以看到下图所示的操作选项,如果TF卡已经挂载了,首先需要Umount掉TF卡的rootfs分区</p>
<p>[[File:Orange_Pi_4A-image83.png|436x298px]]</p></li>
<li><p>然后再次选中rootfs分区,再点击鼠标右键,然后选择'''Resize/Move'''开始扩容rootfs分区的大小</p>
<p>[[File:Orange_Pi_4A-image84.png|444x302px]]</p></li>
<li><p>'''Resize/Move'''选项打开后会弹出下面的设置界面</p>
<p>[[File:Orange_Pi_4A-image85.png|315x193px]]</p></li>
<li><p>然后可以直接拖动下图所示的位置来设置容量的大小,也可以通过设置'''New size(MiB)'''中的数字来设置rootfs分区的大小</p>
<p>[[File:Orange_Pi_4A-image86.png|320x191px]]</p></li>
<li><p>设置好容量后,再点击右下角的'''Resize/Move'''即可</p>
<p>[[File:Orange_Pi_4A-image87.png|327x196px]]</p></li>
<li><p>最后确认无误后,再点击下图所示的'''绿色√'''</p>
<p>[[File:Orange_Pi_4A-image88.png|392x270px]]</p></li>
<li><p>然后选择'''Apply''',就会正式开始扩容rootfs分区的容量</p>
<p>[[File:Orange_Pi_4A-image89.png|399x116px]]</p></li>
<li><p>扩容完成后点击'''Close'''关闭即可</p>
<p>[[File:Orange_Pi_4A-image90.png|399x172px]]</p></li>
<li><p>然后就可以把TF卡拔下来,再插到开发板中启动,进入开发板的Linux系统中后如果使用'''df -h'''命令可以看到rootfs分区的大小和前面设置的大小一致的话就说明手动扩容成功</p>
<p>root@orangepi:~# '''df -h'''</p>
<p>Filesystem Size Used Avail Use% Mounted on</p>
<p>udev 925M 0 925M 0% /dev</p>
<p>tmpfs 199M 3.2M 196M 2% /run</p>
<p>'''/dev/mmcblk0p1 7.7G 3.2G 4.4G 42% /'''</p></li></ol>
<span id="缩小tf卡中rootfs分区容量的方法"></span>
=== 缩小TF卡中rootfs分区容量的方法 ===
'''在TF卡的Linux系统中配置好应用程序或者其他的开发环境后,如果想备份下TF卡中的Linux系统,可以使用此小节的方法先缩小下rootfs分区的大小,然后再开始备份。'''
<ol style="list-style-type: decimal;">
<li><p>首先在'''Ubuntu电脑'''(Windows不行)中插入想要操作的TF卡</p></li>
<li><p>然后在Ubuntu电脑中安装下gparted这个软件</p>
<p>test@test:~$ '''sudo apt install -y gparted'''</p></li>
<li><p>然后打开gparted</p>
<p>test@test:~$ '''sudo gparted'''</p></li>
<li><p>打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况</p>
<p>[[File:Orange_Pi_4A-image91.png|575x217px]]</p></li>
<li><p>然后选中rootfs分区(/dev/sdc1)</p>
<p>[[File:Orange_Pi_4A-image92.png|575x217px]]</p></li>
<li><p>再点击鼠标右键就可以看到下图所示的操作选项,如果TF卡已经挂载了,首先需要Umount掉TF卡的rootfs分区</p>
<p>[[File:Orange_Pi_4A-image93.png|400x274px]]</p></li>
<li><p>然后再次选中rootfs分区,再点击鼠标右键,然后选择'''Resize/Move'''开始设置rootfs分区的大小</p>
<p>[[File:Orange_Pi_4A-image94.png|399x273px]]</p></li>
<li><p>'''Resize/Move'''选项打开后会弹出下面的设置界面</p>
<p>[[File:Orange_Pi_4A-image95.png|315x188px]]</p></li>
<li><p>然后可以直接拖动下图所示的位置来设置容量的大小,也可以通过设置'''New sieze(MiB)'''中的数字来设置rootfs分区的大小</p>
<p>[[File:Orange_Pi_4A-image86.png|318x190px]]</p></li>
<li><p>设置好容量后,再点击右下角的'''Resize/Move'''即可</p>
<p>[[File:Orange_Pi_4A-image87.png|327x196px]]</p></li>
<li><p>最后确认无误后,再点击下图所示的'''绿色√'''</p>
<p>[[File:Orange_Pi_4A-image88.png|392x270px]]</p></li>
<li><p>然后选择'''Apply''',就会正式开始扩容rootfs分区的容量</p>
<p>[[File:Orange_Pi_4A-image89.png|365x106px]]</p></li>
<li><p>扩容完成后点击'''Close'''关闭即可</p>
<p>[[File:Orange_Pi_4A-image90.png|379x164px]]</p></li>
<li><p>然后就可以把TF卡拔下来,再插到开发板中启动,进入开发板的Linux系统中后如果使用'''df -h'''命令可以看到rootfs分区的大小和前面设置的大小一致的话就说明缩小容量成功</p>
<p>root@orangepi:~# '''df -h'''</p>
<p>Filesystem Size Used Avail Use% Mounted on</p>
<p>udev 925M 0 925M 0% /dev</p>
<p>tmpfs 199M 3.2M 196M 2% /run</p>
<p>'''/dev/mmcblk0p1 7.7G 3.2G 4.4G 42% /'''</p></li></ol>
== 网络连接测试 ==
=== 以太网口测试 ===
<ol style="list-style-type: decimal;">
<li><p>首先将网线的一端插入开发板的以太网接口,网线的另一端接入路由器,并确保网络是畅通的</p></li>
<li><p>系统启动后会通过'''DHCP'''自动给以太网卡分配IP地址,'''不需要其他任何配置'''</p></li>
<li><p>在开发板的Linux系统中查看IP地址的命令如下所示:</p>
<p>orangepi@orangepi:~$ '''ip a s eth0'''</p>
<p>2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000</p>
<p>link/ether 3a:3a:57:82:eb:1f brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.2.163'''/24 brd 192.168.2.255 scope global dynamic noprefixroute eth0</p>
<p>valid_lft 42902sec preferred_lft 42902sec</p>
<p>inet6 fdcd:e671:36f4::a39/128 scope global dynamic noprefixroute</p>
<p>valid_lft 42904sec preferred_lft 42904sec</p>
<p>inet6 fdcd:e671:36f4:0:7b67:e74e:f0e1:849a/64 scope global temporary dynamic</p>
<p>valid_lft 604504sec preferred_lft 86095sec</p>
<p>inet6 fdcd:e671:36f4:0:d098:7f17:6cea:4de4/64 scope global mngtmpaddr noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p>
<p>inet6 fe80::cc72:d313:9846:a5e0/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li></ol>
'''开发板启动后查看IP地址有三种方法:'''
# '''接HDMI显示器,然后登录系统使用ip a s eth0命令查看IP地址'''
# '''在调试串口终端输入ip a s eth0命令来查看IP地址'''
# '''如果没有调试串口,也没有HDMI显示器,还可以通过路由器的管理界面来查看开发板网口的IP地址。不过这种方法经常有人会无法正常看到开发板的IP地址。如果看不到,调试方法如下所示:'''
<!-- -->
<ol style="list-style-type: upper-alpha;">
<li><p>'''首先检查Linux系统是否已经正常启动,如果开发板的绿灯闪烁了,一般是正常启动了,如果只亮红灯,或者红灯绿灯都没亮,说明系统都没正常启动;'''</p></li>
<li><p>'''检查网线有没有插紧,或者换根网线试下;'''</p></li>
<li><p>'''换个路由器试下(路由器的问题有遇到过很多,比如路由器无法正常分配IP地址,或者已正常分配IP地址但在路由器中看不到);'''</p></li>
<li><p>'''如果没有路由器可换就只能连接HDMI显示器或者使用调试串口来查看IP地址。'''</p>
<p>'''另外需要注意的是开发板DHCP自动分配IP地址是不需要任何设置的。'''</p></li></ol>
<!-- -->
<ol start="4" style="list-style-type: decimal;">
<li><p>测试网络连通性的命令如下,'''ping'''命令可以通过'''Ctrl+C'''快捷键来中断运行</p>
<p>orangepi@orangepi:~$ '''ping www.baidu.com -I eth0'''</p>
<p>PING www.a.shifen.com (14.215.177.38) from 192.168.1.12 eth0: 56(84) bytes of data.</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=56 time=6.74 ms</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=56 time=6.80 ms</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=56 time=6.26 ms</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=56 time=7.27 ms</p>
<p>^C</p>
<p>--- www.a.shifen.com ping statistics ---</p>
<p>4 packets transmitted, 4 received, 0% packet loss, time 3002ms</p>
<p>rtt min/avg/max/mdev = 6.260/6.770/7.275/0.373 ms</p></li></ol>
<span id="wifi连接测试"></span>
=== WIFI连接测试 ===
'''请不要通过修改/etc/network/interfaces配置文件的方式来连接WIFI,通过这种方式连接WIFI网络使用会有问题。'''
<span id="服务器版镜像通过命令连接wifi"></span>
==== 服务器版镜像通过命令连接WIFI ====
'''当开发板没有连接以太网,没有连接HDMI显示器,只连接了串口时,推荐使用此小节演示的命令来连接WIFI网络。因为nmtui在某些串口软件(如minicom)中只能显示字符,无法正常显示图形界面。当然,如果开发板连接了以太网或者HDMI显示屏,也可以使用此小节演示的命令来连接WIFI网络的。'''
<ol style="list-style-type: decimal;">
<li><p>先登录linux系统,有下面三种方式</p>
<ol style="list-style-type: lower-alpha;">
<li>如果开发板连接了网线,可以通过[[#ssh远程登录开发板|'''ssh远程登录linux系统''']]</li></ol>
<!-- -->
<ol style="list-style-type: lower-alpha;">
<li><p>如果开发板连接好了调试串口,可以使用串口终端登录linux系统</p></li>
<li><p>如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到linux系统</p></li></ol>
</li></ol>
<!-- -->
<ol style="list-style-type: decimal;">
<li><p>首先使用'''nmcli dev wifi'''命令扫描周围的WIFI热点</p>
<p>orangepi@orangepi:~$ '''nmcli dev wifi'''</p>
<div class="figure">
[[File:Orange_Pi_4A-image96.png|575x250px|选区_011]]
</div></li>
<li><p>然后使用'''nmcli''' 命令连接扫描到的WIFI热点,其中:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''wifi_name'''需要换成想连接的WIFI热点的名字</p></li>
<li><p>'''wifi_passwd'''需要换成想连接的WIFI热点的密码</p>
<p>orangepi@orangepi:~$ '''sudo nmcli dev wifi connect wifi_name password wifi_passwd'''</p>
<p>Device 'wlan0' successfully activated with 'cf937f88-ca1e-4411-bb50-61f402eef293'.</p></li></ol>
</li>
<li><p>通过'''ip addr show wlan0'''命令可以查看wifi的IP地址</p>
<p>orangepi@orangepi:~$ '''ip a s wlan0'''</p>
<p>11: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
<p>link/ether 23:8c:d6:ae:76:bb brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.11'''/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0</p>
<p>valid_lft 259192sec preferred_lft 259192sec</p>
<p>inet6 240e:3b7:3240:c3a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute</p>
<p>valid_lft 259192sec preferred_lft 172792sec</p>
<p>inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li>
<li><p>使用'''ping'''命令可以测试wifi网络的连通性,'''ping'''命令可以通过'''Ctrl+C'''快捷键来中断运行</p>
<p>orangepi@orangepi:~$ '''ping www.orangepi.org -I wlan0'''</p>
<p>PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=1 ttl=52 time=43.5 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=2 ttl=52 time=41.3 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=3 ttl=52 time=44.9 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=4 ttl=52 time=45.6 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=5 ttl=52 time=48.8 ms</p>
<p>^C</p>
<p>--- www.orangepi.org ping statistics ---</p>
<p>5 packets transmitted, 5 received, 0% packet loss, time 4006ms</p>
<p>rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms</p></li></ol>
<span id="服务器版镜像通过图形化方式连接wifi"></span>
==== 服务器版镜像通过图形化方式连接WIFI ====
<ol style="list-style-type: decimal;">
<li><p>先登录linux系统,有下面三种方式</p>
<ol style="list-style-type: lower-alpha;">
<li><p>如果开发板连接了网线,可以通过[[#ssh远程登录开发板|'''ssh远程登录linux系统''']]</p></li>
<li><p>如果开发板连接好了调试串口,可以使用串口终端登录linux系统(串口软件请使用MobaXterm,使用minicom无法显示图形界面)</p></li>
<li><p>如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到linux系统</p></li></ol>
</li>
<li><p>然后在命令行中输入nmtui命令打开wifi连接的界面</p>
<p>orangepi@orangepi:~$ '''sudo nmtui'''</p></li>
<li><p>输入nmtui命令打开的界面如下所示</p>
<p>[[File:Orange_Pi_4A-image97.png|345x215px]]</p></li>
<li><p>选择'''Activate a connect'''后回车</p>
<p>[[File:Orange_Pi_4A-image98.png|349x216px]]</p></li>
<li><p>然后就能看到所有搜索到的WIFI热点</p>
<p>[[File:Orange_Pi_4A-image99.png|360x229px]]</p></li>
<li><p>选择想要连接的WIFI热点后再使用Tab键将光标定位到'''Activate'''后回车</p>
<p>[[File:Orange_Pi_4A-image100.png|366x230px]]</p></li>
<li><p>然后会弹出输入密码的对话框,在'''Pssword'''内输入对应的密码然后回车就会开始连接WIFI</p>
<p>[[File:Orange_Pi_4A-image101.png|352x225px]]</p></li>
<li><p>WIFI连接成功后会在已连接的WIFI名称前显示一个”*”</p>
<p>[[File:Orange_Pi_4A-image102.png|349x223px]]</p></li>
<li><p>通过'''ip a s wlan0'''命令可以查看wifi的IP地址</p>
<p>orangepi@orangepi:~$ '''ip a s wlan0'''</p>
<p>11: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
<p>link/ether 24:8c:d3:aa:76:bb brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.11'''/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0</p>
<p>valid_lft 259069sec preferred_lft 259069sec</p>
<p>inet6 240e:3b7:3240:c4a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute</p>
<p>valid_lft 259071sec preferred_lft 172671sec</p>
<p>inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li>
<li><p>使用'''ping'''命令可以测试wifi网络的连通性,'''ping'''命令可以通过'''Ctrl+C'''快捷键来中断运行</p>
<p>orangepi@orangepi:~$ '''ping www.orangepi.org -I wlan0'''</p>
<p>PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=1 ttl=52 time=43.5 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=2 ttl=52 time=41.3 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=3 ttl=52 time=44.9 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=4 ttl=52 time=45.6 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=5 ttl=52 time=48.8 ms</p>
<p>^C</p>
<p>--- www.orangepi.org ping statistics ---</p>
<p>5 packets transmitted, 5 received, 0% packet loss, time 4006ms</p>
<p>rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms</p></li></ol>
==== 桌面版镜像的测试方法 ====
<ol style="list-style-type: decimal;">
<li><p>点击桌面右上角的位置(测试WIFI时请不要连接网线)</p>
<p>[[File:Orange_Pi_4A-image103.png|289x201px]]</p></li>
<li><p>在弹出的下拉框中选择'''Wi-Fi Settings'''</p>
<p>[[File:Orange_Pi_4A-image104.png|338x172px]]</p></li>
<li><p>然后在'''Visible Networks'''下面可以看到搜索到的WIFI热点</p>
<p>[[File:Orange_Pi_4A-image105.png|420x260px]]</p></li>
<li><p>然后点击想要连接的WIFI热点,再输入密码就会开始连接WIFI</p>
<p>[[File:Orange_Pi_4A-image106.png|423x262px]]</p>
<p>[[File:Orange_Pi_4A-image107.png|421x258px]]</p></li></ol>
<span id="通过create_ap创建wifi热点的方法"></span>
=== 通过create_ap创建WIFI热点的方法 ===
'''create_ap是一个帮助快速创建Linux上的WIFI热点的脚本,并且支持bridge和NAT模式,能够自动结合hostapd, dnsmasq和iptables完成WIFI热点的设置,避免了用户进行复杂的配置,github地址如下:'''
[https://github.com/oblique/create_ap '''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:热点的密码'''
<span id="create_ap以nat模式创建wifi热点的方法"></span>
==== create_ap以NAT模式创建WIFI热点的方法 ====
# 输入下面的命令以NAT模式创建名称为'''orangepi'''、密码为'''orangepi'''的WIFI热点
orangepi@orangepi:~$ '''sudo create_ap -m nat wlan0 eth0 orangepi orangepi --no-virt'''
<ol start="2" style="list-style-type: decimal;">
<li><p>如果有下面的信息输出,说明WIFI热点创建成功</p>
<p>orangepi@orangepi:~$ '''sudo create_ap -m nat wlan0 eth0 orangepi orangepi --no-virt'''</p>
<p>Config dir: /tmp/create_ap.wlan0.conf.TQkJtsz1</p>
<p>PID: 26139</p>
<p>Network Manager found, set wlan0 as unmanaged device... DONE</p>
<p>Sharing Internet using method: nat</p>
<p>hostapd command-line interface: hostapd_cli -p /tmp/create_ap.wlan0.conf.TQkJtsz1/hostapd_ctrl</p>
<p>wlan0: interface state UNINITIALIZED->ENABLED</p>
<p>wlan0: AP-ENABLED</p>
<p>wlan0: STA ce:bd:9a:dd:a5:86 IEEE 802.11: associated</p>
<p>wlan0: AP-STA-CONNECTED ce:bd:9a:dd:a5:86</p>
<p>wlan0: STA ce:bd:9a:dd:a5:86 RADIUS: starting accounting session D4FBF7E5C604F169</p>
<p>wlan0: STA ce:bd:9a:dd:a5:86 WPA: pairwise key handshake completed (RSN)</p>
<p>wlan0: EAPOL-4WAY-HS-COMPLETED ce:bd:9a:dd:a5:86</p></li>
<li><p>此时拿出手机,在搜索到的WIFI列表中就能找到开发板创建的名为'''orangepi'''的WIFI热点,然后可以点击 '''orangepi'''连接热点,密码就是上面设置的'''orangepi'''</p>
<p>[[File:Orange_Pi_4A-image108.png|230x183px]]</p></li>
<li><p>连接成功后的显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image109.png|233x111px]]</p></li>
<li><p>在NAT模式下,连接到开发板热点的无线设备是向开发板的DHCP服务请求IP地址的,所以会有两个不同的网段,如这里开发板的IP是192.168.1.X</p>
<p>orangepi@orangepi:~$ '''sudo ifconfig eth0'''</p>
<p>eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500</p>
<p>inet '''192.168.1.150''' netmask 255.255.255.0 broadcast 192.168.1.255</p>
<p>inet6 fe80::938f:8776:5783:afa2 prefixlen 64 scopeid 0x20<link></p>
<p>ether 4a:a0:c8:25:42:82 txqueuelen 1000 (Ethernet)</p>
<p>RX packets 25370 bytes 2709590 (2.7 MB)</p>
<p>RX errors 0 dropped 50 overruns 0 frame 0</p>
<p>TX packets 3798 bytes 1519493 (1.5 MB)</p>
<p>TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0</p>
<p>device interrupt 83</p>
<p>而开发板的DHCP服务默认会给接入热点的设备分配'''192.168.12.0/24'''的IP地址,这时点击已经连接的WIFI热点'''orangepi''',然后就可以看到手机的IP地址是'''192.168.12.X'''。</p>
<p>[[File:Orange_Pi_4A-image109.png|271x129px]]</p>
<p>[[File:Orange_Pi_4A-image110.png|274x155px]]</p></li>
<li><p>如果想要为接入的设备指定不同的网段,可以通过-g参数指定,如通过-g参数指定接入点AP的网段为192.168.2.1</p>
<p>orangepi@orangepi:~$ '''sudo create_ap -m nat wlan0 eth0 orangepi orangepi -g 192.168.2.1 --no-virt'''</p></li></ol>
此时通过手机连接到热点后,点击已经连接的WIFI热点'''orangepi''',然后可以看到手机的IP地址是'''192.168.2.X'''。
[[File:Orange_Pi_4A-image109.png|286x137px]]
[[File:Orange_Pi_4A-image111.png|302x174px]]
<ol start="7" style="list-style-type: decimal;">
<li>在不指定'''--freq-band'''参数的情况下,默认创建的热点是2.4G频段的,如果想要创建5G频段的热点可以通过'''--freq-band 5'''参数指定,具体命令如下</li></ol>
orangepi@orangepi:~$ '''sudo create_ap -m nat wlan0 eth0 orangepi orangepi --freq-band 5 --no-virt'''
<ol start="8" style="list-style-type: decimal;">
<li>如果需要隐藏SSID,可以指定'''--hidden'''参数,具体命令如下</li></ol>
orangepi@orangepi:~$ '''sudo create_ap -m nat wlan0 eth0 orangepi orangepi --hidden --no-virt'''
此时手机是搜索不到WIFI热点的,需要手动指定WIFI热点名称,并输入密码来连接WIFI热点
[[File:Orange_Pi_4A-image112.png|237x198px]]
<span id="create_ap以bridge模式创建wifi热点的方法"></span>
==== create_ap以bridge模式创建WIFI热点的方法 ====
# 输入下面的命令以bridge模式创建名称为'''orangepi'''、密码为'''orangepi'''的WIFI热点
orangepi@orangepi:~$ '''sudo create_ap -m bridge wlan0 eth0 orangepi orangepi --no-virt'''
<ol start="2" style="list-style-type: decimal;">
<li><p>如果有下面的信息输出,说明WIFI热点创建成功</p>
<p>orangepi@orangepi:~$ '''sudo create_ap -m bridge wlan0 eth0 orangepi orangepi --no-virt'''</p>
<p>Config dir: /tmp/create_ap.wlan0.conf.zAcFlYTx</p>
<p>PID: 27707</p>
<p>Network Manager found, set wlan0 as unmanaged device... DONE</p>
<p>Sharing Internet using method: bridge</p>
<p>Create a bridge interface... br0 created.</p>
<p>hostapd command-line interface: hostapd_cli -p /tmp/create_ap.wlan0.conf.zAcFlYTx/hostapd_ctrl</p>
<p>wlan0: interface state UNINITIALIZED->ENABLED</p>
<p>wlan0: AP-ENABLED</p>
<p>wlan0: STA ce:bd:9a:dd:a5:86 IEEE 802.11: associated</p>
<p>wlan0: AP-STA-CONNECTED ce:bd:9a:dd:a5:86</p>
<p>wlan0: STA ce:bd:9a:dd:a5:86 RADIUS: starting accounting session 937BF40E51897A7B</p>
<p>wlan0: STA ce:bd:9a:dd:a5:86 WPA: pairwise key handshake completed (RSN)</p>
<p>wlan0: EAPOL-4WAY-HS-COMPLETED ce:bd:9a:dd:a5:86</p></li>
<li><p>此时拿出手机,在搜索到的WIFI列表中就能找到开发板创建的名为'''orangepi'''的WIFI热点,然后可以点击'''orangepi'''连接热点,密码就是上面设置的'''orangepi'''</p>
<p>[[File:Orange_Pi_4A-image108.png|265x211px]]</p></li>
<li><p>连接成功后的显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image109.png|273x130px]]</p></li>
<li><p>在bridge模式下,连接到开发板热点的无线设备也是向主路由(开发板连接的路由器)的DHCP服务请求IP地址的,如这里开发板的IP是'''192.168.1.X'''</p>
<p>orangepi@orangepi:~$ '''sudo ifconfig eth0'''</p>
<p>eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500</p>
<p>inet '''192.168.1.150''' netmask 255.255.255.0 broadcast 192.168.1.255</p>
<p>inet6 fe80::938f:8776:5783:afa2 prefixlen 64 scopeid 0x20<link></p>
<p>ether 4a:a0:c8:25:42:82 txqueuelen 1000 (Ethernet)</p>
<p>RX packets 25370 bytes 2709590 (2.7 MB)</p>
<p>RX errors 0 dropped 50 overruns 0 frame 0</p>
<p>TX packets 3798 bytes 1519493 (1.5 MB)</p>
<p>TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0</p>
<p>device interrupt 83</p>
<p>而接入WIFI热点的设备的IP也是由主路由分配的,所以连接WIFI热点的手机和开发板处于相同的网段,这时点击已经连接的WIFI热点'''orangepi''',然后就可以看到手机的IP地址也是'''192.168.1.X'''。</p>
<p>[[File:Orange_Pi_4A-image109.png|284x136px]]</p>
<p>[[File:Orange_Pi_4A-image113.png|282x159px]]</p></li>
<li><p>在不指定'''--freq-band'''参数的情况下,默认创建的热点是2.4G频段的,如果想要创建5G频段的热点可以通过'''--freq-band 5'''参数指定,具体命令如下</p></li></ol>
orangepi@orangepi:~$ '''sudo create_ap -m bridge wlan0 eth0 orangepi orangepi --freq-band 5 --no-virt'''
<ol start="7" style="list-style-type: decimal;">
<li>如果需要隐藏SSID,可以指定'''--hidden'''参数,具体命令如下</li></ol>
orangepi@orangepi:~$ '''sudo create_ap -m bridge wlan0 eth0 orangepi orangepi --hidden --no-virt'''
此时手机是搜索不到WIFI热点的,需要手动指定WIFI热点名称,并输入密码来连接WIFI热点
[[File:Orange_Pi_4A-image112.png|228x191px]]
<span id="设置静态ip地址的方法"></span>
=== 设置静态IP地址的方法 ===
'''请不要通过修改/etc/network/interfaces配置文件的方式来设置静态IP地址。'''
<span id="使用nmtui命令来设置静态ip地址"></span>
==== 使用nmtui命令来设置静态IP地址 ====
<ol style="list-style-type: decimal;">
<li><p>首先运行'''nmtui'''命令</p>
<p>orangepi@orangepi:~$ '''sudo nmtui'''</p></li>
<li><p>然后选择'''Edit a connection'''并按下回车键</p>
<p>[[File:Orange_Pi_4A-image114.png|227x247px]]</p></li>
<li><p>然后选择需要设置静态IP地址的网络接口,比如设置'''Ethernet'''接口的静态IP地址选择'''Wired connection 1'''就可以了</p>
<p>[[File:Orange_Pi_4A-image115.png|310x149px]]</p></li>
<li><p>然后通过'''Tab'''键选择'''Edit'''并按下回车键</p>
<p>[[File:Orange_Pi_4A-image116.png|316x144px]]</p></li>
<li><p>然后通过Tab键将光标移动到下图所示的'''<Automatic>'''位置进行IPv4的配置</p>
<p>[[File:Orange_Pi_4A-image117.png|575x240px]]</p></li>
<li><p>然后回车,通过上下方向键选择'''Manual''',然后回车确定</p>
<p>[[File:Orange_Pi_4A-image118.png|576x237px]]</p></li>
<li><p>选择完后的显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image119.png|575x240px]]</p></li>
<li><p>然后通过Tab键将光标移动到'''<Show>'''</p>
<p>[[File:Orange_Pi_4A-image120.png|576x241px]]</p></li>
<li><p>然后回车,回车后会弹出下面的设置界面</p>
<p>[[File:Orange_Pi_4A-image121.png|575x450px]]</p></li>
<li><p>然后就可以在下图所示的位置设置IP地址(Addresses)、网关(Gateway)和DNS服务器的地址(里面还有很多其他设置选项,请自行探索),'''请根据自己的具体需求来设置,下图中设置的值只是一个示例'''</p>
<p>[[File:Orange_Pi_4A-image122.png|576x233px]]</p></li>
<li><p>设置完后将光标移动到右下角的'''<OK>''',然后回车确认</p>
<p>[[File:Orange_Pi_4A-image123.png|576x116px]]</p></li>
<li><p>然后点击'''<Back>'''回退到上一级选择界面</p>
<p>[[File:Orange_Pi_4A-image124.png|330x325px]]</p></li>
<li><p>然后选择'''Activate a connection''',再将光标移动到'''<OK>''',最后点击回车</p>
<p>[[File:Orange_Pi_4A-image125.png|331x248px]]</p></li>
<li><p>然后选择需要设置的网络接口,比如'''Wired connection 1''',然后将光标移动到'''<Deactivate>''',再按下回车键禁用'''Wired connection 1'''</p>
<p>[[File:Orange_Pi_4A-image126.png|576x224px]]</p></li>
<li><p>然后请不要移动光标,再按下回车键重新使能'''Wired connection 1''',这样前面设置的静态IP地址就会生效了</p>
<p>[[File:Orange_Pi_4A-image127.png|576x224px]]</p></li>
<li><p>然后通过'''<Back>'''和'''Quit'''按钮就可以退出nmtui</p>
<p>[[File:Orange_Pi_4A-image128.png|300x253px]] [[File:Orange_Pi_4A-image129.png|227x252px]]</p></li>
<li><p>然后通过'''ip a s eth0'''就能看到网口的IP地址已经变成前面设置的静态IP地址了</p>
<p>orangepi@orangepi:~$ '''ip a s eth0'''</p>
<p>3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
<p>link/ether 5e:ac:14:a5:92:b3 brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.177'''/24 brd 192.168.1.255 scope global noprefixroute eth0</p>
<p>valid_lft forever preferred_lft forever</p>
<p>inet6 241e:3b8:3240:c3a0:e269:8305:dc08:135e/64 scope global dynamic noprefixroute</p>
<p>valid_lft 259149sec preferred_lft 172749sec</p>
<p>inet6 fe80::957d:bbbe:4928:3604/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li>
<li><p>然后就可以测试网络的连通性来检查IP地址是否配置OK了,'''ping'''命令可以通过'''Ctrl+C'''快捷键来中断运行</p>
<p>orangepi@orangepi:~$ '''ping 192.168.1.177 -I eth0'''</p>
<p>PING 192.168.1.47 (192.168.1.47) from 192.168.1.188 eth0: 56(84) bytes of data.</p>
<p>64 bytes from 192.168.1.47: icmp_seq=1 ttl=64 time=0.233 ms</p>
<p>64 bytes from 192.168.1.47: icmp_seq=2 ttl=64 time=0.263 ms</p>
<p>64 bytes from 192.168.1.47: icmp_seq=3 ttl=64 time=0.273 ms</p>
<p>64 bytes from 192.168.1.47: icmp_seq=4 ttl=64 time=0.269 ms</p>
<p>64 bytes from 192.168.1.47: icmp_seq=5 ttl=64 time=0.275 ms</p>
<p>^C</p>
<p>--- 192.168.1.47 ping statistics ---</p>
<p>5 packets transmitted, 5 received, 0% packet loss, time 4042ms</p>
<p>rtt min/avg/max/mdev = 0.233/0.262/0.275/0.015 ms</p></li></ol>
<span id="使用nmcli命令来设置静态ip地址"></span>
==== 使用nmcli命令来设置静态IP地址 ====
<ol style="list-style-type: decimal;">
<li><p>如果要设置网口的静态IP地址,请先将网线插入开发板,'''如果需要设置WIFI的静态IP地址,请先连接好WIFI''',然后再开始设置静态IP地址</p></li>
<li><p>然后通过'''nmcli con show'''命令可以查看网络设备的名字,如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''orangepi'''为WIFI网络接口的名字(名字不一定相同)</p></li>
<li><p>'''Wired connection 1'''为以太网接口的名字</p>
<p>orangepi@orangepi:~$ '''nmcli con show'''</p>
<p>NAME UUID TYPE DEVICE</p>
<p>'''orangepi''' cfc4f922-ae48-46f1-84e1-2f19e9ec5e2a wifi wlan0</p>
<p>'''Wired connection 1''' 9db058b7-7701-37b8-9411-efc2ae8bfa30 ethernet eth0</p></li></ol>
</li>
<li><p>然后输入下面的命令,其中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''"Wired connection 1"''' 表示设置以太网口的静态IP地址,如果需要设置WIFI的静态IP地址,请修改为WIFI网络接口对应的名字(通过'''nmcli con show'''命令可以获取到)</p></li>
<li><p>'''ipv4.addresses'''后面是要设置的静态IP地址,可以修改为自己想要设置的值</p></li>
<li><p>'''ipv4.gateway''' 表示网关的地址</p>
<p>orangepi@orangepi:~$ '''sudo nmcli con mod "Wired connection 1" \'''</p>
<p>'''ipv4.addresses "192.168.1.110" \'''</p>
<p>'''ipv4.gateway "192.168.1.1" \'''</p>
<p>'''ipv4.dns "8.8.8.8" \'''</p>
<p>'''ipv4.method "manual"'''</p></li></ol>
</li>
<li><p>然后重启linux系统</p>
<p>orangepi@orangepi:~$ '''sudo reboot'''</p></li>
<li><p>然后重新进入linux系统使用'''ip addr show eth0'''命令就可以看到IP地址已经设置为想要的值了</p>
<p>orangepi@orangepi:~$ '''ip addr show eth0'''</p>
<p>3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
<p>link/ether 5e:ae:14:a5:91:b3 brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.110'''/32 brd 192.168.1.110 scope global noprefixroute eth0</p>
<p>valid_lft forever preferred_lft forever</p>
<p>inet6 240e:3b7:3240:c3a0:97de:1d01:b290:fe3a/64 scope global dynamic noprefixroute</p>
<p>valid_lft 259183sec preferred_lft 172783sec</p>
<p>inet6 fe80::3312:861a:a589:d3c/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li></ol>
<span id="设置linux系统第一次启动自动连接网络的方法"></span>
=== 设置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这款软件使用有问题请自行解决,我们不答疑。'''
<ol style="list-style-type: decimal;">
<li><p>首先烧录想使用的开发板的Linux镜像到TF卡中,然后使用读卡器,将烧录好开发板Linux镜像的TF卡插入安装有Linux系统的机器中(比如安装有Ubuntu系统的电脑,下面都以Ubuntu电脑为例来演示)</p></li>
<li><p>当TF卡插入Ubuntu电脑后,Ubuntu电脑一般会自动挂载TF卡中的Linux根文件系统的分区,由下面的命令可以知道,'''/media/test/opi_root'''即为TF卡中的Linux根文件系统挂载的路径</p>
<p>test@test:~$ '''df -h | grep "media"'''</p>
<p>/dev/sdd1 1.4G 1.2G 167M 88% '''/media/test/opi_root'''</p>
<p>test@test:~$ '''ls /media/test/opi_root'''</p>
<p>bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var</p></li>
<li><p>然后进入TF卡中烧录的Linux系统的'''/boot'''目录中</p>
<p>test@test:~$ '''cd /media/test/opi_root/boot/'''</p></li>
<li><p>然后将其中的'''orangepi_first_run.txt.template'''复制为'''orangepi_first_run.txt''',通过orangepi_first_run.txt配置文件可以设置开发板Linux系统第一次启动时自动连接某个WIFI热点,也可以设置WIFI或者以太网口的静态IP地址</p>
<p>test@test:/media/test/opi_root/boot$ '''sudo cp orangepi_first_run.txt.template orangepi_first_run.txt'''</p></li>
<li><p>通过下面的命令可以打开orangepi_first_run.txt文件,然后就可以查看修改其中的内容</p>
<p>test@test:/media/test/opi_root/boot$ '''sudo vim orangepi_first_run.txt'''</p></li>
<li><p>orangepi_first_run.txt文件中的变量使用说明</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''FR_general_delete_this_file_after_completion'''变量用来设置第一次启动完后是否删除orangepi_first_run.txt这个文件,默认为1,也就是删除,如果设置为0,第一次启动后会将orangepi_first_run.txt重命名为orangepi_first_run.txt.old,一般保持默认值即可</p></li>
<li><p>'''FR_net_change_defaults'''变量用于设置是否改变默认网络设置,这个必须要设置为1,否则所有的网络设置都不会生效</p></li>
<li><p>'''FR_net_ethernet_enabled'''变量用来控制是否使能以太网口的配置,如果需要设置以太网口的静态IP地址,请设置为1</p></li>
<li><p>'''FR_net_wifi_enabled'''变量用来控制是否使能WIFI的配置,如果需要设置开发板自动连接WIFI热点,则必须将其设置为1,另外请注意,如果此变量设置为1,则以太网口的设置就会失效。也就是说WIFI和以太网口不能同时设置(为什么,因为没必要...)</p></li>
<li><p>'''FR_net_wifi_ssid'''变量用于设置想要连接的WIFI热点的名字</p></li>
<li><p>'''FR_net_wifi_key'''变量用于设置想要连接的WIFI热点的密码</p></li>
<li><p>'''FR_net_use_static'''变量用于设置是否需要设置WIFI或者以太网口的静态IP地址</p></li>
<li><p>'''FR_net_static_ip'''变量用于设置静态IP的地址,请根据自己的实际情况设置</p></li>
<li><p>'''FR_net_static_gateway'''变量用于设置网关,请根据自己的实际情况设置</p></li></ol>
</li>
<li><p>下面演示几个具体的设置示例:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>比如想要开发板的Linux系统第一次启动后自动连接WIFI热点,可以这样设置:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>设置'''FR_net_change_defaults'''为'''1'''</p></li>
<li><p>设置'''FR_net_wifi_enabled'''为'''1'''</p></li>
<li><p>设置'''FR_net_wifi_ssid'''为想要连接的WIFI热点的名字</p></li>
<li><p>设置'''FR_net_wifi_key'''为想要连接的WIFI热点的密码</p></li></ol>
</li>
<li><p>比如想要开发板的Linux系统第一次启动后自动连接WIFI热点,并且设置WIFI的IP地址为特定的静态IP地址(这样当Linux系统启动后,可以直接使用设置的静态IP地址ssh远程登录开发板,无需通过路由器后台来查看开发板的IP地址),可以这样设置:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>设置'''FR_net_change_defaults'''为'''1'''</p></li>
<li><p>设置'''FR_net_wifi_enabled'''为'''1'''</p></li>
<li><p>设置'''FR_net_wifi_ssid'''为想要连接的WIFI热点的名字</p></li>
<li><p>设置'''FR_net_wifi_key'''为想要连接的WIFI热点的密码</p></li>
<li><p>设置'''FR_net_use_static'''为'''1'''</p></li>
<li><p>设置'''FR_net_static_ip'''为想要的IP地址</p></li>
<li><p>设置'''FR_net_static_gateway'''为对应的网关地址</p></li></ol>
</li>
<li><p>比如想要开发板的Linux系统第一次启动后自动设置以太网口的IP地址为想要的静态IP地址,可以这样设置:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>设置'''FR_net_change_defaults'''为'''1'''</p></li>
<li><p>设置'''FR_net_ethernet_enabled'''为'''1'''</p></li>
<li><p>设置'''FR_net_use_static'''为'''1'''</p></li>
<li><p>设置'''FR_net_static_ip'''为想要的IP地址</p></li>
<li><p>设置'''FR_net_static_gateway'''为对应的网关地址</p></li></ol>
</li></ol>
</li>
<li><p>修改完orangepi_first_run.txt文件后,就可以退出TF卡中开发板Linux系统的/boot目录,再卸载TF卡,然后就可以将TF卡插入开发板中启动了</p></li>
<li><p>如果没有设置静态IP地址,则还是需要通过路由器后台来查看IP地址,如果设置了静态IP地址,则可以在电脑上ping下设置的静态IP地址,如果能ping说明系统已经正常启动,并且网络也已设置正确,然后就可以使用设置的IP地址ssh远程登录开发板的Linux系统了</p></li></ol>
'''开发板的Linux系统第一次启动完后,orangepi_first_run.txt会被删除或者重命名为orangepi_first_run.txt.old,此时就算重新设置orangepi_first_run.txt配置文件,然后重新启动开发板的Linux系统,orangepi_first_run.txt中的配置也不会再次生效,因为此配置只在烧录完Linux系统后第一次启动才会有作用,这点请特别注意。'''
<span id="ssh远程登录开发板"></span>
== SSH远程登录开发板 ==
'''Linux系统默认都开启了ssh远程登录,并且允许root用户登录系统。ssh登录前首先需要确保以太网或者wifi网络已连接,然后使用ip addr命令或者通过查看路由器的方式获取开发板的IP地址。'''
<span id="ubuntu下ssh远程登录开发板"></span>
=== Ubuntu下SSH远程登录开发板 ===
# 获取开发板的IP地址
# 然后就可以通过ssh命令远程登录linux系统
test@test:~$ '''ssh [mailto:root@192.168.1.36 orangepi@192.168.1.]xxx''' (需要替换为开发板的IP地址)
orangepi@192.168.1.xx's password: (在这里输入密码,默认密码为orangepi)
'''注意,输入密码的时候,屏幕上是不会显示输入的密码的具体内容的,请不要以为是有什么故障,输入完后直接回车即可。'''
'''如果提示拒绝连接,只要使用的是Orange Pi提供的镜像,就请不要怀疑orangepi这个密码是不是不对,而是要找其他原因。'''
<ol start="3" style="list-style-type: decimal;">
<li><p>成功登录系统后的显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image130.png|575x337px]]</p>
<p>'''如果ssh无法正常登陆linux系统,首先请检查下开发板的IP地址是否能ping通,如果ping通没问题的话,可以通过串口或者HDMI显示器登录linux系统然后在开发板上输入下面的命令后再尝试是否能连接:'''</p></li></ol>
root@orangepi:~# '''reset_ssh.sh'''
'''如果还不行,请重烧系统试下。'''
<span id="windows下ssh远程登录开发板"></span>
=== Windows下SSH远程登录开发板 ===
<ol style="list-style-type: decimal;">
<li><p>首先获取开发板的IP地址</p></li>
<li><p>在windows下可以使用MobaXterm远程登录开发板,首先新建一个ssh会话</p>
<ol style="list-style-type: lower-alpha;">
<li><p>打开'''Session'''</p></li>
<li><p>然后在'''Session Setting'''中选择'''SSH'''</p></li>
<li><p>然后在'''Remote host'''中输入开发板的IP地址</p></li>
<li><p>然后在'''Specify username'''中输入linux系统的用户名'''root'''或'''orangepi'''</p></li>
<li><p>最后点击'''OK'''即可</p>
<p>[[File:Orange_Pi_4A-image131.png|576x292px]]</p></li></ol>
</li>
<li><p>然后会提示输入密码,默认root和orangepi用户的密码都为orangepi</p>
<p>'''注意,输入密码的时候,屏幕上是不会显示输入的密码的具体内容的,请不要以为是有什么故障,输入完后直接回车即可。'''</p>
<p>[[File:Orange_Pi_4A-image132.png|575x157px]]</p></li>
<li><p>成功登录系统后的显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image133.png|576x419px]]</p></li></ol>
<span id="hdmi测试"></span>
== HDMI测试 ==
<span id="hdmi显示测试"></span>
=== HDMI显示测试 ===
<ol style="list-style-type: decimal;">
<li><p>HDMI转HDMI线连接Orange Pi开发板和HDMI显示器</p>
<p>[[File:Orange_Pi_4A-image10.png|199x129px]]</p></li>
<li><p>启动linux系统后如果HDMI显示器有图像输出说明HDMI接口使用正常</p></li></ol>
'''注意,很多笔记本电脑虽然带有HDMI接口,但是笔记本的HDMI接口一般只有输出功能,并没有HDMI in的功能,也就是说并不能将其他设备的HDMI输出显示到笔记本的屏幕上。'''
'''当想把开发板的HDMI接到笔记本电脑HDMI接口时,请先确认清楚您的笔记本是支持HDMI in的功能。'''
'''当HDMI没有显示的时候,请先检查下HDMI线有没有插紧,确认接线没问题后,可以换一个不同的屏幕试下有没有显示。'''
<span id="hdmi转vga显示测试"></span>
=== HDMI转VGA显示测试 ===
<ol style="list-style-type: decimal;">
<li><p>首先需要准备下面的配件</p>
<ol style="list-style-type: lower-alpha;">
<li><p>HDMI转VGA转换器</p>
<p>[[File:Orange_Pi_4A-image134.png|155x104px]]</p></li>
<li><p>一根VGA线</p>
<p>[[File:Orange_Pi_4A-image135.png|148x133px]]</p></li>
<li><p>一个支持VGA接口的显示器或者电视</p></li></ol>
</li>
<li><p>HDMI转VGA显示测试如下所示</p>
<p>[[File:Orange_Pi_4A-image136.png|575x347px]]</p>
<p>'''使用HDMI转VGA显示时,开发板以及开发板的Linux系统是不需要做任何设置的,只需要开发板HDMI接口能正常显示就可以了。所以如果测试有问题,请检查HDMI转VGA转换器、VGA线以及显示器是否有问题。'''</p></li></ol>
== 蓝牙使用方法 ==
<span id="桌面版镜像的测试方法-1"></span>
=== 桌面版镜像的测试方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先点击桌面右上角的这块区域</p>
<p>[[File:Orange_Pi_4A-image137.png|256x164px]]</p></li>
<li><p>然后打开'''Bluetooth Settings'''</p>
<p>[[File:Orange_Pi_4A-image138.png|296x274px]]</p></li>
<li><p>蓝牙默认会打开,此时在'''Devices'''下面会显示周围扫描到的蓝牙设备</p>
<div class="figure">
[[File:Orange_Pi_4A-image139.png|415x272px|Screenshot from 2024-09-10 10-27-08]]
</div></li>
<li><p>然后点击想要连接的设备就可以开始配对了,开始配对后会弹出配对确认框,选择'''Confirm'''确认即可,此时手机上也同样需要进行确认</p>
<p>[[File:Orange_Pi_4A-image140.png|390x279px]]</p></li>
<li><p>和手机配对完后,可以选择已配对的蓝牙设备,然后选择'''Send Files'''即可开始给手机发送一个文件</p>
<p>[[File:Orange_Pi_4A-image141.png|395x257px]]</p></li>
<li><p>然后选择要发送的文件路径,再点击'''Select'''开始发送</p>
<p>[[File:Orange_Pi_4A-image142.png|367x214px]]</p></li>
<li><p>发送文件的界面如下图所示</p>
<p>[[File:Orange_Pi_4A-image143.png|374x173px]]</p></li></ol>
=== 服务器版镜像的使用方法 ===
<ol style="list-style-type: decimal;">
<li><p>进入系统后首先可以通过'''hciconfig'''命令来查看是否存在蓝牙的设备节点,如果存在,说明蓝牙初始化正常</p>
<p>orangepi@orangepi:~$ '''sudo apt update && sudo apt install -y bluez'''</p>
<p>orangepi@orangepi:~$ '''hciconfig -a'''</p>
<p>hci0: Type: Primary Bus: UART</p>
<p>BD Address: 3E:61:3D:19:0E:52 ACL MTU: 1021:8 SCO MTU: 240:3</p>
<p>UP RUNNING</p>
<p>RX bytes:925 acl:0 sco:0 events:72 errors:0</p>
<p>TX bytes:5498 acl:0 sco:0 commands:72 errors:0</p>
<p>Features: 0xbf 0xff 0x8d 0xfe 0xdb 0x3d 0x7b 0xc7</p>
<p>Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3</p>
<p>Link policy: RSWITCH SNIFF</p>
<p>Link mode: SLAVE ACCEPT</p>
<p>Name: 'orangepi'</p>
<p>Class: 0x3c0000</p>
<p>Service Classes: Rendering, Capturing, Object Transfer, Audio</p>
<p>Device Class: Miscellaneous,</p>
<p>HCI Version: 5.0 (0x9) Revision: 0x400</p>
<p>LMP Version: 5.0 (0x9) Subversion: 0x400</p>
<p>Manufacturer: Spreadtrum Communications Shanghai Ltd (492)</p></li>
<li><p>使用'''bluetoothctl'''扫描蓝牙设备</p>
<p>orangepi@orangepi:~$ '''sudo bluetoothctl'''</p>
<p>[NEW] Controller 10:11:12:13:14:15 orangepi4a [default]</p>
<p>Agent registered</p>
<p>[bluetooth]# '''power on #使能控制器'''</p>
<p>Changing power on succeeded</p>
<p>[bluetooth]# '''discoverable on #设置控制器为可被发现的'''</p>
<p>Changing discoverable on succeeded</p>
<p>[CHG] Controller 10:11:12:13:14:15 Discoverable: yes</p>
<p>[bluetooth]# '''pairable on #设置控制器为可配对的'''</p>
<p>Changing pairable on succeeded</p>
<p>[bluetooth]# '''scan on #开始扫描周围的蓝牙设备'''</p>
<p>Discovery started</p>
<p>[CHG] Controller 10:11:12:13:14:15 Discovering: yes</p>
<p>[NEW] Device 76:60:79:29:B9:31 76-60-79-29-B9-31</p>
<p>[NEW] Device 9C:2E:A1:42:71:11 小米手机</p>
<p>'''[NEW] Device DC:72:9B:4C:F4:CF orangepi'''</p>
<p>[bluetooth]# '''scan off #扫描到想连接的蓝牙设备后就可以关闭扫描了,然后记下蓝牙设备的MAC地址,这里测试的蓝牙设备为Android手机,蓝牙的名字为orangepi,对应的MAC地址为DC:72:9B:4C:F4:CF'''</p>
<p>Discovery stopped</p>
<p>[CHG] Controller 10:11:12:13:14:15 Discovering: no</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF RSSI is nil</p></li>
<li><p>扫描到想配对的设备后就可以进行配对了,配对需要使用设备的MAC地址</p>
<p>[bluetooth]# '''pair DC:72:9B:4C:F4:CF''' '''#使用扫描到的蓝牙设备的MAC地址进行配对'''</p>
<p>Attempting to pair with DC:72:9B:4C:F4:CF</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF Connected: yes</p>
<p>Request confirmation</p>
<p>[leeb1m[agent] Confirm passkey 764475 (yes/no): '''yes''' '''#在这里输入yes,在手机上也需要确认'''</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF Modalias: bluetooth:v010Fp107Ed1436</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF UUIDs: 0000046a-0000-1000-8000-00805f9b34fb</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF ServicesResolved: yes</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF Paired: yes</p>
<p>'''Pairing successful #提示配对成功'''</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF ServicesResolved: no</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF Connected: no</p></li>
<li><p>配对成功后,手机蓝牙界面的显示如下所示</p>
<p>[[File:Orange_Pi_4A-image144.png|189x167px]]</p></li>
<li><p>连接蓝牙设备需要安装 '''pulseaudio-module-bluetooth'''软件包,然后再启动'''pulseaudio''' 服务</p>
<p>orangepi@orangepi:~$ '''sudo apt update'''</p>
<p>orangepi@orangepi:~$ '''sudo''' '''apt -y install pulseaudio-module-bluetooth'''</p>
<p>orangepi@orangepi:~$ '''pulseaudio --start'''</p></li>
<li><p>连接蓝牙设备的方法</p>
<p>orangepi@orangepi:~$ '''sudo bluetoothctl'''</p>
<p>Agent registered</p>
<p>[bluetooth]# '''paired-devices #查看已配对的蓝牙设备的MAC地址'''</p>
<p>Device DC:72:9B:4C:F4:CF orangepi</p>
<p>[bluetooth]# '''connect DC:72:9B:4C:F4:CF #使用MAC地址连接蓝牙设备'''</p>
<p>Attempting to connect to DC:72:9B:4C:F4:CF</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF Connected: yes</p>
<p>Connection successful</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF ServicesResolved: yes</p>
<p>[CHG] Controller 10:11:12:13:14:15 Discoverable: no</p>
<p>'''[orangepi]# #出现这个提示符说明连接成功'''</p></li>
<li><p>连接完蓝牙设备后,Android手机的蓝牙配置界面就可以看到'''已连接用于通话和媒体的音频'''的提示</p>
<div class="figure">
[[File:Orange_Pi_4A-image145.jpeg|223x232px|Screenshot_20201205_142413]]
</div></li></ol>
<span id="usb接口测试"></span>
== USB接口测试 ==
'''USB接口是可以接USB hub来扩展USB接口的数量的。'''
<span id="连接usb鼠标或键盘测试"></span>
=== 连接USB鼠标或键盘测试 ===
# 将USB接口的键盘插入Orange Pi开发板的USB接口中
# 连接Orange Pi开发板到HDMI显示器
# 如果鼠标或键盘能正常操作系统说明USB接口使用正常(鼠标只有在桌面版的系统中才能使用)
<span id="连接usb存储设备测试"></span>
=== 连接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'''
<ol start="3" style="list-style-type: decimal;">
<li>使用mount命令可以将U盘挂载到'''/mnt'''中,然后就能查看U盘中的文件了</li></ol>
orangepi@orangepi:~$ '''sudo mount /dev/sda1 /mnt/'''
orangepi@orangepi:~$ '''ls /mnt/'''
test.txt
<ol start="4" style="list-style-type: decimal;">
<li>挂载完后通过'''df -h'''命令就能查看U盘的容量使用情况和挂载点</li></ol>
orangepi@orangepi:~$ '''df -h | grep "sd"'''
/dev/sda1 29G 208K 29G 1% /mnt
<span id="usb以太网卡测试"></span>
=== USB以太网卡测试 ===
# 目前'''测试过'''能用的USB以太网卡如下所示,其中RTL8153 USB千兆网卡插入开发板的USB 2.0 Host接口中测试可以正常使用,但是速率是达不到千兆的,这点请注意
{| class="wikitable"
|-
| style="text-align: left;"| 序号
| style="text-align: left;"| 型号
|-
| style="text-align: left;"| 1
| style="text-align: left;"| RTL8152B USB百兆网卡
|-
| style="text-align: left;"| 2
| style="text-align: left;"| RTL8153 USB千兆网卡
|}
<ol start="2" style="list-style-type: decimal;">
<li><p>首先将USB网卡插入开发板的USB接口中,然后在USB网卡中插入网线,确保网线能正常上网,如果通过'''dmesg'''命令可以看到下面的log信息,说明USB网卡识别正常</p>
<p>orangepi@orangepi:~$ '''dmesg | tail'''</p>
<p>[ 121.985016] usb 3-1: USB disconnect, device number 2</p>
<p>[ 126.873772] sunxi-ehci 5311000.ehci3-controller: ehci_irq: highspeed device connect</p>
<p>[ 127.094054] usb 3-1: new high-speed USB device number 3 using sunxi-ehci</p>
<p>[ 127.357472] usb 3-1: reset high-speed USB device number 3 using sunxi-ehci</p>
<p>[ 127.557960] r8152 3-1:1.0 eth1: v1.08.9</p>
<p>[ 127.602642] r8152 3-1:1.0 enx00e04c362017: renamed from eth1</p>
<p>[ 127.731874] IPv6: ADDRCONF(NETDEV_UP): enx00e04c362017: link is not ready</p>
<p>[ 127.763031] IPv6: ADDRCONF(NETDEV_UP): enx00e04c362017: link is not ready</p>
<p>[ 129.892465] r8152 3-1:1.0 enx00e04c362017: carrier on</p>
<p>[ 129.892583] IPv6: ADDRCONF(NETDEV_CHANGE): enx00e04c362017: link becomes ready</p></li>
<li><p>然后通过ifconfig命令可以看到USB网卡的设备节点,以及自动分配的IP地址</p>
<p>orangepi@orangepi:~$ '''sudo ifconfig'''</p>
<p>'''eth1''': flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500</p>
<p>inet '''192.168.1.177''' netmask 255.255.255.0 broadcast 192.168.1.255</p>
<p>inet6 fe80::681f:d293:4bc5:e9fd prefixlen 64 scopeid 0x20<link></p>
<p>ether 00:e0:4c:36:20:17 txqueuelen 1000 (Ethernet)</p>
<p>RX packets 1849 bytes 134590 (134.5 KB)</p>
<p>RX errors 0 dropped 125 overruns 0 frame 0</p>
<p>TX packets 33 bytes 2834 (2.8 KB)</p>
<p>TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0</p></li>
<li><p>测试网络连通性的命令如下</p>
<p>orangepi@orangepi:~$ '''ping www.baidu.com -I eth1'''</p>
<p>PING www.a.shifen.com (14.215.177.38) from 192.168.1.12 eth0: 56(84) bytes of data.</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=56 time=6.74 ms</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=56 time=6.80 ms</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=56 time=6.26 ms</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=56 time=7.27 ms</p>
<p>^C</p>
<p>--- www.a.shifen.com ping statistics ---</p>
<p>4 packets transmitted, 4 received, 0% packet loss, time 3002ms</p>
<p>rtt min/avg/max/mdev = 6.260/6.770/7.275/0.373 ms</p></li></ol>
<span id="usb摄像头测试"></span>
=== USB摄像头测试 ===
<ol style="list-style-type: decimal;">
<li><p>首先将USB摄像头插入到Orange Pi开发板的USB接口中</p></li>
<li><p>然后通过lsmod命令可以看到内核自动加载了下面的模块</p>
<p>orangepi@orangepi:~$ '''lsmod'''</p>
<p>Module Size Used by</p>
<p>'''uvcvideo 106496 0'''</p></li>
<li><p>通过v4l2-ctl命令可以看到USB摄像头的设备节点信息为/dev/video0</p>
<p>orangepi@orangepi:~$ '''sudo apt update'''</p>
<p>orangepi@orangepi:~$ '''sudo''' '''apt install -y v4l-utils'''</p>
<p>orangepi@orangepi:~$ '''v4l2-ctl --list-devices'''</p>
<p>USB 2.0 Camera (usb-sunxi-ehci-1):</p>
<p>/dev/video0</p>
<p>'''注意v4l2中的l是小写字母l,不是数字1。'''</p>
<p>'''另外video的序号不一定都是video0,请以实际看到的为准。'''</p></li>
<li><p>使用fswebcam测试USB摄像头</p>
<ol style="list-style-type: lower-alpha;">
<li><p>安装fswebcam</p>
<p>orangepi@orangepi:~$ '''sudo''' '''apt update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y fswebcam'''</p></li>
<li><p>安装完fswebcam后可以使用下面的命令来拍照</p>
<ol style="list-style-type: lower-alpha;">
<li><p>-d 选项用于指定USB摄像头的设备节点</p></li>
<li><p>--no-banner用于去除照片的水印</p></li>
<li><p>-r 选项用于指定照片的分辨率</p></li>
<li><p>-S 选项用设置于跳过前面的帧数</p></li>
<li><p>./image.jpg 用于设置生成的照片的名字和路径</p>
<p>orangepi@orangepi:~$ '''sudo''' '''fswebcam -d /dev/video0 \'''</p>
<p>'''--no-banner -r 1280x720 -S 5 ./image.jpg'''</p></li></ol>
</li>
<li><p>在服务器版的linux系统中,拍完照后可以使用scp命令将拍好的图片传到Ubuntu PC上镜像观看</p>
<p>orangepi@orangepi:~$ '''scp image.jpg [mailto:test@192.168.1.55:/home/test test@192.168.1.55:/home/test] (根据实际情况修改IP地址和路径)'''</p></li>
<li><p>在桌面版的linux系统中,可以通过HDMI显示器直接查看拍摄的图片</p></li></ol>
</li>
<li><p>使用mjpg-streamer测试USB摄像头</p>
<ol style="list-style-type: lower-alpha;">
<li><p>下载mjpg-streamer</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Github的下载地址:</p>
<p>orangepi@orangepi:~$ '''git clone https://github.com/jacksonliam/mjpg-streamer'''</p></li>
<li><p>Gitee的镜像下载地址为:</p>
<p>orangepi@orangepi:~$ '''git clone https://gitee.com/leeboby/mjpg-streamer'''</p></li></ol>
</li>
<li><p>安装依赖的软件包</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Ubuntu系统</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y cmake libjpeg8-dev'''</p></li>
<li><p>Debian系统</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y cmake libjpeg62-turbo-dev'''</p></li></ol>
</li>
<li><p>编译安装mjpg-streamer</p>
<p>orangepi@orangepi:~$ '''cd mjpg-streamer/mjpg-streamer-experimental'''</p>
<p>orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ '''make -j4'''</p>
<p>orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ '''sudo make install'''</p></li>
<li><p>然后输入下面的命令启动mjpg_streamer</p>
<p>'''注意,video的序号不一定都是video0,请以实际看到的为准。'''</p>
<p>orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ '''export LD_LIBRARY_PATH=.'''</p>
<p>orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ '''sudo ./mjpg_streamer -i "./input_uvc.so -d \'''</p>
<p>'''/dev/video0 -u -f 30" -o "./output_http.so -w ./www"'''</p></li>
<li><p>然后在和开发板同一局域网的Ubuntu PC或者Windows PC或者手机的浏览器中输入【'''开发板的IP地址:8080'''】就能看到摄像头输出的视频了</p>
<div class="figure">
[[File:Orange_Pi_4A-image146.png|575x279px|选区_021]]
</div></li></ol>
</li></ol>
== 音频测试 ==
=== 使用命令行播放音频的方法 ===
==== 耳机接口播放音频测试 ====
<ol style="list-style-type: decimal;">
<li><p>首先将耳机插入开发板的耳机孔中。</p>
<p>[[File:Orange_Pi_4A-image147.png|331x105px]]</p></li>
<li><p>通过'''aplay -l'''命令可以查看linux系统支持的声卡设备,其中'''audiocodec'''就是耳机播放需要的声卡设备</p>
<p>root@orangepi:~# '''aplay -l'''</p>
<p>**** List of PLAYBACK Hardware Devices ****</p>
<p>'''card 0: audiocodec [audiocodec], device 0: sunxi-snd-plat-aaudio-sunxi-snd-codec 7110000.codec-0 []'''</p>
<p>'''Subdevices: 1/1'''</p>
<p>'''Subdevice #0: subdevice #0'''</p>
<p>card 1: sndi2s1 [sndi2s1], device 0: sunxi-snd-plat-i2s-snd-soc-dummy-dai snd-soc-dummy-dai-0 []</p>
<p>Subdevices: 1/1</p>
<p>Subdevice #0: subdevice #0</p>
<p>card 2: sndhdmi [sndhdmi], device 0: sunxi-snd-plat-i2s-soc@3000000:hdmi_codec soc@3000000:hdmi_code []</p>
<p>Subdevices: 1/1</p>
<p>Subdevice #0: subdevice #0</p></li>
<li><p>然后使用'''aplay'''命令播放音频,耳机就能听到声音了</p>
<p>root@orangepi:~# '''aplay -D hw:0,0 /usr/share/sounds/alsa/audio.wav'''</p>
<p>Playing WAVE 'audio.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo</p></li></ol>
'''如果耳机测试有杂音,请将耳机拔出来一些,不要全部插到底。'''
<span id="hdmi音频播放测试"></span>
==== HDMI音频播放测试 ====
<ol style="list-style-type: decimal;">
<li><p>首先使用HDMI 转HDMI线将Orange Pi开发板连接到电视机上(其他的HDMI显示器需要确保可以播放音频)</p></li>
<li><p>HDMI音频播放无需其他设置,直接使用'''aplay'''命令播放即可</p>
<p>root@orangepi:~# '''aplay -D hw:2,0 /usr/share/sounds/alsa/audio.wav'''</p></li></ol>
=== 在桌面系统中测试音频方法 ===
# 首先打开文件管理器
[[File:Orange_Pi_4A-image148.png|259x190px]]
<ol start="2" style="list-style-type: decimal;">
<li><p>然后找到下面这个文件(如果系统中没有这个音频文件,可以自己上传一个音频文件到系统中)</p>
<p>[[File:Orange_Pi_4A-image149.png|286x174px]]</p></li>
<li><p>然后选中audio.wav文件,右键选择使用vlc打开就可以开始播放</p>
<p>[[File:Orange_Pi_4A-image150.png|290x174px]]</p></li>
<li><p>切换HDMI播放和耳机播放等不同音频设备的方法</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先点击右上角的这块区域</p>
<p>[[File:Orange_Pi_4A-image137.png|256x164px]]</p></li>
<li><p>然后选择'''Settings'''</p>
<p>[[File:Orange_Pi_4A-image151.png|262x254px]]</p></li>
<li><p>然后找到'''Sound'''</p>
<p>[[File:Orange_Pi_4A-image152.png|308x193px]]</p></li>
<li><p>然后在Output Device的下拉选择框中选择想要播放的音频设备('''选择Audio Codec声音将会从耳机输出,选择HDMI Audio声音会从HDMI输出''')</p>
<p>[[File:Orange_Pi_4A-image153.png|310x196px]]</p></li></ol>
</li></ol>
=== 使用命令测试录音的方法 ===
<ol style="list-style-type: decimal;">
<li><p>Orange Pi 4A开发板没有板载MIC,只能通过带MIC功能的耳机来录制音频。将带MIC功能的耳机插入开发板后,运行下面的命令会通过耳机录制一段音频</p>
<p>orangepi@orangepi:~$ '''arecord -D hw:0,0 -d 5 -f S16_LE -t wav /tmp/test.wav'''</p></li></ol>
== 温度传感器 ==
T527总共有6个温度传感器,查看温度的命令如下所示:
'''显示的温度值需要除以1000,单位才是摄氏度。'''
<ol style="list-style-type: lower-alpha;">
<li>sensor0:CPUL的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</li></ol>
orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone0/type'''
'''cpul'''_thermal_zone
orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone0/temp'''
'''54925'''
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>sensor1:CPUB的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</p>
<p>orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone1/type'''</p>
<p>'''cpub'''_thermal_zone</p>
<p>orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone1/temp'''</p>
<p>'''54990'''</p></li>
<li><p>sensor2:GPU的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</p>
<p>orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone2/type'''</p>
<p>'''gpu'''_thermal_zone</p>
<p>orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone2/temp'''</p>
<p>'''55056'''</p></li>
<li><p>sensor3:NPU的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</p>
<p>orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone3/type'''</p>
<p>'''npu'''_thermal_zone</p>
<p>orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone3/temp'''</p>
<p>'''54686'''</p></li>
<li><p>sensor4:DDR的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</p></li></ol>
orangepi@orangepi:~# '''cat /sys/class/thermal/thermal_zone4/type'''
'''ddr'''_thermal_zone
orangepi@orangepi:~# '''cat /sys/class/thermal/thermal_zone4/temp'''
'''54925'''
<ol start="6" style="list-style-type: lower-alpha;">
<li>sensor5:axp2202的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</li></ol>
orangepi@orangepi:~# '''cat /sys/class/thermal/thermal_zone5/type'''
'''axp2202-usb'''
orangepi@orangepi:~# '''cat /sys/class/thermal/thermal_zone5/temp'''
'''45600'''
<span id="pin接口引脚说明"></span>
== 40 pin接口引脚说明 ==
<ol style="list-style-type: decimal;">
<li><p>Orange Pi 4A开发板40 pin接口引脚的顺序请参开发板上的丝印图</p>
<p>[[File:Orange_Pi_4A-image154.png|458x149px]]</p></li>
<li><p>开发板40 pin接口引脚的功能如下表所示</p>
<ol style="list-style-type: lower-alpha;">
<li>下面是40pin完整的引脚图</li></ol>
</li></ol>
[[File:Orange_Pi_4A-image155.png|575x191px]]
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>下面的表格是上面完整表格左半边部分的图,能看得清楚点</p>
<p>[[File:Orange_Pi_4A-image156.png|576x375px]]</p></li>
<li><p>下面的表格是上面完整表格右半边部分的图,能看得清楚点</p></li></ol>
[[File:Orange_Pi_4A-image157.png|575x384px]]
<ol start="3" style="list-style-type: decimal;">
<li>40 pin接口中总共有'''28'''个GPIO口,所有GPIO口的电压都是'''3.3v'''</li></ol>
<span id="安装wiringop的方法"></span>
== 安装wiringOP的方法 ==
'''注意,Orange Pi发布的linux镜像中已经预装了wiringOP,除非wiringOP的代码有更新,否则无需重新下载编译安装,直接使用即可。'''
'''编译好的wiringOP的deb包在orangepi-build中的存放路径为:'''
'''orangepi-build/external/cache/debs/arm64/wiringpi_x.xx.deb'''
'''进入系统后可以运行下gpio readall命令,如果能看到下面的输出,说明wiringOP已经预装并且能正常使用。'''
[[File:Orange_Pi_4A-image158.png|575x354px]]
<ol style="list-style-type: decimal;">
<li><p>下载wiringOP的代码</p>
<p>orangepi@orangepi:~$ '''sudo apt update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt install -y git'''</p>
<p>orangepi@orangepi:~$ '''git clone https://github.com/orangepi-xunlong/wiringOP.git -b next'''</p>
<p>'''注意,源码需要下载wiringOP next分支的代码,请别漏了-b next这个参数。'''</p>
<p>'''如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP源码,存放位置为:/usr/src/wiringOP。'''</p></li>
<li><p>编译安装wiringOP</p>
<p>orangepi@orangepi:~$ '''cd wiringOP'''</p>
<p>orangepi@orangepi:~/wiringOP$ '''sudo ./build clean'''</p>
<p>orangepi@orangepi:~/wiringOP$ '''sudo ./build'''</p></li>
<li><p>测试gpio readall命令的输出如下</p>
<p>[[File:Orange_Pi_4A-image158.png|575x354px]]</p></li></ol>
<span id="pin接口gpioi2cuartspi和pwm测试"></span>
== 40pin接口GPIO、I2C、UART、SPI和PWM测试 ==
<span id="pin-gpio口测试"></span>
=== 40pin GPIO口测试 ===
<ol style="list-style-type: decimal;">
<li><p>下面以7号引脚——对应GPIO为PB4——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p>
<p>[[File:Orange_Pi_4A-image159.png|575x119px]]</p></li>
<li><p>首先设置GPIO口为输出模式,其中第三个参数需要输入引脚对应的wPi的序号</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio mode 2 out'''</p></li>
<li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio write 2 0'''</p>
<p>使用gpio readall可以看到7号引脚的值(V)变为了0</p>
<p>[[File:Orange_Pi_4A-image160.png|576x120px]]</p></li>
<li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio write 2 1'''</p>
<p>使用gpio readall可以看到7号引脚的值(V)变为了1</p>
<p>[[File:Orange_Pi_4A-image161.png|576x119px]]</p></li>
<li><p>其他引脚的设置方法类似,只需修改wPi的序号为引脚对应的序号即可</p></li></ol>
<span id="pin-gpio口上下拉电阻的设置方法"></span>
=== 40 pin GPIO口上下拉电阻的设置方法 ===
<ol style="list-style-type: decimal;">
<li><p>下面以7号引脚——对应GPIO为PB4——对应wPi序号为2——为例演示如何设置GPIO口的上下拉电阻</p>
<p>[[File:Orange_Pi_4A-image159.png|575x119px]]</p></li>
<li><p>首先需要设置GPIO口为输入模式,其中第三个参数需要输入引脚对应的wPi的序号</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio mode 2 in'''</p></li>
<li><p>设置为输入模式后,执行下面的命令可以设置GPIO口为上拉模式</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio mode 2 up'''</p></li>
<li><p>然后输入下面的命令读取GPIO口的电平,如果电平为1,说明上拉模式设置成功</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio read 2'''</p>
<p>'''1'''</p></li>
<li><p>然后执行下面的命令可以设置GPIO口为下拉模式</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio mode 2 down'''</p></li>
<li><p>然后输入下面的命令读取GPIO口的电平,如果电平为0,说明下拉模式设置成功</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio read 2'''</p>
<p>'''0'''</p></li></ol>
<span id="pin-spi测试"></span>
=== 40 pin SPI测试 ===
<ol style="list-style-type: decimal;">
<li><p>由下图可知,Orange Pi 4A可用的SPI为SPI1和SPI2。</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>SPI1和SPI2在40pin中对应的引脚如下表所示。</p></li></ol>
{| class="wikitable"
|-
|
| style="text-align: left;"| '''SPI1对应40pin'''
| style="text-align: left;"| '''SPI2对应40pin'''
|-
| '''MOSI'''
| style="text-align: left;"| '''19号引脚'''
| style="text-align: left;"| '''15号引脚'''
|-
| '''MISO'''
| style="text-align: left;"| '''21号引脚'''
| style="text-align: left;"| '''29号引脚'''
|-
| '''CLK'''
| style="text-align: left;"| '''23号引脚'''
| style="text-align: left;"| '''13号引脚'''
|-
| '''CS0'''
| style="text-align: left;"| '''24号引脚'''
| style="text-align: left;"| '''11号引脚'''
|}
'''在Linux系统中,40pin中的spi功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开spi1和spi2,注意同时打开多个配置时,下面红色字体内容需要使用空格隔开写在一行。'''
'''orangepi@orangepi4a:~$''' '''sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-spi1-cs0-spidev.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-spi2-cs0-spidev.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>然后查看下linux系统中是否存在'''spidevx.x'''的设备节点,如果存在,说明SPI的配置已经生效了</p>
<p>orangepi@orangepi:~$ '''ls /dev/spidev*'''</p>
<p>/dev/spidev1.0 /dev/spidev2.0</p></li>
<li><p>先不短接SPI1或者SPI2的mosi和miso两个引脚,运行spidev_test的输出结果如下所示,可以看到TX和RX的数据不一致</p>
<p>orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev1.0'''</p>
<p>'''或者'''</p>
<p>orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev2.0'''</p>
<p>spi mode: 0x0</p>
<p>bits per word: 8</p>
<p>max speed: 500000 Hz (500 KHz)</p>
<p>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 | ......@.…▒..................▒.</p>
<p>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 | ............................….</p></li>
<li><p>然后短接SPI1或者SPI2的mosi和miso两个引脚再运行spidev_test的输出如下,可以看到发送和接收的数据一样</p>
<p>orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev1.0'''</p>
<p>'''或者'''</p>
<p>orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev2.0'''</p>
<p>spi mode: 0x0</p>
<p>bits per word: 8</p>
<p>max speed: 500000 Hz (500 KHz)</p>
<p>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 | ......@.…▒..................▒.</p>
<p>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 | ......@.…▒..................▒.</p></li></ol>
<span id="pin-i2c测试"></span>
=== 40 pin I2C测试 ===
<ol style="list-style-type: decimal;">
<li><p>由下图可知,Orange Pi 4A可用的i2c为i2c1、i2c4和i2c5共三组i2c总线。</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>三组I2C总线在40pin中对应的引脚如下表所示。</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| '''I2C总线'''
| style="text-align: left;"| '''SDA对应40pin'''
| style="text-align: left;"| '''SCL对应40pin'''
| style="text-align: left;"| '''dtbo对应配置'''
|-
| style="text-align: left;"| '''I2C1'''
| style="text-align: left;"| '''12号引脚'''
| style="text-align: left;"| '''7号引脚'''
| style="text-align: left;"| '''sun55i-t527-i2c1'''
|-
| style="text-align: left;"| '''I2C4'''
| style="text-align: left;"| '''3号引脚'''
| style="text-align: left;"| '''5号引脚'''
| style="text-align: left;"| '''sun55i-t527-i2c4'''
|-
| style="text-align: left;"| '''I2C5'''
| style="text-align: left;"| '''27号引脚'''
| style="text-align: left;"| '''28号引脚'''
| style="text-align: left;"| '''sun55i-t527-i2c5'''
|}
'''在Linux系统中,40pin中的i2c功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开i2c1、i2c4和i2c5,注意同时打开多个配置时,下面红色字体内容需要使用空格隔开写在一行。'''
'''orangepi@orangepi4a:~$ sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS''' '''/boot/dtb/allwinner/overlay/sun55i-t527-i2c1.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-i2c4.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-i2c5.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>启动linux系统后,先确认下/dev下存在i2c的设备节点</p>
<p>orangepi@orangepi:~$ '''ls /dev/i2c-*'''</p>
<p>'''/dev/i2c-0 /dev/i2c-1 /dev/i2c-3 /dev/i2c-31 /dev/i2c-4 /dev/i2c-5 /dev/i2c-6'''</p></li>
<li><p>然后开始测试i2c,首先安装i2c-tools</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y i2c-tools'''</p></li>
<li><p>然后在40 pin接头的i2c引脚上接一个i2c设备</p>
<p>'''5V和3.3V引脚请根据具体的i2c设备进行选择,不同的i2c设备需要的电压值可能不同。'''</p></li>
<li><p>然后使用'''i2cdetect -y'''命令如果能检测到连接的i2c设备的地址,就说明i2c能正常使用</p>
<p>orangepi@orangepi:~$ '''sudo i2cdetect -y 1''' #i2c1的命令</p>
<p>orangepi@orangepi:~$ '''sudo i2cdetect -y 4''' #i2c4的命令</p>
<p>orangepi@orangepi:~$ '''sudo i2cdetect -y 5''' #i2c5的命令</p></li></ol>
[[File:Orange_Pi_4A-image162.png|342x125px]]
<span id="pin的uart测试"></span>
=== 40 pin的UART测试 ===
<ol style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 4A可用的uart为uart2、uart3、uart4、uart5、uart6和uart7共六组uart总线</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>六组UART总线在40 pin中对应的引脚如下表所示。</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| '''UART总线'''
| style="text-align: left;"| '''RX对应40pin'''
| style="text-align: left;"| '''TX对应40pin'''
| style="text-align: left;"| '''dtbo对应配置'''
|-
| style="text-align: left;"| '''UART2'''
| style="text-align: left;"| '''13号引脚'''
| style="text-align: left;"| '''11号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart2'''
|-
| style="text-align: left;"| '''UART3'''
| style="text-align: left;"| '''33号引脚'''
| style="text-align: left;"| '''32号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart3'''
|-
| style="text-align: left;"| '''UART4'''
| style="text-align: left;"| '''5号引脚'''
| style="text-align: left;"| '''3号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart4'''
|-
| style="text-align: left;"| '''UART5'''
| style="text-align: left;"| '''23号引脚'''
| style="text-align: left;"| '''24号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart5'''
|-
| style="text-align: left;"| '''UART6'''
| style="text-align: left;"| '''26号引脚'''
| style="text-align: left;"| '''22号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart6'''
|-
| style="text-align: left;"| '''UART7'''
| style="text-align: left;"| '''10号引脚'''
| style="text-align: left;"| '''8号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart7'''
|}
'''在Linux系统中,40pin中的uart功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开uart2、uart3、uart4、uart5、uart6和uart7,注意同时打开多个配置时,下面红色字体内容需要使用空格隔开写在一行。'''
'''orangepi@orangepi4a:~$ sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-uart2.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart3.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart4.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart5.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart6.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart7.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>进入linux系统后,先确认下'''/dev'''下是否存在uart的设备节点</p>
<p>orangepi@orangepi:~$ '''ls /dev/ttyAS*'''</p>
<p>/dev/ttyAS0 /dev/ttyAS1 /dev/ttyAS2 /dev/ttyAS3 /dev/ttyAS4 /dev/ttyAS5 /dev/ttyAS6 /dev/ttyAS7</p></li>
<li><p>然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx</p></li>
<li><p>使用'''gpio serial'''命令测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常(ttyASX需要替换为对应uart的节点名,请不要照抄)</p>
<p>orangepi@orangepi:~$ '''gpio serial /dev/ttyASX'''</p>
<p>Out: 0: -> 0</p>
<p>Out: 1: -> 1</p>
<p>Out: 2: -> 2</p>
<p>Out: 3: -> 3^C</p></li></ol>
<span id="使用sysclasspwm测试pwm的方法"></span>
=== 使用'''/sys/class/pwm/测试'''PWM的方法 ===
<ol style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 4A可用的pwm有pwm1、pwm2、pwm4、pwm5、pwm6、pwm7、pwm8、pwm9、pwm10、pwm11、pwm12、pwm13、pwm14和pwm15共14路PWM</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>PWM在40pin中对应的引脚如下表所示。</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| '''PWM总线'''
| style="text-align: left;"| '''对应40pin'''
| style="text-align: left;"| '''dtbo对应配置'''
|-
| style="text-align: left;"| '''PWM0-1'''
| style="text-align: left;"| '''5号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm1'''
|-
| style="text-align: left;"| '''PWM0-2'''
| style="text-align: left;"| '''31号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm2'''
|-
| style="text-align: left;"| '''PWM0-4'''
| style="text-align: left;"| '''8号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm4'''
|-
| style="text-align: left;"| '''PWM0-5'''
| style="text-align: left;"| '''10号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm5'''
|-
| style="text-align: left;"| '''PWM0-6'''
| style="text-align: left;"| '''11号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm6'''
|-
| style="text-align: left;"| '''PWM0-7'''
| style="text-align: left;"| '''13号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm7'''
|-
| style="text-align: left;"| '''PWM0-8'''
| style="text-align: left;"| '''7号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm8'''
|-
| style="text-align: left;"| '''PWM0-9'''
| style="text-align: left;"| '''12号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm9'''
|-
| style="text-align: left;"| '''PWM0-10'''
| style="text-align: left;"| '''35号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm10'''
|-
| style="text-align: left;"| '''PWM0-11'''
| style="text-align: left;"| '''38号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm11'''
|-
| style="text-align: left;"| '''PWM0-12'''
| style="text-align: left;"| '''32号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm12'''
|-
| style="text-align: left;"| '''PWM0-13'''
| style="text-align: left;"| '''33号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm13'''
|-
| style="text-align: left;"| '''PWM0-14'''
| style="text-align: left;"| '''16号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm14'''
|-
| style="text-align: left;"| '''PWM0-15'''
| style="text-align: left;"| '''18号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm15'''
|}
'''在Linux系统中,40pin中的pwm功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开pwm1、pwm2、pwm4、pwm5、pwm6、pwm7、pwm8、pwm9、pwm10、pwm11、pwm12、pwm13、pwm14和pwm15,如果只需要打开一个,那么就填写一个即可。'''
'''orangepi@orangepi4a:~$ sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-pwm1.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm2.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm4.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm5.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm6.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm7.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm8.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm9.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm10.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm11.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm12.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm13.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm14.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm15.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>重启后就可以开始PWM的测试</p>
<p>'''下面的命令请在root用户下执行。'''</p>
<ol style="list-style-type: lower-alpha;">
<li><p>在命令行中输入下面的命令可以让pwm1输出一个50Hz的方波</p>
<p>root@orangepi:~# '''echo 1 > /sys/class/pwm/pwmchip0/export'''</p>
<p>root@orangepi:~# '''echo 20000000 > /sys/class/pwm/pwmchip0/pwm1/period'''</p>
<p>root@orangepi:~# '''echo 1000000 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle'''</p>
<p>root@orangepi:~# '''echo 1 > /sys/class/pwm/pwmchip0/pwm1/enable'''</p></li>
<li><p>在命令行中输入下面的命令可以让pwm2输出一个50Hz的方波</p></li></ol>
</li></ol>
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'''
<ol start="3" style="list-style-type: lower-alpha;">
<li>在命令行中输入下面的命令可以让pwm4输出一个50Hz的方波</li></ol>
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'''
<ol start="4" style="list-style-type: lower-alpha;">
<li><p>其它的pwm的测试方法都是类似的,这里不再赘述</p>
<div class="figure">
[[File:Orange_Pi_4A-image163.jpeg|574x344px|69D96433378187B10005CDD2A52881B0]]
</div></li></ol>
<span id="wiringop-python的安装使用方法"></span>
== wiringOP-Python的安装使用方法 ==
'''wiringOP-Python是wiringOP的Python语言版本的库,用于在Python程序中操作开发板的GPIO、I2C、SPI和UART等硬件资源。'''
'''另外请注意下面所有的命令都是在root用户下操作的。'''
<span id="wiringop-python的安装方法"></span>
=== wiringOP-Python的安装方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先安装依赖包</p>
<p>root@orangepi:~# '''sudo apt-get update'''</p>
<p>root@orangepi:~# '''sudo apt-get -y install git swig python3-dev python3-setuptools'''</p></li>
<li><p>然后使用下面的命令下载wiringOP-Python的源码</p></li></ol>
'''注意,下面的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'''
<ol start="3" style="list-style-type: decimal;">
<li><p>然后使用下面的命令编译wiringOP-Python并将其安装到开发板的Linux系统中</p>
<p>root@orangepi:~# '''cd wiringOP-Python'''</p>
<p>root@orangepi:~/wiringOP-Python# '''python3 generate-bindings.py > bindings.i'''</p>
<p>root@orangepi:~/wiringOP-Python# '''sudo python3 setup.py install'''</p></li>
<li><p>然后输入下面的命令,如果有帮助信息输出,说明wiringOP-Python安装成功,按下'''q'''键可以退出帮助信息的界面</p></li></ol>
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.
<ol start="5" style="list-style-type: decimal;">
<li><p>在python命令行下测试wiringOP-Python是否安装成功的步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li>首先使用python3命令进入python3的命令行模式</li></ol>
</li></ol>
root@orangepi:~# '''python3'''
<ol start="2" style="list-style-type: lower-alpha;">
<li>然后导入wiringpi的python模块</li></ol>
>>> '''import wiringpi;'''
<ol start="3" style="list-style-type: lower-alpha;">
<li>最后输入下面的命令可以查看下wiringOP-Python的帮助信息,按下'''q'''键可以退出帮助信息的界面</li></ol>
>>> '''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)
|
>>>
<span id="pin-gpio口测试-1"></span>
=== 40 pin GPIO口测试 ===
'''wiringOP-Python跟wiringOP一样,也是可以通过指定wPi号来确定操作哪一个GPIO引脚,因为wiringOP-Python中没有查看wPi号的命令,所以只能通过wiringOP中的gpio命令来查看板子wPi号与物理引脚的对应关系。'''
[[File:Orange_Pi_4A-image158.png|575x354px]]
<ol style="list-style-type: decimal;">
<li><p>下面以7号引脚——对应GPIO为PB4 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p>
<p>[[File:Orange_Pi_4A-image159.png|575x119px]]</p></li>
<li><p>直接用命令测试的步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先设置GPIO口为输出模式,其中'''pinMode'''函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式</p>
<p>root@orangepi:~/wiringOP-Python# '''python3 -c "import wiringpi; \'''</p>
<p>'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ; \'''</p>
<p>'''wiringpi.pinMode(2, GPIO.OUTPUT) ; "'''</p></li>
<li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p>
<p>root@orangepi:~/wiringOP-Python# '''python3 -c "import wiringpi; \'''</p>
<p>'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''</p>
<p>'''wiringpi.digitalWrite(2, GPIO.LOW)"'''</p></li>
<li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>
<p>root@orangepi:~/wiringOP-Python# '''python3 -c "import wiringpi; \'''</p>
<p>'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''</p>
<p>'''wiringpi.digitalWrite(2, GPIO.HIGH)"'''</p></li></ol>
</li>
<li><p>在python3的命令行中测试的步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先使用python3命令进入python3的命令行模式</p>
<p>root@orangepi:~# '''python3'''</p></li>
<li><p>然后导入wiringpi的python模块</p>
<p>>>> '''import wiringpi'''</p>
<p>>>> '''from wiringpi import GPIO'''</p></li>
<li><p>然后设置GPIO口为输出模式,其中'''pinMode'''函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式</p>
<p>>>> '''wiringpi.wiringPiSetup()'''</p>
<p>0</p>
<p>>>> '''wiringpi.pinMode(2, GPIO.OUTPUT)'''</p></li>
<li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p>
<p>>>> '''wiringpi.digitalWrite(2, GPIO.LOW)'''</p></li>
<li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>
<p>>>> '''wiringpi.digitalWrite(2, GPIO.HIGH)'''</p></li></ol>
</li>
<li><p>wiringOP-Python在python代码中设置GPIO高低电平的方法可以参考下examples中的'''blink.py'''测试程序,'''blink.py'''测试程序会设置开发板40 pin中所有的GPIO口的电压不断的高低变化</p>
<p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p>
<p>root@orangepi:~/wiringOP-Python/examples# '''ls blink.py'''</p>
<p>'''blink.py'''</p>
<p>root@orangepi:~/wiringOP-Python/examples'''# python3 blink.py'''</p></li></ol>
<span id="pin-spi测试-1"></span>
=== 40 pin SPI测试 ===
<ol style="list-style-type: decimal;">
<li><p>由下图可知,Orange Pi 4A可用的SPI为SPI1和SPI2。</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>SPI1和SPI2在40pin对应的引脚如下表所示</p></li></ol>
{| class="wikitable"
|-
|
| style="text-align: left;"| '''SPI1对应40pin'''
| style="text-align: left;"| '''SPI2对应40pin'''
|-
| '''MOSI'''
| style="text-align: left;"| '''19号引脚'''
| style="text-align: left;"| '''15号引脚'''
|-
| '''MISO'''
| style="text-align: left;"| '''21号引脚'''
| style="text-align: left;"| '''29号引脚'''
|-
| '''CLK'''
| style="text-align: left;"| '''23号引脚'''
| style="text-align: left;"| '''13号引脚'''
|-
| '''CS0'''
| style="text-align: left;"| '''24号引脚'''
| style="text-align: left;"| '''11号引脚'''
|}
'''在Linux系统中,40pin中的spi功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开spi1和spi2,注意同时打开多个配置时,下面红色字体内容需要使用空格隔开写在一行。'''
'''orangepi@orangepi4a:~$ sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-spi1-cs0-spidev.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-spi2-cs0-spidev.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>然后查看下linux系统中是否存在'''spidevx.x'''的设备节点,如果存在,说明SPI的配置已经生效了</p>
<p>orangepi@orangepi:~$ '''ls /dev/spidev*'''</p>
<p>/dev/spidev1.0 /dev/spidev2.0</p></li>
<li><p>然后可以使用examples中的'''spidev_test.py'''程序测试下SPI的回环功能,'''spidev_test.py'''程序需要指定下面的两个参数:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''--channel''':指定SPI的通道号</p></li>
<li><p>'''--port''':指定SPI的端口号</p></li></ol>
</li>
<li><p>先不短接 SPI 的 mosi 和 miso 两个引脚,运行spidev_test.py的输出结果如下所示,可以看到 TX 和 RX 的数据不一致</p>
<p>'''--channel和--port参数后面的x需要替换为具体SPI的通道号和SPI的端口号。'''</p>
<p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p></li></ol>
root@orangepi:~/wiringOP-Python/examples# '''python3 spidev_test.py \'''
'''--channel x --port x'''
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 |.............….|
<ol start="6" style="list-style-type: decimal;">
<li><p>然后使用杜邦线短接SPI的txd和rxd两个引脚再运行spidev_test.py的输出如下,可以看到发送和接收的数据一样,说明SPI回环测试正常</p>
<p>'''--channel和--port参数后面的x需要替换为具体SPI的通道号和SPI的端口号。'''</p>
<p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p></li></ol>
root@orangepi:~/wiringOP-Python/examples# '''python3 spidev_test.py \'''
'''--channel x --port x'''
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 |......@.......…|
<span id="pin-i2c测试-1"></span>
=== 40 pin I2C测试 ===
<ol style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 4A可用的i2c为i2c1、i2c4和i2c5共三组i2c总线</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>三组I2C总线在40pin中对应的引脚如下表所示。</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| '''I2C总线'''
| style="text-align: left;"| '''SDA对应40pin'''
| style="text-align: left;"| '''SCL对应40pin'''
| style="text-align: left;"| '''dtbo对应配置'''
|-
| style="text-align: left;"| '''I2C1'''
| style="text-align: left;"| '''12号引脚'''
| style="text-align: left;"| '''7号引脚'''
| style="text-align: left;"| '''sun55i-t527-i2c1'''
|-
| style="text-align: left;"| '''I2C4'''
| style="text-align: left;"| '''3号引脚'''
| style="text-align: left;"| '''5号引脚'''
| style="text-align: left;"| '''sun55i-t527-i2c4'''
|-
| style="text-align: left;"| '''I2C5'''
| style="text-align: left;"| '''27号引脚'''
| style="text-align: left;"| '''28号引脚'''
| style="text-align: left;"| '''sun55i-t527-i2c5'''
|}
'''在Linux系统中,40pin中的i2c功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开i2c1、i2c4和i2c5,注意同时打开多个配置时,下面红色字体内容需要使用空格隔开写在一行。'''
'''orangepi@orangepi4a:~$ sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-i2c1.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-i2c4.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-i2c5.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>启动linux系统后,先确认下/dev下存在i2c的设备节点</p>
<p>orangepi@orangepi:~$ '''ls /dev/i2c-*'''</p>
<p>'''/dev/i2c-0 /dev/i2c-1 /dev/i2c-3 /dev/i2c-31 /dev/i2c-4 /dev/i2c-5 /dev/i2c-6'''</p></li>
<li><p>然后开始测试i2c,首先安装下i2c-tools</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo''' '''apt-get install -y i2c-tools'''</p></li>
<li><p>然后在40 pin接头的i2c引脚上接一个i2c设备,这里以DS1307 RTC模块为例</p>
<p>[[File:Orange_Pi_4A-image164.png|180x153px]]</p></li>
<li><p>然后使用'''i2cdetect -y'''命令如果能检测到连接的i2c设备的地址,就说明i2c设备连接正确</p>
<p>orangepi@orangepi:~$ '''sudo i2cdetect -y 1''' #i2c1的命令</p>
<p>orangepi@orangepi:~$ '''sudo i2cdetect -y 4''' #i2c4的命令</p>
<p>orangepi@orangepi:~$ '''sudo i2cdetect -y 5''' #i2c5的命令</p></li></ol>
[[File:Orange_Pi_4A-image162.png|342x125px]]
<ol start="7" style="list-style-type: decimal;">
<li><p>然后可以运行'''examples'''中的'''ds1307.py'''测试程序读取RTC的时间</p>
<p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p>
<p>root@orangepi:~/wiringOP-Python/examples# '''python3 ds1307.py --device \'''</p>
<p>'''"/dev/i2c-1"'''</p>
<p>Thu 2022-06-16 04:35:46</p>
<p>Thu 2022-06-16 04:35:47</p>
<p>Thu 2022-06-16 04:35:48</p>
<p>^C</p>
<p>exit</p></li></ol>
<span id="pin的uart测试-1"></span>
=== 40 pin的UART测试 ===
<ol style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 4A可用的uart为uart2、uart3、uart4、uart5、uart6和uart7共六组uart总线</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>六组UART总线在40 pin中对应的引脚如下表所示。</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| '''UART总线'''
| style="text-align: left;"| '''RX对应40pin'''
| style="text-align: left;"| '''TX对应40pin'''
| style="text-align: left;"| '''dtbo对应配置'''
|-
| style="text-align: left;"| '''UART2'''
| style="text-align: left;"| '''13号引脚'''
| style="text-align: left;"| '''11号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart2'''
|-
| style="text-align: left;"| '''UART3'''
| style="text-align: left;"| '''33号引脚'''
| style="text-align: left;"| '''32号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart3'''
|-
| style="text-align: left;"| '''UART4'''
| style="text-align: left;"| '''5号引脚'''
| style="text-align: left;"| '''3号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart4'''
|-
| style="text-align: left;"| '''UART5'''
| style="text-align: left;"| '''23号引脚'''
| style="text-align: left;"| '''24号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart5'''
|-
| style="text-align: left;"| '''UART6'''
| style="text-align: left;"| '''26号引脚'''
| style="text-align: left;"| '''22号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart6'''
|-
| style="text-align: left;"| '''UART7'''
| style="text-align: left;"| '''10号引脚'''
| style="text-align: left;"| '''8号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart7'''
|}
'''在Linux系统中,40pin中的uart功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开uart2、uart3、uart4、uart5、uart6和uart7,注意同时打开多个配置时,下面红色字体内容需要使用空格隔开写在一行。'''
'''orangepi@orangepi4a:~$ sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-uart2.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart3.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart4.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart5.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart6.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart7.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>进入linux系统后,先确认下'''/dev'''下是否存在uart的设备节点</p>
<p>orangepi@orangepi:~$ '''ls /dev/ttyAS*'''</p>
<p>/dev/ttyAS0 /dev/ttyAS1 /dev/ttyAS2 /dev/ttyAS3 /dev/ttyAS4 /dev/ttyAS5 /dev/ttyAS6 /dev/ttyAS7</p></li>
<li><p>然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx</p></li>
<li><p>最后可以运行examples中的'''serialTest.py'''程序来测试下串口的回环功能,如果能看到下面的打印,说明串口回环测试正常(ttyASX需要替换为对应uart的节点名,请不要照抄)</p>
<p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p>
<p>root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device /dev/ttyASX'''</p>
<p>Out: 0: -> 0</p>
<p>Out: 1: -> 1</p>
<p>Out: 2: -> 2</p>
<p>Out: 3: -> 3</p>
<p>Out: 4:^C</p>
<p>exit</p></li></ol>
== 硬件看门狗测试 ==
Orange Pi发布的linux系统中预装了watchdog_test程序,可以直接测试。
运行watchdog_test程序的方法如下所示:
<ol style="list-style-type: lower-alpha;">
<li><p>第二个参数10表示看门狗的计数时间,如果这个时间内没有喂狗,系统会重启</p></li>
<li><p>我们可以通过按下键盘上的任意键(ESC除外)来喂狗,喂狗后,程序会打印一行keep alive表示喂狗成功</p>
<p>orangepi@orangepi:~$ '''sudo watchdog_test 10'''</p>
<p>open success</p>
<p>options is 33152,identity is sunxi-wdt</p>
<p>put_usr return,if 0,success:0</p>
<p>The old reset time is: 16</p>
<p>return ENOTTY,if -1,success:0</p>
<p>return ENOTTY,if -1,success:0</p>
<p>put_user return,if 0,success:0</p>
<p>put_usr return,if 0,success:0</p>
<p>keep alive</p>
<p>keep alive</p>
<p>keep alive</p></li></ol>
<span id="查看t527芯片的chipid"></span>
== 查看T527芯片的chipid ==
查看T527芯片chipid的命令如下所示,每个芯片的chipid都是不同的,所以可以使用chipid来区分多个开发板。
orangepi@orangepi:~# '''cat /sys/class/sunxi_info/sys_info |grep sunxi_serial'''
sunxi_serial : 208d211475779d0c0000019000000000
<span id="python相关说明"></span>
== Python相关说明 ==
<span id="python源码编译安装的方法"></span>
=== Python源码编译安装的方法 ===
'''如果使用的Ubuntu或者Debian系统软件仓库中的Python版本不符合开发的要求,想要使用最新版本的Python,可以使用下面的方法下载Python的源码包来编译安装最新版本的Python。'''
'''下面演示的是编译安装Python3.9的最新版本,如果要编译安装其他的版本的Python,方法也是一样的(需要下载想要安装的Python对应的源码)。'''
<ol style="list-style-type: decimal;">
<li><p>首先安装编译Python需要的依赖包</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y build-essential zlib1g-dev \'''</p>
<p>'''libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev \'''</p>
<p>'''libreadline-dev libffi-dev curl libbz2-dev'''</p></li>
<li><p>然后下载最新版本的Python3.9源码并解压</p>
<p>orangepi@orangepi:~$ '''wget \'''</p>
<p>[https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz '''https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz''']</p>
<p>orangepi@orangepi:~$ '''tar xvf Python-3.9.10.tgz'''</p></li>
<li><p>然后运行配置命令</p>
<p>orangepi@orangepi:~$ '''cd Python-3.9.10'''</p>
<p>orangepi@orangepi:~/Python-3.9.10$ '''./configure --enable-optimizations'''</p></li>
<li><p>然后编译安装Python3.9,编译时间大概需要半个小时左右</p>
<p>orangepi@orangepi:~/Python-3.9.10$ '''make -j4'''</p>
<p>orangepi@orangepi:~/Python-3.9.10$ '''sudo make altinstall'''</p></li>
<li><p>安装完后可以使用下面的命令查看下刚安装的Python的版本号</p>
<p>orangepi@orangepi:~/Python-3.9.10$ '''python3.9 --version'''</p>
<p>'''Python 3.9.10'''</p></li>
<li><p>然后更新下pip</p>
<p>orangepi@orangepi:~$ '''/usr/local/bin/python3.9 -m pip install --upgrade pip'''</p></li></ol>
<span id="python更换pip源的方法"></span>
=== Python更换pip源的方法 ===
'''Linux系统pip默认使用的源为Python官方的源,但是国内访问Python官方的源速度是很慢的,并且经常会由于网络原因导致Python软件包安装失败。所以在使用pip安装Python库时,请记得更换下pip源。'''
<ol style="list-style-type: decimal;">
<li><p>首先安装下'''python3-pip'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y python3-pip'''</p></li>
<li><p>Linux下永久更换pip源的方法</p>
<ol style="list-style-type: lower-alpha;">
<li><p>先新建'''~/.pip'''目录,然后添加'''pip.conf'''配置文件,并在其中设置pip的源为清华源</p>
<p>orangepi@orangepi:~$ '''mkdir -p ~/.pip'''</p>
<p>orangepi@orangepi:~$ '''cat <<EOF > ~/.pip/pip.conf'''</p>
<p>'''[global]'''</p>
<p>'''timeout = 6000'''</p>
<p>'''index-url = https://pypi.tuna.tsinghua.edu.cn/simple'''</p>
<p>'''trusted-host = pypi.tuna.tsinghua.edu.cn'''</p>
<p>'''EOF'''</p></li>
<li><p>然后使用pip3安装Python库速度就会很快了</p></li></ol>
</li>
<li><p>Linux下临时更换pip源的方法,其中的'''<packagename>'''需要替换为具体的包名</p>
<p>orangepi@orangepi:~$ '''pip3 install <packagename> -i \'''</p>
<p>'''https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn'''</p></li></ol>
<span id="安装docker的方法"></span>
== 安装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.'''
'''.….'''
<blockquote></blockquote>
使用docker命令时,如果提示'''permission denied''',请将当前用户加入到docker用户组,这样不需要sudo就能运行docker命令了。
orangepi@orangepi:~$ '''sudo usermod -aG docker $USER'''
'''注意:需要退出重新登录系统才能生效,重启系统也可以。'''
<span id="home-assistant的安装方法"></span>
== Home Assistant的安装方法 ==
'''注意,这里只会提供在Ubuntu或者Debian系统中安装Home Assistant的方法,Home Assistant详细的使用方法请参考官方文档或者相应的书籍。'''
=== 通过docker安装 ===
<ol style="list-style-type: decimal;">
<li><p>首先请安装好docker,并确保docker能正常运行。docker的安装步骤请参考[[#安装docker的方法|'''安装Docker的方法''']]一节的说明。</p></li>
<li><p>然后可以搜索下Home Assistant的docker镜像</p>
<p>orangepi@orangepi:~$ '''docker search homeassistant'''</p></li>
<li><p>然后使用下面的命令下载Home Assistant的docker镜像到本地,镜像大小大概有1GB多,下载时间会比较长,请耐心等待下载完成</p>
<p>orangepi@orangepi:~$ '''docker pull homeassistant/home-assistant'''</p>
<p>Using default tag: latest</p>
<p>latest: Pulling from homeassistant/home-assistant</p>
<p>be307f383ecc: Downloading</p>
<p>5fbc4c07ac88: Download complete</p>
<p>'''...... (省略部分输出)'''</p>
<p>3cc6a1510c9f: Pull complete</p>
<p>7a4e4d5b979f: Pull complete</p>
<p>Digest: sha256:81d381f5008c082a37da97d8b08dd8b358dae7ecf49e62ce3ef1eeaefc4381bb</p>
<p>Status: Downloaded newer image for homeassistant/home-assistant:latest</p>
<p>docker.io/homeassistant/home-assistant:latest</p></li>
<li><p>然后可以使用下面的命令查看下刚下载的Home Assistant的docker镜像</p>
<p>orangepi@orangepi:~$ '''docker images homeassistant/home-assistant'''</p>
<p>REPOSITORY TAG IMAGE ID CREATED SIZE</p>
<p>homeassistant/home-assistant latest bfa0ab9e1cf5 2 months ago '''1.17GB'''</p></li>
<li><p>此时就可以运行Home Assistant的docker容器了</p>
<p>orangepi@orangepi:~$ '''docker run -d \'''</p>
<p>'''--name homeassistant \'''</p>
<p>'''--privileged \'''</p>
<p>'''--restart=unless-stopped \'''</p>
<p>'''-e TZ=Asia/Shanghai \'''</p>
<p>'''-v /home/orangepi/home-assistant:/config \'''</p>
<p>'''--network=host \'''</p>
<p>'''homeassistant/home-assistant:latest'''</p></li>
<li><p>然后在浏览器中输入【开发板的IP地址:8123】就能看到Home Assistant的界面</p>
<p>'''Home Assistant容器的启动需要一段时间,如果下面的界面没有正常显示,请等待几秒钟再刷新。如果等待一分钟以上还没有正常显示下面的界面说明Home Assistant安装有问题,此时需要去检查前面的安装设置过程是否有问题了。'''</p>
<p>[[File:Orange_Pi_4A-image165.png|576x209px]]</p></li>
<li><p>然后输入'''姓名、用户名'''和'''密码'''再点击'''创建账号'''</p>
<p>[[File:Orange_Pi_4A-image166.png|220x279px]]</p></li>
<li><p>然后按照界面提示根据自己的喜好设置,再点击下一步</p>
<p>[[File:Orange_Pi_4A-image167.png|575x297px]]</p></li>
<li><p>然后点击下一步</p>
<p>[[File:Orange_Pi_4A-image168.png|576x185px]]</p></li>
<li><p>然后点击完成</p>
<p>[[File:Orange_Pi_4A-image169.png|576x117px]]</p></li>
<li><p>Home Assistant最终显示的主界面如下图所示</p>
<p>[[File:Orange_Pi_4A-image170.png|574x294px]]</p></li>
<li><p>停止Home Assistant容器的方法</p>
<ol style="list-style-type: lower-alpha;">
<li><p>查看docker容器的命令如下所示</p>
<p>orangepi@orangepi:~$ '''docker ps -a'''</p></li>
<li><p>停止Home Assistant容器的命令如下所示</p>
<p>orangepi@orangepi:~$ '''docker stop homeassistant'''</p></li>
<li><p>删除Home Assistant容器的命令如下所示</p>
<p>orangepi@orangepi:~$ '''docker rm homeassistant'''</p></li></ol>
</li></ol>
=== 通过python安装 ===
'''安装前请先更换下pip的源为国内源,加快Python包的安装速度,配置方法见[[#python更换pip源的方法|Python更换pip源的方法]]一节的说明。'''
<ol style="list-style-type: decimal;">
<li><p>首先安装依赖包</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y python3 python3-dev python3-venv \'''</p>
<p>'''python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \'''</p>
<p>'''libopenjp2-7 libtiff5 libturbojpeg0-dev tzdata'''</p>
<p>'''如果是debian12请使用下面的命令:'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y python3 python3-dev python3-venv \'''</p>
<p>'''python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \'''</p>
<p>'''libopenjp2-7 libturbojpeg0-dev tzdata'''</p></li>
<li><p>然后需要编译安装Python3.9,方法请参考[[#python相关说明|'''Python源码编译安装的方法''']]一节</p>
<p>'''Ubuntu Jammy默认的Python版本就是Python3.10,所以无需编译安装。'''</p>
<p>'''Debian Bookworm默认的Python版本就是Python3.11,所以也无需编译安装。'''</p></li>
<li><p>然后创建Python虚拟环境</p>
<p>'''Debian Bookworm中是python3.11,请记得替换对应的命令。'''</p>
<p>orangepi@orangepi:~$ '''sudo mkdir /srv/homeassistant'''</p>
<p>orangepi@orangepi:~$ '''sudo chown orangepi:orangepi /srv/homeassistant'''</p>
<p>orangepi@orangepi:~$ '''cd /srv/homeassistant'''</p>
<p>orangepi@orangepi:/srv/homeassistant$ '''python3.9 -m venv .'''</p>
<p>orangepi@orangepi:/srv/homeassistant$ '''source bin/activate'''</p>
<p>(homeassistant) orangepi@orangepi:/srv/homeassistant$</p></li>
<li><p>然后安装需要的Python包</p>
<p>(homeassistant) orangepi@orangepi:/srv/homeassistant$ '''python3 -m pip install wheel'''</p></li>
<li><p>然后就可以安装Home Assistant Core</p>
<p>(homeassistant) orangepi@orangepi:/srv/homeassistant$ '''pip3 install homeassistant'''</p></li>
<li><p>然后输入下面的命令就可以运行Home Assistant Core</p>
<p>(homeassistant) orangepi@orangepi:/srv/homeassistant$ '''hass'''</p></li>
<li><p>然后在浏览器中输入【'''开发板的IP地址:8123'''】就能看到Home Assistant的界面</p>
<p>'''第一次运行hass命令时,会下载安装和缓存一些运行必须的库和依赖包。这个过程可能会花费几分钟的时间。注意,此时在浏览器中是无法看到Home Assistant的界面的,请等待一段时间后再刷新下。'''</p>
<p>[[File:Orange_Pi_4A-image171.png|576x203px]]</p></li></ol>
<span id="opencv的安装方法"></span>
== OpenCV的安装方法 ==
<span id="使用apt来安装opencv"></span>
=== 使用apt来安装OpenCV ===
<ol style="list-style-type: decimal;">
<li><p>安装命令如下所示</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y libopencv-dev python3-opencv'''</p></li>
<li><p>然后使用下面的命令打印OpenCV的版本号输出正常,说明OpenCV安装成功</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Ubuntu22.04中OpenCV的版本如下所示:</p>
<p>orangepi@orangepi:~$ '''python3 -c "import cv2; print(cv2.__version__)"'''</p>
<p>'''4.5.4'''</p></li>
<li><p>Debian12中OpenCV的版本如下所示:</p>
<p>orangepi@orangepi:~$ '''python3 -c "import cv2; print(cv2.__version__)"'''</p>
<p>'''4.6.0'''</p></li></ol>
</li></ol>
<span id="宝塔linux面板的安装方法"></span>
== 宝塔Linux面板的安装方法 ==
'''宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能(摘抄自[https://www.bt.cn/ 宝塔官网])'''
<ol style="list-style-type: decimal;">
<li><p>首先需要扩展下'''/tmp'''空间的大小,设置完后需要'''重启下开发板的linux系统''',命令如下所示:</p>
<p>orangepi@orangepi:~$ '''sudo sed -i 's/nosuid/&,size=2G/' /etc/fstab'''</p>
<p>orangepi@orangepi:~$ '''sudo reboot'''</p></li>
<li><p>重启后,可以看到'''/tmp'''空间的大小变为2G了</p>
<p>orangepi@orangepi:~$ '''df -h | grep "/tmp"'''</p>
<p>tmpfs 2.0G 12K '''2.0G''' 1% /tmp</p></li>
<li><p>然后在linux系统中输入下面的命令就可以开始宝塔的安装</p>
<p>orangepi@orangepi:~$ '''sudo install_bt_panel.sh'''</p></li>
<li><p>然后宝塔安装程序会提醒是否安装'''Bt-Panel'''到'''/www'''文件夹,此时输入'''y'''即可</p>
<p>+----------------------------------------------------------------------</p>
<p>| Bt-WebPanel FOR CentOS/Ubuntu/Debian</p>
<p>+----------------------------------------------------------------------</p>
<p>| Copyright © 2015-2099 BT-SOFT(http://www.bt.cn) All rights reserved.</p>
<p>+----------------------------------------------------------------------</p>
<p>| The WebPanel URL will be http://SERVER_IP:8888 when installed.</p>
<p>+----------------------------------------------------------------------</p>
<p>Do you want to install Bt-Panel to the /www directory now?(y/n): '''y'''</p></li>
<li><p>然后要做的就是耐心等待,当看到终端输出下面的打印信息时,说明宝塔已经安装完成,整个安装过程大约耗时34分钟,根据网络速度的不同可能会有一些差别</p>
<p>[[File:Orange_Pi_4A-image172.png|576x233px]]</p></li>
<li><p>此时在浏览器中输入上面显示的'''面板地址'''就可以打开宝塔Linux面板的登录界面,然后在对应的位置输入上图显示的'''username'''和'''password'''就可以登录进宝塔</p>
<p>[[File:Orange_Pi_4A-image173.png|575x281px]]</p></li>
<li><p>成功登录宝塔后的会弹出下面的欢迎界面,首先请将中间的用户须知阅读完拖到最下面,然后就可以选择”我已同意并阅读《用户协议》“,接着点击”进入面板”就可以进入宝塔了</p>
<p>[[File:Orange_Pi_4A-image174.png|575x317px]]</p></li>
<li><p>进入宝塔后首先会提示需要绑定宝塔官网的账号,如果没有账号可以去宝塔的官网('''https://www.bt.cn''')注册一个</p>
<p>[[File:Orange_Pi_4A-image175.png|576x300px]]</p></li>
<li><p>最终显示的界面如下图所示,可以很直观的看到开发板Linux系统的一些状态信息,比如负载状态、CPU的使用率、内存使用率和存储空间的使用情况等</p>
<p>[[File:Orange_Pi_4A-image176.png|575x306px]]</p></li>
<li><p>宝塔的更多功能可以参考下面资料自行探索</p>
<p>使用手册:[http://docs.bt.cn '''http://docs.bt.cn''']</p>
<p>论坛地址:[https://www.bt.cn/bbs '''https://www.bt.cn/bbs''']</p>
<p>GitHub链接:'''https://github.com/aaPanel/BaoTa'''</p></li></ol>
<span id="qt的安装方法"></span>
== QT的安装方法 ==
<ol style="list-style-type: decimal;">
<li><p>使用下面的脚本可以安装QT5和QT Creator</p>
<p>orangepi@orangepi:~$ '''install_qt.sh'''</p></li>
<li><p>安装完后会自动打印QT的版本号</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Ubuntu22.04自带的QT版本为'''5.15.3'''</p>
<p>orangepi@orangepi:~$ '''install_qt.sh'''</p>
<p>......</p>
<p>QMake version 3.1</p>
<p>Using Qt version '''5.15.3''' in /usr/lib/aarch64-linux-gnu</p></li>
<li><p>Debian12自带的QT版本为'''5.15.8'''</p>
<p>orangepi@orangepi:~$ '''install_qt.sh'''</p>
<p>......</p>
<p>QMake version 3.1</p>
<p>Using Qt version '''5.15.8''' in /usr/lib/aarch64-linux-gnu</p></li></ol>
</li>
<li><p>然后在'''Applications'''列表中就可以看到QT Creator的启动图标</p>
<p>[[File:Orange_Pi_4A-image177.png|575x323px]]</p>
<p>也可以使用下面的命令打开QT Creator</p>
<p>orangepi@orangepi:~$ '''qtcreator'''</p></li>
<li><p>QT Creator打开后的界面如下所示</p>
<div class="figure">
[[File:Orange_Pi_4A-image178.png|576x324px|Screenshot from 2024-09-27 06-29-42]]
</div></li>
<li><p>QT Creator的版本如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>QT Creator在'''Ubuntu22.04'''中的默认版本如下所示</p>
<p>[[File:Orange_Pi_4A-image179.png|426x232px]]</p></li>
<li><p>QT Creator在'''Debian12'''中的默认版本如下所示</p>
<p>[[File:Orange_Pi_4A-image180.png|449x277px]]</p></li></ol>
</li>
<li><p>然后设置下QT</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先打开'''Help'''->'''About Plugins...'''</p>
<p>[[File:Orange_Pi_4A-image181.png|576x163px]]</p></li>
<li><p>然后去掉'''ClangCodeModel'''的那个勾</p>
<p>[[File:Orange_Pi_4A-image182.png|380x256px]]</p></li>
<li><p>'''设置完后需要重启下QT Creator'''</p></li>
<li><p>然后确保QT Creator使用的GCC编译器,如果默认为Clang,请修改为GCC</p>
<p>'''Debian12请跳过这步。'''</p>
<p>[[File:Orange_Pi_4A-image183.png|576x328px]]</p>
<p>[[File:Orange_Pi_4A-image184.png|575x325px]]</p></li></ol>
</li>
<li><p>然后就可以打开一个示例代码</p>
<p>[[File:Orange_Pi_4A-image185.png|576x326px]]</p></li>
<li><p>点击示例代码后会自动打开对应的说明文档,可以仔细看下其中的使用说明</p>
<p>[[File:Orange_Pi_4A-image186.png|575x238px]]</p></li>
<li><p>然后点击下'''Configure Project'''</p>
<p>[[File:Orange_Pi_4A-image187.png|549x308px]]</p></li>
<li><p>然后点击左下角的绿色三角形编译运行下示例代码</p>
<p>[[File:Orange_Pi_4A-image188.png|546x292px]]</p></li>
<li><p>等待一段时间后,会弹出下图所示的界面,此时就说明QT能正常编译运行</p>
<p>[[File:Orange_Pi_4A-image189.png|575x336px]]</p></li>
<li><p>参考资料</p>
<p>[https://wiki.qt.io/Install_Qt_5_on_Ubuntu '''https://wiki.qt.io/Install_Qt_5_on_Ubuntu''']</p>
<p>[https://download.qt.io/archive/qtcreator '''https://download.qt.io/archive/qtcreator''']</p>
<p>[https://download.qt.io/archive/qt '''https://download.qt.io/archive/qt''']</p></li></ol>
<span id="ros安装方法"></span>
== ROS安装方法 ==
<span id="ubuntu22.04安装ros-2-humble的方法"></span>
=== Ubuntu22.04安装ROS 2 Humble的方法 ===
<ol style="list-style-type: decimal;">
<li><p>使用'''install_ros.sh'''脚本可以安装ros2</p>
<p>orangepi@orangepi:~$ '''install_ros.sh ros2'''</p></li>
<li><p>'''install_ros.sh'''脚本安装完ros2后会自动运行下'''ros2 -h'''命令,如果能看到下面的打印,说明ros2安装完成</p>
<p>usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...</p>
<p>ros2 is an extensible command-line tool for ROS 2.</p>
<p>optional arguments:</p>
<p>-h, --help show this help message and exit</p>
<p>Commands:</p>
<p>action Various action related sub-commands</p>
<p>bag Various rosbag related sub-commands</p>
<p>component Various component related sub-commands</p>
<p>daemon Various daemon related sub-commands</p>
<p>doctor Check ROS setup and other potential issues</p>
<p>interface Show information about ROS interfaces</p>
<p>launch Run a launch file</p>
<p>lifecycle Various lifecycle related sub-commands</p>
<p>multicast Various multicast related sub-commands</p>
<p>node Various node related sub-commands</p>
<p>param Various param related sub-commands</p>
<p>pkg Various package related sub-commands</p>
<p>run Run a package specific executable</p>
<p>security Various security related sub-commands</p>
<p>service Various service related sub-commands</p>
<p>topic Various topic related sub-commands</p>
<p>wtf Use `wtf` as alias to `doctor`</p>
<p>Call `ros2 <command> -h` for more detailed usage.</p></li>
<li><p>然后可以使用 '''test_ros.sh'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行</p>
<p>orangepi@orangepi:~$ '''test_ros.sh'''</p>
<p>[INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1'</p>
<p>[INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]</p>
<p>[INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2'</p>
<p>[INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]</p>
<p>[INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'</p>
<p>[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]</p></li>
<li><p>运行下面的命令可以打开rviz2</p>
<p>orangepi@orangepi:~$ '''source /opt/ros/humble/setup.bash'''</p>
<p>orangepi@orangepi:~$ '''ros2 run rviz2 rviz2'''</p>
<div class="figure">
[[File:Orange_Pi_4A-image190.png|576x324px|Screenshot from 2024-09-27 06-18-57]]
</div></li>
<li><p>参考文档</p>
<p>'''http://docs.ros.org/en/humble/index.html'''</p>
<p>[http://docs.ros.org/en/galactic/Tutorials.html '''http://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html''']</p></li></ol>
== 安装内核头文件的方法 ==
<ol style="list-style-type: decimal;">
<li><p>OPi发布的Linux镜像默认自带了内核头文件的deb包,存放的位置为'''/opt/'''</p>
<p>orangepi@orangepi:~$ '''ls /opt/linux-headers*'''</p>
<p>/opt/linux-headers-xxx-sun55iw3_x.x.x_arm64.deb</p></li>
<li><p>使用下面的命令可以安装内核头文件的deb包</p>
<p>orangepi@orangepi:~$ '''sudo dpkg -i /opt/linux-headers*.deb'''</p></li>
<li><p>安装完后在'''/usr/src'''下就能看到内核头文件所在的文件夹</p>
<p>orangepi@orangepi:~$ '''ls /usr/src'''</p>
<p>linux-headers-x.x.x</p></li>
<li><p>然后可以编译下Linux镜像中自带的hello内核模块的源码,hello模块的源码在'''/usr/src/hello'''中,进入此目录后,然后使用make命令编译即可。</p>
<p>orangepi@orangepi:~$ '''cd /usr/src/hello/'''</p>
<p>orangepi@orangepi:/usr/src/hello$ '''sudo make'''</p>
<p>make -C /lib/modules/5.15.147-sun55iw3/build M=/usr/src/hello modules</p>
<p>make[1]: Entering directory '/usr/src/linux-headers-5.15.147-sun55iw3'</p>
<p>CC [M] /usr/src/hello/hello.o</p>
<p>MODPOST /usr/src/hello/Module.symvers</p>
<p>CC [M] /usr/src/hello/hello.mod.o</p>
<p>LD [M] /usr/src/hello/hello.ko</p>
<p>make[1]: Leaving directory '/usr/src/linux-headers-5.15.147-sun55iw3'</p></li>
<li><p>编译完后会生成'''hello.ko'''内核模块</p>
<p>orangepi@orangepi:/usr/src/hello$ '''ls *.ko'''</p>
<p>hello.ko</p></li>
<li><p>使用'''insmod'''命令可以将'''hello.ko'''内核模块插入内核中</p>
<p>orangepi@orangepi:/usr/src/hello$ '''sudo insmod hello.ko'''</p></li>
<li><p>然后使用'''demsg'''命令可以查看下'''hello.ko'''内核模块的输出,如果能看到下面的输出说明'''hello.ko'''内核模块加载正确</p>
<p>orangepi@orangepi:/usr/src/hello$ '''dmesg | grep "Hello"'''</p>
<p>[ 2871.893988] '''Hello Orange Pi -- init'''</p></li>
<li><p>使用'''rmmod'''命令可以卸载'''hello.ko'''内核模块</p>
<p>orangepi@orangepi:/usr/src/hello$ '''sudo rmmod hello'''</p>
<p>orangepi@orangepi:/usr/src/hello$ '''dmesg | grep "Hello"'''</p>
<p>[ 2871.893988] Hello Orange Pi -- init</p>
<p>[ 3173.800892] '''Hello Orange Pi -- exit'''</p></li></ol>
<span id="寸mipi-lcd屏幕的使用方法"></span>
== 10.1寸MIPI LCD屏幕的使用方法 ==
<span id="寸mipi-屏幕的组装方法"></span>
=== 10.1寸MIPI 屏幕的组装方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先准备需要的配件</p>
<ol style="list-style-type: lower-alpha;">
<li><p>10.1寸MIPI LCD显示屏+触摸屏</p>
<p>[[File:Orange_Pi_4A-image191.png|288x222px]]</p></li>
<li><p>屏幕转接板+31pin转40pin排线</p>
<div class="figure">
[[File:Orange_Pi_4A-image192.png|191x165px|DD9A8F44-0D8F-4f06-9473-B539DEED850C]]
</div></li>
<li><p>30pin MIPI排线</p>
<div class="figure">
[[File:Orange_Pi_4A-image193.png|355x33px|C2164119-6EC3-49ae-9A95-BE323F51FAE1]]
</div></li>
<li><p>12pin 触摸屏排线</p>
<p>[[File:Orange_Pi_4A-image194.png|293x43px]]</p></li></ol>
</li>
<li><p>按照下图将12pin 触摸屏排线、31pin转40pin排线、30pin MIPI排线接到屏幕转接板上,注意'''触摸屏排线蓝色的绝缘面朝下''',其它两根排线绝缘面朝上,如果接错会导致无显示或者不能触摸的问题</p>
<p>[[File:Orange_Pi_4A-image195.png|487x120px]]</p></li>
<li><p>按照下图将连接好排线的转接板置于MIPI LCD屏上面,并通过31pin转40pin排线连接MIPI LCD屏与转接板</p></li></ol>
[[File:Orange_Pi_4A-image196.png|286x421px]]
<ol start="4" style="list-style-type: decimal;">
<li><p>然后通过12pin触摸屏排线连接触摸屏与转接板,注意绝缘面的朝向</p>
<p>[[File:Orange_Pi_4A-image197.png|204x130px]]</p></li>
<li><p>最后通过30pin MIPI排线连接到开发板的LCD接口上</p>
<p>[[File:Orange_Pi_4A-image198.png|268x178px]]</p></li></ol>
<span id="打开10.1寸mipi-lcd屏幕配置的方法"></span>
=== 打开10.1寸MIPI LCD屏幕配置的方法 ===
<ol style="list-style-type: decimal;">
<li><p>Linux镜像默认是没有打开mipi lcd屏幕的配置的,如果需要使用mipi lcd屏幕,需要手动打开才行。</p></li>
<li><p>开发板上mipi lcd屏幕的接口如下图所示:</p>
<p>[[File:Orange_Pi_4A-image199.png|245x140px]]</p></li>
<li><p>打开mipi lcd配置的方法如下所示:</p>
<p>orangepi@orangepi:~$ '''sudo vim /boot/extlinux/extlinux.conf'''</p>
<p>label Orange Pi</p>
<p>kernel /boot/uImage</p>
<p>initrd /boot/uInitrd</p>
<p>fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb</p>
<p>append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles</p>
<p>'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-lcd.dtbo''' #需要添加的配置</p></li>
<li><p>'''然后重启OPi OS Arch系统'''</p></li>
<li><p>重启后可以看到lcd屏幕的显示如下所示(默认为竖屏):</p></li></ol>
[[File:Orange_Pi_4A-image200.png|259x379px]]
=== 旋转显示和触摸方向的方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先点击桌面右上角的这块区域</p>
<p>[[File:Orange_Pi_4A-image201.png|211x137px]]</p></li>
<li><p>然后打开设置</p>
<p>[[File:Orange_Pi_4A-image202.png|215x167px]]</p></li>
<li><p>然后选择'''Displays'''</p>
<p>[[File:Orange_Pi_4A-image203.png|344x251px]]</p></li>
<li><p>然后在'''Displays'''的'''Orientation'''中选择想要旋转的方向</p>
<p>[[File:Orange_Pi_4A-image204.png|344x247px]]</p></li>
<li><p>然后选择'''Apply'''</p>
<p>[[File:Orange_Pi_4A-image205.png|339x246px]]</p></li>
<li><p>然后就能看到屏幕已经旋转好了,此时还需要选择'''Keep Changes'''来最后确定旋转</p>
<p>[[File:Orange_Pi_4A-image206.png|235x111px]]</p></li>
<li><p>LCD屏幕旋转90度后的显示如下所示:</p>
<p>[[File:Orange_Pi_4A-image207.png|338x232px]]</p></li>
<li><p>'''Linux系统LCD屏幕的触摸功能会随着显示方向的旋转而旋转,无需其他设置'''</p></li></ol>
<span id="edp屏幕的使用方法"></span>
== eDP屏幕的使用方法 ==
<span id="edp屏幕的组装方法"></span>
=== eDP屏幕的组装方法 ===
<ol style="list-style-type: decimal;">
<li><p>目前仅适配了一款15.6寸的eDP屏幕,包含的配件如下:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>0.5间距30pin单头同向排线</p>
<p>[[File:Orange_Pi_4A-image208.png|199x197px]]</p></li>
<li><p>15.6寸 eDP显示屏,分辨率为1920x1080。</p>
<div class="figure">
[[File:Orange_Pi_4A-image209.png|212x367px|8763EEF4-115F-4b95-A8FB-CA0A62F57B70]]
</div></li></ol>
</li>
<li><p>将30pin单头同向排线的FPC端连接到开发板的eDP接口,另一端连接到屏幕的eDP接口</p>
<p>[[File:Orange_Pi_4A-image210.png|228x94px]]</p></li></ol>
<span id="打开edp屏幕配置的方法"></span>
=== 打开eDP屏幕配置的方法 ===
'''注意,下面介绍的方法仅适用于已适配过的eDP屏幕,如果客户使用的是未经过适配的屏幕,按照下面的方法是无法点亮的。'''
# Linux镜像默认是没有打开eDP屏幕的配置的,如果需要使用eDP屏幕,需要手动打开才行。
<!-- -->
<ol style="list-style-type: lower-alpha;">
<li><p>首先在'''/boot/extlinux/extlinux.conf'''中加入下面的配置</p>
<p>orangepi@orangepi:~$ '''sudo vim /boot/extlinux/extlinux.conf'''</p>
<p>label Orange Pi</p>
<p>kernel /boot/uImage</p>
<p>initrd /boot/uInitrd</p>
<p>fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb</p>
<p>append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles</p>
<p>'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-edp.dtbo''' #需要添加的配置</p></li>
<li><p>然后重启系统</p>
<p>[orangepi@orangepi-pc ~]$ '''sudo reboot'''</p></li></ol>
<!-- -->
<ol start="2" style="list-style-type: decimal;">
<li>启动后可以看到eDP屏幕的显示如下所示:</li></ol>
[[File:Orange_Pi_4A-image211.png|397x240px]]
<span id="linux系统支持的部分编程语言测试"></span>
== Linux系统支持的部分编程语言测试 ==
<span id="debian-bookworm系统"></span>
=== Debian Bookworm系统 ===
<ol style="list-style-type: decimal;">
<li><p>Debian Bookworm默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p>
<ol style="list-style-type: lower-alpha;">
<li><p>gcc的版本如下所示</p>
<p>orangepi@orangepi:~$ '''gcc --version'''</p>
<p>gcc (Debian 12.2.0-14) 12.2.0</p>
<p>Copyright (C) 2022 Free Software Foundation, Inc.</p>
<p>This is free software; see the source for copying conditions. There is NO</p>
<p>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p></li>
<li><p>编写C语言的'''hello_world.c'''程序</p>
<p>orangepi@orangepi:~$ '''vim hello_world.c'''</p>
<p>#include <stdio.h></p>
<p>int main(void)</p>
<p>{</p>
<p>printf("Hello World!\n");</p>
<p>return 0;</p>
<p>}</p></li>
<li><p>然后编译运行'''hello_world.c'''</p>
<p>orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''</p>
<p>orangepi@orangepi:~$ '''./hello_world'''</p>
<p>Hello World!</p></li></ol>
</li>
<li><p>Debian Bookworm默认安装有Python3</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Python具体版本如下所示</p>
<p>orangepi@orangepi:~$ '''python3'''</p>
<p>Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux</p>
<p>Type "help", "copyright", "credits" or "license" for more information.</p>
<p>>>></p>
<p>'''使用Ctrl+D快捷键可退出python的交互模式。'''</p></li>
<li><p>编写Python语言的'''hello_world.py'''程序</p>
<p>orangepi@orangepi:~$ '''vim hello_world.py'''</p>
<p>print('Hello World!')</p></li>
<li><p>运行'''hello_world.py'''的结果如下所示</p>
<p>orangepi@orangepi:~$ '''python3 hello_world.py'''</p>
<p>Hello World!</p></li></ol>
</li>
<li><p>Debian Bookworm默认没有安装Java的编译工具和运行环境</p>
<ol style="list-style-type: lower-alpha;">
<li><p>可以使用下面的命令安装openjdk,Debian Bookworm中最新版本为openjdk-17</p>
<p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''</p></li>
<li><p>安装完后可以查看下Java的版本</p>
<p>orangepi@orangepi:~$ '''java --version'''</p></li>
<li><p>编写Java版本的'''hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''vim hello_world.java'''</p>
<p>public class hello_world</p>
<p>{</p>
<p>public static void main(String[] args)</p>
<p>{</p>
<p>System.out.println("Hello World!");</p>
<p>}</p>
<p>}</p></li>
<li><p>然后编译运行'''hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''javac hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''java hello_world'''</p>
<p>Hello World!</p></li></ol>
</li></ol>
<span id="ubuntu-jammy系统"></span>
=== Ubuntu Jammy系统 ===
<ol style="list-style-type: decimal;">
<li><p>Ubuntu Jammy默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p>
<ol style="list-style-type: lower-alpha;">
<li><p>gcc的版本如下所示</p>
<p>orangepi@orangepi:~$ '''gcc --version'''</p></li></ol>
</li></ol>
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.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.
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>编写C语言的'''hello_world.c'''程序</p>
<p>orangepi@orangepi:~$ '''vim hello_world.c'''</p>
<p>#include <stdio.h></p>
<p>int main(void)</p>
<p>{</p>
<p>printf("Hello World!\n");</p>
<p>return 0;</p>
<p>}</p></li>
<li><p>然后编译运行'''hello_world.c'''</p>
<p>orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''</p>
<p>orangepi@orangepi:~$ '''./hello_world'''</p>
<p>Hello World!</p></li></ol>
<!-- -->
<ol start="2" style="list-style-type: decimal;">
<li><p>Ubuntu Jammy默认安装有Python3</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Python3具体版本如下所示</p>
<p>orangepi@orangepi:~$ '''python3'''</p>
<p>Python 3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0] on linux</p>
<p>Type "help", "copyright", "credits" or "license" for more information.</p>
<p>>>></p>
<p>'''使用Ctrl+D快捷键可退出python的交互模式。'''</p></li>
<li><p>编写Python语言的'''hello_world.py'''程序</p>
<p>orangepi@orangepi:~$ '''vim hello_world.py'''</p>
<p>print('Hello World!')</p></li>
<li><p>运行'''hello_world.py'''的结果如下所示</p>
<p>orangepi@orangepi:~$ '''python3 hello_world.py'''</p>
<p>Hello World!</p></li></ol>
</li>
<li><p>Ubuntu Jammy默认没有安装Java的编译工具和运行环境</p>
<ol style="list-style-type: lower-alpha;">
<li><p>可以使用下面的命令安装openjdk-18</p>
<p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-18-jdk'''</p></li>
<li><p>安装完后可以查看下Java的版本</p>
<p>orangepi@orangepi:~$ '''java --version'''</p>
<p>openjdk 18.0.2-ea 2022-07-19</p>
<p>OpenJDK Runtime Environment (build 18.0.2-ea+9-Ubuntu-222.04)</p>
<p>OpenJDK 64-Bit Server VM (build 18.0.2-ea+9-Ubuntu-222.04, mixed mode, sharing)</p></li>
<li><p>编写Java版本的'''hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''vim hello_world.java'''</p>
<p>public class hello_world</p>
<p>{</p>
<p>public static void main(String[] args)</p>
<p>{</p>
<p>System.out.println("Hello World!");</p>
<p>}</p>
<p>}</p></li>
<li><p>然后编译运行'''hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''javac hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''java hello_world'''</p>
<p>Hello World!</p></li></ol>
</li></ol>
<span id="上传文件到开发板linux系统中的方法"></span>
== 上传文件到开发板Linux系统中的方法 ==
<span id="在ubuntu-pc中上传文件到开发板linux系统中的方法"></span>
=== 在Ubuntu PC中上传文件到开发板Linux系统中的方法 ===
==== 使用scp命令上传文件的方法 ====
<ol style="list-style-type: decimal;">
<li><p>使用scp命令可以在Ubuntu PC中上传文件到开发板的Linux系统中,具体命令如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''file_path:'''需要替换为要上传文件的路径</p></li>
<li><p>'''orangepi:'''为开发板linux系统的用户名,也可以替换成其它的,比如root</p></li>
<li><p>'''192.168.xx.xx:''' 为开发板的IP地址,请根据实际情况进行修改</p></li>
<li><p>'''/home/orangepi:''' 开发板linux系统中的路径,也可以修改为其它的路径</p>
<p>test@test:~$ '''scp file_path orangepi@192.168.xx.xx:/home/orangepi/'''</p></li></ol>
</li>
<li><p>如果要上传文件夹,需要加上-r参数</p>
<p>test@test:~$ '''scp -r dir_path orangepi@192.168.xx.xx:/home/orangepi/'''</p></li>
<li><p>scp还有更多的用法,请使用下面的命令查看man手册</p></li></ol>
test@test:~$ '''man scp'''
==== 使用filezilla上传文件的方法 ====
<ol style="list-style-type: decimal;">
<li><p>首先在Ubuntu PC中安装filezilla</p>
<p>test@test:~$ '''sudo apt install -y filezilla'''</p></li>
<li><p>然后使用下面的命令打开filezilla</p>
<p>test@test:~$ '''filezilla'''</p></li>
<li><p>filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的</p>
<div class="figure">
[[File:Orange_Pi_4A-image212.png|576x453px|截图 2022-12-03 19-04-40]]
</div></li>
<li><p>连接开发板的方法如下图所示</p></li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image213.png|577x128px|IMG_256]]
</div>
<ol start="5" style="list-style-type: decimal;">
<li><p>然后选择'''保存密码''',再点击'''确定'''</p>
<p>[[File:Orange_Pi_4A-image214.png|249x181px]]</p></li>
<li><p>然后选择'''总是信任该主机''',再点击'''确定'''</p></li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image215.png|278x150px|IMG_256]]
</div>
<ol start="7" style="list-style-type: decimal;">
<li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image216.png|533x330px|IMG_256]]
</div>
<ol start="8" style="list-style-type: decimal;">
<li>然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Ubuntu PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了。</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image217.png|529x414px|IMG_256]]
</div>
<ol start="9" style="list-style-type: decimal;">
<li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了</p></li>
<li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol>
<span id="在windows-pc中上传文件到开发板linux系统中的方法"></span>
=== 在Windows PC中上传文件到开发板Linux系统中的方法 ===
<span id="使用filezilla上传文件的方法-1"></span>
==== 使用filezilla上传文件的方法 ====
# 首先下载filezilla软件Windows版本的安装文件,下载链接如下所示
[https://filezilla-project.org/download.php?type=client '''https://filezilla-project.org/download.php?type=client'''][[File:Orange_Pi_4A-image218.png|472x171px|IMG_256]]
[[File:Orange_Pi_4A-image219.png|384x276px]]
<ol start="2" style="list-style-type: decimal;">
<li><p>下载的安装包如下所示,然后双击直接安装即可</p>
<p>'''FileZilla_Server_1.5.1_win64-setup.exe'''</p></li></ol>
安装过程中,下面的安装界面请选择'''Decline''',然后再选择'''Next>'''
<div class="figure">
[[File:Orange_Pi_4A-image220.png|355x279px|IMG_256]]
</div>
<ol start="3" style="list-style-type: decimal;">
<li>filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image221.png|451x357px|IMG_256]]
</div>
<ol start="4" style="list-style-type: decimal;">
<li>连接开发板的方法如下图所示:</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image222.png|522x108px|IMG_256]]
</div>
<ol start="5" style="list-style-type: decimal;">
<li>然后选择'''保存密码''',再点击'''确定'''</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image223.png|207x146px|IMG_256]]
</div>
<ol start="6" style="list-style-type: decimal;">
<li>然后选择'''总是信任该主机''',再点击'''确定'''</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image224.png|221x109px|IMG_256]]
</div>
<ol start="7" style="list-style-type: decimal;">
<li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image225.png|449x332px|IMG_256]]
</div>
<ol start="8" style="list-style-type: decimal;">
<li>然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Windows PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image226.png|461x340px|IMG_256]]
</div>
<ol start="9" style="list-style-type: decimal;">
<li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了</p></li>
<li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol>
<span id="npu的使用说明"></span>
== NPU的使用说明 ==
=== 板端环境准备 ===
<ol style="list-style-type: decimal;">
<li><p>首先开发板端需要安装opencv和cmake。</p>
<p>orangepi@orangepi:~$ '''sudo apt update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt install libopencv-dev cmake'''</p></li>
<li><p>然后从官方百度云下载NPU示例程序的压缩包。</p></li>
<li><p>然后将NPU示例程序压缩包上传到开发板,并解压。</p>
<p>orangepi@orangepi:~$ '''tar -xvf board-demo.tar.gz'''</p></li>
<li><p>压缩包解压后,目录结构如下所示。</p>
<p>orangepi@orangepi:~$ '''cd board-demo/'''</p>
<p>orangepi@orangepi:~/board-demo$ '''ls'''</p>
<p>chineseocr common head_pose lenet libawnn_viplite libawutils mobilenet_v2_ssd_demo struct2depth struct2depth yolov5</p></li>
<li><p>然后需要将NPU库拷贝到系统的/usr/lib目录下,下面运行示例程序需要用到。</p></li></ol>
orangepi@orangepi:~/board-demo$ '''sudo cp ./common/lib_linux_aarch64/T527/*.so /usr/lib'''
=== 板端示例运行 ===
==== 运行mobilenet_v2_ssd目标检测示例 ====
<ol style="list-style-type: decimal;">
<li><p>首先编译mobilenet_v2_ssd目标检测示例。</p>
<p>orangepi@orangepi:~/board-demo$ '''cd mobilenet_v2_ssd_demo'''</p>
<p>orangepi@orangepi:~/board-demo/mobilenet_v2_ssd_demo$ '''mkdir build'''</p>
<p>orangepi@orangepi:~/board-demo/mobilenet_v2_ssd_demo$ '''cd build'''</p>
<p>orangepi@orangepi:~/board-demo/mobilenet_v2_ssd_demo/build$ '''cmake ..'''</p>
<p>orangepi@orangepi:~/board-demo/mobilenet_v2_ssd_demo/build$ '''make'''</p></li>
<li><p>然后执行下面的命令运行示例。</p>
<p>orangepi@orangepi:/root/board-demo/mobilenet_v2_ssd_demo/build$ '''./mbv2-ssd-demo -b ../model/mbv2_ssd_x527.nb -i ../000012.jpg'''</p></li>
<li><p>程序正常运行的输出信息如下所示。</p>
<p>orangepi@orangepi:/root/board-demo/mobilenet_v2_ssd_demo/build$ '''./mbv2-ssd-demo -b ../model/mbv2_ssd_x527.nb -i ../000012.jpg'''</p>
<p>................….</p>
<p>get output finished.</p>
<p>mbv2_ssd_postprocess.cpp run.</p>
<p>car = 0.97705 at 162 94 179 x 170</p>
<p>postprocess time : 0.025 Sec</p>
<p>destory npu finished.</p>
<p>~NpuUint.</p></li>
<li><p>输出结果会保存为当前目录的ssd_out.png</p>
<p>orangepi@orangepi4a:~/board-demo/mobilenet_v2_ssd_demo/build$ '''ls ssd_out.png'''</p>
<p>ssd_out.png</p>
<p>[[File:Orange_Pi_4A-image227.png|269x179px]]</p></li></ol>
==== 运行yolov5目标检测示例 ====
<ol style="list-style-type: decimal;">
<li><p>首先编译yolov5示例。</p>
<p>orangepi@orangepi:~/board-demo$ '''cd mobilenet_v2_ssd_demo'''</p>
<p>orangepi@orangepi:~/board-demo/yolov5$ '''mkdir build'''</p>
<p>orangepi@orangepi:~/board-demo/yolov5$ '''cd build'''</p>
<p>orangepi@orangepi:~/board-demo/yolov5/build$ '''cmake ..'''</p>
<p>orangepi@orangepi:~/board-demo/yolov5/build$ '''make'''</p></li>
<li><p>然后执行下面的命令运行示例。</p>
<p>orangepi@orangepi:~/board-demo/yolov5/build$ '''./yolov5 ../model/v2/yolov5.nb ../input_data/dog.jpg'''</p>
<p>./yolov5 nbg input</p>
<p>VIPLite driver software version 1.13.0.0-AW-2023-10-19</p>
<p>yolov5_preprocess.cpp run.</p>
<p>yolov5_postprocess.cpp run.</p>
<p>detection num: 3</p>
<p>16: 91%, [ 135, 218, 305, 553], dog</p>
<p>7: 69%, [ 473, 75, 689, 174], truck</p>
<p>1: 49%, [ 151, 121, 561, 431], bicycle</p></li>
<li><p>输出结果会保存为当前目录的result.png</p>
<p>orangepi@orangepi4a:~/board-demo/yolov5/build$ '''ls result.png'''</p>
<p>result.png</p>
<div class="figure">
[[File:Orange_Pi_4A-image228.png|323x241px|1729679452175]]
</div></li></ol>
==== 运行head_pose人体姿态识别示例 ====
<ol style="list-style-type: decimal;">
<li><p>首先编译head_pose示例。</p>
<p>orangepi@orangepi:~/board-demo$ '''cd head_pose'''</p>
<p>orangepi@orangepi:~/board-demo/head_pose$ '''mkdir build'''</p>
<p>orangepi@orangepi:~/board-demo/head_pose$ '''cd build'''</p>
<p>orangepi@orangepi:~/board-demo/head_pose/build$ '''cmake ..'''</p>
<p>orangepi@orangepi:~/board-demo/head_pose/build$ '''make'''</p></li>
<li><p>然后执行下面的命令运行示例。</p>
<p>orangepi@orangepi:~/board-demo/head_pose/build$ '''./head_pose -b1 ../model/rfb_landm_face_320_320_sim_x527.nb -b2 ../model/head_pose_x527.nb -i ../input_data/000438.jpg'''</p></li>
<li><p>输出结果会保存到当前目录的head_pose_result.jpg</p>
<p>orangepi@orangepi:~/board-demo/head_pose/build$ '''ls head_pose_result.jpg'''</p>
<p>head_pose_result.jpg</p>
<p>[[File:Orange_Pi_4A-image229.png|324x215px]]</p></li></ol>
==== 运行resnet50图像分类示例 ====
<ol style="list-style-type: decimal;">
<li><p>首先编译resnet50示例。</p>
<p>orangepi@orangepi:~/board-demo$ '''cd resnet50'''</p>
<p>orangepi@orangepi:~/board-demo/resnet50$ '''mkdir build'''</p>
<p>orangepi@orangepi:~/board-demo/resnet50$ '''cd build'''</p>
<p>orangepi@orangepi:~/board-demo/resnet50/build$ '''cmake ..'''</p>
<p>orangepi@orangepi:~/board-demo/resnet50/build$ '''make'''</p></li>
<li><p>然后执行下面的命令运行示例。</p>
<p>orangepi@orangepi:~/board-demo/resnet50/build$ '''./resnet50 ../model/v2/resnet50.nb ../input_data/dog_224_224.jpg'''</p></li>
<li><p>输出结果信息如下所示,输出了模型预测的前5名,其中最可能的类别是collie</p>
<p>orangepi@orangepi:~/board-demo/resnet50/build$ '''./resnet50 ../model/v2/resnet50.nb ../input_data/dog_224_224.jpg'''</p>
<p>...</p>
<p>========== top5 ==========</p>
<p>class id: 231, prob: 15.432617, label: collie</p>
<p>class id: 230, prob: 13.103271, label: Shetland sheepdog, Shetland sheep dog, Shetland</p>
<p>class id: 169, prob: 12.617920, label: borzoi, Russian wolfhound</p>
<p>class id: 224, prob: 12.423828, label: groenendael</p>
<p>class id: 160, prob: 10.191406, label: Afghan hound, Afghan</p>
<p>class_postprocess success.</p></li></ol>
==== 运行struct2depth深度检测示例 ====
<ol style="list-style-type: decimal;">
<li><p>首先编译struct2depth示例。</p>
<p>orangepi@orangepi:~/board-demo$ '''cd struct2depth'''</p>
<p>orangepi@orangepi:~/board-demo/struct2depth$ '''mkdir build'''</p>
<p>orangepi@orangepi:~/board-demo/struct2depth$ '''cd build'''</p>
<p>orangepi@orangepi:~/board-demo/struct2depth/build$ '''cmake ..'''</p>
<p>orangepi@orangepi:~/board-demo/struct2depth/build$ '''make'''</p></li>
<li><p>然后执行下面的命令运行示例。</p>
<p>orangepi@orangepi:~/board-demo/struct2depth/build$ '''./struct2depth -b ../model/v2/struct2depth.nb -i ../input_data/0015.jpg'''</p></li>
<li><p>模型推理的深度信息将会保存到jpg和txt文件中。</p>
<p>orangepi@orangepi:~/board-demo/struct2depth/build$ '''ls disp_* output_*'''</p>
<p>disp_color.jpg disp_show.jpg output_1.txt output_3.txt</p>
<p>disp_gray.jpg output_0.txt output_2.txt</p></li></ol>
==== 运行chineseocr文字识别示例 ====
<ol style="list-style-type: decimal;">
<li><p>首先编译chineseocr示例。</p>
<p>orangepi@orangepi:~/board-demo$ '''cd chineseocr'''</p>
<p>orangepi@orangepi:~/board-demo/chineseocr$ '''mkdir build'''</p>
<p>orangepi@orangepi:~/board-demo/chineseocr$ '''cd build'''</p>
<p>orangepi@orangepi:~/board-demo/chineseocr/build$ '''cmake ..'''</p>
<p>orangepi@orangepi:~/board-demo/chineseocr/build$ '''make'''</p></li>
<li><p>然后执行下面的命令运行示例。</p>
<p>orangepi@orangepi:~/board-demo/chineseocr/build$ '''./chineseocr -d ../model/v2/ -1 dbnet_1024 -2 angle_net -3 crnn_lite_lstm_256 -4 keys.txt -i ../input_data/1.jpg'''</p></li>
<li><p>输出结果如下所示,可以看到识别到了图片中的文字。</p>
<p>orangepi@orangepi:~/board-demo/chineseocr/build$ '''./chineseocr -d ../model/v2/ -1 dbnet_1024 -2 angle_net -3 crnn_lite_lstm_256 -4 keys.txt -i ../input_data/1.jpg'''</p>
<p>...</p>
<p>=====End detect=====</p>
<p>FullDetectTime(903.447417ms)</p>
<p>我们在全志科技</p>
<p>AI</p>
<p>芯片</p>
<p>起飞12345666666 !</p>
<p>run finished.</p>
<p>~CrnnNet.</p>
<p>~AngleNet.</p>
<p>~DbNet.</p>
<p>~NpuUint.</p></li></ol>
<span id="烧写linux镜像到emmc的方法"></span>
== 烧写linux镜像到eMMC的方法 ==
'''注意,开发板可以通过TF卡启动,也可以通过eMMC启动,TF卡的优先级要高于eMMC。也就是说,如果开发板插了TF卡,并且TF卡中是有系统的,那么默认就会启动TF卡中系统,而不会启动eMMC中的系统。'''
<ol style="list-style-type: decimal;">
<li><p>烧录linux镜像到eMMC中需要借助TF卡来完成,首先将linux镜像烧录到TF卡上,然后启动开发板进入linux系统</p></li>
<li><p>然后运行'''nand-sata-install'''脚本,'''记得加sudo权限'''</p>
<p>orangepi@orangepi:~$ '''sudo nand-sata-install'''</p></li>
<li><p>然后选择'''2 Boot from eMMC - system on eMMC'''</p>
<div class="figure">
[[File:Orange_Pi_4A-image230.png|576x299px|选区_039]]
</div></li>
<li><p>然后会弹出一个警告,脚本将会擦除eMMC上的所有数据,选择'''<Yes>'''继续</p>
<div class="figure">
[[File:Orange_Pi_4A-image231.png|576x335px|选区_040]]
</div></li>
<li><p>然后会提示选择文件系统的类型,支持ext2/3/4、f2fs以及btrfs五种文件系统</p>
<p>[[File:Orange_Pi_4A-image232.png|575x190px]]</p></li>
<li><p>然后会开始格式化eMMC,格式化完eMMC后就会开始烧录linux镜像到eMMC中[[File:Orange_Pi_4A-image233.png|576x174px]]</p></li>
<li><p>烧录完后会提示下面的选项,可以选择'''<Power off>'''直接关机</p>
<div class="figure">
[[File:Orange_Pi_4A-image234.png|575x141px|选区_044]]
</div></li>
<li><p>然后拔出TF卡,再重新上电,就会启动eMMC中的linux系统了</p></li></ol>
== 关机和重启开发板的方法 ==
<ol style="list-style-type: decimal;">
<li><p>在Linux系统运行的过程中,如果直接拔掉电源断电,可能会导致文件系统丢失某些数据,建议断电前先使用'''poweroff'''命令关闭开发板的Linux系统,然后再拔掉电源</p>
<p>orangepi@orangepi:~$ '''sudo poweroff'''</p></li>
<li><p>另外开发板配有开关机按键,还可以'''短按'''开发板上的开关机按键来关机。</p>
<p>[[File:Orange_Pi_4A-image235.png|449x115px]]</p></li></ol>
'''注意,Linux桌面版系统按下开关机按键后会弹出下图所示的确认框,需要点击Power Off选项后才会关机。'''
[[File:Orange_Pi_4A-image236.png|211x177px]]
<ol start="3" style="list-style-type: decimal;">
<li><p>关机后长按开发板上的开关机按键即可开机。</p>
<p>[[File:Orange_Pi_4A-image235.png|449x115px]]</p></li>
<li><p>使用'''reboot'''命令即可重启开发板中的Linux系统</p>
<p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p></li></ol>
<span id="linux-sdkorangepi-build使用说明"></span>
= 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://repo.huaweicloud.com/ubuntu-releases/21.04/ubuntu-21.04-desktop-amd64.iso '''https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/ubuntu-22.04-desktop-amd64.iso''']
在电脑中或者虚拟机中安装完Ubuntu 22.04后,请先设置Ubuntu 22.04的软件源为清华源(或者其它你觉得速度快的国内源),不然后面安装软件的时候很容易由于网络原因而出错。替换清华源的步骤如下所示:
<ol style="list-style-type: lower-alpha;">
<li>替换清华源的方法参考这个网页的说明即可。</li></ol>
[https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ '''https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/''']
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>注意Ubuntu版本需要切换到22.04。</p>
<p>[[File:Orange_Pi_4A-image237.png|576x241px]]</p></li>
<li><p>需要替换的'''/etc/apt/sources.list'''文件的内容为:</p>
<p>test@test:~$ '''sudo mv /etc/apt/sources.list cat /etc/apt/sources.list.bak'''</p>
<p>test@test:~$ '''sudo vim /etc/apt/sources.list'''</p>
<p># 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释</p>
<p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse</p>
<p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse</p>
<p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse</p>
<p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse</p>
<p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</p>
<p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</p>
<p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse</p>
<p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse</p>
<p># 预发布软件源,不建议启用</p>
<p># deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse</p>
<p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse</p></li>
<li><p>替换完后需要更新下包信息,并确保没有报错。</p>
<p>test@test:~$ '''sudo apt-get update'''</p></li>
<li><p>'''另外,由于内核和U-boot等源码都是存放在GitHub上的,所以编译镜像的时候请确保电脑能正常从GitHub下载代码,这点是非常重要的。'''</p></li></ol>
<span id="获取linux-sdk的源码"></span>
== 获取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'''
'''注意,使用T527 Soc的开发板是需要下载orangepi-build的next分支源码的,上面的git clone命令需要指定orangepi-build源码的分支为next。'''
[[File:Orange_Pi_4A-image238.png|576x288px]]
'''通过git clone命令下载orangepi-build的代码是不需要输入github账号的用户名和密码的(下载本手册中的其他代码也是一样的),如果如输入git clone命令后Ubuntu PC提示需要输入github账号的用户名和密码,一般都是git clone后面的orangepi-build仓库的地址输入错误了,请仔细检查命令拼写是否有错误,而不是以为我们这里忘了提供github账号的用户名和密码。'''
T527系列开发板当前使用的u-boot和linux内核版本如下所示:
{| class="wikitable"
|-
| style="text-align: left;"| '''分支'''
| style="text-align: left;"| '''u-boot版本'''
| style="text-align: left;"| '''linux内核版本'''
|-
| style="text-align: left;"| '''current'''
| style="text-align: left;"| '''u-boot v2018.05'''
| style="text-align: left;"| '''linux5.15'''
|}
'''这里所说的分支和orangepi-build源代码的分支不是同一个东西,请不要搞混了。此分支主要是用来区分不同内核源码版本的。'''
'''目前全志提供的linux5.15 bsp内核我们定义为current分支。'''
orangepi-build下载完后会包含下面的文件和文件夹:
<ol style="list-style-type: lower-alpha;">
<li><p>'''build.sh''': 编译启动脚本</p></li>
<li><p>'''external''': 包含编译镜像需要用的配置文件、特定的脚本以及部分程序的源码等</p></li>
<li><p>'''LICENSE''': GPL 2许可证文件</p></li>
<li><p>'''README.md''': orangepi-build说明文件</p></li>
<li><p>'''scripts''': 编译linux镜像的通用脚本</p>
<p>test@test:~/orangepi-build$ '''ls'''</p>
<p>'''build.sh external LICENSE README.md scripts'''</p>
<p>'''如果是从github下载的orangepi-build的代码,下载完后你可能会发现orangepi-build中并没有包含u-boot和linux内核的源码,也没有编译u-boot和linux内核需要用到交叉编译工具链,这是正常的,因为这些东西都存放在其它单独的github仓库或者某些服务器上了(下文会详述其地址)。orangepi-build在脚本和配置文件中会指定u-boot、linux内核和交叉编译工具链的地址,运行orangepi-build时,当其发现本地没有这些东西,会自动去相应的地方下载的。'''</p></li></ol>
=== 下载交叉编译工具链 ===
orangepi-build第一次运行的时候会自动下载交叉编译工具链放在'''toolchains'''文件夹中,每次运行orangepi-build的build.sh脚本后,都会检查'''toolchains'''中的交叉编译工具链是否都存在,如果不存在则会重新开始下载,如果存在则直接使用,不会重复下载。
<div class="figure">
[[File:Orange_Pi_4A-image239.png|575x278px|选区_396]]
</div>
交叉编译工具链在中国境内的镜像网址为清华大学的开源软件镜像站:
[https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/ '''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
编译T527 Linux内核源码使用的交叉编译工具链为:
<ol style="list-style-type: lower-alpha;">
<li><p>linux5.15</p>
<p>'''gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''</p>
<p>编译T527 u-boot源码使用的交叉编译工具链为:</p></li></ol>
<!-- -->
<ol style="list-style-type: lower-alpha;">
<li><p>v2018.05</p>
<p>'''gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi'''</p></li></ol>
=== orangepi-build完整目录结构说明 ===
<ol style="list-style-type: decimal;">
<li><p>orangepi-build仓库下载完后并不包含linux内核、u-boot的源码以及交叉编译工具链,linux内核和u-boot的源码存放在独立的git仓库中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>linux内核源码存放的git仓库如下,注意切换linux-orangepi仓库的分支为</p>
<p>https://github.com/orangepi-xunlong/linux-orangepi/tree/'''orange-pi-5.15-sun55iw3'''</p></li>
<li><p>u-boot源码存放的git仓库如下,注意切换u-boot-orangepi仓库的分支为</p>
<p>https://github.com/orangepi-xunlong/u-boot-orangepi/tree/'''v2018.05-t527'''</p></li></ol>
</li>
<li><p>orangepi-build第一次运行的时候会去下载交叉编译工具链、u-boot和linux内核源码,成功编译完一次linux镜像后在orangepi-build中可以看到的文件和文件夹有</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''build.sh''': 编译启动脚本</p></li>
<li><p>'''external''': 包含编译镜像需要用的配置文件、特定功能的脚本以及部分程序的源码,编译镜像过程中缓存的rootfs压缩包也存放在external中</p></li>
<li><p>'''kernel''': 存放linux内核的源码</p></li>
<li><p>'''LICENSE''': GPL 2许可证文件</p></li>
<li><p>'''README.md''': orangepi-build说明文件</p></li>
<li><p>'''output''': 存放编译生成的u-boot、linux等deb包、编译日志以及编译生成的镜像等文件</p></li>
<li><p>'''scripts''': 编译linux镜像的通用脚本</p></li>
<li><p>'''toolchains''': 存放交叉编译工具链</p></li>
<li><p>'''u-boot''': 存放u-boot的源码</p></li>
<li><p>'''userpatches''': 存放编译脚本需要用到的配置文件</p>
<p>test@test:~/orangepi-build$ '''ls'''</p>
<p>'''build.sh external kernel LICENSE output README.md scripts toolchains u-boot userpatches'''</p></li></ol>
</li></ol>
== 编译u-boot ==
<ol style="list-style-type: decimal;">
<li><p>运行build.sh脚本,记得加sudo权限</p>
<p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p></li>
<li><p>选择'''U-boot package''',然后回车</p>
<div class="figure">
[[File:Orange_Pi_4A-image240.png|576x132px|选区_238]]
</div></li>
<li><p>接着选择开发板的型号</p>
<p>[[File:Orange_Pi_4A-image241.png|576x131px]]</p></li>
<li><p>然后就会开始编译u-boot,编译current分支时提示的部分信息说明如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>u-boot源码的版本</p>
<p>[ o.k. ] Compiling u-boot [ '''v2018.05''' ]</p></li>
<li><p>交叉编译工具链的版本</p>
<p>[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 11''' ]</p></li>
<li><p>编译生成的u-boot deb包的路径</p>
<p>[ o.k. ] Target directory [ '''orangepi-build/output/debs/u-boot''' ]</p></li>
<li><p>编译生成的u-boot deb包的包名</p>
<p>[ o.k. ] File name [ '''linux-u-boot-current-orangepi4a_x.x.x_arm64.deb''' ]</p></li>
<li><p>编译使用的时间</p>
<p>[ o.k. ] Runtime [ '''1 min''' ]</p></li>
<li><p>重复编译u-boot的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译u-boot</p>
<p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi4a BRANCH=current BUILD_OPT=u-boot''' ]</p></li></ol>
</li>
<li><p>查看编译生成的u-boot deb包</p>
<p>test@test:~/orangepi-build$ '''ls output/debs/u-boot/'''</p>
<p>'''linux-u-boot-current-orangepi4a_x.x.x_arm64.deb'''</p></li>
<li><p>orangepi-bulid编译系统编译u-boot源码时首先会将u-boot的源码和github服务器的u-boot源码进行同步,所以如果想修改u-boot的源码,首先需要关闭源码的下载更新功能('''需要完整编译过一次u-boot后才能关闭这个功能,否则会提示找不到u-boot的源码'''),否则所作的修改都会被还原,方法如下:</p>
<p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p>
<p>test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</p>
<p>......</p>
<p>IGNORE_UPDATES="'''yes'''"</p>
<p>......</p></li>
<li><p>调试u-boot代码时,可以使用下面的方法来更新linux镜像中的u-boot进行测试</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先将编译好的u-boot的deb包上传到开发板的linux系统中</p>
<p>test@test:~/orangepi-build$ '''cd output/debs/u-boot'''</p>
<p>test@test:~/orangepi_build/output/debs/u-boot$ '''scp \'''</p>
<p>'''linux-u-boot-current-orangepi4a_x.x.x_arm64.deb [mailto:root@192.168.1.xxx:/root root@192.168.1.xxx:/root]'''</p></li>
<li><p>再安装刚才上传的新的u-boot的deb包</p>
<p>orangepi@orangepi:~$ '''sudo dpkg -i''' '''linux-u-boot-current-orangepi4a_x.x.x_arm64.deb'''</p></li>
<li><p>然后运行 nand-sata-install脚本</p>
<p>orangepi@orangepi:~$ '''sudo nand-sata-install'''</p></li>
<li><p>然后选择'''5 Install/Update the bootloader on SD/eMMC'''</p>
<p>[[File:Orange_Pi_4A-image242.png|320x174px]]</p></li>
<li><p>按下回车键后首先会弹出一个Warning</p>
<p>[[File:Orange_Pi_4A-image243.png|314x170px]]</p></li>
<li><p>再按下回车键就会开始更新u-boot,更新完后会显示下面的信息</p>
<p>[[File:Orange_Pi_4A-image244.png|292x164px]]</p></li>
<li><p>然后就可以重启开发板来测试u-boot的修改是否生效了</p></li></ol>
</li></ol>
== 编译linux内核 ==
<ol style="list-style-type: decimal;">
<li><p>运行'''build.sh'''脚本,记得加sudo权限</p>
<p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p></li>
<li><p>选择'''Kernel package''',然后回车</p>
<div class="figure">
[[File:Orange_Pi_4A-image245.png|575x116px|选区_240]]
</div></li>
<li><p>然后会提示是否需要显示内核配置界面,如果不需要修改内核配置,则选择第一个即可,如果需要修改内核配置,则选择第二个</p>
<p>[[File:Orange_Pi_4A-image246.png|576x87px]]</p></li>
<li><p>接着选择开发板的型号</p>
<p>[[File:Orange_Pi_4A-image241.png|576x131px]]</p></li>
<li><p>如果第3)步选择了需要显示内核配置菜单(第二个选项),则会弹出通过'''make menuconfig'''打开的内核配置的界面,此时可以直接修改内核的配置,修改完后再保存退出即可,退出后会开始编译内核源码。</p>
<p>[[File:Orange_Pi_4A-image247.png|575x357px]]</p></li></ol>
<!-- -->
<ol style="list-style-type: lower-alpha;">
<li><p>如果不需要修改内核的配置选项,在运行build.sh脚本时,传入'''KERNEL_CONFIGURE=no'''就可临时屏蔽弹出内核的配置界面了</p>
<p>test@test:~/orangepi-build$ '''sudo ./build.sh KERNEL_CONFIGURE=no'''</p></li>
<li><p>也可以设置orangepi-build/userpatches/config-default.conf配置文件中的'''KERNEL_CONFIGURE=no''',这样可以永久禁用这个功能</p></li>
<li><p>编译内核的时候如果提示下面的错误,这是由于Ubuntu PC的终端界面太小,导致make menuconfig的界面无法显示,请把Ubuntu PC的终端调到最大,然后重新运行build.sh脚本</p>
<p>[[File:Orange_Pi_4A-image248.png|574x234px]]</p></li></ol>
<!-- -->
<ol start="6" style="list-style-type: decimal;">
<li><p>编译current分支内核源码时提示的部分信息说明如下:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>linux内核源码的版本</p>
<p>[ o.k. ] Compiling current kernel [ '''5.15.147''' ]</p></li>
<li><p>使用的交叉编译工具链的版本</p>
<p>[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 11''' ]</p></li>
<li><p>内核默认使用的配置文件以及它存放的路径如下所示</p>
<p>[ o.k. ] Using kernel config file [ '''orangepi-build/external/config/kernel/linux-5.15-sun55iw3-current.config''' ]</p></li>
<li><p>编译生成的内核相关的deb包的路径</p>
<p>[ o.k. ] Target directory [ '''output/debs/''' ]</p></li>
<li><p>编译生成的内核镜像deb包的包名</p>
<p>[ o.k. ] File name [ '''linux-image-current-sun55iw3_x.x.x_arm64.deb''' ]</p></li>
<li><p>编译使用的时间</p>
<p>[ o.k. ] Runtime [ '''10 min''' ]</p></li>
<li><p>最后会显示重复编译上一次选择的内核的编译命令,使用下面的命令无需通过图形界面选择,可以直接开始编译内核源码</p>
<p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi4a BRANCH=current BUILD_OPT=kernel KERNEL_CONFIGURE=no''' ]</p></li></ol>
</li>
<li><p>查看编译生成的内核相关的deb包</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''linux-dtb-current-sun55iw3_x.x.x_arm64.deb'''包含有内核使用的dtb文件</p></li>
<li><p>'''linux-headers-current-sun55iw3_x.x.x_arm64.deb'''包含内核头文件</p></li>
<li><p>'''linux-image-current-sun55iw3_x.x.x_arm64.deb'''包含内核镜像和内核模块</p>
<p>test@test:~/orangepi-build$ '''ls output/debs/linux-*'''</p>
<p>output/debs/linux-dtb-current-sun55iw3_x.x.x_arm64.deb</p>
<p>output/debs/linux-headers-current-sun55iw3_x.x.x_arm64.deb</p>
<p>output/debs/linux-image-current-sun55iw3_x.x.x_arm64.deb</p></li></ol>
</li>
<li><p>orangepi-bulid编译系统编译linux内核源码时首先会将linux内核源码和github服务器的linux内核源码进行同步,所以如果想修改linux内核的源码,首先需要关闭源码的更新功能('''需要完整编译过一次linux内核源码后才能关闭这个功能,否则会提示找不到linux内核的源码'''),否则所作的修改都会被还原,方法如下:</p>
<p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p>
<p>test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</p>
<p>IGNORE_UPDATES="'''yes'''"</p></li>
<li><p>如果对内核做了修改,可以使用下面的方法来更新开发板linux系统的内核和内核模块</p>
<ol style="list-style-type: lower-alpha;">
<li><p>将编译好的linux内核的deb包上传到开发板的linux系统中</p>
<p>test@test:~/orangepi-build$ '''cd output/debs'''</p>
<p>test@test:~/orangepi-build/output/debs$ '''scp \'''</p>
<p>'''linux-image-current-sun55iw3_x.x.x_arm64.deb root@192.168.1.xxx:/root'''</p></li>
<li><p>再安装刚才上传的新的linux内核的deb包</p>
<p>orangepi@orangepi:~$ '''sudo dpkg -i linux-image-current-sun55iw3_x.x.x_arm64.deb'''</p></li>
<li><p>然后重启开发板,再查看内核相关的修改是否已生效</p>
<p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p></li></ol>
</li></ol>
== 编译rootfs ==
<ol style="list-style-type: decimal;">
<li><p>运行build.sh脚本,记得加sudo权限</p>
<p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p></li>
<li><p>选择'''Rootfs and all deb packages''',然后回车</p></li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image249.png|576x119px|选区_241]]
</div>
<ol start="3" style="list-style-type: decimal;">
<li><p>接着选择开发板的型号</p>
<p>[[File:Orange_Pi_4A-image241.png|576x131px]]</p></li>
<li><p>然后选择rootfs的类型</p>
<p>[[File:Orange_Pi_4A-image250.png|575x80px]]</p></li>
<li><p>然后选择镜像的类型</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''Image with console interface (server)'''表示服务器版的镜像,体积比较小</p></li>
<li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p>
<div class="figure">
[[File:Orange_Pi_4A-image251.png|576x75px|选区_245]]
</div></li></ol>
</li>
<li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p>
<div class="figure">
[[File:Orange_Pi_4A-image252.png|576x78px|选区_397]]
</div></li>
<li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护GNOME,所以请选择GNOME类型的桌面</p>
<p>[[File:Orange_Pi_4A-image253.png|576x69px]]</p>
<p>[[File:Orange_Pi_4A-image254.png|576x74px]]</p>
<p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p>
<p>[[File:Orange_Pi_4A-image255.png|575x264px]]</p></li>
<li><p>然后就会开始编译rootfs,编译时提示的部分信息说明如下</p>
<ol style="list-style-type: lower-alpha;">
<li><p>rootfs的类型</p>
<p>[ o.k. ] local not found [ Creating new rootfs cache for '''jammy''' ]</p></li>
<li><p>编译生成的rootfs压缩包的存放路径</p>
<p>[ o.k. ] Target directory [ '''orangepi-build/external/cache/rootfs''' ]</p></li>
<li><p>编译生成的rootfs压缩包的名字</p>
<p>[ o.k. ] File name [ '''jammy-gnome-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4''' ]</p></li></ol>
</li>
<li><p>查看编译生成的rootfs压缩包</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''jammy-gnome-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4'''是rootfs的压缩包,名字各字段的含义为</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''jammy'''表示rootfs的linux发行版的类型</p></li>
<li><p>'''gnome'''表示rootfs为桌面版的类型,如果为'''cli'''则表示服务器版类型</p></li>
<li><p>'''arm64'''表示rootfs的架构类型</p></li>
<li><p>'''25250ec7002de9e81a41de169f1f89721'''是由rootfs安装的所有软件包的包名生成的MD5哈希值,只要没有修改rootfs安装的软件包的列表,那么这个值就不会变,编译脚本会通过这个MD5哈希值来判断是否需要重新编译rootfs</p></li></ol>
</li>
<li><p>'''jammy-gnome-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list'''列出了rootfs安装的所有软件包的包名</p>
<p>test@test:~/orangepi-build$ '''ls external/cache/rootfs/'''</p>
<p>jammy-gnome-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4</p>
<p>jammy-gnome-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.current</p>
<p>jammy-gnome-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list</p></li></ol>
</li>
<li><p>如果需要的rootfs在'''external/cache/rootfs'''下已经存在,那么再次编译rootfs就会直接跳过编译过程,不会重新开始编译,编译镜像的时候也会去'''external/cache/rootfs'''下查找是否已经有缓存可用的rootfs,如果有就直接使用,这样可以节省大量的下载编译时间</p></li></ol>
== 编译linux镜像 ==
<ol style="list-style-type: decimal;">
<li><p>运行'''build.sh'''脚本,记得加sudo权限</p>
<p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p></li>
<li><p>选择'''Full OS image for flashing''',然后回车</p></li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image256.png|576x128px|选区_242]]
</div>
<ol start="3" style="list-style-type: decimal;">
<li><p>然后选择开发板的型号</p>
<p>[[File:Orange_Pi_4A-image241.png|576x131px]]</p></li>
<li><p>然后选择rootfs的类型</p>
<p>[[File:Orange_Pi_4A-image250.png|575x80px]]</p></li>
<li><p>然后选择镜像的类型</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''Image with console interface (server)'''表示服务器版的镜像,体积比较小</p></li>
<li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p>
<div class="figure">
[[File:Orange_Pi_4A-image251.png|576x75px|选区_245]]
</div></li></ol>
</li>
<li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p>
<div class="figure">
[[File:Orange_Pi_4A-image252.png|576x78px|选区_397]]
</div></li>
<li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护GNOME,所以请选择GNOME类型的桌面</p>
<p>[[File:Orange_Pi_4A-image253.png|576x69px]]</p>
<p>[[File:Orange_Pi_4A-image254.png|576x74px]]</p>
<p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p>
<p>[[File:Orange_Pi_4A-image255.png|575x264px]]</p></li>
<li><p>然后就会开始编译linux镜像,编译的大致流程如下</p>
<ol style="list-style-type: lower-alpha;">
<li><p>初始化Ubuntu PC的编译环境,安装编译过程需要的软件包</p></li>
<li><p>下载u-boot和linux内核的源码(如果已经缓存,则只更新代码)</p></li>
<li><p>编译u-boot源码,生成u-boot的deb包</p></li>
<li><p>编译linux源码,生成linux相关的deb包</p></li>
<li><p>制作linux firmware的deb包</p></li>
<li><p>制作orangepi-config工具的deb包</p></li>
<li><p>制作板级支持的deb包</p></li>
<li><p>如果是编译desktop版镜像,还会制作desktop相关的deb包</p></li>
<li><p>检查rootfs是否已经缓存,如果没有缓存,则重新制作rootfs,如果已经缓存,则直接解压使用</p></li>
<li><p>安装前面生成的deb包到rootfs中</p></li>
<li><p>对不同的开发板和不同类型镜像做一些特定的设置,如预装额外的软件包,修改系统配置等</p></li>
<li><p>然后制作镜像文件,并格式化分区,默认类型为ext4</p></li>
<li><p>再将配置好的rootfs拷贝到镜像的分区中</p></li>
<li><p>然后更新initramfs</p></li>
<li><p>最后将u-boot的bin文件通过dd命令写入到镜像中</p></li></ol>
</li>
<li><p>编译完镜像后会提示下面的信息</p>
<ol style="list-style-type: lower-alpha;">
<li><p>编译生成的镜像的存放路径</p>
<p>[ o.k. ] Done building [ '''output/images/orangepi4a_x.x.x_debian_jammy_linux5.15.xx_gnome_desktop/orangepi4a_x.x.x_debian_jammy_linux5.15.xx_gnome_desktop.img''' ]</p></li>
<li><p>编译使用的时间</p></li></ol>
</li></ol>
'''[ o.k. ] Runtime [ 19 min ]'''
<ol start="3" style="list-style-type: lower-alpha;">
<li><p>重复编译镜像的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译镜像</p>
<p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi4a BRANCH=current BUILD_OPT=image RELEASE=jammy BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=yes''' ]</p></li></ol>
<span id="android-13系统使用说明"></span>
= Android 13系统使用说明 =
<span id="已支持的android版本"></span>
== 已支持的Android版本 ==
{| class="wikitable"
|-
| style="text-align: center;"| Android版本
| style="text-align: center;"| 内核版本
|-
| style="text-align: center;"| '''Android 13'''
| style="text-align: center;"| '''linux5.15'''
|}
<span id="android-13功能适配情况"></span>
== Android 13功能适配情况 ==
{| class="wikitable"
|-
| style="text-align: center;"| '''功能'''
| style="text-align: center;"| '''Android 13'''
|-
| style="text-align: center;"| '''HDMI视频'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''HDMI音频'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''USB2.0 x 4'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''TF卡启动'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''eMMC'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''NVME SSD识别'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''千兆网卡'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''WIFI'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''蓝牙'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''RTC芯片'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''耳机音频'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''LCD屏幕'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''EDP'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''CAM1'''
| style="text-align: center;"| '''NO'''
|-
| style="text-align: center;"| '''CAM2'''
| style="text-align: center;"| '''NO'''
|-
| style="text-align: center;"| '''LED灯'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin GPIO'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin I2C'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin SPI'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin UART'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin PWM'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''温度传感器'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''Mali GPU'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''视频编解码'''
| style="text-align: center;"| '''OK'''
|}
<span id="adb的使用方法"></span>
== ADB的使用方法 ==
<span id="usb-otg模式切换的方法"></span>
=== USB OTG模式切换的方法 ===
'''开发板有4个USB接口,其中下图红框标注的USB接口既可以支持Host模式,又可以支持Device模式,其它3个USB接口只支持Host模式。'''
[[File:Orange_Pi_4A-image257.png|258x214px]]
'''USB OTG接口默认为Host模式,可以用来接鼠标键盘等USB设备,如果要使用ADB需要手动切换为Device模式。'''
<ol style="list-style-type: decimal;">
<li><p>首先打开Settings</p>
<p>[[File:Orange_Pi_4A-image258.png|574x250px]]</p></li>
<li><p>然后找到'''About tablet'''</p>
<p>[[File:Orange_Pi_4A-image259.png|575x315px]]</p></li>
<li><p>然后用鼠标多次点击'''Build number'''选项,直到出现'''You are now a developer!'''的提示</p>
<p>[[File:Orange_Pi_4A-image260.png|575x301px]]</p></li>
<li><p>然后返回上一级菜单,选择'''System'''</p>
<p>[[File:Orange_Pi_4A-image261.png|575x253px]]</p></li>
<li><p>然后选择'''Developer options'''</p>
<p>[[File:Orange_Pi_4A-image262.png|575x279px]]</p></li>
<li><p>最后找到'''USB OTG Mode Switch'''开关,'''打开开关切换为Device模式,关闭开关切换为Host模式'''</p></li></ol>
[[File:Orange_Pi_4A-image263.png|576x197px]]
=== 使用数据线连接adb调试 ===
<ol style="list-style-type: decimal;">
<li><p>首先准备一根品质良好的USB 2.0公对公数据线</p>
<div class="figure">
[[File:Orange_Pi_4A-image17.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
</div></li>
<li><p>在Ubuntu PC上安装adb工具</p>
<p>test@test:~$ '''sudo apt-get update'''</p>
<p>test@test:~$ '''sudo apt-get install -y adb'''</p></li>
<li><p>查看识别到ADB设备</p>
<p>test@test:~$ '''adb devices'''</p>
<p>List of devices attached</p>
<p>4c00146473c28651dd0 device</p></li>
<li><p>然后在Ubuntu PC上通过adb shell就可以登录android系统</p></li></ol>
test@test:~$ '''adb shell'''
t527-demo:/ #
=== 使用网络连接adb调试 ===
'''使用网络adb无需USB2.0公对公数据线来连接电脑和开发板,而是通过网络来通信,所以首先请确保开发板的有线或者无线网络已经连接好了,然后获取开发板的IP地址,后面要用到。'''
<ol style="list-style-type: decimal;">
<li><p>确保Android系统的'''service.adb.tcp.port'''设置为5555端口号</p>
<p>console:/ # '''getprop | grep "adb.tcp"'''</p>
<p>[service.adb.tcp.port]: [5555]</p></li>
<li><p>如果'''service.adb.tcp.port'''没有设置,可以在串口中使用下面的命令设置网络adb的端口号</p></li></ol>
console:/ # '''setprop service.adb.tcp.port 5555'''
console:/ # '''stop adbd'''
console:/ # '''start adbd'''
<ol start="3" style="list-style-type: decimal;">
<li><p>在Ubuntu PC上安装adb工具</p>
<p>test@test:~$ '''sudo apt-get update'''</p>
<p>test@test:~$ '''sudo apt-get install -y adb'''</p></li>
<li><p>然后在Ubuntu PC上连接网络adb</p>
<p>test@test:~$ '''adb connect 192.168.1.xxx:5555''' '''(需要修改为开发板的IP地址)'''</p>
<p>* daemon not running; starting now at tcp:5037</p>
<p>* daemon started successfully</p>
<p>connected to 192.168.1.xxx:5555</p>
<p>test@test:~$ '''adb devices'''</p>
<p>List of devices attached</p>
<p>192.168.1.xxx:5555 device</p></li>
<li><p>然后在Ubuntu PC上通过adb shell就可以登录android系统</p></li></ol>
test@test:~$ '''adb shell'''
t527-demo:/ #
<span id="hdmi转vga显示测试-1"></span>
== HDMI转VGA显示测试 ==
<ol style="list-style-type: decimal;">
<li><p>首先需要准备下面的配件</p>
<ol style="list-style-type: lower-alpha;">
<li><p>HDMI转VGA转换器</p>
<p>[[File:Orange_Pi_4A-image134.png|155x104px]]</p></li>
<li><p>一根VGA线</p>
<p>[[File:Orange_Pi_4A-image135.png|148x133px]]</p></li>
<li><p>一个支持VGA接口的显示器或者电视</p></li></ol>
</li>
<li><p>HDMI转VGA显示测试如下所示</p>
<p>[[File:Orange_Pi_4A-image264.png|575x332px]]</p>
<p>'''使用HDMI转VGA显示时,开发板以及开发板的Android系统是不需要做任何设置的,只需要开发板HDMI接口能正常显示就可以了。所以如果测试有问题,请检查HDMI转VGA转换器、VGA线以及显示器是否有问题。'''</p></li></ol>
<span id="wi-fi的连接方法"></span>
== WI-FI的连接方法 ==
<ol style="list-style-type: decimal;">
<li><p>首先选择'''Settings'''</p>
<p>[[File:Orange_Pi_4A-image258.png|574x250px]]</p></li>
<li><p>然后选择'''Network & Internet'''</p>
<p>[[File:Orange_Pi_4A-image265.png|575x191px]]</p></li>
<li><p>然后选择'''Internet'''</p>
<p>[[File:Orange_Pi_4A-image266.png|576x157px]]</p></li>
<li><p>然后打开WI-FI</p>
<p>[[File:Orange_Pi_4A-image267.png|575x113px]]</p></li>
<li><p>打开WI-FI后在'''Available networks'''下面就可以看到搜索到的信号</p>
<p>[[File:Orange_Pi_4A-image268.png|576x199px]]</p></li>
<li><p>选择想连接的WI-FI后会弹出下图所示的密码输入界面</p>
<p>[[File:Orange_Pi_4A-image269.png|574x165px]]</p></li>
<li><p>然后使用键盘输入WI-FI对应的密码,再使用'''鼠标'''点击虚拟键盘中的回车按钮就会开始连接WI-FI了</p>
<p>[[File:Orange_Pi_4A-image270.png|576x179px]]</p></li>
<li><p>WI-FI连接成功后的显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image271.png|576x176px]]</p></li></ol>
<span id="wi-fi-hotspot的使用方法"></span>
== WI-FI hotspot的使用方法 ==
<ol style="list-style-type: decimal;">
<li><p>首先请确保以太网口已连接网线,并且能正常上网</p></li>
<li><p>然后选择'''Settings'''</p>
<p>[[File:Orange_Pi_4A-image258.png|574x250px]]</p></li>
<li><p>然后选择'''Network & Internet'''</p>
<p>[[File:Orange_Pi_4A-image272.png|574x143px]]</p></li>
<li><p>然后选择'''Hotspot & tethering'''</p>
<p>[[File:Orange_Pi_4A-image273.png|575x250px]]</p></li>
<li><p>然后选择'''Wi-Fi hotspot'''</p>
<p>[[File:Orange_Pi_4A-image274.png|575x164px]]</p></li>
<li><p>然后打开'''Wi-Fi Hotspot''',下图中还可以看到生成的热点的名字和密码,记住它们,在连接热点的时候要用到(如果需要修改热点的名字和密码,需要先关闭'''Wi-Fi Hotspot''',然后才能修改)</p>
<p>[[File:Orange_Pi_4A-image275.png|575x245px]]</p></li>
<li><p>此时可以拿出你的手机,如果一切正常,在手机搜索到的WI-FI列表中就能找到上图'''Hotspot name'''下面显示的同名('''这里为AndroidAP_4174''')的WIFI热点了。然后可以点击'''AndroidAP_4174'''连接热点,密码在上图的'''Hotspot password'''下面可以看到</p>
<p>[[File:Orange_Pi_4A-image276.png|233x172px]]</p></li>
<li><p>连接成功后显示如下图所示(不同手机界面会有区别,具体界面以你手机显示的为准)。此时就可以在手机上打开一个网页看下能否上网了,如果能正常打开网页,说明开发板的'''WI-FI Hotspot'''能正常使用</p>
<p>[[File:Orange_Pi_4A-image277.png|234x113px]]</p></li></ol>
<span id="查看以太网口ip地址的方法"></span>
== 查看以太网口IP地址的方法 ==
<ol style="list-style-type: decimal;">
<li><p>首先请确保开发板的千兆网口连接到了路由器或者交换机</p></li>
<li><p>然后打开'''Settings'''</p>
<p>[[File:Orange_Pi_4A-image258.png|574x250px]]</p></li>
<li><p>然后选择'''Network & Internet'''</p>
<p>[[File:Orange_Pi_4A-image265.png|575x159px]]</p></li>
<li><p>然后选择'''Ethernet'''</p>
<p>[[File:Orange_Pi_4A-image278.png|575x128px]]</p></li>
<li><p>然后选择'''Ethernet settings'''</p>
<p>[[File:Orange_Pi_4A-image279.png|575x123px]]</p></li>
<li><p>然后就能看到开发板有线网口的IP地址信息了</p>
<p>[[File:Orange_Pi_4A-image280.png|576x245px]]</p></li></ol>
== 蓝牙的连接方法 ==
<ol style="list-style-type: decimal;">
<li><p>首先选择'''Settings'''</p>
<p>[[File:Orange_Pi_4A-image258.png|574x250px]]</p></li>
<li><p>然后选择'''Connected devices'''</p></li></ol>
[[File:Orange_Pi_4A-image281.png|357x161px]]
<ol start="3" style="list-style-type: decimal;">
<li><p>然后选择'''Pair new device'''开始扫描周围的蓝牙设备</p>
<p>[[File:Orange_Pi_4A-image282.png|355x165px]]</p></li>
<li><p>搜索到的蓝牙设备会在'''Available devices'''下面显示出来</p>
<p>[[File:Orange_Pi_4A-image283.png|350x296px]]</p></li>
<li><p>然后点击想要连接的蓝牙设备就可以开始配对了,当弹出下面的界面时,请使用鼠标选择'''Pair'''选项</p>
<p>[[File:Orange_Pi_4A-image284.png|358x145px]]</p></li>
<li><p>这里测试的是开发板和'''安卓手机'''蓝牙的配置过程,此时在手机上会弹出确认界面,在手机上也点击配对按钮后就会开始配对过程</p></li>
<li><p>配对完成后,再打开'''Paired devices'''下面就可以看到已配对的蓝牙设备</p>
<p>[[File:Orange_Pi_4A-image285.png|284x183px]]</p></li>
<li><p>此时可以使用手机蓝牙给开发板发送一张图片,发送后,在开发板的安卓系统中可以看到下面的提示,然后点击'''Incoming file'''</p>
<p>[[File:Orange_Pi_4A-image286.png|574x163px]]</p></li>
<li><p>然后在弹出的窗口中点击'''Accept'''就可以开始接收手机发过来的图片了</p>
<p>[[File:Orange_Pi_4A-image287.png|575x217px]]</p></li>
<li><p>开发板Android系统蓝牙接收到的图片可以打开文件管理器的'''Download'''目录查看</p>
<p>[[File:Orange_Pi_4A-image288.png|575x238px]]</p></li></ol>
<span id="寸mipi-屏幕的使用方法"></span>
== 10.1寸MIPI 屏幕的使用方法 ==
请确保使用的 Android 镜像为下面的版本的镜像:
OrangePi4A_T527_Android13_lcd_v1.x.x.img
<ol style="list-style-type: decimal;">
<li><p>首先需要组装好屏幕,请参考[[#寸mipi-屏幕的组装方法|10.1寸MIPI屏幕的组装方法]]</p></li>
<li><p>开发板上mipi lcd屏幕的接口的位置如下图所示:</p>
<p>[[File:Orange_Pi_4A-image199.png|230x132px]]</p></li>
<li><p>将组装好的屏幕接到开发板的LCD接口,注意拔掉HDMI接口,给板子接通Type-C电源,并上电,系统启动后,就可以看到屏幕显示如下图所示('''默认为竖屏''')</p></li></ol>
[[File:Orange_Pi_4A-image289.png|208x291px]]
<span id="edp屏幕的使用方法-1"></span>
== eDP屏幕的使用方法 ==
'''eDP屏幕是没有触摸功能的。'''
请确保使用的 Android 镜像为下面的版本的镜像:
OrangePi4A_T527_Android13_v1.x.x.img
<ol start="3" style="list-style-type: decimal;">
<li><p>目前仅适配了一款15.6寸的eDP屏幕,包含的配件如下:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>0.5间距30pin单头同向排线</p>
<p>[[File:Orange_Pi_4A-image208.png|199x197px]]</p></li>
<li><p>15.6寸 eDP显示屏,分辨率为1920x1080。</p>
<div class="figure">
[[File:Orange_Pi_4A-image209.png|212x367px|8763EEF4-115F-4b95-A8FB-CA0A62F57B70]]
</div></li></ol>
</li>
<li><p>将30pin单头同向排线的FPC端连接到开发板的eDP接口,另一端连接到屏幕的eDP接口</p>
<p>[[File:Orange_Pi_4A-image210.png|199x91px]]</p></li>
<li><p>再给板子接通Type-C电源,并上电,系统启动后,就可以看到屏幕显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image290.png|380x227px]]</p></li></ol>
<span id="usb摄像头使用方法"></span>
== USB摄像头使用方法 ==
<ol style="list-style-type: decimal;">
<li><p>首先在开发板的USB接口中插入USB(UVC协议)摄像头</p></li>
<li><p>USB摄像头如果识别正常,在/dev下会生成相应的video设备节点</p>
<p>console:/ # '''ls /dev/video0'''</p>
<p>/dev/video0</p></li>
<li><p>然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考[[#adb的使用方法|'''ADB的使用方法''']]一小节的说明</p></li>
<li><p>在开发板资料下载页面的'''官方工具'''中下载USB摄像头测试APP</p>
<p>[[File:Orange_Pi_4A-image291.png|576x172px]]</p>
<p>[[File:Orange_Pi_4A-image292.png|575x145px]]</p></li>
<li><p>然后使用adb命令安装USB摄像头测试APP到Android系统中,当然也可以使用U盘拷贝的方式进行安装</p>
<p>test@test:~$ '''adb install usbcamera.apk'''</p></li>
<li><p>安装完后在Android的APP界面可以看到USB摄像头的启动图标</p>
<p>[[File:Orange_Pi_4A-image293.png|575x318px]]</p></li>
<li><p>然后双击打开USB摄像头APP就可以看到USB摄像头的输出视频了</p></li></ol>
<span id="android系统root说明"></span>
== Android系统ROOT说明 ==
'''<span class="mark">Orange Pi发布的Android系统已经ROOT,可以使用下面的方法来测试。</span>'''
<ol style="list-style-type: decimal;">
<li><p>在开发板资料下载页面的'''官方工具'''中下载'''rootcheck.apk'''</p>
<p>[[File:Orange_Pi_4A-image291.png|576x172px]]</p>
<p>[[File:Orange_Pi_4A-image294.png|575x124px]]</p></li>
<li><p>然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考[[#adb的使用方法|'''ADB的使用方法''']]一小节的说明</p></li>
<li><p>然后使用adb命令安装rootcheck.apk到Android系统中,当然也可以使用U盘拷贝的方式进行安装</p>
<p>test@test:~$ '''adb install rootcheck.apk'''</p></li>
<li><p>安装完后在Android的的APP界面可以看到ROOT测试工具的启动图标</p>
<p>[[File:Orange_Pi_4A-image295.png|575x313px]]</p></li>
<li><p>第一次打开'''ROOT测试工具'''后的显示界面如下图所示</p>
<p>[[File:Orange_Pi_4A-image296.png|576x126px]]</p></li>
<li><p>然后就可以点击'''CHECK NOW'''开始Android系统的ROOT状态的检查,检查完后的显示如下所示,可以看到Android系统已取得ROOT权限</p>
<p>[[File:Orange_Pi_4A-image297.png|575x130px]]</p></li></ol>
<span id="pin-接口-gpiouartspi-测试"></span>
== 40 pin 接口 GPIO、UART、SPI 测试 ==
<span id="pin的gpio口测试方法"></span>
=== 40 pin的GPIO口测试方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先在桌面中打开wiringOP APP</p>
<p>[[File:Orange_Pi_4A-image298.png|576x290px]]</p></li>
<li><p>然后点击'''GPIO_TEST'''按钮打开GPIO测试界面</p>
<p>[[File:Orange_Pi_4A-image299.png|413x77px]]</p></li>
<li><p>GPIO测试界面如下图所示,左边的两排'''CheckBox'''按钮跟40 pin引脚是一一对应的关系。当勾选'''CheckBox'''按钮时,对应的GPIO引脚会被设置为'''OUT'''模式,引脚电平设置为高电平;当取消勾选时,GPIO引脚电平设置为低电平;当点击右边的'''GPIO READALL'''按钮时,可以获取到wPi号、GPIO模式、引脚电平等信息。当点击'''BLINK ALL GPIO'''按钮时,所有引脚会不断地切换高低电平</p>
<p>[[File:Orange_Pi_4A-image300.png|575x293px]]</p></li>
<li><p>然后点击'''GPIO READALL'''按钮,输出信息如下图所示:</p>
<p>[[File:Orange_Pi_4A-image301.png|575x291px]]</p></li>
<li><p>开发板40 pin中总共有28个GPIO口可以使用,下面以7号引脚——对应GPIO为PB4 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平。首先点击7号引脚对应的'''CheckBox'''按钮,当按钮为选中状态时,7号引脚会设置为高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''3.3v''',说明设置高电平成功</p>
<p>[[File:Orange_Pi_4A-image302.png|575x301px]]</p></li>
<li><p>然后点击'''GPIO READALL'''按钮,可以看到当前的7号引脚模式为'''OUT''',引脚电平为高电平</p>
<p>[[File:Orange_Pi_4A-image303.png|575x288px]]</p></li>
<li><p>再次点击下图的'''CheckBox'''按钮取消勾选状态,7号引脚会设置为低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''0v''',说明设置低电平成功</p>
<p>[[File:Orange_Pi_4A-image304.png|576x287px]]</p></li>
<li><p>然后点击'''GPIO READALL'''按钮,可以看到当前的7号引脚模式为OUT,引脚电平为低电平</p>
<p>[[File:Orange_Pi_4A-image305.png|575x290px]]</p></li></ol>
<span id="pin的uart测试方法"></span>
=== 40 pin的UART测试方法 ===
<ol style="list-style-type: decimal;">
<li><p>Android中默认打开了'''UART2'''和'''UART7''',对应的设备节点为'''/dev/ttyAS2'''和'''/dev/ttyAS7'''</p>
<p>t527-demo:/ $ '''ls /dev/ttyAS*'''</p>
<p>ttyAS0 ttyAS1 ttyAS2 ttyAS7</p></li>
<li><p>首先在桌面中打开wiringOP APP</p>
<p>[[File:Orange_Pi_4A-image298.png|576x290px]]</p></li>
<li><p>然后点击'''UART_TEST'''按钮打开UART测试界面</p>
<p>[[File:Orange_Pi_4A-image306.png|505x94px]]</p></li>
<li><p>wiringOP的串口测试界面如下图所示</p></li></ol>
[[File:Orange_Pi_4A-image307.png|510x130px]]
<ol start="5" style="list-style-type: decimal;">
<li><p>以测试UART2为例,在选择框中选择'''/dev/ttyAS2'''节点</p>
<p>[[File:Orange_Pi_4A-image308.png|507x133px]]</p></li>
<li><p>再在编辑框中输入想要设置的波特率,然后点击'''OPEN'''按钮打开'''/dev/ttyAS2'''节点,打开成功后,'''OPEN'''按钮变为不可选中状态,'''CLOSE'''按钮和'''SEND'''按钮变为可选中状态</p></li></ol>
[[File:Orange_Pi_4A-image309.png|505x132px]]
<ol start="7" style="list-style-type: decimal;">
<li>然后使用杜邦线短接uart2的rx和tx引脚</li></ol>
{| class="wikitable"
|-
|
| style="text-align: left;"| uart2
|-
| tx引脚
| style="text-align: left;"| 对应40 pin的11号引脚
|-
| rx引脚
| style="text-align: left;"| 对应40 pin的13号引脚
|}
<ol start="8" style="list-style-type: decimal;">
<li>然后可以在下面的发送编辑框中输入一段字符,点击'''SEND'''按钮开始发送</li></ol>
[[File:Orange_Pi_4A-image310.png|511x138px]]
<ol start="9" style="list-style-type: decimal;">
<li>如果一切正常,接收框内会显示已接收到的字符串</li></ol>
[[File:Orange_Pi_4A-image311.png|516x136px]]
<span id="pin的spi测试方法"></span>
=== 40 pin的SPI测试方法 ===
<ol style="list-style-type: decimal;">
<li><p>40 pin中可以用的SPI为SPI1,对应的设备节点为'''/dev/spidev1.0'''</p>
<p>[[File:Orange_Pi_4A-image298.png|576x290px]]</p></li>
<li><p>这里演示下通过'''w25q64'''模块来测试SPI1接口,首先在SPI1接口接入w25q64模块</p></li></ol>
'''<span class="mark">如果没有</span>w25q64模块也没关系,因为开发板上有一个SPIFlash接在了SPI0上,在安卓中SPI0的配置默认也打开了,所以我们也可以直接使用板载的SPIFlash测试。'''
<ol start="3" style="list-style-type: decimal;">
<li><p>然后在桌面中打开wiringOP APP</p></li>
<li><p>然后点击'''SPI_TEST'''按钮打开SPI的测试界面</p>
<p>[[File:Orange_Pi_4A-image312.png|518x96px]]</p></li>
<li><p>然后在左上角选择spi的设备节点,如果直接测试板载的SPIFlash,那么保持默认的'''/dev/spidev0.0'''即可,如果在40 pin的spi1上接了'''w25q64'''模块,那么就请选择'''/dev/spidev1.0'''</p>
<p>[[File:Orange_Pi_4A-image313.png|296x135px]]</p></li>
<li><p>然后点击'''OPEN'''按钮初始化SPI</p></li></ol>
[[File:Orange_Pi_4A-image314.png|295x168px]]
<ol start="7" style="list-style-type: decimal;">
<li><p>然后填充需要发送的字节,比如读取板载SPIFlash的ID信息,在data[0]中填入地址0x9f,然后点击'''TRANSFER'''按钮</p>
<p>[[File:Orange_Pi_4A-image315.png|294x169px]]</p></li>
<li><p>最后APP会显示读取到的板载SPI Flash的ID信息</p></li></ol>
[[File:Orange_Pi_4A-image316.png|296x193px]]
<ol start="9" style="list-style-type: decimal;">
<li><p>如果是读取接在40 pin SPI1上的w25q64模块,那么读取到的ID信息如下图所示</p>
<p>[[File:Orange_Pi_4A-image317.png|302x201px]]</p></li>
<li><p>w25q64模块的MANUFACTURER ID为EFh,Device ID为4017h,跟上面读取到的值是对应的(h代表是16进制)</p>
<p>[[File:Orange_Pi_4A-image318.png|336x113px]]</p></li></ol>
<span id="pin的i2c测试方法"></span>
=== 40 pin的I2C测试方法 ===
<ol style="list-style-type: decimal;">
<li><p>Android中默认打开了40 pin中的i2c4和i2c5,对应的设备节点分别为'''/dev/i2c-4'''和'''/dev/i2c-5'''</p>
<p>console:/ # '''ls''' '''/dev/i2c-4 /dev/i2c-5'''</p>
<p>/dev/i2c-4 /dev/i2c-5</p></li>
<li><p>首先在桌面中打开wiringOP APP</p>
<p>[[File:Orange_Pi_4A-image298.png|576x290px]]</p></li>
<li><p>然后点击'''I2C_TEST'''按钮打开i2c的测试界面</p>
<p>[[File:Orange_Pi_4A-image319.png|506x110px]]</p></li>
<li><p>wiringOP的i2c测试界面如下图所示</p>
<p>[[File:Orange_Pi_4A-image320.png|353x159px]]</p></li>
<li><p>以测试i2c4为例,在选择框中选择'''/dev/i2c-4节点'''</p></li></ol>
[[File:Orange_Pi_4A-image321.png|273x195px]]
<ol start="6" style="list-style-type: decimal;">
<li><p>然后在40 pin的i2c4引脚上接一个i2c设备,这里以ds1307 rtc模块为例</p>
<p>[[File:Orange_Pi_4A-image164.png|121x103px]]</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| '''RTC模块的引脚'''
| style="text-align: left;"| '''开发板40 pin对应的引脚'''
|-
| style="text-align: left;"| '''5V'''
| style="text-align: left;"| '''2号引脚'''
|-
| style="text-align: left;"| '''GND'''
| style="text-align: left;"| '''6号引脚'''
|-
| style="text-align: left;"| '''SDA'''
| style="text-align: left;"| '''3号引脚'''
|-
| style="text-align: left;"| '''SCL'''
| style="text-align: left;"| '''5号引脚'''
|}
<ol start="7" style="list-style-type: decimal;">
<li><p>ds1307 rtc模块的i2c地址为0x68,接好线后,我们可以在串口命令行中使用'''i2cdetect -y -r 4'''命令查看下是否能扫描到ds1307 rtc模块的i2c地址。如下图所示,如果能看到0x68这个地址,说明ds1307 rtc模块接线正确。</p>
<p>console:/ # '''i2cdetect -y 4'''</p>
<div class="figure">
[[File:Orange_Pi_4A-image322.png|467x199px|D16403AF-C244-45ed-81FE-308A42F1E840]]
</div></li>
<li><p>然后在wiringOP中设置i2c的地址为0x68,再点击'''OPEN'''按钮打开i2c4</p>
<p>[[File:Orange_Pi_4A-image323.png|360x194px]]</p></li>
<li><p>点击'''OPEN'''按钮打开i2c4后的显示如下所示:</p>
<p>[[File:Orange_Pi_4A-image324.png|366x216px]]</p></li>
<li><p>然后我们测试下往rtc模块的寄存器中写入一个值,比如往0x1c地址写入0x55</p>
<ol style="list-style-type: lower-alpha;">
<li><p>我们首先设置需要写入的寄存器的地址为0x1c</p>
<p>[[File:Orange_Pi_4A-image325.png|366x217px]]</p></li>
<li><p>然后设置需要写入的值为0x55</p>
<p>[[File:Orange_Pi_4A-image326.png|316x191px]]</p></li>
<li><p>然后点击'''WRITE BYTE'''按钮执行写入的动作</p>
<p>[[File:Orange_Pi_4A-image327.png|322x193px]]</p></li></ol>
</li>
<li><p>然后点击'''READ BYTE'''按钮读取下0x1c寄存器的值,如果显示为0x55,就说明i2c读写测试通过</p>
<p>[[File:Orange_Pi_4A-image328.png|326x196px]]</p></li></ol>
= 附录 =
== 用户手册更新历史 ==
{| class="wikitable"
|-
| style="text-align: center;"| '''版本'''
| style="text-align: center;"| '''日期'''
| style="text-align: center;"| '''更新说明'''
|-
| style="text-align: center;"| v1.0
| style="text-align: center;"| 2024-11-14
| style="text-align: center;"| 初始版本
|}
== 镜像更新历史 ==
{| class="wikitable"
|-
| style="text-align: center;"| 日期
| style="text-align: center;"| '''更新说明'''
|-
| style="text-align: center;"| 2024-11-14
| style="text-align: left;"| OrangePi4A_T527_Android13_v1.0.0.tar.gz
OrangePi4A_T527_Android13_lcd_v1.0.0.tar.gz
Orangepi4a_1.0.0_ubuntu_jammy_server_linux5.15.147.7z
Orangepi4a_1.0.0_debian_bookworm_server_linux5.15.147.7z
Or angepi4a_1.0.0_ubuntu_jammy_desktop_gnome_linux5.15.147.7z
Orang epi4a_1.0.0_debian_bookworm_desktop_gnome_linux5.15.147.7z
* 初始版本
|}
'''用户手册'''
<div class="figure">
[[File:Orange_Pi_4A-image2.jpeg|575x419px|_MG_3225]]
</div>
<span id="orange-pi-4a的基本特性"></span>
= Orange Pi 4A的基本特性 =
<span id="什么是-orange-pi-4a"></span>
== 什么是 Orange Pi 4A ==
Orange Pi 4A采用了全志T527八核Cortex-A55 + HiFI4 DSP + RISV-V多核异构工业级处理器,支持2TOPS NPU,满足边缘智能AI加速应用;支持2GB/4GB LPDDR4/4X,提供H.265 4K@60fps和H.264 4K@60fps视频解码,H.264 4K@25fps编码;接口丰富,包括千兆以太网、PCIe2.0、USB2.0、MIPI-CSI、MIPI-DSI、40Pin扩展接口等常用功能接口。支持Ubuntu、Debian、Android 13等操作系统。
Orange Pi 4A可为生成式AI、人工智能 算法的场景化落地提供坚实的硬件基础,可广泛应用于智能工控、智能商显、零售支付、智慧教育、商用机器人、车载终端、视觉辅驾、边缘计算、智能配电终端等。
<span id="orange-pi-4a的用途"></span>
== Orange Pi 4A的用途 ==
我们可以用它实现:
* 一台小型的Linux桌面计算机
* 一台小型的Linux网络服务器
* Android平板
* Android 游戏机等
'''当然还有其他更多的功能,依托强大的生态系统以及各式各样的扩展配件,Orange Pi可以帮助用户轻松实现从创意到原型再到批量生产的交付,是创客、梦想家、业余爱好者的理想创意平台。'''
<span id="orange-pi-4a是为谁设计的"></span>
== Orange Pi 4A是为谁设计的 ==
Orange Pi 开发板不仅仅是一款消费品,同时也是给任何想用技术来进行创作创新的人设计的。它是一款简单、有趣、实用的工具,你可以用它去打造你身边的世界。
<span id="orange-pi-4a的硬件特性"></span>
== Orange Pi 4A的硬件特性 ==
{| class="wikitable"
|-
| style="text-align: center;"| '''硬件特性介绍'''
| style="text-align: center;"|
|-
| style="text-align: center;"| '''处理器'''
| style="text-align: center;"| <span class="mark">T527</span>,8核ARM CortexTM-A55@1.8GHz
HIFI4 Audio DSP@600MHz
RISC-V@200MHz
GPU:G57 MC1
VPU: H.265 4K@60fps解码,H.264 4K@60fps解码,H.264 4K@25fps编码
<span class="mark">NPU:2TOPS</span>
|-
| style="text-align: center;"| '''内存'''
| style="text-align: center;"| LPDDR4/4X:2GB/4GB可选
|-
| style="text-align: center;"| '''存储'''
| style="text-align: center;"| eMMC module可选:16GB/32GB/64GB/128GB可选
<span class="mark">SPI Flash:128Mb(默认贴)</span>、256Mb可选
M.2 M-KEY Socket:PCIe2.0 NVMe SSD
uSD card slot:supports up to 128GB uSD card
|-
| style="text-align: center;"| '''Wi-Fi+蓝牙'''
| style="text-align: center;"| Wi-Fi+蓝牙二合一模块
Wi-Fi5.0+BT 5.0,BLE
|-
| style="text-align: center;"| '''以太网'''
| style="text-align: center;"| <span class="mark">10/100/1000Mbps以太网</span>
|-
| style="text-align: center;"| '''显示'''
| style="text-align: center;"| 1x HDMI TX 2.0 interface up to 4K@60fps
1x 4-lane MIPI-DSI
1x eDP1.3
|-
| style="text-align: center;"| '''摄像头'''
| style="text-align: center;"| 1x 2-lane MIPI-CSI camera interface
1x 4-lane MIPI-CSI camera interface
|-
| style="text-align: center;"| '''USB'''
| style="text-align: center;"| <span class="mark">1xUSB Type-A 2.0</span>
<span class="mark">3xUSB Type-A 2.0 HOS</span><span class="mark">T</span>
1xUSB 2.0 HOST 预留供客户扩展
|-
| style="text-align: center;"| '''ADC'''
| style="text-align: center;"| 预留4Pin接口,可接入2路ADC,最大输入1.8V
|-
| style="text-align: center;"| '''音频'''
| style="text-align: center;"| 3.5mm耳机孔音频输入/输出
|-
| style="text-align: center;"| '''按键'''
| style="text-align: center;"| 1* BOOT,1*RESET,1 *PWR ON
|-
| style="text-align: center;"| '''RTC'''
| style="text-align: center;"| 2Pin备用电池接口(Pitch=1.27mm)
|-
| style="text-align: center;"| '''40Pin'''
| style="text-align: center;"| 40Pin功能扩展接口,支持以下接口类型:
<span class="mark">GPIO、UART、I2C、SPI、PWM</span>
|-
| style="text-align: center;"| '''DEBUG'''
| style="text-align: center;"| <span class="mark">3Pin</span><span class="mark">调试串口</span>
|-
| style="text-align: center;"| '''电源'''
| style="text-align: center;"| <span class="mark">Type-C 5V 5A DCIN</span>
|-
| style="text-align: center;"| '''支持的OS'''
| style="text-align: center;"| Ubuntu、Debian、Android13等
|-
| style="text-align: center;"| '''外观规格介绍'''
| style="text-align: center;"|
|-
| style="text-align: center;"| '''PCB'''
| style="text-align: center;"| 89mm*56mm*1.6mm
|-
| style="text-align: center;"| '''重量'''
| style="text-align: center;"| 52g
|}
<span id="orange-pi-4a的顶层视图和底层视图"></span>
== Orange Pi 4A的顶层视图和底层视图 ==
'''顶层视图:'''
[[File:Orange_Pi_4A-image3.png|439x269px]]
'''底层视图:'''
[[File:Orange_Pi_4A-image4.png|448x278px]]
<span id="orange-pi-4a的接口详情图"></span>
== Orange Pi 4A的接口详情图 ==
<div class="figure">
[[File:Orange_Pi_4A-image5.jpeg|575x770px|OPI_4A__cn]]
</div>
[[File:Orange_Pi_4A-image6.png|575x251px]]
'''四个定位孔的直径都是3.0mm。'''
= '''开发板使用介绍''' =
== 准备需要的配件 ==
<ol style="list-style-type: decimal;">
<li><p>TF卡,最小8GB容量的'''class10'''级或以上的高速闪迪卡</p>
<p>[[File:Orange_Pi_4A-image7.png|124x96px]]</p></li>
<li><p>TF卡读卡器,用于读写TF卡</p>
<p>[[File:Orange_Pi_4A-image8.png|139x96px]]</p></li>
<li><p>HDMI接口的显示器</p>
<p>[[File:Orange_Pi_4A-image9.png|256x195px]]</p></li>
<li><p>HDMI转HDMI连接线,用于将开发板连接到HDMI显示器或者电视进行显示</p>
<p>[[File:Orange_Pi_4A-image10.png|199x129px]]</p></li>
<li><p>10.1寸MIPI屏幕,用于显示开发板的系统界面(此屏幕包括转接板和OPi5Plus/OPi5B/OPi5/OPi5Pro/OPi5Max/OPi4A通用)</p>
<div class="figure">
[[File:Orange_Pi_4A-image11.jpeg|223x203px|IMG_7546]]
</div></li>
<li><p>电源适配器,Orange Pi 4A建议使用5V/5A的Type-C电源供电</p>
<p>[[File:Orange_Pi_4A-image12.png|188x133px]]</p>
<p>'''开发板的Type-C电源接口不支持PD协商功能,只支持固定的5V电压输入。'''</p></li>
<li><p>USB接口的鼠标和键盘,只要是标准USB接口的鼠标和键盘都可以,鼠标和键盘可以用来控制Orange Pi开发板</p>
<p>[[File:Orange_Pi_4A-image13.png|206x170px]]</p></li>
<li><p>USB摄像头</p>
<p>[[File:Orange_Pi_4A-image14.png|255x148px]]</p></li>
<li><p>百兆或者千兆网线,用于将开发板连接到因特网</p>
<p>[[File:Orange_Pi_4A-image15.png|143x112px]]</p></li>
<li><p>5V的散热风扇,如下图所示,开发板专门引出5V输出接口用于接散热风扇,间距为'''2.54mm''',散热风扇的电源接口参照这个规格去购买即可。</p>
<p>'''注意,开发板插上电源后5V引脚就可以直接使用,无需其他设置,另外5V引脚输出的电压是无法通过软件调节和关闭的。'''</p>
<p>[[File:Orange_Pi_4A-image16.png|420x124px]]</p></li>
<li><p>USB2.0公对公数据线,用于adb调试、烧录镜像到eMMC等功能</p>
<div class="figure">
[[File:Orange_Pi_4A-image17.png|158x155px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
</div></li>
<li><p>USB转TTL模块和杜邦线,使用串口调试功能时,需要USB转TTL模块和杜邦线来连接开发板和电脑</p>
<p>[[File:Orange_Pi_4A-image18.png|176x145px]] [[File:Orange_Pi_4A-image19.png|305x110px]]</p>
<p>'''注意,开发板使用的TTL电平是3.3v的,除了上图所示的USB转TTL模块外,其他类似的3.3v的USB转TTL模块一般也都是可以的。'''</p></li>
<li><p>安装有Ubuntu和Windows操作系统的X64电脑</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| 1
| style="text-align: left;"| Ubuntu22.04 PC
| style="text-align: left;"| 可选,用于编译Android和Linux源码
|-
| style="text-align: left;"| 2
| style="text-align: left;"| Windows PC
| style="text-align: left;"| 用于烧录Android和Linux镜像
|}
== 下载开发板的镜像和相关的资料 ==
# 中文版资料的下载网址为
'''http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-4A.html'''
<ol start="2" style="list-style-type: decimal;">
<li><p>英文版资料的下载网址为</p>
<p>'''http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-4A.html'''</p></li>
<li><p>资料主要包含</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''Linux源码''':保存在Github上</p></li>
<li><p>'''Android镜像''':保存在百度云盘和谷歌网盘上</p></li>
<li><p>'''Ubuntu镜像''':保存在百度云盘和谷歌网盘上</p></li>
<li><p>'''Debian镜像''':保存在百度云盘和谷歌网盘上</p></li>
<li><p>'''用户手册和原理图:'''芯片相关的数据手册也会放在这里</p></li>
<li><p>'''官方工具:'''主要包括开发板使用过程中需要用到的软件</p></li></ol>
</li></ol>
<span id="基于windows-pc将linux镜像烧写到tf卡的方法"></span>
== 基于Windows PC将Linux镜像烧写到TF卡的方法 ==
'''注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian或者Ubuntu这样的Linux发行版镜像。'''
<span id="使用balenaetcher烧录linux镜像的方法"></span>
=== '''使用'''balenaEtcher'''烧录Linux镜像的方法''' ===
# 首先准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡
# 然后使用读卡器把TF卡插入电脑
# 从[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”'''.img'''”结尾的文件就是操作系统的镜像文件,大小一般都在1GB以上
# 然后下载Linux镜像的烧录软件——'''balenaEtcher''',下载地址为
[https://www.balena.io/etcher/ '''https://www.balena.io/etcher/''']
<ol start="5" style="list-style-type: decimal;">
<li><p>进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方</p>
<p>[[File:Orange_Pi_4A-image20.png|456x219px]]</p></li>
<li><p>然后可以选择下载balenaEtcher的Portable版本的软件,Portable版本无需安装,双击打开就可以使用</p>
<p>[[File:Orange_Pi_4A-image21.png|468x173px]]</p></li>
<li><p>如果下载的是需要安装版本的balenaEtcher,请先安装再使用。如果下载的Portable版本balenaEtcher,直接双击打开即可,打开后的balenaEtcher界面如下图所示</p>
<p>[[File:Orange_Pi_4A-image22.png|335x211px]]</p></li></ol>
'''打开balenaEtcher时如果提示下面的错误:'''
[[File:Orange_Pi_4A-image23.png|206x162px]]
'''请选择balenaEtcher后点击右键,然后选择以管理员身份运行。'''
[[File:Orange_Pi_4A-image24.png|114x37px]]
<ol start="8" style="list-style-type: decimal;">
<li><p>使用balenaEtcher烧录Linux镜像的具体步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先选择要烧录的Linux镜像文件的路径</p></li>
<li><p>然后选择TF卡的盘符</p></li>
<li><p>最后点击Flash就会开始烧录Linux镜像到TF卡中</p>
<p>[[File:Orange_Pi_4A-image25.png|501x281px]]</p></li></ol>
</li>
<li><p>balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中</p>
<p>[[File:Orange_Pi_4A-image26.png|506x317px]]</p></li>
<li><p>Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验</p>
<p>[[File:Orange_Pi_4A-image27.png|519x325px]]</p></li>
<li><p>成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了</p>
<p>[[File:Orange_Pi_4A-image28.png|523x324px]]</p></li></ol>
<span id="使用win32diskimager烧录linux镜像的方法"></span>
=== '''使用Win32Diskimager烧录Linux镜像的方法''' ===
<ol style="list-style-type: decimal;">
<li><p>首先准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡</p></li>
<li><p>然后使用读卡器把TF卡插入电脑</p></li>
<li><p>接着格式化TF卡</p>
<ol style="list-style-type: lower-alpha;">
<li>可以使用'''SD Card Formatter'''这个软件格式化TF卡,其下载地址为</li></ol>
</li></ol>
[https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip '''https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip''']
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>下载完后直接解压安装即可,然后打开软件</p></li>
<li><p>如果电脑只插入了TF卡,则”'''Select card'''”一栏中会显示TF卡的盘符,如果电脑插入了多个USB存储设备,可以通过下拉框选择TF卡对应的盘符</p>
<div class="figure">
[[File:Orange_Pi_4A-image29.png|209x228px|选区_199]]
</div></li>
<li><p>然后点击”'''Format'''”,格式化前会弹出一个警告框,选择”'''是(Y)'''”后就会开始格式化</p></li></ol>
[[File:Orange_Pi_4A-image30.png|304x147px]]
<ol start="5" style="list-style-type: lower-alpha;">
<li><p>格式化完TF卡后会弹出下图所示的信息,点击确定即可</p>
<p>[[File:Orange_Pi_4A-image31.png|186x149px]]</p></li></ol>
<!-- -->
<ol start="4" style="list-style-type: decimal;">
<li><p>从[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”'''.img'''”结尾的文件就是操作系统的镜像文件,大小一般都在1GB以上</p></li>
<li><p>使用'''Win32Diskimager'''烧录Linux镜像到TF卡</p>
<ol style="list-style-type: lower-alpha;">
<li>Win32Diskimager的下载页面为</li></ol>
</li></ol>
[http://sourceforge.net/projects/win32diskimager/files/Archive/ '''http://sourceforge.net/projects/win32diskimager/files/Archive/''']
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>下载完后直接安装即可,Win32Diskimager界面如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先选择镜像文件的路径</p></li>
<li><p>然后确认下TF卡的盘符和”'''设备'''”一栏中显示的一致</p></li>
<li><p>最后点击”'''写入'''”即可开始烧录</p>
<p>[[File:Orange_Pi_4A-image32.png|297x206px]]</p></li></ol>
</li>
<li><p>镜像写入完成后,点击”'''退出'''”按钮退出即可,然后就可以拔出TF卡插到开发板中启动</p></li></ol>
<span id="基于ubuntu-pc将linux镜像烧写到tf卡的方法"></span>
== 基于Ubuntu PC将Linux镜像烧写到TF卡的方法 ==
'''注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian或者Ubuntu这样的Linux发行版镜像,Ubuntu PC指的是安装了Ubuntu系统的个人电脑。'''
# 首先准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡
# 然后使用读卡器把TF卡插入电脑
# 下载balenaEtcher软件,下载地址为
[https://www.balena.io/etcher/ '''https://www.balena.io/etcher/''']
<ol start="4" style="list-style-type: decimal;">
<li><p>进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方</p>
<p>[[File:Orange_Pi_4A-image20.png|489x235px]]</p></li>
<li><p>然后选择下载Linux版本的软件即可</p>
<p>[[File:Orange_Pi_4A-image33.png|485x184px]]</p></li>
<li><p>从[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”'''.img'''”结尾的文件就是操作系统的镜像文件,大小一般都在1GB以上。7z结尾的压缩包的解压命令如下所示:</p>
<p>test@test:~$ '''7z x Orangepi4a_1.0.0_ubuntu_jammy_desktop_linux5.15.147.7z'''</p>
<p>test@test:~$ '''ls Orangepi4a_1.0.0_ubuntu_jammy_desktop_linux5.15.147.*'''</p>
<p>Orangepi4a_1.0.0_ubuntu_jammy_desktop_linux5.15.147.7z '''Orangepi4a_1.0.0_ubuntu_jammy_desktop_linux5.15.147.sha''' #校验和文件</p>
<p>'''Orangepi4a_1.0.0_ubuntu_jammy_desktop_linux5.15.147.img''' #镜像文件</p></li>
<li><p>解压镜像后可以先用'''sha256sum -c *.sha'''命令计算下校验和是否正确,如果提示'''成功'''说明下载的镜像没有错,可以放心的烧录到TF卡,如果提示'''校验和不匹配'''说明下载的镜像有问题,请尝试重新下载</p>
<p>test@test:~$ '''sha256sum -c *.sha'''</p>
<p>Orangepi4a_1.0.0_ubuntu_jammy_desktop_linux5.15.147.img: '''成功'''</p></li>
<li><p>然后在Ubuntu PC的图形界面双击'''balenaEtcher-1.14.3-x64.AppImage'''即可打开balenaEtcher('''无需安装'''),balenaEtcher打开后的界面显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image34.png|423x251px]]</p></li>
<li><p>使用balenaEtcher烧录Linux镜像的具体步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先选择要烧录的Linux镜像文件的路径</p></li>
<li><p>然后选择TF卡的盘符</p></li>
<li><p>最后点击Flash就会开始烧录Linux镜像到TF卡中</p>
<p>[[File:Orange_Pi_4A-image35.png|431x278px]]</p></li></ol>
</li>
<li><p>balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中</p>
<p>[[File:Orange_Pi_4A-image36.png|576x247px]]</p></li>
<li><p>Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验</p>
<p>[[File:Orange_Pi_4A-image37.png|576x252px]]</p></li>
<li><p>成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了</p>
<p>[[File:Orange_Pi_4A-image38.png|576x340px]]</p></li></ol>
<span id="烧写linux镜像到emmc中的方法"></span>
== 烧写Linux镜像到eMMC中的方法 ==
见[[#烧写linux镜像到emmc的方法|'''烧写linux镜像到EMMC的方法''']]
<span id="烧写android镜像到tf卡的方法"></span>
== 烧写Android镜像到TF卡的方法 ==
'''开发板的Android镜像只能在Windows平台下使用PhoenixCard软件烧录到TF卡中,PhoenixCard软件的版本必须为PhonixCard-4.2.8。'''
'''请不要用烧录Linux镜像的软件,如Win32Diskimager或者balenaEtcher来烧录安卓镜像。'''
'''另外PhoenixCard这款软件没有Linux和Mac平台的版本,所以在Linux和Mac平台下是无法烧录安卓镜像到TF卡中的。'''
<ol style="list-style-type: decimal;">
<li><p>首先请确保Windows系统已经安装了'''Microsoft Visual C++ 2008 Redistrbutable - x86'''</p>
<p>[[File:Orange_Pi_4A-image39.png|449x293px]]</p></li>
<li><p>如果没有安装'''Microsoft Visual C++ 2008 Redistrbutable - x86'''</p>
<p>,使用'''PhoenixCard'''格式化TF卡或者烧录Android镜像会提示下面的错误</p>
<div class="figure">
[[File:Orange_Pi_4A-image40.png|527x369px|NUQB$Q%(){1CV6M6WK4N`5J]]
</div></li>
<li><p>'''Microsoft Visual C++ 2008 Redistrbutable - x86'''的安装包可以从Orange Pi 4A的[http://www.orangepi.cn/html/serviceAndSupport/index.html '''官方工具''']中下载到,也可以去[https://www.microsoft.com/zh-cn/download/details.aspx?id=26368 '''微软官网''']下载</p>
<p>[[File:Orange_Pi_4A-image41.png|240x93px]] [[File:Orange_Pi_4A-image42.png|200x95px]]</p></li>
<li><p>然后准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡</p></li>
<li><p>然后使用读卡器把TF卡插入电脑</p></li>
<li><p>从[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']下载Android镜像和PhoenixCard烧写工具,请确保PhonenixCrad工具的版本为'''PhonixCard-4.2.8,请不要用低于4.2.8版本的PhonixCard软件来烧录Android镜像,'''低于这个版本的PhonixCard工具烧写的Android镜像可能会有问题</p>
<p>[[File:Orange_Pi_4A-image43.png|575x169px]]</p></li>
<li><p>然后使用解压软件解压下载的Android镜像的压缩包,解压后的文件中,以”'''.img'''” 结尾的文件就是Android镜像文件,大小在1GB以上。如果不知道怎么解压Android镜像的压缩包,可以安装一个[https://yasuo.360.cn/ '''360压缩软件''']来解压镜像。</p>
<p>[[File:Orange_Pi_4A-image44.png|438x158px]]</p></li>
<li><p>然后使用解压软件解压'''PhonixCard4.2.8.zip''',此软件无需安装,在解压后的文件夹中找到PhoenixCard打开即可</p>
<p>[[File:Orange_Pi_4A-image45.png|576x113px]]</p></li>
<li><p>打开PhoenixCard后,如果TF卡识别正常,会在中间的列表中显示TF卡的盘符和容量,'''请务必确认显示的盘符和你想烧录的TF卡的盘符是一致的''',如果没有显示可以尝试拔插下TF卡,或者点击PhoenixCard中的”'''刷新盘符'''”按钮</p></li></ol>
[[File:Orange_Pi_4A-image46.png|575x137px]]
<ol start="10" style="list-style-type: decimal;">
<li><p>确认完盘符后,先格式化TF卡,点击PhoenixCard中”'''恢复卡'''”按钮即可(如果”'''恢复卡'''”按钮为灰色的无法按下,可以先点击下”'''刷新盘符'''”按钮)</p>
<p>[[File:Orange_Pi_4A-image47.png|575x316px]]</p>
<p>'''如果格式化有问题,请尝试拔插下TF卡后再测试,如果重新拔插TF卡后还是有问题,可以重启下Window电脑或者换一台电脑再试下。'''</p></li>
<li><p>然后开始将Android镜像写入TF卡</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先在”'''固件'''”一栏中选择Android镜像的路径</p></li>
<li><p>在”'''制作卡的种类'''”中选择”'''启动卡'''”</p></li>
<li><p>然后点击”'''烧卡'''”按钮就会开始烧录</p>
<p>[[File:Orange_Pi_4A-image48.png|576x452px]]</p></li></ol>
</li>
<li><p>烧录完后PhoenixCard的显示如下图所示,此时点击”'''关闭'''”按钮即可退出PhoenixCard,然后就可以把TF卡从电脑中拔出来插到开发板中启动了</p>
<p>[[File:Orange_Pi_4A-image49.png|575x452px]]</p>
<p>'''烧录完Android系统后在Windows中TF卡只能看到一个128 MB的分区,显示的分区如下图所示(有些电脑可能会弹出二十几个磁盘分区,但也只能打开128 MB的那个分区),请注意,这是正常的,请不要以为TF卡烧坏了。之所以这样,是因为安卓系统总共有二十几个分区,但大部分分区在Windows系统中是无法正常识别的。此时,请放心的拔下TF卡然后插入开发板中启动即可。'''</p>
<p>[[File:Orange_Pi_4A-image50.png|193x45px]]</p>
<p>'''安卓系统启动后,使用下面的命令可以看到TF卡中的这二十几个分区:'''</p>
<p>[[File:Orange_Pi_4A-image51.png|391x116px]]</p>
<p>'''使用df -h命令可以看到32GB的TF卡烧录完安卓系统后大概还有24 GB的空间可以用使用(二十几个分区并不会都挂载到安卓系统中,重点关注这些能看到的分区即可)。'''</p>
<p>[[File:Orange_Pi_4A-image52.png|371x192px]]</p></li></ol>
<span id="烧写android镜像到emmc的方法"></span>
== 烧写Android镜像到eMMC的方法 ==
'''开发板的Android镜像只能在Windows平台下使用PhoenixCard软件烧录到eMMC中,PhoenixCard软件的版本必须为PhonixCard-4.2.8。'''
'''请不要用烧录Linux镜像的软件,如Win32Diskimager或者balenaEtcher来烧录安卓镜像。'''
'''另外PhoenixCard这款软件没有Linux和Mac平台的版本,所以在Linux和Mac平台下是无法烧录安卓镜像到eMMC中的。'''
<ol style="list-style-type: decimal;">
<li><p>开发板预留了eMMC模块的扩展接口,烧录系统到eMMC前,首先需要购买一个与开发板eMMC接口相匹配的eMMC模块。然后将eMMC模块安装到开发板上。eMMC模块和插入开发板的方法如下所示:</p>
<p>[[File:Orange_Pi_4A-image53.png|115x84px]] [[File:Orange_Pi_4A-image54.png|120x87px]]</p>
<p>[[File:Orange_Pi_4A-image55.png|270x159px]]</p></li>
<li><p>首先请注意,此方法需要借助TF卡来完成,主要分为如下两步</p>
<ol style="list-style-type: lower-alpha;">
<li><p>先使用PhoenixCard将Android固件以量产卡的方式烧录到TF卡中</p></li>
<li><p>然后使用TF卡将Android固件烧录到 eMMC 中</p></li></ol>
</li>
<li><p>请确保Windows系统已经安装了'''Microsoft Visual C++ 2008 Redistrbutable - x86'''</p>
<p>[[File:Orange_Pi_4A-image39.png|449x293px]]</p></li>
<li><p>如果没有安装'''Microsoft Visual C++ 2008 Redistrbutable - x86'''</p>
<p>,使用'''PhoenixCard'''格式化TF卡或者烧录Android镜像会提示下面的错误</p>
<div class="figure">
[[File:Orange_Pi_4A-image40.png|527x369px|NUQB$Q%(){1CV6M6WK4N`5J]]
</div></li>
<li><p>'''Microsoft Visual C++ 2008 Redistrbutable - x86'''的安装包可以从Orange Pi 4A的[http://www.orangepi.cn/html/serviceAndSupport/index.html '''官方工具''']中下载到,也可以去[https://www.microsoft.com/zh-cn/download/details.aspx?id=26368 '''微软官网''']下载</p>
<p>[[File:Orange_Pi_4A-image41.png|240x93px]] [[File:Orange_Pi_4A-image42.png|200x95px]]</p></li>
<li><p>然后准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡</p></li>
<li><p>然后使用读卡器把TF卡插入电脑</p></li>
<li><p>从[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']下载Android镜像和PhoenixCard烧写工具,请确保PhonenixCrad工具的版本为'''PhonixCard-4.2.8,请不要用低于4.2.8版本的PhonixCard软件来烧录Android镜像,'''低于这个版本的PhonixCard工具烧写的Android镜像可能会有问题</p>
<p>[[File:Orange_Pi_4A-image43.png|575x169px]]</p></li>
<li><p>然后使用解压软件解压下载的Android镜像的压缩包,解压后的文件中,以”'''.img'''” 结尾的文件就是Android镜像文件,大小在1GB以上。如果不知道怎么解压Android镜像的压缩包,可以安装一个[https://yasuo.360.cn/ '''360压缩软件''']来解压镜像。</p>
<p>[[File:Orange_Pi_4A-image44.png|438x158px]]</p></li>
<li><p>然后使用解压软件解压'''PhonixCard4.2.8.zip''',此软件无需安装,在解压后的文件夹中找到PhoenixCard打开即可</p>
<p>[[File:Orange_Pi_4A-image45.png|576x113px]]</p></li>
<li><p>打开PhoenixCard后,如果TF卡识别正常,会在中间的列表中显示TF卡的盘符和容量,'''请务必确认显示的盘符和你想烧录的TF卡的盘符是一致的''',如果没有显示可以尝试拔插下TF卡,或者点击PhoenixCard中的”'''刷新盘符'''”按钮</p></li></ol>
[[File:Orange_Pi_4A-image56.png|576x154px]]
<ol start="12" style="list-style-type: decimal;">
<li><p>确认完盘符后,先格式化TF卡,点击PhoenixCard中”'''恢复卡'''”按钮即可(如果”'''恢复卡'''”按钮为灰色的无法按下,可以先点击下”'''刷新盘符'''”按钮)</p>
<p>[[File:Orange_Pi_4A-image57.png|576x341px]]</p>
<p>'''如果格式化有问题,请尝试拔插下TF卡后再测试,如果重新拔插TF卡后还是有问题,可以重启下Window电脑或者换一台电脑再试下。'''</p></li>
<li><p>然后开始将Android镜像写入TF卡</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先在”'''固件'''”一栏中选择Android镜像的路径</p></li>
<li><p>在”'''制作卡的种类'''”中选择”'''量产卡'''”</p></li>
<li><p>然后点击”'''烧卡'''”按钮就会开始烧录</p>
<p>[[File:Orange_Pi_4A-image58.png|575x423px]]</p></li></ol>
</li>
<li><p>烧录完后PhoenixCard的显示如下图所示,此时点击”'''关闭'''”按钮即可退出PhoenixCard</p>
<p>[[File:Orange_Pi_4A-image59.png|575x356px]]</p></li>
<li><p>然后将TF卡插入开发板,上电启动开发板后会自动将TF卡中的Android固件烧录到开发板的eMMC 中,烧录完成后会自动关机,开发板上的LED灯会熄灭</p></li>
<li><p>此时就可以拔出TF卡,然后重新上电,就会启动eMMC中的Android系统了</p></li></ol>
== 启动香橙派开发板 ==
# 将烧录好镜像的TF卡插入香橙派开发板的TF卡插槽中
# 开发板有HDMI接口,可以通过HDMI转HDMI连接线把开发板连接到电视或者HDMI显示器。如果有购买LCD屏幕,也可以使用LCD屏幕来显示开发板的系统界面。
# 接上USB鼠标和键盘,用于控制香橙派开发板
# 开发板有以太网口,可以插入网线用来上网
# 连接一个5V/5A(5V/4A的也可以)的USB Type C接口的'''高品质'''的电源适配器
'''切记不要插入电压输出大于5V的电源适配器,会烧坏开发板。'''
'''系统上电启动过程中很多不稳定的现象基本都是供电有问题导致的,所以一个靠谱的电源适配器很重要。如果启动过程中发现有不断重启的现象,请更换下电源或者Type C数据线再试下。'''
<ol start="6" style="list-style-type: decimal;">
<li><p>然后打开电源适配器的开关,如果一切正常,此时HDMI显示器就能看到系统的启动画面了</p></li>
<li><p>如果想通过调试串口查看系统的输出信息,请使用串口线将开发板连接到电脑,串口的连接方法请参看[[#调试串口的使用方法|'''调试串口的使用方法''']]一节</p></li></ol>
== 调试串口的使用方法 ==
=== 调试串口的连接说明 ===
<ol style="list-style-type: decimal;">
<li><p>首先需要准备一个'''3.3v'''的USB转TTL模块,然后将USB转TTL模块的USB接口一端插入到电脑的USB接口中</p>
<p>[[File:Orange_Pi_4A-image60.png|575x245px]]</p></li>
<li><p>开发板的调试串口GND、TX和RX引脚的对应关系如下图所示</p>
<p>[[File:Orange_Pi_4A-image61.png|497x125px]]</p></li>
<li><p>USB转TTL模块GND、TX和RX引脚需要通过杜邦线连接到开发板的调试串口上</p>
<ol style="list-style-type: lower-alpha;">
<li><p>USB转TTL模块的GND接到开发板的GND上</p></li>
<li><p>USB转TTL模块的'''RX接到开发板的TX上'''</p></li>
<li><p>USB转TTL模块的'''TX接到开发板的RX上'''</p></li></ol>
</li>
<li><p>USB转TTL模块连接电脑和Orange Pi开发板的示意图如下所示</p>
<p>[[File:Orange_Pi_4A-image62.png|576x208px]]</p>
<p>'''串口的TX和RX是需要交叉连接的,如果不想仔细区分TX和RX的顺序,可以把串口的TX和RX先随便接上,如果测试串口没有输出再交换下TX和RX的顺序,这样就总有一种顺序是对的。'''</p></li></ol>
<span id="ubuntu平台调试串口的使用方法"></span>
=== Ubuntu平台调试串口的使用方法 ===
'''Linux下可以使用的串口调试软件有很多,如putty、minicom等,下面演示下putty的使用方法。'''
<ol style="list-style-type: decimal;">
<li><p>首先将USB转TTL模块插入Ubuntu电脑的USB接口,如果USB转TTL模块连接识别正常,在Ubuntu PC的'''/dev'''下就可以看到对应的设备节点名,记住这个节点名,后面设置串口软件时会用到</p>
<p>test@test:~$ '''ls /dev/ttyUSB*'''</p>
<p>'''/dev/ttyUSB0'''</p></li>
<li><p>然后使用下面的命令在Ubuntu PC上安装下putty</p>
<p>test@test:~$ '''sudo apt update'''</p>
<p>test@test:~$ '''sudo apt install -y putty'''</p></li>
<li><p>然后运行putty,'''记得加sudo权限'''</p>
<p>test@test:~$ '''sudo putty'''</p></li>
<li><p>执行putty命令后会弹出下面的界面</p>
<p>[[File:Orange_Pi_4A-image63.png|332x290px]]</p></li>
<li><p>首先选择串口的设置界面</p>
<p>[[File:Orange_Pi_4A-image64.png|337x297px]]</p></li>
<li><p>然后设置串口的参数</p>
<ol style="list-style-type: lower-alpha;">
<li><p>设置'''Serial line to connect to'''为'''/dev/ttyUSB0'''(修改为对应的节点名,一般为'''/dev/ttyUSB0''')</p></li>
<li><p>设置'''Speed(baud)'''为'''115200'''(串口的波特率)</p></li>
<li><p>设置'''Flow control'''为'''None'''</p>
<p>[[File:Orange_Pi_4A-image65.png|398x352px]]</p></li></ol>
</li>
<li><p>在串口的设置界面设置完后,再回到Session界面</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先选择'''Connection type'''为'''Serial'''</p></li>
<li><p>然后点击'''Open'''按钮连接串口</p>
<p>[[File:Orange_Pi_4A-image66.png|375x332px]]</p></li></ol>
</li>
<li><p>然后启动开发板,就能从打开的串口终端中看到系统输出的Log信息了</p>
<p>[[File:Orange_Pi_4A-image67.png|376x249px]]</p></li></ol>
<span id="windows平台调试串口的使用方法"></span>
=== Windows平台调试串口的使用方法 ===
'''Windows下可以使用的串口调试软件有很多,如SecureCRT、MobaXterm等,下面演示MobaXterm的使用方法,这款软件有免费版本,无需购买序列号即可使用。'''
<ol style="list-style-type: decimal;">
<li><p>下载MobaXterm</p>
<ol style="list-style-type: lower-alpha;">
<li><p>下载MobaXterm网址如下</p>
<p>[https://mobaxterm.mobatek.net/ '''https://mobaxterm.mobatek.net/''']</p></li>
<li><p>进入MobaXterm下载网页后点击'''GET XOBATERM NOW!'''</p>
<p>[[File:Orange_Pi_4A-image68.png|382x233px]]</p></li>
<li><p>然后选择下载Home版本</p>
<p>[[File:Orange_Pi_4A-image69.png|353x231px]]</p></li>
<li><p>然后选择Portable便携式版本,下载完后无需安装,直接打开就可以使用</p>
<div class="figure">
[[File:Orange_Pi_4A-image70.png|322x175px|选区_232]]
</div></li></ol>
</li>
<li><p>下载完后使用解压缩软件解压下载的压缩包,即可得到MobaXterm的可执软件,然后双击打开</p>
<p>[[File:Orange_Pi_4A-image71.png|576x83px]]</p></li>
<li><p>打开软件后,设置串口连接的步骤如下</p>
<ol style="list-style-type: lower-alpha;">
<li><p>打开会话的设置界面</p></li>
<li><p>选择串口类型</p></li>
<li><p>选择串口的端口号(根据实际的情况选择对应的端口号),如果看不到端口号,请使用[http://weishi.360.cn/qudongdashi/ '''360驱动大师''']扫描安装USB转TTL串口芯片的驱动</p></li>
<li><p>选择串口的波特率为'''115200'''</p></li>
<li><p>最后点击”'''OK'''”按钮完成设置</p></li></ol>
</li></ol>
[[File:Orange_Pi_4A-image72.png|575x291px]]
<ol start="4" style="list-style-type: decimal;">
<li><p>点击”'''OK'''”按钮后会进入下面的界面,此时启动开发板就能看到串口的输出信息了</p>
<p>[[File:Orange_Pi_4A-image73.png|575x291px]]</p></li></ol>
<span id="使用开发板40-pin接口中的5v引脚供电说明"></span>
== 使用开发板40 pin接口中的5v引脚供电说明 ==
'''我们推荐的开发板的供电方式是使用5V/5A或者5V/4A的Type C接口的电源线插到开发板的Type C电源接口来供电的。如果需要使用40 pin接口中的5V引脚来给开发板供电,请确保使用的电源线能满足开发板的供电需求。如果有使用不稳定的情况,请换回Type C电源供电。'''
<ol style="list-style-type: decimal;">
<li><p>首先需要准备一根下图所示的电源线</p>
<div class="figure">
[[File:Orange_Pi_4A-image74.jpeg|216x154px|4ff86e49b6624616f9498fe44c366f29]]
</div>
<p>'''上图所示的电源线在淘宝可以买到,请自行搜索购买。'''</p></li>
<li><p>使用40 pin接口中的5V引脚来给开发板供电,电源线的接法如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>上图所示的电源线USB A口需要插到5V/5A的电源适配器接头上('''不建议插到电脑的USB接口来供电,如果开发板接的外设过多,使用会不稳定''')</p></li>
<li><p>红色的杜邦线需要插到开发板40 pin接口的5V引脚上</p></li>
<li><p>黑色的杜邦线需要插到40 pin接口的GND引脚上</p></li>
<li><p>40 pin接口5V引脚和GND引脚在开发板中的位置如下图所示,'''切记不要接反了'''</p>
<p>[[File:Orange_Pi_4A-image75.png|456x110px]]</p></li></ol>
</li></ol>
<span id="debianubuntu-server和gnome桌面系统使用说明"></span>
= Debian/Ubuntu Server和Gnome桌面系统使用说明 =
== 已支持的linux镜像类型和内核版本 ==
{| class="wikitable"
|-
| style="text-align: center;"| '''Linux镜像类型'''
| style="text-align: center;"| '''内核版本'''
| style="text-align: center;"| '''服务器版'''
| style="text-align: center;"| '''桌面版'''
|-
| style="text-align: center;"| '''Ubuntu 22.04 - Jammy'''
| style="text-align: center;"| '''Linux5.15'''
| style="text-align: center;"| '''支持'''
| style="text-align: center;"| '''支持'''
|-
| style="text-align: center;"| '''Debian 12 - Bookworm'''
| style="text-align: center;"| '''Linux5.15'''
| style="text-align: center;"| '''支持'''
| style="text-align: center;"| '''支持'''
|}
在[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']进入对应开发板的下载页面后可以看到下面的下载选项,在下文的描述中,'''Ubuntu镜像和Debian镜像一般统称为Linux镜像'''。
<div class="figure">
[[File:Orange_Pi_4A-image76.png|236x108px|659B0DE6-F15C-4005-A5F9-DFF881EE647B]]
</div>
Linux镜像的命名规则为:
'''开发板型号_版本号_Linux发行版类型_发行版代号_服务器或桌面_内核版本'''
<ol style="list-style-type: lower-alpha;">
<li><p>'''开发板的型号''':都是'''Orangepi4a'''。不同开发板的型号名一般都是不同的,烧录镜像前,请确保所选择镜像的这个型号名和开发板是匹配的。</p></li>
<li><p>'''版本号''':如'''1.x.x''',这个版本号会随着镜像功能的更新而递增,另外开发板Linux镜像的版本号最后一个数字都是偶数。</p></li>
<li><p>'''Linux发行版的类型''':目前支持'''Ubuntu'''和'''Debian。'''由于Ubuntu源自Debian,所以两个系统在使用上来说总体区别不大。但部分软件的默认配置和命令的使用上还是有些许区别的,另外Ubuntu和Debian都各自有维护所支持的软件仓库,在支持的可安装的软件包上也是有些许差异的。这些需要亲自去使用体验才会有比较深刻的认识。有关更多的细节,可以参考下Ubuntu和Debian官方提供的文档。</p></li>
<li><p>'''发行版代号''':用来区分Ubuntu或者Debian这样具体的Linux发行版的不同版本。其中'''jammy'''是Ubuntu发行版,jammy表示Ubuntu22.04,不同版本的最大的区别是新版本的Ubuntu系统维护的软件仓库的中的软件很多都比旧版本的Ubuntu系统中的要新,比如Python和GCC编译工具链等。'''bookworm'''是Debian的具体版本代号,'''bookworm'''表示Debian12。</p></li>
<li><p>'''服务器或桌面''':用来表示系统是否带桌面环境,如果为'''server'''就表示系统没有安装桌面环境,镜像占用的存储空间和资源比较小,主要使用命令行来操作控制系统。如果为'''desktop_gnome'''就表示系统默认安装有GNOME桌面环境,镜像占用的存储空间和资源比较大,可以接显示器和鼠标键盘通过界面来操作系统。当然desktop版本的系统也可以像server版本的系统一样通过命令行来操作。</p></li>
<li><p>'''内核版本''':用来表示linux内核的版本号,目前支持'''linux5.15'''。</p></li></ol>
== linux内核驱动适配情况 ==
{| class="wikitable"
|-
| style="text-align: center;"| '''功能'''
| style="text-align: center;"| '''Linux5.15'''
|-
| style="text-align: center;"| '''HDMI视频'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''HDMI音频'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''USB2.0 x 4'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''TF卡启动'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''eMMC'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''NVME SSD识别'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''千兆网卡'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''WIFI'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''蓝牙'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''RTC芯片'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''耳机音频'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''LCD屏幕'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''EDP'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''CAM1'''
| style="text-align: center;"| '''内核驱动OK,3A未调'''
|-
| style="text-align: center;"| '''CAM2'''
| style="text-align: center;"| '''内核驱动OK,3A未调'''
|-
| style="text-align: center;"| '''LED灯'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin GPIO'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin I2C'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin SPI'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin UART'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin PWM'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''按键'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''温度传感器'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''硬件看门狗'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''Mali GPU'''
| style="text-align: center;"| '''NO'''
|-
| style="text-align: center;"| '''视频编解码'''
| style="text-align: center;"| '''NO'''
|}
== 本手册linux命令格式说明 ==
<ol style="list-style-type: decimal;">
<li><p>本手册中所有需要在Linux系统中输入的命令都会使用下面的方框框起来</p>
<p>如下所示,黄色方框里内容表示需要特别注意的内容,这里面的命令除外。</p></li>
<li><p>命令前面的提示符类型说明</p>
<ol style="list-style-type: lower-alpha;">
<li><p>命令前面提示符指的是下面方框内红色部分的内容,这部分内容不是linux命令的一部分,所以在linux系统中输入命令时,请不要把红色字体部分的内容也输入进去。</p>
<p>'''orangepi@orangepi:~$ sudo apt update'''</p>
<p>'''root@orangepi:~#''' '''vim /boot/boot.cmd'''</p>
<p>'''test@test:~$ ssh [mailto:root@192.168.1.36 root@192.168.1.]xxx'''</p>
<p>'''root@test:~# ls'''</p></li>
<li><p>'''orangepi@orangepi:~$''' 提示符表示这个命令是在'''开发板的linux系统'''中输入的, 提示符最后的 '''$''' 表示系统当前用户为普通用户,当执行特权命令时,需要加上'''sudo'''</p></li>
<li><p>'''root@orangepi:~#''' 提示符表示这个命令是在'''开发板的linux系统'''中输入的, 提示符最后的 '''#''' 表示系统当前用户为root用户,可以执行任何想要执行的命令</p></li>
<li><p>'''test@test:~$''' 提示符表示这个命令是在Ubuntu PC或者Ubuntu虚拟机中输入的,而不是开发板的linux系统中。提示符最后的 '''$''' 表示系统当前用户为普通用户,当执行特权命令时,需要加上'''sudo'''</p></li>
<li><p>'''root@test:~#''' 提示符表示这个命令是在Ubuntu PC或者Ubuntu虚拟机中输入的,而不是开发板的linux系统中。提示符最后的 '''#''' 表示系统当前用户为root用户,可以执行任何想要执行的命令</p></li></ol>
</li>
<li><p>哪些是需要输入的命令?</p>
<ol style="list-style-type: lower-alpha;">
<li><p>如下所示,'''黑色加粗部分'''是需要输入的命令,命令下面的是输出的内容(有些命令有输出,有些可能没有输出),这部分内容是不需要输入的</p>
<p>root@orangepi:~# '''cat /boot/orangepiEnv.txt'''</p>
<p>'''verbosity=7'''</p>
<p>bootlogo=false</p>
<p>'''console=serial'''</p></li>
<li><p>如下所示,有些命令一行写不下会放到下一行,只要黑色加粗的部分就都是需要输入的命令。当这些命令输入到一行的时候,每行最后的”'''\'''”是需要去掉的,这个不是命令的一部分。另外命令的不同部分都是有空格的,请别漏了</p>
<p>orangepi@orangepi:~$ '''echo \'''</p>
<p>'''"deb [arch=$(dpkg --print-architecture) \'''</p>
<p>'''signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \'''</p>
<p>'''https://download.docker.com/linux/debian \'''</p>
<p>'''$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null'''</p></li></ol>
</li></ol>
== linux系统登录说明 ==
=== linux系统默认登录账号和密码 ===
{| class="wikitable"
|-
| style="text-align: left;"| '''账号'''
| style="text-align: left;"| '''密码'''
|-
| style="text-align: left;"| '''root'''
| style="text-align: left;"| '''orangepi'''
|-
| style="text-align: left;"| '''orangepi'''
| style="text-align: left;"| '''orangepi'''
|}
'''注意,输入密码的时候,屏幕上是不会显示输入的密码的具体内容的,请不要以为是有什么故障,输入完后直接回车即可。'''
'''当输入密码提示错误,或者ssh连接有问题,请注意,只要使用的是Orange Pi提供的Linux镜像,就请不要怀疑上面的密码不对,而是要找其它的原因。'''
=== 设置linux系统终端自动登录的方法 ===
<ol style="list-style-type: decimal;">
<li><p>linux系统默认就是自动登录终端的,默认登录的用户名是'''orangepi'''</p>
<p>[[File:Orange_Pi_4A-image77.png|396x240px]]</p></li>
<li><p>使用下面的命令可以设置root用户自动登录终端</p>
<p>orangepi@orangepi:~$ '''sudo auto_login_cli.sh root'''</p></li>
<li><p>使用下面的命令可以禁止自动登录终端</p>
<p>orangepi@orangepi:~$ '''sudo auto_login_cli.sh -d'''</p></li>
<li><p>使用下面的命令可以再次设置orangepi用户自动登录终端</p>
<p>orangepi@orangepi:~$ '''sudo auto_login_cli.sh orangepi'''</p></li></ol>
=== linux桌面版系统自动登录说明 ===
<ol style="list-style-type: decimal;">
<li><p>桌面版系统启动后会自动登录进入桌面,无需输入密码</p>
<div class="figure">
[[File:Orange_Pi_4A-image78.png|576x324px|Screenshot from 2024-08-27 11-30-45]]
</div></li></ol>
<span id="linux桌面版系统root用户自动登录的设置方法"></span>
=== Linux桌面版系统root用户自动登录的设置方法 ===
<ol style="list-style-type: decimal;">
<li><p>执行下面的命令可以设置桌面版系统使用root用户自动登录</p>
<p>orangepi@orangepi:~$ '''sudo desktop_login.sh root'''</p></li>
<li><p>然后重启系统,就会自动使用root用户登录桌面了</p>
<div class="figure">
[[File:Orange_Pi_4A-image79.png|576x324px|Screenshot from 2024-08-27 11-31-55]]
</div></li>
<li><p>执行下面的命令可以再次设置桌面版系统使用orangepi用户自动登录</p>
<p>orangepi@orangepi:~$ '''sudo desktop_login.sh orangepi'''</p></li></ol>
<span id="linux桌面版系统禁用桌面的方法"></span>
=== Linux桌面版系统禁用桌面的方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先在命令行中输入下面的命令,'''请记得加sudo权限'''</p>
<p>orangepi@orangepi:~$ '''sudo systemctl disable lightdm.service'''</p></li>
<li><p>然后重启Linux系统就会发现不会显示桌面了</p>
<p>orangepi@orangepi:~$ '''sudo reboot'''</p></li>
<li><p>重新打开桌面的命令如下所示,'''请记得加sudo权限'''</p>
<p>orangepi@orangepi:~$ '''sudo systemctl start lightdm.service'''</p>
<p>orangepi@orangepi:~$ '''sudo systemctl enable lightdm.service'''</p></li></ol>
<span id="板载led灯测试说明"></span>
== 板载LED灯测试说明 ==
<ol style="list-style-type: decimal;">
<li><p>开发板上有三个LED灯,一个绿灯,一个红灯,一个PCIe指示灯,所在位置如下图所示:</p></li>
<li><p>'''只要开发板接通了电源,红色的LED灯就会常亮,这是由硬件控制的,软件无法关闭。'''</p></li>
<li><p>绿色的LED灯在内核启动后会一直闪烁,这是由软件控制的。</p></li>
<li><p>PCIe指示灯在PCIe接口有数据传输时会闪烁。</p></li>
<li><p>设置绿灯亮灭和闪烁的方法如下所示:</p>
<p>'''注意,下面的操作请在root用户下进行。'''</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先进入绿灯的设置目录</p>
<p>root@orangepi:~# '''cd /sys/class/leds/status_led'''</p></li>
<li><p>设置绿灯停止闪烁的命令如下</p>
<p>root@orangepi:/sys/class/leds/status_led# '''echo none > trigger'''</p></li>
<li><p>设置绿灯常亮的命令如下</p>
<p>root@orangepi:/sys/class/leds/status_led# '''echo default-on > trigger'''</p></li>
<li><p>设置绿灯闪烁的命令如下</p>
<p>root@orangepi:/sys/class/leds/status_led# '''echo heartbeat > trigger'''</p></li></ol>
</li></ol>
<span id="tf卡中linux系统rootfs分区容量操作说明"></span>
== TF卡中linux系统rootfs分区容量操作说明 ==
<span id="第一次启动会自动扩容tf卡中rootfs分区的容量"></span>
=== 第一次启动会自动扩容TF卡中rootfs分区的容量 ===
<ol style="list-style-type: decimal;">
<li><p>将开发板的Linux镜像烧录到TF卡中后,可以在'''Ubuntu电脑'''中查看下TF卡容量的使用情况,步骤如下所示:</p>
<p>'''注意,这一步不操作是不影响开发板的Linux系统自动扩容的。这里只是想说明TF卡烧录完Linux镜像后,怎么查看TF卡容量的方法。'''</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先在Ubuntu电脑中安装下gparted这个软件</p>
<p>test@test:~$ '''sudo apt install -y gparted'''</p></li>
<li><p>然后打开gparted</p>
<p>test@test:~$ '''sudo gparted'''</p></li>
<li><p>打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况</p>
<p>[[File:Orange_Pi_4A-image80.png|575x210px]]</p></li>
<li><p>上图显示的是烧录完Linux桌面版系统后TF卡的情况,可以看到,虽然TF卡的总容量是16GB的(在GParted中显示为14.84GiB),但是rootfs分区(/dev/sdc1)实际只分配了4.05GiB,还剩下10.79GiB未分配</p></li></ol>
</li>
<li><p>然后可以将烧录好Linux系统的TF卡插入开发板中启动,TF卡第一次启动linux系统时会通过'''orangepi-resize-filesystem.service'''这个systemd服务来调用'''orangepi-resize-filesystem'''脚本自动进行rootfs分区的扩容,所以'''无需再手动扩容'''</p></li>
<li><p>登录系统后可以通过'''df -h'''命令来查看rootfs的大小,如果和TF卡的实际容量一致,说明自动扩容运行正确</p></li></ol>
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
<ol start="4" style="list-style-type: decimal;">
<li><p>第一次启动完Linux系统后,我们还可以将TF卡从开发板中取下来重新插入'''Ubuntu电脑''',然后再次使用gparted查看下TF卡的情况,如下图所示,rootfs分区(/dev/sdc1)的容量已经扩展到了14.69GiB了</p>
<p>[[File:Orange_Pi_4A-image81.png|575x211px]]</p></li></ol>
'''需要注意的是,linux系统只有一个ext4格式的分区,没有使用单独的BOOT分区来存放内核镜像等文件,所以也就不存在BOOT分区扩容的问题。'''
<span id="禁止自动扩容tf卡中rootfs分区容量的方法"></span>
=== 禁止自动扩容TF卡中rootfs分区容量的方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先在'''Ubuntu电脑'''(Windows不行)中将开发板的linux镜像烧录到TF卡中,'''然后重新拔插下TF卡'''</p></li>
<li><p>然后Ubuntu电脑一般会自动挂载TF卡的分区,如果自动挂载正常,使用ls命令可以看到下面的输出</p>
<p>test@test:~$ '''ls /media/test/opi_root/'''</p>
<p>bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var</p></li>
<li><p>然后在Ubuntu电脑中将当前用户切换成root用户</p>
<p>test@test:~$ '''sudo -i'''</p>
<p>[sudo] test 的密码:</p>
<p>root@test:~'''#'''</p></li>
<li><p>然后进入TF卡中的linux系统的root目录下新建一个名为'''.no_rootfs_resize'''的文件</p>
<p>root@test:~# '''cd /media/test/opi_root/'''</p>
<p>root@test:/media/test/opi_root/# '''cd root'''</p>
<p>root@test:/media/test/opi_root/root# '''touch .no_rootfs_resize'''</p>
<p>root@test:/media/test/opi_root/root# '''ls .no_rootfs*'''</p>
<p>'''.no_rootfs_resize'''</p></li>
<li><p>然后就可以卸载TF卡,再拔出TF卡插到开发板中启动,linux系统启动时,当检测到'''/root'''目录下有'''.no_rootfs_resize'''这个文件就不会再自动扩容rootfs了</p></li>
<li><p>禁止rootfs自动扩容后进入Linux系统可以看到rootfs分区的总容量只有4GB(这里测试的是桌面版本的镜像),远小于TF卡的实际容量,说明禁止rootfs自动扩容成功</p>
<p>orangepi@orangepi:~$ '''df -h'''</p>
<p>Filesystem Size Used Avail Use% Mounted on</p>
<p>udev 925M 0 925M 0% /dev</p>
<p>tmpfs 199M 3.2M 196M 2% /run</p>
<p>'''/dev/mmcblk0p1 4.0G 3.2G 686M 83% /'''</p></li>
<li><p>如果需要重新扩容TF卡中rootfs分区的容量,只需要执行下面的命令,然后重新启动开发板的Linux系统即可</p></li></ol>
'''注意,请在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% /'''
<span id="手动扩容tf卡中rootfs分区容量的方法"></span>
=== 手动扩容TF卡中rootfs分区容量的方法 ===
'''如果TF卡的总容量很大,比如为128GB,不想Linux系统rootfs分区使用TF卡所有的容量,只想分配一部分容量,比如16GB,给Linux系统使用,然后TF卡的剩余容量就可以用作其他用途。那么可以使用此小节介绍的内容来手动扩容TF中rootfs分区的容量。'''
<ol style="list-style-type: decimal;">
<li><p>首先在'''Ubuntu电脑'''(Windows不行)中将开发板的linux镜像烧录到TF卡中,'''然后重新拔插下TF卡'''</p></li>
<li><p>然后Ubuntu电脑一般会自动挂载TF卡的分区,如果自动挂载正常,使用'''ls'''命令可以看到下面的输出</p>
<p>test@test:~$ '''ls /media/test/opi_root/'''</p>
<p>bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var</p></li>
<li><p>然后在Ubuntu电脑中将当前用户切换成root用户</p>
<p>test@test:~$ '''sudo -i'''</p>
<p>[sudo] test 的密码:</p>
<p>root@test:~'''#'''</p></li>
<li><p>然后进入TF卡中的linux系统的root目录下新建一个名为'''.no_rootfs_resize'''的文件</p>
<p>root@test:~# '''cd /media/test/opi_root/'''</p>
<p>root@test:/media/test/opi_root/# '''cd root'''</p>
<p>root@test:/media/test/opi_root/root# '''touch .no_rootfs_resize'''</p>
<p>root@test:/media/test/opi_root/root# '''ls .no_rootfs*'''</p>
<p>'''.no_rootfs_resize'''</p></li></ol>
<!-- -->
<ol start="5" style="list-style-type: decimal;">
<li><p>然后在Ubuntu电脑中安装下gparted这个软件</p>
<p>test@test:~$ '''sudo apt install -y gparted'''</p></li>
<li><p>然后打开gparted</p>
<p>test@test:~$ '''sudo gparted'''</p></li>
<li><p>打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况。下图显示的是烧录完Linux桌面版系统后TF卡的情况,可以看到,虽然TF卡的总容量是16GB的(在GParted中显示为14.84GiB),但是rootfs分区(/dev/sdc1)实际只分配了4.05GiB,还剩下10.79GiB未分配</p>
<p>[[File:Orange_Pi_4A-image80.png|575x210px]]</p></li>
<li><p>然后选中rootfs分区(/dev/sdc1)</p>
<p>[[File:Orange_Pi_4A-image82.png|575x211px]]</p></li>
<li><p>再点击鼠标右键就可以看到下图所示的操作选项,如果TF卡已经挂载了,首先需要Umount掉TF卡的rootfs分区</p>
<p>[[File:Orange_Pi_4A-image83.png|436x298px]]</p></li>
<li><p>然后再次选中rootfs分区,再点击鼠标右键,然后选择'''Resize/Move'''开始扩容rootfs分区的大小</p>
<p>[[File:Orange_Pi_4A-image84.png|444x302px]]</p></li>
<li><p>'''Resize/Move'''选项打开后会弹出下面的设置界面</p>
<p>[[File:Orange_Pi_4A-image85.png|315x193px]]</p></li>
<li><p>然后可以直接拖动下图所示的位置来设置容量的大小,也可以通过设置'''New size(MiB)'''中的数字来设置rootfs分区的大小</p>
<p>[[File:Orange_Pi_4A-image86.png|320x191px]]</p></li>
<li><p>设置好容量后,再点击右下角的'''Resize/Move'''即可</p>
<p>[[File:Orange_Pi_4A-image87.png|327x196px]]</p></li>
<li><p>最后确认无误后,再点击下图所示的'''绿色√'''</p>
<p>[[File:Orange_Pi_4A-image88.png|392x270px]]</p></li>
<li><p>然后选择'''Apply''',就会正式开始扩容rootfs分区的容量</p>
<p>[[File:Orange_Pi_4A-image89.png|399x116px]]</p></li>
<li><p>扩容完成后点击'''Close'''关闭即可</p>
<p>[[File:Orange_Pi_4A-image90.png|399x172px]]</p></li>
<li><p>然后就可以把TF卡拔下来,再插到开发板中启动,进入开发板的Linux系统中后如果使用'''df -h'''命令可以看到rootfs分区的大小和前面设置的大小一致的话就说明手动扩容成功</p>
<p>root@orangepi:~# '''df -h'''</p>
<p>Filesystem Size Used Avail Use% Mounted on</p>
<p>udev 925M 0 925M 0% /dev</p>
<p>tmpfs 199M 3.2M 196M 2% /run</p>
<p>'''/dev/mmcblk0p1 7.7G 3.2G 4.4G 42% /'''</p></li></ol>
<span id="缩小tf卡中rootfs分区容量的方法"></span>
=== 缩小TF卡中rootfs分区容量的方法 ===
'''在TF卡的Linux系统中配置好应用程序或者其他的开发环境后,如果想备份下TF卡中的Linux系统,可以使用此小节的方法先缩小下rootfs分区的大小,然后再开始备份。'''
<ol style="list-style-type: decimal;">
<li><p>首先在'''Ubuntu电脑'''(Windows不行)中插入想要操作的TF卡</p></li>
<li><p>然后在Ubuntu电脑中安装下gparted这个软件</p>
<p>test@test:~$ '''sudo apt install -y gparted'''</p></li>
<li><p>然后打开gparted</p>
<p>test@test:~$ '''sudo gparted'''</p></li>
<li><p>打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况</p>
<p>[[File:Orange_Pi_4A-image91.png|575x217px]]</p></li>
<li><p>然后选中rootfs分区(/dev/sdc1)</p>
<p>[[File:Orange_Pi_4A-image92.png|575x217px]]</p></li>
<li><p>再点击鼠标右键就可以看到下图所示的操作选项,如果TF卡已经挂载了,首先需要Umount掉TF卡的rootfs分区</p>
<p>[[File:Orange_Pi_4A-image93.png|400x274px]]</p></li>
<li><p>然后再次选中rootfs分区,再点击鼠标右键,然后选择'''Resize/Move'''开始设置rootfs分区的大小</p>
<p>[[File:Orange_Pi_4A-image94.png|399x273px]]</p></li>
<li><p>'''Resize/Move'''选项打开后会弹出下面的设置界面</p>
<p>[[File:Orange_Pi_4A-image95.png|315x188px]]</p></li>
<li><p>然后可以直接拖动下图所示的位置来设置容量的大小,也可以通过设置'''New sieze(MiB)'''中的数字来设置rootfs分区的大小</p>
<p>[[File:Orange_Pi_4A-image86.png|318x190px]]</p></li>
<li><p>设置好容量后,再点击右下角的'''Resize/Move'''即可</p>
<p>[[File:Orange_Pi_4A-image87.png|327x196px]]</p></li>
<li><p>最后确认无误后,再点击下图所示的'''绿色√'''</p>
<p>[[File:Orange_Pi_4A-image88.png|392x270px]]</p></li>
<li><p>然后选择'''Apply''',就会正式开始扩容rootfs分区的容量</p>
<p>[[File:Orange_Pi_4A-image89.png|365x106px]]</p></li>
<li><p>扩容完成后点击'''Close'''关闭即可</p>
<p>[[File:Orange_Pi_4A-image90.png|379x164px]]</p></li>
<li><p>然后就可以把TF卡拔下来,再插到开发板中启动,进入开发板的Linux系统中后如果使用'''df -h'''命令可以看到rootfs分区的大小和前面设置的大小一致的话就说明缩小容量成功</p>
<p>root@orangepi:~# '''df -h'''</p>
<p>Filesystem Size Used Avail Use% Mounted on</p>
<p>udev 925M 0 925M 0% /dev</p>
<p>tmpfs 199M 3.2M 196M 2% /run</p>
<p>'''/dev/mmcblk0p1 7.7G 3.2G 4.4G 42% /'''</p></li></ol>
== 网络连接测试 ==
=== 以太网口测试 ===
<ol style="list-style-type: decimal;">
<li><p>首先将网线的一端插入开发板的以太网接口,网线的另一端接入路由器,并确保网络是畅通的</p></li>
<li><p>系统启动后会通过'''DHCP'''自动给以太网卡分配IP地址,'''不需要其他任何配置'''</p></li>
<li><p>在开发板的Linux系统中查看IP地址的命令如下所示:</p>
<p>orangepi@orangepi:~$ '''ip a s eth0'''</p>
<p>2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000</p>
<p>link/ether 3a:3a:57:82:eb:1f brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.2.163'''/24 brd 192.168.2.255 scope global dynamic noprefixroute eth0</p>
<p>valid_lft 42902sec preferred_lft 42902sec</p>
<p>inet6 fdcd:e671:36f4::a39/128 scope global dynamic noprefixroute</p>
<p>valid_lft 42904sec preferred_lft 42904sec</p>
<p>inet6 fdcd:e671:36f4:0:7b67:e74e:f0e1:849a/64 scope global temporary dynamic</p>
<p>valid_lft 604504sec preferred_lft 86095sec</p>
<p>inet6 fdcd:e671:36f4:0:d098:7f17:6cea:4de4/64 scope global mngtmpaddr noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p>
<p>inet6 fe80::cc72:d313:9846:a5e0/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li></ol>
'''开发板启动后查看IP地址有三种方法:'''
# '''接HDMI显示器,然后登录系统使用ip a s eth0命令查看IP地址'''
# '''在调试串口终端输入ip a s eth0命令来查看IP地址'''
# '''如果没有调试串口,也没有HDMI显示器,还可以通过路由器的管理界面来查看开发板网口的IP地址。不过这种方法经常有人会无法正常看到开发板的IP地址。如果看不到,调试方法如下所示:'''
<!-- -->
<ol style="list-style-type: upper-alpha;">
<li><p>'''首先检查Linux系统是否已经正常启动,如果开发板的绿灯闪烁了,一般是正常启动了,如果只亮红灯,或者红灯绿灯都没亮,说明系统都没正常启动;'''</p></li>
<li><p>'''检查网线有没有插紧,或者换根网线试下;'''</p></li>
<li><p>'''换个路由器试下(路由器的问题有遇到过很多,比如路由器无法正常分配IP地址,或者已正常分配IP地址但在路由器中看不到);'''</p></li>
<li><p>'''如果没有路由器可换就只能连接HDMI显示器或者使用调试串口来查看IP地址。'''</p>
<p>'''另外需要注意的是开发板DHCP自动分配IP地址是不需要任何设置的。'''</p></li></ol>
<!-- -->
<ol start="4" style="list-style-type: decimal;">
<li><p>测试网络连通性的命令如下,'''ping'''命令可以通过'''Ctrl+C'''快捷键来中断运行</p>
<p>orangepi@orangepi:~$ '''ping www.baidu.com -I eth0'''</p>
<p>PING www.a.shifen.com (14.215.177.38) from 192.168.1.12 eth0: 56(84) bytes of data.</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=56 time=6.74 ms</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=56 time=6.80 ms</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=56 time=6.26 ms</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=56 time=7.27 ms</p>
<p>^C</p>
<p>--- www.a.shifen.com ping statistics ---</p>
<p>4 packets transmitted, 4 received, 0% packet loss, time 3002ms</p>
<p>rtt min/avg/max/mdev = 6.260/6.770/7.275/0.373 ms</p></li></ol>
<span id="wifi连接测试"></span>
=== WIFI连接测试 ===
'''请不要通过修改/etc/network/interfaces配置文件的方式来连接WIFI,通过这种方式连接WIFI网络使用会有问题。'''
<span id="服务器版镜像通过命令连接wifi"></span>
==== 服务器版镜像通过命令连接WIFI ====
'''当开发板没有连接以太网,没有连接HDMI显示器,只连接了串口时,推荐使用此小节演示的命令来连接WIFI网络。因为nmtui在某些串口软件(如minicom)中只能显示字符,无法正常显示图形界面。当然,如果开发板连接了以太网或者HDMI显示屏,也可以使用此小节演示的命令来连接WIFI网络的。'''
<ol style="list-style-type: decimal;">
<li><p>先登录linux系统,有下面三种方式</p>
<ol style="list-style-type: lower-alpha;">
<li>如果开发板连接了网线,可以通过[[#ssh远程登录开发板|'''ssh远程登录linux系统''']]</li></ol>
<!-- -->
<ol style="list-style-type: lower-alpha;">
<li><p>如果开发板连接好了调试串口,可以使用串口终端登录linux系统</p></li>
<li><p>如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到linux系统</p></li></ol>
</li></ol>
<!-- -->
<ol style="list-style-type: decimal;">
<li><p>首先使用'''nmcli dev wifi'''命令扫描周围的WIFI热点</p>
<p>orangepi@orangepi:~$ '''nmcli dev wifi'''</p>
<div class="figure">
[[File:Orange_Pi_4A-image96.png|575x250px|选区_011]]
</div></li>
<li><p>然后使用'''nmcli''' 命令连接扫描到的WIFI热点,其中:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''wifi_name'''需要换成想连接的WIFI热点的名字</p></li>
<li><p>'''wifi_passwd'''需要换成想连接的WIFI热点的密码</p>
<p>orangepi@orangepi:~$ '''sudo nmcli dev wifi connect wifi_name password wifi_passwd'''</p>
<p>Device 'wlan0' successfully activated with 'cf937f88-ca1e-4411-bb50-61f402eef293'.</p></li></ol>
</li>
<li><p>通过'''ip addr show wlan0'''命令可以查看wifi的IP地址</p>
<p>orangepi@orangepi:~$ '''ip a s wlan0'''</p>
<p>11: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
<p>link/ether 23:8c:d6:ae:76:bb brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.11'''/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0</p>
<p>valid_lft 259192sec preferred_lft 259192sec</p>
<p>inet6 240e:3b7:3240:c3a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute</p>
<p>valid_lft 259192sec preferred_lft 172792sec</p>
<p>inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li>
<li><p>使用'''ping'''命令可以测试wifi网络的连通性,'''ping'''命令可以通过'''Ctrl+C'''快捷键来中断运行</p>
<p>orangepi@orangepi:~$ '''ping www.orangepi.org -I wlan0'''</p>
<p>PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=1 ttl=52 time=43.5 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=2 ttl=52 time=41.3 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=3 ttl=52 time=44.9 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=4 ttl=52 time=45.6 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=5 ttl=52 time=48.8 ms</p>
<p>^C</p>
<p>--- www.orangepi.org ping statistics ---</p>
<p>5 packets transmitted, 5 received, 0% packet loss, time 4006ms</p>
<p>rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms</p></li></ol>
<span id="服务器版镜像通过图形化方式连接wifi"></span>
==== 服务器版镜像通过图形化方式连接WIFI ====
<ol style="list-style-type: decimal;">
<li><p>先登录linux系统,有下面三种方式</p>
<ol style="list-style-type: lower-alpha;">
<li><p>如果开发板连接了网线,可以通过[[#ssh远程登录开发板|'''ssh远程登录linux系统''']]</p></li>
<li><p>如果开发板连接好了调试串口,可以使用串口终端登录linux系统(串口软件请使用MobaXterm,使用minicom无法显示图形界面)</p></li>
<li><p>如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到linux系统</p></li></ol>
</li>
<li><p>然后在命令行中输入nmtui命令打开wifi连接的界面</p>
<p>orangepi@orangepi:~$ '''sudo nmtui'''</p></li>
<li><p>输入nmtui命令打开的界面如下所示</p>
<p>[[File:Orange_Pi_4A-image97.png|345x215px]]</p></li>
<li><p>选择'''Activate a connect'''后回车</p>
<p>[[File:Orange_Pi_4A-image98.png|349x216px]]</p></li>
<li><p>然后就能看到所有搜索到的WIFI热点</p>
<p>[[File:Orange_Pi_4A-image99.png|360x229px]]</p></li>
<li><p>选择想要连接的WIFI热点后再使用Tab键将光标定位到'''Activate'''后回车</p>
<p>[[File:Orange_Pi_4A-image100.png|366x230px]]</p></li>
<li><p>然后会弹出输入密码的对话框,在'''Pssword'''内输入对应的密码然后回车就会开始连接WIFI</p>
<p>[[File:Orange_Pi_4A-image101.png|352x225px]]</p></li>
<li><p>WIFI连接成功后会在已连接的WIFI名称前显示一个”*”</p>
<p>[[File:Orange_Pi_4A-image102.png|349x223px]]</p></li>
<li><p>通过'''ip a s wlan0'''命令可以查看wifi的IP地址</p>
<p>orangepi@orangepi:~$ '''ip a s wlan0'''</p>
<p>11: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
<p>link/ether 24:8c:d3:aa:76:bb brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.11'''/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0</p>
<p>valid_lft 259069sec preferred_lft 259069sec</p>
<p>inet6 240e:3b7:3240:c4a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute</p>
<p>valid_lft 259071sec preferred_lft 172671sec</p>
<p>inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li>
<li><p>使用'''ping'''命令可以测试wifi网络的连通性,'''ping'''命令可以通过'''Ctrl+C'''快捷键来中断运行</p>
<p>orangepi@orangepi:~$ '''ping www.orangepi.org -I wlan0'''</p>
<p>PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=1 ttl=52 time=43.5 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=2 ttl=52 time=41.3 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=3 ttl=52 time=44.9 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=4 ttl=52 time=45.6 ms</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=5 ttl=52 time=48.8 ms</p>
<p>^C</p>
<p>--- www.orangepi.org ping statistics ---</p>
<p>5 packets transmitted, 5 received, 0% packet loss, time 4006ms</p>
<p>rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms</p></li></ol>
==== 桌面版镜像的测试方法 ====
<ol style="list-style-type: decimal;">
<li><p>点击桌面右上角的位置(测试WIFI时请不要连接网线)</p>
<p>[[File:Orange_Pi_4A-image103.png|289x201px]]</p></li>
<li><p>在弹出的下拉框中选择'''Wi-Fi Settings'''</p>
<p>[[File:Orange_Pi_4A-image104.png|338x172px]]</p></li>
<li><p>然后在'''Visible Networks'''下面可以看到搜索到的WIFI热点</p>
<p>[[File:Orange_Pi_4A-image105.png|420x260px]]</p></li>
<li><p>然后点击想要连接的WIFI热点,再输入密码就会开始连接WIFI</p>
<p>[[File:Orange_Pi_4A-image106.png|423x262px]]</p>
<p>[[File:Orange_Pi_4A-image107.png|421x258px]]</p></li></ol>
<span id="通过create_ap创建wifi热点的方法"></span>
=== 通过create_ap创建WIFI热点的方法 ===
'''create_ap是一个帮助快速创建Linux上的WIFI热点的脚本,并且支持bridge和NAT模式,能够自动结合hostapd, dnsmasq和iptables完成WIFI热点的设置,避免了用户进行复杂的配置,github地址如下:'''
[https://github.com/oblique/create_ap '''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:热点的密码'''
<span id="create_ap以nat模式创建wifi热点的方法"></span>
==== create_ap以NAT模式创建WIFI热点的方法 ====
# 输入下面的命令以NAT模式创建名称为'''orangepi'''、密码为'''orangepi'''的WIFI热点
orangepi@orangepi:~$ '''sudo create_ap -m nat wlan0 eth0 orangepi orangepi --no-virt'''
<ol start="2" style="list-style-type: decimal;">
<li><p>如果有下面的信息输出,说明WIFI热点创建成功</p>
<p>orangepi@orangepi:~$ '''sudo create_ap -m nat wlan0 eth0 orangepi orangepi --no-virt'''</p>
<p>Config dir: /tmp/create_ap.wlan0.conf.TQkJtsz1</p>
<p>PID: 26139</p>
<p>Network Manager found, set wlan0 as unmanaged device... DONE</p>
<p>Sharing Internet using method: nat</p>
<p>hostapd command-line interface: hostapd_cli -p /tmp/create_ap.wlan0.conf.TQkJtsz1/hostapd_ctrl</p>
<p>wlan0: interface state UNINITIALIZED->ENABLED</p>
<p>wlan0: AP-ENABLED</p>
<p>wlan0: STA ce:bd:9a:dd:a5:86 IEEE 802.11: associated</p>
<p>wlan0: AP-STA-CONNECTED ce:bd:9a:dd:a5:86</p>
<p>wlan0: STA ce:bd:9a:dd:a5:86 RADIUS: starting accounting session D4FBF7E5C604F169</p>
<p>wlan0: STA ce:bd:9a:dd:a5:86 WPA: pairwise key handshake completed (RSN)</p>
<p>wlan0: EAPOL-4WAY-HS-COMPLETED ce:bd:9a:dd:a5:86</p></li>
<li><p>此时拿出手机,在搜索到的WIFI列表中就能找到开发板创建的名为'''orangepi'''的WIFI热点,然后可以点击 '''orangepi'''连接热点,密码就是上面设置的'''orangepi'''</p>
<p>[[File:Orange_Pi_4A-image108.png|230x183px]]</p></li>
<li><p>连接成功后的显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image109.png|233x111px]]</p></li>
<li><p>在NAT模式下,连接到开发板热点的无线设备是向开发板的DHCP服务请求IP地址的,所以会有两个不同的网段,如这里开发板的IP是192.168.1.X</p>
<p>orangepi@orangepi:~$ '''sudo ifconfig eth0'''</p>
<p>eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500</p>
<p>inet '''192.168.1.150''' netmask 255.255.255.0 broadcast 192.168.1.255</p>
<p>inet6 fe80::938f:8776:5783:afa2 prefixlen 64 scopeid 0x20<link></p>
<p>ether 4a:a0:c8:25:42:82 txqueuelen 1000 (Ethernet)</p>
<p>RX packets 25370 bytes 2709590 (2.7 MB)</p>
<p>RX errors 0 dropped 50 overruns 0 frame 0</p>
<p>TX packets 3798 bytes 1519493 (1.5 MB)</p>
<p>TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0</p>
<p>device interrupt 83</p>
<p>而开发板的DHCP服务默认会给接入热点的设备分配'''192.168.12.0/24'''的IP地址,这时点击已经连接的WIFI热点'''orangepi''',然后就可以看到手机的IP地址是'''192.168.12.X'''。</p>
<p>[[File:Orange_Pi_4A-image109.png|271x129px]]</p>
<p>[[File:Orange_Pi_4A-image110.png|274x155px]]</p></li>
<li><p>如果想要为接入的设备指定不同的网段,可以通过-g参数指定,如通过-g参数指定接入点AP的网段为192.168.2.1</p>
<p>orangepi@orangepi:~$ '''sudo create_ap -m nat wlan0 eth0 orangepi orangepi -g 192.168.2.1 --no-virt'''</p></li></ol>
此时通过手机连接到热点后,点击已经连接的WIFI热点'''orangepi''',然后可以看到手机的IP地址是'''192.168.2.X'''。
[[File:Orange_Pi_4A-image109.png|286x137px]]
[[File:Orange_Pi_4A-image111.png|302x174px]]
<ol start="7" style="list-style-type: decimal;">
<li>在不指定'''--freq-band'''参数的情况下,默认创建的热点是2.4G频段的,如果想要创建5G频段的热点可以通过'''--freq-band 5'''参数指定,具体命令如下</li></ol>
orangepi@orangepi:~$ '''sudo create_ap -m nat wlan0 eth0 orangepi orangepi --freq-band 5 --no-virt'''
<ol start="8" style="list-style-type: decimal;">
<li>如果需要隐藏SSID,可以指定'''--hidden'''参数,具体命令如下</li></ol>
orangepi@orangepi:~$ '''sudo create_ap -m nat wlan0 eth0 orangepi orangepi --hidden --no-virt'''
此时手机是搜索不到WIFI热点的,需要手动指定WIFI热点名称,并输入密码来连接WIFI热点
[[File:Orange_Pi_4A-image112.png|237x198px]]
<span id="create_ap以bridge模式创建wifi热点的方法"></span>
==== create_ap以bridge模式创建WIFI热点的方法 ====
# 输入下面的命令以bridge模式创建名称为'''orangepi'''、密码为'''orangepi'''的WIFI热点
orangepi@orangepi:~$ '''sudo create_ap -m bridge wlan0 eth0 orangepi orangepi --no-virt'''
<ol start="2" style="list-style-type: decimal;">
<li><p>如果有下面的信息输出,说明WIFI热点创建成功</p>
<p>orangepi@orangepi:~$ '''sudo create_ap -m bridge wlan0 eth0 orangepi orangepi --no-virt'''</p>
<p>Config dir: /tmp/create_ap.wlan0.conf.zAcFlYTx</p>
<p>PID: 27707</p>
<p>Network Manager found, set wlan0 as unmanaged device... DONE</p>
<p>Sharing Internet using method: bridge</p>
<p>Create a bridge interface... br0 created.</p>
<p>hostapd command-line interface: hostapd_cli -p /tmp/create_ap.wlan0.conf.zAcFlYTx/hostapd_ctrl</p>
<p>wlan0: interface state UNINITIALIZED->ENABLED</p>
<p>wlan0: AP-ENABLED</p>
<p>wlan0: STA ce:bd:9a:dd:a5:86 IEEE 802.11: associated</p>
<p>wlan0: AP-STA-CONNECTED ce:bd:9a:dd:a5:86</p>
<p>wlan0: STA ce:bd:9a:dd:a5:86 RADIUS: starting accounting session 937BF40E51897A7B</p>
<p>wlan0: STA ce:bd:9a:dd:a5:86 WPA: pairwise key handshake completed (RSN)</p>
<p>wlan0: EAPOL-4WAY-HS-COMPLETED ce:bd:9a:dd:a5:86</p></li>
<li><p>此时拿出手机,在搜索到的WIFI列表中就能找到开发板创建的名为'''orangepi'''的WIFI热点,然后可以点击'''orangepi'''连接热点,密码就是上面设置的'''orangepi'''</p>
<p>[[File:Orange_Pi_4A-image108.png|265x211px]]</p></li>
<li><p>连接成功后的显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image109.png|273x130px]]</p></li>
<li><p>在bridge模式下,连接到开发板热点的无线设备也是向主路由(开发板连接的路由器)的DHCP服务请求IP地址的,如这里开发板的IP是'''192.168.1.X'''</p>
<p>orangepi@orangepi:~$ '''sudo ifconfig eth0'''</p>
<p>eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500</p>
<p>inet '''192.168.1.150''' netmask 255.255.255.0 broadcast 192.168.1.255</p>
<p>inet6 fe80::938f:8776:5783:afa2 prefixlen 64 scopeid 0x20<link></p>
<p>ether 4a:a0:c8:25:42:82 txqueuelen 1000 (Ethernet)</p>
<p>RX packets 25370 bytes 2709590 (2.7 MB)</p>
<p>RX errors 0 dropped 50 overruns 0 frame 0</p>
<p>TX packets 3798 bytes 1519493 (1.5 MB)</p>
<p>TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0</p>
<p>device interrupt 83</p>
<p>而接入WIFI热点的设备的IP也是由主路由分配的,所以连接WIFI热点的手机和开发板处于相同的网段,这时点击已经连接的WIFI热点'''orangepi''',然后就可以看到手机的IP地址也是'''192.168.1.X'''。</p>
<p>[[File:Orange_Pi_4A-image109.png|284x136px]]</p>
<p>[[File:Orange_Pi_4A-image113.png|282x159px]]</p></li>
<li><p>在不指定'''--freq-band'''参数的情况下,默认创建的热点是2.4G频段的,如果想要创建5G频段的热点可以通过'''--freq-band 5'''参数指定,具体命令如下</p></li></ol>
orangepi@orangepi:~$ '''sudo create_ap -m bridge wlan0 eth0 orangepi orangepi --freq-band 5 --no-virt'''
<ol start="7" style="list-style-type: decimal;">
<li>如果需要隐藏SSID,可以指定'''--hidden'''参数,具体命令如下</li></ol>
orangepi@orangepi:~$ '''sudo create_ap -m bridge wlan0 eth0 orangepi orangepi --hidden --no-virt'''
此时手机是搜索不到WIFI热点的,需要手动指定WIFI热点名称,并输入密码来连接WIFI热点
[[File:Orange_Pi_4A-image112.png|228x191px]]
<span id="设置静态ip地址的方法"></span>
=== 设置静态IP地址的方法 ===
'''请不要通过修改/etc/network/interfaces配置文件的方式来设置静态IP地址。'''
<span id="使用nmtui命令来设置静态ip地址"></span>
==== 使用nmtui命令来设置静态IP地址 ====
<ol style="list-style-type: decimal;">
<li><p>首先运行'''nmtui'''命令</p>
<p>orangepi@orangepi:~$ '''sudo nmtui'''</p></li>
<li><p>然后选择'''Edit a connection'''并按下回车键</p>
<p>[[File:Orange_Pi_4A-image114.png|227x247px]]</p></li>
<li><p>然后选择需要设置静态IP地址的网络接口,比如设置'''Ethernet'''接口的静态IP地址选择'''Wired connection 1'''就可以了</p>
<p>[[File:Orange_Pi_4A-image115.png|310x149px]]</p></li>
<li><p>然后通过'''Tab'''键选择'''Edit'''并按下回车键</p>
<p>[[File:Orange_Pi_4A-image116.png|316x144px]]</p></li>
<li><p>然后通过Tab键将光标移动到下图所示的'''<Automatic>'''位置进行IPv4的配置</p>
<p>[[File:Orange_Pi_4A-image117.png|575x240px]]</p></li>
<li><p>然后回车,通过上下方向键选择'''Manual''',然后回车确定</p>
<p>[[File:Orange_Pi_4A-image118.png|576x237px]]</p></li>
<li><p>选择完后的显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image119.png|575x240px]]</p></li>
<li><p>然后通过Tab键将光标移动到'''<Show>'''</p>
<p>[[File:Orange_Pi_4A-image120.png|576x241px]]</p></li>
<li><p>然后回车,回车后会弹出下面的设置界面</p>
<p>[[File:Orange_Pi_4A-image121.png|575x450px]]</p></li>
<li><p>然后就可以在下图所示的位置设置IP地址(Addresses)、网关(Gateway)和DNS服务器的地址(里面还有很多其他设置选项,请自行探索),'''请根据自己的具体需求来设置,下图中设置的值只是一个示例'''</p>
<p>[[File:Orange_Pi_4A-image122.png|576x233px]]</p></li>
<li><p>设置完后将光标移动到右下角的'''<OK>''',然后回车确认</p>
<p>[[File:Orange_Pi_4A-image123.png|576x116px]]</p></li>
<li><p>然后点击'''<Back>'''回退到上一级选择界面</p>
<p>[[File:Orange_Pi_4A-image124.png|330x325px]]</p></li>
<li><p>然后选择'''Activate a connection''',再将光标移动到'''<OK>''',最后点击回车</p>
<p>[[File:Orange_Pi_4A-image125.png|331x248px]]</p></li>
<li><p>然后选择需要设置的网络接口,比如'''Wired connection 1''',然后将光标移动到'''<Deactivate>''',再按下回车键禁用'''Wired connection 1'''</p>
<p>[[File:Orange_Pi_4A-image126.png|576x224px]]</p></li>
<li><p>然后请不要移动光标,再按下回车键重新使能'''Wired connection 1''',这样前面设置的静态IP地址就会生效了</p>
<p>[[File:Orange_Pi_4A-image127.png|576x224px]]</p></li>
<li><p>然后通过'''<Back>'''和'''Quit'''按钮就可以退出nmtui</p>
<p>[[File:Orange_Pi_4A-image128.png|300x253px]] [[File:Orange_Pi_4A-image129.png|227x252px]]</p></li>
<li><p>然后通过'''ip a s eth0'''就能看到网口的IP地址已经变成前面设置的静态IP地址了</p>
<p>orangepi@orangepi:~$ '''ip a s eth0'''</p>
<p>3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
<p>link/ether 5e:ac:14:a5:92:b3 brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.177'''/24 brd 192.168.1.255 scope global noprefixroute eth0</p>
<p>valid_lft forever preferred_lft forever</p>
<p>inet6 241e:3b8:3240:c3a0:e269:8305:dc08:135e/64 scope global dynamic noprefixroute</p>
<p>valid_lft 259149sec preferred_lft 172749sec</p>
<p>inet6 fe80::957d:bbbe:4928:3604/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li>
<li><p>然后就可以测试网络的连通性来检查IP地址是否配置OK了,'''ping'''命令可以通过'''Ctrl+C'''快捷键来中断运行</p>
<p>orangepi@orangepi:~$ '''ping 192.168.1.177 -I eth0'''</p>
<p>PING 192.168.1.47 (192.168.1.47) from 192.168.1.188 eth0: 56(84) bytes of data.</p>
<p>64 bytes from 192.168.1.47: icmp_seq=1 ttl=64 time=0.233 ms</p>
<p>64 bytes from 192.168.1.47: icmp_seq=2 ttl=64 time=0.263 ms</p>
<p>64 bytes from 192.168.1.47: icmp_seq=3 ttl=64 time=0.273 ms</p>
<p>64 bytes from 192.168.1.47: icmp_seq=4 ttl=64 time=0.269 ms</p>
<p>64 bytes from 192.168.1.47: icmp_seq=5 ttl=64 time=0.275 ms</p>
<p>^C</p>
<p>--- 192.168.1.47 ping statistics ---</p>
<p>5 packets transmitted, 5 received, 0% packet loss, time 4042ms</p>
<p>rtt min/avg/max/mdev = 0.233/0.262/0.275/0.015 ms</p></li></ol>
<span id="使用nmcli命令来设置静态ip地址"></span>
==== 使用nmcli命令来设置静态IP地址 ====
<ol style="list-style-type: decimal;">
<li><p>如果要设置网口的静态IP地址,请先将网线插入开发板,'''如果需要设置WIFI的静态IP地址,请先连接好WIFI''',然后再开始设置静态IP地址</p></li>
<li><p>然后通过'''nmcli con show'''命令可以查看网络设备的名字,如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''orangepi'''为WIFI网络接口的名字(名字不一定相同)</p></li>
<li><p>'''Wired connection 1'''为以太网接口的名字</p>
<p>orangepi@orangepi:~$ '''nmcli con show'''</p>
<p>NAME UUID TYPE DEVICE</p>
<p>'''orangepi''' cfc4f922-ae48-46f1-84e1-2f19e9ec5e2a wifi wlan0</p>
<p>'''Wired connection 1''' 9db058b7-7701-37b8-9411-efc2ae8bfa30 ethernet eth0</p></li></ol>
</li>
<li><p>然后输入下面的命令,其中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''"Wired connection 1"''' 表示设置以太网口的静态IP地址,如果需要设置WIFI的静态IP地址,请修改为WIFI网络接口对应的名字(通过'''nmcli con show'''命令可以获取到)</p></li>
<li><p>'''ipv4.addresses'''后面是要设置的静态IP地址,可以修改为自己想要设置的值</p></li>
<li><p>'''ipv4.gateway''' 表示网关的地址</p>
<p>orangepi@orangepi:~$ '''sudo nmcli con mod "Wired connection 1" \'''</p>
<p>'''ipv4.addresses "192.168.1.110" \'''</p>
<p>'''ipv4.gateway "192.168.1.1" \'''</p>
<p>'''ipv4.dns "8.8.8.8" \'''</p>
<p>'''ipv4.method "manual"'''</p></li></ol>
</li>
<li><p>然后重启linux系统</p>
<p>orangepi@orangepi:~$ '''sudo reboot'''</p></li>
<li><p>然后重新进入linux系统使用'''ip addr show eth0'''命令就可以看到IP地址已经设置为想要的值了</p>
<p>orangepi@orangepi:~$ '''ip addr show eth0'''</p>
<p>3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
<p>link/ether 5e:ae:14:a5:91:b3 brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.110'''/32 brd 192.168.1.110 scope global noprefixroute eth0</p>
<p>valid_lft forever preferred_lft forever</p>
<p>inet6 240e:3b7:3240:c3a0:97de:1d01:b290:fe3a/64 scope global dynamic noprefixroute</p>
<p>valid_lft 259183sec preferred_lft 172783sec</p>
<p>inet6 fe80::3312:861a:a589:d3c/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li></ol>
<span id="设置linux系统第一次启动自动连接网络的方法"></span>
=== 设置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这款软件使用有问题请自行解决,我们不答疑。'''
<ol style="list-style-type: decimal;">
<li><p>首先烧录想使用的开发板的Linux镜像到TF卡中,然后使用读卡器,将烧录好开发板Linux镜像的TF卡插入安装有Linux系统的机器中(比如安装有Ubuntu系统的电脑,下面都以Ubuntu电脑为例来演示)</p></li>
<li><p>当TF卡插入Ubuntu电脑后,Ubuntu电脑一般会自动挂载TF卡中的Linux根文件系统的分区,由下面的命令可以知道,'''/media/test/opi_root'''即为TF卡中的Linux根文件系统挂载的路径</p>
<p>test@test:~$ '''df -h | grep "media"'''</p>
<p>/dev/sdd1 1.4G 1.2G 167M 88% '''/media/test/opi_root'''</p>
<p>test@test:~$ '''ls /media/test/opi_root'''</p>
<p>bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var</p></li>
<li><p>然后进入TF卡中烧录的Linux系统的'''/boot'''目录中</p>
<p>test@test:~$ '''cd /media/test/opi_root/boot/'''</p></li>
<li><p>然后将其中的'''orangepi_first_run.txt.template'''复制为'''orangepi_first_run.txt''',通过orangepi_first_run.txt配置文件可以设置开发板Linux系统第一次启动时自动连接某个WIFI热点,也可以设置WIFI或者以太网口的静态IP地址</p>
<p>test@test:/media/test/opi_root/boot$ '''sudo cp orangepi_first_run.txt.template orangepi_first_run.txt'''</p></li>
<li><p>通过下面的命令可以打开orangepi_first_run.txt文件,然后就可以查看修改其中的内容</p>
<p>test@test:/media/test/opi_root/boot$ '''sudo vim orangepi_first_run.txt'''</p></li>
<li><p>orangepi_first_run.txt文件中的变量使用说明</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''FR_general_delete_this_file_after_completion'''变量用来设置第一次启动完后是否删除orangepi_first_run.txt这个文件,默认为1,也就是删除,如果设置为0,第一次启动后会将orangepi_first_run.txt重命名为orangepi_first_run.txt.old,一般保持默认值即可</p></li>
<li><p>'''FR_net_change_defaults'''变量用于设置是否改变默认网络设置,这个必须要设置为1,否则所有的网络设置都不会生效</p></li>
<li><p>'''FR_net_ethernet_enabled'''变量用来控制是否使能以太网口的配置,如果需要设置以太网口的静态IP地址,请设置为1</p></li>
<li><p>'''FR_net_wifi_enabled'''变量用来控制是否使能WIFI的配置,如果需要设置开发板自动连接WIFI热点,则必须将其设置为1,另外请注意,如果此变量设置为1,则以太网口的设置就会失效。也就是说WIFI和以太网口不能同时设置(为什么,因为没必要...)</p></li>
<li><p>'''FR_net_wifi_ssid'''变量用于设置想要连接的WIFI热点的名字</p></li>
<li><p>'''FR_net_wifi_key'''变量用于设置想要连接的WIFI热点的密码</p></li>
<li><p>'''FR_net_use_static'''变量用于设置是否需要设置WIFI或者以太网口的静态IP地址</p></li>
<li><p>'''FR_net_static_ip'''变量用于设置静态IP的地址,请根据自己的实际情况设置</p></li>
<li><p>'''FR_net_static_gateway'''变量用于设置网关,请根据自己的实际情况设置</p></li></ol>
</li>
<li><p>下面演示几个具体的设置示例:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>比如想要开发板的Linux系统第一次启动后自动连接WIFI热点,可以这样设置:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>设置'''FR_net_change_defaults'''为'''1'''</p></li>
<li><p>设置'''FR_net_wifi_enabled'''为'''1'''</p></li>
<li><p>设置'''FR_net_wifi_ssid'''为想要连接的WIFI热点的名字</p></li>
<li><p>设置'''FR_net_wifi_key'''为想要连接的WIFI热点的密码</p></li></ol>
</li>
<li><p>比如想要开发板的Linux系统第一次启动后自动连接WIFI热点,并且设置WIFI的IP地址为特定的静态IP地址(这样当Linux系统启动后,可以直接使用设置的静态IP地址ssh远程登录开发板,无需通过路由器后台来查看开发板的IP地址),可以这样设置:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>设置'''FR_net_change_defaults'''为'''1'''</p></li>
<li><p>设置'''FR_net_wifi_enabled'''为'''1'''</p></li>
<li><p>设置'''FR_net_wifi_ssid'''为想要连接的WIFI热点的名字</p></li>
<li><p>设置'''FR_net_wifi_key'''为想要连接的WIFI热点的密码</p></li>
<li><p>设置'''FR_net_use_static'''为'''1'''</p></li>
<li><p>设置'''FR_net_static_ip'''为想要的IP地址</p></li>
<li><p>设置'''FR_net_static_gateway'''为对应的网关地址</p></li></ol>
</li>
<li><p>比如想要开发板的Linux系统第一次启动后自动设置以太网口的IP地址为想要的静态IP地址,可以这样设置:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>设置'''FR_net_change_defaults'''为'''1'''</p></li>
<li><p>设置'''FR_net_ethernet_enabled'''为'''1'''</p></li>
<li><p>设置'''FR_net_use_static'''为'''1'''</p></li>
<li><p>设置'''FR_net_static_ip'''为想要的IP地址</p></li>
<li><p>设置'''FR_net_static_gateway'''为对应的网关地址</p></li></ol>
</li></ol>
</li>
<li><p>修改完orangepi_first_run.txt文件后,就可以退出TF卡中开发板Linux系统的/boot目录,再卸载TF卡,然后就可以将TF卡插入开发板中启动了</p></li>
<li><p>如果没有设置静态IP地址,则还是需要通过路由器后台来查看IP地址,如果设置了静态IP地址,则可以在电脑上ping下设置的静态IP地址,如果能ping说明系统已经正常启动,并且网络也已设置正确,然后就可以使用设置的IP地址ssh远程登录开发板的Linux系统了</p></li></ol>
'''开发板的Linux系统第一次启动完后,orangepi_first_run.txt会被删除或者重命名为orangepi_first_run.txt.old,此时就算重新设置orangepi_first_run.txt配置文件,然后重新启动开发板的Linux系统,orangepi_first_run.txt中的配置也不会再次生效,因为此配置只在烧录完Linux系统后第一次启动才会有作用,这点请特别注意。'''
<span id="ssh远程登录开发板"></span>
== SSH远程登录开发板 ==
'''Linux系统默认都开启了ssh远程登录,并且允许root用户登录系统。ssh登录前首先需要确保以太网或者wifi网络已连接,然后使用ip addr命令或者通过查看路由器的方式获取开发板的IP地址。'''
<span id="ubuntu下ssh远程登录开发板"></span>
=== Ubuntu下SSH远程登录开发板 ===
# 获取开发板的IP地址
# 然后就可以通过ssh命令远程登录linux系统
test@test:~$ '''ssh [mailto:root@192.168.1.36 orangepi@192.168.1.]xxx''' (需要替换为开发板的IP地址)
orangepi@192.168.1.xx's password: (在这里输入密码,默认密码为orangepi)
'''注意,输入密码的时候,屏幕上是不会显示输入的密码的具体内容的,请不要以为是有什么故障,输入完后直接回车即可。'''
'''如果提示拒绝连接,只要使用的是Orange Pi提供的镜像,就请不要怀疑orangepi这个密码是不是不对,而是要找其他原因。'''
<ol start="3" style="list-style-type: decimal;">
<li><p>成功登录系统后的显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image130.png|575x337px]]</p>
<p>'''如果ssh无法正常登陆linux系统,首先请检查下开发板的IP地址是否能ping通,如果ping通没问题的话,可以通过串口或者HDMI显示器登录linux系统然后在开发板上输入下面的命令后再尝试是否能连接:'''</p></li></ol>
root@orangepi:~# '''reset_ssh.sh'''
'''如果还不行,请重烧系统试下。'''
<span id="windows下ssh远程登录开发板"></span>
=== Windows下SSH远程登录开发板 ===
<ol style="list-style-type: decimal;">
<li><p>首先获取开发板的IP地址</p></li>
<li><p>在windows下可以使用MobaXterm远程登录开发板,首先新建一个ssh会话</p>
<ol style="list-style-type: lower-alpha;">
<li><p>打开'''Session'''</p></li>
<li><p>然后在'''Session Setting'''中选择'''SSH'''</p></li>
<li><p>然后在'''Remote host'''中输入开发板的IP地址</p></li>
<li><p>然后在'''Specify username'''中输入linux系统的用户名'''root'''或'''orangepi'''</p></li>
<li><p>最后点击'''OK'''即可</p>
<p>[[File:Orange_Pi_4A-image131.png|576x292px]]</p></li></ol>
</li>
<li><p>然后会提示输入密码,默认root和orangepi用户的密码都为orangepi</p>
<p>'''注意,输入密码的时候,屏幕上是不会显示输入的密码的具体内容的,请不要以为是有什么故障,输入完后直接回车即可。'''</p>
<p>[[File:Orange_Pi_4A-image132.png|575x157px]]</p></li>
<li><p>成功登录系统后的显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image133.png|576x419px]]</p></li></ol>
<span id="hdmi测试"></span>
== HDMI测试 ==
<span id="hdmi显示测试"></span>
=== HDMI显示测试 ===
<ol style="list-style-type: decimal;">
<li><p>HDMI转HDMI线连接Orange Pi开发板和HDMI显示器</p>
<p>[[File:Orange_Pi_4A-image10.png|199x129px]]</p></li>
<li><p>启动linux系统后如果HDMI显示器有图像输出说明HDMI接口使用正常</p></li></ol>
'''注意,很多笔记本电脑虽然带有HDMI接口,但是笔记本的HDMI接口一般只有输出功能,并没有HDMI in的功能,也就是说并不能将其他设备的HDMI输出显示到笔记本的屏幕上。'''
'''当想把开发板的HDMI接到笔记本电脑HDMI接口时,请先确认清楚您的笔记本是支持HDMI in的功能。'''
'''当HDMI没有显示的时候,请先检查下HDMI线有没有插紧,确认接线没问题后,可以换一个不同的屏幕试下有没有显示。'''
<span id="hdmi转vga显示测试"></span>
=== HDMI转VGA显示测试 ===
<ol style="list-style-type: decimal;">
<li><p>首先需要准备下面的配件</p>
<ol style="list-style-type: lower-alpha;">
<li><p>HDMI转VGA转换器</p>
<p>[[File:Orange_Pi_4A-image134.png|155x104px]]</p></li>
<li><p>一根VGA线</p>
<p>[[File:Orange_Pi_4A-image135.png|148x133px]]</p></li>
<li><p>一个支持VGA接口的显示器或者电视</p></li></ol>
</li>
<li><p>HDMI转VGA显示测试如下所示</p>
<p>[[File:Orange_Pi_4A-image136.png|575x347px]]</p>
<p>'''使用HDMI转VGA显示时,开发板以及开发板的Linux系统是不需要做任何设置的,只需要开发板HDMI接口能正常显示就可以了。所以如果测试有问题,请检查HDMI转VGA转换器、VGA线以及显示器是否有问题。'''</p></li></ol>
== 蓝牙使用方法 ==
<span id="桌面版镜像的测试方法-1"></span>
=== 桌面版镜像的测试方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先点击桌面右上角的这块区域</p>
<p>[[File:Orange_Pi_4A-image137.png|256x164px]]</p></li>
<li><p>然后打开'''Bluetooth Settings'''</p>
<p>[[File:Orange_Pi_4A-image138.png|296x274px]]</p></li>
<li><p>蓝牙默认会打开,此时在'''Devices'''下面会显示周围扫描到的蓝牙设备</p>
<div class="figure">
[[File:Orange_Pi_4A-image139.png|415x272px|Screenshot from 2024-09-10 10-27-08]]
</div></li>
<li><p>然后点击想要连接的设备就可以开始配对了,开始配对后会弹出配对确认框,选择'''Confirm'''确认即可,此时手机上也同样需要进行确认</p>
<p>[[File:Orange_Pi_4A-image140.png|390x279px]]</p></li>
<li><p>和手机配对完后,可以选择已配对的蓝牙设备,然后选择'''Send Files'''即可开始给手机发送一个文件</p>
<p>[[File:Orange_Pi_4A-image141.png|395x257px]]</p></li>
<li><p>然后选择要发送的文件路径,再点击'''Select'''开始发送</p>
<p>[[File:Orange_Pi_4A-image142.png|367x214px]]</p></li>
<li><p>发送文件的界面如下图所示</p>
<p>[[File:Orange_Pi_4A-image143.png|374x173px]]</p></li></ol>
=== 服务器版镜像的使用方法 ===
<ol style="list-style-type: decimal;">
<li><p>进入系统后首先可以通过'''hciconfig'''命令来查看是否存在蓝牙的设备节点,如果存在,说明蓝牙初始化正常</p>
<p>orangepi@orangepi:~$ '''sudo apt update && sudo apt install -y bluez'''</p>
<p>orangepi@orangepi:~$ '''hciconfig -a'''</p>
<p>hci0: Type: Primary Bus: UART</p>
<p>BD Address: 3E:61:3D:19:0E:52 ACL MTU: 1021:8 SCO MTU: 240:3</p>
<p>UP RUNNING</p>
<p>RX bytes:925 acl:0 sco:0 events:72 errors:0</p>
<p>TX bytes:5498 acl:0 sco:0 commands:72 errors:0</p>
<p>Features: 0xbf 0xff 0x8d 0xfe 0xdb 0x3d 0x7b 0xc7</p>
<p>Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3</p>
<p>Link policy: RSWITCH SNIFF</p>
<p>Link mode: SLAVE ACCEPT</p>
<p>Name: 'orangepi'</p>
<p>Class: 0x3c0000</p>
<p>Service Classes: Rendering, Capturing, Object Transfer, Audio</p>
<p>Device Class: Miscellaneous,</p>
<p>HCI Version: 5.0 (0x9) Revision: 0x400</p>
<p>LMP Version: 5.0 (0x9) Subversion: 0x400</p>
<p>Manufacturer: Spreadtrum Communications Shanghai Ltd (492)</p></li>
<li><p>使用'''bluetoothctl'''扫描蓝牙设备</p>
<p>orangepi@orangepi:~$ '''sudo bluetoothctl'''</p>
<p>[NEW] Controller 10:11:12:13:14:15 orangepi4a [default]</p>
<p>Agent registered</p>
<p>[bluetooth]# '''power on #使能控制器'''</p>
<p>Changing power on succeeded</p>
<p>[bluetooth]# '''discoverable on #设置控制器为可被发现的'''</p>
<p>Changing discoverable on succeeded</p>
<p>[CHG] Controller 10:11:12:13:14:15 Discoverable: yes</p>
<p>[bluetooth]# '''pairable on #设置控制器为可配对的'''</p>
<p>Changing pairable on succeeded</p>
<p>[bluetooth]# '''scan on #开始扫描周围的蓝牙设备'''</p>
<p>Discovery started</p>
<p>[CHG] Controller 10:11:12:13:14:15 Discovering: yes</p>
<p>[NEW] Device 76:60:79:29:B9:31 76-60-79-29-B9-31</p>
<p>[NEW] Device 9C:2E:A1:42:71:11 小米手机</p>
<p>'''[NEW] Device DC:72:9B:4C:F4:CF orangepi'''</p>
<p>[bluetooth]# '''scan off #扫描到想连接的蓝牙设备后就可以关闭扫描了,然后记下蓝牙设备的MAC地址,这里测试的蓝牙设备为Android手机,蓝牙的名字为orangepi,对应的MAC地址为DC:72:9B:4C:F4:CF'''</p>
<p>Discovery stopped</p>
<p>[CHG] Controller 10:11:12:13:14:15 Discovering: no</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF RSSI is nil</p></li>
<li><p>扫描到想配对的设备后就可以进行配对了,配对需要使用设备的MAC地址</p>
<p>[bluetooth]# '''pair DC:72:9B:4C:F4:CF''' '''#使用扫描到的蓝牙设备的MAC地址进行配对'''</p>
<p>Attempting to pair with DC:72:9B:4C:F4:CF</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF Connected: yes</p>
<p>Request confirmation</p>
<p>[leeb1m[agent] Confirm passkey 764475 (yes/no): '''yes''' '''#在这里输入yes,在手机上也需要确认'''</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF Modalias: bluetooth:v010Fp107Ed1436</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF UUIDs: 0000046a-0000-1000-8000-00805f9b34fb</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF ServicesResolved: yes</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF Paired: yes</p>
<p>'''Pairing successful #提示配对成功'''</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF ServicesResolved: no</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF Connected: no</p></li>
<li><p>配对成功后,手机蓝牙界面的显示如下所示</p>
<p>[[File:Orange_Pi_4A-image144.png|189x167px]]</p></li>
<li><p>连接蓝牙设备需要安装 '''pulseaudio-module-bluetooth'''软件包,然后再启动'''pulseaudio''' 服务</p>
<p>orangepi@orangepi:~$ '''sudo apt update'''</p>
<p>orangepi@orangepi:~$ '''sudo''' '''apt -y install pulseaudio-module-bluetooth'''</p>
<p>orangepi@orangepi:~$ '''pulseaudio --start'''</p></li>
<li><p>连接蓝牙设备的方法</p>
<p>orangepi@orangepi:~$ '''sudo bluetoothctl'''</p>
<p>Agent registered</p>
<p>[bluetooth]# '''paired-devices #查看已配对的蓝牙设备的MAC地址'''</p>
<p>Device DC:72:9B:4C:F4:CF orangepi</p>
<p>[bluetooth]# '''connect DC:72:9B:4C:F4:CF #使用MAC地址连接蓝牙设备'''</p>
<p>Attempting to connect to DC:72:9B:4C:F4:CF</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF Connected: yes</p>
<p>Connection successful</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF ServicesResolved: yes</p>
<p>[CHG] Controller 10:11:12:13:14:15 Discoverable: no</p>
<p>'''[orangepi]# #出现这个提示符说明连接成功'''</p></li>
<li><p>连接完蓝牙设备后,Android手机的蓝牙配置界面就可以看到'''已连接用于通话和媒体的音频'''的提示</p>
<div class="figure">
[[File:Orange_Pi_4A-image145.jpeg|223x232px|Screenshot_20201205_142413]]
</div></li></ol>
<span id="usb接口测试"></span>
== USB接口测试 ==
'''USB接口是可以接USB hub来扩展USB接口的数量的。'''
<span id="连接usb鼠标或键盘测试"></span>
=== 连接USB鼠标或键盘测试 ===
# 将USB接口的键盘插入Orange Pi开发板的USB接口中
# 连接Orange Pi开发板到HDMI显示器
# 如果鼠标或键盘能正常操作系统说明USB接口使用正常(鼠标只有在桌面版的系统中才能使用)
<span id="连接usb存储设备测试"></span>
=== 连接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'''
<ol start="3" style="list-style-type: decimal;">
<li>使用mount命令可以将U盘挂载到'''/mnt'''中,然后就能查看U盘中的文件了</li></ol>
orangepi@orangepi:~$ '''sudo mount /dev/sda1 /mnt/'''
orangepi@orangepi:~$ '''ls /mnt/'''
test.txt
<ol start="4" style="list-style-type: decimal;">
<li>挂载完后通过'''df -h'''命令就能查看U盘的容量使用情况和挂载点</li></ol>
orangepi@orangepi:~$ '''df -h | grep "sd"'''
/dev/sda1 29G 208K 29G 1% /mnt
<span id="usb以太网卡测试"></span>
=== USB以太网卡测试 ===
# 目前'''测试过'''能用的USB以太网卡如下所示,其中RTL8153 USB千兆网卡插入开发板的USB 2.0 Host接口中测试可以正常使用,但是速率是达不到千兆的,这点请注意
{| class="wikitable"
|-
| style="text-align: left;"| 序号
| style="text-align: left;"| 型号
|-
| style="text-align: left;"| 1
| style="text-align: left;"| RTL8152B USB百兆网卡
|-
| style="text-align: left;"| 2
| style="text-align: left;"| RTL8153 USB千兆网卡
|}
<ol start="2" style="list-style-type: decimal;">
<li><p>首先将USB网卡插入开发板的USB接口中,然后在USB网卡中插入网线,确保网线能正常上网,如果通过'''dmesg'''命令可以看到下面的log信息,说明USB网卡识别正常</p>
<p>orangepi@orangepi:~$ '''dmesg | tail'''</p>
<p>[ 121.985016] usb 3-1: USB disconnect, device number 2</p>
<p>[ 126.873772] sunxi-ehci 5311000.ehci3-controller: ehci_irq: highspeed device connect</p>
<p>[ 127.094054] usb 3-1: new high-speed USB device number 3 using sunxi-ehci</p>
<p>[ 127.357472] usb 3-1: reset high-speed USB device number 3 using sunxi-ehci</p>
<p>[ 127.557960] r8152 3-1:1.0 eth1: v1.08.9</p>
<p>[ 127.602642] r8152 3-1:1.0 enx00e04c362017: renamed from eth1</p>
<p>[ 127.731874] IPv6: ADDRCONF(NETDEV_UP): enx00e04c362017: link is not ready</p>
<p>[ 127.763031] IPv6: ADDRCONF(NETDEV_UP): enx00e04c362017: link is not ready</p>
<p>[ 129.892465] r8152 3-1:1.0 enx00e04c362017: carrier on</p>
<p>[ 129.892583] IPv6: ADDRCONF(NETDEV_CHANGE): enx00e04c362017: link becomes ready</p></li>
<li><p>然后通过ifconfig命令可以看到USB网卡的设备节点,以及自动分配的IP地址</p>
<p>orangepi@orangepi:~$ '''sudo ifconfig'''</p>
<p>'''eth1''': flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500</p>
<p>inet '''192.168.1.177''' netmask 255.255.255.0 broadcast 192.168.1.255</p>
<p>inet6 fe80::681f:d293:4bc5:e9fd prefixlen 64 scopeid 0x20<link></p>
<p>ether 00:e0:4c:36:20:17 txqueuelen 1000 (Ethernet)</p>
<p>RX packets 1849 bytes 134590 (134.5 KB)</p>
<p>RX errors 0 dropped 125 overruns 0 frame 0</p>
<p>TX packets 33 bytes 2834 (2.8 KB)</p>
<p>TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0</p></li>
<li><p>测试网络连通性的命令如下</p>
<p>orangepi@orangepi:~$ '''ping www.baidu.com -I eth1'''</p>
<p>PING www.a.shifen.com (14.215.177.38) from 192.168.1.12 eth0: 56(84) bytes of data.</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=56 time=6.74 ms</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=56 time=6.80 ms</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=56 time=6.26 ms</p>
<p>64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=56 time=7.27 ms</p>
<p>^C</p>
<p>--- www.a.shifen.com ping statistics ---</p>
<p>4 packets transmitted, 4 received, 0% packet loss, time 3002ms</p>
<p>rtt min/avg/max/mdev = 6.260/6.770/7.275/0.373 ms</p></li></ol>
<span id="usb摄像头测试"></span>
=== USB摄像头测试 ===
<ol style="list-style-type: decimal;">
<li><p>首先将USB摄像头插入到Orange Pi开发板的USB接口中</p></li>
<li><p>然后通过lsmod命令可以看到内核自动加载了下面的模块</p>
<p>orangepi@orangepi:~$ '''lsmod'''</p>
<p>Module Size Used by</p>
<p>'''uvcvideo 106496 0'''</p></li>
<li><p>通过v4l2-ctl命令可以看到USB摄像头的设备节点信息为/dev/video0</p>
<p>orangepi@orangepi:~$ '''sudo apt update'''</p>
<p>orangepi@orangepi:~$ '''sudo''' '''apt install -y v4l-utils'''</p>
<p>orangepi@orangepi:~$ '''v4l2-ctl --list-devices'''</p>
<p>USB 2.0 Camera (usb-sunxi-ehci-1):</p>
<p>/dev/video0</p>
<p>'''注意v4l2中的l是小写字母l,不是数字1。'''</p>
<p>'''另外video的序号不一定都是video0,请以实际看到的为准。'''</p></li>
<li><p>使用fswebcam测试USB摄像头</p>
<ol style="list-style-type: lower-alpha;">
<li><p>安装fswebcam</p>
<p>orangepi@orangepi:~$ '''sudo''' '''apt update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y fswebcam'''</p></li>
<li><p>安装完fswebcam后可以使用下面的命令来拍照</p>
<ol style="list-style-type: lower-alpha;">
<li><p>-d 选项用于指定USB摄像头的设备节点</p></li>
<li><p>--no-banner用于去除照片的水印</p></li>
<li><p>-r 选项用于指定照片的分辨率</p></li>
<li><p>-S 选项用设置于跳过前面的帧数</p></li>
<li><p>./image.jpg 用于设置生成的照片的名字和路径</p>
<p>orangepi@orangepi:~$ '''sudo''' '''fswebcam -d /dev/video0 \'''</p>
<p>'''--no-banner -r 1280x720 -S 5 ./image.jpg'''</p></li></ol>
</li>
<li><p>在服务器版的linux系统中,拍完照后可以使用scp命令将拍好的图片传到Ubuntu PC上镜像观看</p>
<p>orangepi@orangepi:~$ '''scp image.jpg [mailto:test@192.168.1.55:/home/test test@192.168.1.55:/home/test] (根据实际情况修改IP地址和路径)'''</p></li>
<li><p>在桌面版的linux系统中,可以通过HDMI显示器直接查看拍摄的图片</p></li></ol>
</li>
<li><p>使用mjpg-streamer测试USB摄像头</p>
<ol style="list-style-type: lower-alpha;">
<li><p>下载mjpg-streamer</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Github的下载地址:</p>
<p>orangepi@orangepi:~$ '''git clone https://github.com/jacksonliam/mjpg-streamer'''</p></li>
<li><p>Gitee的镜像下载地址为:</p>
<p>orangepi@orangepi:~$ '''git clone https://gitee.com/leeboby/mjpg-streamer'''</p></li></ol>
</li>
<li><p>安装依赖的软件包</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Ubuntu系统</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y cmake libjpeg8-dev'''</p></li>
<li><p>Debian系统</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y cmake libjpeg62-turbo-dev'''</p></li></ol>
</li>
<li><p>编译安装mjpg-streamer</p>
<p>orangepi@orangepi:~$ '''cd mjpg-streamer/mjpg-streamer-experimental'''</p>
<p>orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ '''make -j4'''</p>
<p>orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ '''sudo make install'''</p></li>
<li><p>然后输入下面的命令启动mjpg_streamer</p>
<p>'''注意,video的序号不一定都是video0,请以实际看到的为准。'''</p>
<p>orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ '''export LD_LIBRARY_PATH=.'''</p>
<p>orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ '''sudo ./mjpg_streamer -i "./input_uvc.so -d \'''</p>
<p>'''/dev/video0 -u -f 30" -o "./output_http.so -w ./www"'''</p></li>
<li><p>然后在和开发板同一局域网的Ubuntu PC或者Windows PC或者手机的浏览器中输入【'''开发板的IP地址:8080'''】就能看到摄像头输出的视频了</p>
<div class="figure">
[[File:Orange_Pi_4A-image146.png|575x279px|选区_021]]
</div></li></ol>
</li></ol>
== 音频测试 ==
=== 使用命令行播放音频的方法 ===
==== 耳机接口播放音频测试 ====
<ol style="list-style-type: decimal;">
<li><p>首先将耳机插入开发板的耳机孔中。</p>
<p>[[File:Orange_Pi_4A-image147.png|331x105px]]</p></li>
<li><p>通过'''aplay -l'''命令可以查看linux系统支持的声卡设备,其中'''audiocodec'''就是耳机播放需要的声卡设备</p>
<p>root@orangepi:~# '''aplay -l'''</p>
<p>**** List of PLAYBACK Hardware Devices ****</p>
<p>'''card 0: audiocodec [audiocodec], device 0: sunxi-snd-plat-aaudio-sunxi-snd-codec 7110000.codec-0 []'''</p>
<p>'''Subdevices: 1/1'''</p>
<p>'''Subdevice #0: subdevice #0'''</p>
<p>card 1: sndi2s1 [sndi2s1], device 0: sunxi-snd-plat-i2s-snd-soc-dummy-dai snd-soc-dummy-dai-0 []</p>
<p>Subdevices: 1/1</p>
<p>Subdevice #0: subdevice #0</p>
<p>card 2: sndhdmi [sndhdmi], device 0: sunxi-snd-plat-i2s-soc@3000000:hdmi_codec soc@3000000:hdmi_code []</p>
<p>Subdevices: 1/1</p>
<p>Subdevice #0: subdevice #0</p></li>
<li><p>然后使用'''aplay'''命令播放音频,耳机就能听到声音了</p>
<p>root@orangepi:~# '''aplay -D hw:0,0 /usr/share/sounds/alsa/audio.wav'''</p>
<p>Playing WAVE 'audio.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo</p></li></ol>
'''如果耳机测试有杂音,请将耳机拔出来一些,不要全部插到底。'''
<span id="hdmi音频播放测试"></span>
==== HDMI音频播放测试 ====
<ol style="list-style-type: decimal;">
<li><p>首先使用HDMI 转HDMI线将Orange Pi开发板连接到电视机上(其他的HDMI显示器需要确保可以播放音频)</p></li>
<li><p>HDMI音频播放无需其他设置,直接使用'''aplay'''命令播放即可</p>
<p>root@orangepi:~# '''aplay -D hw:2,0 /usr/share/sounds/alsa/audio.wav'''</p></li></ol>
=== 在桌面系统中测试音频方法 ===
# 首先打开文件管理器
[[File:Orange_Pi_4A-image148.png|259x190px]]
<ol start="2" style="list-style-type: decimal;">
<li><p>然后找到下面这个文件(如果系统中没有这个音频文件,可以自己上传一个音频文件到系统中)</p>
<p>[[File:Orange_Pi_4A-image149.png|286x174px]]</p></li>
<li><p>然后选中audio.wav文件,右键选择使用vlc打开就可以开始播放</p>
<p>[[File:Orange_Pi_4A-image150.png|290x174px]]</p></li>
<li><p>切换HDMI播放和耳机播放等不同音频设备的方法</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先点击右上角的这块区域</p>
<p>[[File:Orange_Pi_4A-image137.png|256x164px]]</p></li>
<li><p>然后选择'''Settings'''</p>
<p>[[File:Orange_Pi_4A-image151.png|262x254px]]</p></li>
<li><p>然后找到'''Sound'''</p>
<p>[[File:Orange_Pi_4A-image152.png|308x193px]]</p></li>
<li><p>然后在Output Device的下拉选择框中选择想要播放的音频设备('''选择Audio Codec声音将会从耳机输出,选择HDMI Audio声音会从HDMI输出''')</p>
<p>[[File:Orange_Pi_4A-image153.png|310x196px]]</p></li></ol>
</li></ol>
=== 使用命令测试录音的方法 ===
<ol style="list-style-type: decimal;">
<li><p>Orange Pi 4A开发板没有板载MIC,只能通过带MIC功能的耳机来录制音频。将带MIC功能的耳机插入开发板后,运行下面的命令会通过耳机录制一段音频</p>
<p>orangepi@orangepi:~$ '''arecord -D hw:0,0 -d 5 -f S16_LE -t wav /tmp/test.wav'''</p></li></ol>
== 温度传感器 ==
T527总共有6个温度传感器,查看温度的命令如下所示:
'''显示的温度值需要除以1000,单位才是摄氏度。'''
<ol style="list-style-type: lower-alpha;">
<li>sensor0:CPUL的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</li></ol>
orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone0/type'''
'''cpul'''_thermal_zone
orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone0/temp'''
'''54925'''
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>sensor1:CPUB的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</p>
<p>orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone1/type'''</p>
<p>'''cpub'''_thermal_zone</p>
<p>orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone1/temp'''</p>
<p>'''54990'''</p></li>
<li><p>sensor2:GPU的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</p>
<p>orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone2/type'''</p>
<p>'''gpu'''_thermal_zone</p>
<p>orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone2/temp'''</p>
<p>'''55056'''</p></li>
<li><p>sensor3:NPU的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</p>
<p>orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone3/type'''</p>
<p>'''npu'''_thermal_zone</p>
<p>orangepi@orangepi:~$ '''cat /sys/class/thermal/thermal_zone3/temp'''</p>
<p>'''54686'''</p></li>
<li><p>sensor4:DDR的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</p></li></ol>
orangepi@orangepi:~# '''cat /sys/class/thermal/thermal_zone4/type'''
'''ddr'''_thermal_zone
orangepi@orangepi:~# '''cat /sys/class/thermal/thermal_zone4/temp'''
'''54925'''
<ol start="6" style="list-style-type: lower-alpha;">
<li>sensor5:axp2202的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</li></ol>
orangepi@orangepi:~# '''cat /sys/class/thermal/thermal_zone5/type'''
'''axp2202-usb'''
orangepi@orangepi:~# '''cat /sys/class/thermal/thermal_zone5/temp'''
'''45600'''
<span id="pin接口引脚说明"></span>
== 40 pin接口引脚说明 ==
<ol style="list-style-type: decimal;">
<li><p>Orange Pi 4A开发板40 pin接口引脚的顺序请参开发板上的丝印图</p>
<p>[[File:Orange_Pi_4A-image154.png|458x149px]]</p></li>
<li><p>开发板40 pin接口引脚的功能如下表所示</p>
<ol style="list-style-type: lower-alpha;">
<li>下面是40pin完整的引脚图</li></ol>
</li></ol>
[[File:Orange_Pi_4A-image155.png|575x191px]]
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>下面的表格是上面完整表格左半边部分的图,能看得清楚点</p>
<p>[[File:Orange_Pi_4A-image156.png|576x375px]]</p></li>
<li><p>下面的表格是上面完整表格右半边部分的图,能看得清楚点</p></li></ol>
[[File:Orange_Pi_4A-image157.png|575x384px]]
<ol start="3" style="list-style-type: decimal;">
<li>40 pin接口中总共有'''28'''个GPIO口,所有GPIO口的电压都是'''3.3v'''</li></ol>
<span id="安装wiringop的方法"></span>
== 安装wiringOP的方法 ==
'''注意,Orange Pi发布的linux镜像中已经预装了wiringOP,除非wiringOP的代码有更新,否则无需重新下载编译安装,直接使用即可。'''
'''编译好的wiringOP的deb包在orangepi-build中的存放路径为:'''
'''orangepi-build/external/cache/debs/arm64/wiringpi_x.xx.deb'''
'''进入系统后可以运行下gpio readall命令,如果能看到下面的输出,说明wiringOP已经预装并且能正常使用。'''
[[File:Orange_Pi_4A-image158.png|575x354px]]
<ol style="list-style-type: decimal;">
<li><p>下载wiringOP的代码</p>
<p>orangepi@orangepi:~$ '''sudo apt update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt install -y git'''</p>
<p>orangepi@orangepi:~$ '''git clone https://github.com/orangepi-xunlong/wiringOP.git -b next'''</p>
<p>'''注意,源码需要下载wiringOP next分支的代码,请别漏了-b next这个参数。'''</p>
<p>'''如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP源码,存放位置为:/usr/src/wiringOP。'''</p></li>
<li><p>编译安装wiringOP</p>
<p>orangepi@orangepi:~$ '''cd wiringOP'''</p>
<p>orangepi@orangepi:~/wiringOP$ '''sudo ./build clean'''</p>
<p>orangepi@orangepi:~/wiringOP$ '''sudo ./build'''</p></li>
<li><p>测试gpio readall命令的输出如下</p>
<p>[[File:Orange_Pi_4A-image158.png|575x354px]]</p></li></ol>
<span id="pin接口gpioi2cuartspi和pwm测试"></span>
== 40pin接口GPIO、I2C、UART、SPI和PWM测试 ==
<span id="pin-gpio口测试"></span>
=== 40pin GPIO口测试 ===
<ol style="list-style-type: decimal;">
<li><p>下面以7号引脚——对应GPIO为PB4——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p>
<p>[[File:Orange_Pi_4A-image159.png|575x119px]]</p></li>
<li><p>首先设置GPIO口为输出模式,其中第三个参数需要输入引脚对应的wPi的序号</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio mode 2 out'''</p></li>
<li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio write 2 0'''</p>
<p>使用gpio readall可以看到7号引脚的值(V)变为了0</p>
<p>[[File:Orange_Pi_4A-image160.png|576x120px]]</p></li>
<li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio write 2 1'''</p>
<p>使用gpio readall可以看到7号引脚的值(V)变为了1</p>
<p>[[File:Orange_Pi_4A-image161.png|576x119px]]</p></li>
<li><p>其他引脚的设置方法类似,只需修改wPi的序号为引脚对应的序号即可</p></li></ol>
<span id="pin-gpio口上下拉电阻的设置方法"></span>
=== 40 pin GPIO口上下拉电阻的设置方法 ===
<ol style="list-style-type: decimal;">
<li><p>下面以7号引脚——对应GPIO为PB4——对应wPi序号为2——为例演示如何设置GPIO口的上下拉电阻</p>
<p>[[File:Orange_Pi_4A-image159.png|575x119px]]</p></li>
<li><p>首先需要设置GPIO口为输入模式,其中第三个参数需要输入引脚对应的wPi的序号</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio mode 2 in'''</p></li>
<li><p>设置为输入模式后,执行下面的命令可以设置GPIO口为上拉模式</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio mode 2 up'''</p></li>
<li><p>然后输入下面的命令读取GPIO口的电平,如果电平为1,说明上拉模式设置成功</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio read 2'''</p>
<p>'''1'''</p></li>
<li><p>然后执行下面的命令可以设置GPIO口为下拉模式</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio mode 2 down'''</p></li>
<li><p>然后输入下面的命令读取GPIO口的电平,如果电平为0,说明下拉模式设置成功</p>
<p>orangepi@orangepi:~/wiringOP$ '''gpio read 2'''</p>
<p>'''0'''</p></li></ol>
<span id="pin-spi测试"></span>
=== 40 pin SPI测试 ===
<ol style="list-style-type: decimal;">
<li><p>由下图可知,Orange Pi 4A可用的SPI为SPI1和SPI2。</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>SPI1和SPI2在40pin中对应的引脚如下表所示。</p></li></ol>
{| class="wikitable"
|-
|
| style="text-align: left;"| '''SPI1对应40pin'''
| style="text-align: left;"| '''SPI2对应40pin'''
|-
| '''MOSI'''
| style="text-align: left;"| '''19号引脚'''
| style="text-align: left;"| '''15号引脚'''
|-
| '''MISO'''
| style="text-align: left;"| '''21号引脚'''
| style="text-align: left;"| '''29号引脚'''
|-
| '''CLK'''
| style="text-align: left;"| '''23号引脚'''
| style="text-align: left;"| '''13号引脚'''
|-
| '''CS0'''
| style="text-align: left;"| '''24号引脚'''
| style="text-align: left;"| '''11号引脚'''
|}
'''在Linux系统中,40pin中的spi功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开spi1和spi2,注意同时打开多个配置时,下面红色字体内容需要使用空格隔开写在一行。'''
'''orangepi@orangepi4a:~$''' '''sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-spi1-cs0-spidev.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-spi2-cs0-spidev.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>然后查看下linux系统中是否存在'''spidevx.x'''的设备节点,如果存在,说明SPI的配置已经生效了</p>
<p>orangepi@orangepi:~$ '''ls /dev/spidev*'''</p>
<p>/dev/spidev1.0 /dev/spidev2.0</p></li>
<li><p>先不短接SPI1或者SPI2的mosi和miso两个引脚,运行spidev_test的输出结果如下所示,可以看到TX和RX的数据不一致</p>
<p>orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev1.0'''</p>
<p>'''或者'''</p>
<p>orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev2.0'''</p>
<p>spi mode: 0x0</p>
<p>bits per word: 8</p>
<p>max speed: 500000 Hz (500 KHz)</p>
<p>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 | ......@.…▒..................▒.</p>
<p>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 | ............................….</p></li>
<li><p>然后短接SPI1或者SPI2的mosi和miso两个引脚再运行spidev_test的输出如下,可以看到发送和接收的数据一样</p>
<p>orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev1.0'''</p>
<p>'''或者'''</p>
<p>orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev2.0'''</p>
<p>spi mode: 0x0</p>
<p>bits per word: 8</p>
<p>max speed: 500000 Hz (500 KHz)</p>
<p>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 | ......@.…▒..................▒.</p>
<p>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 | ......@.…▒..................▒.</p></li></ol>
<span id="pin-i2c测试"></span>
=== 40 pin I2C测试 ===
<ol style="list-style-type: decimal;">
<li><p>由下图可知,Orange Pi 4A可用的i2c为i2c1、i2c4和i2c5共三组i2c总线。</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>三组I2C总线在40pin中对应的引脚如下表所示。</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| '''I2C总线'''
| style="text-align: left;"| '''SDA对应40pin'''
| style="text-align: left;"| '''SCL对应40pin'''
| style="text-align: left;"| '''dtbo对应配置'''
|-
| style="text-align: left;"| '''I2C1'''
| style="text-align: left;"| '''12号引脚'''
| style="text-align: left;"| '''7号引脚'''
| style="text-align: left;"| '''sun55i-t527-i2c1'''
|-
| style="text-align: left;"| '''I2C4'''
| style="text-align: left;"| '''3号引脚'''
| style="text-align: left;"| '''5号引脚'''
| style="text-align: left;"| '''sun55i-t527-i2c4'''
|-
| style="text-align: left;"| '''I2C5'''
| style="text-align: left;"| '''27号引脚'''
| style="text-align: left;"| '''28号引脚'''
| style="text-align: left;"| '''sun55i-t527-i2c5'''
|}
'''在Linux系统中,40pin中的i2c功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开i2c1、i2c4和i2c5,注意同时打开多个配置时,下面红色字体内容需要使用空格隔开写在一行。'''
'''orangepi@orangepi4a:~$ sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS''' '''/boot/dtb/allwinner/overlay/sun55i-t527-i2c1.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-i2c4.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-i2c5.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>启动linux系统后,先确认下/dev下存在i2c的设备节点</p>
<p>orangepi@orangepi:~$ '''ls /dev/i2c-*'''</p>
<p>'''/dev/i2c-0 /dev/i2c-1 /dev/i2c-3 /dev/i2c-31 /dev/i2c-4 /dev/i2c-5 /dev/i2c-6'''</p></li>
<li><p>然后开始测试i2c,首先安装i2c-tools</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y i2c-tools'''</p></li>
<li><p>然后在40 pin接头的i2c引脚上接一个i2c设备</p>
<p>'''5V和3.3V引脚请根据具体的i2c设备进行选择,不同的i2c设备需要的电压值可能不同。'''</p></li>
<li><p>然后使用'''i2cdetect -y'''命令如果能检测到连接的i2c设备的地址,就说明i2c能正常使用</p>
<p>orangepi@orangepi:~$ '''sudo i2cdetect -y 1''' #i2c1的命令</p>
<p>orangepi@orangepi:~$ '''sudo i2cdetect -y 4''' #i2c4的命令</p>
<p>orangepi@orangepi:~$ '''sudo i2cdetect -y 5''' #i2c5的命令</p></li></ol>
[[File:Orange_Pi_4A-image162.png|342x125px]]
<span id="pin的uart测试"></span>
=== 40 pin的UART测试 ===
<ol style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 4A可用的uart为uart2、uart3、uart4、uart5、uart6和uart7共六组uart总线</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>六组UART总线在40 pin中对应的引脚如下表所示。</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| '''UART总线'''
| style="text-align: left;"| '''RX对应40pin'''
| style="text-align: left;"| '''TX对应40pin'''
| style="text-align: left;"| '''dtbo对应配置'''
|-
| style="text-align: left;"| '''UART2'''
| style="text-align: left;"| '''13号引脚'''
| style="text-align: left;"| '''11号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart2'''
|-
| style="text-align: left;"| '''UART3'''
| style="text-align: left;"| '''33号引脚'''
| style="text-align: left;"| '''32号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart3'''
|-
| style="text-align: left;"| '''UART4'''
| style="text-align: left;"| '''5号引脚'''
| style="text-align: left;"| '''3号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart4'''
|-
| style="text-align: left;"| '''UART5'''
| style="text-align: left;"| '''23号引脚'''
| style="text-align: left;"| '''24号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart5'''
|-
| style="text-align: left;"| '''UART6'''
| style="text-align: left;"| '''26号引脚'''
| style="text-align: left;"| '''22号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart6'''
|-
| style="text-align: left;"| '''UART7'''
| style="text-align: left;"| '''10号引脚'''
| style="text-align: left;"| '''8号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart7'''
|}
'''在Linux系统中,40pin中的uart功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开uart2、uart3、uart4、uart5、uart6和uart7,注意同时打开多个配置时,下面红色字体内容需要使用空格隔开写在一行。'''
'''orangepi@orangepi4a:~$ sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-uart2.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart3.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart4.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart5.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart6.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart7.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>进入linux系统后,先确认下'''/dev'''下是否存在uart的设备节点</p>
<p>orangepi@orangepi:~$ '''ls /dev/ttyAS*'''</p>
<p>/dev/ttyAS0 /dev/ttyAS1 /dev/ttyAS2 /dev/ttyAS3 /dev/ttyAS4 /dev/ttyAS5 /dev/ttyAS6 /dev/ttyAS7</p></li>
<li><p>然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx</p></li>
<li><p>使用'''gpio serial'''命令测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常(ttyASX需要替换为对应uart的节点名,请不要照抄)</p>
<p>orangepi@orangepi:~$ '''gpio serial /dev/ttyASX'''</p>
<p>Out: 0: -> 0</p>
<p>Out: 1: -> 1</p>
<p>Out: 2: -> 2</p>
<p>Out: 3: -> 3^C</p></li></ol>
<span id="使用sysclasspwm测试pwm的方法"></span>
=== 使用'''/sys/class/pwm/测试'''PWM的方法 ===
<ol style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 4A可用的pwm有pwm1、pwm2、pwm4、pwm5、pwm6、pwm7、pwm8、pwm9、pwm10、pwm11、pwm12、pwm13、pwm14和pwm15共14路PWM</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>PWM在40pin中对应的引脚如下表所示。</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| '''PWM总线'''
| style="text-align: left;"| '''对应40pin'''
| style="text-align: left;"| '''dtbo对应配置'''
|-
| style="text-align: left;"| '''PWM0-1'''
| style="text-align: left;"| '''5号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm1'''
|-
| style="text-align: left;"| '''PWM0-2'''
| style="text-align: left;"| '''31号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm2'''
|-
| style="text-align: left;"| '''PWM0-4'''
| style="text-align: left;"| '''8号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm4'''
|-
| style="text-align: left;"| '''PWM0-5'''
| style="text-align: left;"| '''10号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm5'''
|-
| style="text-align: left;"| '''PWM0-6'''
| style="text-align: left;"| '''11号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm6'''
|-
| style="text-align: left;"| '''PWM0-7'''
| style="text-align: left;"| '''13号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm7'''
|-
| style="text-align: left;"| '''PWM0-8'''
| style="text-align: left;"| '''7号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm8'''
|-
| style="text-align: left;"| '''PWM0-9'''
| style="text-align: left;"| '''12号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm9'''
|-
| style="text-align: left;"| '''PWM0-10'''
| style="text-align: left;"| '''35号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm10'''
|-
| style="text-align: left;"| '''PWM0-11'''
| style="text-align: left;"| '''38号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm11'''
|-
| style="text-align: left;"| '''PWM0-12'''
| style="text-align: left;"| '''32号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm12'''
|-
| style="text-align: left;"| '''PWM0-13'''
| style="text-align: left;"| '''33号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm13'''
|-
| style="text-align: left;"| '''PWM0-14'''
| style="text-align: left;"| '''16号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm14'''
|-
| style="text-align: left;"| '''PWM0-15'''
| style="text-align: left;"| '''18号引脚'''
| style="text-align: left;"| '''sun55i-t527-pwm15'''
|}
'''在Linux系统中,40pin中的pwm功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开pwm1、pwm2、pwm4、pwm5、pwm6、pwm7、pwm8、pwm9、pwm10、pwm11、pwm12、pwm13、pwm14和pwm15,如果只需要打开一个,那么就填写一个即可。'''
'''orangepi@orangepi4a:~$ sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-pwm1.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm2.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm4.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm5.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm6.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm7.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm8.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm9.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm10.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm11.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm12.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm13.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm14.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-pwm15.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>重启后就可以开始PWM的测试</p>
<p>'''下面的命令请在root用户下执行。'''</p>
<ol style="list-style-type: lower-alpha;">
<li><p>在命令行中输入下面的命令可以让pwm1输出一个50Hz的方波</p>
<p>root@orangepi:~# '''echo 1 > /sys/class/pwm/pwmchip0/export'''</p>
<p>root@orangepi:~# '''echo 20000000 > /sys/class/pwm/pwmchip0/pwm1/period'''</p>
<p>root@orangepi:~# '''echo 1000000 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle'''</p>
<p>root@orangepi:~# '''echo 1 > /sys/class/pwm/pwmchip0/pwm1/enable'''</p></li>
<li><p>在命令行中输入下面的命令可以让pwm2输出一个50Hz的方波</p></li></ol>
</li></ol>
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'''
<ol start="3" style="list-style-type: lower-alpha;">
<li>在命令行中输入下面的命令可以让pwm4输出一个50Hz的方波</li></ol>
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'''
<ol start="4" style="list-style-type: lower-alpha;">
<li><p>其它的pwm的测试方法都是类似的,这里不再赘述</p>
<div class="figure">
[[File:Orange_Pi_4A-image163.jpeg|574x344px|69D96433378187B10005CDD2A52881B0]]
</div></li></ol>
<span id="wiringop-python的安装使用方法"></span>
== wiringOP-Python的安装使用方法 ==
'''wiringOP-Python是wiringOP的Python语言版本的库,用于在Python程序中操作开发板的GPIO、I2C、SPI和UART等硬件资源。'''
'''另外请注意下面所有的命令都是在root用户下操作的。'''
<span id="wiringop-python的安装方法"></span>
=== wiringOP-Python的安装方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先安装依赖包</p>
<p>root@orangepi:~# '''sudo apt-get update'''</p>
<p>root@orangepi:~# '''sudo apt-get -y install git swig python3-dev python3-setuptools'''</p></li>
<li><p>然后使用下面的命令下载wiringOP-Python的源码</p></li></ol>
'''注意,下面的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'''
<ol start="3" style="list-style-type: decimal;">
<li><p>然后使用下面的命令编译wiringOP-Python并将其安装到开发板的Linux系统中</p>
<p>root@orangepi:~# '''cd wiringOP-Python'''</p>
<p>root@orangepi:~/wiringOP-Python# '''python3 generate-bindings.py > bindings.i'''</p>
<p>root@orangepi:~/wiringOP-Python# '''sudo python3 setup.py install'''</p></li>
<li><p>然后输入下面的命令,如果有帮助信息输出,说明wiringOP-Python安装成功,按下'''q'''键可以退出帮助信息的界面</p></li></ol>
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.
<ol start="5" style="list-style-type: decimal;">
<li><p>在python命令行下测试wiringOP-Python是否安装成功的步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li>首先使用python3命令进入python3的命令行模式</li></ol>
</li></ol>
root@orangepi:~# '''python3'''
<ol start="2" style="list-style-type: lower-alpha;">
<li>然后导入wiringpi的python模块</li></ol>
>>> '''import wiringpi;'''
<ol start="3" style="list-style-type: lower-alpha;">
<li>最后输入下面的命令可以查看下wiringOP-Python的帮助信息,按下'''q'''键可以退出帮助信息的界面</li></ol>
>>> '''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)
|
>>>
<span id="pin-gpio口测试-1"></span>
=== 40 pin GPIO口测试 ===
'''wiringOP-Python跟wiringOP一样,也是可以通过指定wPi号来确定操作哪一个GPIO引脚,因为wiringOP-Python中没有查看wPi号的命令,所以只能通过wiringOP中的gpio命令来查看板子wPi号与物理引脚的对应关系。'''
[[File:Orange_Pi_4A-image158.png|575x354px]]
<ol style="list-style-type: decimal;">
<li><p>下面以7号引脚——对应GPIO为PB4 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p>
<p>[[File:Orange_Pi_4A-image159.png|575x119px]]</p></li>
<li><p>直接用命令测试的步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先设置GPIO口为输出模式,其中'''pinMode'''函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式</p>
<p>root@orangepi:~/wiringOP-Python# '''python3 -c "import wiringpi; \'''</p>
<p>'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ; \'''</p>
<p>'''wiringpi.pinMode(2, GPIO.OUTPUT) ; "'''</p></li>
<li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p>
<p>root@orangepi:~/wiringOP-Python# '''python3 -c "import wiringpi; \'''</p>
<p>'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''</p>
<p>'''wiringpi.digitalWrite(2, GPIO.LOW)"'''</p></li>
<li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>
<p>root@orangepi:~/wiringOP-Python# '''python3 -c "import wiringpi; \'''</p>
<p>'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''</p>
<p>'''wiringpi.digitalWrite(2, GPIO.HIGH)"'''</p></li></ol>
</li>
<li><p>在python3的命令行中测试的步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先使用python3命令进入python3的命令行模式</p>
<p>root@orangepi:~# '''python3'''</p></li>
<li><p>然后导入wiringpi的python模块</p>
<p>>>> '''import wiringpi'''</p>
<p>>>> '''from wiringpi import GPIO'''</p></li>
<li><p>然后设置GPIO口为输出模式,其中'''pinMode'''函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式</p>
<p>>>> '''wiringpi.wiringPiSetup()'''</p>
<p>0</p>
<p>>>> '''wiringpi.pinMode(2, GPIO.OUTPUT)'''</p></li>
<li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p>
<p>>>> '''wiringpi.digitalWrite(2, GPIO.LOW)'''</p></li>
<li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>
<p>>>> '''wiringpi.digitalWrite(2, GPIO.HIGH)'''</p></li></ol>
</li>
<li><p>wiringOP-Python在python代码中设置GPIO高低电平的方法可以参考下examples中的'''blink.py'''测试程序,'''blink.py'''测试程序会设置开发板40 pin中所有的GPIO口的电压不断的高低变化</p>
<p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p>
<p>root@orangepi:~/wiringOP-Python/examples# '''ls blink.py'''</p>
<p>'''blink.py'''</p>
<p>root@orangepi:~/wiringOP-Python/examples'''# python3 blink.py'''</p></li></ol>
<span id="pin-spi测试-1"></span>
=== 40 pin SPI测试 ===
<ol style="list-style-type: decimal;">
<li><p>由下图可知,Orange Pi 4A可用的SPI为SPI1和SPI2。</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>SPI1和SPI2在40pin对应的引脚如下表所示</p></li></ol>
{| class="wikitable"
|-
|
| style="text-align: left;"| '''SPI1对应40pin'''
| style="text-align: left;"| '''SPI2对应40pin'''
|-
| '''MOSI'''
| style="text-align: left;"| '''19号引脚'''
| style="text-align: left;"| '''15号引脚'''
|-
| '''MISO'''
| style="text-align: left;"| '''21号引脚'''
| style="text-align: left;"| '''29号引脚'''
|-
| '''CLK'''
| style="text-align: left;"| '''23号引脚'''
| style="text-align: left;"| '''13号引脚'''
|-
| '''CS0'''
| style="text-align: left;"| '''24号引脚'''
| style="text-align: left;"| '''11号引脚'''
|}
'''在Linux系统中,40pin中的spi功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开spi1和spi2,注意同时打开多个配置时,下面红色字体内容需要使用空格隔开写在一行。'''
'''orangepi@orangepi4a:~$ sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-spi1-cs0-spidev.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-spi2-cs0-spidev.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>然后查看下linux系统中是否存在'''spidevx.x'''的设备节点,如果存在,说明SPI的配置已经生效了</p>
<p>orangepi@orangepi:~$ '''ls /dev/spidev*'''</p>
<p>/dev/spidev1.0 /dev/spidev2.0</p></li>
<li><p>然后可以使用examples中的'''spidev_test.py'''程序测试下SPI的回环功能,'''spidev_test.py'''程序需要指定下面的两个参数:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''--channel''':指定SPI的通道号</p></li>
<li><p>'''--port''':指定SPI的端口号</p></li></ol>
</li>
<li><p>先不短接 SPI 的 mosi 和 miso 两个引脚,运行spidev_test.py的输出结果如下所示,可以看到 TX 和 RX 的数据不一致</p>
<p>'''--channel和--port参数后面的x需要替换为具体SPI的通道号和SPI的端口号。'''</p>
<p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p></li></ol>
root@orangepi:~/wiringOP-Python/examples# '''python3 spidev_test.py \'''
'''--channel x --port x'''
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 |.............….|
<ol start="6" style="list-style-type: decimal;">
<li><p>然后使用杜邦线短接SPI的txd和rxd两个引脚再运行spidev_test.py的输出如下,可以看到发送和接收的数据一样,说明SPI回环测试正常</p>
<p>'''--channel和--port参数后面的x需要替换为具体SPI的通道号和SPI的端口号。'''</p>
<p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p></li></ol>
root@orangepi:~/wiringOP-Python/examples# '''python3 spidev_test.py \'''
'''--channel x --port x'''
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 |......@.......…|
<span id="pin-i2c测试-1"></span>
=== 40 pin I2C测试 ===
<ol style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 4A可用的i2c为i2c1、i2c4和i2c5共三组i2c总线</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>三组I2C总线在40pin中对应的引脚如下表所示。</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| '''I2C总线'''
| style="text-align: left;"| '''SDA对应40pin'''
| style="text-align: left;"| '''SCL对应40pin'''
| style="text-align: left;"| '''dtbo对应配置'''
|-
| style="text-align: left;"| '''I2C1'''
| style="text-align: left;"| '''12号引脚'''
| style="text-align: left;"| '''7号引脚'''
| style="text-align: left;"| '''sun55i-t527-i2c1'''
|-
| style="text-align: left;"| '''I2C4'''
| style="text-align: left;"| '''3号引脚'''
| style="text-align: left;"| '''5号引脚'''
| style="text-align: left;"| '''sun55i-t527-i2c4'''
|-
| style="text-align: left;"| '''I2C5'''
| style="text-align: left;"| '''27号引脚'''
| style="text-align: left;"| '''28号引脚'''
| style="text-align: left;"| '''sun55i-t527-i2c5'''
|}
'''在Linux系统中,40pin中的i2c功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开i2c1、i2c4和i2c5,注意同时打开多个配置时,下面红色字体内容需要使用空格隔开写在一行。'''
'''orangepi@orangepi4a:~$ sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-i2c1.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-i2c4.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-i2c5.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>启动linux系统后,先确认下/dev下存在i2c的设备节点</p>
<p>orangepi@orangepi:~$ '''ls /dev/i2c-*'''</p>
<p>'''/dev/i2c-0 /dev/i2c-1 /dev/i2c-3 /dev/i2c-31 /dev/i2c-4 /dev/i2c-5 /dev/i2c-6'''</p></li>
<li><p>然后开始测试i2c,首先安装下i2c-tools</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo''' '''apt-get install -y i2c-tools'''</p></li>
<li><p>然后在40 pin接头的i2c引脚上接一个i2c设备,这里以DS1307 RTC模块为例</p>
<p>[[File:Orange_Pi_4A-image164.png|180x153px]]</p></li>
<li><p>然后使用'''i2cdetect -y'''命令如果能检测到连接的i2c设备的地址,就说明i2c设备连接正确</p>
<p>orangepi@orangepi:~$ '''sudo i2cdetect -y 1''' #i2c1的命令</p>
<p>orangepi@orangepi:~$ '''sudo i2cdetect -y 4''' #i2c4的命令</p>
<p>orangepi@orangepi:~$ '''sudo i2cdetect -y 5''' #i2c5的命令</p></li></ol>
[[File:Orange_Pi_4A-image162.png|342x125px]]
<ol start="7" style="list-style-type: decimal;">
<li><p>然后可以运行'''examples'''中的'''ds1307.py'''测试程序读取RTC的时间</p>
<p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p>
<p>root@orangepi:~/wiringOP-Python/examples# '''python3 ds1307.py --device \'''</p>
<p>'''"/dev/i2c-1"'''</p>
<p>Thu 2022-06-16 04:35:46</p>
<p>Thu 2022-06-16 04:35:47</p>
<p>Thu 2022-06-16 04:35:48</p>
<p>^C</p>
<p>exit</p></li></ol>
<span id="pin的uart测试-1"></span>
=== 40 pin的UART测试 ===
<ol style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 4A可用的uart为uart2、uart3、uart4、uart5、uart6和uart7共六组uart总线</p>
<p>[[File:Orange_Pi_4A-image155.png|575x191px]]</p></li>
<li><p>六组UART总线在40 pin中对应的引脚如下表所示。</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| '''UART总线'''
| style="text-align: left;"| '''RX对应40pin'''
| style="text-align: left;"| '''TX对应40pin'''
| style="text-align: left;"| '''dtbo对应配置'''
|-
| style="text-align: left;"| '''UART2'''
| style="text-align: left;"| '''13号引脚'''
| style="text-align: left;"| '''11号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart2'''
|-
| style="text-align: left;"| '''UART3'''
| style="text-align: left;"| '''33号引脚'''
| style="text-align: left;"| '''32号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart3'''
|-
| style="text-align: left;"| '''UART4'''
| style="text-align: left;"| '''5号引脚'''
| style="text-align: left;"| '''3号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart4'''
|-
| style="text-align: left;"| '''UART5'''
| style="text-align: left;"| '''23号引脚'''
| style="text-align: left;"| '''24号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart5'''
|-
| style="text-align: left;"| '''UART6'''
| style="text-align: left;"| '''26号引脚'''
| style="text-align: left;"| '''22号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart6'''
|-
| style="text-align: left;"| '''UART7'''
| style="text-align: left;"| '''10号引脚'''
| style="text-align: left;"| '''8号引脚'''
| style="text-align: left;"| '''sun55i-t527-uart7'''
|}
'''在Linux系统中,40pin中的uart功能默认是关闭的,需要手动打开才能使用。'''
'''在/boot/extlinux/extlinux.conf中加入下面红色字体部分的配置,然后重启Linux系统就可以打开uart2、uart3、uart4、uart5、uart6和uart7,注意同时打开多个配置时,下面红色字体内容需要使用空格隔开写在一行。'''
'''orangepi@orangepi4a:~$ sudo vim /boot/extlinux/extlinux.conf'''
label Orange Pi
kernel /boot/uImage
initrd /boot/uInitrd
fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb
append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles
'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-uart2.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart3.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart4.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart5.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart6.dtbo'''
'''/boot/dtb/allwinner/overlay/sun55i-t527-uart7.dtbo'''
<ol start="3" style="list-style-type: decimal;">
<li><p>进入linux系统后,先确认下'''/dev'''下是否存在uart的设备节点</p>
<p>orangepi@orangepi:~$ '''ls /dev/ttyAS*'''</p>
<p>/dev/ttyAS0 /dev/ttyAS1 /dev/ttyAS2 /dev/ttyAS3 /dev/ttyAS4 /dev/ttyAS5 /dev/ttyAS6 /dev/ttyAS7</p></li>
<li><p>然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx</p></li>
<li><p>最后可以运行examples中的'''serialTest.py'''程序来测试下串口的回环功能,如果能看到下面的打印,说明串口回环测试正常(ttyASX需要替换为对应uart的节点名,请不要照抄)</p>
<p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p>
<p>root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device /dev/ttyASX'''</p>
<p>Out: 0: -> 0</p>
<p>Out: 1: -> 1</p>
<p>Out: 2: -> 2</p>
<p>Out: 3: -> 3</p>
<p>Out: 4:^C</p>
<p>exit</p></li></ol>
== 硬件看门狗测试 ==
Orange Pi发布的linux系统中预装了watchdog_test程序,可以直接测试。
运行watchdog_test程序的方法如下所示:
<ol style="list-style-type: lower-alpha;">
<li><p>第二个参数10表示看门狗的计数时间,如果这个时间内没有喂狗,系统会重启</p></li>
<li><p>我们可以通过按下键盘上的任意键(ESC除外)来喂狗,喂狗后,程序会打印一行keep alive表示喂狗成功</p>
<p>orangepi@orangepi:~$ '''sudo watchdog_test 10'''</p>
<p>open success</p>
<p>options is 33152,identity is sunxi-wdt</p>
<p>put_usr return,if 0,success:0</p>
<p>The old reset time is: 16</p>
<p>return ENOTTY,if -1,success:0</p>
<p>return ENOTTY,if -1,success:0</p>
<p>put_user return,if 0,success:0</p>
<p>put_usr return,if 0,success:0</p>
<p>keep alive</p>
<p>keep alive</p>
<p>keep alive</p></li></ol>
<span id="查看t527芯片的chipid"></span>
== 查看T527芯片的chipid ==
查看T527芯片chipid的命令如下所示,每个芯片的chipid都是不同的,所以可以使用chipid来区分多个开发板。
orangepi@orangepi:~# '''cat /sys/class/sunxi_info/sys_info |grep sunxi_serial'''
sunxi_serial : 208d211475779d0c0000019000000000
<span id="python相关说明"></span>
== Python相关说明 ==
<span id="python源码编译安装的方法"></span>
=== Python源码编译安装的方法 ===
'''如果使用的Ubuntu或者Debian系统软件仓库中的Python版本不符合开发的要求,想要使用最新版本的Python,可以使用下面的方法下载Python的源码包来编译安装最新版本的Python。'''
'''下面演示的是编译安装Python3.9的最新版本,如果要编译安装其他的版本的Python,方法也是一样的(需要下载想要安装的Python对应的源码)。'''
<ol style="list-style-type: decimal;">
<li><p>首先安装编译Python需要的依赖包</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y build-essential zlib1g-dev \'''</p>
<p>'''libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev \'''</p>
<p>'''libreadline-dev libffi-dev curl libbz2-dev'''</p></li>
<li><p>然后下载最新版本的Python3.9源码并解压</p>
<p>orangepi@orangepi:~$ '''wget \'''</p>
<p>[https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz '''https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz''']</p>
<p>orangepi@orangepi:~$ '''tar xvf Python-3.9.10.tgz'''</p></li>
<li><p>然后运行配置命令</p>
<p>orangepi@orangepi:~$ '''cd Python-3.9.10'''</p>
<p>orangepi@orangepi:~/Python-3.9.10$ '''./configure --enable-optimizations'''</p></li>
<li><p>然后编译安装Python3.9,编译时间大概需要半个小时左右</p>
<p>orangepi@orangepi:~/Python-3.9.10$ '''make -j4'''</p>
<p>orangepi@orangepi:~/Python-3.9.10$ '''sudo make altinstall'''</p></li>
<li><p>安装完后可以使用下面的命令查看下刚安装的Python的版本号</p>
<p>orangepi@orangepi:~/Python-3.9.10$ '''python3.9 --version'''</p>
<p>'''Python 3.9.10'''</p></li>
<li><p>然后更新下pip</p>
<p>orangepi@orangepi:~$ '''/usr/local/bin/python3.9 -m pip install --upgrade pip'''</p></li></ol>
<span id="python更换pip源的方法"></span>
=== Python更换pip源的方法 ===
'''Linux系统pip默认使用的源为Python官方的源,但是国内访问Python官方的源速度是很慢的,并且经常会由于网络原因导致Python软件包安装失败。所以在使用pip安装Python库时,请记得更换下pip源。'''
<ol style="list-style-type: decimal;">
<li><p>首先安装下'''python3-pip'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y python3-pip'''</p></li>
<li><p>Linux下永久更换pip源的方法</p>
<ol style="list-style-type: lower-alpha;">
<li><p>先新建'''~/.pip'''目录,然后添加'''pip.conf'''配置文件,并在其中设置pip的源为清华源</p>
<p>orangepi@orangepi:~$ '''mkdir -p ~/.pip'''</p>
<p>orangepi@orangepi:~$ '''cat <<EOF > ~/.pip/pip.conf'''</p>
<p>'''[global]'''</p>
<p>'''timeout = 6000'''</p>
<p>'''index-url = https://pypi.tuna.tsinghua.edu.cn/simple'''</p>
<p>'''trusted-host = pypi.tuna.tsinghua.edu.cn'''</p>
<p>'''EOF'''</p></li>
<li><p>然后使用pip3安装Python库速度就会很快了</p></li></ol>
</li>
<li><p>Linux下临时更换pip源的方法,其中的'''<packagename>'''需要替换为具体的包名</p>
<p>orangepi@orangepi:~$ '''pip3 install <packagename> -i \'''</p>
<p>'''https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn'''</p></li></ol>
<span id="安装docker的方法"></span>
== 安装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.'''
'''.….'''
<blockquote></blockquote>
使用docker命令时,如果提示'''permission denied''',请将当前用户加入到docker用户组,这样不需要sudo就能运行docker命令了。
orangepi@orangepi:~$ '''sudo usermod -aG docker $USER'''
'''注意:需要退出重新登录系统才能生效,重启系统也可以。'''
<span id="home-assistant的安装方法"></span>
== Home Assistant的安装方法 ==
'''注意,这里只会提供在Ubuntu或者Debian系统中安装Home Assistant的方法,Home Assistant详细的使用方法请参考官方文档或者相应的书籍。'''
=== 通过docker安装 ===
<ol style="list-style-type: decimal;">
<li><p>首先请安装好docker,并确保docker能正常运行。docker的安装步骤请参考[[#安装docker的方法|'''安装Docker的方法''']]一节的说明。</p></li>
<li><p>然后可以搜索下Home Assistant的docker镜像</p>
<p>orangepi@orangepi:~$ '''docker search homeassistant'''</p></li>
<li><p>然后使用下面的命令下载Home Assistant的docker镜像到本地,镜像大小大概有1GB多,下载时间会比较长,请耐心等待下载完成</p>
<p>orangepi@orangepi:~$ '''docker pull homeassistant/home-assistant'''</p>
<p>Using default tag: latest</p>
<p>latest: Pulling from homeassistant/home-assistant</p>
<p>be307f383ecc: Downloading</p>
<p>5fbc4c07ac88: Download complete</p>
<p>'''...... (省略部分输出)'''</p>
<p>3cc6a1510c9f: Pull complete</p>
<p>7a4e4d5b979f: Pull complete</p>
<p>Digest: sha256:81d381f5008c082a37da97d8b08dd8b358dae7ecf49e62ce3ef1eeaefc4381bb</p>
<p>Status: Downloaded newer image for homeassistant/home-assistant:latest</p>
<p>docker.io/homeassistant/home-assistant:latest</p></li>
<li><p>然后可以使用下面的命令查看下刚下载的Home Assistant的docker镜像</p>
<p>orangepi@orangepi:~$ '''docker images homeassistant/home-assistant'''</p>
<p>REPOSITORY TAG IMAGE ID CREATED SIZE</p>
<p>homeassistant/home-assistant latest bfa0ab9e1cf5 2 months ago '''1.17GB'''</p></li>
<li><p>此时就可以运行Home Assistant的docker容器了</p>
<p>orangepi@orangepi:~$ '''docker run -d \'''</p>
<p>'''--name homeassistant \'''</p>
<p>'''--privileged \'''</p>
<p>'''--restart=unless-stopped \'''</p>
<p>'''-e TZ=Asia/Shanghai \'''</p>
<p>'''-v /home/orangepi/home-assistant:/config \'''</p>
<p>'''--network=host \'''</p>
<p>'''homeassistant/home-assistant:latest'''</p></li>
<li><p>然后在浏览器中输入【开发板的IP地址:8123】就能看到Home Assistant的界面</p>
<p>'''Home Assistant容器的启动需要一段时间,如果下面的界面没有正常显示,请等待几秒钟再刷新。如果等待一分钟以上还没有正常显示下面的界面说明Home Assistant安装有问题,此时需要去检查前面的安装设置过程是否有问题了。'''</p>
<p>[[File:Orange_Pi_4A-image165.png|576x209px]]</p></li>
<li><p>然后输入'''姓名、用户名'''和'''密码'''再点击'''创建账号'''</p>
<p>[[File:Orange_Pi_4A-image166.png|220x279px]]</p></li>
<li><p>然后按照界面提示根据自己的喜好设置,再点击下一步</p>
<p>[[File:Orange_Pi_4A-image167.png|575x297px]]</p></li>
<li><p>然后点击下一步</p>
<p>[[File:Orange_Pi_4A-image168.png|576x185px]]</p></li>
<li><p>然后点击完成</p>
<p>[[File:Orange_Pi_4A-image169.png|576x117px]]</p></li>
<li><p>Home Assistant最终显示的主界面如下图所示</p>
<p>[[File:Orange_Pi_4A-image170.png|574x294px]]</p></li>
<li><p>停止Home Assistant容器的方法</p>
<ol style="list-style-type: lower-alpha;">
<li><p>查看docker容器的命令如下所示</p>
<p>orangepi@orangepi:~$ '''docker ps -a'''</p></li>
<li><p>停止Home Assistant容器的命令如下所示</p>
<p>orangepi@orangepi:~$ '''docker stop homeassistant'''</p></li>
<li><p>删除Home Assistant容器的命令如下所示</p>
<p>orangepi@orangepi:~$ '''docker rm homeassistant'''</p></li></ol>
</li></ol>
=== 通过python安装 ===
'''安装前请先更换下pip的源为国内源,加快Python包的安装速度,配置方法见[[#python更换pip源的方法|Python更换pip源的方法]]一节的说明。'''
<ol style="list-style-type: decimal;">
<li><p>首先安装依赖包</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y python3 python3-dev python3-venv \'''</p>
<p>'''python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \'''</p>
<p>'''libopenjp2-7 libtiff5 libturbojpeg0-dev tzdata'''</p>
<p>'''如果是debian12请使用下面的命令:'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y python3 python3-dev python3-venv \'''</p>
<p>'''python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \'''</p>
<p>'''libopenjp2-7 libturbojpeg0-dev tzdata'''</p></li>
<li><p>然后需要编译安装Python3.9,方法请参考[[#python相关说明|'''Python源码编译安装的方法''']]一节</p>
<p>'''Ubuntu Jammy默认的Python版本就是Python3.10,所以无需编译安装。'''</p>
<p>'''Debian Bookworm默认的Python版本就是Python3.11,所以也无需编译安装。'''</p></li>
<li><p>然后创建Python虚拟环境</p>
<p>'''Debian Bookworm中是python3.11,请记得替换对应的命令。'''</p>
<p>orangepi@orangepi:~$ '''sudo mkdir /srv/homeassistant'''</p>
<p>orangepi@orangepi:~$ '''sudo chown orangepi:orangepi /srv/homeassistant'''</p>
<p>orangepi@orangepi:~$ '''cd /srv/homeassistant'''</p>
<p>orangepi@orangepi:/srv/homeassistant$ '''python3.9 -m venv .'''</p>
<p>orangepi@orangepi:/srv/homeassistant$ '''source bin/activate'''</p>
<p>(homeassistant) orangepi@orangepi:/srv/homeassistant$</p></li>
<li><p>然后安装需要的Python包</p>
<p>(homeassistant) orangepi@orangepi:/srv/homeassistant$ '''python3 -m pip install wheel'''</p></li>
<li><p>然后就可以安装Home Assistant Core</p>
<p>(homeassistant) orangepi@orangepi:/srv/homeassistant$ '''pip3 install homeassistant'''</p></li>
<li><p>然后输入下面的命令就可以运行Home Assistant Core</p>
<p>(homeassistant) orangepi@orangepi:/srv/homeassistant$ '''hass'''</p></li>
<li><p>然后在浏览器中输入【'''开发板的IP地址:8123'''】就能看到Home Assistant的界面</p>
<p>'''第一次运行hass命令时,会下载安装和缓存一些运行必须的库和依赖包。这个过程可能会花费几分钟的时间。注意,此时在浏览器中是无法看到Home Assistant的界面的,请等待一段时间后再刷新下。'''</p>
<p>[[File:Orange_Pi_4A-image171.png|576x203px]]</p></li></ol>
<span id="opencv的安装方法"></span>
== OpenCV的安装方法 ==
<span id="使用apt来安装opencv"></span>
=== 使用apt来安装OpenCV ===
<ol style="list-style-type: decimal;">
<li><p>安装命令如下所示</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y libopencv-dev python3-opencv'''</p></li>
<li><p>然后使用下面的命令打印OpenCV的版本号输出正常,说明OpenCV安装成功</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Ubuntu22.04中OpenCV的版本如下所示:</p>
<p>orangepi@orangepi:~$ '''python3 -c "import cv2; print(cv2.__version__)"'''</p>
<p>'''4.5.4'''</p></li>
<li><p>Debian12中OpenCV的版本如下所示:</p>
<p>orangepi@orangepi:~$ '''python3 -c "import cv2; print(cv2.__version__)"'''</p>
<p>'''4.6.0'''</p></li></ol>
</li></ol>
<span id="宝塔linux面板的安装方法"></span>
== 宝塔Linux面板的安装方法 ==
'''宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能(摘抄自[https://www.bt.cn/ 宝塔官网])'''
<ol style="list-style-type: decimal;">
<li><p>首先需要扩展下'''/tmp'''空间的大小,设置完后需要'''重启下开发板的linux系统''',命令如下所示:</p>
<p>orangepi@orangepi:~$ '''sudo sed -i 's/nosuid/&,size=2G/' /etc/fstab'''</p>
<p>orangepi@orangepi:~$ '''sudo reboot'''</p></li>
<li><p>重启后,可以看到'''/tmp'''空间的大小变为2G了</p>
<p>orangepi@orangepi:~$ '''df -h | grep "/tmp"'''</p>
<p>tmpfs 2.0G 12K '''2.0G''' 1% /tmp</p></li>
<li><p>然后在linux系统中输入下面的命令就可以开始宝塔的安装</p>
<p>orangepi@orangepi:~$ '''sudo install_bt_panel.sh'''</p></li>
<li><p>然后宝塔安装程序会提醒是否安装'''Bt-Panel'''到'''/www'''文件夹,此时输入'''y'''即可</p>
<p>+----------------------------------------------------------------------</p>
<p>| Bt-WebPanel FOR CentOS/Ubuntu/Debian</p>
<p>+----------------------------------------------------------------------</p>
<p>| Copyright © 2015-2099 BT-SOFT(http://www.bt.cn) All rights reserved.</p>
<p>+----------------------------------------------------------------------</p>
<p>| The WebPanel URL will be http://SERVER_IP:8888 when installed.</p>
<p>+----------------------------------------------------------------------</p>
<p>Do you want to install Bt-Panel to the /www directory now?(y/n): '''y'''</p></li>
<li><p>然后要做的就是耐心等待,当看到终端输出下面的打印信息时,说明宝塔已经安装完成,整个安装过程大约耗时34分钟,根据网络速度的不同可能会有一些差别</p>
<p>[[File:Orange_Pi_4A-image172.png|576x233px]]</p></li>
<li><p>此时在浏览器中输入上面显示的'''面板地址'''就可以打开宝塔Linux面板的登录界面,然后在对应的位置输入上图显示的'''username'''和'''password'''就可以登录进宝塔</p>
<p>[[File:Orange_Pi_4A-image173.png|575x281px]]</p></li>
<li><p>成功登录宝塔后的会弹出下面的欢迎界面,首先请将中间的用户须知阅读完拖到最下面,然后就可以选择”我已同意并阅读《用户协议》“,接着点击”进入面板”就可以进入宝塔了</p>
<p>[[File:Orange_Pi_4A-image174.png|575x317px]]</p></li>
<li><p>进入宝塔后首先会提示需要绑定宝塔官网的账号,如果没有账号可以去宝塔的官网('''https://www.bt.cn''')注册一个</p>
<p>[[File:Orange_Pi_4A-image175.png|576x300px]]</p></li>
<li><p>最终显示的界面如下图所示,可以很直观的看到开发板Linux系统的一些状态信息,比如负载状态、CPU的使用率、内存使用率和存储空间的使用情况等</p>
<p>[[File:Orange_Pi_4A-image176.png|575x306px]]</p></li>
<li><p>宝塔的更多功能可以参考下面资料自行探索</p>
<p>使用手册:[http://docs.bt.cn '''http://docs.bt.cn''']</p>
<p>论坛地址:[https://www.bt.cn/bbs '''https://www.bt.cn/bbs''']</p>
<p>GitHub链接:'''https://github.com/aaPanel/BaoTa'''</p></li></ol>
<span id="qt的安装方法"></span>
== QT的安装方法 ==
<ol style="list-style-type: decimal;">
<li><p>使用下面的脚本可以安装QT5和QT Creator</p>
<p>orangepi@orangepi:~$ '''install_qt.sh'''</p></li>
<li><p>安装完后会自动打印QT的版本号</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Ubuntu22.04自带的QT版本为'''5.15.3'''</p>
<p>orangepi@orangepi:~$ '''install_qt.sh'''</p>
<p>......</p>
<p>QMake version 3.1</p>
<p>Using Qt version '''5.15.3''' in /usr/lib/aarch64-linux-gnu</p></li>
<li><p>Debian12自带的QT版本为'''5.15.8'''</p>
<p>orangepi@orangepi:~$ '''install_qt.sh'''</p>
<p>......</p>
<p>QMake version 3.1</p>
<p>Using Qt version '''5.15.8''' in /usr/lib/aarch64-linux-gnu</p></li></ol>
</li>
<li><p>然后在'''Applications'''列表中就可以看到QT Creator的启动图标</p>
<p>[[File:Orange_Pi_4A-image177.png|575x323px]]</p>
<p>也可以使用下面的命令打开QT Creator</p>
<p>orangepi@orangepi:~$ '''qtcreator'''</p></li>
<li><p>QT Creator打开后的界面如下所示</p>
<div class="figure">
[[File:Orange_Pi_4A-image178.png|576x324px|Screenshot from 2024-09-27 06-29-42]]
</div></li>
<li><p>QT Creator的版本如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>QT Creator在'''Ubuntu22.04'''中的默认版本如下所示</p>
<p>[[File:Orange_Pi_4A-image179.png|426x232px]]</p></li>
<li><p>QT Creator在'''Debian12'''中的默认版本如下所示</p>
<p>[[File:Orange_Pi_4A-image180.png|449x277px]]</p></li></ol>
</li>
<li><p>然后设置下QT</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先打开'''Help'''->'''About Plugins...'''</p>
<p>[[File:Orange_Pi_4A-image181.png|576x163px]]</p></li>
<li><p>然后去掉'''ClangCodeModel'''的那个勾</p>
<p>[[File:Orange_Pi_4A-image182.png|380x256px]]</p></li>
<li><p>'''设置完后需要重启下QT Creator'''</p></li>
<li><p>然后确保QT Creator使用的GCC编译器,如果默认为Clang,请修改为GCC</p>
<p>'''Debian12请跳过这步。'''</p>
<p>[[File:Orange_Pi_4A-image183.png|576x328px]]</p>
<p>[[File:Orange_Pi_4A-image184.png|575x325px]]</p></li></ol>
</li>
<li><p>然后就可以打开一个示例代码</p>
<p>[[File:Orange_Pi_4A-image185.png|576x326px]]</p></li>
<li><p>点击示例代码后会自动打开对应的说明文档,可以仔细看下其中的使用说明</p>
<p>[[File:Orange_Pi_4A-image186.png|575x238px]]</p></li>
<li><p>然后点击下'''Configure Project'''</p>
<p>[[File:Orange_Pi_4A-image187.png|549x308px]]</p></li>
<li><p>然后点击左下角的绿色三角形编译运行下示例代码</p>
<p>[[File:Orange_Pi_4A-image188.png|546x292px]]</p></li>
<li><p>等待一段时间后,会弹出下图所示的界面,此时就说明QT能正常编译运行</p>
<p>[[File:Orange_Pi_4A-image189.png|575x336px]]</p></li>
<li><p>参考资料</p>
<p>[https://wiki.qt.io/Install_Qt_5_on_Ubuntu '''https://wiki.qt.io/Install_Qt_5_on_Ubuntu''']</p>
<p>[https://download.qt.io/archive/qtcreator '''https://download.qt.io/archive/qtcreator''']</p>
<p>[https://download.qt.io/archive/qt '''https://download.qt.io/archive/qt''']</p></li></ol>
<span id="ros安装方法"></span>
== ROS安装方法 ==
<span id="ubuntu22.04安装ros-2-humble的方法"></span>
=== Ubuntu22.04安装ROS 2 Humble的方法 ===
<ol style="list-style-type: decimal;">
<li><p>使用'''install_ros.sh'''脚本可以安装ros2</p>
<p>orangepi@orangepi:~$ '''install_ros.sh ros2'''</p></li>
<li><p>'''install_ros.sh'''脚本安装完ros2后会自动运行下'''ros2 -h'''命令,如果能看到下面的打印,说明ros2安装完成</p>
<p>usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...</p>
<p>ros2 is an extensible command-line tool for ROS 2.</p>
<p>optional arguments:</p>
<p>-h, --help show this help message and exit</p>
<p>Commands:</p>
<p>action Various action related sub-commands</p>
<p>bag Various rosbag related sub-commands</p>
<p>component Various component related sub-commands</p>
<p>daemon Various daemon related sub-commands</p>
<p>doctor Check ROS setup and other potential issues</p>
<p>interface Show information about ROS interfaces</p>
<p>launch Run a launch file</p>
<p>lifecycle Various lifecycle related sub-commands</p>
<p>multicast Various multicast related sub-commands</p>
<p>node Various node related sub-commands</p>
<p>param Various param related sub-commands</p>
<p>pkg Various package related sub-commands</p>
<p>run Run a package specific executable</p>
<p>security Various security related sub-commands</p>
<p>service Various service related sub-commands</p>
<p>topic Various topic related sub-commands</p>
<p>wtf Use `wtf` as alias to `doctor`</p>
<p>Call `ros2 <command> -h` for more detailed usage.</p></li>
<li><p>然后可以使用 '''test_ros.sh'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行</p>
<p>orangepi@orangepi:~$ '''test_ros.sh'''</p>
<p>[INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1'</p>
<p>[INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]</p>
<p>[INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2'</p>
<p>[INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]</p>
<p>[INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'</p>
<p>[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]</p></li>
<li><p>运行下面的命令可以打开rviz2</p>
<p>orangepi@orangepi:~$ '''source /opt/ros/humble/setup.bash'''</p>
<p>orangepi@orangepi:~$ '''ros2 run rviz2 rviz2'''</p>
<div class="figure">
[[File:Orange_Pi_4A-image190.png|576x324px|Screenshot from 2024-09-27 06-18-57]]
</div></li>
<li><p>参考文档</p>
<p>'''http://docs.ros.org/en/humble/index.html'''</p>
<p>[http://docs.ros.org/en/galactic/Tutorials.html '''http://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html''']</p></li></ol>
== 安装内核头文件的方法 ==
<ol style="list-style-type: decimal;">
<li><p>OPi发布的Linux镜像默认自带了内核头文件的deb包,存放的位置为'''/opt/'''</p>
<p>orangepi@orangepi:~$ '''ls /opt/linux-headers*'''</p>
<p>/opt/linux-headers-xxx-sun55iw3_x.x.x_arm64.deb</p></li>
<li><p>使用下面的命令可以安装内核头文件的deb包</p>
<p>orangepi@orangepi:~$ '''sudo dpkg -i /opt/linux-headers*.deb'''</p></li>
<li><p>安装完后在'''/usr/src'''下就能看到内核头文件所在的文件夹</p>
<p>orangepi@orangepi:~$ '''ls /usr/src'''</p>
<p>linux-headers-x.x.x</p></li>
<li><p>然后可以编译下Linux镜像中自带的hello内核模块的源码,hello模块的源码在'''/usr/src/hello'''中,进入此目录后,然后使用make命令编译即可。</p>
<p>orangepi@orangepi:~$ '''cd /usr/src/hello/'''</p>
<p>orangepi@orangepi:/usr/src/hello$ '''sudo make'''</p>
<p>make -C /lib/modules/5.15.147-sun55iw3/build M=/usr/src/hello modules</p>
<p>make[1]: Entering directory '/usr/src/linux-headers-5.15.147-sun55iw3'</p>
<p>CC [M] /usr/src/hello/hello.o</p>
<p>MODPOST /usr/src/hello/Module.symvers</p>
<p>CC [M] /usr/src/hello/hello.mod.o</p>
<p>LD [M] /usr/src/hello/hello.ko</p>
<p>make[1]: Leaving directory '/usr/src/linux-headers-5.15.147-sun55iw3'</p></li>
<li><p>编译完后会生成'''hello.ko'''内核模块</p>
<p>orangepi@orangepi:/usr/src/hello$ '''ls *.ko'''</p>
<p>hello.ko</p></li>
<li><p>使用'''insmod'''命令可以将'''hello.ko'''内核模块插入内核中</p>
<p>orangepi@orangepi:/usr/src/hello$ '''sudo insmod hello.ko'''</p></li>
<li><p>然后使用'''demsg'''命令可以查看下'''hello.ko'''内核模块的输出,如果能看到下面的输出说明'''hello.ko'''内核模块加载正确</p>
<p>orangepi@orangepi:/usr/src/hello$ '''dmesg | grep "Hello"'''</p>
<p>[ 2871.893988] '''Hello Orange Pi -- init'''</p></li>
<li><p>使用'''rmmod'''命令可以卸载'''hello.ko'''内核模块</p>
<p>orangepi@orangepi:/usr/src/hello$ '''sudo rmmod hello'''</p>
<p>orangepi@orangepi:/usr/src/hello$ '''dmesg | grep "Hello"'''</p>
<p>[ 2871.893988] Hello Orange Pi -- init</p>
<p>[ 3173.800892] '''Hello Orange Pi -- exit'''</p></li></ol>
<span id="寸mipi-lcd屏幕的使用方法"></span>
== 10.1寸MIPI LCD屏幕的使用方法 ==
<span id="寸mipi-屏幕的组装方法"></span>
=== 10.1寸MIPI 屏幕的组装方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先准备需要的配件</p>
<ol style="list-style-type: lower-alpha;">
<li><p>10.1寸MIPI LCD显示屏+触摸屏</p>
<p>[[File:Orange_Pi_4A-image191.png|288x222px]]</p></li>
<li><p>屏幕转接板+31pin转40pin排线</p>
<div class="figure">
[[File:Orange_Pi_4A-image192.png|191x165px|DD9A8F44-0D8F-4f06-9473-B539DEED850C]]
</div></li>
<li><p>30pin MIPI排线</p>
<div class="figure">
[[File:Orange_Pi_4A-image193.png|355x33px|C2164119-6EC3-49ae-9A95-BE323F51FAE1]]
</div></li>
<li><p>12pin 触摸屏排线</p>
<p>[[File:Orange_Pi_4A-image194.png|293x43px]]</p></li></ol>
</li>
<li><p>按照下图将12pin 触摸屏排线、31pin转40pin排线、30pin MIPI排线接到屏幕转接板上,注意'''触摸屏排线蓝色的绝缘面朝下''',其它两根排线绝缘面朝上,如果接错会导致无显示或者不能触摸的问题</p>
<p>[[File:Orange_Pi_4A-image195.png|487x120px]]</p></li>
<li><p>按照下图将连接好排线的转接板置于MIPI LCD屏上面,并通过31pin转40pin排线连接MIPI LCD屏与转接板</p></li></ol>
[[File:Orange_Pi_4A-image196.png|286x421px]]
<ol start="4" style="list-style-type: decimal;">
<li><p>然后通过12pin触摸屏排线连接触摸屏与转接板,注意绝缘面的朝向</p>
<p>[[File:Orange_Pi_4A-image197.png|204x130px]]</p></li>
<li><p>最后通过30pin MIPI排线连接到开发板的LCD接口上</p>
<p>[[File:Orange_Pi_4A-image198.png|268x178px]]</p></li></ol>
<span id="打开10.1寸mipi-lcd屏幕配置的方法"></span>
=== 打开10.1寸MIPI LCD屏幕配置的方法 ===
<ol style="list-style-type: decimal;">
<li><p>Linux镜像默认是没有打开mipi lcd屏幕的配置的,如果需要使用mipi lcd屏幕,需要手动打开才行。</p></li>
<li><p>开发板上mipi lcd屏幕的接口如下图所示:</p>
<p>[[File:Orange_Pi_4A-image199.png|245x140px]]</p></li>
<li><p>打开mipi lcd配置的方法如下所示:</p>
<p>orangepi@orangepi:~$ '''sudo vim /boot/extlinux/extlinux.conf'''</p>
<p>label Orange Pi</p>
<p>kernel /boot/uImage</p>
<p>initrd /boot/uInitrd</p>
<p>fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb</p>
<p>append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles</p>
<p>'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-lcd.dtbo''' #需要添加的配置</p></li>
<li><p>'''然后重启OPi OS Arch系统'''</p></li>
<li><p>重启后可以看到lcd屏幕的显示如下所示(默认为竖屏):</p></li></ol>
[[File:Orange_Pi_4A-image200.png|259x379px]]
=== 旋转显示和触摸方向的方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先点击桌面右上角的这块区域</p>
<p>[[File:Orange_Pi_4A-image201.png|211x137px]]</p></li>
<li><p>然后打开设置</p>
<p>[[File:Orange_Pi_4A-image202.png|215x167px]]</p></li>
<li><p>然后选择'''Displays'''</p>
<p>[[File:Orange_Pi_4A-image203.png|344x251px]]</p></li>
<li><p>然后在'''Displays'''的'''Orientation'''中选择想要旋转的方向</p>
<p>[[File:Orange_Pi_4A-image204.png|344x247px]]</p></li>
<li><p>然后选择'''Apply'''</p>
<p>[[File:Orange_Pi_4A-image205.png|339x246px]]</p></li>
<li><p>然后就能看到屏幕已经旋转好了,此时还需要选择'''Keep Changes'''来最后确定旋转</p>
<p>[[File:Orange_Pi_4A-image206.png|235x111px]]</p></li>
<li><p>LCD屏幕旋转90度后的显示如下所示:</p>
<p>[[File:Orange_Pi_4A-image207.png|338x232px]]</p></li>
<li><p>'''Linux系统LCD屏幕的触摸功能会随着显示方向的旋转而旋转,无需其他设置'''</p></li></ol>
<span id="edp屏幕的使用方法"></span>
== eDP屏幕的使用方法 ==
<span id="edp屏幕的组装方法"></span>
=== eDP屏幕的组装方法 ===
<ol style="list-style-type: decimal;">
<li><p>目前仅适配了一款15.6寸的eDP屏幕,包含的配件如下:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>0.5间距30pin单头同向排线</p>
<p>[[File:Orange_Pi_4A-image208.png|199x197px]]</p></li>
<li><p>15.6寸 eDP显示屏,分辨率为1920x1080。</p>
<div class="figure">
[[File:Orange_Pi_4A-image209.png|212x367px|8763EEF4-115F-4b95-A8FB-CA0A62F57B70]]
</div></li></ol>
</li>
<li><p>将30pin单头同向排线的FPC端连接到开发板的eDP接口,另一端连接到屏幕的eDP接口</p>
<p>[[File:Orange_Pi_4A-image210.png|228x94px]]</p></li></ol>
<span id="打开edp屏幕配置的方法"></span>
=== 打开eDP屏幕配置的方法 ===
'''注意,下面介绍的方法仅适用于已适配过的eDP屏幕,如果客户使用的是未经过适配的屏幕,按照下面的方法是无法点亮的。'''
# Linux镜像默认是没有打开eDP屏幕的配置的,如果需要使用eDP屏幕,需要手动打开才行。
<!-- -->
<ol style="list-style-type: lower-alpha;">
<li><p>首先在'''/boot/extlinux/extlinux.conf'''中加入下面的配置</p>
<p>orangepi@orangepi:~$ '''sudo vim /boot/extlinux/extlinux.conf'''</p>
<p>label Orange Pi</p>
<p>kernel /boot/uImage</p>
<p>initrd /boot/uInitrd</p>
<p>fdt /boot/dtb/allwinner/sun55i-t527-orangepi-4a.dtb</p>
<p>append root=UUID=de4d1c86-fd02-41ab-ad5f-3c557d669f46 earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles</p>
<p>'''FDTOVERLAYS /boot/dtb/allwinner/overlay/sun55i-t527-edp.dtbo''' #需要添加的配置</p></li>
<li><p>然后重启系统</p>
<p>[orangepi@orangepi-pc ~]$ '''sudo reboot'''</p></li></ol>
<!-- -->
<ol start="2" style="list-style-type: decimal;">
<li>启动后可以看到eDP屏幕的显示如下所示:</li></ol>
[[File:Orange_Pi_4A-image211.png|397x240px]]
<span id="linux系统支持的部分编程语言测试"></span>
== Linux系统支持的部分编程语言测试 ==
<span id="debian-bookworm系统"></span>
=== Debian Bookworm系统 ===
<ol style="list-style-type: decimal;">
<li><p>Debian Bookworm默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p>
<ol style="list-style-type: lower-alpha;">
<li><p>gcc的版本如下所示</p>
<p>orangepi@orangepi:~$ '''gcc --version'''</p>
<p>gcc (Debian 12.2.0-14) 12.2.0</p>
<p>Copyright (C) 2022 Free Software Foundation, Inc.</p>
<p>This is free software; see the source for copying conditions. There is NO</p>
<p>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p></li>
<li><p>编写C语言的'''hello_world.c'''程序</p>
<p>orangepi@orangepi:~$ '''vim hello_world.c'''</p>
<p>#include <stdio.h></p>
<p>int main(void)</p>
<p>{</p>
<p>printf("Hello World!\n");</p>
<p>return 0;</p>
<p>}</p></li>
<li><p>然后编译运行'''hello_world.c'''</p>
<p>orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''</p>
<p>orangepi@orangepi:~$ '''./hello_world'''</p>
<p>Hello World!</p></li></ol>
</li>
<li><p>Debian Bookworm默认安装有Python3</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Python具体版本如下所示</p>
<p>orangepi@orangepi:~$ '''python3'''</p>
<p>Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux</p>
<p>Type "help", "copyright", "credits" or "license" for more information.</p>
<p>>>></p>
<p>'''使用Ctrl+D快捷键可退出python的交互模式。'''</p></li>
<li><p>编写Python语言的'''hello_world.py'''程序</p>
<p>orangepi@orangepi:~$ '''vim hello_world.py'''</p>
<p>print('Hello World!')</p></li>
<li><p>运行'''hello_world.py'''的结果如下所示</p>
<p>orangepi@orangepi:~$ '''python3 hello_world.py'''</p>
<p>Hello World!</p></li></ol>
</li>
<li><p>Debian Bookworm默认没有安装Java的编译工具和运行环境</p>
<ol style="list-style-type: lower-alpha;">
<li><p>可以使用下面的命令安装openjdk,Debian Bookworm中最新版本为openjdk-17</p>
<p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''</p></li>
<li><p>安装完后可以查看下Java的版本</p>
<p>orangepi@orangepi:~$ '''java --version'''</p></li>
<li><p>编写Java版本的'''hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''vim hello_world.java'''</p>
<p>public class hello_world</p>
<p>{</p>
<p>public static void main(String[] args)</p>
<p>{</p>
<p>System.out.println("Hello World!");</p>
<p>}</p>
<p>}</p></li>
<li><p>然后编译运行'''hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''javac hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''java hello_world'''</p>
<p>Hello World!</p></li></ol>
</li></ol>
<span id="ubuntu-jammy系统"></span>
=== Ubuntu Jammy系统 ===
<ol style="list-style-type: decimal;">
<li><p>Ubuntu Jammy默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p>
<ol style="list-style-type: lower-alpha;">
<li><p>gcc的版本如下所示</p>
<p>orangepi@orangepi:~$ '''gcc --version'''</p></li></ol>
</li></ol>
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.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.
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>编写C语言的'''hello_world.c'''程序</p>
<p>orangepi@orangepi:~$ '''vim hello_world.c'''</p>
<p>#include <stdio.h></p>
<p>int main(void)</p>
<p>{</p>
<p>printf("Hello World!\n");</p>
<p>return 0;</p>
<p>}</p></li>
<li><p>然后编译运行'''hello_world.c'''</p>
<p>orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''</p>
<p>orangepi@orangepi:~$ '''./hello_world'''</p>
<p>Hello World!</p></li></ol>
<!-- -->
<ol start="2" style="list-style-type: decimal;">
<li><p>Ubuntu Jammy默认安装有Python3</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Python3具体版本如下所示</p>
<p>orangepi@orangepi:~$ '''python3'''</p>
<p>Python 3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0] on linux</p>
<p>Type "help", "copyright", "credits" or "license" for more information.</p>
<p>>>></p>
<p>'''使用Ctrl+D快捷键可退出python的交互模式。'''</p></li>
<li><p>编写Python语言的'''hello_world.py'''程序</p>
<p>orangepi@orangepi:~$ '''vim hello_world.py'''</p>
<p>print('Hello World!')</p></li>
<li><p>运行'''hello_world.py'''的结果如下所示</p>
<p>orangepi@orangepi:~$ '''python3 hello_world.py'''</p>
<p>Hello World!</p></li></ol>
</li>
<li><p>Ubuntu Jammy默认没有安装Java的编译工具和运行环境</p>
<ol style="list-style-type: lower-alpha;">
<li><p>可以使用下面的命令安装openjdk-18</p>
<p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-18-jdk'''</p></li>
<li><p>安装完后可以查看下Java的版本</p>
<p>orangepi@orangepi:~$ '''java --version'''</p>
<p>openjdk 18.0.2-ea 2022-07-19</p>
<p>OpenJDK Runtime Environment (build 18.0.2-ea+9-Ubuntu-222.04)</p>
<p>OpenJDK 64-Bit Server VM (build 18.0.2-ea+9-Ubuntu-222.04, mixed mode, sharing)</p></li>
<li><p>编写Java版本的'''hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''vim hello_world.java'''</p>
<p>public class hello_world</p>
<p>{</p>
<p>public static void main(String[] args)</p>
<p>{</p>
<p>System.out.println("Hello World!");</p>
<p>}</p>
<p>}</p></li>
<li><p>然后编译运行'''hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''javac hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''java hello_world'''</p>
<p>Hello World!</p></li></ol>
</li></ol>
<span id="上传文件到开发板linux系统中的方法"></span>
== 上传文件到开发板Linux系统中的方法 ==
<span id="在ubuntu-pc中上传文件到开发板linux系统中的方法"></span>
=== 在Ubuntu PC中上传文件到开发板Linux系统中的方法 ===
==== 使用scp命令上传文件的方法 ====
<ol style="list-style-type: decimal;">
<li><p>使用scp命令可以在Ubuntu PC中上传文件到开发板的Linux系统中,具体命令如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''file_path:'''需要替换为要上传文件的路径</p></li>
<li><p>'''orangepi:'''为开发板linux系统的用户名,也可以替换成其它的,比如root</p></li>
<li><p>'''192.168.xx.xx:''' 为开发板的IP地址,请根据实际情况进行修改</p></li>
<li><p>'''/home/orangepi:''' 开发板linux系统中的路径,也可以修改为其它的路径</p>
<p>test@test:~$ '''scp file_path orangepi@192.168.xx.xx:/home/orangepi/'''</p></li></ol>
</li>
<li><p>如果要上传文件夹,需要加上-r参数</p>
<p>test@test:~$ '''scp -r dir_path orangepi@192.168.xx.xx:/home/orangepi/'''</p></li>
<li><p>scp还有更多的用法,请使用下面的命令查看man手册</p></li></ol>
test@test:~$ '''man scp'''
==== 使用filezilla上传文件的方法 ====
<ol style="list-style-type: decimal;">
<li><p>首先在Ubuntu PC中安装filezilla</p>
<p>test@test:~$ '''sudo apt install -y filezilla'''</p></li>
<li><p>然后使用下面的命令打开filezilla</p>
<p>test@test:~$ '''filezilla'''</p></li>
<li><p>filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的</p>
<div class="figure">
[[File:Orange_Pi_4A-image212.png|576x453px|截图 2022-12-03 19-04-40]]
</div></li>
<li><p>连接开发板的方法如下图所示</p></li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image213.png|577x128px|IMG_256]]
</div>
<ol start="5" style="list-style-type: decimal;">
<li><p>然后选择'''保存密码''',再点击'''确定'''</p>
<p>[[File:Orange_Pi_4A-image214.png|249x181px]]</p></li>
<li><p>然后选择'''总是信任该主机''',再点击'''确定'''</p></li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image215.png|278x150px|IMG_256]]
</div>
<ol start="7" style="list-style-type: decimal;">
<li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image216.png|533x330px|IMG_256]]
</div>
<ol start="8" style="list-style-type: decimal;">
<li>然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Ubuntu PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了。</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image217.png|529x414px|IMG_256]]
</div>
<ol start="9" style="list-style-type: decimal;">
<li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了</p></li>
<li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol>
<span id="在windows-pc中上传文件到开发板linux系统中的方法"></span>
=== 在Windows PC中上传文件到开发板Linux系统中的方法 ===
<span id="使用filezilla上传文件的方法-1"></span>
==== 使用filezilla上传文件的方法 ====
# 首先下载filezilla软件Windows版本的安装文件,下载链接如下所示
[https://filezilla-project.org/download.php?type=client '''https://filezilla-project.org/download.php?type=client'''][[File:Orange_Pi_4A-image218.png|472x171px|IMG_256]]
[[File:Orange_Pi_4A-image219.png|384x276px]]
<ol start="2" style="list-style-type: decimal;">
<li><p>下载的安装包如下所示,然后双击直接安装即可</p>
<p>'''FileZilla_Server_1.5.1_win64-setup.exe'''</p></li></ol>
安装过程中,下面的安装界面请选择'''Decline''',然后再选择'''Next>'''
<div class="figure">
[[File:Orange_Pi_4A-image220.png|355x279px|IMG_256]]
</div>
<ol start="3" style="list-style-type: decimal;">
<li>filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image221.png|451x357px|IMG_256]]
</div>
<ol start="4" style="list-style-type: decimal;">
<li>连接开发板的方法如下图所示:</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image222.png|522x108px|IMG_256]]
</div>
<ol start="5" style="list-style-type: decimal;">
<li>然后选择'''保存密码''',再点击'''确定'''</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image223.png|207x146px|IMG_256]]
</div>
<ol start="6" style="list-style-type: decimal;">
<li>然后选择'''总是信任该主机''',再点击'''确定'''</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image224.png|221x109px|IMG_256]]
</div>
<ol start="7" style="list-style-type: decimal;">
<li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image225.png|449x332px|IMG_256]]
</div>
<ol start="8" style="list-style-type: decimal;">
<li>然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Windows PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了</li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image226.png|461x340px|IMG_256]]
</div>
<ol start="9" style="list-style-type: decimal;">
<li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了</p></li>
<li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol>
<span id="npu的使用说明"></span>
== NPU的使用说明 ==
=== 板端环境准备 ===
<ol style="list-style-type: decimal;">
<li><p>首先开发板端需要安装opencv和cmake。</p>
<p>orangepi@orangepi:~$ '''sudo apt update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt install libopencv-dev cmake'''</p></li>
<li><p>然后从官方百度云下载NPU示例程序的压缩包。</p></li>
<li><p>然后将NPU示例程序压缩包上传到开发板,并解压。</p>
<p>orangepi@orangepi:~$ '''tar -xvf board-demo.tar.gz'''</p></li>
<li><p>压缩包解压后,目录结构如下所示。</p>
<p>orangepi@orangepi:~$ '''cd board-demo/'''</p>
<p>orangepi@orangepi:~/board-demo$ '''ls'''</p>
<p>chineseocr common head_pose lenet libawnn_viplite libawutils mobilenet_v2_ssd_demo struct2depth struct2depth yolov5</p></li>
<li><p>然后需要将NPU库拷贝到系统的/usr/lib目录下,下面运行示例程序需要用到。</p></li></ol>
orangepi@orangepi:~/board-demo$ '''sudo cp ./common/lib_linux_aarch64/T527/*.so /usr/lib'''
=== 板端示例运行 ===
==== 运行mobilenet_v2_ssd目标检测示例 ====
<ol style="list-style-type: decimal;">
<li><p>首先编译mobilenet_v2_ssd目标检测示例。</p>
<p>orangepi@orangepi:~/board-demo$ '''cd mobilenet_v2_ssd_demo'''</p>
<p>orangepi@orangepi:~/board-demo/mobilenet_v2_ssd_demo$ '''mkdir build'''</p>
<p>orangepi@orangepi:~/board-demo/mobilenet_v2_ssd_demo$ '''cd build'''</p>
<p>orangepi@orangepi:~/board-demo/mobilenet_v2_ssd_demo/build$ '''cmake ..'''</p>
<p>orangepi@orangepi:~/board-demo/mobilenet_v2_ssd_demo/build$ '''make'''</p></li>
<li><p>然后执行下面的命令运行示例。</p>
<p>orangepi@orangepi:/root/board-demo/mobilenet_v2_ssd_demo/build$ '''./mbv2-ssd-demo -b ../model/mbv2_ssd_x527.nb -i ../000012.jpg'''</p></li>
<li><p>程序正常运行的输出信息如下所示。</p>
<p>orangepi@orangepi:/root/board-demo/mobilenet_v2_ssd_demo/build$ '''./mbv2-ssd-demo -b ../model/mbv2_ssd_x527.nb -i ../000012.jpg'''</p>
<p>................….</p>
<p>get output finished.</p>
<p>mbv2_ssd_postprocess.cpp run.</p>
<p>car = 0.97705 at 162 94 179 x 170</p>
<p>postprocess time : 0.025 Sec</p>
<p>destory npu finished.</p>
<p>~NpuUint.</p></li>
<li><p>输出结果会保存为当前目录的ssd_out.png</p>
<p>orangepi@orangepi4a:~/board-demo/mobilenet_v2_ssd_demo/build$ '''ls ssd_out.png'''</p>
<p>ssd_out.png</p>
<p>[[File:Orange_Pi_4A-image227.png|269x179px]]</p></li></ol>
==== 运行yolov5目标检测示例 ====
<ol style="list-style-type: decimal;">
<li><p>首先编译yolov5示例。</p>
<p>orangepi@orangepi:~/board-demo$ '''cd mobilenet_v2_ssd_demo'''</p>
<p>orangepi@orangepi:~/board-demo/yolov5$ '''mkdir build'''</p>
<p>orangepi@orangepi:~/board-demo/yolov5$ '''cd build'''</p>
<p>orangepi@orangepi:~/board-demo/yolov5/build$ '''cmake ..'''</p>
<p>orangepi@orangepi:~/board-demo/yolov5/build$ '''make'''</p></li>
<li><p>然后执行下面的命令运行示例。</p>
<p>orangepi@orangepi:~/board-demo/yolov5/build$ '''./yolov5 ../model/v2/yolov5.nb ../input_data/dog.jpg'''</p>
<p>./yolov5 nbg input</p>
<p>VIPLite driver software version 1.13.0.0-AW-2023-10-19</p>
<p>yolov5_preprocess.cpp run.</p>
<p>yolov5_postprocess.cpp run.</p>
<p>detection num: 3</p>
<p>16: 91%, [ 135, 218, 305, 553], dog</p>
<p>7: 69%, [ 473, 75, 689, 174], truck</p>
<p>1: 49%, [ 151, 121, 561, 431], bicycle</p></li>
<li><p>输出结果会保存为当前目录的result.png</p>
<p>orangepi@orangepi4a:~/board-demo/yolov5/build$ '''ls result.png'''</p>
<p>result.png</p>
<div class="figure">
[[File:Orange_Pi_4A-image228.png|323x241px|1729679452175]]
</div></li></ol>
==== 运行head_pose人体姿态识别示例 ====
<ol style="list-style-type: decimal;">
<li><p>首先编译head_pose示例。</p>
<p>orangepi@orangepi:~/board-demo$ '''cd head_pose'''</p>
<p>orangepi@orangepi:~/board-demo/head_pose$ '''mkdir build'''</p>
<p>orangepi@orangepi:~/board-demo/head_pose$ '''cd build'''</p>
<p>orangepi@orangepi:~/board-demo/head_pose/build$ '''cmake ..'''</p>
<p>orangepi@orangepi:~/board-demo/head_pose/build$ '''make'''</p></li>
<li><p>然后执行下面的命令运行示例。</p>
<p>orangepi@orangepi:~/board-demo/head_pose/build$ '''./head_pose -b1 ../model/rfb_landm_face_320_320_sim_x527.nb -b2 ../model/head_pose_x527.nb -i ../input_data/000438.jpg'''</p></li>
<li><p>输出结果会保存到当前目录的head_pose_result.jpg</p>
<p>orangepi@orangepi:~/board-demo/head_pose/build$ '''ls head_pose_result.jpg'''</p>
<p>head_pose_result.jpg</p>
<p>[[File:Orange_Pi_4A-image229.png|324x215px]]</p></li></ol>
==== 运行resnet50图像分类示例 ====
<ol style="list-style-type: decimal;">
<li><p>首先编译resnet50示例。</p>
<p>orangepi@orangepi:~/board-demo$ '''cd resnet50'''</p>
<p>orangepi@orangepi:~/board-demo/resnet50$ '''mkdir build'''</p>
<p>orangepi@orangepi:~/board-demo/resnet50$ '''cd build'''</p>
<p>orangepi@orangepi:~/board-demo/resnet50/build$ '''cmake ..'''</p>
<p>orangepi@orangepi:~/board-demo/resnet50/build$ '''make'''</p></li>
<li><p>然后执行下面的命令运行示例。</p>
<p>orangepi@orangepi:~/board-demo/resnet50/build$ '''./resnet50 ../model/v2/resnet50.nb ../input_data/dog_224_224.jpg'''</p></li>
<li><p>输出结果信息如下所示,输出了模型预测的前5名,其中最可能的类别是collie</p>
<p>orangepi@orangepi:~/board-demo/resnet50/build$ '''./resnet50 ../model/v2/resnet50.nb ../input_data/dog_224_224.jpg'''</p>
<p>...</p>
<p>========== top5 ==========</p>
<p>class id: 231, prob: 15.432617, label: collie</p>
<p>class id: 230, prob: 13.103271, label: Shetland sheepdog, Shetland sheep dog, Shetland</p>
<p>class id: 169, prob: 12.617920, label: borzoi, Russian wolfhound</p>
<p>class id: 224, prob: 12.423828, label: groenendael</p>
<p>class id: 160, prob: 10.191406, label: Afghan hound, Afghan</p>
<p>class_postprocess success.</p></li></ol>
==== 运行struct2depth深度检测示例 ====
<ol style="list-style-type: decimal;">
<li><p>首先编译struct2depth示例。</p>
<p>orangepi@orangepi:~/board-demo$ '''cd struct2depth'''</p>
<p>orangepi@orangepi:~/board-demo/struct2depth$ '''mkdir build'''</p>
<p>orangepi@orangepi:~/board-demo/struct2depth$ '''cd build'''</p>
<p>orangepi@orangepi:~/board-demo/struct2depth/build$ '''cmake ..'''</p>
<p>orangepi@orangepi:~/board-demo/struct2depth/build$ '''make'''</p></li>
<li><p>然后执行下面的命令运行示例。</p>
<p>orangepi@orangepi:~/board-demo/struct2depth/build$ '''./struct2depth -b ../model/v2/struct2depth.nb -i ../input_data/0015.jpg'''</p></li>
<li><p>模型推理的深度信息将会保存到jpg和txt文件中。</p>
<p>orangepi@orangepi:~/board-demo/struct2depth/build$ '''ls disp_* output_*'''</p>
<p>disp_color.jpg disp_show.jpg output_1.txt output_3.txt</p>
<p>disp_gray.jpg output_0.txt output_2.txt</p></li></ol>
==== 运行chineseocr文字识别示例 ====
<ol style="list-style-type: decimal;">
<li><p>首先编译chineseocr示例。</p>
<p>orangepi@orangepi:~/board-demo$ '''cd chineseocr'''</p>
<p>orangepi@orangepi:~/board-demo/chineseocr$ '''mkdir build'''</p>
<p>orangepi@orangepi:~/board-demo/chineseocr$ '''cd build'''</p>
<p>orangepi@orangepi:~/board-demo/chineseocr/build$ '''cmake ..'''</p>
<p>orangepi@orangepi:~/board-demo/chineseocr/build$ '''make'''</p></li>
<li><p>然后执行下面的命令运行示例。</p>
<p>orangepi@orangepi:~/board-demo/chineseocr/build$ '''./chineseocr -d ../model/v2/ -1 dbnet_1024 -2 angle_net -3 crnn_lite_lstm_256 -4 keys.txt -i ../input_data/1.jpg'''</p></li>
<li><p>输出结果如下所示,可以看到识别到了图片中的文字。</p>
<p>orangepi@orangepi:~/board-demo/chineseocr/build$ '''./chineseocr -d ../model/v2/ -1 dbnet_1024 -2 angle_net -3 crnn_lite_lstm_256 -4 keys.txt -i ../input_data/1.jpg'''</p>
<p>...</p>
<p>=====End detect=====</p>
<p>FullDetectTime(903.447417ms)</p>
<p>我们在全志科技</p>
<p>AI</p>
<p>芯片</p>
<p>起飞12345666666 !</p>
<p>run finished.</p>
<p>~CrnnNet.</p>
<p>~AngleNet.</p>
<p>~DbNet.</p>
<p>~NpuUint.</p></li></ol>
<span id="烧写linux镜像到emmc的方法"></span>
== 烧写linux镜像到eMMC的方法 ==
'''注意,开发板可以通过TF卡启动,也可以通过eMMC启动,TF卡的优先级要高于eMMC。也就是说,如果开发板插了TF卡,并且TF卡中是有系统的,那么默认就会启动TF卡中系统,而不会启动eMMC中的系统。'''
<ol style="list-style-type: decimal;">
<li><p>烧录linux镜像到eMMC中需要借助TF卡来完成,首先将linux镜像烧录到TF卡上,然后启动开发板进入linux系统</p></li>
<li><p>然后运行'''nand-sata-install'''脚本,'''记得加sudo权限'''</p>
<p>orangepi@orangepi:~$ '''sudo nand-sata-install'''</p></li>
<li><p>然后选择'''2 Boot from eMMC - system on eMMC'''</p>
<div class="figure">
[[File:Orange_Pi_4A-image230.png|576x299px|选区_039]]
</div></li>
<li><p>然后会弹出一个警告,脚本将会擦除eMMC上的所有数据,选择'''<Yes>'''继续</p>
<div class="figure">
[[File:Orange_Pi_4A-image231.png|576x335px|选区_040]]
</div></li>
<li><p>然后会提示选择文件系统的类型,支持ext2/3/4、f2fs以及btrfs五种文件系统</p>
<p>[[File:Orange_Pi_4A-image232.png|575x190px]]</p></li>
<li><p>然后会开始格式化eMMC,格式化完eMMC后就会开始烧录linux镜像到eMMC中[[File:Orange_Pi_4A-image233.png|576x174px]]</p></li>
<li><p>烧录完后会提示下面的选项,可以选择'''<Power off>'''直接关机</p>
<div class="figure">
[[File:Orange_Pi_4A-image234.png|575x141px|选区_044]]
</div></li>
<li><p>然后拔出TF卡,再重新上电,就会启动eMMC中的linux系统了</p></li></ol>
== 关机和重启开发板的方法 ==
<ol style="list-style-type: decimal;">
<li><p>在Linux系统运行的过程中,如果直接拔掉电源断电,可能会导致文件系统丢失某些数据,建议断电前先使用'''poweroff'''命令关闭开发板的Linux系统,然后再拔掉电源</p>
<p>orangepi@orangepi:~$ '''sudo poweroff'''</p></li>
<li><p>另外开发板配有开关机按键,还可以'''短按'''开发板上的开关机按键来关机。</p>
<p>[[File:Orange_Pi_4A-image235.png|449x115px]]</p></li></ol>
'''注意,Linux桌面版系统按下开关机按键后会弹出下图所示的确认框,需要点击Power Off选项后才会关机。'''
[[File:Orange_Pi_4A-image236.png|211x177px]]
<ol start="3" style="list-style-type: decimal;">
<li><p>关机后长按开发板上的开关机按键即可开机。</p>
<p>[[File:Orange_Pi_4A-image235.png|449x115px]]</p></li>
<li><p>使用'''reboot'''命令即可重启开发板中的Linux系统</p>
<p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p></li></ol>
<span id="linux-sdkorangepi-build使用说明"></span>
= 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://repo.huaweicloud.com/ubuntu-releases/21.04/ubuntu-21.04-desktop-amd64.iso '''https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/ubuntu-22.04-desktop-amd64.iso''']
在电脑中或者虚拟机中安装完Ubuntu 22.04后,请先设置Ubuntu 22.04的软件源为清华源(或者其它你觉得速度快的国内源),不然后面安装软件的时候很容易由于网络原因而出错。替换清华源的步骤如下所示:
<ol style="list-style-type: lower-alpha;">
<li>替换清华源的方法参考这个网页的说明即可。</li></ol>
[https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ '''https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/''']
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>注意Ubuntu版本需要切换到22.04。</p>
<p>[[File:Orange_Pi_4A-image237.png|576x241px]]</p></li>
<li><p>需要替换的'''/etc/apt/sources.list'''文件的内容为:</p>
<p>test@test:~$ '''sudo mv /etc/apt/sources.list cat /etc/apt/sources.list.bak'''</p>
<p>test@test:~$ '''sudo vim /etc/apt/sources.list'''</p>
<p># 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释</p>
<p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse</p>
<p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse</p>
<p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse</p>
<p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse</p>
<p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</p>
<p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</p>
<p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse</p>
<p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse</p>
<p># 预发布软件源,不建议启用</p>
<p># deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse</p>
<p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse</p></li>
<li><p>替换完后需要更新下包信息,并确保没有报错。</p>
<p>test@test:~$ '''sudo apt-get update'''</p></li>
<li><p>'''另外,由于内核和U-boot等源码都是存放在GitHub上的,所以编译镜像的时候请确保电脑能正常从GitHub下载代码,这点是非常重要的。'''</p></li></ol>
<span id="获取linux-sdk的源码"></span>
== 获取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'''
'''注意,使用T527 Soc的开发板是需要下载orangepi-build的next分支源码的,上面的git clone命令需要指定orangepi-build源码的分支为next。'''
[[File:Orange_Pi_4A-image238.png|576x288px]]
'''通过git clone命令下载orangepi-build的代码是不需要输入github账号的用户名和密码的(下载本手册中的其他代码也是一样的),如果如输入git clone命令后Ubuntu PC提示需要输入github账号的用户名和密码,一般都是git clone后面的orangepi-build仓库的地址输入错误了,请仔细检查命令拼写是否有错误,而不是以为我们这里忘了提供github账号的用户名和密码。'''
T527系列开发板当前使用的u-boot和linux内核版本如下所示:
{| class="wikitable"
|-
| style="text-align: left;"| '''分支'''
| style="text-align: left;"| '''u-boot版本'''
| style="text-align: left;"| '''linux内核版本'''
|-
| style="text-align: left;"| '''current'''
| style="text-align: left;"| '''u-boot v2018.05'''
| style="text-align: left;"| '''linux5.15'''
|}
'''这里所说的分支和orangepi-build源代码的分支不是同一个东西,请不要搞混了。此分支主要是用来区分不同内核源码版本的。'''
'''目前全志提供的linux5.15 bsp内核我们定义为current分支。'''
orangepi-build下载完后会包含下面的文件和文件夹:
<ol style="list-style-type: lower-alpha;">
<li><p>'''build.sh''': 编译启动脚本</p></li>
<li><p>'''external''': 包含编译镜像需要用的配置文件、特定的脚本以及部分程序的源码等</p></li>
<li><p>'''LICENSE''': GPL 2许可证文件</p></li>
<li><p>'''README.md''': orangepi-build说明文件</p></li>
<li><p>'''scripts''': 编译linux镜像的通用脚本</p>
<p>test@test:~/orangepi-build$ '''ls'''</p>
<p>'''build.sh external LICENSE README.md scripts'''</p>
<p>'''如果是从github下载的orangepi-build的代码,下载完后你可能会发现orangepi-build中并没有包含u-boot和linux内核的源码,也没有编译u-boot和linux内核需要用到交叉编译工具链,这是正常的,因为这些东西都存放在其它单独的github仓库或者某些服务器上了(下文会详述其地址)。orangepi-build在脚本和配置文件中会指定u-boot、linux内核和交叉编译工具链的地址,运行orangepi-build时,当其发现本地没有这些东西,会自动去相应的地方下载的。'''</p></li></ol>
=== 下载交叉编译工具链 ===
orangepi-build第一次运行的时候会自动下载交叉编译工具链放在'''toolchains'''文件夹中,每次运行orangepi-build的build.sh脚本后,都会检查'''toolchains'''中的交叉编译工具链是否都存在,如果不存在则会重新开始下载,如果存在则直接使用,不会重复下载。
<div class="figure">
[[File:Orange_Pi_4A-image239.png|575x278px|选区_396]]
</div>
交叉编译工具链在中国境内的镜像网址为清华大学的开源软件镜像站:
[https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/ '''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
编译T527 Linux内核源码使用的交叉编译工具链为:
<ol style="list-style-type: lower-alpha;">
<li><p>linux5.15</p>
<p>'''gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''</p>
<p>编译T527 u-boot源码使用的交叉编译工具链为:</p></li></ol>
<!-- -->
<ol style="list-style-type: lower-alpha;">
<li><p>v2018.05</p>
<p>'''gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi'''</p></li></ol>
=== orangepi-build完整目录结构说明 ===
<ol style="list-style-type: decimal;">
<li><p>orangepi-build仓库下载完后并不包含linux内核、u-boot的源码以及交叉编译工具链,linux内核和u-boot的源码存放在独立的git仓库中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>linux内核源码存放的git仓库如下,注意切换linux-orangepi仓库的分支为</p>
<p>https://github.com/orangepi-xunlong/linux-orangepi/tree/'''orange-pi-5.15-sun55iw3'''</p></li>
<li><p>u-boot源码存放的git仓库如下,注意切换u-boot-orangepi仓库的分支为</p>
<p>https://github.com/orangepi-xunlong/u-boot-orangepi/tree/'''v2018.05-t527'''</p></li></ol>
</li>
<li><p>orangepi-build第一次运行的时候会去下载交叉编译工具链、u-boot和linux内核源码,成功编译完一次linux镜像后在orangepi-build中可以看到的文件和文件夹有</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''build.sh''': 编译启动脚本</p></li>
<li><p>'''external''': 包含编译镜像需要用的配置文件、特定功能的脚本以及部分程序的源码,编译镜像过程中缓存的rootfs压缩包也存放在external中</p></li>
<li><p>'''kernel''': 存放linux内核的源码</p></li>
<li><p>'''LICENSE''': GPL 2许可证文件</p></li>
<li><p>'''README.md''': orangepi-build说明文件</p></li>
<li><p>'''output''': 存放编译生成的u-boot、linux等deb包、编译日志以及编译生成的镜像等文件</p></li>
<li><p>'''scripts''': 编译linux镜像的通用脚本</p></li>
<li><p>'''toolchains''': 存放交叉编译工具链</p></li>
<li><p>'''u-boot''': 存放u-boot的源码</p></li>
<li><p>'''userpatches''': 存放编译脚本需要用到的配置文件</p>
<p>test@test:~/orangepi-build$ '''ls'''</p>
<p>'''build.sh external kernel LICENSE output README.md scripts toolchains u-boot userpatches'''</p></li></ol>
</li></ol>
== 编译u-boot ==
<ol style="list-style-type: decimal;">
<li><p>运行build.sh脚本,记得加sudo权限</p>
<p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p></li>
<li><p>选择'''U-boot package''',然后回车</p>
<div class="figure">
[[File:Orange_Pi_4A-image240.png|576x132px|选区_238]]
</div></li>
<li><p>接着选择开发板的型号</p>
<p>[[File:Orange_Pi_4A-image241.png|576x131px]]</p></li>
<li><p>然后就会开始编译u-boot,编译current分支时提示的部分信息说明如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>u-boot源码的版本</p>
<p>[ o.k. ] Compiling u-boot [ '''v2018.05''' ]</p></li>
<li><p>交叉编译工具链的版本</p>
<p>[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 11''' ]</p></li>
<li><p>编译生成的u-boot deb包的路径</p>
<p>[ o.k. ] Target directory [ '''orangepi-build/output/debs/u-boot''' ]</p></li>
<li><p>编译生成的u-boot deb包的包名</p>
<p>[ o.k. ] File name [ '''linux-u-boot-current-orangepi4a_x.x.x_arm64.deb''' ]</p></li>
<li><p>编译使用的时间</p>
<p>[ o.k. ] Runtime [ '''1 min''' ]</p></li>
<li><p>重复编译u-boot的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译u-boot</p>
<p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi4a BRANCH=current BUILD_OPT=u-boot''' ]</p></li></ol>
</li>
<li><p>查看编译生成的u-boot deb包</p>
<p>test@test:~/orangepi-build$ '''ls output/debs/u-boot/'''</p>
<p>'''linux-u-boot-current-orangepi4a_x.x.x_arm64.deb'''</p></li>
<li><p>orangepi-bulid编译系统编译u-boot源码时首先会将u-boot的源码和github服务器的u-boot源码进行同步,所以如果想修改u-boot的源码,首先需要关闭源码的下载更新功能('''需要完整编译过一次u-boot后才能关闭这个功能,否则会提示找不到u-boot的源码'''),否则所作的修改都会被还原,方法如下:</p>
<p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p>
<p>test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</p>
<p>......</p>
<p>IGNORE_UPDATES="'''yes'''"</p>
<p>......</p></li>
<li><p>调试u-boot代码时,可以使用下面的方法来更新linux镜像中的u-boot进行测试</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先将编译好的u-boot的deb包上传到开发板的linux系统中</p>
<p>test@test:~/orangepi-build$ '''cd output/debs/u-boot'''</p>
<p>test@test:~/orangepi_build/output/debs/u-boot$ '''scp \'''</p>
<p>'''linux-u-boot-current-orangepi4a_x.x.x_arm64.deb [mailto:root@192.168.1.xxx:/root root@192.168.1.xxx:/root]'''</p></li>
<li><p>再安装刚才上传的新的u-boot的deb包</p>
<p>orangepi@orangepi:~$ '''sudo dpkg -i''' '''linux-u-boot-current-orangepi4a_x.x.x_arm64.deb'''</p></li>
<li><p>然后运行 nand-sata-install脚本</p>
<p>orangepi@orangepi:~$ '''sudo nand-sata-install'''</p></li>
<li><p>然后选择'''5 Install/Update the bootloader on SD/eMMC'''</p>
<p>[[File:Orange_Pi_4A-image242.png|320x174px]]</p></li>
<li><p>按下回车键后首先会弹出一个Warning</p>
<p>[[File:Orange_Pi_4A-image243.png|314x170px]]</p></li>
<li><p>再按下回车键就会开始更新u-boot,更新完后会显示下面的信息</p>
<p>[[File:Orange_Pi_4A-image244.png|292x164px]]</p></li>
<li><p>然后就可以重启开发板来测试u-boot的修改是否生效了</p></li></ol>
</li></ol>
== 编译linux内核 ==
<ol style="list-style-type: decimal;">
<li><p>运行'''build.sh'''脚本,记得加sudo权限</p>
<p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p></li>
<li><p>选择'''Kernel package''',然后回车</p>
<div class="figure">
[[File:Orange_Pi_4A-image245.png|575x116px|选区_240]]
</div></li>
<li><p>然后会提示是否需要显示内核配置界面,如果不需要修改内核配置,则选择第一个即可,如果需要修改内核配置,则选择第二个</p>
<p>[[File:Orange_Pi_4A-image246.png|576x87px]]</p></li>
<li><p>接着选择开发板的型号</p>
<p>[[File:Orange_Pi_4A-image241.png|576x131px]]</p></li>
<li><p>如果第3)步选择了需要显示内核配置菜单(第二个选项),则会弹出通过'''make menuconfig'''打开的内核配置的界面,此时可以直接修改内核的配置,修改完后再保存退出即可,退出后会开始编译内核源码。</p>
<p>[[File:Orange_Pi_4A-image247.png|575x357px]]</p></li></ol>
<!-- -->
<ol style="list-style-type: lower-alpha;">
<li><p>如果不需要修改内核的配置选项,在运行build.sh脚本时,传入'''KERNEL_CONFIGURE=no'''就可临时屏蔽弹出内核的配置界面了</p>
<p>test@test:~/orangepi-build$ '''sudo ./build.sh KERNEL_CONFIGURE=no'''</p></li>
<li><p>也可以设置orangepi-build/userpatches/config-default.conf配置文件中的'''KERNEL_CONFIGURE=no''',这样可以永久禁用这个功能</p></li>
<li><p>编译内核的时候如果提示下面的错误,这是由于Ubuntu PC的终端界面太小,导致make menuconfig的界面无法显示,请把Ubuntu PC的终端调到最大,然后重新运行build.sh脚本</p>
<p>[[File:Orange_Pi_4A-image248.png|574x234px]]</p></li></ol>
<!-- -->
<ol start="6" style="list-style-type: decimal;">
<li><p>编译current分支内核源码时提示的部分信息说明如下:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>linux内核源码的版本</p>
<p>[ o.k. ] Compiling current kernel [ '''5.15.147''' ]</p></li>
<li><p>使用的交叉编译工具链的版本</p>
<p>[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 11''' ]</p></li>
<li><p>内核默认使用的配置文件以及它存放的路径如下所示</p>
<p>[ o.k. ] Using kernel config file [ '''orangepi-build/external/config/kernel/linux-5.15-sun55iw3-current.config''' ]</p></li>
<li><p>编译生成的内核相关的deb包的路径</p>
<p>[ o.k. ] Target directory [ '''output/debs/''' ]</p></li>
<li><p>编译生成的内核镜像deb包的包名</p>
<p>[ o.k. ] File name [ '''linux-image-current-sun55iw3_x.x.x_arm64.deb''' ]</p></li>
<li><p>编译使用的时间</p>
<p>[ o.k. ] Runtime [ '''10 min''' ]</p></li>
<li><p>最后会显示重复编译上一次选择的内核的编译命令,使用下面的命令无需通过图形界面选择,可以直接开始编译内核源码</p>
<p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi4a BRANCH=current BUILD_OPT=kernel KERNEL_CONFIGURE=no''' ]</p></li></ol>
</li>
<li><p>查看编译生成的内核相关的deb包</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''linux-dtb-current-sun55iw3_x.x.x_arm64.deb'''包含有内核使用的dtb文件</p></li>
<li><p>'''linux-headers-current-sun55iw3_x.x.x_arm64.deb'''包含内核头文件</p></li>
<li><p>'''linux-image-current-sun55iw3_x.x.x_arm64.deb'''包含内核镜像和内核模块</p>
<p>test@test:~/orangepi-build$ '''ls output/debs/linux-*'''</p>
<p>output/debs/linux-dtb-current-sun55iw3_x.x.x_arm64.deb</p>
<p>output/debs/linux-headers-current-sun55iw3_x.x.x_arm64.deb</p>
<p>output/debs/linux-image-current-sun55iw3_x.x.x_arm64.deb</p></li></ol>
</li>
<li><p>orangepi-bulid编译系统编译linux内核源码时首先会将linux内核源码和github服务器的linux内核源码进行同步,所以如果想修改linux内核的源码,首先需要关闭源码的更新功能('''需要完整编译过一次linux内核源码后才能关闭这个功能,否则会提示找不到linux内核的源码'''),否则所作的修改都会被还原,方法如下:</p>
<p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p>
<p>test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</p>
<p>IGNORE_UPDATES="'''yes'''"</p></li>
<li><p>如果对内核做了修改,可以使用下面的方法来更新开发板linux系统的内核和内核模块</p>
<ol style="list-style-type: lower-alpha;">
<li><p>将编译好的linux内核的deb包上传到开发板的linux系统中</p>
<p>test@test:~/orangepi-build$ '''cd output/debs'''</p>
<p>test@test:~/orangepi-build/output/debs$ '''scp \'''</p>
<p>'''linux-image-current-sun55iw3_x.x.x_arm64.deb root@192.168.1.xxx:/root'''</p></li>
<li><p>再安装刚才上传的新的linux内核的deb包</p>
<p>orangepi@orangepi:~$ '''sudo dpkg -i linux-image-current-sun55iw3_x.x.x_arm64.deb'''</p></li>
<li><p>然后重启开发板,再查看内核相关的修改是否已生效</p>
<p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p></li></ol>
</li></ol>
== 编译rootfs ==
<ol style="list-style-type: decimal;">
<li><p>运行build.sh脚本,记得加sudo权限</p>
<p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p></li>
<li><p>选择'''Rootfs and all deb packages''',然后回车</p></li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image249.png|576x119px|选区_241]]
</div>
<ol start="3" style="list-style-type: decimal;">
<li><p>接着选择开发板的型号</p>
<p>[[File:Orange_Pi_4A-image241.png|576x131px]]</p></li>
<li><p>然后选择rootfs的类型</p>
<p>[[File:Orange_Pi_4A-image250.png|575x80px]]</p></li>
<li><p>然后选择镜像的类型</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''Image with console interface (server)'''表示服务器版的镜像,体积比较小</p></li>
<li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p>
<div class="figure">
[[File:Orange_Pi_4A-image251.png|576x75px|选区_245]]
</div></li></ol>
</li>
<li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p>
<div class="figure">
[[File:Orange_Pi_4A-image252.png|576x78px|选区_397]]
</div></li>
<li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护GNOME,所以请选择GNOME类型的桌面</p>
<p>[[File:Orange_Pi_4A-image253.png|576x69px]]</p>
<p>[[File:Orange_Pi_4A-image254.png|576x74px]]</p>
<p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p>
<p>[[File:Orange_Pi_4A-image255.png|575x264px]]</p></li>
<li><p>然后就会开始编译rootfs,编译时提示的部分信息说明如下</p>
<ol style="list-style-type: lower-alpha;">
<li><p>rootfs的类型</p>
<p>[ o.k. ] local not found [ Creating new rootfs cache for '''jammy''' ]</p></li>
<li><p>编译生成的rootfs压缩包的存放路径</p>
<p>[ o.k. ] Target directory [ '''orangepi-build/external/cache/rootfs''' ]</p></li>
<li><p>编译生成的rootfs压缩包的名字</p>
<p>[ o.k. ] File name [ '''jammy-gnome-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4''' ]</p></li></ol>
</li>
<li><p>查看编译生成的rootfs压缩包</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''jammy-gnome-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4'''是rootfs的压缩包,名字各字段的含义为</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''jammy'''表示rootfs的linux发行版的类型</p></li>
<li><p>'''gnome'''表示rootfs为桌面版的类型,如果为'''cli'''则表示服务器版类型</p></li>
<li><p>'''arm64'''表示rootfs的架构类型</p></li>
<li><p>'''25250ec7002de9e81a41de169f1f89721'''是由rootfs安装的所有软件包的包名生成的MD5哈希值,只要没有修改rootfs安装的软件包的列表,那么这个值就不会变,编译脚本会通过这个MD5哈希值来判断是否需要重新编译rootfs</p></li></ol>
</li>
<li><p>'''jammy-gnome-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list'''列出了rootfs安装的所有软件包的包名</p>
<p>test@test:~/orangepi-build$ '''ls external/cache/rootfs/'''</p>
<p>jammy-gnome-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4</p>
<p>jammy-gnome-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.current</p>
<p>jammy-gnome-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list</p></li></ol>
</li>
<li><p>如果需要的rootfs在'''external/cache/rootfs'''下已经存在,那么再次编译rootfs就会直接跳过编译过程,不会重新开始编译,编译镜像的时候也会去'''external/cache/rootfs'''下查找是否已经有缓存可用的rootfs,如果有就直接使用,这样可以节省大量的下载编译时间</p></li></ol>
== 编译linux镜像 ==
<ol style="list-style-type: decimal;">
<li><p>运行'''build.sh'''脚本,记得加sudo权限</p>
<p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p></li>
<li><p>选择'''Full OS image for flashing''',然后回车</p></li></ol>
<div class="figure">
[[File:Orange_Pi_4A-image256.png|576x128px|选区_242]]
</div>
<ol start="3" style="list-style-type: decimal;">
<li><p>然后选择开发板的型号</p>
<p>[[File:Orange_Pi_4A-image241.png|576x131px]]</p></li>
<li><p>然后选择rootfs的类型</p>
<p>[[File:Orange_Pi_4A-image250.png|575x80px]]</p></li>
<li><p>然后选择镜像的类型</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''Image with console interface (server)'''表示服务器版的镜像,体积比较小</p></li>
<li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p>
<div class="figure">
[[File:Orange_Pi_4A-image251.png|576x75px|选区_245]]
</div></li></ol>
</li>
<li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p>
<div class="figure">
[[File:Orange_Pi_4A-image252.png|576x78px|选区_397]]
</div></li>
<li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护GNOME,所以请选择GNOME类型的桌面</p>
<p>[[File:Orange_Pi_4A-image253.png|576x69px]]</p>
<p>[[File:Orange_Pi_4A-image254.png|576x74px]]</p>
<p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p>
<p>[[File:Orange_Pi_4A-image255.png|575x264px]]</p></li>
<li><p>然后就会开始编译linux镜像,编译的大致流程如下</p>
<ol style="list-style-type: lower-alpha;">
<li><p>初始化Ubuntu PC的编译环境,安装编译过程需要的软件包</p></li>
<li><p>下载u-boot和linux内核的源码(如果已经缓存,则只更新代码)</p></li>
<li><p>编译u-boot源码,生成u-boot的deb包</p></li>
<li><p>编译linux源码,生成linux相关的deb包</p></li>
<li><p>制作linux firmware的deb包</p></li>
<li><p>制作orangepi-config工具的deb包</p></li>
<li><p>制作板级支持的deb包</p></li>
<li><p>如果是编译desktop版镜像,还会制作desktop相关的deb包</p></li>
<li><p>检查rootfs是否已经缓存,如果没有缓存,则重新制作rootfs,如果已经缓存,则直接解压使用</p></li>
<li><p>安装前面生成的deb包到rootfs中</p></li>
<li><p>对不同的开发板和不同类型镜像做一些特定的设置,如预装额外的软件包,修改系统配置等</p></li>
<li><p>然后制作镜像文件,并格式化分区,默认类型为ext4</p></li>
<li><p>再将配置好的rootfs拷贝到镜像的分区中</p></li>
<li><p>然后更新initramfs</p></li>
<li><p>最后将u-boot的bin文件通过dd命令写入到镜像中</p></li></ol>
</li>
<li><p>编译完镜像后会提示下面的信息</p>
<ol style="list-style-type: lower-alpha;">
<li><p>编译生成的镜像的存放路径</p>
<p>[ o.k. ] Done building [ '''output/images/orangepi4a_x.x.x_debian_jammy_linux5.15.xx_gnome_desktop/orangepi4a_x.x.x_debian_jammy_linux5.15.xx_gnome_desktop.img''' ]</p></li>
<li><p>编译使用的时间</p></li></ol>
</li></ol>
'''[ o.k. ] Runtime [ 19 min ]'''
<ol start="3" style="list-style-type: lower-alpha;">
<li><p>重复编译镜像的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译镜像</p>
<p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi4a BRANCH=current BUILD_OPT=image RELEASE=jammy BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=yes''' ]</p></li></ol>
<span id="android-13系统使用说明"></span>
= Android 13系统使用说明 =
<span id="已支持的android版本"></span>
== 已支持的Android版本 ==
{| class="wikitable"
|-
| style="text-align: center;"| Android版本
| style="text-align: center;"| 内核版本
|-
| style="text-align: center;"| '''Android 13'''
| style="text-align: center;"| '''linux5.15'''
|}
<span id="android-13功能适配情况"></span>
== Android 13功能适配情况 ==
{| class="wikitable"
|-
| style="text-align: center;"| '''功能'''
| style="text-align: center;"| '''Android 13'''
|-
| style="text-align: center;"| '''HDMI视频'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''HDMI音频'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''USB2.0 x 4'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''TF卡启动'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''eMMC'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''NVME SSD识别'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''千兆网卡'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''WIFI'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''蓝牙'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''RTC芯片'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''耳机音频'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''LCD屏幕'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''EDP'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''CAM1'''
| style="text-align: center;"| '''NO'''
|-
| style="text-align: center;"| '''CAM2'''
| style="text-align: center;"| '''NO'''
|-
| style="text-align: center;"| '''LED灯'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin GPIO'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin I2C'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin SPI'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin UART'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''40 pin PWM'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''温度传感器'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''Mali GPU'''
| style="text-align: center;"| '''OK'''
|-
| style="text-align: center;"| '''视频编解码'''
| style="text-align: center;"| '''OK'''
|}
<span id="adb的使用方法"></span>
== ADB的使用方法 ==
<span id="usb-otg模式切换的方法"></span>
=== USB OTG模式切换的方法 ===
'''开发板有4个USB接口,其中下图红框标注的USB接口既可以支持Host模式,又可以支持Device模式,其它3个USB接口只支持Host模式。'''
[[File:Orange_Pi_4A-image257.png|258x214px]]
'''USB OTG接口默认为Host模式,可以用来接鼠标键盘等USB设备,如果要使用ADB需要手动切换为Device模式。'''
<ol style="list-style-type: decimal;">
<li><p>首先打开Settings</p>
<p>[[File:Orange_Pi_4A-image258.png|574x250px]]</p></li>
<li><p>然后找到'''About tablet'''</p>
<p>[[File:Orange_Pi_4A-image259.png|575x315px]]</p></li>
<li><p>然后用鼠标多次点击'''Build number'''选项,直到出现'''You are now a developer!'''的提示</p>
<p>[[File:Orange_Pi_4A-image260.png|575x301px]]</p></li>
<li><p>然后返回上一级菜单,选择'''System'''</p>
<p>[[File:Orange_Pi_4A-image261.png|575x253px]]</p></li>
<li><p>然后选择'''Developer options'''</p>
<p>[[File:Orange_Pi_4A-image262.png|575x279px]]</p></li>
<li><p>最后找到'''USB OTG Mode Switch'''开关,'''打开开关切换为Device模式,关闭开关切换为Host模式'''</p></li></ol>
[[File:Orange_Pi_4A-image263.png|576x197px]]
=== 使用数据线连接adb调试 ===
<ol style="list-style-type: decimal;">
<li><p>首先准备一根品质良好的USB 2.0公对公数据线</p>
<div class="figure">
[[File:Orange_Pi_4A-image17.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
</div></li>
<li><p>在Ubuntu PC上安装adb工具</p>
<p>test@test:~$ '''sudo apt-get update'''</p>
<p>test@test:~$ '''sudo apt-get install -y adb'''</p></li>
<li><p>查看识别到ADB设备</p>
<p>test@test:~$ '''adb devices'''</p>
<p>List of devices attached</p>
<p>4c00146473c28651dd0 device</p></li>
<li><p>然后在Ubuntu PC上通过adb shell就可以登录android系统</p></li></ol>
test@test:~$ '''adb shell'''
t527-demo:/ #
=== 使用网络连接adb调试 ===
'''使用网络adb无需USB2.0公对公数据线来连接电脑和开发板,而是通过网络来通信,所以首先请确保开发板的有线或者无线网络已经连接好了,然后获取开发板的IP地址,后面要用到。'''
<ol style="list-style-type: decimal;">
<li><p>确保Android系统的'''service.adb.tcp.port'''设置为5555端口号</p>
<p>console:/ # '''getprop | grep "adb.tcp"'''</p>
<p>[service.adb.tcp.port]: [5555]</p></li>
<li><p>如果'''service.adb.tcp.port'''没有设置,可以在串口中使用下面的命令设置网络adb的端口号</p></li></ol>
console:/ # '''setprop service.adb.tcp.port 5555'''
console:/ # '''stop adbd'''
console:/ # '''start adbd'''
<ol start="3" style="list-style-type: decimal;">
<li><p>在Ubuntu PC上安装adb工具</p>
<p>test@test:~$ '''sudo apt-get update'''</p>
<p>test@test:~$ '''sudo apt-get install -y adb'''</p></li>
<li><p>然后在Ubuntu PC上连接网络adb</p>
<p>test@test:~$ '''adb connect 192.168.1.xxx:5555''' '''(需要修改为开发板的IP地址)'''</p>
<p>* daemon not running; starting now at tcp:5037</p>
<p>* daemon started successfully</p>
<p>connected to 192.168.1.xxx:5555</p>
<p>test@test:~$ '''adb devices'''</p>
<p>List of devices attached</p>
<p>192.168.1.xxx:5555 device</p></li>
<li><p>然后在Ubuntu PC上通过adb shell就可以登录android系统</p></li></ol>
test@test:~$ '''adb shell'''
t527-demo:/ #
<span id="hdmi转vga显示测试-1"></span>
== HDMI转VGA显示测试 ==
<ol style="list-style-type: decimal;">
<li><p>首先需要准备下面的配件</p>
<ol style="list-style-type: lower-alpha;">
<li><p>HDMI转VGA转换器</p>
<p>[[File:Orange_Pi_4A-image134.png|155x104px]]</p></li>
<li><p>一根VGA线</p>
<p>[[File:Orange_Pi_4A-image135.png|148x133px]]</p></li>
<li><p>一个支持VGA接口的显示器或者电视</p></li></ol>
</li>
<li><p>HDMI转VGA显示测试如下所示</p>
<p>[[File:Orange_Pi_4A-image264.png|575x332px]]</p>
<p>'''使用HDMI转VGA显示时,开发板以及开发板的Android系统是不需要做任何设置的,只需要开发板HDMI接口能正常显示就可以了。所以如果测试有问题,请检查HDMI转VGA转换器、VGA线以及显示器是否有问题。'''</p></li></ol>
<span id="wi-fi的连接方法"></span>
== WI-FI的连接方法 ==
<ol style="list-style-type: decimal;">
<li><p>首先选择'''Settings'''</p>
<p>[[File:Orange_Pi_4A-image258.png|574x250px]]</p></li>
<li><p>然后选择'''Network & Internet'''</p>
<p>[[File:Orange_Pi_4A-image265.png|575x191px]]</p></li>
<li><p>然后选择'''Internet'''</p>
<p>[[File:Orange_Pi_4A-image266.png|576x157px]]</p></li>
<li><p>然后打开WI-FI</p>
<p>[[File:Orange_Pi_4A-image267.png|575x113px]]</p></li>
<li><p>打开WI-FI后在'''Available networks'''下面就可以看到搜索到的信号</p>
<p>[[File:Orange_Pi_4A-image268.png|576x199px]]</p></li>
<li><p>选择想连接的WI-FI后会弹出下图所示的密码输入界面</p>
<p>[[File:Orange_Pi_4A-image269.png|574x165px]]</p></li>
<li><p>然后使用键盘输入WI-FI对应的密码,再使用'''鼠标'''点击虚拟键盘中的回车按钮就会开始连接WI-FI了</p>
<p>[[File:Orange_Pi_4A-image270.png|576x179px]]</p></li>
<li><p>WI-FI连接成功后的显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image271.png|576x176px]]</p></li></ol>
<span id="wi-fi-hotspot的使用方法"></span>
== WI-FI hotspot的使用方法 ==
<ol style="list-style-type: decimal;">
<li><p>首先请确保以太网口已连接网线,并且能正常上网</p></li>
<li><p>然后选择'''Settings'''</p>
<p>[[File:Orange_Pi_4A-image258.png|574x250px]]</p></li>
<li><p>然后选择'''Network & Internet'''</p>
<p>[[File:Orange_Pi_4A-image272.png|574x143px]]</p></li>
<li><p>然后选择'''Hotspot & tethering'''</p>
<p>[[File:Orange_Pi_4A-image273.png|575x250px]]</p></li>
<li><p>然后选择'''Wi-Fi hotspot'''</p>
<p>[[File:Orange_Pi_4A-image274.png|575x164px]]</p></li>
<li><p>然后打开'''Wi-Fi Hotspot''',下图中还可以看到生成的热点的名字和密码,记住它们,在连接热点的时候要用到(如果需要修改热点的名字和密码,需要先关闭'''Wi-Fi Hotspot''',然后才能修改)</p>
<p>[[File:Orange_Pi_4A-image275.png|575x245px]]</p></li>
<li><p>此时可以拿出你的手机,如果一切正常,在手机搜索到的WI-FI列表中就能找到上图'''Hotspot name'''下面显示的同名('''这里为AndroidAP_4174''')的WIFI热点了。然后可以点击'''AndroidAP_4174'''连接热点,密码在上图的'''Hotspot password'''下面可以看到</p>
<p>[[File:Orange_Pi_4A-image276.png|233x172px]]</p></li>
<li><p>连接成功后显示如下图所示(不同手机界面会有区别,具体界面以你手机显示的为准)。此时就可以在手机上打开一个网页看下能否上网了,如果能正常打开网页,说明开发板的'''WI-FI Hotspot'''能正常使用</p>
<p>[[File:Orange_Pi_4A-image277.png|234x113px]]</p></li></ol>
<span id="查看以太网口ip地址的方法"></span>
== 查看以太网口IP地址的方法 ==
<ol style="list-style-type: decimal;">
<li><p>首先请确保开发板的千兆网口连接到了路由器或者交换机</p></li>
<li><p>然后打开'''Settings'''</p>
<p>[[File:Orange_Pi_4A-image258.png|574x250px]]</p></li>
<li><p>然后选择'''Network & Internet'''</p>
<p>[[File:Orange_Pi_4A-image265.png|575x159px]]</p></li>
<li><p>然后选择'''Ethernet'''</p>
<p>[[File:Orange_Pi_4A-image278.png|575x128px]]</p></li>
<li><p>然后选择'''Ethernet settings'''</p>
<p>[[File:Orange_Pi_4A-image279.png|575x123px]]</p></li>
<li><p>然后就能看到开发板有线网口的IP地址信息了</p>
<p>[[File:Orange_Pi_4A-image280.png|576x245px]]</p></li></ol>
== 蓝牙的连接方法 ==
<ol style="list-style-type: decimal;">
<li><p>首先选择'''Settings'''</p>
<p>[[File:Orange_Pi_4A-image258.png|574x250px]]</p></li>
<li><p>然后选择'''Connected devices'''</p></li></ol>
[[File:Orange_Pi_4A-image281.png|357x161px]]
<ol start="3" style="list-style-type: decimal;">
<li><p>然后选择'''Pair new device'''开始扫描周围的蓝牙设备</p>
<p>[[File:Orange_Pi_4A-image282.png|355x165px]]</p></li>
<li><p>搜索到的蓝牙设备会在'''Available devices'''下面显示出来</p>
<p>[[File:Orange_Pi_4A-image283.png|350x296px]]</p></li>
<li><p>然后点击想要连接的蓝牙设备就可以开始配对了,当弹出下面的界面时,请使用鼠标选择'''Pair'''选项</p>
<p>[[File:Orange_Pi_4A-image284.png|358x145px]]</p></li>
<li><p>这里测试的是开发板和'''安卓手机'''蓝牙的配置过程,此时在手机上会弹出确认界面,在手机上也点击配对按钮后就会开始配对过程</p></li>
<li><p>配对完成后,再打开'''Paired devices'''下面就可以看到已配对的蓝牙设备</p>
<p>[[File:Orange_Pi_4A-image285.png|284x183px]]</p></li>
<li><p>此时可以使用手机蓝牙给开发板发送一张图片,发送后,在开发板的安卓系统中可以看到下面的提示,然后点击'''Incoming file'''</p>
<p>[[File:Orange_Pi_4A-image286.png|574x163px]]</p></li>
<li><p>然后在弹出的窗口中点击'''Accept'''就可以开始接收手机发过来的图片了</p>
<p>[[File:Orange_Pi_4A-image287.png|575x217px]]</p></li>
<li><p>开发板Android系统蓝牙接收到的图片可以打开文件管理器的'''Download'''目录查看</p>
<p>[[File:Orange_Pi_4A-image288.png|575x238px]]</p></li></ol>
<span id="寸mipi-屏幕的使用方法"></span>
== 10.1寸MIPI 屏幕的使用方法 ==
请确保使用的 Android 镜像为下面的版本的镜像:
OrangePi4A_T527_Android13_lcd_v1.x.x.img
<ol style="list-style-type: decimal;">
<li><p>首先需要组装好屏幕,请参考[[#寸mipi-屏幕的组装方法|10.1寸MIPI屏幕的组装方法]]</p></li>
<li><p>开发板上mipi lcd屏幕的接口的位置如下图所示:</p>
<p>[[File:Orange_Pi_4A-image199.png|230x132px]]</p></li>
<li><p>将组装好的屏幕接到开发板的LCD接口,注意拔掉HDMI接口,给板子接通Type-C电源,并上电,系统启动后,就可以看到屏幕显示如下图所示('''默认为竖屏''')</p></li></ol>
[[File:Orange_Pi_4A-image289.png|208x291px]]
<span id="edp屏幕的使用方法-1"></span>
== eDP屏幕的使用方法 ==
'''eDP屏幕是没有触摸功能的。'''
请确保使用的 Android 镜像为下面的版本的镜像:
OrangePi4A_T527_Android13_v1.x.x.img
<ol start="3" style="list-style-type: decimal;">
<li><p>目前仅适配了一款15.6寸的eDP屏幕,包含的配件如下:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>0.5间距30pin单头同向排线</p>
<p>[[File:Orange_Pi_4A-image208.png|199x197px]]</p></li>
<li><p>15.6寸 eDP显示屏,分辨率为1920x1080。</p>
<div class="figure">
[[File:Orange_Pi_4A-image209.png|212x367px|8763EEF4-115F-4b95-A8FB-CA0A62F57B70]]
</div></li></ol>
</li>
<li><p>将30pin单头同向排线的FPC端连接到开发板的eDP接口,另一端连接到屏幕的eDP接口</p>
<p>[[File:Orange_Pi_4A-image210.png|199x91px]]</p></li>
<li><p>再给板子接通Type-C电源,并上电,系统启动后,就可以看到屏幕显示如下图所示</p>
<p>[[File:Orange_Pi_4A-image290.png|380x227px]]</p></li></ol>
<span id="usb摄像头使用方法"></span>
== USB摄像头使用方法 ==
<ol style="list-style-type: decimal;">
<li><p>首先在开发板的USB接口中插入USB(UVC协议)摄像头</p></li>
<li><p>USB摄像头如果识别正常,在/dev下会生成相应的video设备节点</p>
<p>console:/ # '''ls /dev/video0'''</p>
<p>/dev/video0</p></li>
<li><p>然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考[[#adb的使用方法|'''ADB的使用方法''']]一小节的说明</p></li>
<li><p>在开发板资料下载页面的'''官方工具'''中下载USB摄像头测试APP</p>
<p>[[File:Orange_Pi_4A-image291.png|576x172px]]</p>
<p>[[File:Orange_Pi_4A-image292.png|575x145px]]</p></li>
<li><p>然后使用adb命令安装USB摄像头测试APP到Android系统中,当然也可以使用U盘拷贝的方式进行安装</p>
<p>test@test:~$ '''adb install usbcamera.apk'''</p></li>
<li><p>安装完后在Android的APP界面可以看到USB摄像头的启动图标</p>
<p>[[File:Orange_Pi_4A-image293.png|575x318px]]</p></li>
<li><p>然后双击打开USB摄像头APP就可以看到USB摄像头的输出视频了</p></li></ol>
<span id="android系统root说明"></span>
== Android系统ROOT说明 ==
'''<span class="mark">Orange Pi发布的Android系统已经ROOT,可以使用下面的方法来测试。</span>'''
<ol style="list-style-type: decimal;">
<li><p>在开发板资料下载页面的'''官方工具'''中下载'''rootcheck.apk'''</p>
<p>[[File:Orange_Pi_4A-image291.png|576x172px]]</p>
<p>[[File:Orange_Pi_4A-image294.png|575x124px]]</p></li>
<li><p>然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考[[#adb的使用方法|'''ADB的使用方法''']]一小节的说明</p></li>
<li><p>然后使用adb命令安装rootcheck.apk到Android系统中,当然也可以使用U盘拷贝的方式进行安装</p>
<p>test@test:~$ '''adb install rootcheck.apk'''</p></li>
<li><p>安装完后在Android的的APP界面可以看到ROOT测试工具的启动图标</p>
<p>[[File:Orange_Pi_4A-image295.png|575x313px]]</p></li>
<li><p>第一次打开'''ROOT测试工具'''后的显示界面如下图所示</p>
<p>[[File:Orange_Pi_4A-image296.png|576x126px]]</p></li>
<li><p>然后就可以点击'''CHECK NOW'''开始Android系统的ROOT状态的检查,检查完后的显示如下所示,可以看到Android系统已取得ROOT权限</p>
<p>[[File:Orange_Pi_4A-image297.png|575x130px]]</p></li></ol>
<span id="pin-接口-gpiouartspi-测试"></span>
== 40 pin 接口 GPIO、UART、SPI 测试 ==
<span id="pin的gpio口测试方法"></span>
=== 40 pin的GPIO口测试方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先在桌面中打开wiringOP APP</p>
<p>[[File:Orange_Pi_4A-image298.png|576x290px]]</p></li>
<li><p>然后点击'''GPIO_TEST'''按钮打开GPIO测试界面</p>
<p>[[File:Orange_Pi_4A-image299.png|413x77px]]</p></li>
<li><p>GPIO测试界面如下图所示,左边的两排'''CheckBox'''按钮跟40 pin引脚是一一对应的关系。当勾选'''CheckBox'''按钮时,对应的GPIO引脚会被设置为'''OUT'''模式,引脚电平设置为高电平;当取消勾选时,GPIO引脚电平设置为低电平;当点击右边的'''GPIO READALL'''按钮时,可以获取到wPi号、GPIO模式、引脚电平等信息。当点击'''BLINK ALL GPIO'''按钮时,所有引脚会不断地切换高低电平</p>
<p>[[File:Orange_Pi_4A-image300.png|575x293px]]</p></li>
<li><p>然后点击'''GPIO READALL'''按钮,输出信息如下图所示:</p>
<p>[[File:Orange_Pi_4A-image301.png|575x291px]]</p></li>
<li><p>开发板40 pin中总共有28个GPIO口可以使用,下面以7号引脚——对应GPIO为PB4 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平。首先点击7号引脚对应的'''CheckBox'''按钮,当按钮为选中状态时,7号引脚会设置为高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''3.3v''',说明设置高电平成功</p>
<p>[[File:Orange_Pi_4A-image302.png|575x301px]]</p></li>
<li><p>然后点击'''GPIO READALL'''按钮,可以看到当前的7号引脚模式为'''OUT''',引脚电平为高电平</p>
<p>[[File:Orange_Pi_4A-image303.png|575x288px]]</p></li>
<li><p>再次点击下图的'''CheckBox'''按钮取消勾选状态,7号引脚会设置为低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''0v''',说明设置低电平成功</p>
<p>[[File:Orange_Pi_4A-image304.png|576x287px]]</p></li>
<li><p>然后点击'''GPIO READALL'''按钮,可以看到当前的7号引脚模式为OUT,引脚电平为低电平</p>
<p>[[File:Orange_Pi_4A-image305.png|575x290px]]</p></li></ol>
<span id="pin的uart测试方法"></span>
=== 40 pin的UART测试方法 ===
<ol style="list-style-type: decimal;">
<li><p>Android中默认打开了'''UART2'''和'''UART7''',对应的设备节点为'''/dev/ttyAS2'''和'''/dev/ttyAS7'''</p>
<p>t527-demo:/ $ '''ls /dev/ttyAS*'''</p>
<p>ttyAS0 ttyAS1 ttyAS2 ttyAS7</p></li>
<li><p>首先在桌面中打开wiringOP APP</p>
<p>[[File:Orange_Pi_4A-image298.png|576x290px]]</p></li>
<li><p>然后点击'''UART_TEST'''按钮打开UART测试界面</p>
<p>[[File:Orange_Pi_4A-image306.png|505x94px]]</p></li>
<li><p>wiringOP的串口测试界面如下图所示</p></li></ol>
[[File:Orange_Pi_4A-image307.png|510x130px]]
<ol start="5" style="list-style-type: decimal;">
<li><p>以测试UART2为例,在选择框中选择'''/dev/ttyAS2'''节点</p>
<p>[[File:Orange_Pi_4A-image308.png|507x133px]]</p></li>
<li><p>再在编辑框中输入想要设置的波特率,然后点击'''OPEN'''按钮打开'''/dev/ttyAS2'''节点,打开成功后,'''OPEN'''按钮变为不可选中状态,'''CLOSE'''按钮和'''SEND'''按钮变为可选中状态</p></li></ol>
[[File:Orange_Pi_4A-image309.png|505x132px]]
<ol start="7" style="list-style-type: decimal;">
<li>然后使用杜邦线短接uart2的rx和tx引脚</li></ol>
{| class="wikitable"
|-
|
| style="text-align: left;"| uart2
|-
| tx引脚
| style="text-align: left;"| 对应40 pin的11号引脚
|-
| rx引脚
| style="text-align: left;"| 对应40 pin的13号引脚
|}
<ol start="8" style="list-style-type: decimal;">
<li>然后可以在下面的发送编辑框中输入一段字符,点击'''SEND'''按钮开始发送</li></ol>
[[File:Orange_Pi_4A-image310.png|511x138px]]
<ol start="9" style="list-style-type: decimal;">
<li>如果一切正常,接收框内会显示已接收到的字符串</li></ol>
[[File:Orange_Pi_4A-image311.png|516x136px]]
<span id="pin的spi测试方法"></span>
=== 40 pin的SPI测试方法 ===
<ol style="list-style-type: decimal;">
<li><p>40 pin中可以用的SPI为SPI1,对应的设备节点为'''/dev/spidev1.0'''</p>
<p>[[File:Orange_Pi_4A-image298.png|576x290px]]</p></li>
<li><p>这里演示下通过'''w25q64'''模块来测试SPI1接口,首先在SPI1接口接入w25q64模块</p></li></ol>
'''<span class="mark">如果没有</span>w25q64模块也没关系,因为开发板上有一个SPIFlash接在了SPI0上,在安卓中SPI0的配置默认也打开了,所以我们也可以直接使用板载的SPIFlash测试。'''
<ol start="3" style="list-style-type: decimal;">
<li><p>然后在桌面中打开wiringOP APP</p></li>
<li><p>然后点击'''SPI_TEST'''按钮打开SPI的测试界面</p>
<p>[[File:Orange_Pi_4A-image312.png|518x96px]]</p></li>
<li><p>然后在左上角选择spi的设备节点,如果直接测试板载的SPIFlash,那么保持默认的'''/dev/spidev0.0'''即可,如果在40 pin的spi1上接了'''w25q64'''模块,那么就请选择'''/dev/spidev1.0'''</p>
<p>[[File:Orange_Pi_4A-image313.png|296x135px]]</p></li>
<li><p>然后点击'''OPEN'''按钮初始化SPI</p></li></ol>
[[File:Orange_Pi_4A-image314.png|295x168px]]
<ol start="7" style="list-style-type: decimal;">
<li><p>然后填充需要发送的字节,比如读取板载SPIFlash的ID信息,在data[0]中填入地址0x9f,然后点击'''TRANSFER'''按钮</p>
<p>[[File:Orange_Pi_4A-image315.png|294x169px]]</p></li>
<li><p>最后APP会显示读取到的板载SPI Flash的ID信息</p></li></ol>
[[File:Orange_Pi_4A-image316.png|296x193px]]
<ol start="9" style="list-style-type: decimal;">
<li><p>如果是读取接在40 pin SPI1上的w25q64模块,那么读取到的ID信息如下图所示</p>
<p>[[File:Orange_Pi_4A-image317.png|302x201px]]</p></li>
<li><p>w25q64模块的MANUFACTURER ID为EFh,Device ID为4017h,跟上面读取到的值是对应的(h代表是16进制)</p>
<p>[[File:Orange_Pi_4A-image318.png|336x113px]]</p></li></ol>
<span id="pin的i2c测试方法"></span>
=== 40 pin的I2C测试方法 ===
<ol style="list-style-type: decimal;">
<li><p>Android中默认打开了40 pin中的i2c4和i2c5,对应的设备节点分别为'''/dev/i2c-4'''和'''/dev/i2c-5'''</p>
<p>console:/ # '''ls''' '''/dev/i2c-4 /dev/i2c-5'''</p>
<p>/dev/i2c-4 /dev/i2c-5</p></li>
<li><p>首先在桌面中打开wiringOP APP</p>
<p>[[File:Orange_Pi_4A-image298.png|576x290px]]</p></li>
<li><p>然后点击'''I2C_TEST'''按钮打开i2c的测试界面</p>
<p>[[File:Orange_Pi_4A-image319.png|506x110px]]</p></li>
<li><p>wiringOP的i2c测试界面如下图所示</p>
<p>[[File:Orange_Pi_4A-image320.png|353x159px]]</p></li>
<li><p>以测试i2c4为例,在选择框中选择'''/dev/i2c-4节点'''</p></li></ol>
[[File:Orange_Pi_4A-image321.png|273x195px]]
<ol start="6" style="list-style-type: decimal;">
<li><p>然后在40 pin的i2c4引脚上接一个i2c设备,这里以ds1307 rtc模块为例</p>
<p>[[File:Orange_Pi_4A-image164.png|121x103px]]</p></li></ol>
{| class="wikitable"
|-
| style="text-align: left;"| '''RTC模块的引脚'''
| style="text-align: left;"| '''开发板40 pin对应的引脚'''
|-
| style="text-align: left;"| '''5V'''
| style="text-align: left;"| '''2号引脚'''
|-
| style="text-align: left;"| '''GND'''
| style="text-align: left;"| '''6号引脚'''
|-
| style="text-align: left;"| '''SDA'''
| style="text-align: left;"| '''3号引脚'''
|-
| style="text-align: left;"| '''SCL'''
| style="text-align: left;"| '''5号引脚'''
|}
<ol start="7" style="list-style-type: decimal;">
<li><p>ds1307 rtc模块的i2c地址为0x68,接好线后,我们可以在串口命令行中使用'''i2cdetect -y -r 4'''命令查看下是否能扫描到ds1307 rtc模块的i2c地址。如下图所示,如果能看到0x68这个地址,说明ds1307 rtc模块接线正确。</p>
<p>console:/ # '''i2cdetect -y 4'''</p>
<div class="figure">
[[File:Orange_Pi_4A-image322.png|467x199px|D16403AF-C244-45ed-81FE-308A42F1E840]]
</div></li>
<li><p>然后在wiringOP中设置i2c的地址为0x68,再点击'''OPEN'''按钮打开i2c4</p>
<p>[[File:Orange_Pi_4A-image323.png|360x194px]]</p></li>
<li><p>点击'''OPEN'''按钮打开i2c4后的显示如下所示:</p>
<p>[[File:Orange_Pi_4A-image324.png|366x216px]]</p></li>
<li><p>然后我们测试下往rtc模块的寄存器中写入一个值,比如往0x1c地址写入0x55</p>
<ol style="list-style-type: lower-alpha;">
<li><p>我们首先设置需要写入的寄存器的地址为0x1c</p>
<p>[[File:Orange_Pi_4A-image325.png|366x217px]]</p></li>
<li><p>然后设置需要写入的值为0x55</p>
<p>[[File:Orange_Pi_4A-image326.png|316x191px]]</p></li>
<li><p>然后点击'''WRITE BYTE'''按钮执行写入的动作</p>
<p>[[File:Orange_Pi_4A-image327.png|322x193px]]</p></li></ol>
</li>
<li><p>然后点击'''READ BYTE'''按钮读取下0x1c寄存器的值,如果显示为0x55,就说明i2c读写测试通过</p>
<p>[[File:Orange_Pi_4A-image328.png|326x196px]]</p></li></ol>
= 附录 =
== 用户手册更新历史 ==
{| class="wikitable"
|-
| style="text-align: center;"| '''版本'''
| style="text-align: center;"| '''日期'''
| style="text-align: center;"| '''更新说明'''
|-
| style="text-align: center;"| v1.0
| style="text-align: center;"| 2024-11-14
| style="text-align: center;"| 初始版本
|}
== 镜像更新历史 ==
{| class="wikitable"
|-
| style="text-align: center;"| 日期
| style="text-align: center;"| '''更新说明'''
|-
| style="text-align: center;"| 2024-11-14
| style="text-align: left;"| OrangePi4A_T527_Android13_v1.0.0.tar.gz
OrangePi4A_T527_Android13_lcd_v1.0.0.tar.gz
Orangepi4a_1.0.0_ubuntu_jammy_server_linux5.15.147.7z
Orangepi4a_1.0.0_debian_bookworm_server_linux5.15.147.7z
Or angepi4a_1.0.0_ubuntu_jammy_desktop_gnome_linux5.15.147.7z
Orang epi4a_1.0.0_debian_bookworm_desktop_gnome_linux5.15.147.7z
* 初始版本
|}