打开主菜单

Wiki-Orange Pi β

更改

Orange Pi 3B

添加17,484字节, 2023年8月23日 (三) 20:09
Orange Pi 3B的接口详情图
== 什么是 Orange Pi 3B ==
Orange Pi 3B采用了瑞芯微RK3566四核64位Cortex-A55处理器,采用的22nm工艺,主频最高可达1.8GHz,集成ARM Mali-G52 GPU,内嵌高性能2D图像加速模块,内置1 Tops算力的AI加速器NPU,可选2GB、4GB或者8GB内存,具有高达4K显示处理能力。GPU,内嵌高性能2D图像加速模块,内置0.8Tops算力的AI加速器NPU,可选2GB、4GB或者8GB内存,具有高达4K显示处理能力。
Orange Pi 3B引出了相当丰富的接口,包括HDMI输出、M.2 PCIe2.0x1、千兆网口、USB2.0、USB3.0接口和40pin扩展排针等。可广泛适用于高端平板、边缘计算、人工智能、云计算、AR/VR、智能安防、智能家居等领域,覆盖 AIoT各个行业。
Orange Pi 3B支持Android 11、Debian11、Ubuntu203B支持Android11、Ubuntu22.04和Ubuntu2204、Ubuntu20.04等操作系统。04、Debian11、Debian12、开源鸿蒙4.0 Beta1、Orange Pi OS(Arch)、基于开源鸿蒙的Orange Pi OS(OH)等操作系统。
<span id="orange-pi-3b的用途"></span>
 
== Orange Pi 3B的用途 ==
<span id="orange-pi-3b的硬件特性"></span>
== Orange Pi 3B的硬件特性 3B的硬件规格 ==
{| class="wikitable" style="width:800px;text-align: center;"
|-
|colspan=2|
<div style="text-align:center"><big>'''硬件特性介绍硬件规格参数'''</big></div>|-| 主控芯片| Rockchip RK3566
|-
| style="width: 200px" | CPU
|
• Rockchip RK3566 (22nm 制程) • 4核64位处理器 • 主频最高1四核 64 位 Cortex-A55 处理器,22nm 先进工艺,主频最高 1.8GHz 
|-
| GPU
|
集成ARM ARM Mali-G522EE图形处理器
OpenGL ES1支持OpenGL ES 1.1/2.0/3.2、OpenCL 2,OpenCL 2.0 和 Vulkan 0,Vulkan 1.1 • 内嵌高性能2D加速硬件
|-
| NPU
|
内置1Tops算力的AI加速器NPU集成 RKNN NPU AI 加速器,0.8Tops@INT8 性能 • 支持 C affe/TensorFlow/TFLite/ONNX/PyTorch/Keras/Darknet 架构模型一键转换 
|-
| 视频输出VPU
|
HDMI 24K@60fps H.0,最大支持4K @60Hz265/H.264/VP9 视频解码
1* MIPI DSI TX 2Lane1080P@100fps H.265 视频编码
1*eDP11080P@60fpsH.3,最高支持2560x1600@60fps输出264 视频编码
|-
| 内存PMU
|
2GB/4GB/8GB可选Rockchip RK809-5
|-
| 摄像头内存
|
• 1* MIPI CSI 2Lane(spilt mode)2GB/4GB/8GB (LPDDR4/4x)
|-
| PMU存储
|
RK809-5|-| 板载存储• 支持eMMC模块:16GB/32GB/64GB/128GB| SPI Flash: 16MB Nor FLASH/32MB
MicroSD (TF) Card插槽M.2 M-KEY插槽:SATA3 或者 PCIe2.0 NVME SSD
PCIe2.0x1 M.2 M-KEY (SSD) 插槽TF卡槽
|-
| 以太网Wi-Fi+蓝牙| Wi-Fi 5+BT 5.0,BLE(20U5622)|-| 以太网收发器
|
10/100/1000Mbps以太网 (YT8531C )1000Mbps以太网(板载PHY芯片:YT8531C)
|-
| 音频显示
|
31x HDMI TX 2.5mm 耳机孔音频输入/输出0,最大支持4K@60FPS
HDMI输出1xMIPI DSI 2 Lane • eDP1.3
|-
| PCIe M.2 M-KEY摄像头
|
• 支持SSD1xMIPI CSI 2 Lane摄像头接口
|-
| USB接口USB
|
1 * USB3• 1xUSB 2.0接口0 支持Device或HOST模式 • 1xUSB 3.0 HOST
3 * USB2• 2xUSB 2.0接口0 HOST
|-
| 40pin扩展排针音频| 3.5mm耳机孔音频输入/输出|-| 按键
|
用于扩展UART、PWM、I2C、SPI和GPIO接口1x MaskROM键,1xRESET键,1 xPOWER键
|-
| 调试串口FAN
|
3pin调试串口2Pin 1.25mm规格的5V风扇接口
|-
| LED灯RTC
|
电源指示灯、状态指示灯、PCIe指示灯2Pin 1.25mm规格的备用电池接口
|-
| 按键40Pin
|
1 * MaskROM键,1 * RECOVERY,1 * 电源按键40Pin功能扩展接口,支持以下接口类型: GPIO、UART、I2C、SPI、PWM 
|-
| 供电电源
|
Type-C接口供电 5V/3A或者5V4A;C 5V3A
|-
| 支持的操作系统
|
Android 11、Debian11、Ubuntu20Android11、Ubuntu22 .04和Ubuntu2204、Ubuntu20.04等操作系统04、Debian11、Debian12、开源鸿蒙4.0 Beta1、Orange Pi OS(Arch)、基于开源鸿蒙的Orange Pi OS(OH)等操作系统。
|-
|colspan=2|<div style="text-align:center"><big>'''外观规格介绍'''</big></div>
|-
| 产品尺寸PCB尺寸|85mm*x 56mm*x 17mm
|-
| 重量
<div class="figure">
[[File:media/image3pi3b-img3-1.jpegpng|447x348px|_MG_1982(1)800px]]
</div>
<div class="figure">
[[File:media/image4pi3b-img4-1.jpegpng|438x331px|_MG_1986(1)800px]]
</div>
<div class="figure">
[[File:media/image5pi3b-img5.jpegpng|576x752px|06e73d88e8e969cc17f52f732f5f82b2800px]]
</div>
[[File:media/image6pi3b-img6-1.png|575x277px800px]]
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big>'''四个定位孔的直径都是3四个定位孔的直径都是2.0mm,M7mm,M.2 PICE设备固定孔直径为3PICE设备固定孔直径为2.5mm。9mm。'''</big>
|}
<ol style="list-style-type: decimal;">
<li><p>TF卡,最小16GB容量(推荐32GB或以上)的'''class10'''级或以上的高速闪迪卡</p>
<p>[[File:media/image7pi3b-img7.png|124x96px]]</p></li>
<li><p>TF卡读卡器,用于将镜像烧录到TF卡中</p>
<p>[[File:media/image8pi3b-img8.png|139x106px]]</p></li>
<li><p>HDMI接口的显示器</p>
<p>[[File:media/image9pi3b-img9.png|256x195px]]</p></li>
<li><p>HDMI转HDMI连接线,用于将开发板连接到HDMI显示器或者电视进行显示</p>
<p>[[File:media/image10pi3b-img10.png|199x129px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
</li>
<li><p>电源适配器,Orange Pi 3B建议使用5V/3A或者5V/4A的Type-C电源供电</p>
<p>[[File:media/image11pi3b-img11.png|188x133px]]</p></li>
<li><p>USB接口的鼠标和键盘,只要是标准USB接口的鼠标和键盘都可以,鼠标和键盘可以用来控制Orange Pi开发板</p>
<p>[[File:media/image12pi3b-img12.png|206x170px]]</p></li>
<li><p>USB摄像头</p>
<p>[[File:media/image13pi3b-img13.png|255x148px]]</p></li>
<li><p>5V的散热风扇。如下图所示,开发板上有用于接散热风扇的接口,接口规格为'''2pin 1.25mm间距'''</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<big><p>'''开发板上的风扇可以通过PWM来调节转速和开关。'''</p></big>
|}
<p>[[File:media/image14pi3b-img14-1.png|353x231px]]</p></li>
<li><p>百兆或者千兆网线,用于将开发板连接到因特网</p>
<p>[[File:media/image15pi3b-img15.png|143x112px]]</p></li>
<li><p>USB2.0公对公数据线,用于烧录镜像到eMMC、NVMe SSD等功能</p>
<div class="figure">
[[File:media/image16pi3b-img16.png|158x155px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
</div></li>
<li><p>'''3.3V'''的USB转TTL模块和杜邦线,使用串口调试功能时,需要USB转TTL模块和杜邦线来连接开发板和电脑</p>
<p>[[File:media/image17pi3b-img17.png|217x89px|G7U7JZX(V`L$`A6864]38$P300px]] [[File:media/image18pi3b-img18.png|305x110px500px]]</p></li>
<li><p>安装有Ubuntu和Windows操作系统的个人电脑</p>
|}
::[[File:media/image19pi3b-img19-1.png|576x455px]]
<ol start="2" style="list-style-type: decimal;">
<p>'''http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html'''</p>
|}
<p>[[File:media/image20pi3b-img20-1.png|575x481px]]</p></li>
<li><p>资料主要包含</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''Debian镜像''':保存在百度云盘和谷歌网盘上</p></li>
<li><p>'''Orange Pi OS镜像''':保存在百度云盘和谷歌网盘上</p></li>
<li><p>'''OpenWRT镜像OpenHarmony镜像''':保存在百度云盘和谷歌网盘上</p></li></ol>
</li></ol>
<ol start="5" style="list-style-type: decimal;">
<li><p>进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方</p>
<p>[[File:media/image21pi3b-img21.png|359x172px]]</p></li>
<li><p>然后可以选择下载balenaEtcher的Portable版本的软件,Portable版本无需安装,双击打开就可以使用</p>
<p>[[File:media/image22pi3b-img22.png|382x141px]]</p></li>
<li><p>如果下载的是需要安装版本的balenaEtcher,请先安装再使用。如果下载的Portable版本balenaEtcher,直接双击打开即可,打开后的balenaEtcher界面如下图所示:</p>
<p>[[File:media/image23pi3b-img23.png|369x233px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<big>'''打开balenaEtcher时如果提示下面的错误:'''</big>
[[File:media/image24pi3b-img24.png|209x164px|center]]
<big>'''请选择balenaEtcher后点击右键,然后选择以管理员身份运行。'''</big>
[[File:media/image25pi3b-img25.png|273x37px|center]]
|}
</li></ol>
<li><p>然后选择TF卡的盘符</p></li>
<li><p>最后点击Flash就会开始烧录Linux镜像到TF卡中</p>
<p>[[File:media/image26pi3b-img26.png|423x237px]]</p></li></ol>
</li>
<li><p>balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中</p>
<p>[[File:media/image27pi3b-img27.png|428x268px]]</p></li>
<li><p>Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验</p>
<p>[[File:media/image28pi3b-img28.png|427x267px]]</p></li>
<li><p>成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了</p>
<p>[[File:media/image29pi3b-img29.png|430x266px]]</p></li></ol>
<span id="使用rkdevtool烧录linux镜像到tf卡中的方法使用rkdevtool烧录Linux镜像到tf卡中的方法"></span>
=== 使用RKDevTool烧录Linux镜像到TF卡中的方法 ===
<div class="figure">
[[File:media/image16pi3b-img16.png|146x143px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
</div></li>
<li><p>还需要准备一张16GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡</p></li>
<li><p>然后从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html '''Orange Pi的资料下载页面''']下载瑞芯微驱动'''DriverAssitant_v5.12.zip'''和'''MiniLoader'''以及烧录工具'''RKDevTool_Release_v3.15.zip'''</p>
<ol style="list-style-type: lower-alpha;">
<li><p>在[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html '''Orange Pi的资料下载页面''']首先选择'''官方工具''',然后进入下面的文件夹中</p>
<p>[[File:media/image30pi3b-img30.png|267x56px]]</p></li>
<li><p>然后下载下面的所有文件</p>
<p>[[File:media/image31pi3b-img31.png|246x97px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<li><p>然后从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html '''Orange Pi的资料下载页面''']下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”'''.img'''”结尾的文件就是操作系统的镜像文件,大小一般都在2GB以上</p></li>
<li><p>然后用解压软件解压'''DriverAssitant_v5.12.zip''',再在解压后的文件夹中找到'''DriverInstall.exe'''可执行文件并打开即可</p>
<p>[[File:media/image32pi3b-img32.png|464x136px]]</p></li>
<li><p>打开'''DriverInstall.exe'''后安装瑞芯微驱动的步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>点击”'''驱动安装'''”按钮</p>
<p>[[File:media/image33pi3b-img33.png|245x129px]]</p></li>
<li><p>等待一段时间后,会弹出窗口提示”'''安装驱动成功'''”,然后点击”'''确定'''”按钮即可</p>
<p>[[File:media/image34pi3b-img34.png|254x132px]]</p></li></ol>
</li>
<li><p>然后解压'''RKDevTool_Release_v3.15.zip''',此软件无需安装,在解压后的文件夹中找到'''RKDevTool'''打开即可</p>
<p>[[File:media/image35pi3b-img35.png|448x132px]]</p></li>
<li><p>打开'''RKDevTool''' 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”'''没有发现设备'''”</p>
<p>[[File:media/image36pi3b-img36.png|402x189px]]</p></li>
<li><p>然后开始烧录Linux镜像到TF卡中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB2.0烧录口的位置如下图所示</p>
<p>[[File:media/image37pi3b-img37.png|271x117px]]</p></li>
<li><p>确保TF卡插槽没有插入TF卡</p></li>
<li><p>然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:</p>
<p>[[File:media/image38pi3b-img38-1.png|289x100px]]</p></li>
<li><p>然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了</p>
<p>[[File:media/image39pi3b-img39-1.png|305x94px]]</p></li>
<li><p>如果前面的步骤顺利,此时开发板会进入'''MASKROM'''模式,在烧录工具的界面上会提示”'''发现一个MASKROM设备'''”</p>
<p>[[File:media/image40pi3b-img40.png|454x213px]]</p></li>
<li><p>此时请在TF卡插槽中插入TF卡</p></li>
<li><p>然后将鼠标光标放在下面的这片区域中</p>
<p>[[File:media/image41pi3b-img41.png|452x212px]]</p></li>
<li><p>然后点击鼠标右键会弹出下图所示的选择界面</p>
<p>[[File:media/image42pi3b-img42.png|453x213px]]</p></li>
<li><p>然后选择'''导入配置'''选项</p>
<p>[[File:media/image43pi3b-img43.png|458x215px]]</p></li><li><p>然后选择前面下载的'''MiniLoader'''文件夹中的'''rk3588_linux_tfcardrk356x_linux_tfcard.cfg'''配置文件,再点击'''打开'''</p><p>[[File:media/image44pi3b-img44-2.png|457x215px]]</p></li>
<li><p>然后点击'''确定'''</p>
<p>[[File:media/image45pi3b-img45.png|483x227px]]</p></li>
<li><p>然后点击下图所示的位置</p>
<p>[[File:media/image46pi3b-img46.png|486x228px]]</p></li><li><p>再选择前面下载的'''MiniLoader'''文件夹中'''rk3566_MiniLoaderAllMiniLoaderAll.bin''',再点击'''打开'''</p>
<div class="figure">
[[File:media/image47pi3b-img47-1.png|494x232px|[78~~Z7UFB@US@8P$QL%OM6]]
</div></li>
<li><p>然后点击下图所示的位置</p>
<p>[[File:media/image48pi3b-img48.png|493x232px]]</p></li><li><p>然后选择想要烧录的linux镜像的路径,再点击然后选择想要烧录的Linux镜像的路径,再点击'''打开'''</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''在烧录镜像前,建议将要烧录的linux镜像重命名为orangepi在烧录镜像前,建议将要烧录的Linux镜像重命名为orangepi.img或者其它比较短的名字,这样在烧录镜像的时候就能看到烧录进度的百分比数值。'''</p></big>
|}
<p>[[File:media/image49pi3b-img49.png|499x234px]]</p></li>
<li><p>然后请勾选上'''强制按地址写'''选项</p>
<p>[[File:media/image50pi3b-img50.png|497x234px]]</p></li><li><p>再点击执行按钮就会开始烧录linux镜像到开发板的tf卡中再点击执行按钮就会开始烧录Linux镜像到开发板的tf卡中</p><p>[[File:media/image51pi3b-img51.png|497x233px]]</p></li><li><p>linux镜像烧录完后的显示log如下图所示Linux镜像烧录完后的显示log如下图所示</p>
<div class="figure">
[[File:media/image52pi3b-img52.png|492x231px|%O4~FPPAT$0RH{3S~CGJ@@Q(1)]]
</div></li>
<li><p>烧录完linux镜像到tf卡中后,linux系统会自动启动。烧录完Linux镜像到tf卡中后,Linux系统会自动启动。</p></li></ol>
</li></ol>
<span id="使用win32diskimager烧录linux镜像的方法使用win32diskimager烧录Linux镜像的方法"></span>
=== 使用Win32Diskimager烧录Linux镜像的方法 ===
<div class="figure">
[[File:media/image53pi3b-img53.png|209x228px|选区_199]]
</div></li>
<li><p>然后点击”'''Format'''”,格式化前会弹出一个警告框,选择”'''是(Y)'''”后就会开始格式化</p></li>
[[File:media/image54pi3b-img54.png|304x147px]]
</ol>
<ol start="5" style="list-style-type: lower-alpha;">
<li><p>格式化完TF卡后会弹出下图所示的信息,点击确定即可</p>
<p>[[File:media/image55pi3b-img55.png|186x149px]]</p></li></ol>
</li></ol>
<!-- -->
<li><p>b) 然后确认下TF卡的盘符和”'''设备'''”一栏中显示的一致</p></li>
<li><p>c) 最后点击”'''写入'''”即可开始烧录</p>
<p>[[File:media/image56pi3b-img56.png|297x206px]]</p></li></ol>
</li>
<li><p>镜像写入完成后,点击”'''退出'''”按钮退出即可,然后就可以拔出TF卡插到开发板中启动</p></li></ol>
<ol start="4" style="list-style-type: decimal;">
<li><p>进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方</p>
<p>[[File:media/image21pi3b-img21.png|434x208px]]</p></li>
<li><p>然后选择下载Linux版本的软件即可</p>
<p>[[File:media/image57pi3b-img57.png|430x163px]]</p></li>
<li><p>从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html '''Orange Pi的资料下载页面''']下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”'''.img'''”结尾的文件就是操作系统的镜像文件,大小一般都在2GB以上</p>
<p>7z结尾的压缩包的解压命令如下所示</p>
</li>
<li><p>然后在Ubuntu PC的图形界面双击'''balenaEtcher-1.5.109-x64.AppImage'''即可打开balenaEtcher('''无需安装'''),balenaEtcher打开后的界面显示如下图所示</p>
<p>[[File:media/image58pi3b-img58.png|423x251px]]</p></li>
<li><p>使用balenaEtcher烧录Linux镜像的具体步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>然后选择TF卡的盘符</p></li>
<li><p>最后点击Flash就会开始烧录Linux镜像到TF卡中</p>
<p>[[File:media/image59pi3b-img59.png|431x278px]]</p></li></ol>
</li>
<li><p>balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中</p>
<p>[[File:media/image60pi3b-img60.png|429x184px]]</p></li></ol>
<ol start="1211" style="list-style-type: decimal;">
<li><p>Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验</p>
<p>[[File:media/image61pi3b-img61.png|436x190px]]</p></li>
<li><p>成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了</p>
<p>[[File:media/image62pi3b-img62.png|435x257px]]</p></li></ol>
<span id="烧录linux镜像到emmc中的方法"></span>
<ol style="list-style-type: decimal;">
<li><p>开发板预留了eMMC模块的扩展接口,烧录系统到eMMC前,首先需要购买一个与开发板eMMC接口相匹配的eMMC模块。然后将eMMC模块安装到开发板上。eMMC模块和插入开发板的方法如下所示:</p>
<p>[[File:media/image63pi3b-img63.png|115x84px400px]] [[File:media/image64pi3b-img64.png|120x87px400px]]</p><p>[[File:media/image65pi3b-img65.png|277x129px800px]]</p></li>
<li><p>还需要准备一根品质良好的USB2.0公对公数据线</p>
<div class="figure">
[[File:media/image16pi3b-img16.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
</div></li>
<ol style="list-style-type: lower-alpha;">
<li><p>在[http://www.orangepi.cn/html/serviceAndSupport/index.html '''Orange Pi的资料下载页面''']首先选择官方工具,然后进入下面的文件夹中</p>
<p>[[File:media/image30pi3b-img30.png|366x77px]]</p></li>
<li><p>然后下载下面的所有文件</p>
<p>[[File:media/image31pi3b-img31.png|315x125px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<li><p>然后从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html '''Orange Pi的资料下载页面''']下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”'''.img'''”结尾的文件就是操作系统的镜像文件,大小一般都在2GB以上</p></li>
<li><p>然后用解压软件解压'''DriverAssitant_v5.12.zip''',再在解压后的文件夹中找到'''DriverInstall.exe'''可执行文件并打开即可</p>
<p>[[File:media/image32pi3b-img32.png|496x146px]]</p></li>
<li><p>打开'''DriverInstall.exe'''后安装瑞芯微驱动的步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>点击”'''驱动安装'''”按钮</p>
<p>[[File:media/image33pi3b-img33.png|284x149px]]</p></li>
<li><p>等待一段时间后,会弹出窗口提示”'''安装驱动成功'''”,然后点击'''“确定”'''按钮即可</p>
<p>[[File:media/image34pi3b-img34.png|296x154px]]</p></li></ol>
</li>
<li><p>然后解压'''RKDevTool_Release_v3.15.zip''',此软件无需安装,在解压后的文件夹中找到 '''RKDevTool'''打开即可</p>
<p>[[File:media/image35pi3b-img35.png|484x143px]]</p></li>
<li><p>打开'''RKDevTool''' 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”'''没有发现设备'''”</p>
<p>[[File:media/image36pi3b-img36.png|442x208px]]</p></li>
<li><p>然后开始烧录Linux镜像到eMMC中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB2.0烧录口的位置如下图所示</p>
<p>[[File:media/image37pi3b-img37.png|275x118px]]</p></li>
<li><p>确保开发板没有插入TF卡,没有连接电源</p></li>
<li><p>然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:</p>
<p>[[File:media/image38pi3b-img38-1.png|289x100px]]</p></li>
<li><p>然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了</p>
<p>[[File:media/image39pi3b-img39-1.png|305x94px]]</p></li>
<li><p>如果前面的步骤顺利,此时开发板会进入'''MASKROM'''模式,在烧录工具的界面上会提示”'''发现一个MASKROM设备'''”</p>
<p>[[File:media/image40pi3b-img40.png|457x215px]]</p></li>
<li><p>然后将鼠标光标放在下面的这片区域中</p>
<p>[[File:media/image41pi3b-img41.png|458x215px]]</p></li>
<li><p>然后点击鼠标右键会弹出下图所示的选择界面</p>
<p>[[File:media/image42pi3b-img42.png|460x216px]]</p></li>
<li><p>然后选择'''导入配置'''选项</p>
<p>[[File:media/image43pi3b-img43.png|458x215px]]</p></li><li><p>然后选择前面下载的'''MiniLoader'''文件夹中的'''rk3588_linux_emmcrk356x_linux_emmc.cfg'''配置文件,再点击'''打开'''</p><p>[[File:media/image66pi3b-img66-1.png|466x219px]]</p></li>
<li><p>然后点击'''确定'''</p>
<p>[[File:media/image67pi3b-img67.png|468x220px]]</p></li>
<li><p>然后点击下图所示的位置</p>
<p>[[File:media/image68pi3b-img68.png|462x217px]]</p></li><li><p>再选择前面下载的'''MiniLoader'''文件夹中'''rk3566_MiniLoaderAllMiniLoaderAll.bin''',再点击'''打开'''</p>
<div class="figure">
[[File:media/image69pi3b-img69-1.png|459x216px|SIS5H0S2@F5M2D(6ANZEUPG]]
</div></li>
<li><p>然后点击下图所示的位置</p>
<p>[[File:media/image70pi3b-img70.png|459x216px]]</p></li><li><p>然后选择想要烧录的linux镜像的路径,再点击然后选择想要烧录的Linux镜像的路径,再点击'''打开'''</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''在烧录镜像前,建议将要烧录的linux镜像重命名为orangepi在烧录镜像前,建议将要烧录的Linux镜像重命名为orangepi.img或者其它比较短的名字,这样在烧录镜像的时候就能看到烧录进度的百分比数值。'''</p></big>
|}
<p>[[File:media/image49pi3b-img49.png|499x234px]]</p></li>
<li><p>然后请勾选上'''强制按地址写'''选项</p>
<p>[[File:media/image71pi3b-img71.png|501x235px]]</p></li><li><p>再点击执行按钮就会开始烧录linux镜像到开发板的eMMC中再点击执行按钮就会开始烧录Linux镜像到开发板的eMMC中</p><p>[[File:media/image72pi3b-img72.png|502x236px]]</p></li><li><p>linux镜像烧录完后的显示log如下图所示Linux镜像烧录完后的显示log如下图所示</p><p>[[File:media/image73pi3b-img73.png|500x235px]]</p></li><li><p>烧录完linux镜像到eMMC中后,linux系统会自动启动。烧录完Linux镜像到eMMC中后,Linux系统会自动启动。</p>
{| class="wikitable" style="width:800px;background-color:#ffffdc;"
|-
|
<big><p>'''注意,烧录镜像到eMMC中后如果测试发现启动不了,请清空下SPIFlash后再启动试下。清空SPIFlash的方法请参考注意,烧录镜像到eMMC中后如果测试发现启动不了,请清空下SPI Flash后再启动试下。清空SPI Flash的方法请参考[[Orange Pi 3B#使用RKDevTool清空SPIFlash的方法|使用RKDevTool清空SPIFlash的方法]]小节的内容。'''</p></big>
|}
</li></ol>
|-
|
<big>'''注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian、Ubuntu、OpenWRT或者OPi 注意,这里说的Linux镜像具体指的是从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html Orange Pi资料下载页面]下载的Debian、Ubuntu或者OPi OS Arch这样的Linux发行版镜像。'''</big>
|}
<ol style="list-style-type: decimal;">
<li><p>开发板预留了eMMC模块的扩展接口,烧录系统到eMMC前,首先需要购买一个与开发板eMMC接口相匹配的eMMC模块。然后将eMMC模块安装到开发板上。eMMC模块和插入开发板的方法如下所示:</p>
<p>[[File:media/image63pi3b-img63.png|115x84px400px]] [[File:media/image64pi3b-img64.png|120x87px400px]]</p><p>[[File:media/image65pi3b-img65.png|286x133px800px]]</p></li><li><p>使用dd命令烧录linux镜像到eMMC中需要借助TF卡来完成,所以首先需要将linux镜像烧录到TF卡上,然后使用TF卡启动开发板进入linux系统。烧录Linux镜像到TF卡的方法请见使用dd命令烧录Linux镜像到eMMC中需要借助TF卡来完成,所以首先需要将Linux镜像烧录到TF卡上,然后使用TF卡启动开发板进入Linux系统。烧录Linux镜像到TF卡的方法请见[[Orange Pi 3B#基于Windows PC将Linux镜像烧写到TF卡的方法|'''基于Windows PC将Linux镜像烧录到TF卡的方法''']]和[[Orange Pi 3B#基于Ubuntu PC将Linux镜像烧写到TF卡的方法|'''基于Ubuntu PC将Linux镜像烧录到TF卡的方法''']]两小节的说明。</p></li><li><p>使用TF卡启动linux系统后,我们首先将解压后的linux镜像文件(从官网下载的Debian、Ubuntu镜像或者OPi Arch镜像)上传到TF卡中。上传linux镜像文件到开发板中的方法请参考使用TF卡启动Linux系统后,我们首先将解压后的Linux镜像文件(从官网下载的Debian、Ubuntu镜像或者OPi Arch镜像)上传到TF卡中。上传Linux镜像文件到开发板中的方法请参考[[Orange Pi 3B#上传文件到开发板Linux系统中的方法|'''上传文件到开发板Linux系统中的方法''']]小节的说明。</p></li><li><p>上传完镜像到开发板的linux系统中后,我们再在开发板linux系统的命令行中进入镜像文件的存放路径,比如,我将开发板的linux镜像存放在上传完镜像到开发板的Linux系统中后,我们再在开发板Linux系统的命令行中进入镜像文件的存放路径,比如,我将开发板的Linux镜像存放在'''/home/orangepi/Desktop'''目录下了,然后进入'''/home/orangepi/Desktop'''目录就能看到上传的镜像文件了。</p>
{| class="wikitable" style="width:800px;"
|-
|-
|
<big><p>'''怎么进入开发板linux系统的命令行?怎么进入开发板Linux系统的命令行?'''</p>
'''1. 使用串口登录终端的方法请参考[[Orange Pi 3B#调试串口的使用方法|调试串口的使用方法]]一小节的说明。'''
'''2. 使用ssh远程登录linux系统请参考使用ssh远程登录Linux系统请参考[[Orange Pi 3B#SSH远程登录开发板|SSH远程登录开发板]]一小节的说明。'''
'''3. 如果接了HDMI、LCD等显示屏幕,可以在桌面中打开一个命令行终端。'''</big>
|}
</li>
<li><p>然后就可以使用dd命令烧录开发板的linux镜像到eMMC中然后就可以使用dd命令烧录开发板的Linux镜像到eMMC中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>下面的命令中 '''if=''' 参数后面是要填写linux镜像存放的完整路径参数后面是要填写Linux镜像存放的完整路径+Linux镜像的名字(比如'''/home/orangepi/Desktop/Linux镜像的名字''')。因为上面我们已经进入linux镜像的路径下了,所以只需要填写Linux镜像的名字的即可。)。因为上面我们已经进入Linux镜像的路径下了,所以只需要填写Linux镜像的名字的即可。</p></li><li><p>下面命令中的linux镜像名请不要照抄,要替换为实际的镜像名(因为镜像的版本号可能会更新)。下面命令中的Linux镜像名请不要照抄,要替换为实际的镜像名(因为镜像的版本号可能会更新)。</p>
{| class="wikitable" style="width:800px;"
|-
|-
|
<big><p>'''<span style="color:#FF0000">注意,如果上传的是 .7z或者.xz 结尾linux镜像压缩文件,使用dd命令烧录前请记得先解压。结尾Linux镜像压缩文件,使用dd命令烧录前请记得先解压。</span>'''</p><p>'''dd命令的所有参数的详细说明和更多用法可以在linux系统中执行man dd命令的所有参数的详细说明和更多用法可以在Linux系统中执行man dd命令来查看。'''</p></big>
|}
</li></ol>
</li>
<li><p>当成功烧录开发板的linux镜像到eMMC后,此时就可以使用当成功烧录开发板的Linux镜像到eMMC后,此时就可以使用'''poweroff'''命令关机了。然后请拔出TF卡,再短按电源按键开机,此时就会启动eMMC中的linux系统了。命令关机了。然后请拔出TF卡,再短按电源按键开机,此时就会启动eMMC中的Linux系统了。</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''注意,烧录镜像到eMMC中后如果测试发现启动不了,请清空下SPIFlash后再启动试下。清空SPIFlash的方法请参考注意,烧录镜像到eMMC中后如果测试发现启动不了,请清空下SPI Flash后再启动试下。清空SPI Flash的方法请参考[[Orange Pi 3B#使用RKDevTool清空SPIFlash的方法|使用RKDevTool清空SPIFlash的方法]]小节的内容。'''</p></big>
|}
</li></ol>
|-
|
<big>'''注意,这里说的Linux镜像具体指的是从Orange Pi资料下载页面下载的Debian、Ubuntu这样的Linux发行版镜像。注意,这里说的Linux镜像具体指的是从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html Orange Pi资料下载页面]下载的Debian、Ubuntu这样的Linux发行版镜像。'''</big>
|}
<ol style="list-style-type: lower-alpha;">
<li><p>M.2 2230规格的SSD如下所示</p>
<p>[[File:media/image74pi3b-img74.png|157x128px]]</p></li>
<li><p>M.2 2242规格的SSD如下所示</p>
<p>[[File:media/image75pi3b-img75.png|174x105px]]</p></li></ol>
</li>
<li><p>然后把NVMe SSD插入开发板的M.2 PCIe接口,并固定好</p>
<p>[[File:media/image76pi3b-img76.png|283x63px]]</p></li>
<li><p>SPI Flash在开发板上的位置如下图所示,开始烧录前无需其他设置</p>
<p>[[File:media/image77pi3b-img77-1.png|266x211px]]</p></li>
<li><p>然后需要准备一根品质良好的USB2.0公对公数据线</p>
<div class="figure">
[[File:media/image16pi3b-img16.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
</div></li>
<ol style="list-style-type: lower-alpha;">
<li><p>在[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html Orange Pi的资料下载页面]首先选择'''官方工具''',然后进入下面的文件夹中</p>
<p>[[File:media/image30pi3b-img30.png|294x61px]]</p></li>
<li><p>然后下载下面的所有文件</p>
<p>[[File:media/image31pi3b-img31.png|244x97px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
</li>
<li><p>然后从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html '''Orange Pi的资料下载页面''']下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”'''.img'''”结尾的文件就是操作系统的镜像文件,大小一般都在2GB以上</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''注意,如果下载的是OpenWRT镜像,在OpenWRT镜像的下载链接中会看到下面三种类型的镜像,请选择”TF卡启动镜像”文件夹中的镜像文件。'''</p></big>
<p>[[File:media/image78.png|223x82px|center]]</p>
|}
</li>
<li><p>然后用解压软件解压'''DriverAssitant_v5.12.zip''',再在解压后的文件夹中找到'''DriverInstall.exe'''可执行文件并打开即可</p>
<p>[[File:media/image32pi3b-img32.png|446x131px]]</p></li>
<li><p>打开'''DriverInstall.exe'''后安装瑞芯微驱动的步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>点击”'''驱动安装'''”按钮</p>
<p>[[File:media/image33pi3b-img33.png|253x133px]]</p></li>
<li><p>等待一段时间后,会弹出窗口提示”'''安装驱动成功'''”,然后点击'''“确定”'''按钮即可</p>
<p>[[File:media/image34pi3b-img34.png|269x140px]]</p></li></ol>
</li>
<li><p>然后解压'''RKDevTool_Release_v3.15.zip''',此软件无需安装,在解压后的文件夹中找到 '''RKDevTool'''打开即可</p>
<p>[[File:media/image35pi3b-img35.png|402x119px]]</p></li>
<li><p>打开'''RKDevTool''' 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”'''没有发现设备'''”</p>
<p>[[File:media/image36pi3b-img36.png|402x189px]]</p></li>
<li><p>然后开始烧录Linux镜像到SSD中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB2.0烧录接口的位置如下图所示</p>
<p>[[File:media/image37pi3b-img37.png|275x118px]]</p></li>
<li><p>确保开发板没有连接电源和插入TF卡以及eMMC</p></li>
<li><p>然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:</p>
<p>[[File:media/image38pi3b-img38-1.png|289x100px]]</p></li>
<li><p>然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了</p>
<p>[[File:media/image39pi3b-img39-1.png|305x94px]]</p></li>
<li><p>如果前面的步骤顺利,此时开发板会进入'''MASKROM'''模式,在烧录工具的界面上会提示”'''发现一个MASKROM设备'''”</p>
<p>[[File:media/image40pi3b-img40.png|457x215px]]</p></li>
<li><p>然后将鼠标光标放在下面的这片区域中</p>
<p>[[File:media/image41pi3b-img41.png|459x216px]]</p></li>
<li><p>然后点击鼠标右键会弹出下图所示的选择界面</p>
<p>[[File:media/image42pi3b-img42.png|453x213px]]</p></li>
<li><p>然后选择'''导入配置'''选项</p>
<p>[[File:media/image43pi3b-img43.png|458x215px]]</p></li>
<li><p>然后进入前面下载的'''MiniLoader'''文件夹中,然后选择'''rk3588_linux_pcie.cfg'''配置文件,再点击'''打开'''</p>
<p>[[File:media/image79pi3b-img79.png|462x217px]]</p></li>
<li><p>然后点击'''确定'''</p>
<p>[[File:media/image80pi3b-img80.png|468x220px]]</p></li>
<li><p>然后点击下图所示的位置</p>
<p>[[File:media/image81pi3b-img81.png|475x223px]]</p></li>
<li><p>再选择前面下载的'''MiniLoader'''文件夹中'''rk3566_MiniLoaderAll.bin''',再点击'''打开'''</p>
<div class="figure">
[[File:media/image69pi3b-img69.png|459x216px|SIS5H0S2@F5M2D(6ANZEUPG]]
</div></li>
<li><p>然后点击下图所示的位置</p>
<p>[[File:media/image82pi3b-img82.png|486x228px]]</p></li>
<li><p>然后进入前面下载的'''MiniLoader'''文件夹中,再选择'''rk3566_rkspi_loader.img''',再点击'''打开'''</p>
<div class="figure">
[[File:media/image83pi3b-img83.png|488x228px|GGU}ZN)TL%P[INB(M%MNJV7]]
</div></li>
<li><p>然后点击下图所示的位置</p>
<p>[[File:media/image84pi3b-img84.png|493x231px]]</p></li><li><p>然后选择想要烧录的linux镜像的路径,再点击然后选择想要烧录的Linux镜像的路径,再点击'''打开'''</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''在烧录镜像前,建议将要烧录的linux镜像重命名为orangepi在烧录镜像前,建议将要烧录的Linux镜像重命名为orangepi.img或者其它比较短的名字,这样在烧录镜像的时候就能看到烧录进度的百分比数值。'''</p></big>
|}
<p>[[File:media/image49pi3b-img49.png|499x234px]]</p></li>
<li><p>然后请勾选上'''强制按地址写'''选项</p>
<p>[[File:media/image85pi3b-img85.png|498x234px]]</p></li><li><p>再点击执行按钮就会开始烧录linux镜像到SSD中再点击执行按钮就会开始烧录Linux镜像到SSD中</p><p>[[File:media/image86pi3b-img86.png|500x235px]]</p></li><li><p>linux镜像烧录完后的显示log如下图所示Linux镜像烧录完后的显示log如下图所示</p><p>[[File:media/image87pi3b-img87.png|504x240px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''如果烧录有问题,请先清空下SPIFlash然后再烧录试下。清空SPIFlash的方法请参考下如果烧录有问题,请先清空下SPI Flash然后再烧录试下。清空SPI Flash的方法请参考下[[Orange Pi 3B#使用RKDevTool清空SPIFlash的方法|使用RKDevTool清空SPIFlash的方法]]一小节的说明。'''</p></big>
|}
</li>
<li><p>镜像烧录完后会自动启动SPIFlash+PCIe SSD中的linux系统,如果没有正常启动,请重新上电试下。SSD中的Linux系统,如果没有正常启动,请重新上电试下。</p></li></ol>
</li></ol>
<ol style="list-style-type: lower-alpha;">
<li><p>M.2 2230规格的SSD如下所示</p>
<p>[[File:media/image74pi3b-img74.png|158x129px]]</p></li>
<li><p>M.2 2242规格的SSD如下所示</p>
<p>[[File:media/image75pi3b-img75.png|192x116px]]</p></li></ol>
</li></ol>
<ol start="2" style="list-style-type: decimal;">
<li><p>然后把NVMe SSD插入开发板的M.2 PCIe接口,并固定好</p>
<p>[[File:media/image76pi3b-img76.png|283x63px]]</p></li>
<li><p>SPI Flash在开发板上的位置如下图所示,开始烧录前无需其他设置</p>
<p>[[File:media/image77pi3b-img77-1.png|261x198px]]</p></li><li><p>烧录linux镜像到SPIFlash烧录Linux镜像到SPIFlash+NVMe SSD中需要借助TF卡来完成,所以首先需要将linux镜像烧录到TF卡上,然后使用TF卡启动开发板进入linux系统。烧录Linux镜像到TF卡的方法请见SSD中需要借助TF卡来完成,所以首先需要将Linux镜像烧录到TF卡上,然后使用TF卡启动开发板进入Linux系统。烧录Linux镜像到TF卡的方法请见[[Orange Pi 3B#基于Windows PC将Linux镜像烧写到TF卡的方法|'''基于Windows PC将Linux镜像烧写到TF卡的方法''']]和[[Orange Pi 3B#基于Ubuntu PC将Linux镜像烧写到TF卡的方法|'''基于Ubuntu PC将Linux镜像烧写到TF卡的方法''']]两小节的说明。</p></li><li><p>使用TF卡启动linux系统后,我们首先烧录u使用TF卡启动Linux系统后,我们首先烧录u-boot镜像到SPI Flash中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>先运行下'''nand-sata-install''','''<span style="color:#FF0000">普通用户记得加sudo权限</span>'''</p>
<div class="figure">
[[File:media/image88pi3b-img88.png|355x174px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image89pi3b-img89.png|356x179px|IMG_256]]
</div>
<div class="figure">
[[File:media/image90pi3b-img90.png|358x161px|IMG_256]]
</div>
</li></ol>
<ol start="6" style="list-style-type: decimal;">
<li><p>然后将linux镜像文件(从官网下载的Debian或者Ubuntu镜像)上传到TF卡中。上传linux镜像文件到开发板中的方法请参考然后将Linux镜像文件(从官网下载的Debian或者Ubuntu镜像)上传到TF卡中。上传Linux镜像文件到开发板中的方法请参考[[Orange Pi 3B#上传文件到开发板Linux系统中的方法|'''上传文件到开发板Linux系统中的方法''']]小节的说明。</p></li><li><p>上传完镜像到开发板的linux系统中后,我们再在开发板linux系统的命令行中进入镜像文件的存放路径,比如,我将开发板的linux镜像存放在上传完镜像到开发板的Linux系统中后,我们再在开发板Linux系统的命令行中进入镜像文件的存放路径,比如,我将开发板的Linux镜像存放在'''/home/orangepi/Desktop'''目录下了,然后进入'''/home/orangepi/Desktop'''目录就能看到上传的镜像文件了。</p>
{| class="wikitable" style="width:800px;"
|-
|-
|
<big><p>'''怎么进入开发板linux系统的命令行?怎么进入开发板Linux系统的命令行?'''</p>
<ol start="1" style="list-style-type: decimal;">
<li><p>'''使用串口登录终端的方法请参考[[Orange Pi 3B#调试串口的使用方法|调试串口的使用方法]]一小节的说明。'''</p></li>
<li><p>'''使用ssh远程登录linux系统请参考使用ssh远程登录Linux系统请参考[[Orange Pi 3B#SSH远程登录开发板|SSH远程登录开发板]]一小节的说明。'''</p></li>
<li><p>'''如果接了HDMI、LCD等显示屏幕,可以在桌面中打开一个命令行终端。'''</p>
</li></ol></big>
<!-- -->
<ol start="8" style="list-style-type: decimal;">
<li><p>接下来,我们先确认下NVMe SSD已经被开发板的linux正常识别了。如果NVMe SSD已经被开发板的Linux正常识别了。如果NVMe SSD正常识别了的话,使用'''sudo fdisk -l'''命令就能看到'''nvme'''相关的信息</p>
{| class="wikitable" style="width:800px;"
|-
|}
</li>
<li><p>然后就可以使用dd命令烧录开发板的linux镜像到NVMe 然后就可以使用dd命令烧录开发板的Linux镜像到NVMe SSD中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>下面的命令中 '''if=''' 参数后面是要填写linux镜像存放的完整路径参数后面是要填写Linux镜像存放的完整路径+Linux镜像的名字(比如'''/home/orangepi/Desktop/Linux镜像的名字''')。因为上面我们已经进入linux镜像的路径下了,所以只需要填写Linux镜像的名字的即可。)。因为上面我们已经进入Linux镜像的路径下了,所以只需要填写Linux镜像的名字的即可。</p></li><li><p>下面命令中的linux镜像名请不要照抄,要替换为实际的镜像名(因为镜像的版本号可能会更新)。下面命令中的Linux镜像名请不要照抄,要替换为实际的镜像名(因为镜像的版本号可能会更新)。</p>
{| class="wikitable" style="width:800px;"
|-
|-
|
<big><p>'''<span style="color:#FF0000">注意,如果上传的是 .7z或者.xz 或者.gz结尾linux镜像压缩文件,使用dd命令烧录前请记得先解压。gz结尾Linux镜像压缩文件,使用dd命令烧录前请记得先解压。</span>'''</p><p>'''dd命令的所有参数的详细说明和更多用法可以在linux系统中执行man dd命令的所有参数的详细说明和更多用法可以在Linux系统中执行man dd命令来查看。'''</p></big>
|}
</li></ol>
</li>
<li><p>当成功烧录开发板的linux镜像到NVMe 当成功烧录开发板的Linux镜像到NVMe SSD后,此时就可以使用'''poweroff'''命令关机了。然后请拔出TF卡,再短按电源按键开机,此时就会启动SPIFlash+NVMe SSD中的linux系统了。SSD中的Linux系统了。</p></li>
<li><p>启动NVMe SSD中的系统后,使用'''df -h'''命令可以看到实际的硬盘容量</p>
<ol style="list-style-type: lower-alpha;">
<ol style="list-style-type: lower-alpha;">
<li><p>M.2 2230规格的SSD如下所示</p>
<p>[[File:media/image74pi3b-img74.png|189x153px]]</p></li>
<li><p>M.2 2242规格的SSD如下所示</p>
<p>[[File:media/image75pi3b-img75.png|238x144px]]</p></li></ol>
</li>
<li><p>然后把NVMe SSD插入开发板的M.2 PCIe接口,并固定好</p>
<p>[[File:media/image76pi3b-img76.png|283x63px]]</p></li>
<li><p>SPI Flash在开发板上的位置如下图所示,开始烧录前无需其他设置</p>
<p>[[File:media/image77pi3b-img77-1.png|261x198px]]</p></li><li><p>烧录linux镜像到SPIFlash烧录Linux镜像到SPIFlash+NVMe SSD中需要借助TF卡来完成,所以首先需要将linux镜像烧录到TF卡上,然后使用TF卡启动开发板进入linux系统。烧录Linux镜像到TF卡的方法请见SSD中需要借助TF卡来完成,所以首先需要将Linux镜像烧录到TF卡上,然后使用TF卡启动开发板进入Linux系统。烧录Linux镜像到TF卡的方法请见[[Orange Pi 3B#基于Windows PC将Linux镜像烧写到TF卡的方法|'''基于Windows PC将Linux镜像烧写到TF卡的方法''']]和[[Orange Pi 3B#基于Ubuntu PC将Linux镜像烧写到TF卡的方法|'''基于Ubuntu PC将Linux镜像烧写到TF卡的方法''']]两小节的说明。</p></li><li><p>启动进入TF卡中的linux系统后,请先确认下NVMe SSD已经被开发板的linux正常识别了。如果NVMe 启动进入TF卡中的Linux系统后,请先确认下NVMe SSD已经被开发板的Linux正常识别了。如果NVMe SSD正常识别了的话,使用'''sudo fdisk -l'''命令就能看到'''nvme'''相关的信息</p>
{| class="wikitable" style="width:800px;"
|-
|}
</li>
<li><p>linux镜像中已经预装了balenaEtcher,打开方法如下所示:Linux镜像中已经预装了balenaEtcher,打开方法如下所示:</p>
<div class="figure">
[[File:media/image91pi3b-img91.png|506x249px|IMG_256]]
</div>
<div class="figure">
[[File:media/image92pi3b-img92.png|406x207px|IMG_256]]
</div></li></ol>
<div class="figure">
[[File:media/image93pi3b-img93.png|406x205px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image94pi3b-img94.png|563x110px|IMG_256]]
</div></ol>
<ol start="3" style="list-style-type: lower-alpha;">
<li><p>打开'''rkspi_loader.img'''后的界面如下所示:</p>
<p>[[File:media/image95pi3b-img95.png|379x181px]]</p></li>
<li><p>然后点击'''Select target'''</p></li>
<div class="figure">
[[File:media/image96pi3b-img96.png|379x171px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image97pi3b-img97.png|385x155px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image98pi3b-img98.png|389x264px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image99pi3b-img99.png|394x268px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image100pi3b-img100.png|396x269px|IMG_256]]
</div></ol>
<ol style="list-style-type: lower-roman;">
<li>然后输入开发板linux系统的密码然后输入开发板Linux系统的密码'''orangepi''',就会开始烧录u-boot镜像到SPI Flash中</li>
<div class="figure">
[[File:media/image101pi3b-img101.png|393x269px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image102pi3b-img102.png|397x272px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image103pi3b-img103.png|395x225px|IMG_256]]
</div></ol>
</li></ol>
<ol start="9" style="list-style-type: decimal;">
<li><p>烧录TF卡中的linux系统到NVMe 烧录TF卡中的Linux系统到NVMe SSD中的方法(此方法相当于将TF卡中的系统克隆到NVMe SSD)</p>
<ol style="list-style-type: lower-alpha;">
<li>首先点击'''Clone drive'''</li>
<div class="figure">
[[File:media/image104pi3b-img104.png|386x204px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image105pi3b-img105.png|379x256px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image106pi3b-img106.png|381x191px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image96pi3b-img96.png|379x171px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image97pi3b-img97.png|385x155px|IMG_256]]
</div></ol>
<li>然后选择NVMe SSD的设备名'''/dev/nvme0n1''',然后点击'''Select'''</li>
[[File:media/image107pi3b-img107.png|386x264px]]
</ol>
<ol start="7" style="list-style-type: lower-alpha;">
<div class="figure">
[[File:media/image108pi3b-img108.png|389x264px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image109pi3b-img109.png|392x268px|IMG_256]]
</div></ol>
<ol style="list-style-type: lower-roman;">
<li>然后输入开发板linux系统的密码orangepi,就会开始烧录linux镜像到SSD中然后输入开发板Linux系统的密码orangepi,就会开始烧录Linux镜像到SSD中</li>
<div class="figure">
[[File:media/image110pi3b-img110.png|390x267px|IMG_256]]
</div></ol>
<li>烧录过程的显示如下所示:</li>
[[File:media/image111pi3b-img111.png|393x212px]]
<div class="figure">
[[File:media/image112pi3b-img112.png|395x205px|IMG_256]]
</div></ol>
<li>烧录完成后的显示如下所示:</li>
[[File:media/image113pi3b-img113.png|398x227px]]
</ol>
<ol start="12" style="list-style-type: lower-alpha;">
<div class="figure">
[[File:media/image114pi3b-img114.png|576x215px|IMG_256]]
</div></li></ol>
<ol start="2" style="list-style-type: none;">
<li>b) 然后输入linux系统的密码orangepi,再点击然后输入Linux系统的密码orangepi,再点击'''Authenticate'''</li>
[[File:media/image115pi3b-img115.png|356x173px]]
</ol>
<ol start="3" style="list-style-type: none;">
<li><p>c) 然后点击'''Fix'''</p>
<p>[[File:media/image116pi3b-img116.png|355x261px]]</p></li>
<li><p>d) 然后选择NVMe SSD</p></li>
<div class="figure">
[[File:media/image117pi3b-img117.png|452x187px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image118pi3b-img118.png|451x187px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image119pi3b-img119.png|448x345px|IMG_256]]
</div></ol>
<ol start="7" style="list-style-type: none;">
<li><p>g) 然后在下图所示的位置将容量拖动到最大</p>
<p>[[File:media/image120pi3b-img120.png|339x210px]]</p></li>
<li><p>h) 然后点击'''Resize/Move'''</p>
<p>[[File:media/image121pi3b-img121.png|339x212px]]</p></li>
<li><p>i) 然后点击下图位置绿色的'''√'''</p>
<p>[[File:media/image122pi3b-img122.png|425x166px]]</p></li>
<li><p>j) 再点击'''Apply'''</p>
<p>[[File:media/image123pi3b-img123.png|378x276px]]</p></li>
<li><p>k) 然后点击'''Close'''关闭即可</p>
<p>[[File:media/image124pi3b-img124.png|383x234px]]</p></li></ol>
</li></ol>
<!-- -->
<ol start="13" style="list-style-type: lower-alpha;">
<li>此时就可以使用'''sudo poweroff'''命令关机了。然后请拔出TF卡,再短按电源按键开机,此时就会启动SPIFlash+NVMe SSD中的linux系统了。SSD中的Linux系统了。</li></ol>
</li></ol>
<!-- -->
<ol start="10" style="list-style-type: decimal;">
<li><p>第 '''9''' 步是克隆TF卡中的系统到NMVe SSD中,我们还可以直接烧录linux镜像文件到NVMe SSD中,我们还可以直接烧录Linux镜像文件到NVMe SSD中,这里大概说下步骤:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>上传linux镜像文件到开发板的linux系统中上传Linux镜像文件到开发板的Linux系统中</p></li>
<li><p>然后使用balenaEtcher烧录即可</p>
<p>[[File:media/image125pi3b-img125.png|463x291px]]</p></li>
<li><p>'''使用这种方法烧录镜像后无需手动扩容,第一次启动会自动扩容。'''</p></li></ol>
</li></ol>
<div class="figure">
[[File:media/image16pi3b-img16.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
</div></li>
<li><p>然后从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html '''Orange Pi的资料下载页面''']下载瑞芯微驱动'''DriverAssitant_v5.12.zip'''和烧录工具'''RKDevTool_Release_v3.15.zip'''</p><ol style="list-style-type: lower-alpha;"><li><p>在[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html '''Orange Pi的资料下载页面''']首先选择'''官方工具''',然后进入下面的文件夹中</p><p>[[File:pi3b-img126-2.png]]</p></li><li><p>然后下载下面的所有文件</p><p>[[File:pi3b-img127-2.png]]</p></li></li></ol>
<li><p>然后从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html '''Orange Pi的资料下载页面''']下载Android的镜像。</p>
<ol style="list-style-type: lower-alpha;">
<li><p>打开安卓镜像的下载链接后可以看到下面两种类型的安卓镜像,请选择'''TF卡和eMMC启动镜像'''文件夹中的镜像进行下载</p>
<p>[[File:media/image126pi3b-img126.png|224x82px]]</p></li>
<li><p>进入'''TF卡和eMMC启动镜像'''文件夹后可以看到下面两个镜像,它们的区别是:</p>
<ol style="list-style-type: none;">
<li><p>a) 第一个镜像专门用于HDMI显示的,支持4K显示,如果不使用LCD屏幕,请下载不带lcd的镜像</p></li>
<li><p>b) 如果要使用lcd屏幕,请选择带lcd的镜像</p>
<p>[[File:media/image127pi3b-img127.png|264x58px]]</p></li></ol>
</li></ol>
</li>
<li><p>然后使用解压软件解压下载的Android镜像的压缩包,解压后的文件中,以”.img” 结尾的文件就是Android镜像文件,大小在1GB以上</p></li>
<li><p>然后用解压软件解压'''DriverAssitant_v5.12.zip''',再在解压后的文件夹中找到'''DriverInstall.exe'''可执行文件并打开即可</p>
<p>[[File:media/image32pi3b-img32.png|575x169px]]</p></li>
<li><p>打开'''DriverInstall.exe'''后安装瑞芯微驱动的步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>点击”'''驱动安装'''”按钮</p>
<p>[[File:media/image33pi3b-img33.png|300x157px]]</p></li>
<li><p>等待一段时间后,会弹出窗口提示”'''安装驱动成功'''”,然后点击'''“确定”'''按钮即可</p>
<p>[[File:media/image34pi3b-img34.png|315x164px]]</p></li></ol>
</li>
<li><p>然后解压'''RKDevTool_Release_v3.15.zip''',此软件无需安装,在解压后的文件夹中找到 '''RKDevTool'''打开即可</p>
<p>[[File:media/image35pi3b-img35.png|454x134px]]</p></li>
<li><p>打开'''RKDevTool''' 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”'''没有发现设备'''”</p>
<p>[[File:media/image36pi3b-img36.png|442x208px]]</p></li>
<li><p>然后开始烧录Android镜像到TF卡中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB2.0烧录接口的位置如下图所示</p>
<p>[[File:media/image37pi3b-img37.png|275x118px]]</p></li>
<li><p>然后确保开发板没有插入TF卡,没有连接电源</p></li>
<li><p>然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:</p>
<p>[[File:media/image38pi3b-img38-1.png|289x100px]]</p></li>
<li><p>然后给开发板接上Type-C接口的电源,并上电</p>
<p>[[File:media/image39pi3b-img39-1.png|305x94px]]</p></li>
<li><p>如果前面的步骤顺利,此时开发板会进入'''MASKROM'''模式,在烧录工具的界面上会提示”'''发现一个MASKROM设备'''”</p>
<p>[[File:media/image40pi3b-img40.png|457x215px]]</p></li>
<li><p>然后再插入TF卡到开发板</p></li>
<li><p>然后请选择'''高级功能'''</p>
<p>[[File:media/image128pi3b-img128.png|458x138px]]</p></li>
<li><p>然后点击下图所示的位置</p>
<p>[[File:media/image129pi3b-img129.png|459x216px]]</p></li>
<li><p>再选择前面下载的'''MiniLoader'''文件夹中的'''rk3566_MiniLoaderAll.bin''',再点击打开</p>
<div class="figure">
[[File:media/image69pi3b-img69.png|459x216px|SIS5H0S2@F5M2D(6ANZEUPG]]
</div></li>
<li><p>然后点击'''下载'''</p>
<p>[[File:media/image130pi3b-img130.png|472x222px]]</p></li>
<li><p>下载完'''rk3566_MiniLoaderAll.bin'''后的显示如下图所示</p>
<p>[[File:media/image131pi3b-img131.png|474x227px]]</p></li>
<li><p>然后选择存储设备为'''SD''',再点击'''切换存储'''</p>
<div class="figure">
[[File:media/image132pi3b-img132.jpeg|477x222px|D~T2CO%X~K2@ELR98)BVP~2png]]
</div></li>
<div class="figure">
[[File:media/image133pi3b-img133.jpeg|474x223px|QFVLTK~19N32OK2UGH{D{AKpng]]
</div></li>
<li><p>然后点击烧录工具的”'''升级固件'''”一栏</p>
<p>[[File:media/image134pi3b-img134.png|477x224px]]</p></li>
<li><p>接着点击”'''固件'''”按钮选择需要烧录的Android镜像的路径</p>
<p>[[File:media/image135pi3b-img135.png|444x209px]]</p></li>
<li><p>最后点击”'''升级'''”按钮就会开始烧录,烧录过程中的log如下图所示。烧录完成后Android系统会自动启动。</p></li>
<div class="figure">
[[File:media/image136pi3b-img136.png|455x214px|GO~ZSPN`B]JCQM`@_9UU8[R]]
</div></ol>
<ol style="list-style-type: lower-alpha;">
<li><p>打开安卓镜像的下载链接后可以看到下面两种类型的安卓镜像,请选择'''TF卡和eMMC启动镜像'''文件夹中的镜像进行下载</p>
<p>[[File:media/image126pi3b-img126.png|224x82px]]</p></li></ol>
<!-- -->
<li><p>a) 不带lcd的镜像是专门用于HDMI显示的,支持4K显示,如果不使用LCD屏幕,请下载不带lcd的镜像</p></li>
<li><p>b) 如果要使用LCD屏幕,请选择带lcd的镜像</p>
<p>[[File:media/image127pi3b-img127.png|281x62px]]</p></li></ol>
</li></ol>
</li>
<li><p>然后使用解压软件解压下载的Android镜像的压缩包,解压后的文件中,以”.img” 结尾的文件就是Android镜像文件,大小在1GB以上</p></li>
<li><p>然后使用解压软件解压'''SDDiskTool_v1.72.zip''',此软件无需安装,在解压后的文件夹中找到'''SD_Firmware_Tool.exe'''打开即可</p>
<p>[[File:media/image137pi3b-img137.png|415x99px]]</p></li>
<li><p>打开'''SDDiskTool'''后,如果TF卡识别正常,会在”'''选择可移动磁盘设备'''”一栏中显示插入的磁盘设备,'''<span style="color:#FF0000">请务必确认显示的磁盘设备和你想烧录的TF卡的盘符是一致的</span>''',如果没有显示可以尝试拔插下TF卡</p>
<p>[[File:media/image138pi3b-img138.png|267x228px]]</p></li>
<li><p>确认完盘符后,可以先格式化下TF卡,点击'''SDDiskTool'''中的'''恢复磁盘'''按钮即可,也可使用前面提到的'''SD Card Formatter'''进行TF卡的格式化</p>
<p>[[File:media/image139pi3b-img139.png|264x226px]]</p></li>
<li><p>然后开始将Android镜像写入TF卡</p>
<ol style="list-style-type: lower-alpha;">
<li><p>然后在”'''选择升级固件'''”一栏中选择Android镜像的路径</p></li>
<li><p>最后点击”'''开始创建'''”按钮就会开始烧录Android镜像到TF卡中</p>
<p>[[File:media/image140pi3b-img140.png|286x242px]]</p></li></ol>
</li>
<li><p>烧录完后即可退出SDDiskTool软件,然后就可以把TF卡从电脑中拔出来插到开发板中启动了</p>
<p>[[File:media/image141pi3b-img141.png|288x244px]]</p></li></ol>
<span id="烧录android镜像到emmc中的方法"></span>
|-
|
<big>'''注意,烧录镜像到eMMC中后如果测试发现启动不了,请清空下SPIFlash后再启动试下。清空SPIFlash的方法请参考注意,烧录镜像到eMMC中后如果测试发现启动不了,请清空下SPI Flash后再启动试下。清空SPI Flash的方法请参考[[Orange Pi 3B#使用RKDevTool清空SPIFlash的方法|使用RKDevTool清空SPIFlash的方法]]小节的内容。'''</big>
|}
<li><p>开发板预留了eMMC的扩展接口,烧录系统到eMMC前,首先需要购买一个与开发板eMMC接口相匹配的eMMC模块。然后将eMMC模块安装到开发板上。</p>
<p>eMMC模块和插入开发板的方法如下所示:</p>
<p>[[File:media/image63pi3b-img63.png|115x84px300px]] [[File:media/image64pi3b-img64.png|120x87px300px]]</p><p>[[File:media/image65pi3b-img65.png|286x133px600px]]</p></li>
<li><p>还需要准备一根品质良好的USB2.0公对公数据线</p>
<div class="figure">
[[File:media/image16pi3b-img16.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
</div></li>
<ol style="list-style-type: lower-alpha;">
<li><p>打开安卓镜像的下载链接后可以看到下面两种类型的安卓镜像,请选择'''TF卡和eMMC启动镜像'''文件夹中的镜像进行下载</p>
<p>[[File:media/image126pi3b-img126.png|224x82px]]</p></li>
<li><p>进入'''TF卡和eMMC启动镜像'''文件夹后可以看到下面两个镜像,它们的区别是:</p>
<ol style="list-style-type: none;">
<li><p>a) 第一个镜像专门用于HDMI显示的,支持4K显示,如果不使用LCD屏幕,请下载不带lcd的镜像</p></li>
<li><p>b) 如果要使用lcd屏幕,请选择带lcd的镜像</p>
<p>[[File:media/image127pi3b-img127.png|264x58px]]</p></li></ol>
</li></ol>
</li>
<li><p>然后使用解压软件解压下载的Android镜像的压缩包,解压后的文件中,以”.img” 结尾的文件就是Android镜像文件,大小在1GB以上</p></li>
<li><p>然后用解压软件解压'''DriverAssitant_v5.12.zip''',再在解压后的文件夹中找到'''DriverInstall.exe'''可执行文件并打开即可</p>
<p>[[File:media/image32pi3b-img32.png|575x169px]]</p></li>
<li><p>打开'''DriverInstall.exe'''后安装瑞芯微驱动的步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>点击”'''驱动安装'''”按钮</p>
<p>[[File:media/image33pi3b-img33.png|300x157px]]</p></li>
<li><p>等待一段时间后,会弹出窗口提示”'''安装驱动成功'''”,然后点击'''“确定”'''按钮即可</p>
<p>[[File:media/image34pi3b-img34.png|315x164px]]</p></li></ol>
</li>
<li><p>然后解压'''RKDevTool_Release_v3.15.zip''',此软件无需安装,在解压后的文件夹中找到 '''RKDevTool'''打开即可</p>
<p>[[File:media/image35pi3b-img35.png|454x134px]]</p></li>
<li><p>打开'''RKDevTool''' 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”'''没有发现设备'''”</p>
<p>[[File:media/image36pi3b-img36.png|442x208px]]</p></li>
<li><p>然后开始烧录Android镜像到eMMC中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB2.0烧录接口的位置如下图所示</p>
<p>[[File:media/image37pi3b-img37.png|275x118px]]</p></li>
<li><p>然后确保开发板没有插入TF卡,没有连接电源</p></li>
<li><p>然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:</p>
<p>[[File:media/image38pi3b-img38.png|289x100px]]</p></li>
<li><p>然后给开发板接上Type-C接口的电源,并上电</p>
<p>[[File:media/image39pi3b-img39.png|305x94px]]</p></li>
<li><p>如果前面的步骤顺利,此时开发板会进入'''MASKROM'''模式,在烧录工具的界面上会提示”'''发现一个MASKROM设备'''”</p>
<p>[[File:media/image40pi3b-img40.png|457x215px]]</p></li></ol>
<!-- -->
<ol start="6" style="list-style-type: lower-alpha;">
<li><p>然后请选择'''高级功能'''</p>
<p>[[File:media/image128pi3b-img128.png|458x138px]]</p></li>
<li><p>然后点击下图所示的位置</p>
<p>[[File:media/image129pi3b-img129.png|459x216px]]</p></li>
<li><p>再选择前面下载的'''MiniLoader'''文件夹中的'''rk3566_MiniLoaderAll.bin''',再点击打开</p>
<div class="figure">
[[File:media/image69pi3b-img69.png|459x216px|SIS5H0S2@F5M2D(6ANZEUPG]]
</div></li>
<li><p>然后点击'''下载'''</p>
<p>[[File:media/image130pi3b-img130.png|472x222px]]</p></li>
<li><p>下载完'''MiniLoaderAll.bin'''后的显示如下图所示</p>
<p>[[File:media/image142pi3b-img142.png|474x223px]]</p></li>
<li><p>然后选择存储设备为'''EMMC,'''再点击'''切换存储'''</p>
<p>[[File:media/image143pi3b-img143.png|468x225px]]</p></li>
<li><p>切换成功的显示如下图所示</p>
<p>[[File:media/image144pi3b-img144.png|472x227px]]</p></li></ol>
<!-- -->
<ol start="13" style="list-style-type: lower-alpha;">
<li><p>然后点击烧录工具的”'''升级固件'''”一栏</p>
<p>[[File:media/image134pi3b-img134.png|442x208px]]</p></li>
<li><p>接着点击”'''固件'''”按钮选择需要烧录的Android镜像的路径</p>
<p>[[File:media/image135pi3b-img135.png|444x209px]]</p></li>
<li><p>最后点击”'''升级'''”按钮就会开始烧录,烧录过程中的log如下图所示。烧录完成后Android系统会自动启动。</p>
<div class="figure">
[[File:media/image136pi3b-img136.png|455x214px|GO~ZSPN`B]JCQM`@_9UU8[R]]
</div></li></ol>
<span id="通过tf卡将android-12镜像烧录到emmc中的方法"></span>
=== 通过TF卡将Android 12镜像烧录到eMMC中的方法 11镜像烧录到eMMC中的方法 ===
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<ol style="list-style-type: decimal;">
<li><p>开发板预留了eMMC的扩展接口,烧录系统到eMMC前,首先需要购买一个与开发板eMMC接口相匹配的eMMC模块。然后将eMMC模块安装到开发板上。eMMC模块和插入开发板的方法如下所示:</p>
<p>[[File:media/image63pi3b-img63.png|115x84px300px]] [[File:media/image64pi3b-img64.png|120x87px300px]]</p><p>[[File:media/image65pi3b-img65.png|286x133px600px]]</p></li>
<li><p>还需要准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''或以上,建议使用闪迪等品牌的TF卡</p></li>
<li><p>然后使用读卡器把TF卡插入电脑</p></li>
<ol style="list-style-type: lower-alpha;">
<li><p>打开安卓镜像的下载链接后可以看到下面两种类型的安卓镜像,请选择'''TF卡和eMMC启动镜像'''文件夹中的镜像进行下载</p>
<p>[[File:media/image126pi3b-img126.png|224x82px]]</p></li><li><p>进入'''TF卡和eMMC启动镜像'''文件夹后可以看到下面三个镜像,它们的区别是:文件夹后可以看到下面两个镜像,它们的区别是:</p>
<ol style="list-style-type: none;">
<li><p>a) 第一个镜像专门用于HDMI显示的,支持4K显示,如果不使用LCD屏幕,请下载不带lcd的镜像</p></li>
<li><p>b) 如果要使用lcd屏幕,请选择带lcd的镜像</p>
<p>[[File:media/image127pi3b-img127.png|283x62px]]</p></li></ol>
</li></ol>
</li>
<li><p>然后使用解压软件解压下载的Android镜像的压缩包,解压后的文件中,以”.img” 结尾的文件就是Android镜像文件,大小在1GB以上</p></li>
<li><p>然后使用解压软件解压'''SDDiskTool_v1.72.zip''',此软件无需安装,在解压后的文件夹中找到'''SD_Firmware_Tool.exe'''打开即可</p>
<p>[[File:media/image137pi3b-img137.png|429x103px]]</p></li>
<li><p>打开'''SDDiskTool'''后,如果TF卡识别正常,会在”'''选择可移动磁盘设备'''”一栏中显示插入的磁盘设备,'''<span style="color:#FF0000">请务必确认显示的磁盘设备和你想烧录的TF卡的盘符是一致的</span>''',如果没有显示可以尝试拔插下TF卡</p>
<p>[[File:media/image138pi3b-img138.png|267x228px]]</p></li>
<li><p>确认完盘符后,可以先格式化下TF卡,点击'''SDDiskTool'''中的'''恢复磁盘'''按钮即可,也可使用前面提到的'''SD Card Formatter'''进行TF卡的格式化</p>
<p>[[File:media/image139pi3b-img139.png|247x212px]]</p></li>
<li><p>然后开始将Android镜像写入TF卡</p>
<ol style="list-style-type: lower-alpha;">
<li><p>然后在”'''选择升级固件'''”一栏中选择Android固件的路径</p></li>
<li><p>最后点击”'''开始创建'''”按钮就会开始烧录</p>
<p>[[File:media/image145pi3b-img145.png|290x246px]]</p></li></ol>
</li>
<li><p>烧录完成后的显示如下图所示,然后就可以退出SDDiskTool</p>
<p>[[File:media/image146pi3b-img146.png|285x243px]]</p></li>
<li><p>然后把TF卡从电脑中拔出来插到开发板中,开发板上电启动后就会自动开始将TF卡中的Android镜像烧录到开发板的eMMC中</p></li>
<li><p>如果开发板连接了HDMI显示器,还可以从HDMI显示器中看到烧录Android镜像到eMMC中的进度条</p>
<p>[[File:media/image147pi3b-img147.png|430x247px]]</p></li>
<li><p>当HDMI显示器显示如下信息时,说明烧录Android镜像到eMMC中已完成,此时就可以拔出TF卡,然后eMMC中的安卓系统就会开始启动。</p>
<p>[[File:media/image148pi3b-img148.png|576x389px]]</p></li></ol>
<span id="烧录android镜像到spiflashnvme-ssd中的方法"></span>
<ol style="list-style-type: lower-alpha;">
<li><p>M.2 2230规格的SSD如下所示</p>
<p>[[File:media/image74pi3b-img74.png|147x120px]]</p></li>
<li><p>M.2 2242规格的SSD如下所示</p>
<p>[[File:media/image75pi3b-img75.png|216x131px]]</p></li></ol>
</li>
<li><p>然后把NVMe SSD插入开发板的M.2 PCIe接口,并固定好</p>
<p>[[File:media/image76pi3b-img76.png|283x63px]]</p></li>
<li><p>SPI Flash在开发板上的位置如下图所示,开始烧录前无需其他设置</p>
<p>[[File:media/image77pi3b-img77-1.png|266x211px]]</p></li>
<li><p>还需要准备一根品质良好的USB2.0公对公数据线</p>
<div class="figure">
[[File:media/image16pi3b-img16.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
</div></li>
<ol style="list-style-type: lower-alpha;">
<li><p>打开安卓镜像的下载链接后可以看到下面两种类型的安卓镜像,请选择'''SPIFlash-NVME SSD启动镜像'''文件夹中的镜像进行下载</p>
<p>[[File:media/image149pi3b-img149.png|195x65px]]</p></li>
<li><p>进入'''SPIFlash-NVME SSD启动镜像'''文件夹后可以看到下面两个镜像,它们的区别是:</p>
<ol style="list-style-type: none;">
<li><p>a) 不带lcd的镜像是专门用于HDMI显示的,支持4K显示,如果不使用LCD屏幕,请下载不带lcd的镜像</p></li>
<li><p>b) 如果要使用LCD屏幕,请选择带lcd的镜像</p>
<p>[[File:media/image150pi3b-img150.png|305x58px]]</p></li></ol>
</li></ol>
</li>
<li><p>然后用解压软件解压'''DriverAssitant_v5.12.zip''',再在解压后的文件夹中找到'''DriverInstall.exe'''可执行文件并打开即可</p>
<p>[[File:media/image32pi3b-img32.png|407x120px]]</p></li>
<li><p>打开'''DriverInstall.exe'''后安装瑞芯微驱动的步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>点击”'''驱动安装'''”按钮</p>
<p>[[File:media/image33pi3b-img33.png|286x150px]]</p></li>
<li><p>等待一段时间后,会弹出窗口提示”'''安装驱动成功'''”,然后点击'''“确定”'''按钮即可</p>
<p>[[File:media/image34pi3b-img34.png|296x154px]]</p></li></ol>
</li>
<li><p>然后解压'''RKDevTool_Release_v3.15.zip''',此软件无需安装,在解压后的文件夹中找到 '''RKDevTool'''打开即可</p>
<p>[[File:media/image35pi3b-img35.png|413x122px]]</p></li>
<li><p>打开'''RKDevTool''' 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”'''没有发现设备'''”</p>
<p>[[File:media/image36pi3b-img36.png|402x189px]]</p></li>
<li><p>然后开始烧录Android镜像到SPIFlash+NVMe SSD中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB2.0烧录口的位置如下图所示</p>
<p>[[File:media/image37pi3b-img37.png|275x118px]]</p></li>
<li><p>确保开发板没有插入TF卡,没有连接电源</p></li>
<li><p>然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:</p>
<p>[[File:media/image38pi3b-img38-1.png|289x100px]]</p></li>
<li><p>然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了</p>
<p>[[File:media/image39pi3b-img39-1.png|305x94px]]</p></li>
<li><p>如果前面的步骤顺利,此时开发板会进入'''MASKROM'''模式,在烧录工具的界面上会提示”'''发现一个MASKROM设备'''”</p>
<p>[[File:media/image40pi3b-img40.png|443x208px]]</p></li>
<li><p>然后点击烧录工具的”'''升级固件'''”一栏</p>
<p>[[File:media/image134pi3b-img134.png|442x208px]]</p></li>
<li><p>接着点击”'''固件'''”按钮选择需要烧录的Android镜像</p>
<p>[[File:media/image135pi3b-img135.png|444x209px]]</p></li>
<li><p>最后点击”'''升级'''”按钮就会开始烧录,烧录的过程如下图所示,可以看到,首先会烧录固件到SPIFlash中,然后烧录固件到PCIE中。烧录完成后Android系统会自动启动。</p>
<p>[[File:media/image151pi3b-img151.png|453x212px]]</p></li></ol>
</li></ol>
<ol style="list-style-type: decimal;">
<li><p>SPI Flash在开发板上的位置如下图所示</p>
<p>[[File:media/image77pi3b-img77-1.png|263x193px]]</p></li>
<li><p>首先需要准备一根品质良好的USB2.0公对公数据线</p>
<div class="figure">
[[File:media/image16pi3b-img16.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
</div></li>
<ol style="list-style-type: lower-alpha;">
<li><p>在[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html Orange Pi的资料下载页面]首先选择'''官方工具''',然后进入下面的文件夹中</p>
<p>[[File:media/image30pi3b-img30.png|366x77px]]</p></li>
<li><p>然后下载下面的所有文件</p>
<p>[[File:media/image31pi3b-img31.png|315x125px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
</li>
<li><p>然后用解压软件解压'''DriverAssitant_v5.12.zip''',再在解压后的文件夹中找到'''DriverInstall.exe'''可执行文件并打开即可</p>
<p>[[File:media/image32pi3b-img32.png|472x139px]]</p></li>
<li><p>打开'''DriverInstall.exe'''后安装瑞芯微驱动的步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>点击”'''驱动安装'''”按钮</p>
<p>[[File:media/image33pi3b-img33.png|276x145px]]</p></li>
<li><p>等待一段时间后,会弹出窗口提示”'''安装驱动成功'''”,然后点击'''“确定”'''按钮即可</p>
<p>[[File:media/image34pi3b-img34.png|292x151px]]</p></li></ol>
</li>
<li><p>然后解压'''RKDevTool_Release_v3.15.zip''',此软件无需安装,在解压后的文件夹中找到 '''RKDevTool'''打开即可</p>
<p>[[File:media/image35pi3b-img35.png|467x138px]]</p></li>
<li><p>打开'''RKDevTool''' 烧录工具后,因为电脑此时还没有通过USB2.0公对公数据线连接上开发板,所以左下角会提示”'''没有发现设备'''”</p>
<p>[[File:media/image36pi3b-img36.png|402x189px]]</p></li>
<li><p>然后就可以开始清空SPI FLASH中的内容</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先通过USB2.0公对公数据线连接好开发板与Windows电脑,开发板USB2.0烧录口的位置如下图所示</p>
<p>[[File:media/image37pi3b-img37.png|275x118px]]</p></li>
<li><p>确保开发板没有插入TF卡,没有连接电源</p></li>
<li><p>然后按住开发板的MaskROM按键不放,MaskROM按键在开发板的位置如下图所示:</p>
<p>[[File:media/image38pi3b-img38-1.png|289x100px]]</p></li>
<li><p>然后给开发板接上Type-C接口的电源,并上电,然后就可以松开MaskROM按键了</p>
<p>[[File:media/image39pi3b-img39-1.png|305x94px]]</p></li>
<li><p>如果前面的步骤顺利,此时开发板会进入'''MASKROM'''模式,在烧录工具的界面上会提示”'''发现一个MASKROM设备'''”</p>
<p>[[File:media/image40pi3b-img40.png|457x215px]]</p></li>
<li><p>然后请选择'''高级功能'''</p>
<p>[[File:media/image128pi3b-img128.png|458x138px]]</p></li>
<li><p>然后点击下图所示的位置</p>
<p>[[File:media/image129pi3b-img129.png|459x216px]]</p></li>
<li><p>再选择前面下载的'''MiniLoader'''文件夹中的'''rk3566_MiniLoaderAll.bin''',再点击打开</p>
<div class="figure">
[[File:media/image69pi3b-img69.png|459x216px|SIS5H0S2@F5M2D(6ANZEUPG]]
</div></li>
<li><p>然后点击'''下载'''</p>
<p>[[File:media/image130pi3b-img130.png|472x222px]]</p></li>
<li><p>下载完'''rk3566_MiniLoaderAll.bin'''后的显示如下图所示</p>
<p>[[File:media/image142pi3b-img142.png|474x223px]]</p></li>
<li><p>然后选择存储设备为'''SPINOR'''</p>
<p>[[File:media/image152pi3b-img152.png|467x220px]]</p></li>
<li><p>然后点击'''切换存储'''</p>
<p>[[File:media/image153pi3b-img153.png|464x218px]]</p></li>
<li><p>然后点击'''擦除所有'''就会开始擦除SPIFlash了</p>
<p>[[File:media/image154pi3b-img154.png|467x220px]]</p></li>
<li><p>擦除SPIFlash后的显示log如下图所示</p>
<p>[[File:media/image155pi3b-img155.png|460x216px]]</p></li></ol>
</li></ol>
# 将烧录好镜像的TF卡插入香橙派开发板的TF卡插槽中。如果SPIFlash+NVMe SSD已经烧录好镜像了,那么就不需要插入TF卡了,只需确保NVMe SSD正常插入到开发板中即可。
# 开发板有HDMI接口,可以通过HDMI转HDMI连接线把开发板连接到电视或者HDMI显示器。如果有购买LCD屏幕,也可以使用LCD屏幕来显示开发板的系统界面。如果有Type-C转HDMI的线,也可以通过Type-C接口来显示开发板的系统界面。开发板有HDMI接口,可以通过HDMI转HDMI连接线把开发板连接到电视或者HDMI显示器。如果有购买LCD屏幕,也可以使用LCD屏幕来显示开发板的系统界面。
# 接上USB鼠标和键盘,用于控制香橙派开发板。
# 开发板有以太网口,可以插入网线用来上网。
# 连接一个5V/3A或者5V/4A的USB 3A的USB Type-C接口的'''高品质'''的电源适配。C接口的高品质的电源适配。
::{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|}
::[[File:media/image156pi3b-img156.png|569x114px]]
<ol start="2" style="list-style-type: decimal;">
<li><p>开发板的调试串口GND、RXD和TXD引脚的对应关系如下图所示</p>
<p>[[File:media/image157pi3b-img157.png|428x110px]]</p></li>
<li><p>USB转TTL模块GND、TXD和RXD引脚需要通过杜邦线连接到开发板的调试串口上</p>
<ol style="list-style-type: lower-alpha;">
<div class="figure">
[[File:media/image158pi3b-img158.jpeg|524x189px|QQ图片20210204145010png]]
</div>
</li>
<li><p>执行putty命令后会弹出下面的界面</p>
<p>[[File:media/image159pi3b-img159.png|367x321px]]</p></li>
<li><p>首先选择串口的设置界面</p>
<p>[[File:media/image160pi3b-img160.png|359x352px]]</p></li>
<li><p>然后设置串口的参数</p>
<ol style="list-style-type: lower-alpha;">
<li><p>设置Speed(baud)为'''1500000'''(串口的波特率)</p></li>
<li><p>设置Flow control为None</p>
<p>[[File:media/image161pi3b-img161.png|316x312px]]</p></li></ol>
</li>
<li><p>在串口的设置界面设置完后,再回到Session界面</p>
<li><p>首先选择Connection type为Serial</p></li>
<li><p>然后点击Open按钮连接串口</p>
<p>[[File:media/image162pi3b-img162.png|345x340px]]</p></li></ol>
</li>
<li><p>启动开发板后,就能从打开的串口终端中看到系统输出的Log信息了</p>
<p>[[File:media/image163pi3b-img163.png|468x340px]]</p></li></ol>
<span id="windows平台调试串口的使用方法"></span>
</li>
<li><p>进入MobaXterm下载网页后点击'''GET XOBATERM NOW!'''</p>
<p>[[File:media/image164pi3b-img164.png|576x334px]]</p></li>
<li><p>然后选择下载Home版本</p>
<p>[[File:media/image165pi3b-img165.png|353x231px]]</p></li>
<li><p>然后选择Portable便携式版本,下载完后无需安装,直接打开就可以使用</p>
<p>[[File:media/image166pi3b-img166.png|575x259px]]</p></li></ol>
</li>
<li><p>下载完后使用解压缩软件解压下载的压缩包,即可得到MobaXterm的可执软件,然后双击打开</p>
<p>[[File:media/image167pi3b-img167.png|576x81px]]</p></li>
<li><p>打开软件后,设置串口连接的步骤如下</p>
<ol style="list-style-type: lower-alpha;">
<li><p>最后点击”'''OK'''”按钮完成设置</p></li>
[[File:media/image168pi3b-img168.png|575x438px]]
</ol>
</li></ol>
<ol start="4" style="list-style-type: decimal;">
<li><p>点击”'''OK'''”按钮后会进入下面的界面,此时启动开发板就能看到串口的输出信息了</p>
<p>[[File:media/image169pi3b-img169.png|575x291px]]</p></li></ol>
== 使用开发板40pin接口中的5v引脚供电说明 ==
|-
|
<big>'''我们推荐的开发板的供电方式是使用5V/3A或者5V/4A的Type 3A的Type C接口的电源线插到开发板的Type-C电源接口来供电的。如果需要使用40pin接口中的5V引脚来给开发板供电,请确保使用的电源线和电源适配器能满足开发板的供电需求。如果有使用不稳定的情况,请换回Type-C电源供电。'''</big>
|}
<div class="figure">
[[File:media/image170pi3b-img170.jpeg|216x154px|4ff86e49b6624616f9498fe44c366f29png]]
</div>
<li><p>使用40pin接口中的5V引脚来给开发板供电,电源线的接法如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>上图所示的电源线USB A口需要插到5V/3A或者5V4A的电源适配器接头上(3A的电源适配器接头上('''<span style="color:#FF0000">请不要插到电脑的USB接口来供电</span>''')</p></li>
<li><p>红色的杜邦线需要插到开发板40pin的5V引脚上</p></li>
<li><p>黑色的杜邦线需要插到40pin接口的GND引脚上</p></li>
<li><p>40pin接口5V引脚和GND引脚在开发板中的位置如下图所示,'''<span style="color:#FF0000">切记不要接反了</span>'''</p>
<p>[[File:media/image171pi3b-img171.png|366x71px]]</p></li></ol>
</li></ol>
|-
|
<big>'''本章内容是基于linux服务器版本的镜像和xfce桌面版本镜像编写的。本章内容是基于Linux服务器版本的镜像和xfce桌面版本镜像编写的。'''</big>
|}
|-
| '''Ubuntu 22.04 - Jammy'''
| '''Linux5.10'''
| '''支持'''
| '''支持'''
|-
| '''Debian12 - Bookworm'''
| '''Linux5.10'''
| '''支持'''
|}
== linux系统适配情况 Linux系统适配情况 ==
{| class="wikitable" style="width:800px;text-align:center;"
| '''功能'''
| '''Debian11'''
| '''Debian12'''
| '''Ubuntu20.04'''
| '''Ubuntu22.04'''
|-
| '''USB2.0x3'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''USB3.0x1'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''M.2 NVMe SSD启动'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''WIFI'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''蓝牙'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''GPIO(40pin)'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''UART(40pin)'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''SPI(40pin)'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''I2C(40pin)'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''PWM(40pin)'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''PWM风扇接口'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''3pin调试串口'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''EMMC'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''TF卡启动'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''HDMI 视频'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''HDMI 音频'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''Camera'''
| '''OK<span style="color:#FF0000">NO</span>'''| '''OK<span style="color:#FF0000">NO</span>'''| '''OK<span style="color:#FF0000">NO</span>'''| '''<span style="color:#FF0000">NO</span>'''
|-
| '''LCD'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''eDP显示'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''千兆网口'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''网口状态灯'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''耳机播放'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''耳机录音'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''LED灯'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''RTC'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''GPU'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''NPU'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''VPU'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''看门狗测试'''
| '''OK'''
| '''OK'''
| '''OK'''
|-
| '''Chromium硬解视频'''
| '''OK'''
| '''OK'''
| '''OK'''
|}
== 本手册linux命令格式说明 本手册Linux命令格式说明 ==
<ol style="list-style-type: decimal;">
<li><p>命令前面的提示符类型说明</p>
<ol style="list-style-type: lower-alpha;">
<li><p>命令前面提示符指的是下面方框内红色部分的内容,这部分内容不是linux命令的一部分,所以在linux系统中输入命令时,请不要把红色字体部分的内容也输入进去。命令前面提示符指的是下面方框内红色部分的内容,这部分内容不是Linux命令的一部分,所以在Linux系统中输入命令时,请不要把红色字体部分的内容也输入进去。</p>
{| class="wikitable" style="width:800px;"
|-
|}
</li>
<li><p>'''<span style="color:#FF0000">root@orangepi:~$</span>''' 提示符表示这个命令是在'''开发板的linux系统开发板的Linux系统'''中输入的, 提示符最后的 '''<span style="color:#FF0000">$</span>''' 表示系统当前用户为普通用户,当执行特权命令时,需要加上'''sudo'''</p></li><li><p>'''<span style="color:#FF0000">root@orangepi:~#</span>''' 提示符表示这个命令是在'''开发板的linux系统开发板的Linux系统'''中输入的, 提示符最后的 '''<span style="color:#FF0000">#</span>''' 表示系统当前用户为root用户,可以执行任何想要执行的命令</p></li><li><p>'''<span style="color:#FF0000">test@test:~$</span>''' 提示符表示这个命令是在Ubuntu PC或者Ubuntu虚拟机中输入的,而不是开发板的linux系统中。提示符最后的 PC或者Ubuntu虚拟机中输入的,而不是开发板的Linux系统中。提示符最后的 '''<span style="color:#FF0000">$</span>''' 表示系统当前用户为普通用户,当执行特权命令时,需要加上'''sudo'''</p></li><li><p>'''<span style="color:#FF0000">root@test:~#</span>''' 提示符表示这个命令是在Ubuntu PC或者Ubuntu虚拟机中输入的,而不是开发板的linux系统中。提示符最后的 PC或者Ubuntu虚拟机中输入的,而不是开发板的Linux系统中。提示符最后的 '''<span style="color:#FF0000">#</span>''' 表示系统当前用户为root用户,可以执行任何想要执行的命令</p></li></ol>
</li>
<li><p>哪些是需要输入的命令?</p>
</li></ol>
== linux系统登录说明 Linux系统登录说明 ==
=== linux系统默认登录账号和密码 Linux系统默认登录账号和密码 ===
{| class="wikitable" style="width:800px;text-align:center;"
|}
=== 设置linux系统终端自动登录的方法 设置Linux系统终端自动登录的方法 ===
<ol style="list-style-type: decimal;">
<li><p>linux系统默认就是自动登录终端的,默认登录的用户名是Linux系统默认就是自动登录终端的,默认登录的用户名是'''<span style="color:#FF0000">orangepi</span>'''</p><p>[[File:media/image172pi3b-img172.png|351x198px]]</p></li>
<li><p>使用下面的命令可以设置root用户自动登录终端</p>
{| class="wikitable" style="width:800px;"
</li></ol>
=== linux桌面版系统自动登录说明 Linux桌面版系统自动登录说明 ===
<ol style="list-style-type: decimal;">
<div class="figure">
[[File:media/image173pi3b-img173.png|576x324px|1]]
</div></li>
<div class="figure">
[[File:media/image174pi3b-img174.png|569x320px|IMG_256]]
</div></li></ol>
</li>
<li><p>然后重启系统,就会自动使用root用户登录桌面了</p>
<p>[[File:media/image175pi3b-img175.png|448x187px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<ol style="list-style-type: decimal;">
<li><p>开发板上有三个LED灯,一个绿灯,一个红灯,一个PCIe指示灯,所在位置如下图所示:</p>
<p>[[File:media/image176pi3b-img176-1.png|425x126px]]</p></li>
<li><p>'''<span style="color:#FF0000">只要开发板打开了电源,红色的LED灯就会常亮,这是由硬件控制的,软件无法关闭。</span>'''</p></li>
<li><p>绿色的LED灯在内核启动后会一直闪烁,这是由软件控制的。</p></li>
|-
|
<p>root@orangepi:~# '''cd /sys/class/leds/statusstatus_led'''</p>
|}
</li>
|-
|
<p>root@orangepi:/sys/class/leds/workstatus_led# '''echo none &gt; trigger'''</p>
|}
</li>
|-
|
<p>root@orangepi:/sys/class/leds/workstatus_led# '''echo default-on &gt; trigger'''</p>
|}
</li>
|-
|
<p>root@orangepi:/sys/class/leds/workstatus_led# '''echo heartbeat &gt; trigger'''</p>
|}
</li></ol>
<ol style="list-style-type: decimal;">
<li><p>先登录linux系统,有下面三种方式先登录Linux系统,有下面三种方式</p>
<ol style="list-style-type: lower-alpha;">
<li>如果开发板连接了网线,可以通过[[Orange Pi 3B#SSH远程登录开发板|'''ssh远程登录linux系统ssh远程登录Linux系统''']]</li></ol>
<!-- -->
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>如果开发板连接好了调试串口,可以使用串口终端登录linux系统如果开发板连接好了调试串口,可以使用串口终端登录Linux系统</p></li><li><p>如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到linux系统如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到Linux系统</p></li></ol>
</li></ol>
<div class="figure">
[[File:media/image177pi3b-img177.png|575x250px|选区_011]]
</div></li>
|-
|
<p>orangepi@orangepi:~$ '''ping www.orangepi.org -I wlan0''' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''(-I是大写的I不是小写的L)'''</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>
<ol style="list-style-type: decimal;">
<li><p>先登录linux系统,有下面三种方式先登录Linux系统,有下面三种方式</p>
<ol style="list-style-type: lower-alpha;">
<li><p>如果开发板连接了网线,可以通过[[Orange Pi 3B#SSH远程登录开发板|'''ssh远程登录linux系统ssh远程登录Linux系统''']]</p></li><li><p>如果开发板连接好了调试串口,可以使用串口终端登录linux系统(串口软件请使用MobaXterm,使用minicom无法显示图形界面)如果开发板连接好了调试串口,可以使用串口终端登录Linux系统(串口软件请使用MobaXterm,使用minicom无法显示图形界面)</p></li><li><p>如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到linux系统如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到Linux系统</p></li></ol>
</li>
<li><p>然后在命令行中输入nmtui命令打开wifi连接的界面</p>
</li>
<li><p>输入nmtui命令打开的界面如下所示</p>
<p>[[File:media/image178pi3b-img178.png|345x215px]]</p></li>
<li><p>选择'''Activate a connect'''后回车</p>
<p>[[File:media/image179pi3b-img179.png|349x216px]]</p></li>
<li><p>然后就能看到所有搜索到的WIFI热点</p>
<p>[[File:media/image180pi3b-img180.png|360x229px]]</p></li>
<li><p>选择想要连接的WIFI热点后再使用Tab键将光标定位到'''Activate'''后回车</p>
<p>[[File:media/image181pi3b-img181.png|366x230px]]</p></li>
<li><p>然后会弹出输入密码的对话框,在'''Password'''内输入对应的密码然后回车就会开始连接WIFI</p>
<p>[[File:media/image182pi3b-img182.png|352x225px]]</p></li>
<li><p>WIFI连接成功后会在已连接的WIFI名称前显示一个”*”</p>
<p>[[File:media/image183pi3b-img183.png|349x223px]]</p></li>
<li><p>通过'''ip addr show wlan0'''命令可以查看wifi的IP地址</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''ping www.orangepi.org -I wlan0''' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''(-I是大写的I不是小写的L)'''</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>
<ol style="list-style-type: decimal;">
<li><p>点击桌面右上角的网络配置图标(测试WIFI时请不要连接网线)</p>
<p>[[File:media/image184pi3b-img184.png|377x166px]]</p></li>
<li><p>在弹出的下拉框中点击'''More networks'''可以看到所有扫描到的WIFI热点,然后选择想要连接的WIFI热点</p>
<p>[[File:media/image185pi3b-img185.png|576x353px]]</p></li>
<li><p>然后输入WIFI热点的密码,再点击'''Connect'''就会开始连接WIFI</p>
<p>[[File:media/image186pi3b-img186.png|320x163px]]</p></li>
<li><p>连接好WIFI后,可以打开浏览器查看是否能上网,浏览器的入口如下图所示</p>
<p>[[File:media/image187pi3b-img187.png|576x308px]]</p></li>
<li><p>打开浏览器后如果能打开其他网页说明WIFI连接正常</p>
<div class="figure">
[[File:media/image188pi3b-img188-1.png|576x273px|5]]
</div></li></ol>
</li>
<li><p>然后选择'''Edit a connection'''并按下回车键</p>
<p>[[File:media/image189pi3b-img189.png|227x247px]]</p></li>
<li><p>然后选择需要设置静态IP地址的网络接口,比如设置'''Ethernet'''接口的静态IP地址选择'''Wired connection 1'''就可以了</p>
<p>[[File:media/image190pi3b-img190.png|310x149px]]</p></li>
<li><p>然后通过'''Tab'''键选择'''Edit'''并按下回车键</p>
<p>[[File:media/image191pi3b-img191.png|316x144px]]</p></li>
<li><p>然后通过Tab键将光标移动到下图所示的'''&lt;Automatic&gt;'''位置进行IPv4的配置</p>
<p>[[File:media/image192pi3b-img192.png|575x240px]]</p></li>
<li><p>然后回车,通过上下方向键选择'''Manual''',然后回车确定</p>
<p>[[File:media/image193pi3b-img193.png|576x237px]]</p></li>
<li><p>选择完后的显示如下图所示</p>
<p>[[File:media/image194pi3b-img194.png|575x240px]]</p></li>
<li><p>然后通过Tab键将光标移动到'''&lt;Show&gt;'''</p>
<p>[[File:media/image195pi3b-img195.png|576x241px]]</p></li>
<li><p>然后回车,回车后会弹出下面的设置界面</p>
<p>[[File:media/image196pi3b-img196.png|575x450px]]</p></li>
<li><p>然后就可以在下图所示的位置设置IP地址(Addresses)、网关(Gateway)和DNS服务器的地址(里面还有很多其他设置选项,请自行探索),'''<span style="color:#FF0000">请根据自己的具体需求来设置,下图中设置的值只是一个示例</span>'''</p>
<p>[[File:media/image197pi3b-img197.png|576x233px]]</p></li>
<li><p>设置完后将光标移动到右下角的'''&lt;OK&gt;''',然后回车确认</p>
<p>[[File:media/image198pi3b-img198.png|576x116px]]</p></li>
<li><p>然后点击'''&lt;Back&gt;'''回退到上一级选择界面</p>
<p>[[File:media/image199pi3b-img199.png|330x325px]]</p></li>
<li><p>然后选择'''Activate a connection''',再将光标移动到'''&lt;OK&gt;''',最后点击回车</p>
<p>[[File:media/image200pi3b-img200.png|331x248px]]</p></li>
<li><p>然后选择需要设置的网络接口,比如'''Wired connection 1''',然后将光标移动到'''&lt;Deactivate&gt;''',再按下回车键禁用'''Wired connection 1'''</p>
<p>[[File:media/image201pi3b-img201.png|576x224px]]</p></li>
<li><p>然后请不要移动光标,再按下回车键重新使能'''Wired connection 1''',这样前面设置的静态IP地址就会生效了</p>
<p>[[File:media/image202pi3b-img202.png|576x224px]]</p></li>
<li><p>然后通过'''&lt;Back&gt;'''和'''Quit'''按钮就可以退出nmtui</p>
<p>[[File:media/image203pi3b-img203.png|300x253px]] [[File:media/image204pi3b-img204.png|227x252px]]</p></li>
<li><p>然后通过'''ip addr show eth0'''就能看到网口的IP地址已经变成前面设置的静态IP地址了</p>
{| class="wikitable" style="width:800px;"
<li><p>然后输入下面的命令,其中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''&quot;Wired connection 1&quot;''' &gt; 表示设置以太网口的静态IP地址,如果需要设置WIFI的静态IP地址,请修改为WIFI网络接口对应的名字(通过'''nmcli &gt; con show'''命令可以获取到)</p></li>
<li><p>'''ipv4.addresses'''后面是要设置的静态IP地址,可以修改为自己想要设置的值</p></li>
<li><p>'''ipv4.gateway''' 表示网关的地址</p>
</li></ol>
</li>
<li><p>然后重启linux系统然后重启Linux系统</p>
{| class="wikitable" style="width:800px;"
|-
|}
</li>
<li><p>然后重新进入linux系统使用然后重新进入Linux系统使用'''ip addr show eth0'''命令就可以看到IP地址已经设置为想要的值了</p>
{| class="wikitable" style="width:800px;"
|-
# 获取开发板的IP地址
# 然后就可以通过ssh命令远程登录linux系统然后就可以通过ssh命令远程登录Linux系统
::{| class="wikitable" style="width:800px;"
<div class="figure">
[[File:media/image205pi3b-img205.png|405x207px|L467QDF65C(YR79U]TH[TND]]
</div>
|-
|
<big><p>'''如果ssh无法正常登陆linux系统,首先请检查下开发板的IP地址是否能ping通,如果ping通没问题的话,可以通过串口或者HDMI显示器登录linux系统然后在开发板上输入下面的命令后再尝试是否能连接:如果ssh无法正常登陆Linux系统,首先请检查下开发板的IP地址是否能ping通,如果ping通没问题的话,可以通过串口或者HDMI显示器登录Linux系统然后在开发板上输入下面的命令后再尝试是否能连接:'''</p>
<li><p>然后在'''Session Setting'''中选择'''SSH'''</p></li>
<li><p>然后在'''Remote host'''中输入开发板的IP地址</p></li>
<li><p>然后在'''Specify username'''中输入linux系统的用户名中输入Linux系统的用户名'''root'''或'''orangepi'''</p></li>
<li><p>最后点击'''OK'''即可</p>
<p>[[File:media/image206pi3b-img206.png|576x292px]]</p></li></ol>
</li>
<li><p>然后会提示输入密码,默认root和orangepi用户的密码都为orangepi</p>
<div class="figure">
[[File:media/image207pi3b-img207.png|578x150px|IMG_256]]
</div></li></ol>
<li>成功登录系统后的显示如下图所示</li>
[[File:media/image208pi3b-img208.png|576x334px]]
</ol>
<span id="上传文件到开发板linux系统中的方法"></span>
== 上传文件到开发板Linux系统中的方法 ==
<span id="在ubuntu-pc中上传文件到开发板linux系统中的方法pc中上传文件到开发板Linux系统中的方法"></span>
=== 在Ubuntu PC中上传文件到开发板Linux系统中的方法 ===
<ol style="list-style-type: lower-alpha;">
<li><p>'''file_path:'''需要替换为要上传文件的路径</p></li>
<li><p>'''orangepi:'''为开发板linux系统的用户名,也可以替换成其它的,比如root为开发板Linux系统的用户名,也可以替换成其它的,比如root</p></li>
<li><p>'''192.168.xx.xx:''' 为开发板的IP地址,请根据实际情况进行修改</p></li>
<li><p>'''/home/orangepi:''' 开发板linux系统中的路径,也可以修改为其它的路径开发板Linux系统中的路径,也可以修改为其它的路径</p>
{| class="wikitable" style="width:800px;"
|-
<div class="figure">
[[File:media/image209pi3b-img209.png|576x453px|截图 2022-12-03 19-04-40]]
</div></li>
<div class="figure">
[[File:media/image210pi3b-img210.png|577x128px|IMG_256]]
</div></ol>
<ol start="5" style="list-style-type: decimal;">
<li><p>然后选择'''保存密码''',再点击'''确定'''</p>
<p>[[File:media/image211pi3b-img211.png|249x181px]]</p></li>
<li><p>然后选择'''总是信任该主机''',再点击'''确定'''</p></li>
<div class="figure">
[[File:media/image212pi3b-img212.png|278x150px|IMG_256]]
</div></ol>
<ol start="7" style="list-style-type: decimal;">
<li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了连接成功后在filezilla软件的右边就可以看到开发板Linux文件系统的目录结构了</li>
<div class="figure">
[[File:media/image213pi3b-img213.png|533x330px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image214pi3b-img214.png|529x414px|IMG_256]]
</div></ol>
<ol start="9" style="list-style-type: decimal;">
<li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了上传完成后就可以去开发板Linux系统中的对应路径中查看上传的文件了</p></li>
<li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol>
<span id="在windows-pc中上传文件到开发板linux系统中的方法pc中上传文件到开发板Linux系统中的方法"></span>
=== 在Windows PC中上传文件到开发板Linux系统中的方法 ===
|}
::[[File:media/image215pi3b-img215.png|472x171px|IMG_256]]
::[[File:media/image216pi3b-img216.png|384x276px]]
<ol start="2" style="list-style-type: decimal;">
<div class="figure">
[[File:media/image217pi3b-img217.png|319x251px|IMG_256]]
</div>
<div class="figure">
[[File:media/image218pi3b-img218.png|451x357px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image219pi3b-img219.png|522x108px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image220pi3b-img220.png|207x146px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image221pi3b-img221.png|221x109px|IMG_256]]
</div></ol>
<ol start="7" style="list-style-type: decimal;">
<li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了连接成功后在filezilla软件的右边就可以看到开发板Linux文件系统的目录结构了</li>
<div class="figure">
[[File:media/image222pi3b-img222.png|537x397px|IMG_256]]
</div></ol>
<div class="figure">
[[File:media/image223pi3b-img223.png|535x394px|IMG_256]]
</div></ol>
<ol start="9" style="list-style-type: decimal;">
<li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了上传完成后就可以去开发板Linux系统中的对应路径中查看上传的文件了</p></li>
<li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol>
<ol style="list-style-type: decimal;">
<li><p>使用HDMI转HDMI线连接Orange Pi开发板和HDMI显示器</p>
<p>[[File:media/image10pi3b-img10.png|199x129px]]</p></li><li><p>启动linux系统后如果HDMI显示器有图像输出说明HDMI接口使用正常启动Linux系统后如果HDMI显示器有图像输出说明HDMI接口使用正常</p></li>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<ol style="list-style-type: lower-alpha;">
<li><p>HDMI转VGA转换器</p>
<p>[[File:media/image224pi3b-img224.png|155x104px]]</p></li>
<li><p>一根VGA线</p>
<p>[[File:media/image225pi3b-img225.png|148x133px]]</p></li>
<li><p>一个支持VGA接口的显示器或者电视</p></li></ol>
</li>
<li><p>HDMI转VGA显示测试如下所示</p>
<p>[[File:media/image226pi3b-img226.png|576x339px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<ol style="list-style-type: decimal;">
<li><p>首先在'''Settings'''中打开'''Display'''</p>
<p>[[File:media/image227pi3b-img227.png|576x370px]]</p></li>
<li><p>然后就能看到系统当前的分辨率</p>
<p>[[File:media/image228pi3b-img228.png|382x254px]]</p></li>
<li><p>点击Resolution(分辨率)的下拉框,就可以看到显示器当前支持的所有分辨率</p>
<p>[[File:media/image229pi3b-img229.png|415x274px]]</p></li>
<li><p>然后选择想要设置的分辨率,再点击Apply</p>
<p>[[File:media/image230pi3b-img230.png|415x277px]]</p></li>
<li><p>等新的分辨率设置完后再选择'''Keep the configuration'''即可</p>
<p>[[File:media/image231pi3b-img231.png|447x243px]]</p></li></ol>
== 蓝牙使用方法 ==
<ol style="list-style-type: decimal;">
<li><p>点击桌面右上角的蓝牙图标</p>
<p>[[File:media/image232pi3b-img232.png|330x128px]]</p></li>
<li><p>然后选择适配器</p>
<p>[[File:media/image233pi3b-img233.png|375x165px]]</p></li>
<li><p>如果有提示下面的界面,请选择'''Yes'''</p>
<p>[[File:media/image234pi3b-img234.png|248x85px]]</p></li>
<li><p>然后在蓝牙的适配器设置界面中设置'''Visibility Setting'''为'''Always visible''',然后关闭即可</p>
<p>[[File:media/image235pi3b-img235.png|243x229px]]</p></li>
<li><p>然后打开蓝牙设备的配置界面</p>
<p>[[File:media/image236pi3b-img236.png|438x179px]]</p></li>
<li><p>点击'''Search'''即可开始扫描周围的蓝牙设备</p>
<p>[[File:media/image237pi3b-img237.png|322x217px]]</p></li></ol>
<!-- -->
<ol start="67" style="list-style-type: decimal;">
<li><p>然后选择想要连接的蓝牙设备,再点击鼠标右键就会弹出对此蓝牙设备的操作界面,选择'''Pair'''即可开始配对,这里演示的是和Android手机配对</p>
<p>[[File:media/image238pi3b-img238.png|338x263px]]</p></li>
<li><p>配对时,桌面的右上角会弹出配对确认框,选择'''Confirm'''确认即可,此时手机上也同样需要进行确认</p>
<p>[[File:media/image239pi3b-img239.png|417x152px]]</p></li>
<li><p>和手机配对完后,可以选择已配对的蓝牙设备,然后右键选择'''Send a File'''即可开始给手机发送一张图片</p>
<p>[[File:media/image240pi3b-img240.png|439x259px]]</p></li>
<li><p>发送图片的界面如下所示</p>
<p>[[File:media/image241pi3b-img241.png|437x253px]]</p></li></ol>
<span id="usb接口测试"></span>
 
== USB接口测试 ==
支持2.4G WIFI+BT4.0
| [[File:media/image2%2042pi3b-img242.png]]
|-
| 2
支持2.4G +5G WIFI
| [[File:media/image2%2043pi3b-img243.png]]
|-
| 3
| <div class="figure">
[[File:media/image24%204pi3b-img244.jpeg|tb_imag e_share_1670833201 123png]]
</div>
<ol style="list-style-type: decimal;">
<li><p>首先将RTL8723BU无线网卡模块插入开发板的USB接口中</p></li>
<li><p>然后linux系统会自动加载RTL8723BU蓝牙和WIFI相关的内核模块,通过lsmod命令可以看到下面内核模块已自动加载然后Linux系统会自动加载RTL8723BU蓝牙和WIFI相关的内核模块,通过lsmod命令可以看到下面内核模块已自动加载</p>
{| class="wikitable" style="width:800px;"
|-
</li>
<li><p>在桌面中也可以看到出现了蓝牙图标,此时蓝牙还未打开,所以会显示一个红色的'''<span style="color:#FF0000">x</span>'''</p>
<p>[[File:media/image245pi3b-img245.png|576x157px]]</p></li>
<li><p>点击'''Turn Bluetooth On'''可以打开蓝牙</p>
<p>[[File:media/image246pi3b-img246.png|576x262px]]</p></li>
<li><p>打开蓝牙后的显示如下所示</p>
<p>[[File:media/image247pi3b-img247.png|576x164px]]</p></li>
<li><p>蓝牙的测试方法请参看[[Orange Pi 3B#蓝牙使用方法|'''蓝牙使用方法''']]一节,这里不再赘述</p></li></ol>
<ol style="list-style-type: decimal;">
<li><p>首先将RTL8811无线网卡模块插入开发板的USB接口中</p></li>
<li><p>然后linux系统会自动加载RTL8811 然后Linux系统会自动加载RTL8811 WIFI相关的内核模块,通过lsmod命令可以看到下面内核模块已自动加载</p>
{| class="wikitable" style="width:800px;"
|-
</li></ol>
<ol start="3" style="list-style-type: decimal;">
<li><p>linux系统会自动加载rtl8821cu蓝牙和wifi相关的内核模块,通过lsmod命令可以看到下面内核模块已自动加载Linux系统会自动加载rtl8821cu蓝牙和wifi相关的内核模块,通过lsmod命令可以看到下面内核模块已自动加载</p>
{| class="wikitable" style="width:800px;"
|-
</li>
<li><p>在桌面中也可以看到出现了蓝牙图标,此时蓝牙还未打开,所以会显示一个红色的'''<span style="color:#FF0000">x</span>'''</p>
<p>[[File:media/image245pi3b-img245.png|576x157px]]</p></li>
<li><p>点击'''Turn Bluetooth On'''可以打开蓝牙</p>
<p>[[File:media/image246pi3b-img246.png|576x262px]]</p></li>
<li><p>打开蓝牙后的显示如下所示</p>
<p>[[File:media/image247pi3b-img247.png|576x164px]]</p></li>
<li><p>蓝牙的测试方法请参看[[Orange Pi 3B#蓝牙使用方法|'''蓝牙使用方法''']]一节,这里不再赘述</p></li></ol>
<ol style="list-style-type: decimal;">
<li><p>首先需要准备一个下图所示的或者类似的支持UVC协议的USB摄像头,然后将USB摄像头插入到Orange Pi开发板的USB接口中</p>
<p>[[File:media/image13pi3b-img13.png|259x150px]]</p></li>
<li><p>通过v4l2-ctl命令可以看到USB摄像头的设备节点信息为/dev/video0</p>
{| class="wikitable" style="width:800px;"
</li>
<li><p>在桌面系统中可以使用Cheese直接打开USB摄像头,Cheese打开方法如下图所示:</p>
<p>[[File:media/image248pi3b-img248.png|474x302px]]</p>
<p>Cheese打开USB摄像头后的界面如下图所示:</p>
<p>[[File:media/image249pi3b-img249.png|473x277px]]</p></li>
<li><p>使用fswebcam测试USB摄像头的方法</p>
<ol style="list-style-type: lower-alpha;">
<li><p>b) --no-banner用于去除照片的水印</p></li>
<li><p>c) -r 选项用于指定照片的分辨率</p></li>
<li><p>d) -S 选项用设置于跳过前面的帧数选项用于设置跳过前面的帧数</p></li>
<li><p>e) ./image.jpg 用于设置生成的照片的名字和路径</p>
{| class="wikitable" style="width:800px;"
</li></ol>
</li>
<li><p>在服务器版的linux系统中,拍完照后可以使用scp命令将拍好的图片传到Ubuntu 在服务器版的Linux系统中,拍完照后可以使用scp命令将拍好的图片传到Ubuntu PC上镜像观看</p>
{| class="wikitable" style="width:800px;"
|-
|}
</li>
<li><p>在桌面版的linux系统中,可以通过HDMI显示器直接查看拍摄的图片在桌面版的Linux系统中,可以通过HDMI显示器直接查看拍摄的图片</p></li></ol>
</li></ol>
<ol style="list-style-type: decimal;">
<li><p>首先打开文件管理器</p>
<p>[[File:media/image250pi3b-img250.png|357x176px]]</p></li>
<li><p>然后找到下面这个文件(如果系统中没有这个音频文件,可以自己上传一个音频文件到系统中)</p>
<p>[[File:media/image251pi3b-img251.png|283x225px]]</p></li>
<li><p>然后选中audio.wav文件,右键选择使用vlc打开就可以开始播放</p>
<p>[[File:media/image252pi3b-img252.png|288x234px]]</p></li>
<li><p>切换HDMI播放和耳机播放等不同音频设备的方法</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先打开音量控制界面</p>
<p>[[File:media/image253pi3b-img253.png|308x169px]]</p></li>
<li><p>播放音频的时候,在'''Playback'''中会显示播放软件可以使用的音频设备选项,如下图所示,在这里可以设置需要播放到哪个音频设备</p>
<p>[[File:media/image254pi3b-img254.png|576x282px]]</p></li></ol>
</li></ol>
<ol style="list-style-type: decimal;">
<li><p>首先将耳机插入开发板的耳机孔中</p>
<p>[[File:media/image255pi3b-img255-1.png|395x112px]]</p></li><li><p>然后可以通过'''aplay -l'''命令可以查看下linux系统支持的声卡设备,从下面的输出可知,命令可以查看下Linux系统支持的声卡设备,从下面的输出可知,'''card 0'''为rk809的声卡设备,也就是耳机的声卡设备</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''aplay -l''' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''(-I是大写的I不是小写的L)'''</p>
<p>**** List of PLAYBACK Hardware Devices ****</p>
<p>'''card 0: rockchiprk809 [rockchip-rk809], device 0: dailink-multicodecs rk817-hifi-0 [dailink-multicodecs rk817-hifi-0]'''</p>
<ol style="list-style-type: decimal;">
<li><p>Orange Pi 3B开发板40 pin接口引脚的顺序请参考下图</p>
<p>[[File:media/image256pi3b-img256.png|400x124px]]</p></li>
<li><p>Orange Pi 3B开发板40 pin接口引脚的功能如下表所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>下面是40pin完整的引脚图</p>
<p>[[File:media/image257pi3b-img257-1.png|575x160px]]</p></li>
<li><p>下面的表格是上面完整表格左半边部分的图,能看得清楚点</p>
<p>[[File:media/image258pi3b-img258-1.png|478x267px]]</p></li>
<li><p>下面的表格是上面完整表格右半边部分的图,能看得清楚点</p>
<p>[[File:media/image259pi3b-img259-1.png|479x266px]]</p></li></ol>
</li>
<li><p>40pin接口中总共有'''<span style="color:#FF0000">28</span>'''个GPIO口,所有GPIO口的电压都是'''<span style="color:#FF0000">3.3v</span>'''</p></li></ol>
|-
|
<big>'''注意,Orange Pi发布的linux镜像中已经预装了wiringOP,除非wiringOP的代码有更新,否则无需重新下载编译安装,直接使用即可。Pi发布的Linux镜像中已经预装了wiringOP,除非wiringOP的代码有更新,否则无需重新下载编译安装,直接使用即可。'''
'''编译好的wiringOP的deb包在orangepi-build中的存放路径为:'''
<div class="figure">
[[File:media/image260pi3b-img260-1.png|750px|center]]
</div>
<div class="figure">
[[File:media/image260pi3b-img260-1.png|575x355px|66AC(IBG%N8L@Y7(1BZPS`N]]
</div></li></ol>
|-
|
<big>'''Orange Pi发布的linux系统中有预装一个blink_all_gpio程序,这个程序会设置40pin中的所有28个GPIO口不停的切换高低电平。Pi发布的Linux系统中有预装一个blink_all_gpio程序,这个程序会设置40pin中的所有28个GPIO口不停的切换高低电平。'''
<ol style="list-style-type: decimal;">
<li><p>开发板40pin中总共有'''28'''个GPIO口可以使用,下面以7号引脚——对应GPIO为GPIO4_A4 个GPIO口可以使用,下面以7号引脚——对应GPIO为GPIO4_C3 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p><p>[[File:media/image261pi3b-img261-1.png|576x120px]]</p></li>
<li><p>首先设置GPIO口为输出模式,其中第三个参数需要输入引脚对应的wPi的序号</p>
{| class="wikitable" style="width:800px;"
|}
<p>使用gpio readall可以看到7号引脚的值(V)变为了0</p>
<p>[[File:media/image262pi3b-img262-1.png|576x120px]]</p></li>
<li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>
{| class="wikitable" style="width:800px;"
|}
<p>使用gpio readall可以看到7号引脚的值(V)变为了1</p>
<p>[[File:media/image263pi3b-img263-1.png|576x118px]]</p></li>
<li><p>其他引脚的设置方法类似,只需修改wPi的序号为引脚对应的序号即可</p></li></ol>
<big>'''注意,Orange Pi 3B下面4个GPIO引脚因为外部有3.3V上拉,所以设置下拉是无效的,其它的引脚可以正常设置上下拉电阻功能'''</big>
[[File:media/image264pi3b-img264-1.png|750px|center]]
|}
<ol style="list-style-type: decimal;">
<li><p>下面以11号引脚——对应GPIO为GPIO3_C6 ——对应wPi序号为5——为例演示如何设置GPIO口的上下拉电阻</p>
<p>[[File:media/image265pi3b-img265-1.png|576x147px]]</p></li>
<li><p>首先需要设置GPIO口为输入模式,其中第三个参数需要输入引脚对应的wPi的序号</p>
{| class="wikitable" style="width:800px;"
<ol style="list-style-type: decimal;">
<li><p>由40pin接口的原理图可知,Orange Pi 3B可用的spi为spi3</p>
<p>[[File:media/image266pi3b-img266-1.png|577x193px]]</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''在linux系统中,40pin中的spi3默认是关闭的,需要手动打开才能使用。'''</p>  <p>'''在/boot/orangepiEnv.txt中加入下面红色字体部分的配置,然后重启Linux系统就可以打开spi3。'''</p>  <p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>'''<span style="color:#FF0000">overlays=spi3-m0-cs0-spidev</span>'''</p></big>|}
</li>
<li><p>先查看下linux系统中是否存在在linux系统中,40 pin中的SPI默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''spidev3.0orangepi-config'''的设备节点,如果存在,说明SPI3已经设置好了,可以直接使用,普通用户记得加'''sudo'''权限</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p>|}</li><li><p>然后选择'''System'''</p><p>[[File:pi3b-1.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:pi3b-2.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中想要打开的SPI的配置</p><p>[[File:pi3b-3.png]]</p></li><li><p>然后选择'''<Save>'''保存</p><p>[[File:pi3b-4.png]]</p></li><li><p>然后选择'''<Back>'''</p><p>[[File:pi3b-5.png]]</p></li><li><p>然后选择'''<Reboot>'''重启系统使配置生效</p><p>[[File:pi3b-6.png]]</p></li></ol></li><li><p>重启后进入系统先查看下Linux系统中是否存在'''spidev3.0'''的设备节点,如果存在,说明SPI3已经设置好了,可以直接使用</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''ls /dev/spidev3.0'''</p><p>/dev/spidev3.0</p>
|}
</li>
</li>
<li><p>然后短接SPI3的mosi(40pin接口中的第19号引脚)和miso(40pin接口中的第21号引脚)两个引脚再运行spidev_test的输出如下,可以看到发送和接收的数据一样</p>
<p>[[File:media/image267pi3b-img267.png|577x83px]]</p>
{| class="wikitable" style="width:800px;"
|-
<ol style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 3B可用的i2c为i2c2、i2c3和i2c4共三组 i2c总线</p>
<p>[[File:media/image268pi3b-img268-1.png|576x160px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<big><p>'''从上表中可以看到,i2c4_m0和spi3_m0是引脚复用的,两者不能同时打开,i2c3_m0和uart3_m0也是引脚复用的,两者不能同时打开'''</p></big>
|}
</li><li><p>在linux系统中,40 pin中的I2C总线默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''在linux系统中,40pin中的i2c默认都是关闭的,需要手动打开才能使用。'''</p>  <p>'''在/boot/orangepiEnv.txt中加入下面红色字体部分的配置,然后重启Linux系统就可以同时打开i2c2、i2c3和i2c4,如果只需要打开一个,那么就填写一个即可。'''</p>  <p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>'''<span style="color:#FF0000">overlays=i2c2-m1 i2c3-m0 i2c4orangepi-m0</span>config'''</p></big>
|}
</li>
<li><p>启动linux系统后,先确认下然后选择'''System'''</p><p>[[File:pi3b-1-1.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:pi3b-2-1.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中想要打开的I2C的配置</p><p>[[File:pi3b-3-1.png]]</p></li><li><p>然后选择'''<Save>'''保存</p><p>[[File:pi3b-4-1.png]]</p></li><li><p>然后选择'''<Back>'''</p><p>[[File:pi3b-5-1.png]]</p></li><li><p>然后选择'''<Reboot>'''重启系统使配置生效</p><p>[[File:pi3b-6-1.png]]</p></li></ol></li><li><p>启动Linux系统后,先确认下/dev下存在i2c的设备节点</p>
{| class="wikitable" style="width:800px;"
|-
<div class="figure">
[[File:media/image269pi3b-img269.png|476x179px|UN}~]Q}T_70O%Z%RNO8R@YE]]
</div></ol>
<ol style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 3B可用的uart为uart3、uart7和uart9共三组uart总线</p>
<p>[[File:media/image270pi3b-img270-1.png|575x160px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''从上表中可以看到,i2c3_m0和uart3_m0是引脚复用的,两者不能同时打开'''</p></big>
|}
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''在linux系统中,40pin中的uart默认都是关闭的,需要手动打开才能使用。'''</p>
 
 
<p>'''在/boot/orangepiEnv.txt中加入下面红色字体部分的配置,然后重启Linux系统就可以同时打开uart3、uart7、和uart9,如果只需要打开一个,那么就填写一个即可。'''</p>
 
 
<p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p>
<p>'''<span style="color:#FF0000">overlays=uart3-m0 uart7-m2 uart9-m2</span>'''</p></big>
|}
</li>
<li><p>进入linux系统后,先确认下在linux系统中,40 pin中的UART默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:</dev下是否存在对应uart的设备节点p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p>|}</li><li><p>然后选择'''System'''</p><p>[[File:pi3b-1-2.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:pi3b-2-2.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中想要打开的UART的配置</p><p>[[File:pi3b-3-2.png]]</p></li><li><p>然后选择'''<Save>'''保存</p><p>[[File:pi3b-4-2.png]]</p></li><li><p>然后选择'''<Back>'''</p><p>[[File:pi3b-5-2.png]]</p></li><li><p>然后选择'''<Reboot>'''重启系统使配置生效</p><p>[[File:pi3b-6-2.png]]</p></li></ol></li><li><p>进入Linux系统后,先确认下/dev下是否存在对应uart的设备节点</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~# '''ls /dev/ttyS*'''</p><p>/dev/ttyS1 '''/dev'''/'''ttyS3 /dev/ttyS7 /dev/ttyS9'''</p>
|}
</li>
| 对应27号引脚
| 对应15号引脚
| 对应7号引脚对应22号引脚
|}
[[File:media/image271pi3b-img271-1.png|545x134px]]
</ol>
<ol start="4" style="list-style-type: decimal;">
<ol style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 3B可用的pwm113B可用的pwm11和pwm15共两路pwm</p><p>[[File:media/image272pi3b-img272-1.png|575x160px]]</p></li><li><p>在linux系统中,40 pin中的PWM默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''在linux系统中,40pin中的pwm默认都是关闭的,需要手动打开才能使用。'''</p>  <p>'''在/boot/orangepiEnv.txt中加入下面红色字体部分的配置,然后重启Linux系统就可以打开pwm11。'''</p>  <p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>'''<span style="color:#FF0000">overlays=pwm11orangepi-m1</span>config'''</p></big>
|}
</li>
<li><p>然后选择'''System'''</p><p>[[File:pi3b-1-3.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:pi3b-2-3.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用空格选中想要打开的PWM的配置</p><p>[[File:pi3b-3-3.png]]</p></li><li><p>然后选择'''<Save>'''保存</p><p>[[File:pi3b-4-3.png]]</p></li><li><p>然后选择'''<Back>'''</p><p>[[File:pi3b-5-3.png]]</p></li><li><p>然后选择'''<Reboot>'''重启系统使配置生效</p><p>[[File:pi3b-6-3.png]]</p></li></ol></li><li><p>当打开一个pwm后,在'''/sys/class/pwm/'''中就会多出一个pwmchipX(X为具体的的数字)中就会多出一个pwmchipX(X为具体的的数字),比如打开pwm11后,查看/sys/class/pwm/下的pwmchipX会由一个变成了两个</p>
{| class="wikitable" style="width:800px;"
|-
|}
</li>
<li><p>上面哪个pwmchip对应pwm11呢,我们先查看下 '''ls /sys/class/pwm/ -l'''命令的输出,如下所示:</p></li><li><p>pwm11寄存器的基地址为fe6f0030,再看 '''ls /sys/class/pwm/ -l'''命令的输出,可以看到pwmchip1中链接到了fe6f0030.pwm,所以pwm11对应pwmchip为pwmchip1</p>
<div class="figure">
[[File:media/image273pi3b-img273.png|576x46px|RCUS$_~VYM{4ZS]_L}DNZQR]]
</div></li><li><p>然后由下表可知,pwm11寄存器的基地址为fe6f0030,再看 '''ls /sys/class/pwm/ -l'''命令的输出,可以看到pwmchip1中链接到了fe6f0030.pwm,所以pwm11对应pwmchip为pwmchip1</p></li>
<li><p>然后使用下面的命令可以让pwm11输出一个50Hz的方波(请先切换到root用户,再执行下面的命令)</p></li>
|}
[[File:media/image274pi3b-img274.png|575x346px]]<li><p>上面演示的pwm11的测试方法,其他pwm测试方法都是类似的。</p></li>
</ol>
<span id="wiringop-python的安装使用方法"></span>
<div class="figure">
[[File:media/image260pi3b-img260-1.png|center]]
</div>
<ol style="list-style-type: decimal;">
<li><p>下面以7号引脚——对应GPIO为GPIO4_A4 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p>
<p>[[File:media/image261pi3b-img261.png|576x120px]]</p></li>
<li><p>直接用命令测试的步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<ol style="list-style-type: decimal;">
<li><p>由40pin接口的原理图可知,Orange Pi 3B可用的spi为spi3</p>
<p>[[File:media/image266pi3b-img266-1.png|577x193px]]</p></li><li><p>在linux系统中,40 pin中的SPI默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''在linux系统中,40pin中的spi3默认是关闭的,需要手动打开才能使用。'''</p>  <p>'''在/boot/orangepiEnv.txt中加入下面红色字体部分的配置,然后重启Linux系统就可以打开spi4。'''</p>  <p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>'''<span style="color:#FF0000">overlays=spi3-m0-cs0orangepi-spidev</span>config'''</p></big>
|}
</li>
<li><p>先查看下linux系统中是否存在然后选择'''System'''</p><p>[[File:pi3b-1-4.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:pi3b-2-4.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中想要打开的SPI的配置</p><p>[[File:pi3b-3-4.png]]</p></li><li><p>然后选择'''<Save>'''保存</p><p>[[File:pi3b-4-4.png]]</p></li><li><p>然后选择'''<Back>'''</p><p>[[File:pi3b-5-4.png]]</p></li><li><p>然后选择'''<Reboot>'''重启系统使配置生效</p><p>[[File:pi3b-6-4.png]]</p></li></ol></li><li><p>先查看下Linux系统中是否存在'''spidev3.0'''的设备节点,如果存在,说明SPI3已经设置好了,可以直接使用</p>
{| class="wikitable" style="width:800px;"
|-
<ol start="1" style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 3B可用的i2c为i2c2、i2c3和i2c4共三组 i2c总线</p>
<p>[[File:media/image268pi3b-img268-1.png|576x160px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<big><p>'''从上表中可以看到,i2c4_m0和spi3_m0是引脚复用的,两者不能同时打开,i2c3_m0和uart3_m0也是引脚复用的,两者不能同时打开'''</p></big>
|}
</li><li><p>在linux系统中,40 pin中的I2C总线默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''在linux系统中,40pin中的i2c默认都是关闭的,需要手动打开才能使用。'''</p>  <p>'''在/boot/orangepiEnv.txt中加入下面红色字体部分的配置,然后重启Linux系统就可以同时打开i2c2、i2c3和i2c4,如果只需要打开一个,那么就填写一个即可。'''</p>  <p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>'''<span style="color:#FF0000">overlays=i2c2-m1 i2c3-m0 i2c4orangepi-m0</span>config'''</p></big>
|}
</li>
<li><p>启动linux系统后,先确认下然后选择'''System'''</p><p>[[File:pi3b-1-5.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:pi3b-2-5.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用空格选中想要打开的I2C的配置</p><p>[[File:pi3b-3-5.png]]</p></li><li><p>然后选择'''<Save>'''保存</p><p>[[File:pi3b-4-5.png]]</p></li><li><p>然后选择'''<Back>'''</p><p>[[File:pi3b-5-5.png]]</p></li><li><p>然后选择'''<Reboot>'''重启系统使配置生效</p><p>[[File:pi3b-6-5.png]]</p></li></ol></li><li><p>启动Linux系统后,先确认下/dev下存在i2c的设备节点</p>
{| class="wikitable" style="width:800px;"
|-
|}
[[File:media/image275pi3b-img275.png|180x153px]]
</ol>
<ol start="4" style="list-style-type: decimal;">
<div class="figure">
[[File:media/image276pi3b-img276.png|464x174px|V@(61L~0})Q`8VLBCAYEP[2]]
</div></li>
<ol style="list-style-type: decimal;">
<li><p>由下表可知,Orange Pi 3B可用的uart为uart3、uart7和uart9共三组uart总线</p>
<p>[[File:media/image270pi3b-img270-1.png|575x160px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<big><p>'''从上表中可以看到,i2c3_m0和uart3_m0是引脚复用的,两者不能同时打开'''</p></big>
|}
</li><li><p>在linux系统中,40 pin中的UART默认都是关闭的,需要手动打开才能使用。详细步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''在linux系统中,40pin中的uart默认都是关闭的,需要手动打开才能使用。'''</p>  <p>'''在/boot/orangepiEnv.txt中加入下面红色字体部分的配置,然后重启Linux系统就可以同时打开uart3、uart7、和uart9,如果只需要打开一个,那么就填写一个即可。'''</p>  <p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>'''<span style="color:#FF0000">overlays=uart3-m0 uart7-m2 uart9orangepi-m2</span>config'''</p></big>
|}
</li>
<li><p>进入linux系统后,先确认下然后选择'''System'''</p><p>[[File:pi3b-1-6.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:pi3b-2-6.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用空格选中想要打开的UART的配置</p><p>[[File:pi3b-3-6.png]]</p></li><li><p>然后选择'''<Save>'''保存</p><p>[[File:pi3b-4-6.png]]</p></li><li><p>然后选择'''<Back>'''</p><p>[[File:pi3b-5-6.png]]</p></li><li><p>然后选择'''<Reboot>'''重启系统使配置生效</p><p>[[File:pi3b-6-6.png]]</p></li></ol></li><li><p>进入Linux系统后,先确认下/dev下是否存在对应uart的设备节点</p>
{| class="wikitable" style="width:800px;"
|-
|}
</li>
<li><p>然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx</p></li></ol>
{| class="wikitable" style="width:800px;text-align:center;"
| 对应27号引脚
| 对应15号引脚
| 对应7号引脚对应22号引脚
|}
</ol><ol start="4" style="list-style-type: decimal;">
<li><p>使用examples中的'''serialTest.py'''程序测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常</p>
<ol style="list-style-type: lower-alpha;">
== 硬件看门狗测试 ==
Orange Pi发布的linux系统中预装了watchdog_test程序,可以直接测试。Pi发布的Linux系统中预装了watchdog_test程序,可以直接测试。
运行watchdog_test程序的方法如下所示:
<li><p>第二个参数10表示看门狗的计数时间,如果这个时间内没有喂狗,系统会重启</p></li>
<li><p>我们可以通过按下键盘上的任意键(ESC除外)来喂狗,喂狗后,程序会打印一行keep alive表示喂狗成功</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''sudo watchdog_test 10'''</p>
<p>open success</p>
<p>keep alive</p>
<p>keep alive</p>
<p>keep alive</p>|}</li></ol>
<span id="查看rk3566芯片的序列号"></span>
 
== 查看RK3566芯片的序列号 ==
查看RK3566芯片序列号的命令如下所示,每个芯片的序列号都是不同的,所以可以使用序列号来区分多个开发板。
{| class="wikitable" style="width:800px;"
|-
|
orangepi@orangepi:~$ '''cat_serial.sh'''
Serial : '''8fa18eaf489041f0'''
|}
<span id="下载安装arm64版本balenaetcher的方法"></span>
 
== 下载安装arm64版本balenaEtcher的方法 ==
<ol style="list-style-type: lower-alpha;">
<li><p>deb安装包的下载地址如下所示,需要安装才能使用</p>
{| class="wikitable" style="width:800px;" |-| <p>[https://github.com/Itai-Nelken/BalenaEtcher-arm/releases/download/v1.7.9/balena-etcher-electron_1.7.9+5945ab1f_arm64.deb '''https://github.com/Itai-Nelken/BalenaEtcher-arm/releases/download/v1.7.9/balena-etcher-electron_1.7.9+5945ab1f_arm64.deb''']</p>|}</li>
<li><p>无需安装的AppImage版本的下载地址如下所示:</p>
{| class="wikitable" style="width:800px;" |-| <p>[https://github.com/Itai-Nelken/BalenaEtcher-arm/releases/download/v1.7.9/balenaEtcher-1.7.9+5945ab1f-arm64.AppImage '''https://github.com/Itai-Nelken/BalenaEtcher-arm/releases/download/v1.7.9/balenaEtcher-1.7.9+5945ab1f-arm64.AppImage''']</p></li></ol>|}</li></ol>
<div class="figure">
[[File:media/image277pi3b-img277.png|527x211px|IMG_256]]
</div></ol></li></ol>
<ol start="2" style="list-style-type: decimal;">
<li><p>deb版本balenaEtcher的安装使用方法:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>deb版本的balenaEtcher安装命令如下所示:</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''sudo apt install -y \'''</p>
<p>'''--fix-broken ./balena-etcher-electron_1.7.9+5945ab1f_arm64.deb'''</p>|}</li>
<li><p>deb版本的balenaEtcher安装完成后,在Application中就可以打开了</p>
<div class="figure">
[[File:media/image91pi3b-img91.png|507x249px|IMG_256]]
</div></li>
<li><p>balenaEtcher打开后的界面如下所示:</p></li></ol></li></ol>
<div class="figure">
[[File:media/image278pi3b-img278.png|429x263px|IMG_256]]
</div></ol></li></ol>
<ol start="3" style="list-style-type: decimal;">
<li><p>AppImage版本的balenaEtcher的使用方法:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先给balenaEtcher添加权限</p>
{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~/Desktop$ '''chmod +x balenaEtcher-1.7.9+5945ab1f-arm64.AppImage'''</p>|}</li>
<li><p>然后选中AppImage版本balenaEtcher,再点击鼠标右键,再点击Execute就可以打开balenaEtcher了</p>
<p>[[File:media/image279pi3b-img279.png|145x118px]]</p></li></ol>
</li></ol>
<span id="宝塔linux面板的安装方法"></span>
 
== 宝塔Linux面板的安装方法 ==
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能(摘抄自[https://www.bt.cn/ 宝塔官网])'''</big>|}
<ol style="list-style-type: decimal;">
<li><p>首先需要扩展下'''/tmp'''空间的大小,设置完后需要'''重启下开发板的linux系统<span style="color:#FF0000">重启下开发板的Linux系统</span>''',命令如下所示:</p>{| class="wikitable" style="width:800px;" |-|
<p>orangepi@orangepi:~$ '''sudo sed -i 's/nosuid/&amp;,size=2G/' /etc/fstab'''</p>
<p>orangepi@orangepi:~$ '''sudo reboot'''</p>|}</li>
<li><p>重启后,可以看到'''/tmp'''空间的大小变为2G了</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''df -h | grep &quot;/tmp&quot;'''</p>
<pspan style="margin-right: 20px;">tmpfs </span><span style="margin-right: 20px;">2.0G </span><span style="margin-right: 20px;">12K </span><span style="margin-right: 20px;">'''<span style="color:#FF0000">2.0G</span>''' </span><span style="margin-right: 50px;">1% /tmp</pspan><br>|}</li><li><p>然后在linux系统中输入下面的命令就可以开始宝塔的安装然后在Linux系统中输入下面的命令就可以开始宝塔的安装</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo install_bt_panel.sh'''</p>|}</li>
<li><p>然后宝塔安装程序会提醒是否安装'''Bt-Panel'''到'''/www'''文件夹,此时输入'''y'''即可</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>+----------------------------------------------------------------------</p>
<p>| Bt-WebPanel FOR CentOS/Ubuntu/Debian</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): '''<span style="color:#FF0000">y</span>'''</p>|}</li>
<li><p>然后要做的就是耐心等待,当看到终端输出下面的打印信息时,说明宝塔已经安装完成,整个安装过程大约耗时34分钟,根据网络速度的不同可能会有一些差别</p>
<p>[[File:media/image280pi3b-img280.png|576x233px]]</p></li>
<li><p>此时在浏览器中输入上面显示的'''面板地址'''就可以打开宝塔Linux面板的登录界面,然后在对应的位置输入上图显示的'''username'''和'''password'''就可以登录进宝塔<br />
[[File:media/image281pi3b-img281.png|575x281px]]</p></li>
<li><p>成功登录宝塔后的会弹出下面的欢迎界面,首先请将中间的用户须知阅读完拖到最下面,然后就可以选择”我已同意并阅读《用户协议》“,接着点击”进入面板”就可以进入宝塔了</p>
<p>[[File:media/image282pi3b-img282.png|575x317px]]</p></li>
<li><p>进入宝塔后首先会提示需要绑定宝塔官网的账号,如果没有账号可以去宝塔的官网('''https://www.bt.cn''')注册一个</p>
<p>[[File:media/image283pi3b-img283.png|576x300px]]</p></li>
<li><p>最终显示的界面如下图所示,可以很直观的看到开发板Linux系统的一些状态信息,比如负载状态、CPU的使用率、内存使用率和存储空间的使用情况等</p>
<p>[[File:media/image284pi3b-img284.png|575x306px]]</p></li>
<li><p>宝塔的更多功能可以参考下面资料自行探索</p>
{| class="wikitable" style="width:800px;"
|-
|
<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>
== 设置中文环境以及安装中文输入法 ==
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''注意,安装中文输入法前请确保开发板使用的Linux系统为桌面版系统。'''</big>|}
<span id="debian系统的安装方法"></span>
<ol style="list-style-type: lower-alpha;">
<li><p>输入下面的命令可以开始配置'''locale'''</p>
{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo dpkg-reconfigure locales'''</p>|}</li><li><p>然后在弹出的界面中选择'''zh_CN.UTF-8 &gt; UTF-8'''(通过键盘上的上下方向按键来上下移动,通过空格键来选择,最后通过Tab键可以将光标移动到'''&lt;OK&gt;''',然后回车即可)</p><p>[[File:media/image285pi3b-img285.png|575x296px]]</p></li>
<li><p>然后设置默认'''locale'''为'''zh_CN.UTF-8'''</p>
<p>[[File:media/image286pi3b-img286.png|575x160px]]</p></li>
<li><p>退出界面后就会开始'''locale'''的设置,命令行显示的输出如下所示</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''sudo dpkg-reconfigure locales'''</p>
<p>Generating locales (this might take a while)...</p>
:<p>en_US.UTF-8... done</p>:<p>zh_CN.UTF-8... done</p><p>Generation complete.</p>|}</li></ol>
</li>
<li><p>然后打开'''Input Method'''</p>
<p>[[File:media/image287pi3b-img287.png|575x361px]]</p></li>
<li><p>然后选择'''OK'''</p>
<p>[[File:media/image288pi3b-img288.png|295x212px]]</p></li>
<li><p>然后选择'''Yes'''</p>
<p>[[File:media/image289pi3b-img289.png|303x192px]]</p></li>
<li><p>然后选择'''fcitx'''</p>
<p>[[File:media/image290pi3b-img290.png|307x220px]]</p></li>
<li><p>然后选择'''OK'''</p>
<p>[[File:media/image291pi3b-img291.png|305x216px]]</p></li><li><p>'''<span style="color:#FF0000">然后重启Linux系统才能使配置生效</span>'''</p></li>
<li><p>然后打开'''Fcitx configuration'''</p>
<p>[[File:media/image292pi3b-img292.png|575x376px]]</p></li>
<li><p>然后点击下图所示位置的'''+'''号</p>
<p>[[File:media/image293pi3b-img293.png|280x187px]]</p></li>
<li><p>然后搜索'''Google Pinyin'''再点击'''OK'''</p>
<p>[[File:media/image294pi3b-img294.png|291x196px]]</p></li>
<li><p>然后将'''Google Pinyin'''放到最前面</p>
<p>[[File:media/image295pi3b-img295.png|299x202px]]</p><p>[[File:media/image296pi3b-img296.png|300x202px]]</p></li>
<li><p>然后打开'''Geany'''这个编辑器测试下中文输入法</p>
<p>[[File:media/image297pi3b-img297.png|349x212px]]</p></li>
<li><p>中文输入法测试如下所示</p>
<p>[[File:media/image298pi3b-img298.png|575x325px]]</p></li>
<li><p>通过'''Ctrl+Space'''快捷键可以切换中英文输入法</p></li>
<li><p>如果需要整个系统都显示为中文,可以将'''/etc/default/locale'''中的变量都设置为'''zh_CN.UTF-8'''</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''sudo vim /etc/default/locale'''</p>
<p># File generated by update-locale</p>
<p>LC_MESSAGES='''<span style="color:#FF0000">zh_CN.UTF-8</span>'''</p><p>LANG='''<span style="color:#FF0000">zh_CN.UTF-8</span>'''</p><p>LANGUAGE='''<span style="color:#FF0000">zh_CN.UTF-8</span>'''</p>|}</li><li><p>然后'''<span style="color:#FF0000">重启系统</span>'''就能看到系统显示为中文了</p><p>[[File:media/image299pi3b-img299.png|576x356px]]</p></li></ol>
<span id="ubuntu-20.04系统的安装方法"></span>
 
=== Ubuntu 20.04系统的安装方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先打开'''Language Support'''</p>
<p>[[File:media/image300pi3b-img300.png|575x351px]]</p></li>
<li><p>然后找到'''汉语(中国)'''选项</p>
<p>[[File:media/image301pi3b-img301.png|318x311px]]</p></li>
<li><p>然后请使用鼠标左键选中'''汉语(中国)'''并按住不动,然后往上将其拖到最开始的位置,拖完后的显示如下图所示:</p>
<p>[[File:media/image302pi3b-img302.png|324x320px]]</p></li>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| </olbig> '''注意,这一步不是很好拖动的,请耐心多试几次。'''</big>|}</ol>
<ol start="4" style="list-style-type: decimal;">
<li><p>然后选择'''Apply System-Wide'''将中文设置应用到整个系统</p>
<p>[[File:media/image303pi3b-img303.png|321x316px]]</p></li>
<li><p>然后设置'''Keyboard input method system'''为'''fcitx'''</p>
<p>[[File:media/image304pi3b-img304.png|327x320px]]</p></li><li><p>'''<span style="color:#FF0000">然后重启Linux系统使配置生效</span>'''</p></li>
<li><p>重新进入系统后,在下面的界面请选择'''不要再次询问我''',然后请根据自己的喜好决定标准文件夹是否也要更新为中文</p>
<p>[[File:media/image305pi3b-img305.png|303x247px]]</p></li>
<li><p>然后可以看到桌面都显示为中文了</p>
<p>[[File:media/image306pi3b-img306.png|575x383px]]</p></li>
<li><p>然后我们可以打开'''Geany'''测试下中文输入法,打开方式如下图所示</p>
<p>[[File:media/image307pi3b-img307.png|576x292px]]</p></li>
<li><p>打开'''Geany'''后,默认还是英文输入法,我们可以通过'''Ctrl+Space'''快捷键来切换成中文输入法,然后就能输入中文了</p>
<p>[[File:media/image308pi3b-img308.png|575x308px]]</p></li></ol>
<span id="ubuntu-22.04系统的安装方法"></span>
 
=== Ubuntu 22.04系统的安装方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先打开'''Language Support'''</p>
<p>[[File:media/image300pi3b-img300.png|575x351px]]</p></li>
<li><p>然后找到'''汉语(中国)'''选项</p>
<p>[[File:media/image309pi3b-img309.png|335x326px]]</p></li>
<li><p>然后请使用鼠标左键选中'''汉语(中国)'''并按住不动,然后往上将其拖到最开始的位置,拖完后的显示如下图所示:</p>
<p>[[File:media/image310pi3b-img310.png|337x331px]]</p></li></ol> '''注意,这一步不是很好拖动的,请耐心多试几次。'''
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big>'''注意,这一步不是很好拖动的,请耐心多试几次。'''</big>
|}
</ol>
<ol start="4" style="list-style-type: decimal;">
<li><p>然后选择'''Apply System-Wide'''将中文设置应用到整个系统</p>
<p>[[File:media/image311pi3b-img311.png|336x330px]]</p></li><li><p>'''<span style="color:#FF0000">然后重启Linux系统使配置生效</span>'''</p></li>
<li><p>重新进入系统后,在下面的界面请选择'''不要再次询问我''',然后请根据自己的喜好决定标准文件夹是否也要更新为中文</p>
<p>[[File:media/image305pi3b-img305.png|303x247px]]</p></li>
<li><p>然后可以看到桌面都显示为中文了</p>
<p>[[File:media/image306pi3b-img306.png|575x383px]]</p></li>
<li><p>然后打开Fcitx5配置程序</p>
<p>[[File:media/image312pi3b-img312.png|575x349px]]</p></li>
<li><p>然后选择使用拼音输入法</p>
<p>[[File:media/image313pi3b-img313.png|366x289px]]</p></li>
<li><p>选择后的界面如下所示,再点击确定即可</p>
<p>[[File:media/image314pi3b-img314.png|366x290px]]</p></li>
<li><p>然后我们可以打开'''Geany'''测试下中文输入法,打开方式如下图所示</p>
<p>[[File:media/image307pi3b-img307.png|576x292px]]</p></li>
<li><p>打开'''Geany'''后,默认还是英文输入法,我们可以通过'''Ctrl+Space'''快捷键来切换成中文输入法,然后就能输入中文了</p>
<p>[[File:media/image315pi3b-img315.png|576x408px]]</p></li></ol>
<span id="远程登录linux系统桌面的方法"></span>
 
== 远程登录Linux系统桌面的方法 ==
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''Ubuntu Gnome Wayland镜像不支持使用此处介绍的Nomachine和VNC来远程登录桌面。'''</big>|}
<span id="使用nomachine远程登录"></span>
=== 使用NoMachine远程登录 ===
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''请确保开发板安装的Ubuntu或者Debian系统为桌面版本的系统。另外NoMachine也提供了详细的使用文档,强烈建议通读此文档来熟悉NoMachine的使用,文档链接如下所示:请确保开发板安装的Ubuntu或者Debian系统为<span style="color:#FF0000">桌面版本</span>的系统。另外NoMachine也提供了详细的使用文档,强烈建议通读此文档来熟悉NoMachine的使用,文档链接如下所示:'''
'''https://knowledgebase.nomachine.com/DT10R00166'''</big>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''NoMachine支持Windows、Mac、Linux、iOS和安卓平台,所以我们可以在多种设备上通过NoMachine来远程登录控制Orange Pi开发板。下面演示下在Windows中通过NoMachine来远程登录Orange Pi开发板的Linux系统桌面。其他平台的安装方法请参考下NoMachine的官方文档。'''
'''NoMachine支持Windows、Mac、Linux、iOS和安卓平台,所以我们可以在多种设备上通过NoMachine来远程登录控制Orange Pi开发板。下面演示下在Windows中通过NoMachine来远程登录Orange Pi开发板的Linux系统桌面。其他平台的安装方法请参考下NoMachine的官方文档。操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。'''</big> '''操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。'''|}
<ol style="list-style-type: decimal;">
<li><p>首先下载NoMachine软件Linux '''<span style="color:#FF0000">arm64</span>''' deb版本的安装包,然后安装到开发板的Linux系统中</p>
<ol style="list-style-type: lower-alpha;">
<li>由于RK3566是ARMv8架构的SOC,我们使用的系统为Ubuntu或者Debian,所以这里需要下载'''NoMachine &gt; for ARM ARMv8 DEB'''安装包,下载链接如下所示:</li></ol>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| </li></olbig> '''注意,这个下载链接可能会变,请认准Armv8/Arm64版本的deb包。'''</big>|}[https://www.nomachine.com/download/download&id{| class=112&s"wikitable" style=ARM "width:800px;" |-| '''https://downloads.nomachine.com/download/?id=118116&amp;distro=ARM'''] [[File:media/image316.png|575x227px]]}
[[File:pi3b-img316.png]]
</ol>
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>另外在'''官方工具'''中也可以下载到'''NoMachine'''的安装包</p>
<p>[[File:media/image317pi3b-img317.png|86x106px]]</p>
<p>先进入'''远程登录软件-NoMachine'''文件夹</p>
<p>[[File:media/image318pi3b-img318.png|256x46px]]</p>
<p>然后下载arm64版本的deb安装包</p>
<p>[[File:media/image319pi3b-img319.png|180x109px]]</p></li>
<li><p>然后将下载的'''nomachine_x.x.x_x_arm64.deb'''上传到开发板的Linux系统中</p></li>
<li><p>然后使用下面的命令在开发板的Linux系统中安装'''NoMachine'''</p>
{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo dpkg -i nomachine_x.x.x_x_arm64_arm64.deb'''</p>|}</li></ol></li></ol>
<!-- -->
<ol start="2" style="list-style-type: decimal;">
<li>然后下载NoMachine软件Windows版本的安装包,下载地址如下所示</li>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| </olbig> '''注意,这个下载链接可能会变。'''</big>|}{| class="wikitable" style="width:800px;" |-| '''https://downloads.nomachine.com/download/?id=98''' [[File:media/image320.png|575x163px]]}
[[File:pi3b-img320.png]]
</ol>
<ol start="3" style="list-style-type: decimal;">
<li><p>然后在Windows中安装NoMachine,'''安装完后请重启下电脑'''</p></li>
<li><p>然后在Window中打开'''NoMachine'''</p>
<p>[[File:media/image321pi3b-img321.png|76x66px]]</p></li>
<li><p>NoMachine启动后会自动扫描局域网内其他安装有NoMachine的设备,进入NoMachine的主界面后就可以看到开发板已经在可连接的设备列表里了,然后点击下图红色方框所示的位置即可开始登录开发板的Linux系统桌面</p>
<p>[[File:media/image322pi3b-img322.png|321x92px]]</p></li>
<li><p>然后点击'''OK'''</p>
<p>[[File:media/image323pi3b-img323.png|402x275px]]</p></li>
<li><p>然后在下图对应的位置输入开发板Linux系统的用户名和密码,再点击'''OK'''开始登陆</p>
<p>[[File:media/image324pi3b-img324.png|406x274px]]</p></li>
<li><p>然后在接下来的界面中都点击OK</p></li>
<li><p>最后就能看到开发板Linux系统的桌面了</p>
<p>[[File:media/image325pi3b-img325.png|411x246px]]</p></li></ol>
<span id="使用vnc远程登录"></span>
 
=== 使用VNC远程登录 ===
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。操作前请先确保Windows电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。'''
'''<span style="color:#FF0000">Ubuntu20.04测试VNC很多问题,请不要使用这种方法。</span>'''</big>|}
<ol style="list-style-type: decimal;">
<li><p>首先运行'''set_vnc.sh'''脚本设置下vnc,'''<span style="color:#FF0000">记得加sudo权限</span>'''</p>{| class="wikitable" style="width:800px;" |-|
<p>orangepi@orangepi:~$ '''sudo set_vnc.sh'''</p>
<p>You will require a password to access your desktops.</p>
  <p>Password: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''<span style="color:#FF0000">#在这里设置vnc的密码,8位字符</span>'''</p><p>Verify: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''<span style="color:#FF0000">#在这里设置vnc的密码,8位字符</span>'''</p><p>Would you like to enter a view-only password (y/n)? '''<span style="color:#FF0000">n</span>'''</p>
<p>xauth: file /root/.Xauthority does not exist</p>
 
 
<p>New 'X' desktop is orangepi3b:1</p>
 
 
<p>Creating default startup script /root/.vnc/xstartup</p>
<p>Starting applications specified in /root/.vnc/xstartup</p>
<p>Log file is /root/.vnc/orangepi3b:1.log</p>
 
 
<p>Killing Xtightvnc process ID 3047</p>
 
 
<p>New 'X' desktop is orangepi3b:1</p>
 
 
<p>Starting applications specified in /root/.vnc/xstartup</p>
<p>Log file is /root/.vnc/orangepi3b:1.log</p>|}</li>
<li><p>使用MobaXterm软件连接开发板linux系统桌面的步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li>首先点击Session,然后选择VNC,再填写开发板的IP地址和端口,最后点击OK确认</li></ol></li></ol> [[File:media/image326.png|576x410px]]
[[File:pi3b-img326.png]]
</ol>
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>然后输入前面设置的VNC的密码</p>
<p>[[File:media/image327pi3b-img327.png|274x131px]]</p></li><li><p>登录成功后的界面显示如下图所示,然后就可以远程操作开发板linux系统的桌面了登录成功后的界面显示如下图所示,然后就可以远程操作开发板Linux系统的桌面了</p><p>[[File:media/image328pi3b-img328.png|405x293px]]</p></li></ol></li></ol><span id="linux系统支持的部分编程语言测试"></span>
<span id="linux系统支持的部分编程语言测试"></span>
== Linux系统支持的部分编程语言测试 ==
<ol style="list-style-type: lower-alpha;">
<li><p>gcc的版本如下所示</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''gcc --version'''</p>
<p>gcc (Debian 10.2.1-6) 10.2.1 20210110</p>
<p>Copyright (C) 2020 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>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''vim hello_world.c'''</p>
<p>#include &lt;stdio.h&gt;</p>
 
 
<p>int main(void)</p>
<p>{</p>
:<p>printf(&quot;Hello World!\n&quot;);</p>  :<p>return 0;</p><p>}</p>|}</li><li><p>然后编译运行'''hello_world.c'''</p>{| class="wikitable" style="width:800px;" |-|
<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 Bullseye默认安装有Python3</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Python具体版本如下所示</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''python3'''</p>
<p>'''Python 3.9.2''' (default, Feb 28 2021, 17:03:44)</p>
<p>[GCC 10.2.1 20210110] on linux</p>
<p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p>
<p>&gt;&gt;&gt;</p>|}</li>
<li><p>编写Python语言的'''hello_world.py'''程序</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''vim hello_world.py'''</p>
<p>print('Hello World!')</p>|}</li>
<li><p>运行'''hello_world.py'''的结果如下所示</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''python3 hello_world.py'''</p>
<p>Hello World!</p>|}</li></ol>
</li>
<li><p>Debian Bullseye默认没有安装Java的编译工具和运行环境</p>
<ol style="list-style-type: lower-alpha;">
<li><p>可以使用下面的命令安装openjdk,Debian &gt; Bullseye中最新版本为openjdk-17</p>
{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''</p>|}</li>
<li><p>安装完后可以查看下Java的版本</p>
{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''java --version'''</p>|}</li>
<li><p>编写Java版本的'''hello_world.java'''</p>
{| class="wikitable" style="width:800px;"
|-
|
<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(&quot;Hello World!&quot;);</p>:<p>}</p>
<p>}</p>
<p>|}</p></li>
<li><p>然后编译运行'''hello_world.java'''</p>
{| class="wikitable" style="width:800px;"
|-
|
<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-focal系统"></span>
 === Ubuntu Focal系统 Debian Bookworm系统 ===
<ol style="list-style-type: decimal;">
<li><p>Ubuntu Focal默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序Debian Bookworm默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p>
<ol style="list-style-type: lower-alpha;">
<li><p>gcc的版本如下所示</p>
<p>{| class="wikitable" style="width:800px;" |-| orangepi@orangepi:~$ '''gcc --version'''</p><p>gcc (Ubuntu 9Debian 12.42.0-1ubuntu1~20.04.114) 912.42.0</p><p>Copyright (C) 2019 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>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''vim hello_world.c'''</p>
<p>#include &lt;stdio.h&gt;</p>
 
 
<p>int main(void)</p>
<p>{</p>
:<p>printf(&quot;Hello World!\n&quot;);</p>  :<p>return 0;</p><p>}</p>|}</li>
<li><p>然后编译运行'''hello_world.c'''</p>
{| class="wikitable" style="width:800px;"
|-
|
<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>Ubuntu Focal默认安装有Python3Debian Bookworm默认安装有Python3</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Python3具体版本如下所示Python具体版本如下所示</p><p>{| class="wikitable" style="width:800px;" |-| orangepi@orangepi:~$ '''python3'''</p><p>Python 3.811.10 2 (defaultmain, Nov 14 2022Mar 13 2023, 12:5918:4729)</p><p>[GCC 912.42.0] on linux</p><p>Type &quot;"help&quot;", &quot;"copyright&quot;", &quot;"credits&quot; " or &quot;"license&quot; " for more information.</p >>>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <pbig>&gt;&gt;&gt;'''使用Ctrl+D快捷键可退出python的交互模式。'''</pbig>|}</li>
<li><p>编写Python语言的'''hello_world.py'''程序</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''vim hello_world.py'''</p>
<p>print('Hello World!')</p>|}</li>
<li><p>运行'''hello_world.py'''的结果如下所示</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''python3 hello_world.py'''</p>
<p>Hello World!</p>|}</li></ol>
</li>
<li><p>Ubuntu Focal默认没有安装Java的编译工具和运行环境Debian Bookworm默认没有安装Java的编译工具和运行环境</p>
<ol style="list-style-type: lower-alpha;">
<li><p>可以使用下面的命令安装openjdk可以使用下面的命令安装openjdk,Debian Bookworm中最新版本为openjdk-17</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''</p>|}</li>
<li><p>安装完后可以查看下Java的版本</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''java --version'''</p>
<p>openjdk 17.0.2 2022-01-18</p>|}<p>OpenJDK Runtime Environment (build 17.0.2+8-Ubuntu-120.04)</p><p>OpenJDK 64-Bit Server VM (build 17.0.2+8-Ubuntu-120.04, mixed mode, sharing)</p></li>
<li><p>编写Java版本的'''hello_world.java'''</p>
{| class="wikitable" style="width:800px;"
|-
|
<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(&quot;Hello World!&quot;);</p>:<p>}</p>
<p>}</p>
<p>|}</p></li>
<li><p>然后编译运行'''hello_world.java'''</p>
{| class="wikitable" style="width:800px;"
|-
|
<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系统 ===
=== Ubuntu Focal系统 === <ol start="4" style="list-style-type: decimal;"><li><p>Ubuntu Jammy默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序Focal默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p>
<ol style="list-style-type: lower-alpha;">
<li><p>gcc的版本如下所示</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''gcc --version'''</p>
<p>gcc (Ubuntu 119.24.0-19ubuntu11ubuntu1~20.04.1) '''119.24.0'''</p><p>Copyright (C) 2021 2019 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>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''vim hello_world.c'''</p>
<p>#include &lt;stdio.h&gt;</p>
 
 
<p>int main(void)</p>
<p>{</p>
:<p>printf(&quot;Hello World!\n&quot;);</p>  :<p>return 0;</p><p>}</p>|}</li>
<li><p>然后编译运行'''hello_world.c'''</p>
{| class="wikitable" style="width:800px;"
|-
|
<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>Ubuntu Jammy默认安装有Python3Focal默认安装有Python3</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Python3具体版本如下所示</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''python3'''</p>
<p>Python '''3.8.10.4''' (maindefault, Apr 2 Nov 14 2022, 0912:0459:1947) </p><p>[GCC 119.24.0] on linux</p>
<p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p>
<p>&gt;&gt;&gt;</p>|}</li>
<li><p>编写Python语言的'''hello_world.py'''程序</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''vim hello_world.py'''</p>
<p>print('Hello World!')</p>|}</li>
<li><p>运行'''hello_world.py'''的结果如下所示</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''python3 hello_world.py'''</p>
<p>Hello World!</p>|}</li></ol>
</li>
<li><p>Ubuntu Jammy默认没有安装Java的编译工具和运行环境Focal默认没有安装Java的编译工具和运行环境</p>
<ol style="list-style-type: lower-alpha;">
<li><p>可以使用下面的命令安装openjdk-1817</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-1817-jdk'''</p>|}</li>
<li><p>安装完后可以查看下Java的版本</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''java --version'''</p>
<p>openjdk 18-ea 17.0.2 2022-0301-2218</p><p>OpenJDK Runtime Environment (build 18-ea17.0.2+368-Ubuntu-1120.04)</p><p>OpenJDK 64-Bit Server VM (build 18-ea17.0.2+368-Ubuntu-1120.04, mixed mode, sharing)</p>|}</li>
<li><p>编写Java版本的'''hello_world.java'''</p>
{| class="wikitable" style="width:800px;"
|-
|
<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(&quot;Hello World!&quot;);</p>:<p>}</p>
<p>}</p>
<p>|}</p></li>
<li><p>然后编译运行'''hello_world.java'''</p>
{| class="wikitable" style="width:800px;"
|-
|
<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="qt的安装方法ubuntu-jammy系统"></span> ===Ubuntu Jammy系统 = QT的安装方法 ==
<ol start="1" style="list-style-type: decimal;"><li><p>使用下面的脚本可以安装QT5和QT Creator</p><p>orangepi@orangepi:~$ '''install_qt.sh'''</p></li><li><p>安装完后会自动打印QT的版本号Ubuntu Jammy默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Ubuntu20.04自带的qt版本为'''5.12.8'''gcc的版本如下所示</p><p>orangepi@orangepi{| class="wikitable" style="width:~$ '''install_qt.sh'''</p><p>......</p><p>QMake version 3.1</p>800px;" <p>Using Qt version '''5.12.8''' in /usr/lib/aarch64-linux|-gnu</p></li><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 gcc --version '''5.15.3''' in /usr/lib/aarch64-linux-gnu</p></li><li><p>Debian11自带的QT版本为'''5.15gcc (Ubuntu 11.2'''</p><p>orangepi@orangepi:~$ '''install_qt.sh'''</p><p>......</p><p>QMake version 3.1</p><p>Using Qt version 0-19ubuntu1) '''5.1511.2''' in /usr/lib/aarch64-linux-gnu</p></li><li><p>Debian12自带的QT版本为'''5.15.80'''</p><p>orangepi@orangepi:~$ '''install_qtCopyright (C) 2021 Free Software Foundation, Inc.sh'''</p><p>This is free software; see the source for copying conditions......There is NO</p><p>QMake version 3warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.1</p><p>Using Qt version '''5.15.8''' in /usr/lib/aarch64-linux-gnu</p></li></ol>|}
</li>
<li><p>然后在编写C语言的'''Applications'''中就可以看到QT Creator的启动图标</p><p>[[File:media/image329hello_world.png|576x270px]]</p><p>也可以使用下面的命令打开QT Creator</p><p>orangepi@orangepi:~$ '''qtcreatorc'''程序</p><p>'''在QT和QT应用的启动过程中,如果提示下面的错误,请直接忽略,此错误对应用的运行不会有影响。'''</p><p>'''libGL error: failed to create dri screen'''</p><p>'''libGL error: failed to load driver: rockchip'''</p><p>'''libGL error: failed to create dri screen'''</p><p>'''libGL error: failed to load driver: rockchip'''</p></li><li><p>QT Creator打开后的界面如下所示</p><p>[[File:media/image330.png{|418x222px]]</p></li><li><p>QT Creator的版本如下所示</p><ol styleclass="list-style-type: lower-alpha;wikitable"><li><p>QT Creator在'''Ubuntu20.04'''中的默认版本如下所示</p><p>[[File:media/image331.png|419x224px]]</p></li><li><p>QT Creator在'''Ubuntu22.04'''中的默认版本如下所示</p><p>[[File:media/image332.png|443x237px]]</p></li><li><p>QT Creator在'''Debian11'''中的默认版本如下所示</p><p>[[File:media/image333.png|444x238px]]</p></li><li><p>QT Creator在'''Debian12'''中的默认版本如下所示</p><p>[[File:media/image334.png|449x277px]]</p></li></ol></li><li><p>然后设置下QT</p><ol style="list-style-typewidth: lower-alpha800px;"><li><p>首先打开'''Help'''|-&gt;'''About Plugins...'''</p><p>[[File:media/image335.png|573x164px]]</p></li><li><p>然后去掉'''ClangCodeModel'''的那个勾</p><p>[[Fileorangepi@orangepi:media/image336.png|408x254px]]</p></li><li><p>'''设置完后需要重启下QT Creator'''</p></li><li><p>然后确保QT Creator使用的GCC编译器,如果默认为Clang,请修改为GCC</p><p>''~$ 'Debian12请跳过这步。'''</p><p>[[File:media/image337.png|576x315px]]</p><p>[[File:media/image338.png|575x307px]]</p></li></ol></li><li><p>然后就可以打开一个示例代码</p><p>[[File:media/image339.png|575x312px]]</p></li><li><p>点击示例代码后会自动打开对应的说明文档,可以仔细看下其中的使用说明</p><p>[[File:media/image340vim hello_world.png|576x218px]]</p></li><li><p>然后点击下'''Configure Projectc'''</p><p>[[File:media/image341#include &lt;stdio.png|575x304px]]</p></li><li><p>然后点击左下角的绿色三角形编译运行下示例代码</p><p>[[File:media/image342.png|575x312px]]</p></li><li><p>等待一段时间后,会弹出下图所示的界面,此时就说明QT能正常编译运行</p><p>[[File:media/image343.png|576x308px]]</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''']h&gt;</p></li></ol>
<span id="ros安装方法"></span>
== ROS安装方法 ==
<span id="ubuntu20.04安装ros-1-noetic的方法"p>int main(void)</spanp>=== Ubuntu20.04安装ROS 1 Noetic的方法 ===<p>{</p>:<p>printf(&quot;Hello World!\n&quot;);</p>
# ROS 1当前活跃的版本如下所示,推荐版本为'''Noetic Ninjemys'''
[[File:media<p>return 0;</image344.pngp><p>}</p>|345x235px]]}</li><li><p>然后编译运行'''hello_world.c'''</p>[[File{| class="wikitable" style="width:media/image345.png800px;" |576x210px]]-| [http<p>orangepi@orangepi://docs.ros.org/ ~$ '''http://docsgcc -o hello_world hello_world.ros.orgc''']</p><p>orangepi@orangepi:~$ '''https://wiki.ros.org/Distributionshello_world'''</p><p>Hello World!</p>|}</li></ol></li><li><p>Ubuntu Jammy默认安装有Python3</p><ol start="2" style="list-style-type: decimallower-alpha;"><li><p>ROS 1 Python3具体版本如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''Noetic Ninjemyspython3'''官方安装文档链接如下所示:</p><p>[http://wikiPython '''3.ros10.org/noetic/Installation/Ubuntu 4'''http(main, Apr 2 2022, 09://wiki04:19) [GCC 11.ros2.org0] on linux</noeticp><p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</Installation/Ubuntu''']p><p>&gt;&gt;&gt;</p>|}</li><li><p>ROS '''Noetic Ninjemys'''官方安装文档中Ubuntu推荐使用Ubuntu20.04,所以请确保开发板使用的系统为编写Python语言的'''Ubuntu20hello_world.04桌面版系统py'''程序</p>{| class="wikitable" style="width:800px;" |-| <p>[httporangepi@orangepi://wiki.ros.org/noetic/Installation ~$ '''http://wiki.rosvim hello_world.org/noetic/Installationpy''']</p><p>[[File:media/image346.png|312x176px]]print('Hello World!')</p>|}</li><li><p>然后使用下面的脚本安装ros1运行'''hello_world.py'''的结果如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi3borangepi:~$ '''install_rospython3 hello_world.sh ros1py'''</p><p>Hello World!</p>|}</li></ol></li><li><p>使用ROS工具前,首先需要初始化下rosdep,然后编译源码时就能快速的安装一些系统依赖和一些ROS中的核心组件Ubuntu Jammy默认没有安装Java的编译工具和运行环境</p><ol style="list-style-type: lower-alpha;"></li><p>可以使用下面的命令安装openjdk-18</olp>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''注意,运行下面的命令需要确保开发板能正常访问github,否则会由于网络问题而报错。sudo apt install -y openjdk-18-jdk'''</p>|}'''install_ros.sh脚本会尝试修改</etcli><li><p>安装完后可以查看下Java的版本</hosts并自动运行下面的命令。但是这种方法无法保证每次都能正常访问github,如果install_ros.sh安装完ros1后有提示下面的错误,请自己想其它办法让开发板的linux系统能正常访问github,然后再手动运行下面的命令。'''p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osxjava --homebrew.yamlversion'''</p><p>openjdk 18-ea 2022-03-22</p>'''Hit https:<p>OpenJDK Runtime Environment (build 18-ea+36-Ubuntu-1)</p><p>OpenJDK 64-Bit Server VM (build 18-ea+36-Ubuntu-1, mixed mode, sharing)</raw.githubusercontent.comp>|}</ros/rosdistro/master/rosdep/base.yaml'''li><li><p>编写Java版本的'''ERROR: error loading sources list:hello_world.java'''</p>{| class="wikitable" style="width:800px;" '''The read operation timed out'''|-| <p>orangepi@orangepi:~$ '''source 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(&quot;Hello World!&quot;);</optp>:<p>}</rosp><p>}</noeticp>|}</setupli><li><p>然后编译运行'''hello_world.bashjava'''</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo rosdep initjavac hello_world.java''' Wrote </etc/ros/rosdep/sources.list.d/20-default.list Recommended: please run rosdep updatep><p>orangepi@orangepi:~$ '''rosdep updatejava hello_world'''</p><p>Hello World!</p>|}reading in sources list data from </etcli></rosol></rosdepli></sources.list.dol>
Hit https:<span id="qt的安装方法"><//raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yamlspan>
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml== QT的安装方法 ==
Hit https<ol style="list-style-type:decimal;"><li><p>使用下面的脚本可以安装QT5和QT Creator<//raw.githubusercontentp>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''install_qt.comsh'''</rosp>|}</rosdistroli><li><p>安装完后会自动打印QT的版本号</masterp><ol style="list-style-type: lower-alpha;"><li><p>Ubuntu20.04自带的qt版本为'''5.12.8'''</rosdepp>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''install_qt.sh'''</pythonp><p>.yaml.....</p><p>QMake version 3.1</p>Hit https<p>Using Qt version '''<span style="color://raw#FF0000">5.githubusercontent12.com8</rosspan>''' in /rosdistrousr/masterlib/rosdepaarch64-linux-gnu</rubyp>|}</li><li><p>Ubuntu22.04自带的QT版本为'''5.15.yaml3'''</p>{| class="wikitable" style="width:800px;" |-Hit https| <p>orangepi@orangepi:~$ '''install_qt.sh'''</p><p>......</p><p>QMake version 3.1</rawp><p>Using Qt version '''<span style="color:#FF0000">5.githubusercontent15.com3</rosspan>''' in /rosdistrousr/masterlib/aarch64-linux-gnu</releasesp>|}</fuerteli><li><p>Debian11自带的QT版本为'''5.15.yaml2'''</p>{| class="wikitable" style="width:800px;" Query rosdistro index https|-| <p>orangepi@orangepi:~$ '''install_qt.sh'''</p><p>......</rawp><p>QMake version 3.1</p><p>Using Qt version '''<span style="color:#FF0000">5.githubusercontent15.com2</rosspan>''' in /rosdistrousr/masterlib/indexaarch64-v4linux-gnu</p>|}</li><li><p>Debian12自带的QT版本为'''5.yaml15.8'''</p>{| class="wikitable" style="width:800px;" Skip end-of|-life distro &quot;ardent&quot;| Skip end-of-life distro &quot;bouncy&quot;<p>orangepi@orangepi:~$ '''install_qt.sh'''</p><p>......</p><p>QMake version 3.1</p>Skip end<p>Using Qt version '''<span style="color:#FF0000">5.15.8</span>''' in /usr/lib/aarch64-oflinux-life distro &quot;crystal&quot;gnu</p>|}</li></ol>Skip end-of-life distro &quot;dashing&quot;</li><li><p>然后在'''Applications'''中就可以看到QT Creator的启动图标</p>Skip end<p>[[File:pi3b-of-life distro &quot;eloquent&quot;img329.png]]</p><p>也可以使用下面的命令打开QT Creator</p>Add distro &quot;foxy&quot{| class="wikitable" style="width:800px;" |-| Add distro &quot;galactic&quot;<p>orangepi@orangepi:~$ '''qtcreator'''</p>|}Skip end{| class="wikitable" style="background-of-life distro &quotcolor:#ffffdc;groovy&quotwidth:800px;" |-Add distro &quot;humble&quot;|  Skip end-of-life distro &quot;hydro&quot;<big><p>'''在QT和QT应用的启动过程中,如果提示下面的错误,请直接忽略,此错误对应用的运行不会有影响。'''</p>
Skip end-of-life distro &quot;indigo&quot;
Skip end<p>'''libGL error: failed to create dri screen'''</p><p>'''libGL error: failed to load driver: rockchip'''</p><p>'''libGL error: failed to create dri screen'''</p><p>'''libGL error: failed to load driver: rockchip'''</p></big>|}</li><li><p>QT Creator打开后的界面如下所示</p><p>[[File:pi3b-ofimg330.png]]</p></li><li><p>QT Creator的版本如下所示</p><ol style="list-life distro &quot;jade&quotstyle-type: lower-alpha;"><li><p>QT Creator在'''Ubuntu20.04'''中的默认版本如下所示</p><p>[[File:pi3b-img331.png]]</p></li><li><p>QT Creator在'''Ubuntu22.04'''中的默认版本如下所示</p><p>[[File:pi3b-img332.png]]</p></li><li><p>QT Creator在'''Debian11'''中的默认版本如下所示</p><p>[[File:pi3b-img333.png]]</p></li><li><p>QT Creator在'''Debian12'''中的默认版本如下所示</p><p>[[File:pi3b-img334.png]]</p></li></ol></li><li><p>然后设置下QT</p>Skip end<ol style="list-ofstyle-life distro &quottype: lower-alpha;kinetic"><li><p>首先打开'''Help'''-&quotgt;'''About Plugins...'''</p><p>[[File:pi3b-img335.png]]</p></li>Skip end<li><p>然后去掉'''ClangCodeModel'''的那个勾</p><p>[[File:pi3b-ofimg336.png]]</p></li><li><p>'''<span style="color:#FF0000">设置完后需要重启下QT Creator</span>'''</p></li><li><p>然后确保QT Creator使用的GCC编译器,如果默认为Clang,请修改为GCC</p>{| class="wikitable" style="background-life distro &quotcolor:#ffffdc;lunar&quotwidth:800px;" |-| <big><p>'''Debian12请跳过这步。'''</p></big>|}<p>[[File:pi3b-img337.png]]</p><p>[[File:pi3b-img338.png]]</p></li></ol></li><li><p>然后就可以打开一个示例代码</p><p>[[File:pi3b-img339.png]]</p></li><li><p>点击示例代码后会自动打开对应的说明文档,可以仔细看下其中的使用说明</p><p>[[File:pi3b-img340.png]]</p></li><li><p>然后点击下'''Configure Project'''</p><p>[[File:pi3b-img341.png]]</p></li><li><p>然后点击左下角的绿色三角形编译运行下示例代码</p><p>[[File:pi3b-img342.png]]</p></li><li><p>等待一段时间后,会弹出下图所示的界面,此时就说明QT能正常编译运行</p><p>[[File:pi3b-img343.png]]</p></li><li><p>参考资料</p>Add distro &quot;melodic&quot{| class="wikitable" style="width:800px;" |-| <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>|}Add distro &quot;noetic&quot;</li></ol>
Add distro &quot;rolling&quot;<span id="ros安装方法"></span>
updated cache in /home/orangepi/.ros/rosdep/sources.cache== ROS安装方法 ==
<ol startspan id="6" style="listubuntu20.04安装ros-style1-type: decimal;noetic的方法"><li><p>然后在'''桌面'''中打开一个命令行终端窗口,再使用'''test_ros.sh'''脚本可以启动一个小海龟的例程来测试下ROS是否能正常使用</pspan><p>orangepi@orangepi:~$ '''test_ros=== Ubuntu20.sh'''</p></li><li><p>运行完'''test_ros.sh'''脚本后,会弹出下图所示的一个小海龟</p><p>[[File:media/image347.png|576x276px]]</p></li><li><p>然后请保持刚才打开终端窗口在最上面</p></li></ol>04安装ROS 1 Noetic的方法 ===
[[File:media/image348.png|576x275px]]# ROS 1当前活跃的版本如下所示,推荐版本为'''Noetic Ninjemys'''
<ol start="9" style="list-style-type: decimal;"><li><p>此时按下键盘上的方向按键就可以控制小海龟上下左右移动了</p><p>:[[File:media/image349pi3b-img344.png|575x296px]]</p></li></ol>
<span id="ubuntu20.04安装ros-2::[[File:pi3b-galactic的方法"></span>=== Ubuntu20img345.04安装ROS 2 Galactic的方法 ===png]]
<ol ::{| class="wikitable" style="list-style-typewidth: decimal800px;"><li><p>ROS 2当前活跃的版本如下所示,推荐版本为'''Galactic Geochelone'''</p><p>[[File:media/image350.png|576x271px]]</p>-<p>[[File:media/image351.png|575x265px]]</p><p>[http://docs.ros.org/ '''http://docs.ros.org''']</p><p>'''httphttps://docswiki.ros.org/en/galactic/Releases.htmlDistributions'''|} </p></liol start="2" style="list-style-type: decimal;"><li><p>ROS 2 1 '''Galactic GeocheloneNoetic Ninjemys'''官方安装文档链接如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>'''docs[http://wiki.ros.org/en/galacticnoetic/Installation.html'''</p><p>Ubuntu '''http://docswiki.ros.org/en/galacticnoetic/Installation/Ubuntu-Install-Debians.html''']</p>|}</li><li><p>ROS 2 '''Galactic GeocheloneNoetic Ninjemys'''官方安装文档中Ubuntu Linux推荐使用Ubuntu20官方安装文档中Ubuntu推荐使用Ubuntu20.04,所以请确保开发板使用的系统为'''<span style="color:#FF0000">Ubuntu20.04桌面版系统'''。安装ROS 2有几种方法,下面演示下通过'''Debian packages'''的方式来安装ROS 2 '''Galactic Geochelone'''</p></li><li><pspan>使用'''install_ros.sh'''脚本可以安装ros2</p><p>orangepi@orangepi{| class="wikitable" style="width:~$ '''install_ros.sh ros2'''</p></li><li><p>'''install_ros.sh'''脚本安装完ros2后会自动运行下'''ros2 -h'''命令,如果能看到下面的打印,说明ros2安装完成</p><p>usage: ros2 [-h] Call `ros2 &lt800px;command&gt; -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[http:</p><p>action Various action related sub-commands</p><p>bag Various rosbag related sub-commands<wiki.ros.org/p><p>component Various component related sub-commands<noetic/p><p>daemon Various daemon related sub-commands<Installation '''http:/p><p>doctor Check ROS setup and other potential issues</p><p>interface Show information about ROS interfaces<wiki.ros.org/p><p>launch Run a launch file<noetic/p><p>lifecycle Various lifecycle related sub-commandsInstallation''']</p><p>multicast Various multicast related sub-commands</p>|}<p>node Various node related sub[[File:pi3b-commandsimg346.png]]</p><p>param Various param related sub-commands</pli><pli>pkg Various package related sub-commands</p><p>run Run a package specific executable然后使用下面的脚本安装ros1</p><p>security Various security related sub-commands</p>{| class="wikitable" style="width:800px;" <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 &lt;command&gt; -h` for more detailed usage.</p></li><li><p>然后可以使用 '''test_ros.sh'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行</p>| <p>orangepi@orangepi3b:~$ '''test_rosinstall_ros.shros1'''</p><p>[INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1'|}</pli><pli>[INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]</p><p>[INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2'使用ROS工具前,首先需要初始化下rosdep,然后编译源码时就能快速的安装一些系统依赖和一些ROS中的核心组件</p><p>[INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]</pli><p>[INFO] [1671174103.199580322] [talker]{| class="wikitable" style="background-color: Publishing#ffffdc;width: 'Hello World: 3'</p>800px;" <p>[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]</p></li>|-<li><p>运行下面的命令可以打开rviz2</p>| <pbig>orangepi@orangepi:~$ '''source /opt/ros/galactic/setup.bash'''</pspan style="color:#FF0000">注意,运行下面的命令需要确保开发板能正常访问github,否则会由于网络问题而报错。<p/span>orangepi@orangepi:~$ '''ros2 run rviz2 rviz2'''</p><div class="figure">
[[File:media/image352.png|576x324px|1]]
</div></li><li><p>ROS的使用方法请参考下ROS 2的文档</p><p>[http://docs.ros.org/en/galactic/Tutorials.html '''http://docsinstall_ros.ros.orgsh脚本会尝试修改/enetc/galactic/Tutorialshosts并自动运行下面的命令。但是这种方法无法保证每次都能正常访问github,如果install_ros.htmlsh安装完ros1后有提示下面的错误,请自己想其它办法让开发板的Linux系统能正常访问github,然后再手动运行下面的命令。''']</p></li></ol>
<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@orangepihttps:~$ '''install_ros.sh ros2'''</p></li><li><p>'''install_ros.sh'''脚本安装完ros2后会自动运行下'''ros2 -h'''命令,如果能看到下面的打印,说明ros2安装完成</p><p>usage: ros2 [-h] Call `ros2 &lt;command&gt; -h` for more detailed usage. raw.githubusercontent..<com/p><p>ros2 is an extensible command-line tool for ROS 2.<ros/p><p>optional arguments:<rosdistro/p><p>-h, --help show this help message and exit<master/p><p>Commands:<rosdep/p><p>action Various action related subosx-commands</p>homebrew.yaml'''<p>bag Various rosbag related sub-commands</p><p>component Various component related sub-commands<'''Hit https:/p><p>daemon Various daemon related sub-commands</p><p>doctor Check ROS setup and other potential issues<raw.githubusercontent.com/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<ros/p><p>run Run a package specific executable<rosdistro/p><p>security Various security related sub-commands<master/p><p>service Various service related sub-commands<rosdep/p><p>topic Various topic related sub-commands</p><p>wtf Use `wtf` as alias to `doctor`</p><p>Call `ros2 &lt;command&gt; -h` for more detailed usagebase.</p></li><li><p>然后可以使用 yaml'''test_ros.sh '''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行</pspan style="color:#FF0000">ERROR: error loading sources list:<p/span>orangepi@orangepi3b:~$ '''test_ros.sh'''</p><p>[INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1''</pspan style="color:#FF0000"><p>[INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]The read operation timed out</pspan><p>[INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2''</pbig><p>[INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]</p>|} <p>[INFO] [1671174103.199580322] [talker]{| class="wikitable" style="width: Publishing: 'Hello World: 3'</p>800px;" <p>[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]</p></li>|-<li><p>运行下面的命令可以打开rviz2</p>| <p>orangepi@orangepi:~$ '''source /opt/ros/humblenoetic/setup.bash'''</p><p>orangepi@orangepi:~$ '''ros2 run rviz2 rviz2sudo rosdep init'''< Wrote /etc/ros/rosdep/sources.list.d/p><div class="figure">20-default.list
[[FileRecommended:media/image353.png|576x324px|1]]please run
</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>
== 安装内核头文件的方法 ==::rosdep update
<ol style="list-style-type: decimal;"><li><p>OPi发布的Linux镜像默认自带了内核头文件的deb包,存放的位置为'''/opt/'''</p><p>orangepi@orangepi:~$ '''ls /opt/linux-headers*rosdep update'''</p><p>/opt/linux-headers-legacy-rockchip-rk356x_x.x.x_arm64.deb</p></li><li><p>使用下面的命令可以安装内核头文件的deb包</p><p>'''内核头文件deb包的名字需要替换为实际的名字,请不要照抄。'''</p><p>orangepi@orangepi:~$ '''sudo dpkg -i /opt/linux-headers-legacy-rockchip-rk356x_1.x.x_arm64.deb'''</p></li><li><p>安装完后在'''/usrreading in sources list data from /src'''下就能看到内核头文件所在的文件夹<etc/p><p>orangepi@orangepi:~$ '''ls ros/usrrosdep/src'''</p><p>linux-headers-5sources.10.160-rockchip-rk356x</p></li><li><p>然后可以编写一个hello内核模块测试下内核头文件</p><ol style="list-style-type: lower-alpha;"><li><p>首先编写hello内核模块的代码,如下所示:</p><p>orangepi@orangepi:~$ '''vim hello.c'''</p><p>#include &lt;linux/init.h&gt;</p><p>#include &lt;linux/module.h&gt;</p><p>static int hello_init(void)</p><p>{</p><p>printk(&quot;Hello Orange Pi -- init\n&quot;);</p><p>return 0;</p><p>}</p><p>static void hello_exit(void)</p><p>{</p><p>printk(&quot;Hello Orange Pi -- exit\n&quot;);</p><p>return;</p><p>}</p><p>module_init(hello_init);</p><p>module_exit(hello_exit);</p><p>MODULE_LICENSE(&quot;GPL&quot;);</p></li><li><p>然后编写编译hello内核模块的Makefile文件,如下所示:</p><p>orangepi@orangepi:~$ '''vim Makefile'''</p><p>ifneq ($(KERNELRELEASE),)</p><p>obj-m:=hello.o</p><p>else</p><p>KDIR :=/lib/modules/$(shell uname -r)/build</p><p>PWD :=$(shell pwd)</p><p>all:</p><p>make -C $(KDIR) M=$(PWD) modules</p><p>clean:</p><p>rm -f *.ko *.o *.mod.o *.mod *.symvers *.cmd *.mod.c *.order</p><p>endif</p></li><li><p>然后使用make命令编译hello内核模块,编译过程的输出如下所示:</p><p>'''如果自己复制的代码这里编译如果有问题,请去[http://www.orangepi.cn/html/serviceAndSupport/index.html 官方工具]中下载源码然后上传到开发板的Linux系统中测试。'''</p><p>[[File:media/image354.png|253x41px]]</p><p>orangepi@orangepi:~$ '''make'''</p><p>make -C /lib/modules/5.10.160-rockchip-35xx/build M=/home/orangepi modules</p><p>make[1]: Entering directory '/usr/src/linux-headers-5.10.160-rockchip-rk35xx'</p><p>CC [M] /home/orangepi/hello.o</p><p>MODPOST /home/orangepi/Module.symvers</p><p>CC [M] /home/orangepi/hello.mod.o</p><p>LD [M] /home/orangepi/hello.ko</p><p>make[1]: Leaving directory '/usr/src/linux-headers-5.10.160-rockchip-rk35xx'</p></li><li><p>编译完后会生成'''hello.ko'''内核模块</p><p>orangepi@orangepi:~$ '''ls *.ko'''</p><p>hello.ko</p></li><li><p>使用'''insmod'''命令可以将'''hello.ko'''内核模块插入内核中</p><p>orangepi@orangepi:~$ '''sudo insmod hello.ko'''</p></li><li><p>然后使用'''demsg'''命令可以查看下'''hello.ko'''内核模块的输出,如果能看到下面的输出说明'''hello.ko'''内核模块加载正确</p><p>orangepi@orangepi:~$ '''dmesg | grep &quot;Hello&quot;'''</p><p>[ 2871.893988] '''Hello Orange Pi -- init'''</p></li><li><p>使用'''rmmod'''命令可以卸载'''hello.ko'''内核模块</p><p>orangepi@orangepi:~$ '''sudo rmmod hello'''</p><p>orangepi@orangepi:~$ '''dmesg | grep &quot;Hello&quot;'''</p><p>[ 2871.893988] Hello Orange Pi -- init</p><p>[ 3173.800892] '''Hello Orange Pi -- exit'''</p></li></ol></li></ol>d
== 树莓派5寸屏幕的使用 ==Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
=== 树莓派5寸屏幕的组装方法 ===Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
<ol style="list-style-typeHit https: decimal;"><li><p>首先准备需要的配件</p><ol style="list-style-type: lower-alpha;"><li><p>树莓派5寸MIPI LCD显示屏+触摸屏</p><p>[[File:media/image355raw.png|306x219px]]</p></li><li><p>15pin MIPI排线</p><p>[[File:media/image356githubusercontent.png|276x111px]]<com/p><ros/li><rosdistro/ol><master/li><li><p>然后将15pin MIPI排线按照下图所示的方式连接到树莓派5寸屏幕上(注意绝缘面的朝向)<rosdep/p><p>[[File:media/image357python.png|294x160px]]</p></li><li><p>最后连接到Orange Pi 3B开发板的LCD接口上</p><p>[[File:media/image358.png|333x199px]]</p></li></ol>yaml
=== 打开树莓派5寸屏幕配置的方法 ===Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
<ol style="list-style-typeHit https: decimal;"><li><p>linux镜像默认是没有打开树莓派5寸屏幕的配置的,如果需要使用树莓派5寸屏幕,需要手动打开才行。</p></li><li><p>打开mipi lcd配置的步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p><p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p></li><li><p>然后选择'''System'''</p><p>[[File:media/image359raw.png|575x272px]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:media/image360githubusercontent.png|576x266px]]<com/p><ros/li><li><p>然后使用键盘的方向键定位到raspi-7inch-touchscreen,再使用'''空格'''选中<rosdistro/p><p>[[File:media/image361.png|408x310px]]<master/p><releases/li><li><p>然后选择'''&lt;Save&gt;'''保存</p><p>[[File:media/image362fuerte.png|404x133px]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:media/image363.png|397x151px]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:media/image364.png|331x154px]]</p><p>'''上面的设置最终会在/boot/orangepiEnv.txt中加入overlays=raspi-7inch-touchscreen这句配置。设置完后可以先检查下。如果不存在这句配置,那么设置就是有问题。'''</p><p>'''如果觉得使用orangepi-config比较麻烦,也可以使用vim编辑器打开/boot/orangepiEnv.txt,然后加入overlays=raspi-7inch-touchscreen 这句配置也是可以。'''</p><p>orangepi@orangepi:~$ '''cat /boot/orangepiEnv.txt | grep “raspi”'''</p><p>'''overlays=raspi-7inch-touchscreen #示例配置'''</p></li></ol></li><li><p>启动后可以看到lcd屏幕的显示如下所示:</p></li></ol>yaml
[[FileQuery rosdistro index https:media/image365/raw.githubusercontent.com/ros/rosdistro/master/index-v4.png|381x262px]]yaml
=== 服务器版镜像旋转显示方向的方法 ===Skip end-of-life distro &quot;ardent&quot;
<ol style="listSkip end-styleof-type: decimallife distro &quot;"><li><p>在'''/boot/orangepiEnv.txt'''中加入'''extraargs=fbcon=rotate:要旋转的方向'''这行配置就可以设置服务器版本的linux系统显示的方向,其中'''fbcon=rotate:'''后面的数字可以设置为:</p><ol style="list-style-type: lower-alphabouncy&quot;"><li><p>0: 正常屏(默认为横屏)</p></li><li><p>1: 顺时钟转90度</p></li><li><p>2: 翻转180度</p></li><li><p>3: 顺时钟转270度</p><p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>overlays=lcd1</p><p>'''extraargs=cma=64M fbcon=rotate:3'''</p><p>'''注意,/boot/orangepiEnv.txt中如果默认有extraargs=cma=64M这行配置,fbcon=rotate:3这个配置添加到extraargs=cma=64M的后面即可(需要用空格隔开)。'''</p></li></ol></li><li><p>然后'''重启'''linux系统就能看到lcd屏幕显示的方向已经旋转了</p></li></ol>
=== 桌面版镜像旋转显示和触摸方向的方法 ===Skip end-of-life distro &quot;crystal&quot;
<ol style="listSkip end-styleof-type: decimallife distro &quot;"><li><p>首先在linux系统中打开'''Display'''设置</p><p>[[File:media/image366.png|298x206px]]</p></li><li><p>然后在'''Rotation'''中选择想要旋转的方向</p><ol style="list-style-type: lower-alpha;"><li><p>'''None''': 不旋转</p></li><li><p>'''Left''': 向左旋转90度</p></li><li><p>'''Inverted''': 上下翻转,相当于旋转180度</p></li><li><p>'''Right''': 向右旋转90度</p><p>[[File:media/image367.png|286x180px]]</p></li></ol></li><li><p>然后点击'''Apply'''</p><p>[[File:media/image368.png|330x207px]]</p></li><li><p>然后选择'''Keep this configuration'''</p><p>[[File:media/image369.png|374x210px]]</p></li><li><p>此时屏幕显示就已旋转完成,然后关闭掉'''Display'''程序即可</p></li><li><p>上面的步骤只会选择显示方向,并不会旋转触摸的方向,使用'''set_lcd_rotate.sh'''脚本可以旋转下触摸的方向,此脚本设置完后会自动重启,然后就可以测试触摸是否已经能正常使用了</p><ol style="list-style-type: lower-alphadashing&quot;"><li><p>'''None''': 不旋转</p><p>orangepi@orangepi:~$ '''set_lcd_rotate.sh none'''</p></li><li><p>'''Left''': 向左旋转90度</p><p>orangepi@orangepi:~$ '''set_lcd_rotate.sh left'''</p></li><li><p>'''Inverted''': 上下翻转,相当于旋转180度</p><p>orangepi@orangepi:~$ '''set_lcd_rotate.sh inverted'''</p></li><li><p>'''Right''': 向右旋转90度</p><p>orangepi@orangepi:~$ '''set_lcd_rotate.sh right'''</p><p>'''set_lcd_rotate.sh脚本主要做四件事:'''</p></li></ol></li></ol>
<!Skip end-of- --><ol style="list-style-type: decimal;"><li><p>'''旋转framebuffer显示的方向'''</p></li><li><p>'''旋转触摸的方向'''</p></li><li><p>'''关闭开机logo'''</p></li><li><p>'''重启系统'''</p><p>'''旋转触摸的方向是通过在/usr/share/X11/xorg.conf.d/40-libinput.conf中加入Option &quot;TransformationMatrix&quot; &quot;x x x x x x x x x&quot;这行配置来实现的。其中life distro &quot;x x x x x x x x xeloquent&quot;不同的方向配置不同。'''</p></li></ol>
<!-- --><ol start="7" style="list-style-type: decimalAdd distro &quot;foxy&quot;"><li><p>触摸旋转参考资料</p><p>[https://wiki.ubuntu.com/X/InputCoordinateTransformation '''https://wiki.ubuntu.com/X/InputCoordinateTransformation''']</p></li></ol>
== 开关机logo使用说明 ==Add distro &quot;galactic&quot;
<ol style="listSkip end-styleof-type: decimallife distro &quot;groovy&quot;"><li><p>开关机logo默认只在桌面版的系统中才会显示</p></li><li><p>在'''/boot/orangepiEnv.txt'''中设置'''bootlogo'''变量为'''false'''可以关闭开关机logo</p><p>orangepi@orangepi:~$ '''vim /boot/orangepiEnv.txt'''</p><p>verbosity=1</p><p>'''bootlogo=false'''</p></li><li><p>在'''/boot/orangepiEnv.txt'''中设置'''bootlogo'''变量为'''true'''可以开启开关机logo</p><p>orangepi@orangepi:~$ '''vim /boot/orangepiEnv.txt'''</p><p>verbosity=1</p><p>'''bootlogo=true'''</p></li><li><p>开机logo图片在linux系统中的位置为</p><p>'''/usr/share/plymouth/themes/orangepi/watermark.png'''</p></li><li><p>替换开机logo图片后需要运行下命令才能生效</p><p>orangepi@orangepi:~$ '''sudo update-initramfs -u'''</p></li></ol>
<span id="zfs文件系统的使用方法"></span>== ZFS文件系统的使用方法 ==Add distro &quot;humble&quot;
'''最新版本的Ubuntu20.04、Ubuntu22.04、Debian11和Debian12桌面版系统中已经预装了zfs,直接使用即可。'''Skip end-of-life distro &quot;hydro&quot;
'''在Ubuntu20.04、Ubuntu22.04桌面版系统中预装的zfs版本是2.1.6。'''Skip end-of-life distro &quot;indigo&quot;
'''在Debian11和Debian12桌面版系统中预装的zfs版本是2.1.11。'''Skip end-of-life distro &quot;jade&quot;
'''系统启动后,首先请确认下zfs的内核模块有没有被加载,如果使用lsmod命令可以看到zfs相关的内容,就说明系统已经预装了zfs。'''Skip end-of-life distro &quot;kinetic&quot;
orangepi@orangepi:~$ '''lsmod | grep Skip end-of-life distro &quot;zfslunar&quot;'''
zfs 2801664 0Add distro &quot;melodic&quot;
zunicode 327680 1 zfsAdd distro &quot;noetic&quot;
zzstd 471040 1 zfsAdd distro &quot;rolling&quot;
zlua 139264 1 zfsupdated cache in /home/orangepi/.ros/rosdep/sources.cache|}</ol><ol start="6" style="list-style-type: decimal;"><li><p>然后在'''桌面'''中打开一个命令行终端窗口,再使用'''test_ros.sh'''脚本可以启动一个小海龟的例程来测试下ROS是否能正常使用</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''test_ros.sh'''</p>|}</li><li><p>运行完'''test_ros.sh'''脚本后,会弹出下图所示的一个小海龟</p><p>[[File:pi3b-img347.png]]</p></li><li><p>然后请保持刚才打开终端窗口在最上面</p></li>
zcommon 69632 1 zfs[[File:pi3b-img348.png]]</ol><ol start="9" style="list-style-type: decimal;"><li><p>此时按下键盘上的方向按键就可以控制小海龟上下左右移动了</p><p>[[File:pi3b-img349.png]]</p></li></ol>
znvpair 61440 <span id="ubuntu20.04安装ros-2 zfs,zcommon-galactic的方法"></span>
zavl 16384 1 zfs=== Ubuntu20.04安装ROS 2 Galactic的方法 ===
icp 221184 1 zfs<ol style="list-style-type: decimal;"><li><p>ROS 2当前活跃的版本如下所示,推荐版本为'''Galactic Geochelone'''</p><p>[[File:pi3b-img350.png]]</p><p>[[File:pi3b-img351.png]]</p>{| class="wikitable" style="width:800px;" |-| <p>[http://docs.ros.org/ '''http://docs.ros.org''']</p><p>'''http://docs.ros.org/en/galactic/Releases.html'''</p>|}</li><li><p>ROS 2 '''Galactic Geochelone'''官方安装文档链接如下所示:</p>{| class="wikitable" style="width:800px;" spl 77824 6 zfs,icp,zzstd,znvpair,zcommon,zavl|-| <p>'''docs.ros.org/en/galactic/Installation.html'''</p><p>'''http://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.html'''</p>|}</li><li><p>ROS 2 '''Galactic Geochelone'''官方安装文档中Ubuntu Linux推荐使用Ubuntu20.04,所以请确保开发板使用的系统为'''<span idstyle="安装zfs的方法color:#FF0000">Ubuntu20.04桌面版系统</span>'''。安装ROS 2有几种方法,下面演示下通过'''Debian packages'''的方式来安装ROS 2 '''Galactic Geochelone'''</p></li><li><p>使用'''install_ros.sh'''脚本可以安装ros2</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''install_ros.sh ros2'''</p>|}</li><li><p>'''install_ros.sh'''脚本安装完ros2后会自动运行下'''ros2 -h'''命令,如果能看到下面的打印,说明ros2安装完成</p>{| class= 安装ZFS的方法 =="wikitable" style="width:800px;" |-| <p>usage: ros2 [-h] Call `ros2 &lt;command&gt; -h` for more detailed usage. ...</p>
'''安装zfs前,请先确保使用的linux镜像为最新版本。另外,如果系统中已经安装了zfs,就无需重复安装了。'''
安装zfs前首先需要安装内核头文件,安装内核头文件的方法请参考[[\l|'''安装内核头文件的方法''']]小节的说明。<p>ros2 is an extensible command-line tool for ROS 2.</p>
在Ubuntu20.04、Ubuntu22.04和Debian11系统中,zfs是无法通过apt直接安装的,这是因为默认的apt源中zfs版本低于2.1.6,存在和rk linux5.10内核不兼容的问题,这个问题在zfs的2.1.6及以后的版本中得到了修复。
为了解决这个问题,我们提供了能正常安装的zfs的deb包,可以从开发板的[http<p>optional arguments:</p>:<p>-h, --help show this help message and exit</www.orangepi.cn/html/serviceAndSupport/index.html '''官方工具''']中下载到。打开'''官方工具''',然后进入'''Ubuntu和Debian系统使用的zfs相关的deb包'''文件夹后,可以看到Ubuntu20.04、Ubuntu22.04和Debian11三种类型的deb包,请下载需要的版本。p>
[[File:media/image370.png|232x136px]]
下载完对应版本的zfs deb包后,请将它们上传到开发板的Linux系统中。上传方法请参考[[\l|'''上传文件到开发板Linux系统中的方法''']]小节的说明。<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>
上传完成后,再在开发板linux系统的命令行中使用'''cd'''命令进入deb包的目录,然后使用下面的命令就可以安装zfs的deb包。
:<p>Call `ros2 &lt;command&gt; -h` for more detailed usage.</p>|}</li><li><p>然后可以使用 '''test_ros.sh'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi3b:~$ '''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>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo apt install source /opt/ros/galactic/setup.bash'''</*.debp><p>orangepi@orangepi:~$ '''ros2 run rviz2 rviz2'''</p>|}<div class="figure">
安装完成后,使用下面的命令可以看到zfs相关的内核模块:[[File:pi3b-img352.png]]
orangepi@orangepi</div></li><li><p>ROS的使用方法请参考下ROS 2的文档</p>{| class="wikitable" style="width:800px;" |-| <p>[http:~$ //docs.ros.org/en/galactic/Tutorials.html '''ls http:/lib/modules/5docs.10ros.160-rockchip-rk356xorg/updatesen/dkmsgalactic/Tutorials.html''']</p>|}</li></ol>
'''icp<span id="ubuntu22.ko spl.ko zavl.ko zcommon.ko zfs.ko zlua.ko znvpair.ko zunicode.ko zzstd.ko'''04安装ros-2-humble的方法"></span>
然后重启下linux系统就能看到zfs内核模块会自动加载了:=== Ubuntu22.04安装ROS 2 Humble的方法 ===
<ol style="list-style-type: decimal;"><li><p>使用'''install_ros.sh'''脚本可以安装ros2</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''lsmod install_ros.sh ros2'''</p>| grep }</li><li><p>'''install_ros.sh'''脚本安装完ros2后会自动运行下'''ros2 -h'''命令,如果能看到下面的打印,说明ros2安装完成</p>{| class="wikitable" style="width:800px;" |-| <p>usage: ros2 [-h] Call `ros2 &quotlt;zfscommand&quotgt;'''-h` for more detailed usage. ...</p>
zfs 2801664 0
zunicode 327680 1 zfs<p>ros2 is an extensible command-line tool for ROS 2.</p>
zzstd 471040 1 zfs
zlua 139264 1 zfs<p>optional arguments:</p>:<p>-h, --help show this help message and exit</p>
zcommon 69632 1 zfs
znvpair 61440 2 zfs,zcommon<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>
zavl 16384 1 zfs
icp 221184 :<p>Call `ros2 &lt;command&gt; -h` for more detailed usage.</p>|}</li><li><p>然后可以使用 '''test_ros.sh'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi3b:~$ '''test_ros.sh'''</p><p>[INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1 zfs'</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>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''source /opt/ros/humble/setup.bash'''</p><p>orangepi@orangepi:~$ '''ros2 run rviz2 rviz2'''</p>|}<div class="figure">
spl 77824 6 zfs,icp,zzstd,znvpair,zcommon,zavl[[File:pi3b-img353.png]]
在Debian12中,zfs的默认版本为2</div></li><li><p>参考文档</p>{| class="wikitable" style="width:800px;" |-| <p>'''http://docs.1ros.11,所以我们可以通过下面的命令直接安装zfs,再次提醒下,安装前需要确保系统已安装内核头文件的deb包。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>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''ls /opt/linux-headers*'''</p><p>/opt/linux-headers-legacy-rockchip-rk356x_x.x.x_arm64.deb</p>|}</li><li><p>使用下面的命令可以安装内核头文件的deb包</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''内核头文件deb包的名字需要替换为实际的名字,请不要照抄。'''</p></big>|}{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo apt install dpkg -y zfsutilsi /opt/linux-headers-legacy-rockchip-rk356x_1.x.x_arm64.deb'''</p>|}</li><li><p>安装完后在'''/usr/src'''下就能看到内核头文件所在的文件夹</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''ls /usr/src'''</p><p>linux zfs-dkmsheaders-5.10.160-rockchip-rk356x</p>|}</li><li><p>然后可以编写一个hello内核模块测试下内核头文件</p><ol style="list-style-type: lower-alpha;"><li><p>首先编写hello内核模块的代码,如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''vim hello.c'''</p><p>#include &lt;linux/init.h&gt;</p><p>#include &lt;linux/module.h&gt;</p>
<span id="创建zfs池的方法"></span>
=== 创建ZFS池的方法 ===
'''ZFS是基于存储池的,我们可以将多个物理存储设备添加到池中,然后从这个池中分配存储空间。'''<p>static int hello_init(void)</p><p>{</p>:<p>printk(&quot;Hello Orange Pi -- init\n&quot;);</p>
'''下面的内容是基于开发板接了一个NVMe SSD和一个U盘来演示的。'''
<ol style="list-style-type: decimal;"><li><p>首先我们可以通过'''lsblk'''命令查看下开发板所有的存储设备,当前开发板接了一个NVMe SSD以及一个U盘,输出如下所示:return 0;</p><p>[[File:media/image371.png|379x227px]]}</p></li><li><p>然后输入下面的命令可以创建一个ZFS池,包含NVMe SSD和U盘两个存储设备</p><p>orangepi@orangepi:~$ '''sudo zpool create -f pool1 /dev/nvme0n1 /dev/sda'''static void hello_exit(void)</p></li><li><p>然后使用'''zpool list'''命令可以看到系统已经创建了一个名为'''pool1'''的ZFS池,并且ZFS池pool1的大小是NVME SSD的大小加上U盘的大小{</p><p>[[File:media/image372.png|576x37px]]</p></li><li><p>然后执行'''df -h'''可以看到'''pool1'''被挂载到了'''/pool1'''目录</p><p>orangepi@orangepi:~$ '''df -h'''</p><p>Filesystem Size Used Avail Use% Mounted on</p><p>tmpfs 1.6G 18M 1.6G 2% /run</p><p>/dev/mmcblk0p2 29G 6.0G 22G 22% /</p><p>tmpfs 7.7G 46M 7.7G 1% /dev/shm</p><p>tmpfs 5.0M 4.0K 5.0M 1% /run/lock</p><p>tmpfs 7.7G 944K 7.7G 1% /tmp</p><p>/dev/mmcblk0p1 1022M 115M 908M 12% /boot</p><p>/dev/zram1 188M 4.5M 169M 3% /var/log</p><p>tmpfs 1.6G 80K 1.6G 1% /run/user/1000</p><p>'''pool1 489G 9.3M 489G 1% /pool1'''</p></li><li><p>使用下面的命令可以看到pool1的文件系统类型为zfs</p><p>orangepi@orangepi:~$ '''mount | grep pool1'''</p><p>pool1 on /pool1 type '''zfs''' printk(rw,xattr,noacl)</p></li><li><p>然后我们可以测试下拷贝一个文件到ZFS池中</p><p>orangepi@orangepi:~$ '''sudo cp &quot;Hello Orange Pi -v /usr/local/test.mp4 /pool1/'''</p><p>'/usr/local/test.mp4' -exit\n&gtquot;); '/pool1/test.mp4'</p></li></ol>
<span id="测试zfs的数据去重功能"></span>
=== 测试ZFS的数据去重功能 ===
<ol style="list-style-type: decimal;"><li><p>ZFS的数据去重功能默认是关闭的,我们需要执行下面的命令打开</p><p>orangepi@orangepi:~$ '''sudo zfs set dedup=on pool1'''</p></li><li><p>然后做一个简单的测试,首先进入pool1中,再执行下面的命令生成1个1G大小的随机文件</p><p>orangepi@orangepi:~$ '''cd /pool1/'''</p><p>root@orangepi:/pool1$ '''sudo dd if=/dev/urandom of=test.1g bs=1M count=1024'''</p><p>1024+0 records in</p><p>1024+0 records out</p><p>1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.04367 s, 213 MB/sreturn;</p></li><li><p>然后使用下面的命令将1G大小的随机文件拷贝1000份}</p></li></ol>
root@orangepi:/pool1$ '''for ((i=0; i&lt;1000; i++)); do sudo cp test.1g $i.test.1g; done'''
<ol start="4" style="list-style-type: decimalp>module_init(hello_init);"</p><li>然后用'''du -lh'''可以看到目前池中总共有1002G的数据,但实际上ZFS池的大小只有'''504GB'''(SSD+U盘的总容量),是装不下那么大的数据的</lip>module_exit(hello_exit);</olproot@orangepi:/pool1$ '''du -lh'''
1002G
<ol startp>MODULE_LICENSE(&quot;GPL&quot;);</p>|}</li><li><p>然后编写编译hello内核模块的Makefile文件,如下所示:</p>{| class="5wikitable" style="listwidth:800px;" |-| <p>orangepi@orangepi:~$ '''vim Makefile'''</p><p>ifneq ($(KERNELRELEASE),)</p><p>obj-m:=hello.o</p><p>else</p><p>KDIR :=/lib/modules/$(shell uname -r)/build</p><p>PWD :=$(shell pwd)</p><p>all:</p>:<p>make -C $(KDIR) M=$(PWD) modules</p><p>clean:</p>:<p>rm -f *.ko *.o *.mod.o *.mod *.symvers *.cmd *.mod.c *.order</p><p>endif</p>|}</li><li><p>然后使用make命令编译hello内核模块,编译过程的输出如下所示:</p>{| class="wikitable" style="background-typecolor: decimal#ffffdc;width:800px;">|-| <libig><p>然后用'''zpool list如果自己复制的代码这里编译如果有问题,请去[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html 官方工具]中下载源码然后上传到开发板的Linux系统中测试。'''命令可以看到实际只占用了1.01G,因为这1001个文件都是重复的,说明数据去重功能有效。</p></big><p>[[File:media/image373pi3b-img354.png|576x36pxcenter]]</p>|}{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''make'''</p><p>make -C /lib/modules/5.10.160-rockchip-35xx/build M=/home/orangepi modules</p><p>make[1]: Entering directory '/usr/src/linux-headers-5.10.160-rockchip-rk35xx'</p>:<p>CC [M] /home/orangepi/hello.o</p>:<p>MODPOST /home/orangepi/Module.symvers</p>:<p>CC [M] /home/orangepi/hello.mod.o</p>:<p>LD [M] /home/orangepi/hello.ko</lip><p>make[1]: Leaving directory '/usr/src/linux-headers-5.10.160-rockchip-rk35xx'</olp>|}<span id/li><li><p>编译完后会生成'''hello.ko'''内核模块</p>{| class="测试zfs的数据压缩功能wikitable"style="width:800px;" |-| <p>orangepi@orangepi:~$ '''ls *.ko'''</spanp><p>hello.ko</p>|}</li><li><p>使用'''insmod'''命令可以将'''hello.ko'''内核模块插入内核中</p>{| class="wikitable" style== 测试ZFS的数据压缩功能 ==="width:800px;" |-# 因为存储的数据不同,压缩节省的磁盘空间也会有所不同,所以我们选择压缩比较大的纯文本文件来进行压缩测试,执行下面的命令将| <p>orangepi@orangepi:~$ '''sudo insmod hello.ko'''</var/logp>|}</li><li><p>然后使用'''demsg'''命令可以查看下'''hello.ko'''内核模块的输出,如果能看到下面的输出说明'''/etc/hello.ko'''目录打包成tar包内核模块加载正确</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''cd dmesg | grep &quot;Hello&quot;'''</p><p>[ 2871.893988] '''Hello Orange Pi -- init'''</pool1p>|}</li><li><p>使用'''rmmod'''命令可以卸载'''hello.ko'''内核模块</p>{| class="wikitable" style="width:800px;" root|-| <p>orangepi@orangepi:~$ '''sudo rmmod hello'''</pool1p><p>orangepi@orangepi:~$ '''sudo tar dmesg | grep &quot;Hello&quot;'''</p><p>[ 2871.893988] Hello Orange Pi --cf textinit</p><p>[ 3173.tar 800892] '''Hello Orange Pi -- exit'''</varp>|}</logli></ ol></etcli></'''ol> == 树莓派5寸屏幕的使用 ==
<ol start="2" style="list-style-type: decimal;"><li><p>然后通过'''ls -lh'''命令可以看到的文件大小以及在ZFS池中占用的空间都是'''27M'''</p><p>[[File:media/image374.png|576x90px]]</p></li><li><p>然后我们在ZFS池pool1中启用压缩功能</p><p>root@orangepi:/pool1$ '''sudo zfs set compression=lz4 pool1'''</p></li><li><p>然后再次执行下面的命令将'''/var/log/'''和'''/etc/'''目录打包成tar包</p></li></ol>树莓派5寸屏幕的组装方法 ===
root@orangepi<ol style="list-style-type: decimal;"><li><p>首先准备需要的配件</p><ol style="list-style-type: lower-alpha;"><li><p>树莓派5寸MIPI LCD显示屏+触摸屏</p><p>[[File:pi3b-img355.png]]</p></li><li><p>15pin MIPI排线</p><p>[[File:pi3b-img356.png]]</pool1$ '''sudo tar p></li></ol></li><li><p>然后将15pin MIPI排线按照下图所示的方式连接到树莓派5寸屏幕上(注意绝缘面的朝向)</p><p>[[File:pi3b-cf textimg357.tar png]]</p></varli><li><p>最后连接到Orange Pi 3B开发板的LCD接口上</logp><p>[[File:pi3b-img358.png]]</ p></etcli></'''ol>
<ol start="5" style="list-style-type: decimal;"><li>这时可以看到'''text.tar'''文件大小还是27M,但是在ZFS池中只占用9.47M的空间,说明文件被压缩了</li></ol> [[File:media/image375.png|576x79px]] =打开树莓派5寸屏幕配置的方法 = 关机和重启开发板的方法 ==
<ol style="list-style-type: decimal;">
<li><p>在Linux系统运行的过程中,如果直接拔掉TypeLinux镜像默认是没有打开树莓派5寸屏幕的配置的,如果需要使用树莓派5寸屏幕,需要手动打开才行。</p></li><li><p>打开mipi lcd配置的步骤如下所示:</p><ol style="list-style-type: lower-C电源断电,可能会导致文件系统丢失某些数据或者损坏,所以在断电前请先使用alpha;"><li><p>首先运行下'''powerofforangepi-config'''命令关闭开发板的Linux系统,然后再拔掉电源。,普通用户记得加'''sudo'''权限</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo powerofforangepi-config'''</p>|}</li><li><p>然后选择'''System'''</p><p>[[File:pi3b-img359-1.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:pi3b-img360.png]]</p></li><li><p>然后使用键盘的方向键定位到raspi-7inch-touchscreen,再使用'''空格'''选中</p><p>[[File:pi3b-img361.png]]</p></li><li><p>另外开发板配有开关机按键,还可以然后选择'''短按&lt;Save&gt;'''开发板上的开关机按键来关机。保存</p><p>[[File:mediapi3b-img362.png]]</image376p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:pi3b-img363.png|294x80px]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</olp><p>[[File:pi3b-img364.png]]</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''上面的设置最终会在/boot/orangepiEnv.txt中加入<span style="color:#FF0000">overlays=raspi-7inch-touchscreen</span>这句配置。设置完后可以先检查下。如果不存在这句配置,那么设置就是有问题。'''</p><p>'''如果觉得使用orangepi-config比较麻烦,也可以使用vim编辑器打开/boot/orangepiEnv.txt,然后加入<span style="color:#FF0000">overlays=raspi-7inch-touchscreen</span> 这句配置也是可以。'''</p>
'''注意,Linux桌面版系统按下开关机按键后会弹出下图所示的确认框,需要点击Shut Down选项后才会关机。'''
[[File<p>orangepi@orangepi:media~$ '''cat /image377boot/orangepiEnv.pngtxt | grep "raspi"'''</p><p>'''<span style="color:#FF0000">overlays=raspi-7inch-touchscreen #示例配置</span>'''</p></big>|207x193px]]}</li></ol></li><li><p>启动后可以看到lcd屏幕的显示如下所示:</p></li>
<ol start="3" style="list-style-type: decimal;"><li><p>关机后短按开发板上的开关机按键即可开机。</p><p>[[File:media/image376pi3b-img365.png|294x80px]]</p></li><li><p>重启linux系统的命令为</p><p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p></li></ol>
<span id="linux-sdkorangepi-build使用说明"></span>== 服务器版镜像旋转显示方向的方法 ===
<ol style= "list-style-type: decimal;"><li><p>在'''/boot/orangepiEnv.txt'''中加入'''extraargs=fbcon=rotate:要旋转的方向'''这行配置就可以设置服务器版本的Linux系统显示的方向,其中'''fbcon=rotate:'''Linux SDK——orangepi后面的数字可以设置为:</p><ol style="list-style-type: lower-build使用说明alpha;"><li><p>0: 正常屏(默认为横屏)</p></li><li><p>1: 顺时钟转90度</p></li><li><p>2: 翻转180度</p></li><li><p>3: 顺时钟转270度</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>overlays=lcd1</p><p>''' <span style="color:#FF0000">extraargs=cma=64M fbcon=rotate:3</span>'''</p>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''注意,/boot/orangepiEnv.txt中如果默认有extraargs=cma=64M这行配置,fbcon= 编译系统需求 rotate:3这个配置添加到extraargs=cma=64M的后面即可(需要用空格隔开)。'''</p></big>|}</li></ol></li><li><p>然后'''<span style="color:#FF0000">重启</span>'''Linux系统就能看到lcd屏幕显示的方向已经旋转了</p></li></ol>
'''我们可以在x64的电脑中交叉编译开发板的Linux镜像,也可以在开发板的Ubuntu22.04系统中来编译开发板的Linux镜像,请根据自己的喜好二选一。''' '''如果是在开发板的Ubuntu22.04系统中使用orangepi-build来编译Linux镜像,请做好散热(尤其是SSD启动时)。如果散热没做好,容易出现文件系统跑飞的错误。''' <span id="使用开发板的ubuntu22.04系统编译"></span>=== 使用开发板的Ubuntu22.04系统编译 桌面版镜像旋转显示和触摸方向的方法 ===
<ol style="list-style-type: decimal;">
<li><p>Linux SDK,即首先在Linux系统中打开'''orangepi-build''',支持在开发板的'''Ubuntu 22.04'Display''的上运行(其它系统没有测试过),所以下载orangepi-build前,请首先确保开发板已安装的Ubuntu版本是Ubuntu 22.04。查看开发板已安装的Ubuntu版本的命令如下所示,如果Release字段显示的不是'''22.04''',说明当前使用的Ubuntu版本不符合要求,请更换系统后再进行下面的操作。设置</p><p>orangepi@orangepi[[File:~$ '''lsb_release pi3b-a'''</p><p>No LSB modules are availableimg366.</p><p>Distributor ID: Ubuntu</p><p>Description: Ubuntu 22.04.1 LTS</p><p>Release: '''22.04'''</p><p>Codename: jammypng]]</p></li><li><p>然后在'''由于内核和U-boot等源码都是存放在GitHub上的,所以编译镜像的时候请确保开发板能正常从GitHub下载代码,这点是非常重要的。Rotation'''</p></li></ol> <span id="使用x64的ubuntu22.04电脑编译"></span>=== 使用x64的Ubuntu22.04电脑编译 === <ol style="list-style-type: decimal;"><li><p>Linux SDK,即'''orangepi-build''',支持在安装有'''Ubuntu 22.04'''的电脑上运行,所以下载orangepi-build前,请首先确保自己电脑已安装的Ubuntu版本是Ubuntu 22.04。查看电脑已安装的Ubuntu版本的命令如下所示,如果Release字段显示的不是'''22.04''',说明当前使用的Ubuntu版本不符合要求,请更换系统后再进行下面的操作。</p><p>test@test:~$ '''lsb_release -a'''</p><p>No LSB modules are available.</p><p>Distributor ID: Ubuntu</p><p>Description: Ubuntu 22.04 LTS</p><p>Release: '''22.04'''</p><p>Codename: jammy</p></li><li><p>如果电脑安装的是Windows系统,没有安装有Ubuntu 22.04的电脑,可以考虑使用'''VirtualBox'''或者'''VMware'''来在Windows系统中安装一个Ubuntu 22.04虚拟机。但是请注意,不要在WSL虚拟机上编译orangepi-build,因为orangepi-build没有在WSL虚拟机中测试过,所以无法确保能正常在WSL中使用orangepi-build。</p></li><li><p>Ubuntu 22.04 '''amd64'''版本的安装镜像下载地址为:</p><p>[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''']</p><p>或者</p><p>'''https://repo.huaweicloud.com/ubuntu-releases/22.04/ubuntu-22.04.1-desktop-amd64.iso'''</p></li><li><p>在电脑中或者虚拟机中安装完Ubuntu 22.04后,请先设置Ubuntu 22.04的软件源为清华源,不然后面安装软件的时候很容易由于网络原因而出错中选择想要旋转的方向</p>
<ol style="list-style-type: lower-alpha;">
<li>替换清华源的方法参考这个网页的说明即可</li></ol></li></olp[https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ '''https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/None'''] <ol start="2" style="list-style-type: lower-alpha;"><li><p>注意Ubuntu版本需要切换到22.04</p><p>[[File:media/image378.png|576x241px]]不旋转</p></li><li><p>需要替换的'''/etc/apt/sources.listLeft'''文件的内容为: 向左旋转90度</p><p/li>test@test:~$ '''sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak'''</pli><p>test@test:~$ '''sudo vim /etc/apt/sources.listInverted''': 上下翻转,相当于旋转180度</p><p># 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释</pli><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse</pli><p># deb-src https'''Right'''://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse向右旋转90度</p><p>deb https[[File://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse</p><p># debpi3b-src https://mirrorsimg367.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiversepng]]</p><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</pli><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</pol><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse</pli><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse</pli><p># 预发布软件源,不建议启用然后点击'''Apply'''</p><p># deb https[[File://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse</p><p># debpi3b-src https://mirrorsimg368.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiversepng]]</p></li><li><p>替换完后需要更新下包信息,并确保没有报错然后选择'''Keep this configuration'''</p><p>test@test[[File:~$ '''sudo apt update'''pi3b-img369.png]]</p></li><li><p>此时屏幕显示就已旋转完成,然后关闭掉'''另外,由于内核和U-boot等源码都是存放在GitHub上的,所以编译镜像的时候请确保电脑能正常从GitHub下载代码,这点是非常重要的。Display'''程序即可</p></li></ol> <span id="获取linux-sdk的源码"li></spanp>== 获取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-buildset_lcd_rotate.git -b nextsh''' '''注意,Orange Pi 3B开发板是需要下载orangepi-build的next分支源码的,上面的git clone命令需要指定orangepi-build源码的分支为next。''' [[File:media脚本可以旋转下触摸的方向,此脚本设置完后会自动重启,然后就可以测试触摸是否已经能正常使用了</image379.png|576x298px]] '''通过git clone命令下载orangepi-build的代码是不需要输入github账号的用户名和密码的(下载本手册中的其他代码也是一样的),如果如输入git clone命令后Ubuntu PC提示需要输入github账号的用户名和密码,一般都是git clone后面的orangepi-build仓库的地址输入错误了,请仔细检查命令拼写是否有错误,而不是以为我们这里忘了提供github账号的用户名和密码。'''p><ol start="2" style="list-style-type: decimallower-alpha;"><li>开发板当前使用的u-boot和linux内核版本如下所示</lip>'''None''': 不旋转</olp> {| class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''分支set_lcd_rotate.sh none'''</p>| }</li><li><p>'''u-boot版本Left''': 向左旋转90度</p>{| '''linux内核版本'''class="wikitable" style="width:800px;"
|-
| '''legacy'''| '''u-boot 2017.09'''| <p>orangepi@orangepi:~$ '''linux5set_lcd_rotate.10sh left'''</p>
|}
</li>
<li><p>'''Inverted''': 上下翻转,相当于旋转180度</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''set_lcd_rotate.sh inverted'''</p>
|}
</li>
<li><p>'''Right''': 向右旋转90度</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''set_lcd_rotate.sh right'''</p>
|}
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''set_lcd_rotate.sh脚本主要做四件事:'''</p>
'''这里所说的分支和orangepi-build源代码的分支不是同一个东西,请不要搞混了。此分支主要是用来区分不同内核源码版本的。''' '''目前RK提供的linux5.10 bsp内核我们定义为legacy分支。如果以后支持主线内核了,就会添加一个current分支。''' <ol start="3" style="list-style-type: decimal;"><li><p>orangepi-build下载完后会包含下面的文件和文件夹</p><ol style="list-style-type: lower-alpha;"><li><p>'''build.sh旋转framebuffer显示的方向''': 编译启动脚本</p></li><li><p>'''external旋转触摸的方向''': &gt; 包含编译镜像需要用的配置文件、特定的脚本以及部分程序的源码等</p></li><li><p>'''LICENSE关闭开机logo''': 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></li></ol> === 下载交叉编译工具链 ===
<p>'''只有在x64的电脑中使用orangepi旋转触摸的方向是通过在/usr/share/X11/xorg.conf.d/40-build编译镜像才会下载交叉编译工具链。在开发板的Ubuntu22libinput.04中编译开发板的linux镜像是不会下载交叉编译工具链的,此时orangepiconf中加入Option &quot;TransformationMatrix&quot; &quot;x x x x x x x x x&quot;这行配置来实现的。其中&quot;x x x x x x x x x&quot;不同的方向配置不同。'''</p></big>|}</li></ol></li></ol><!-- --><ol start="7" style="list-style-buildtype: decimal;"><li><p>触摸旋转参考资料</p>{| class="wikitable" style="width:800px;" |-| <p>[https://wiki.ubuntu.com/X/InputCoordinateTransformation '''https://wiki.ubuntu.com/toolchains会是一个空文件夹。X/InputCoordinateTransformation''']</p>|}</li></ol>
== eDP屏幕的使用方法 ==
=== eDP屏幕的组装方法 ===
<ol style="list-style-type: decimal;">
<li><p>orangepi-build第一次运行的时候会自动下载交叉编译工具链放在'''toolchains'''文件夹中,每次运行orangepi-build的build目前仅适配了一款15.sh脚本后,都会检查'''toolchains'''中的交叉编译工具链是否都存在,如果不存在则会重新开始下载,如果存在则直接使用,不会重复下载。6寸的eDP屏幕,包含的配件如下:</p></li><div classol style="figurelist-style-type: lower-alpha;"><li><p>0.5间距30pin单头同向排线</p><p>[[File:pi3b-11.png]]</p></li><li><p>15.6寸 eDP显示屏,分辨率为1920x1080。</p><p>[[File:pi3b-12-1.png]]</p></li></ol><li><p>将30pin单头同向排线的FPC端连接到开发板的eDP接口,另一端连接到屏幕的eDP接口</p></li><p>[[File:pi3b-13-1.png]]</p></ol>
[[File=== 打开eDP屏幕配置的方法 ===<ol style="list-style-type:media/image380.png|575x278px|选区_396]]decimal;"><li><p>Linux镜像默认是没有打开eDP屏幕的配置的,如果需要使用eDP屏幕,需要手动打开才行。</divp></li><li><p>交叉编译工具链在中国境内的镜像网址为清华大学的开源软件镜像站打开eDP屏配置的步骤如下所示:</p><p>[https://mirrors.tuna.tsinghua.edu.cn/armbianol style="list-style-releases/_toolchain/ '''httpstype://mirrors.tuna.tsinghua.edu.cn/armbianlower-releases/_toolchain/''']</p></lialpha;"><li><p>首先运行下'''orangepi-config'''toolchains,普通用户记得加'''下载完后会包含多个版本的交叉编译工具链,开发板只会使用其中的两个sudo'''权限</p>{| class="wikitable" style="width:800px;" |-| <p>testorangepi@testorangepi:~/orangepi-build$ '''ls toolchains/sudo orangepi-config'''</p>|}<p/li>gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu</pli><p>gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf然后选择'''System'''</p><p>gcc[[File:pi3b-arm-914.2-2019.12-x86_64-aarch64-none-linux-gnupng]]</p><p>gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf</pli><pli>gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi</p><p>gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf然后选择'''Hardware'''</p><p>gcc[[File:pi3b-linaro-715.4.1-2019.02-x86_64_aarch64-linux-gnupng]]</p><p>gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi</pli><pli>gcc-linaro-aarch64-none-elf-4.8-2013.11_linux</p><p>gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux然后使用键盘的方向键定位到edp,再使用空格选中</p><p>gcc-linaro-arm-none[[File:pi3b-eabi-416.8-2014.04_linuxpng]]</p></li><li><p>编译linux内核源码使用的交叉编译工具链为然后选择'''</pSave><ol style="list-style-type: lower-alpha;"><li><p>linux5.10'''保存</p><p>'''gcc-arm[[File:pi3b-1117.2-2022.02-x86_64-aarch64-none-linux-gnu'''png]]</p></li></ol>
</li>
<li><p>编译u-boot源码使用的交叉编译工具链为</p><ol style="list-style-type: lower-alpha;"><li><p>v2017.09</p><p>'''gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu然后选择'''</p></li></ol></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仓库如下所示:</p><pBack>'''https://github.com/orangepi-xunlong/linux-orangepi/tree/orange-pi-5.10-rk35xx'''</p></li><li><p>u-boot源码存放的git仓库如下所示:</p><p>'''https[[File://github.com/orangepipi3b-xunlong/u-boot-orangepi/tree/v201718.09-rk3588'''png]]</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><pReboot>'''external''': &gt; 包含编译镜像需要用的配置文件、特定功能的脚本以及部分程序的源码,编译镜像过程中缓存的rootfs压缩包也存放在external中重启系统使配置生效</p></li><li><p>'''kernel'''[[File: &gt; 存放linux内核的源码,里面名为'''orange-pipi3b-519.10-rk35xx'''的文件夹存放的就是RK3588/RK3588S/RK3566系列开发板legacy分支的内核源码,内核源码的文件夹的名字请不要手动修改,如果修改了,编译系统运行时会重新下载内核源码png]]</p></li><li><p>'''LICENSE'''{| class="wikitable" style="background-color: GPL 2许可证文件</p></li><li><p>'''README.md'''#ffffdc;width: orangepi-build说明文件</p></li>800px;" <li><p>'''output''': &gt; 存放编译生成的u|-boot、linux等deb包、编译日志以及编译生成的镜像等文件</p></li><li><p>'''scripts''': 编译linux镜像的通用脚本</p></li>| <libig><p>'''toolchains''': 存放交叉编译工具链<上面的设置最终会在/p></li><li><p>'''u-boot''': &gt; 存放u-boot的源码,里面名为'''v2017.09-rk3588'''的文件夹存放的就是RK3588/RK3588S/RK3566系列开发板legacy分支的u-boot源码,u-boot源码的文件夹的名字请不要手动修改,如果修改了,编译系统运行时会重新下载u-boot源码</p></li><li><p>'''userpatches''': 存放编译脚本需要用到的配置文件</p><p>test@test:~/orangepi-build$ '''ls'''</p><p>'''buildorangepiEnv.sh external kernel LICENSE output README.md scripts toolchains u-boot userpatchestxt中加入overlays=edp这句配置。设置完后可以先检查下。如果不存在这句配置,那么设置就是有问题。'''</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 .如果觉得使用orangepi-config比较麻烦,也可以使用vim编辑器打开/boot/buildorangepiEnv.shtxt,然后加入overlays=edp 这句配置也是可以。'''</p></li><li><p>选择'''U-boot package''',然后回车</p><div class="figure">
[[File:media/image381.png|576x132px|选区_238]]
</div></li><li><p>接着选择开发板的型号</p><div class="figure"> [[Fileorangepi@orangepi:media/image382.png|576x197px|}4~$_5F06}}0R4GU8]OVO}4E]] </div></li><li><p>然后就会开始编译u-boot,编译时提示的部分信息说明如下</p><ol style="list-style-type: lower-alpha;"><li><p>u-boot源码的版本</p><p>[ o.k. ] Compiling u-boot [ '''v2017.09''' ]</p></li><li><p>交叉编译工具链的版本</p><p>[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 7.4.1''' ]</p><cat /li><li><p>编译生成的u-boot deb包的路径</p><p>[ oorangepiEnv.k. ] Target directory [ txt | grep "edp"'''orangepi-build/output/debs/u-boot''' ]</p></li><li><p>编译生成的u-boot deb包的包名</p><p>[ o.k. ] File name [ '''linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deboverlays=edp #示例配置''' ]</p></libig><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=orangepi3b BRANCH=legacy BUILD_OPT=u-boot KERNEL_CONFIGURE=no''' ]</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-legacy-orangepi3b_1.0.0_arm64.deb</p></li><li><p>生成的u-boot的deb包包含的文件如下所示</p><ol style="list-style-type: lower-alpha;"><li><p>使用下面的命令可以解压deb包</p><p>test@test:~/orangepi-build$ '''cd output/debs/u-boot'''</p><p>test@test:~/orangepi_build/output/debs/u-boot$ $ '''dpkg -x''' \</p><p>'''linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb . (注意命令最后有个”.”)'''</p><p>test@test:~/orangepi_build/output/debs/u-boot$ '''ls'''</p><p>linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb '''usr'''</p></li><li><p>解压后的文件如下所示</p><p>test@test:~/orangepi-build/output/debs/u-boot$ '''tree usr'''</p><p>usr</p><p>└── lib</p><p>├── linux-u-boot-legacy-orangepi3b_1.0.0_arm64</p><p>│   ├── idbloader.img</p><p>│   ├── rkspi_loader.img</p><p>│   └── u-boot.itb</p><p>└── u-boot</p><p>├── LICENSE</p><p>├── orangepi-3b-rk3566_defconfig</p><p>└── platform_install.sh</p><p>3 directories, 6 files</p></li></ol>
</li>
<li><p>orangepi-bulid编译系统编译u-boot源码时首先会将u-boot的源码和github服务器的u-boot源码进行同步,所以如果想修改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>IGNORE_UPDATES=&quot;'''yes'''&quot;启动后可以看到eDP屏幕的显示如下所示:</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-legacy-orangepi3b_1.0.0_arm64.deb [mailto:root@192.168.1.xxx:/root root@192.168.1.xxx:/root]'''</p></li><li><p>然后登录到开发板,卸载已安装的u-boot的deb包</p><p>root@orangepi:~# '''apt purge -y linux-u-boot-orangepi3b-legacy'''</p></li><li><p>再安装刚才上传的新的u-boot的deb包</p><p>root@orangepi:~# '''dpkg -i''' '''linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb'''</p></li><li><p>然后运行 nand-sata-install脚本</p><p>root@orangepi:~# '''nand-sata-install'''</p></li><li><p>然后选择'''5 Install/Update the bootloader on SD/eMM'''来更新TF卡中的u-boot或者'''7 Install/Update the bootloader on SPI Flash'''来更新SPI Flash中的u-boot</p><p>[[File:media/image383.png|312x152px]]</p></li><li><p>按下回车键后首先会弹出一个Warring</p><p>[[File:media/image384.png|309x168px]]</p></li><li><p>再按下回车键就会开始更新upi3b-boot,更新完后会显示下面的信息</p><p>[[File:media/image38520.png|244x137px]]</p></li><li><p>然后就可以重启开发板来测试u-boot的修改是否生效了</p></li></ol></li><li><p>其它有用的信息</p><ol style="list-style-type: lower-alpha;"><li><p>u-boot 2017.09源码中,开发板使用的defconfig配置文件为</p><p>[https://github.com/orangepi-xunlong/u-boot-orangepi/blob/v2017.09-rk3588/configs/orangepi_5_defconfig '''orangepi-build/u-boot/v2017.09-rk3588/configs/orangepi-3b-rk3566_defconfig''']</p></li><li><p>u-boot 2017.09源码中,开发板使用dts文件为</p></li></ol></li></ol>
<span id="orangepi-buildu-bootv2017.09-rk3588archarmdtsrk3566-orangepi-3b.dts编译linux内核"></span>[https://github.com/orangepi-xunlong/u-boot-orangepi/blob/v2017.09-rk3588/arch/arm/dts/rk3588s-orangepi-5.dts '''orangepi-build/u-boot/v2017.09-rk3588/arch/arm/dts/rk3566-orangepi-3b.dts'''] == 编译linux内核 开关机logo使用说明 ==
<ol style="list-style-type: decimal;">
<li><p>运行build开关机logo默认只在桌面版的系统中才会显示</p></li><li><p>在'''/boot/orangepiEnv.sh脚本,记得加sudo权限txt'''中设置'''bootlogo'''变量为'''false'''可以关闭开关机logo</p>{| class="wikitable" style="width:800px;" |-| <p>testorangepi@testorangepi:~$ '''vim /boot/orangepiEnv.txt'''</p><p>verbosity=1</p><p>'''<span style="color:#FF0000">bootlogo=false</span>'''</p>|}</li><li><p>在'''/boot/orangepiEnv.txt'''中设置'''bootlogo'''变量为'''true'''可以开启开关机logo</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi-build:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>verbosity=1</p><p>'''<span style="color:#FF0000">bootlogo=true</span>'''</p>|}</li><li><p>开机logo图片在Linux系统中的位置为</p>{| class="wikitable" style="width:800px;" |-| <p>'''/buildusr/share/plymouth/themes/orangepi/watermark.shpng'''</p>|}</li><li><p>选择替换开机logo图片后需要运行下命令才能生效</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''Kernel packagesudo update-initramfs -u''',然后回车</p>|}<div class/li></ol> <span id="figurezfs文件系统的使用方法"></span>
[[File:media/image386.png|575x116px|选区_240]]== ZFS文件系统的使用方法 ==
</divspan id="安装zfs的方法"></lispan><li><p>接着选择开发板的型号</p><div class="figure">== 安装ZFS的方法 ===
[[File{| class="wikitable" style="background-color:#ffffdc;width:media800px;" |-| <big>'''安装zfs前,请先确保使用的Linux镜像为最新版本。另外,如果系统中已经安装了zfs,就无需重复安装了。'''</image382.png|576x197pxbig>|}4$_5F06}}0R4GU8]OVO}4E]]
</div></li><li><p>然后会提示是否需要显示内核配置界面,如果不需要修改内核配置,则选择第一个即可,如果需要修改内核配置,则选择第二个</p><p>安装zfs前首先需要安装内核头文件,安装内核头文件的方法请参考[[File:media/image387.pngOrange Pi 3B#安装内核头文件的方法|576x87px]]</p></li><li><p>如果第4) 步选择了需要显示内核配置菜单(第二个选项),则会弹出通过'''make menuconfig安装内核头文件的方法'''打开的内核配置的界面,此时可以直接修改内核的配置,修改完后再保存退出即可,退出后会开始编译内核源码</p><p>[[File:media/image388.png|575x400px]]</p></li></ol>小节的说明。
<!-- --><ol style="list-style-type: lower-alpha;"><li><p>如果不需要修改内核的配置选项,在运行build在Ubuntu20.sh脚本时,传入'''KERNEL_CONFIGURE=no'''就可临时屏蔽弹出内核的配置界面了</p><p>test@test:~/orangepi-build$ '''sudo 04、Ubuntu22./build04和Debian11系统中,zfs是无法通过apt直接安装的,这是因为默认的apt源中zfs版本低于2.sh KERNEL_CONFIGURE=no'''</p></li><li><p>也可以设置'''orangepi-build/userpatches/config-default1.conf'''配置文件中的'''KERNEL_CONFIGURE=no''',这样可以永久禁用这个功能</p></li><li><p>编译内核的时候如果提示下面的错误,这是由于Ubuntu &gt; PC的终端界面太小,导致'''make &gt; menuconfig'''的界面无法显示,请把Ubuntu &gt; PC的终端调到最大,然后重新运行build6,存在和rk Linux5.sh脚本</p><p>[[File:media/image38910内核不兼容的问题,这个问题在zfs的2.png|574x234px]]</p></li></ol>1.6及以后的版本中得到了修复。
<!-- --><ol start="6" style="list-style-type为了解决这个问题,我们提供了能正常安装的zfs的deb包,可以从开发板的[http: decimal;"><li><p>编译内核源码时提示的部分信息说明如下</p><ol style="list-style-type: lower-alpha;"><li><p>linux内核源码的版本</p><p>[ owww.korangepi. ] Compiling current kernel [ '''5.10.160''' ]<cn/html/p><hardWare/li><li><p>使用的交叉编译工具链的版本<computerAndMicrocontrollers/p><p>[ o.k. ] Compiler version [ '''aarch64service-noneand-linuxsupport/Orange-gnuPi-gcc 11.23B.1html ''' ]</p></li><li><p>内核默认使用的配置文件以及它存放的路径</p><p>[ o.k. ] Using kernel config file [ '''config/kernel/linux-rockchip-rk356x-legacy.config官方工具''' ]</p></li><li><p>编译生成的内核相关的deb包的路径</p><p>[ o.k. ] Target directory [ 中下载到。打开'''orangepi-build/output/debs/官方工具''' ]</p></li><li><p>编译生成的内核镜像deb包的包名</p><p>[ o.k. ] File name [ ,然后进入'''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.debUbuntu和Debian系统使用的zfs相关的deb包''' ]</p></li><li><p>编译使用的时间</p><p>[ o文件夹后,可以看到Ubuntu20.k04、Ubuntu22. ] Runtime [ '''5 min''' ]</p></li>04和Debian11三种类型的deb包,请下载需要的版本。<li><p>最后会显示重复编译上一次选择的内核的编译命令,使用下面的命令无需通过图形界面选择,可以直接开始编译内核源码</p><p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi3b BRANCH=legacy BUILD_OPT=kernel KERNEL_CONFIGURE=no''' ]</p></li></ol></li><li><p>查看编译生成的内核相关的deb包</p><ol style="list-style-typeFile: lowerpi3b-alpha;"><li><p>'''linux-dtb-legacy-rockchip-rk356x_1img370.0.0_arm64.deb'''包含内核使用的dtb文件</p></li><li><p>'''linux-headers-legacy-rockchip-rk356x_1.0.0_arm64.deb'''包含内核头文件</p></li><li><p>'''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb'''包含内核镜像和内核模块</p><p>test@test:~/orangepi-build$ '''ls output/debs/linux-*'''</p><p>output/debs/linux-dtb-legacy-rockchip-rk356x_1.0.0_arm64.deb output/debs/linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb</p><p>output/debs/linux-headers-legacy-rockchip-rk356x_1.0.0_arm64.deb</p></li></ol></li><li><p>生成的linux-image的deb包包含的文件如下所示</p><ol style="list-style-type: lower-alpha;"><li><p>使用下面的命令可以解压deb包</p><p>test@test:~/orangepi-build$ '''cd output/debs'''</p></li></ol></li></ol>png]]
test@test:~/orangepi_build/output/debs$ 下载完对应版本的zfs deb包后,请将它们上传到开发板的Linux系统中。上传方法请参考[[Orange Pi 3B#上传文件到开发板Linux系统中的方法|'''mkdir test上传文件到开发板Linux系统中的方法''']]小节的说明。
test@test:~/orangepi_build/output/debs$ 上传完成后,再在开发板Linux系统的命令行中使用'''cp \cd'''命令进入deb包的目录,然后使用下面的命令就可以安装zfs的deb包。
{| class="wikitable" style="width:800px;" |-| orangepi@orangepi:~$ '''linux-image-legacy-rockchip-rk356x_1sudo apt install .0.0_arm64/*.deb test/'''|}
test@test:~/orangepi_build/output/debs$ '''cd test'''安装完成后,使用下面的命令可以看到zfs相关的内核模块:
test{| class="wikitable" style="width:800px;" |-| orangepi@testorangepi:~/orangepi_build/output/debs/test$ '''dpkg ls /lib/modules/5.10.160-rockchip-x \rk356x/updates/dkms/'''
'''linux-image-legacy-rockchip-rk356x_1icp.0ko spl.0_arm64ko zavl.deb ko zcommon.ko zfs.ko zlua.ko znvpair.ko zunicode.ko zzstd.ko'''|}
test@test:~/orangepi_build/output/debs/test$ '''ls'''然后重启下Linux系统就能看到zfs内核模块会自动加载了:
'''boot etc lib''' linux-image-legacy-rockchip{| class="wikitable" style="width:800px;" |-rk356x_1.0.0_arm64.deb | orangepi@orangepi:~$ '''usrlsmod | grep "zfs"'''
<ol start="2" style="list-style-type: lower-alphazfs &nbsp;"><li><p>解压后的文件如下所示</p><p>test@test:~/orangepi-build/output/debs/test$ '''tree -L 2'''</p><p>.</p><p>├── boot</p><p>│   ├── config-5.10.160-rockchip-rk356x</p><p>│   ├── System.map-5.10.160-rockchip-rk356x</p><p>│   └── vmlinuz-5.10.160-rockchip-rk356x</p><p>├── etc</p><p>│   └── kernel</p><p>├── lib</p><p>│   └── modules</p><p>├── linux-image-legacy-rockchip-rk356x_1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2801664 &nbsp;&nbsp;&nbsp; 0.0_arm64.deb</p><p>└── usr</p><p>├── lib</p><p>└── share</p></li></ol>zunicode &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 327680 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
<!-- --><ol start="9" style="list-style-type: decimalzzstd &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"><li><p>orangepi-bulid编译系统编译linux内核源码时首先会将linux内核源码和github服务器的linux内核源码进行同步,所以如果想修改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=&quotnbsp;'''yes'''&quotnbsp;</p></li><li><p>如果对内核做了修改,可以使用下面的方法来更新开发板linux系统的内核和内核模块</p><ol style="list-style-type: lower-alpha&nbsp;"><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-legacy-rockchip-rk356x_1.0.0_arm64.deb root@192.168.&nbsp;&nbsp; &nbsp;&nbsp; 471040 &nbsp;&nbsp;&nbsp; 1.xxx:/root'''</p></li><li><p>然后登录到开发板,卸载已安装的linux内核的deb包</p><p>root@orangepi:~# '''apt purge -y linux-image-legacy-rockchip-rk356x'''</p></li><li><p>再安装刚才上传的新的linux内核的deb包</p><p>root@orangepi:~# '''dpkg -i linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb'''</p></li><li><p>然后重启开发板,再查看内核相关的修改是否已生效</p><p>root@orangepi:~# '''reboot'''</p></li></ol></li><li><p>其它有用的信息</p><ol style="list-style-type: lower-alpha&nbsp;"><li><p>内核配置文件存放位置如下所示,请不要到内核源码中去找开发板所使用的内核配置文件</p></li><li><p>[https://github.com/orangepi-xunlong/orangepi-build/blob/next/external/config/kernel/linux-rockchip-rk3588-legacy.config '''orangepi-build/external/config/kernel/linux-rockchip-rk356x-legacy.config''']开发板使用的dts文件所在的位置为</p></li></ol></li></ol>zfs
[https://github.com/orangepi-xunlong/linux-orangepi/blob/orange-pi-5.10-rk3588/arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5.dts '''orangepi-build/kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-3b.dts''']zlua &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 139264 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
== 编译rootfs ==zcommon &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 69632 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
<ol style="list-style-type: decimalznvpair &nbsp;"><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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 61440 &nbsp;&nbsp;&nbsp; 2 &nbsp; zfs,zcommon
<div class="figure">zavl &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16384 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
[[File:media/image390.png|576x119px|选区_241]]icp &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 221184 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
</div><ol start="3" style="list-style-type: decimalspl &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 77824 &nbsp;&nbsp;&nbsp; 6 &nbsp;"><li><p>接着选择开发板的型号</p>zfs,icp,zzstd,znvpair,zcommon,zavl<div class="figure">|}
[[File:media/image382在Debian12中,zfs的默认版本为2.png|576x197px|}4$_5F06}}0R4GU8]OVO}4E]]1.11,所以我们可以通过下面的命令直接安装zfs,再次提醒下,安装前需要确保系统已安装内核头文件的deb包。
</div></li><li><p>然后选择rootfs的类型</p><p>[[File:media/image391.png{|575x86px]]</p></li><li><p>然后选择镜像的类型</p><ol class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>'''Image with console interface &gt; (server)'''表示服务器版的镜像,体积比较小</p></li>|-| <li><p>orangepi@orangepi:~$ '''Image with desktop environmentsudo apt install -y zfsutils-linux zfs-dkms'''表示带桌面的镜像,体积比较大</p><div class="figure">|}
[[File:media<span id="创建zfs池的方法"></image392.png|576x75px|选区_245]]span>
</div></li></ol></li><li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p><div class="figure">== 创建ZFS池的方法 ===
[[File{| class="wikitable" style="background-color:#ffffdc;width:media/image393.png800px;" |576x78px-|选区_397]]<big>'''ZFS是基于存储池的,我们可以将多个物理存储设备添加到池中,然后从这个池中分配存储空间。'''
'''下面的内容是基于开发板接了一个NVMe SSD和一个U盘来演示的。'''</div></libig><li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前Ubuntu Jammy主要维护XFCE和Gnome两种桌面,Ubuntu Focal只维护XFCE桌面,Debian Bullseye主要维护XFCE和KDE桌面</p><div class="figure">|}
[[File:media/image394.png|575x99px|Selection_001]] </div><p>[[File:media/image395.png|576x74px]]</p><p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p><p>[[File:media/image396.png|575x264px]]</p></li><li><p>然后就会开始编译rootfs,编译时提示的部分信息说明如下所示</p><ol style="list-style-type: lower-alphadecimal;"><li><p>rootfs的类型</p><p>[ o.k. ] local not found [ Creating new rootfs cache for 首先我们可以通过'''jammylsblk''']</p></li><li><p>编译生成的rootfs压缩包的存放路径命令查看下开发板所有的存储设备,当前开发板接了一个NVMe SSD以及一个U盘,输出如下所示:</p><p>[ o.k[File:pi3b-img371. png] Target directory [ '''external/cache/rootfs''' ]</p></li><li><p>编译生成的rootfs压缩包的名字然后输入下面的命令可以创建一个ZFS池,包含NVMe SSD和U盘两个存储设备</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] File name [ orangepi@orangepi:~$ '''jammysudo zpool create -xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4''' ]<f pool1 /dev/p><nvme0n1 /li><li><p>编译使用的时间<dev/p><p>[ o.k. ] Runtime [ '''13 minsda''' ]</p></li></ol>|}
</li>
<li><p>查看编译生成的rootfs压缩包</p><ol style="list-style-type: lower-alpha;"><li><p>然后使用'''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4'''是rootfs的压缩包,名字各字段的含义为</p><ol style="zpool list-style-type: lower-alpha;"><li><p>'''jammy命令可以看到系统已经创建了一个名为'''表示rootfs的linux发行版的类型</p></li><li><p>'''xfce'''表示rootfs为桌面版的类型,如果为'''clipool1'''则表示服务器版类型的ZFS池,并且ZFS池pool1的大小是NVME SSD的大小加上U盘的大小</p></li><li><p>'''arm64'''表示rootfs的架构类型[[File:pi3b-img372.png]]</p></li><li><p>然后执行'''f930ff6ebbac1a72108a2e100762b18f'''是由rootfs安装的所有软件包的包名生成的MD5哈希值,只要没有修改rootfs安装的软件包的列表,那么这个值就不会变,编译脚本会通过这个MD5哈希值来判断是否需要重新编译rootfs</p></li></ol></li><li><p>df -h'''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.list可以看到'''列出了rootfs安装的所有软件包的包名</p><p>test@test:~/orangepi-build$ pool1'''ls external/cache/rootfs/被挂载到了'''</p><p>'''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4pool1'''目录</p><p>jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.current</p>{| class="wikitable" style="width:800px;" <p>jammy|-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.list</p></li></ol></li>|<li><p>如果需要的rootfs在orangepi@orangepi:~$ '''external/cache/rootfs'''下已经存在,那么再次编译rootfs就会直接跳过编译过程,不会重新开始编译,编译镜像的时候也会去'''external/cache/rootfsdf -h'''下查找是否已经有缓存可用的rootfs,如果有就直接使用,这样可以节省大量的下载编译时间。</p></li></olbr>
== 编译linux镜像 ==Filesystem &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Size &nbsp;&nbsp;&nbsp; Used Avail Use% Mounted on
<ol style="list-style-type: decimaltmpfs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"><li><p>运行build 1.sh脚本,记得加sudo权限</p><p>test@test:~/orangepi-build$ '''sudo 6G &nbsp;&nbsp;&nbsp; 18M 1.6G 2% /build.sh'''run </p></li><li><p>选择'''Full OS image for flashing''',然后回车</p></li></olbr>
/dev/mmcblk0p2 &nbsp;&nbsp;&nbsp; 29G &nbsp;&nbsp;&nbsp; 6.0G 22G 22% / <div class="figure"br>
[[File:mediatmpfs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.7G &nbsp;&nbsp;&nbsp; 46M 7.7G 1% /dev/image397.png|576x128px|选区_242]]shm <br>
<tmpfs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.0M &nbsp;&nbsp;&nbsp; 4.0K 5.0M 1% /div><ol start="3" style="list-style-type: decimal;"><li><p>然后选择开发板的型号<run/p>lock <div class="figure"br>
[[File:mediatmpfs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.7G &nbsp;&nbsp;&nbsp; 944K 7.7G 1% /image382.png|576x197px|}4$_5F06}}0R4GU8]OVO}4E]]tmp <br>
</div>dev/mmcblk0p1 &nbsp;&nbsp;&nbsp; 1022M &nbsp;&nbsp;&nbsp; 115M 908M 12% /boot </libr><li><p>然后选择rootfs的类型</p><p>[[File:media/image391.png|575x86px]]<dev/p></li><li><p>然后选择镜像的类型</p><ol style="list-style-type: lower-alphazram1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 188M &nbsp;&nbsp;"><li><p>'''Image with console interface &gtnbsp; (server)'''表示服务器版的镜像,体积比较小<4.5M 169M 3% /p><var/li><li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p>log <div class="figure"br>
[[File:mediatmpfs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.6G &nbsp;&nbsp;&nbsp; 80K 1.6G 1% /image392.png|576x75px|选区_245]]run/user/1000 <br>
'''pool1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 489G &nbsp;&nbsp;&nbsp; 9.3M 489G 1% <span style="color:#FF0000">/pool1</divspan>''' <br>|}</li><li><p>使用下面的命令可以看到pool1的文件系统类型为zfs</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''mount | grep pool1'''</p><p>pool1 on /pool1 type '''<span style="color:#FF0000">zfs</span>''' (rw,xattr,noacl)</olp>|}
</li>
<li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多(然后我们可以测试下拷贝一个文件到ZFS池中</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了sudo cp -v /usr/local/test.mp4 /pool1/'''</p><div class="figure"p>'/usr/local/test.mp4' -&gt; '/pool1/test.mp4'</p>|}</li></ol>
[[File:media<span id="测试zfs的数据去重功能"></image393.png|569x77px|选区_397]]span>
</div></li><li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前Ubuntu Jammy主要维护XFCE和Gnome两种桌面,Ubuntu Focal只维护XFCE桌面,Debian Bullseye主要维护XFCE和KDE桌面</p><div class="figure">== 测试ZFS的数据去重功能 ===
[[File<ol style="list-style-type:mediadecimal;"><li><p>ZFS的数据去重功能默认是关闭的,我们需要执行下面的命令打开</image394p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo zfs set dedup=on pool1'''</p>|}</li><li><p>然后做一个简单的测试,首先进入pool1中,再执行下面的命令生成1个1G大小的随机文件</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''cd /pool1/'''</p><p>root@orangepi:/pool1$ '''sudo dd if=/dev/urandom of=test.1g bs=1M count=1024'''</p><p>1024+0 records in</p><p>1024+0 records out</p><p>1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.png04367 s, 213 MB/s</p>|575x99px|Selection_001]]}</li><li><p>然后使用下面的命令将1G大小的随机文件拷贝1000份</p></li>
</div><p>[[File:media/image395.png{|576x74px]]</p><p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p><p>[[File:media/image396.png|575x264px]]</p></li><li><p>然后就会开始编译linux镜像,编译的大致流程如下</p><ol class="wikitable" style="list-style-typewidth: lower-alpha800px;"><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包<root@orangepi:/p></li>pool1$ '''for ((i=0; i&lt;1000; i++)); do sudo cp test.1g $i.test.1g; done'''<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 start="4" style="list-style-type: lower-alphadecimal;"><li><p>编译生成的镜像的存放路径</p><p>[ o.k. ] Done building [ 然后用'''du -lh'''可以看到目前池中总共有1002G的数据,但实际上ZFS池的大小只有'''output/images/Orangepi3b_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160/Orangepi3b_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.img504GB''' ]</p>(SSD+U盘的总容量),是装不下那么大的数据的</li><li><p>编译使用的时间</p></li></ol></li></ol>
{| class="wikitable" style="width:800px;" |-| root@orangepi:/pool1$ '''[ o.k. ] Runtime [ 19 min ]du -lh'''
1002G|}</ol><ol start="5" style="list-style-type: lower-alphadecimal;"><li><p>重复编译镜像的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译镜像然后用'''zpool list'''命令可以看到实际只占用了1.01G,因为这1001个文件都是重复的,说明数据去重功能有效。</p><p>[ o.k[File:pi3b-img373. png] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi3b BRANCH=legacy BUILD_OPT=image RELEASE=bullseye BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=yes''' ]</p></li></ol>
<span id="android-11系统的使用说明测试zfs的数据压缩功能"></span>
= '''Android 11系统的使用说明''' == 测试ZFS的数据压缩功能 ===
<span id="已支持的android版本"><# 因为存储的数据不同,压缩节省的磁盘空间也会有所不同,所以我们选择压缩比较大的纯文本文件来进行压缩测试,执行下面的命令将'''/span>== 已支持的Android版本 ==var/log/'''和'''/etc/'''目录打包成tar包
::{| class="wikitable" style="width:800px;"
|-
| '''Android版本'''| orangepi@orangepi:~$ '''内核版本cd /pool1/'''|-| root@orangepi:/pool1$ '''Android 11'''| '''Linux4sudo tar -cf text.19tar /var/log/ /etc/'''
|}
<span idol start="android2" style="list-style-功能适配情况type: decimal;"><li><p>然后通过'''ls -lh'''命令可以看到的文件大小以及在ZFS池中占用的空间都是'''27M'''</p><p>[[File:pi3b-img374.png]]</p></li><li><p>然后我们在ZFS池pool1中启用压缩功能</spanp>{| class="wikitable" style= Android 功能适配情况 ="width:800px;" |-| <p>root@orangepi:/pool1$ '''sudo zfs set compression=lz4 pool1'''</p>|}</li><li><p>然后再次执行下面的命令将'''/var/log/'''和'''/etc/'''目录打包成tar包</p></li>
{| class="wikitable" style="width:800px;"
|-
| root@orangepi:/pool1$ '''功能sudo tar -cf text.tar /var/log/ /etc/'''| }</ol><ol start="5" style="list-style-type: decimal;"><li>这时可以看到'''text.tar'''文件大小还是27M,但是在ZFS池中只占用9.47M的空间,说明文件被压缩了</li> [[File:pi3b-img375.png]]</ol> == 关机和重启开发板的方法 == <ol style="list-style-type: decimal;"><li><p>在Linux系统运行的过程中,如果直接拔掉Type-C电源断电,可能会导致文件系统丢失某些数据或者损坏,所以在断电前请先使用'''Android 11poweroff'''命令关闭开发板的Linux系统,然后再拔掉电源。</p>{| class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''USB2.0x3sudo poweroff'''</p>| }</li><li><p>另外开发板配有开关机按键,还可以'''OK短按'''开发板上的开关机按键来关机。</p><p>[[File:pi3b-img376-1.png]]</p></li> {| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big>'''USB3.0x1注意,Linux桌面版系统按下开关机按键后会弹出下图所示的确认框,需要点击Shut Down选项后才会关机。'''</big> [[File:pi3b-img377.png|center]]|}</ol><ol start="3" style="list-style-type: decimal;"><li><p>关机后短按开发板上的开关机按键即可开机。</p><p>[[File:pi3b-img376-1.png]]</p></li><li><p>重启Linux系统的命令为</p>{| '''OK'''class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''M.2 NVMe SSD启动sudo''''''reboot'''</p>| }</li></ol> <span id="linux-sdkorangepi-build使用说明"></span> = '''OKLinux SDK——orangepi-build使用说明'''= == 编译系统需求 == {| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big>'''WIFI我们可以在x64的电脑中交叉编译开发板的Linux镜像,也可以在开发板的Ubuntu22.04系统中来编译开发板的Linux镜像,请根据自己的喜好二选一。'''  '''如果是在开发板的Ubuntu22.04系统中使用orangepi-build来编译Linux镜像,请做好散热(尤其是SSD启动时)。如果散热没做好,容易出现文件系统跑飞的错误。'''</big>| } <span id="使用开发板的ubuntu22.04系统编译"></span>=== 使用x64的Ubuntu22.04电脑编译 === <ol style="list-style-type: decimal;"><li><p>Linux SDK,即'''orangepi-build''',支持在安装有'''OK<span style="color:#FF0000">Ubuntu 22.04</span>'''的电脑上运行,所以下载orangepi-build前,请首先确保自己电脑已安装的Ubuntu版本是Ubuntu 22.04。查看电脑已安装的Ubuntu版本的命令如下所示,如果Release字段显示的不是'''<span style="color:#FF0000">22.04</span>''',说明当前使用的Ubuntu版本不符合要求,请更换系统后再进行下面的操作。</p>{| class="wikitable" style="width:800px;"
|-
| <p>test@test:~$ '''蓝牙lsb_release -a'''</p><p>No LSB modules are available.</p><p>Distributor ID: Ubuntu</p><p>Description: Ubuntu 22.04 LTS</p><p>Release: '''<span style="color:#FF0000">22.04</span>'''</p><p>Codename: jammy</p>| }</li><li><p>如果电脑安装的是Windows系统,没有安装有Ubuntu 22.04的电脑,可以考虑使用'''OKVirtualBox'''或者'''VMware'''来在Windows系统中安装一个Ubuntu 22.04虚拟机。但是请注意,不要在WSL虚拟机上编译orangepi-build,因为orangepi-build没有在WSL虚拟机中测试过,所以无法确保能正常在WSL中使用orangepi-build。</p></li><li><p>Ubuntu 22.04 '''<span style="color:#FF0000">amd64</span>'''版本的安装镜像下载地址为:</p>{| class="wikitable" style="width:800px;"
|-
| <p>[https://repo.huaweicloud.com/ubuntu-releases/21.04/ubuntu-21.04-desktop-amd64.iso '''GPIO(40pin)https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/ubuntu-22.04-desktop-amd64.iso''']</p>| <p>或者</p><p>'''OKhttps://repo.huaweicloud.com/ubuntu-releases/22.04/ubuntu-22.04.1-desktop-amd64.iso'''</p>|}</li><li><p>在电脑中或者虚拟机中安装完Ubuntu 22.04后,请先设置Ubuntu 22.04的软件源为清华源,不然后面安装软件的时候很容易由于网络原因而出错</p><ol style="list-style-type: lower-alpha;"><li>替换清华源的方法参考这个网页的说明即可</li>{| class="wikitable" style="width:800px;"
|-
| [https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ '''UART(40pin)https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/''']| '''OK'''}</ol><ol start="2" style="list-style-type: lower-alpha;"><li><p>注意Ubuntu版本需要切换到22.04</p>|<p>[[File:pi3b-img378.png]]</p></li>| <li><p>需要替换的'''SPI(40pin)/etc/apt/sources.list'''文件的内容为</p>{| '''OK'''class="wikitable" style="width:800px;"
|-
| <p>test@test:~$ '''I2C(40pin)sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak'''</p>| <p>test@test:~$ '''OKsudo 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>{| class="wikitable" style="width:800px;"
|-
| <p>test@test:~$ '''PWM(40pin)sudo apt update'''</p>| }</li><li><p>'''OK<span style="color:#FF0000">另外,由于内核和U-boot等源码都是存放在GitHub上的,所以编译镜像的时候请确保电脑能正常从GitHub下载代码,这点是非常重要的。</span>'''</p></li></ol></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的代码,命令如下所示: ::{| class="wikitable" style="width:800px;"
|-
| test@test:~$ '''PWM风扇接口sudo apt-get update'''| test@test:~$ '''sudo apt-get install -y git''' test@test:~$ '''OKgit clone https://github.com/orangepi-xunlong/orangepi-build.git <span style="color:#FF0000">-b next</span>'''|}::{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big>'''3pin调试串口注意,Orange Pi 3B开发板是需要下载orangepi-build的<span style="color:#FF0000">next</span>分支源码的,上面的git clone命令需要指定orangepi-build源码的分支为next。'''</big> [[File:pi3b-img379.png|780px| '''OK'''center]]|}::{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big>'''EMMC通过git clone命令下载orangepi-build的代码是不需要输入github账号的用户名和密码的(下载本手册中的其他代码也是一样的),如果如输入git clone命令后Ubuntu PC提示需要输入github账号的用户名和密码,一般都是git clone后面的orangepi-build仓库的地址输入错误了,请仔细检查命令拼写是否有错误,而不是以为我们这里忘了提供github账号的用户名和密码。'''</big>| '''OK'''} <ol start="2" style="list-style-type: decimal;"><li>开发板当前使用的u-boot和Linux内核版本如下所示</li> {| class="wikitable" style="width:800px;text-align:center;"
|-
| '''TF卡启动分支'''| '''OKu-boot版本'''| '''Linux内核版本'''
|-
| '''HDMI 视频legacy'''| '''OKu-boot 2017.09'''| '''Linux5.10'''|}{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big>'''HDMI 音频这里所说的分支和orangepi-build源代码的分支不是同一个东西,请不要搞混了。此分支主要是用来区分不同内核源码版本的。''' '''目前RK提供的Linux5.10 bsp内核我们定义为legacy分支。如果以后支持主线内核了,就会添加一个current分支。'''</big>| }</ol><ol start="3" style="list-style-type: decimal;"><li><p>orangepi-build下载完后会包含下面的文件和文件夹</p><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''OK': orangepi-build说明文件</p></li><li><p>'''scripts''': 编译linux镜像的通用脚本</p>{| class="wikitable" style="width:800px;"
|-
| <p>test@test:~/orangepi-build$ '''LCDls'''</p>| <p>'''OKbuild.sh external LICENSE README.md scripts'''</p>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big><p>'''eDP显示如果是从github下载的orangepi-build的代码,下载完后你可能会发现orangepi-build中并没有包含u-boot和Linux内核的源码,也没有编译u-boot和Linux内核需要用到交叉编译工具链,这是正常的,因为这些东西都存放在其它单独的github仓库或者某些服务器上了(下文会详述其地址)。orangepi-build在脚本和配置文件中会指定u-boot、Linux内核和交叉编译工具链的地址,运行orangepi-build时,当其发现本地没有这些东西,会自动去相应的地方下载的。'''</p></big>|}</li></ol></li></ol> === 下载交叉编译工具链 === {| '''OK'''class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| '''千兆网口'''| '''OK'''|-| '''网口状态灯'''| '''OK'''|-| '''耳机播放'''| '''OK'''|-| '''耳机录音'''| '''OK'''|-| '''LED灯'''| '''OK'''|-| '''GPU'''| '''OK'''|-| '''NPU'''| <big>'''OK'''|只有在x64的电脑中使用orangepi-| '''VPU'''| '''OK'''|build编译镜像才会下载交叉编译工具链。在开发板的Ubuntu22.04中编译开发板的Linux镜像是不会下载交叉编译工具链的,此时orangepi-| '''RTC'''| '''OKbuild/toolchains会是一个空文件夹。'''</big>
|}
<span idol style="wifi的连接测试方法list-style-type: decimal;"><li><p>orangepi-build第一次运行的时候会自动下载交叉编译工具链放在'''toolchains'''文件夹中,每次运行orangepi-build的build.sh脚本后,都会检查'''toolchains'''中的交叉编译工具链是否都存在,如果不存在则会重新开始下载,如果存在则直接使用,不会重复下载。</spanp><div class== WIFI的连接测试方法 =="figure">
# 首先点击进入'''Setting'''[[File:pi3b-img380.png]]
</div></li><li><p>交叉编译工具链在中国境内的镜像网址为清华大学的开源软件镜像站</p>{| class="wikitable" style="width:800px;" |-| <p>[[Filehttps://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/ '''https:media/image398/mirrors.tuna.png|549x228px]tsinghua.edu.cn/armbian-releases/_toolchain/''']</p>|}<ol start/li><li><p>'''toolchains'''下载完后会包含多个版本的交叉编译工具链,开发板只会使用其中的两个</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''ls toolchains/'''</p><p>gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu</p><p>gcc-arm-11.2" -2022.02-x86_64-arm-none-linux-gnueabihf</p><p>gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu</p><p>gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf</p><p>gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi</p><p>gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf</p><p>gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu</p><p>gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi</p><p>gcc-linaro-aarch64-none-elf-4.8-2013.11_linux</p><p>gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux</p><p>gcc-linaro-arm-none-eabi-4.8-2014.04_linux</p>|}</li><li><p>编译Linux内核源码使用的交叉编译工具链为</p><ol style="list-style-type: decimallower-alpha;"><li>然后选择<p>linux5.10</p>{| class="wikitable" style="width:800px;" |-| <p>'''Network &amp; internetgcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''</p>|}</li></ol></li>[[File:media<li><p>编译u-boot源码使用的交叉编译工具链为</image399.png|565x120px]]p><ol start="3" style="list-style-type: decimallower-alpha;"><li>然后选择<p>v2017.09</p>{| class="wikitable" style="width:800px;" |-| <p>'''Wigcc-linaro-Fi7.4.1-2019.02-x86_64_aarch64-linux-gnu'''</p>|}</li></ol> [[File:media</li></image400.png|561x99px]]ol>
<ol start="4" style="list-style-type: decimal;"><li>然后打开'''Wi-Fi'''开关</li></ol> [[File:media/image401.png|560x167px]] <ol start="5" style="list-style-type: decimal;"><li><p>打开'''Wi-Fi'''后如果一切正常,就可以扫描到附近的Wi-Fi热点了</p><p>[[File:media/image402.png|561x166px]]</p></li><li><p>然后选择想连接的Wi-Fi后会弹出下图所示的密码输入界面</p><p>[[File:media/image403.png|553x237px]]</p></li><li><p>然后使用键盘输入Wi-Fi对应的密码,再使用鼠标点击虚拟键盘中的回车按钮就会开始连接Wi-Fi了</p><p>[[File:media/image404.png|553x232px]]</p></li><li><p>Wi-Fi连接成功后的显示如下图所示:</p><p>[[File:media/image405.png|558x102px]]</p></li></ol> <span id="wi-fiorangepi-hotspot的使用方法"></span>=build完整目录结构说明 = Wi-Fi hotspot的使用方法 ==
<ol style="list-style-type: decimal;">
<li><p>首先请确保以太网口已连接网线,并且能正常上网orangepi-build仓库下载完后并不包含Linux内核、u-boot的源码以及交叉编译工具链,Linux内核和u-boot的源码存放在独立的git仓库中</p></liol style="list-style-type: lower-alpha;"><li><p>然后选择'''Settings'''Linux内核源码存放的git仓库如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>[[File'''https:media/image398/github.com/orangepi-xunlong/linux-orangepi/tree/orange-pi-5.png|549x228px]]10-rk35xx'''</p>|}</li><li><p>然后选择u-boot源码存放的git仓库如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>'''Network &amp; internethttps://github.com/orangepi-xunlong/u-boot-orangepi/tree/v2017.09-rk3588'''</p>|}</li></ol></li><li><p>[[Fileorangepi-build第一次运行的时候会去下载交叉编译工具链、u-boot和Linux内核源码,成功编译完一次Linux镜像后在orangepi-build中可以看到的文件和文件夹有</p><ol style="list-style-type:media/image399lower-alpha;"><li><p>'''build.png|565x120px]]sh''': 编译启动脚本</p></li><li><p>然后选择'''Hotspot &amp; tetheringexternal''': 包含编译镜像需要用的配置文件、特定功能的脚本以及部分程序的源码,编译镜像过程中缓存的rootfs压缩包也存放在external中</p></li><li><p>[[File'''kernel''':media存放Linux内核的源码,里面名为'''orange-pi-5.10-rk35xx'''的文件夹存放的就是RK3588/image406.png|549x173px]]RK3588S/RK3566系列开发板legacy分支的内核源码,内核源码的文件夹的名字请不要手动修改,如果修改了,编译系统运行时会重新下载内核源码</p></li><li><p>然后选择'''Wi-Fi hotspotLICENSE''': GPL 2许可证文件</p></li><li><p>[[File'''README.md''':media/image407.png|548x104px]]orangepi-build说明文件</p></li><li><p>然后打开'''Wi-Fi hotspotoutput''',下图中还可以看到生成的热点的名字和密码,记住它们,在连接热点的时候要用到(如果需要修改热点的名字和密码,需要先关闭: 存放编译生成的u-boot、Linux等deb包、编译日志以及编译生成的镜像等文件</p></li><li><p>'''Wi-Fi hotspotscripts''',然后才能修改): 编译Linux镜像的通用脚本</p></li><li><p>[[File'''toolchains''':media/image408.png|551x158px]]存放交叉编译工具链</p></li><li><p>此时可以拿出你的手机,如果一切正常,在手机搜索到的WI'''u-FI列表中就能找到上图boot'''Hotspot name: 存放u-boot的源码,里面名为'''下面显示的同名(v2017.09-rk3588'''这里为 AndroidAP_6953的文件夹存放的就是RK3588/RK3588S/RK3566系列开发板legacy分支的u-boot源码,u-boot源码的文件夹的名字请不要手动修改,如果修改了,编译系统运行时会重新下载u-boot源码</p></li><li><p>''')的WIFI热点了。然后可以点击userpatches'''AndroidAP_6953: 存放编译脚本需要用到的配置文件</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''ls'连接热点,密码在上图的''</p><p>'''Hotspot passwordbuild.sh &nbsp;&nbsp;&nbsp; external &nbsp;&nbsp;&nbsp; kernel &nbsp;&nbsp;&nbsp; LICENSE &nbsp;&nbsp;&nbsp; output &nbsp;&nbsp;&nbsp; README.md &nbsp;&nbsp;&nbsp; scripts &nbsp;&nbsp;&nbsp; toolchains &nbsp;&nbsp;&nbsp; u-boot &nbsp;&nbsp;&nbsp; userpatches''' 下面可以看到</p>|}</li></ol></li></ol> == 编译u-boot ==
[[File<ol style="list-style-type:mediadecimal;"><li><p>运行build.sh脚本,记得加sudo权限</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''sudo ./image409build.pngsh'''</p>|313x238px]]}</li><li><p>选择'''U-boot package''',然后回车</p><div class="figure">
<ol start="8" style="list-style-type[[File: decimal;"><li>连接成功后显示如下图所示(不同手机界面会有区别,具体界面以你手机显示的为准)。此时就可以在手机上打开一个网页看下能否上网了,如果能正常打开网页, 说明开发板的'''WIpi3b-FI Hotspot''' 能正常使用</li></ol>img381.png]]
[[File:media</image410.png|327x165px]]div></li><li><p>接着选择开发板的型号</p><div class="figure">
== 蓝牙的测试方法 ==[[File:pi3b-img382.png]]
</div></li><li><p>然后就会开始编译u-boot,编译时提示的部分信息说明如下</p><ol style="list-style-type: decimallower-alpha;"><li><p>首先点击进入'''Setting'''u-boot源码的版本</p>{| class="wikitable" style="width:800px;" |-| <p>[o.k. ] Compiling u-boot [File:media/image398'''v2017.png|549x228px]09''' ]</p>|}</li><li><p>然后选择'''Connected devices'''交叉编译工具链的版本</p>{| class="wikitable" style="width:800px;" |-| <p>[o.k. ] Compiler version [File:media/image411'''aarch64-linux-gnu-gcc 7.4.png|547x115px]1''' ]</p>|}</li><li><p>然后点击'''Pair new device'''打开蓝牙并开始扫描周围的蓝牙设备编译生成的u-boot deb包的路径</p>{| class="wikitable" style="width:800px;" |-| <p>[o.k. ] Target directory [File:media'''orangepi-build/output/debs/image412.png|547x126px]u-boot''' ]</p>|}</li><li><p>搜索到的蓝牙设备会在'''Available devices'''下面显示出来编译生成的u-boot deb包的包名</p>{| class="wikitable" style="width:800px;" |-| <p>[[File:media/image413o.k.png|559x279px]]</p></li><li><p>然后点击想要连接的蓝牙设备就可以开始配对了,当弹出下面的界面时,请使用鼠标选择File name [ '''Pairlinux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb'''选项]</p><p>[[File:media/image414.png|522x212px]]</p>}</li><li><p>这里测试的是开发板和安卓手机蓝牙的配置过程,此时在手机上会弹出下面的确认界面,在手机上也点击配对按钮后就会开始配对过程编译使用的时间</p>{| class="wikitable" style="width:800px;" |-| <p>[[File:media/image415o.k.png|236x273px]Runtime [ '''1 min''' ]</p>|}</li><li><p>配对完成后,可以看到如下图所示的已配对的蓝牙设备重复编译u-boot的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译u-boot</p>{| class="wikitable" style="width:800px;" |-| <p>[[File:media/image416o.k.png|545x178px]]</p></li><li><p>此时可以使用手机蓝牙给开发板发送一张图片,发送后,在开发板的安卓系统中可以看到下面的确认界面,然后点击Repeat Build Options [ '''Acceptsudo ./build.sh BOARD=orangepi3b BRANCH=legacy BUILD_OPT=u-boot KERNEL_CONFIGURE=no'''就可以开始接收手机发过来的图片了]</p>|}<p/li>[[File:media/image417.png|559x238px]]</pol></li><li><p>开发板Android系统蓝牙接收到的图片可以在文件管理器中打开'''Download'''目录查看查看编译生成的u-boot deb包</p><p>[[File:media/image418.png{|573x97px]]</p></li></ol> class== 树莓派5寸屏幕的使用方法 == '''请确保使用的镜像为下面的两个版本的镜像:''' '''OrangePi3B_RK3566_Android11_lcd_v1.x.x.img''' '''OrangePi3B_RK3566_Android11_spi-nvme_lcd_v1.x.x.img''' <ol "wikitable" style="list-style-typewidth: decimal800px;"><li>|-| <p>首先需要组装好屏幕,请参考[[\l|test@test:~/orangepi-build$ '''树莓派5寸屏幕的组装方法ls output/debs/u-boot/''']]</p></li><li><p>给板子接通Typelinux-u-boot-legacy-C电源,并上电,系统启动后,就可以看到屏幕显示如下图所示orangepi3b_1.0.0_arm64.deb</p><p>[[File:media/image419.png|516x332px]]</p>}</li></ol> <span id="pin-接口-gpiouartspi-和-pwm-测试"li></spanp>== 40pin 接口 GPIO、UART、SPI 和 PWM 测试 == <span id="pin生成的u-gpio-口测试">boot的deb包包含的文件如下所示</spanp>=== 40pin GPIO 口测试 === <ol style="list-style-type: decimallower-alpha;"><li><p>首先点击wiringOP图标打开wiringOP APP使用下面的命令可以解压deb包</p>{| class="wikitable" style="width:800px;" |-| <p>[[Filetest@test:media~/image420.png|576x210px]]orangepi-build$ '''cd output/debs/u-boot'''</p></li><li><p>wiringOP APP的主界面显示如下图所示,然后点击test@test:~/orangepi_build/output/debs/u-boot$ $ '''GPIO_TESTdpkg -x'''按钮打开GPIO测试界面\</p><p>[[File:media/image421'''linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb . (注意命令最后有个”.png|575x148px]]”)'''</p></li><li><p>GPIO测试界面如下图所示,左边的两排'''CheckBox'''按钮跟40pin引脚是一一对应的关系。当勾选'''CheckBox'''按钮时,对应的GPIO引脚会被设置为'''OUT'''模式,引脚电平设置为高电平;当取消勾选时,GPIO引脚电平设置为低电平;当点击右边的'test@test:~/orangepi_build/output/debs/u-boot$ ''GPIO READALL'ls''按钮时,可以获取到wPi号、GPIO模式、引脚电平等信息;当点击'''BLINK ALL GPIO'''按钮时,程序会控制28个GPIO口不停的切换高低电平</p><p>[[File:media/image422linux-u-boot-legacy-orangepi3b_1.0.0_arm64.png|576x303px]]deb '''usr'''</p>|}</li><li><p>然后点击'''GPIO READALL'''按钮,输出信息如下图所示:解压后的文件如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>[[Filetest@test:media~/orangepi-build/image423.png|575x323px]]<output/p><debs/li><li><p>开发板40pin中总共有28个GPIO口可以使用,下面以7号引脚——对应GPIO为GPIO4_A4 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平。首先点击7号引脚对应的''u-boot$ 'CheckBox''tree usr'按钮,当按钮为选中状态时,7号引脚会设置为高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''3.3v''',说明设置高电平成功</p><p>[[File:mediausr</image424.png|258x349px]]p></p>└── lib</lip><li>:<p>然后点击'''GPIO READALL'''按钮,可以看到当前的7号引脚模式为'''OUT''',引脚电平为高电平├── linux-u-boot-legacy-orangepi3b_1.0.0_arm64</p>:<p>[[File:media/image425│   ├── idbloader.png|574x301px]]img</p></li><li>:<p>再次点击下图的'''CheckBox'''按钮取消勾选状态,7号引脚会设置为低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''0v''',说明设置低电平成功│   ├── rkspi_loader.img</p>:<p>[[File:media/image426│   └── u-boot.png|250x345px]]itb</p>:<p>└── u-boot</lip><li>::<p>然后点击'''GPIO READALL'''按钮,可以看到当前的7号引脚模式为OUT,引脚电平为低电平├── LICENSE</p>::<p>[[File:media/image427.png|576x300px]]├── orangepi-3b-rk3566_defconfig</p>::</lip>└── platform_install.sh</olp>
<span id="pin的uart测试-2"></span>
=== 40pin的UART测试 ===
<p>3 directories, 6 files</p>|}</li></ol style="list-style-type: decimal;"></li><li><p>Android中默认打开了UART7和UART9,在40pin的位置如下图所示,对应的设备节点分别是orangepi-bulid编译系统编译u-boot源码时首先会将u-boot的源码和github服务器的u-boot源码进行同步,所以如果想修改u-boot的源码,首先需要关闭源码的下载更新功能('''/dev/ttyS7'''和需要完整编译过一次u-boot后才能关闭这个功能,否则会提示找不到u-boot的源码,如果是从百度云盘下载的源码压缩包,则没有这个问题,因为u-boot的源码都已缓存好了'''/dev/ttyS9'''<),否则所作的修改都会被还原,方法如下:</p><p>[[File:media设置userpatches/image271config-default.png|376x92px]]conf中的IGNORE_UPDATES变量为”yes”</p></li><li>{| class="wikitable" style="width:800px;" |-| <p>首先点击wiringOP图标打开wiringOP APP</p><p>[[Filetest@test:media~/image420.png|576x210px]]</p></li><li><p>wiringOP APP的主界面显示如下图所示,然后点击orangepi-build$ '''UART_TESTvim userpatches/config-default.conf'''按钮打开UART测试界面</p><p>[[File:mediaIGNORE_UPDATES=&quot;'''<span style="color:#FF0000">yes</image428.png|575x156px]]span>'''&quot;</p>|}</li><li><p>APP的串口测试界面如下图所示调试u-boot代码时,可以使用下面的方法来更新Linux镜像中的u-boot进行测试</p><ol style="list-style-type: lower-alpha;"></li><p>将编译好的u-boot的deb包上传到开发板的Linux系统中</olp[[File:media/image429.png{|576x324px]] <ol startclass="5wikitable" style="list-style-typewidth: decimal800px;">|-| <lip>下面以测试test@test:~/orangepi-build$ '''UART7'''为例,在选择框中选择cd output/debs/u-boot'''</p><p>test@test:~/devorangepi_build/ttyS7'''节点,在编辑框中输入想要设置的波特率,然后点击'''OPEN'''按钮打开'''output/devdebs/ttyS7u-boot$ '''节点,打开成功后,scp \'''OPEN</p><p>'''按钮变为不可选中状态,linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb root@192.168.1.xxx:/root'''CLOSE'''按钮和'''SEND'''按钮变为可选中状态</p>|}</li><li><p>然后登录到开发板,卸载已安装的u-boot的deb包</olp[[File:media/image430.png|574x166px]] <ol start{| class="6wikitable" style="list-style-typewidth: decimal800px;"><li><p>然后使用杜邦线短接uart7的RXD和TXD引脚</p>|-| <p>[[Fileroot@orangepi:media/image431.png|418x103px]]~# '''apt purge -y linux-u-boot-orangepi3b-legacy'''</p>|}</li><li><p>然后可以在下面的发送编辑框中输入一段字符,点击'''SEND'''按钮开始发送再安装刚才上传的新的u-boot的deb包</p></li></ol[[File{| class="wikitable" style="width:media/image432.png800px;" |575x161px]]-| <ol start="8" style="listp>root@orangepi:~# '''dpkg -i''' '''linux-u-boot-stylelegacy-type: decimal;"><liorangepi3b_1.0.0_arm64.deb'''</p>如果一切正常,接收框内会显示已接收到的字符串|}</li></olli[[File:media/image433.png|574x164px]] <span id="pin的spi测试"p>然后运行 nand-sata-install脚本</spanp>{| class="wikitable" style== 40pin的SPI测试 ==="width:800px;" |-| <ol style="listp>root@orangepi:~# '''nand-stylesata-type: decimal;"install'''</p>|}</li><li><p>由 40pin 接口的原理图可知,Orange Pi 3B可用的 spi 为 spi3然后选择'''5 Install/Update the bootloader on SD/eMM'''来更新TF卡中的u-boot或者'''7 Install/Update the bootloader on SPI Flash'''来更新SPI Flash中的u-boot</p><p>[[File:media/image266pi3b-img383.png|577x193px]]</p></li><li><p>这里通过w25q64模块来测试SPI接口,首先在SPI3接口接入w25q64设备按下回车键后首先会弹出一个Warning</p><p>[[File:media/image434pi3b-img384.png|373x215px]]</p></li><li><p>然后点击wiringOP图标打开wiringOP APP再按下回车键就会开始更新u-boot,更新完后会显示下面的信息</p><p>[[File:media/image420pi3b-img385.png|576x210px]]</p></li><li><p>wiringOP APP的主界面显示如下图所示,点击SPI_TEST按钮打开SPI的测试界面然后就可以重启开发板来测试u-boot的修改是否生效了</p><p/li>[[File:media/image435.png|574x149px]]</pol></li><li><p>然后点击'''OPEN'''按钮初始化SPI其它有用的信息</p></li></ol[[File:media/image436.png|576x241px]] <ol start="6" style="list-style-type: decimallower-alpha;"><li><p>然后填充需要发送的字节,比如读取w25q64的ID信息,在data[0]中填入地址0x9f,然后点击'''TRANSFER'''按钮</pu-boot 2017.09源码中,开发板使用的defconfig配置文件为</p>{| class="wikitable" style="width:800px;" |-| <p>[[Filehttps:media/image437/github.png|572x216px]]<com/orangepi-xunlong/u-boot-orangepi/p><blob/li><v2017.09-rk3588/configs/orangepi_5_defconfig '''orangepi-build/u-boot/v2017.09-rk3588/configs/orangepi-3b-rk3566_defconfig''']</p>|}</li><li><p>最后APP会显示读取到的ID信息u-boot 2017.09源码中,开发板使用dts文件为</p></li></ol> [[File:media/image438.png{|575x296px]] <ol start=class="8wikitable" style="list-style-typewidth: decimal800px;"><li><p>w25q64模块的MANUFACTURER ID为EFh,Device ID为4017h,跟上面读取到的值是对应的(h代表是16进制)</p>|-| <p>[[Filehttps:media/image439/github.png|374x126px]]<com/p><orangepi-xunlong/li>u-boot-orangepi/blob/v2017.09-rk3588/arch/arm/dts/rk3588s-orangepi-5.dts '''orangepi-build/u-boot/v2017.09-rk3588/arch/arm/dts/rk3566-orangepi-3b.dts''']|}</ol> <span id="pin的pwm测试"/li></spanol> === 40pin的PWM测试 =编译Linux内核 == <ol style="list-style-type: decimal;"><li><p>Android默认开启了运行build.sh脚本,记得加sudo权限</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''PWM11sudo ./build.sh''',对应的引脚在40pin的所在位置如下图所示</p>|}<p/li><li><p>选择'''Kernel package''',然后回车</p><div class="figure"> [[File:media/image440pi3b-img386.png|334x107px]] </pdiv></li><li><p>首先点击wiringOP图标打开wiringOP APP接着选择开发板的型号</p><pdiv class="figure"> [[File:media/image420pi3b-img382.png|576x210px]] </pdiv></li><li><p>然后在wiringOP的主界面点击'''PWM_TEST'''按钮进入PWM的测试界面</p然后会提示是否需要显示内核配置界面,如果不需要修改内核配置,则选择第一个即可,如果需要修改内核配置,则选择第二个</p><p>[[File:media/image441pi3b-img387.png|575x150px]]</p></li><li><p>PWM11对应的基地址是'''fe6f0030'如果第4) 步选择了需要显示内核配置菜单(第二个选项),则会弹出通过'',这里pwmchip0右边显示是''make menuconfig'fdd70020.pwm''', 这时需要点击下拉选项选择其它的pwmchip,直到右边显示'''febf0030.pwm'''为止打开的内核配置的界面,此时可以直接修改内核的配置,修改完后再保存退出即可,退出后会开始编译内核源码</p><p>[[File:media/image442pi3b-img388.png|576x178px]]</p> </li!-- --><ol style="list-style-type: lower-alpha;"><li><p>当下拉选项选择如果不需要修改内核的配置选项,在运行build.sh脚本时,传入'''pwmchip3'''时,右边对应的就是PWM11对应的基地址'''fe6f0030KERNEL_CONFIGURE=no'''就可临时屏蔽弹出内核的配置界面了</p>{| class="wikitable" style="width:800px;" |-| <p>[[Filetest@test:media~/image443orangepi-build$ '''sudo .png|574x161px]]/build.sh KERNEL_CONFIGURE=no'''</p>|}</li><li><p>然后确认PWM的通道,默认是0通道,并确认PWM的周期,默认的配置是也可以设置'''50000nsorangepi-build/userpatches/config-default.conf''',转换为PWM频率是配置文件中的'''20KHzKERNEL_CONFIGURE=no''',可自行修改,点击,这样可以永久禁用这个功能</p></li><li><p>编译内核的时候如果提示下面的错误,这是由于Ubuntu PC的终端界面太小,导致'''EXPORT'''按钮导出'''PWM11make menuconfig'''的界面无法显示,请把Ubuntu PC的终端调到最大,然后重新运行build.sh脚本</p><p>[[File:media/image444pi3b-img389.png|575x160px]]</p></li><li><p>然后拖动下面的拖动条,就可以改变PWM的占空比,然后勾选Enable就可以输出PWM波形了</pol></li></ol> [[File:media/image445.png|575x167px]]<!-- --><ol start="86" style="list-style-type: decimal;"><li>然后使用示波器测量开发板40pin中的第32号引脚就可以看到下面的波形了</lip>编译内核源码时提示的部分信息说明如下</olp[[File<ol style="list-style-type:media/image446.png|460x276px]]lower-alpha;"><span id="adb的使用方法"li><p>Linux内核源码的版本</spanp>{| class="wikitable" style= ADB的使用方法 =="width:800px;" |-=== 使用网络连接adb调试 ===| <p>[ o.k. ] Compiling current kernel [ '''使用网络adb无需数据线来连接电脑和开发板,而是通过网络来通信,所以首先请确保开发板的有线或者无线网络已经连接好了,然后获取开发板的IP地址,后面要用到。5.10.160''']</p>|}<ol style="list-style-type: decimal;"/li><li><p>确保Android系统的'''service使用的交叉编译工具链的版本</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k.adb] Compiler version [ '''aarch64-none-linux-gnu-gcc 11.tcp2.port1'''设置为5555端口号]</p>|}</li><li><p>console:内核默认使用的配置文件以及它存放的路径</ # '''getprop p>{| grep &quotclass="wikitable" style="width:800px;adb.tcp&quot;'''</p>" |-| <p>[service.adbo.tcpk.port]: Using kernel config file ['''5555'config/kernel/linux-rockchip-rk356x-legacy.config''']</p>|}</li><li><p>如果'''service.adb.tcp.port'''没有设置,可以使用下面的命令设置网络adb的端口号编译生成的内核相关的deb包的路径</p>{| class="wikitable" style="width:800px;" |-| </li></olpconsole:/ # '''setprop service[ o.adbk.tcp.port 5555] Target directory [ ''' console:orangepi-build/output/debs/ # '''stop adbd''' console:]</ # '''start adbd'''p>|}<ol start="3" style="list-style-type: decimal;"/li><li><p>在Ubuntu PC上安装adb工具编译生成的内核镜像deb包的包名</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ [ o.k. ] File name [ '''sudo apt updatelinux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb''']</p><p>test@test:~$ '''sudo apt install -y adb'''</p>|}</li><li><p>然后在Ubuntu PC上连接网络adb编译使用的时间</p><p>test@test{| class="wikitable" style="width:~$ '''adb connect 192800px;" |-| <p>[ o.168k.1.xxx] Runtime [ ''' 5 min'''(IP地址需要修改为开发板的IP地址)''']</p>|}</li><li><p>* daemon not running; starting now at tcp:5037最后会显示重复编译上一次选择的内核的编译命令,使用下面的命令无需通过图形界面选择,可以直接开始编译内核源码</p><p>* daemon started successfully</p>{| class="wikitable" style="width:800px;" |-| <p>connected to 192[ o.168k.1] Repeat Build Options [ '''sudo .xxx:5555/build.sh BOARD=orangepi3b BRANCH=legacy BUILD_OPT=kernel KERNEL_CONFIGURE=no''' ]</p>|}</li><p/ol>test@test:~$ '''adb devices'''</pli><li><p>List of devices attached查看编译生成的内核相关的deb包</p><pol style="list-style-type: lower-alpha;">192<li><p>'''linux-dtb-legacy-rockchip-rk356x_1.1680.10_arm64.xxx:5555 devicedeb'''包含内核使用的dtb文件</p></li><li><p>然后在Ubuntu PC上通过adb shell就可以登录到android系统</p>'''linux-headers-legacy-rockchip-rk356x_1.0.0_arm64.deb'''包含内核头文件</lip></ollitest@test:~$ <li><p>'''adb shelllinux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb''' console:包含内核镜像和内核模块</ #p>{| class= "wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''附录''ls output/debs/linux-*''' =</p> == 用户手册更新历史 <p>output/debs/linux-dtb-legacy-rockchip-rk356x_1.0.0_arm64.deb </p><p>output/debs/linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb</p><p>output/debs/linux-headers-legacy-rockchip-rk356x_1.0.0_arm64.deb</p>|}</li></ol></li><li><p>生成的linux-image的deb包包含的文件如下所示</p><ol style="list-style-type: lower-alpha;"><li><p>使用下面的命令可以解压deb包</p></li>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''cd output/debs'''</p> test@test:~/orangepi_build/output/debs$ '''mkdir test''' test@test:~/orangepi_build/output/debs$ '''cp \''' '''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb test/''' test@test:~/orangepi_build/output/debs$ '''cd test''' test@test:~/orangepi_build/output/debs/test$ '''dpkg -x \''' '''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb .''' test@test:~/orangepi_build/output/debs/test$ '''ls''' '''boot etc lib''' linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb '''usr'''|}</ol> <ol start="2" style="list-style-type: lower-alpha;"><li><p>解压后的文件如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build/output/debs/test$ '''tree -L 2'''</p><p>.</p><p>├── boot</p><p>│   ├── config-5.10.160-rockchip-rk356x</p><p>│   ├── System.map-5.10.160-rockchip-rk356x</p><p>│   └── vmlinuz-5.10.160-rockchip-rk356x</p><p>├── etc</p><p>│   └── kernel</p><p>├── lib</p><p>│   └── modules</p><p>├── linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb</p><p>└── usr</p>:<p>├── lib</p>:<p>└── share</p>|}</li></ol></li></ol><!-- --><ol start="9" style="list-style-type: decimal;"><li><p>orangepi-bulid编译系统编译Linux内核源码时首先会将Linux内核源码和github服务器的Linux内核源码进行同步,所以如果想修改Linux内核的源码,首先需要关闭源码的更新功能('''需要完整编译过一次Linux内核源码后才能关闭这个功能,否则会提示找不到Linux内核的源码,如果是从百度云盘下载的源码压缩包,则没有这个问题,因为Linux的源码都已缓存好了'''),否则所作的修改都会被还原,方法如下:</p><p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</p><p>IGNORE_UPDATES=&quot;'''<span style="color:#FF0000">yes</span>'''&quot;</p>|}</li><li><p>如果对内核做了修改,可以使用下面的方法来更新开发板Linux系统的内核和内核模块</p><ol style="list-style-type: lower-alpha;"><li><p>将编译好的Linux内核的deb包上传到开发板的Linux系统中</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''cd output/debs'''</p><p>test@test:~/orangepi-build/output/debs$ '''scp \'''</p><p>'''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb root@192.168.1.xxx:/root'''</p>|}</li><li><p>然后登录到开发板,卸载已安装的Linux内核的deb包</p>{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~# '''apt purge -y linux-image-legacy-rockchip-rk356x'''</p>|}</li><li><p>再安装刚才上传的新的Linux内核的deb包</p>{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~# '''dpkg -i linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb'''</p>|}</li><li><p>然后重启开发板,再查看内核相关的修改是否已生效</p>{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~# '''reboot'''</p>|}</li></ol></li><li><p>其它有用的信息</p><ol style="list-style-type: lower-alpha;"><li><p>内核配置文件存放位置如下所示,请不要到内核源码中去找开发板所使用的内核配置文件</p></li>{| class="wikitable" style="width:800px;" |-| [https://github.com/orangepi-xunlong/orangepi-build/blob/next/external/config/kernel/linux-rockchip-rk3588-legacy.config '''orangepi-build/external/config/kernel/linux-rockchip-rk356x-legacy.config''']|}<li><p>开发板使用的dts文件所在的位置为</p></li>{| class="wikitable" style="width:800px;" |-| [https://github.com/orangepi-xunlong/linux-orangepi/blob/orange-pi-5.10-rk3588/arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5.dts '''orangepi-build/kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-3b.dts''']|}</ol></li></ol> == 编译rootfs == <ol style="list-style-type: decimal;"><li><p>运行build.sh脚本,记得加sudo权限</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p>|}</li><li><p>选择'''Rootfs and all deb packages''',然后回车</p></li> <div class="figure"> [[File:pi3b-img390.png]] </div></ol><ol start="3" style="list-style-type: decimal;"><li><p>接着选择开发板的型号</p><div class="figure"> [[File:pi3b-img382.png]] </div></li><li><p>然后选择rootfs的类型</p><p>[[File:pi3b-img391.png]]</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:pi3b-img392.png]] </div></li></ol></li><li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p><div class="figure"> [[File:pi3b-img393.png]] </div></li><li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前Ubuntu Jammy主要维护XFCE和Gnome两种桌面,Ubuntu Focal只维护XFCE桌面,Debian Bullseye主要维护XFCE和KDE桌面</p><div class="figure"> [[File:pi3b-img394.png]] </div><p>[[File:pi3b-img395.png]]</p><p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p><p>[[File:pi3b-img396.png]]</p></li><li><p>然后就会开始编译rootfs,编译时提示的部分信息说明如下所示</p><ol style="list-style-type: lower-alpha;"><li><p>rootfs的类型</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] local not found [ Creating new rootfs cache for '''jammy''']</p>|}</li><li><p>编译生成的rootfs压缩包的存放路径</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Target directory [ '''external/cache/rootfs''' ]</p>|}</li><li><p>编译生成的rootfs压缩包的名字</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] File name [ '''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4''' ]</p>|}</li><li><p>编译使用的时间</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Runtime [ '''13 min''' ]</p>|}</li></ol></li><li><p>查看编译生成的rootfs压缩包</p><ol style="list-style-type: lower-alpha;"><li><p>'''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4'''是rootfs的压缩包,名字各字段的含义为</p><ol style="list-style-type: none;"><li><p>a) '''jammy'''表示rootfs的Linux发行版的类型</p></li><li><p>b) '''xfce'''表示rootfs为桌面版的类型,如果为'''cli'''则表示服务器版类型</p></li><li><p>c) '''arm64'''表示rootfs的架构类型</p></li><li><p>d) '''f930ff6ebbac1a72108a2e100762b18f'''是由rootfs安装的所有软件包的包名生成的MD5哈希值,只要没有修改rootfs安装的软件包的列表,那么这个值就不会变,编译脚本会通过这个MD5哈希值来判断是否需要重新编译rootfs</p></li></ol></li><li><p>'''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.list'''列出了rootfs安装的所有软件包的包名</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''ls external/cache/rootfs/'''</p><p>'''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4'''</p><p>jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.current</p><p>jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.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>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p>|}</li><li><p>选择'''Full OS image for flashing''',然后回车</p></li> <div class="figure"> [[File:pi3b-img397.png]] </div></ol><ol start="3" style="list-style-type: decimal;"><li><p>然后选择开发板的型号</p><div class="figure"> [[File:pi3b-img382.png]] </div></li><li><p>然后选择rootfs的类型</p><p>[[File:pi3b-img391.png]]</p></li><li><p>然后选择镜像的类型</p><ol style="list-style-type: lower-alpha;"><li><p>'''Image with console interface &gt; (server)'''表示服务器版的镜像,体积比较小</p></li><li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p><div class="figure"> [[File:pi3b-img392.png]] </div></li></ol></li><li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p><div class="figure"> [[File:pi3b-img393.png]] </div></li><li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前Ubuntu Jammy主要维护XFCE和Gnome两种桌面,Ubuntu Focal只维护XFCE桌面,Debian Bullseye主要维护XFCE和KDE桌面</p><div class="figure"> [[File:pi3b-img394.png]] </div><p>[[File:pi3b-img395.png]]</p><p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p><p>[[File:pi3b-img396.png]]</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>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Done building [ '''output/images/Orangepi3b_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160/Orangepi3b_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.img''' ]</p>|}</li><li><p>编译使用的时间</p></li>{| class="wikitable" style="width:800px;" |-| '''[ o.k. ] Runtime [ 19 min ]'''|}</ol><ol start="3" style="list-style-type: lower-alpha;"><li><p>重复编译镜像的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译镜像</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi3b BRANCH=legacy BUILD_OPT=image RELEASE=bullseye BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=yes''' ]</p>|}</li></ol></li></ol> <span id="android-11系统的使用说明"></span> = '''Android 11系统的使用说明''' = <span id="已支持的android版本"></span>== 已支持的Android版本 == {| class="wikitable" style="width:800px;text-align:center;" |-| style="width:400px;text-align:center;" | '''Android版本'''| '''内核版本'''|-| '''Android 11'''| '''Linux4.19'''|} <span id="android-功能适配情况"></span> == Android 功能适配情况 == {| class="wikitable" style="width:800px;text-align:center;" |-| style="width:400px;text-align:center;" | '''功能'''| '''Android 11'''|-| '''USB2.0x3'''| '''OK'''|-| '''USB3.0x1'''| '''OK'''|-| '''M.2 NVMe SSD启动'''| '''OK'''|-| '''WIFI'''| '''OK'''|-| '''蓝牙'''| '''OK'''|-| '''GPIO(40pin)'''| '''OK'''|-| '''UART(40pin)'''| '''OK'''|-| '''SPI(40pin)'''| '''OK'''|-| '''I2C(40pin)'''| '''OK'''|-| '''PWM(40pin)'''| '''OK'''|-| '''PWM风扇接口'''| '''OK'''|-| '''3pin调试串口'''| '''OK'''|-| '''EMMC'''| '''OK'''|-| '''TF卡启动'''| '''OK'''|-| '''HDMI 视频'''| '''OK'''|-| '''HDMI 音频'''| '''OK'''|-| '''LCD'''| '''OK'''|-| '''eDP显示'''| '''OK'''|-| '''Camera'''| '''<span style="color:#FF0000">NO</span>'''|-| '''千兆网口'''| '''OK'''|-| '''网口状态灯'''| '''OK'''|-| '''耳机播放'''| '''OK'''|-| '''耳机录音'''| '''OK'''|-| '''LED灯'''| '''OK'''|-| '''GPU'''| '''OK'''|-| '''NPU'''| '''OK'''|-| '''VPU'''| '''OK'''|-| '''RTC'''| '''OK'''|} <span id="wifi的连接测试方法"></span> == WIFI的连接测试方法 == # 首先点击进入'''Setting''' ::[[File:pi3b-img398.png]] <ol start="2" style="list-style-type: decimal;"><li>然后选择'''Network &amp; internet'''</li> [[File:pi3b-img399.png]]</ol><ol start="3" style="list-style-type: decimal;"><li>然后选择'''Wi-Fi'''</li> [[File:pi3b-img400.png]]</ol><ol start="4" style="list-style-type: decimal;"><li>然后打开'''Wi-Fi'''开关</li> [[File:pi3b-img401.png]]</ol><ol start="5" style="list-style-type: decimal;"><li><p>打开'''Wi-Fi'''后如果一切正常,就可以扫描到附近的Wi-Fi热点了</p><p>[[File:pi3b-img402.png]]</p></li><li><p>然后选择想连接的Wi-Fi后会弹出下图所示的密码输入界面</p><p>[[File:pi3b-img403.png]]</p></li><li><p>然后使用键盘输入Wi-Fi对应的密码,再使用鼠标点击虚拟键盘中的回车按钮就会开始连接Wi-Fi了</p><p>[[File:pi3b-img404.png]]</p></li><li><p>Wi-Fi连接成功后的显示如下图所示:</p><p>[[File:pi3b-img405.png]]</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:pi3b-img398.png]]</p></li><li><p>然后选择'''Network &amp; internet'''</p><p>[[File:pi3b-img399.png]]</p></li><li><p>然后选择'''Hotspot &amp; tethering'''</p><p>[[File:pi3b-img406.png]]</p></li><li><p>然后选择'''Wi-Fi hotspot'''</p><p>[[File:pi3b-img407.png]]</p></li><li><p>然后打开'''Wi-Fi hotspot''',下图中还可以看到生成的热点的名字和密码,记住它们,在连接热点的时候要用到(<span style="color:blue">如果需要修改热点的名字和密码,需要先关闭'''Wi-Fi hotspot''',然后才能修改</span>)</p><p>[[File:pi3b-img408.png]]</p></li><li><p>此时可以拿出你的手机,如果一切正常,在手机搜索到的WI-FI列表中就能找到上图'''Hotspot name'''下面显示的同名('''这里为 AndroidAP_6953''')的WIFI热点了。然后可以点击'''AndroidAP_6953'''连接热点,密码在上图的'''Hotspot password''' 下面可以看到</p></li> [[File:pi3b-img409.png]]</ol><ol start="8" style="list-style-type: decimal;"><li>连接成功后显示如下图所示(不同手机界面会有区别,具体界面以你手机显示的为准)。此时就可以在手机上打开一个网页看下能否上网了,如果能正常打开网页, 说明开发板的'''WI-FI Hotspot''' 能正常使用</li> [[File:pi3b-img410.png]]</ol> == 蓝牙的测试方法 == <ol style="list-style-type: decimal;"><li><p>首先点击进入'''Setting'''</p><p>[[File:pi3b-img398.png]]</p></li><li><p>然后选择'''Connected devices'''</p><p>[[File:pi3b-img411.png]]</p></li><li><p>然后点击'''Pair new device'''打开蓝牙并开始扫描周围的蓝牙设备</p><p>[[File:pi3b-img412.png]]</p></li><li><p>搜索到的蓝牙设备会在'''Available devices'''下面显示出来</p><p>[[File:pi3b-img413.png]]</p></li><li><p>然后点击想要连接的蓝牙设备就可以开始配对了,当弹出下面的界面时,请使用鼠标选择'''Pair'''选项</p><p>[[File:pi3b-img414.png]]</p></li><li><p>这里测试的是开发板和安卓手机蓝牙的配置过程,此时在手机上会弹出下面的确认界面,在手机上也点击配对按钮后就会开始配对过程</p><p>[[File:pi3b-img415.png]]</p></li><li><p>配对完成后,可以看到如下图所示的已配对的蓝牙设备</p><p>[[File:pi3b-img416.png]]</p></li><li><p>此时可以使用手机蓝牙给开发板发送一张图片,发送后,在开发板的安卓系统中可以看到下面的确认界面,然后点击'''Accept'''就可以开始接收手机发过来的图片了</p><p>[[File:pi3b-img417.png]]</p></li><li><p>开发板Android系统蓝牙接收到的图片可以在文件管理器中打开'''Download'''目录查看</p><p>[[File:pi3b-img418.png]]</p></li></ol> == 树莓派5寸屏幕的使用方法 == {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''请确保使用的镜像为下面的两个版本的镜像:''' '''OrangePi3B_RK3566_Android11_lcd_v1.x.x.img''' '''OrangePi3B_RK3566_Android11_spi-nvme_lcd_v1.x.x.img'''</big>|} <ol style="list-style-type: decimal;"><li><p>首先需要组装好屏幕,请参考[[Orange Pi 3B#树莓派5寸屏幕的组装方法|'''树莓派5寸屏幕的组装方法''']]</p></li><li><p>给板子接通Type-C电源,并上电,系统启动后,就可以看到屏幕显示如下图所示</p><p>[[File:pi3b-img419.png]]</p></li></ol> <span id="pin-接口-gpiouartspi-和-pwm-测试"></span> == eDP屏幕的使用方法 ==<ol style="list-style-type: decimal;"><li><p>目前仅适配了一款15.6寸的eDP屏幕,包含的配件如下:</p></li><ol style="list-style-type: lower-alpha;"><li><p>0.5间距30pin单头同向排线</p><p>[[File:pi3b-26.png]]</p></li><li><p>15.6寸 eDP显示屏,分辨率为1920x1080</p><p>[[File:pi3b-27.png]]</p></li></ol><li><p>将30pin单头同向排线的FPC端连接到开发板的eDP接口,另一端连接到屏幕的eDP接口</p></li><p>[[File:pi3b-28.png]]</p><li><p>再给板子接通Type-C电源,并上电,系统启动后,就可以看到屏幕显示如下图所示</p></li><p>[[File:pi3b-29-1.png]]</p></ol> == 40pin 接口 GPIO、UART、SPI 和 PWM 测试 == <span id="pin-gpio-口测试"></span>=== 40pin GPIO 口测试 === <ol style="list-style-type: decimal;"><li><p>首先点击wiringOP图标打开wiringOP APP</p><p>[[File:pi3b-img420.png]]</p></li><li><p>wiringOP APP的主界面显示如下图所示,然后点击'''GPIO_TEST'''按钮打开GPIO测试界面</p><p>[[File:pi3b-img421.png]]</p></li><li><p>GPIO测试界面如下图所示,左边的两排'''CheckBox'''按钮跟40pin引脚是一一对应的关系。当勾选'''CheckBox'''按钮时,对应的GPIO引脚会被设置为'''OUT'''模式,引脚电平设置为高电平;当取消勾选时,GPIO引脚电平设置为低电平;当点击右边的'''GPIO READALL'''按钮时,可以获取到wPi号、GPIO模式、引脚电平等信息;当点击'''BLINK ALL GPIO'''按钮时,程序会控制28个GPIO口不停的切换高低电平</p><p>[[File:pi3b-img422-1.png]]</p></li><li><p>然后点击'''GPIO READALL'''按钮,输出信息如下图所示:</p><p>[[File:pi3b-img423-1.png]]</p></li><li><p>开发板40pin中总共有28个GPIO口可以使用,下面以11号引脚——对应GPIO为GPIO3_C6 ——对应wPi序号为5——为例演示如何设置GPIO口的高低电平。首先点击7号引脚对应的'''CheckBox'''按钮,当按钮为选中状态时,11号引脚会设置为高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''3.3v''',说明设置高电平成功</p><p>[[File:pi3b-img424-1.png]]</p></li><li><p>然后点击'''GPIO READALL'''按钮,可以看到当前的7号引脚模式为'''OUT''',引脚电平为高电平</p><p>[[File:pi3b-img425.png]]</p></li><li><p>再次点击下图的'''CheckBox'''按钮取消勾选状态,11号引脚会设置为低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''0v''',说明设置低电平成功</p><p>[[File:pi3b-img426-1.png]]</p></li><li><p>然后点击'''GPIO READALL'''按钮,可以看到当前的7号引脚模式为OUT,引脚电平为低电平</p><p>[[File:pi3b-img427-1.png]]</p></li></ol> <span id="pin的uart测试-2"></span> === 40pin的UART测试 === <ol style="list-style-type: decimal;"><li><p>Android中默认打开了UART7和UART9,在40pin的位置如下图所示,对应的设备节点分别是'''/dev/ttyS7'''和'''/dev/ttyS9'''</p><p>[[File:pi3b-img271-1.png]]</p></li><li><p>首先点击wiringOP图标打开wiringOP APP</p><p>[[File:pi3b-img420.png]]</p></li><li><p>wiringOP APP的主界面显示如下图所示,然后点击'''UART_TEST'''按钮打开UART测试界面</p><p>[[File:pi3b-img428.png]]</p></li><li><p>APP的串口测试界面如下图所示</p></li> [[File:pi3b-img429.png]]</ol><ol start="5" style="list-style-type: decimal;"><li>下面以测试'''UART7'''为例,在选择框中选择'''/dev/ttyS7'''节点,在编辑框中输入想要设置的波特率,然后点击'''OPEN'''按钮打开'''/dev/ttyS7'''节点,打开成功后,'''OPEN'''按钮变为不可选中状态,'''CLOSE'''按钮和'''SEND'''按钮变为可选中状态</li> [[File:pi3b-img430.png]]</ol><ol start="6" style="list-style-type: decimal;"><li><p>然后使用杜邦线短接uart7的RXD和TXD引脚</p><p>[[File:pi3b-img431.png]]</p></li><li><p>然后可以在下面的发送编辑框中输入一段字符,点击'''SEND'''按钮开始发送</p></li> [[File:pi3b-img432.png]]</ol><ol start="8" style="list-style-type: decimal;"><li>如果一切正常,接收框内会显示已接收到的字符串</li> [[File:pi3b-img433.png]]</ol><span id="pin的spi测试"></span> === 40pin的SPI测试 === <ol style="list-style-type: decimal;"><li><p>由 40pin 接口的原理图可知,Orange Pi 3B可用的 spi 为 spi3</p><p>[[File:pi3b-img266-1.png]]</p></li><li><p>这里通过w25q64模块来测试SPI接口,首先在SPI3接口接入w25q64设备</p><p>[[File:pi3b-img434.png]]</p></li><li><p>然后点击wiringOP图标打开wiringOP APP</p><p>[[File:pi3b-img420.png]]</p></li><li><p>wiringOP APP的主界面显示如下图所示,点击SPI_TEST按钮打开SPI的测试界面</p><p>[[File:pi3b-img435.png]]</p></li><li><p>然后点击'''OPEN'''按钮初始化SPI</p></li> [[File:pi3b-img436.png]]</ol><ol start="6" style="list-style-type: decimal;"><li><p>然后填充需要发送的字节,比如读取w25q64的ID信息,在data[0]中填入地址0x9f,然后点击'''TRANSFER'''按钮</p><p>[[File:pi3b-img437.png]]</p></li><li><p>最后APP会显示读取到的ID信息</p></li> [[File:pi3b-img438.png]]</ol><ol start="8" style="list-style-type: decimal;"><li><p>w25q64模块的MANUFACTURER ID为EFh,Device ID为4017h,跟上面读取到的值是对应的(h代表是16进制)</p><p>[[File:pi3b-img439.png]]</p></li></ol> <span id="pin的pwm测试"></span> === 40pin的PWM测试 === <ol style="list-style-type: decimal;"><li><p>Android默认开启了'''PWM11''',对应的引脚在40pin的所在位置如下图所示</p><p>[[File:pi3b-img440-1.png]]</p></li><li><p>首先点击wiringOP图标打开wiringOP APP</p><p>[[File:pi3b-img420.png]]</p></li><li><p>然后在wiringOP的主界面点击'''PWM_TEST'''按钮进入PWM的测试界面</p><p>[[File:pi3b-img441.png]]</p></li><li><p>PWM11对应的基地址是'''fe6f0030''',PWM15对应的基地址是'''fe700030''',这里pwmchip0右边显示是'''fdd70020.pwm''', 这时需要点击下拉选项选择其它的pwmchip,直到右边显示'''fe6f0030.pwm'''或者'''fe700030.pwm'''为止</p><p>[[File:pi3b-img442.png]]</p></li><li><p>当下拉选项选择'''pwmchip3'''时,右边对应的就是PWM11对应的基地址'''fe6f0030'''</p><p>[[File:pi3b-img443.png]]</p></li><li><p>然后确认PWM的通道,默认是0通道,并确认PWM的周期,默认的配置是'''50000ns''',转换为PWM频率是'''20KHz''',可自行修改,点击'''EXPORT'''按钮导出'''PWM11'''</p><p>[[File:pi3b-img444.png]]</p></li><li><p>然后拖动下面的拖动条,就可以改变PWM的占空比,然后勾选Enable就可以输出PWM波形了</p></li> [[File:pi3b-img445.png]]</ol><ol start="8" style="list-style-type: decimal;"><li>然后使用示波器测量开发板40pin中的第32号引脚就可以看到下面的波形了</li> [[File:pi3b-img446.png]]</ol><span id="adb的使用方法"></span> == ADB的使用方法 == === 使用网络连接adb调试 === {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''使用网络adb无需数据线来连接电脑和开发板,而是通过网络来通信,所以首先请确保开发板的有线或者无线网络已经连接好了,然后获取开发板的IP地址,后面要用到。'''</big>|} <ol style="list-style-type: decimal;"><li><p>确保Android系统的'''service.adb.tcp.port'''设置为5555端口号</p>{| class="wikitable" style="width:800px;" |-| <p>console:/ # '''getprop | grep &quot;adb.tcp&quot;'''</p><p>[service.adb.tcp.port]: ['''5555''']</p>|}</li><li><p>如果'''service.adb.tcp.port'''没有设置,可以使用下面的命令设置网络adb的端口号</p>{| class="wikitable" style="width:800px;" |-| console:/ # '''setprop service.adb.tcp.port 5555''' console:/ # '''stop adbd''' console:/ # '''start adbd'''|}</li></ol><ol start="3" style="list-style-type: decimal;"><li><p>在Ubuntu PC上安装adb工具</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''sudo apt update'''</p><p>test@test:~$ '''sudo apt install -y adb'''</p>|}</li><li><p>然后在Ubuntu PC上连接网络adb</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''adb connect 192.168.1.xxx''' '''(IP地址需要修改为开发板的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>{| class="wikitable" style="width:800px;" |-| test@test:~$ '''adb shell''' console:/ #|}</li></ol> = '''附录''' = == 用户手册更新历史 == {| class="wikitable" style="width:800px;text-align:center;" |-| '''版本'''| '''日期'''| '''更新说明'''|-| v1.0| 2023-08-17| 初始版本|} == 镜像更新历史 == {| class="wikitable" style="width:800px;"|-| style="text-align:center;" |'''日期'''| style="text-align:center;" |'''更新说明'''|-| style="text-align:center;" |2023-08-17| Orangepi3b_1.0.0_ubuntu_focal_server_linux5.10.160.7z Orangepi3b_1.0.0_ubuntu_jammy_server_linux5.10.160.7z Orangepi3b_1.0.0_debian_bullseye_server_linux5.10.160.7z Orangepi3b_1.0.0_debian_bookworm_server_linux5.10.160.7z Orangepi3b_1.0.0_ubuntu_focal_desktop_xfce_linux5.10.160.7z Orangepi3b_1.0.0_ubuntu_jammy_desktop_xfce_linux5.10.160.7z Orangepi3b_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z Orangepi3b_1.0.0_debian_bookworm_desktop_xfce_linux5.10.160.7z  OrangePi3B_RK3566_Android11_v1.0.0.tar.gz OrangePi3B_RK3566_Android11_lcd_v1.0.0.tar.gz OrangePi3B_RK3566_Android11_spi-nvme_v1.0.0.tar.gz
{| class="wikitable"|-| '''版本'''| '''日期'''| '''更新说明'''|-| v0.1| 2023-07-19| 初始版本|} == 镜像更新历史 == {| class="wikitable"|-| '''日期'''| '''更新说明'''|-| 2023-07-19| Orangepi3 b_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z Orange pi3b_1.0.0_ubuntu_jammy_desktop_xfce_linux5.10.160.7z Orange pi3b_1.0.0_ubuntu_focal_desktop_xfce_linux5.10.160.7z OrangePi3B_RK3566_Android11_v1.0.0.tar.gz OrangePi3B_RK3566_Android11_lcd_v1.0.0.tar.gz OrangePi3B_RK3566_Android11_spiOrangePi3B_RK3566_Android11_lcd_spi-nvme_v1.0.0.tar.gz
O rangePi3B_RK3566_Android11_lcd_spi-nvme_v1.0.0.tar.gz
* 初始版本
|}
8,460
个编辑