Open main menu

Wiki-Orange Pi β

Difference between revisions of "Orange Pi CM4"

(Created page with "= Basic features of Orange Pi CM4 = <span id="what-is-orange-pi-cm4"></span> == What is Orange Pi CM4 == Orange Pi CM4 uses Rockchip RK3566 quad-core 64-bit Cortex-A55 proce...")
 
(Download orangepi-build from github)
 
(229 intermediate revisions by the same user not shown)
Line 1: Line 1:
= Basic features of Orange Pi CM4 =
+
= '''Basic features of Orange Pi CM4''' =
  
 
<span id="what-is-orange-pi-cm4"></span>
 
<span id="what-is-orange-pi-cm4"></span>
Line 20: Line 20:
 
* Android game console, etc.
 
* Android game console, etc.
  
'''Of course, there are more functions. Relying on a powerful ecosystem and a variety of expansion accessories, Orange Pi can help users easily achieve delivery from ideas to prototypes to mass production. It is an ideal choice for makers, dreamers, and hobbyists. An ideal creative platform for readers.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Of course, there are more functions. Relying on a powerful ecosystem and a variety of expansion accessories, Orange Pi can help users easily achieve delivery from ideas to prototypes to mass production. It is an ideal choice for makers, dreamers, and hobbyists. An ideal creative platform for readers.'''</big>
 +
|}
  
 
<span id="hardware-specifications-of-orange-pi-cm4"></span>
 
<span id="hardware-specifications-of-orange-pi-cm4"></span>
 +
 
== Hardware specifications of Orange Pi CM4 ==
 
== Hardware specifications of Orange Pi CM4 ==
  
Line 28: Line 33:
 
=== Hardware specifications of Orange Pi CM4 core board ===
 
=== Hardware specifications of Orange Pi CM4 core board ===
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;"
 
|-
 
|-
| '''Hardware sp ecifications'''
+
| colspan=2|
|
+
<div style="text-align:center"><big>'''Hardware specifications'''</big></div>
 
|-
 
|-
| Master chip
+
| style="width:150px;" | Master chip
| Rockchip RK3566
+
|  
 +
Rockchip RK3566
 
|-
 
|-
 
| CPU
 
| CPU
| Quad-core 64-bit Cortex-A55 processor, 22nm advanced process, clocked at up to 1.8GHz
+
|  
 +
Quad-core 64-bit Cortex-A55 processor, 22nm advanced process, clocked at up to 1.8GHz
 
|-
 
|-
 
| GPU
 
| GPU
| • ARM Mali G52 2EE graphics processor
+
|  
 +
• ARM Mali G52 2EE graphics processor
  
 
• Support OpenGL ES 1.1/2.0/3.2, OpenCL 2.0, Vulkan 1.1
 
• Support OpenGL ES 1.1/2.0/3.2, OpenCL 2.0, Vulkan 1.1
Line 48: Line 56:
 
|-
 
|-
 
| NPU
 
| NPU
| •Integrated RKNN NPU AI accelerator, 0.8Tops@INT8 performance
+
|  
 +
•Integrated RKNN NPU AI accelerator, 0.8Tops@INT8 performance
  
 
•Supports one-click conversion of Caffe/TensorFlow/TFLite/ONNX/PyTorch/Keras/Darknet architecture models
 
•Supports one-click conversion of Caffe/TensorFlow/TFLite/ONNX/PyTorch/Keras/Darknet architecture models
Line 54: Line 63:
 
|-
 
|-
 
| VPU
 
| VPU
| • 4K@60fps H.265/H.264/VP9 video decoding
+
|  
 +
• 4K@60fps H.265/H.264/VP9 video decoding
  
 
• 1080P@60fps H.265/H.264 video encoding
 
• 1080P@60fps H.265/H.264 video encoding
Line 60: Line 70:
 
|-
 
|-
 
| PMU
 
| PMU
| Rockchip RK809-5
+
|  
 +
Rockchip RK809-5
 
|-
 
|-
 
| Memory
 
| Memory
| 2GB/4GB/8GB (LPDDR4/4x)
+
|  
 +
2GB/4GB/8GB (LPDDR4/4x)
 
|-
 
|-
 
| Storage
 
| Storage
| • Onboard eMMC: 16GB/32GB/64GB/128GB
+
|  
 +
• Onboard eMMC: 16GB/32GB/64GB/128GB
  
 
• SPI Flash: default blank paste
 
• SPI Flash: default blank paste
Line 72: Line 85:
 
|-
 
|-
 
| Wi-Fi+BT
 
| Wi-Fi+BT
| Wi-Fi 5+BT 5.0, BLE(AP6256)
+
|  
 +
Wi-Fi 5+BT 5.0, BLE(AP6256)
 
|-
 
|-
 
| Ethernet transceiver
 
| Ethernet transceiver
| 10/100/1000Mbps Ethernet (onboard PHY chip: YT8531C)
+
|  
 +
10/100/1000Mbps Ethernet (onboard PHY chip: YT8531C)
 
|-
 
|-
 
| Core board interface
 
| Core board interface
| 2 x 100PIN, 1 x 24PIN, including the following signals:
+
|  
 +
2 x 100PIN, 1 x 24PIN, including the following signals:
  
 
• 10/100/1000Mbps Ethernet MDI signal
 
• 10/100/1000Mbps Ethernet MDI signal
  
• 1x HDMI 2.0 interface, up to 4K@60fps<br />
+
• 1x HDMI 2.0 interface, up to 4K@60fps
 +
 
 
• 1x 4-lane MIPI DSI display interface
 
• 1x 4-lane MIPI DSI display interface
  
Line 103: Line 120:
 
|-
 
|-
 
| Supported OS
 
| Supported OS
| Android11, Ubuntu22.04, Ubuntu20.04, Debian11, Debian12, open source Hongmeng 4.0 Beta1, Orange Pi OS (Arch), Orange Pi OS (OH) based on open source Hongmeng and other operating systems.
+
|  
 +
Android11, Ubuntu22.04, Ubuntu20.04, Debian11, Debian12, open source Hongmeng 4.0 Beta1, Orange Pi OS (Arch), Orange Pi OS (OH) based on open source Hongmeng and other operating systems.
 
|-
 
|-
| Introduction of Appearance Specifications
+
| colspan=2|
|
+
<div style="text-align:center"><big>'''Introduction of Appearance Specifications'''</big></div>
 
|-
 
|-
 
| PCB Size
 
| PCB Size
| 55x40mm
+
|  
 +
55x40mm
 
|}
 
|}
  
 
<span id="hardware-specifications-of-orange-pi-cm4-baseboard"></span>
 
<span id="hardware-specifications-of-orange-pi-cm4-baseboard"></span>
 +
 
=== Hardware specifications of Orange Pi CM4 baseboard ===
 
=== Hardware specifications of Orange Pi CM4 baseboard ===
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;"  
 
|-
 
|-
| '''CM4 Base Board Hardware Specifications'''
+
| colspan=2|
|
+
<div style="text-align:center"><big>'''CM4 Base Board Hardware Specifications'''</big></div>
 
|-
 
|-
 
| Storage
 
| Storage
| • M.2 M-KEY slot: SATA3 or PCIe2.0 NVME SSD
+
|  
 +
• M.2 M-KEY slot: SATA3 or PCIe2.0 NVME SSD
  
 
• TF card slot
 
• TF card slot
Line 127: Line 148:
 
|-
 
|-
 
| Ethernet interface
 
| Ethernet interface
| 10/100/1000Mbps Ethernet RJ45 socket
+
|  
 +
10/100/1000Mbps Ethernet RJ45 socket
 
|-
 
|-
 
| Display
 
| Display
| • 1x Micro HDMI TX 2.0, maximum support 4K@60FPS
+
|  
 +
• 1x Micro HDMI TX 2.0, maximum support 4K@60FPS
  
 
• 1xMIPI DSI 2 Lane
 
• 1xMIPI DSI 2 Lane
Line 138: Line 161:
 
|-
 
|-
 
| Camera
 
| Camera
| 2xMIPI CSI 2 Lane
+
|  
 +
2xMIPI CSI 2 Lane
 
|-
 
|-
 
| USB
 
| USB
| • 1xUSB 2.0 supports Device or HOST mode
+
|  
 +
• 1xUSB 2.0 supports Device or HOST mode
  
 
• 1xUSB 3.0 HOST
 
• 1xUSB 3.0 HOST
Line 149: Line 174:
 
|-
 
|-
 
| Audio
 
| Audio
| 3.5mm headphone jack audio input/output
+
|  
 +
3.5mm headphone jack audio input/output
 
|-
 
|-
 
| Button
 
| Button
| 1xMaskROM key, 1xRECOVERY key, 1x reset key
+
|  
 +
1xMaskROM key, 1xRECOVERY key, 1x reset key
 
|-
 
|-
 
| FAN
 
| FAN
| 4Pin 2.54mm 5V fan interface
+
|  
 +
4Pin 2.54mm 5V fan interface
 
|-
 
|-
 
| 40Pin
 
| 40Pin
| 40Pin function expansion interface, supports the following interface types:
+
|  
 +
40Pin function expansion interface, supports the following interface types:
  
 
GPIO、UART、I2C、SPI、PWM
 
GPIO、UART、I2C、SPI、PWM
Line 164: Line 193:
 
|-
 
|-
 
| Power Source
 
| Power Source
| Type-C 5V3A
+
|  
 +
Type-C 5V3A
 
|-
 
|-
 
| Supported OS
 
| Supported OS
| Android11, Ubuntu22.04, Ubuntu20.04, Debian11, Debian12, open source Hongmeng 4.0 Beta1, Orange Pi OS (Arch), Orange Pi OS (OH) based on open source Hongmeng and other operating systems.
+
|  
 +
Android11, Ubuntu22.04, Ubuntu20.04, Debian11, Debian12, open source Hongmeng 4.0 Beta1, Orange Pi OS (Arch), Orange Pi OS (OH) based on open source Hongmeng and other operating systems.
 
|-
 
|-
| '''Introduction of Appearance Specifications'''
+
| colspan=2|
|
+
<div style="text-align:center"><big>'''Introduction of Appearance Specifications'''</big></div>
 
|-
 
|-
| PCB Size
+
| style="width:150px;" | PCB Size
| 85x56mm
+
|  
 +
85x56mm
 
|}
 
|}
  
 
<span id="top-view-and-bottom-view-of-orange-pi-cm4"></span>
 
<span id="top-view-and-bottom-view-of-orange-pi-cm4"></span>
 +
 
== Top view and bottom view of Orange Pi CM4 ==
 
== Top view and bottom view of Orange Pi CM4 ==
  
Line 182: Line 215:
 
=== Top view and bottom view of Orange Pi CM4 core board ===
 
=== Top view and bottom view of Orange Pi CM4 core board ===
  
'''Top view:'''
+
<big>'''Top view:'''</big><br>
  
[[File:media/image3.png|391x289px]]
+
[[File:cm4-img3.png|800px]]
  
'''Bottom view:'''
+
<big>'''Bottom view:'''</big>
  
[[File:media/image4.png|395x280px]]
+
[[File:cm4-img4.png|800px]]
  
 
<span id="top-and-bottom-views-of-the-orange-pi-cm4-base-board"></span>
 
<span id="top-and-bottom-views-of-the-orange-pi-cm4-base-board"></span>
 +
 
=== Top and bottom views of the Orange Pi CM4 base board ===
 
=== Top and bottom views of the Orange Pi CM4 base board ===
  
'''Top view:'''
+
<big>'''Top view:'''</big>
  
[[File:media/image5.png|422x274px]]
+
[[File:cm4-img5.png|800px]]
  
'''Bottom view:'''
+
<big>'''Bottom view:'''</big>
  
[[File:media/image6.png|440x289px]]
+
[[File:cm4-img6.png|800px]]
  
 
<span id="the-interface-details-of-orange-pi-cm4"></span>
 
<span id="the-interface-details-of-orange-pi-cm4"></span>
 +
 
== The interface details of Orange Pi CM4 ==
 
== The interface details of Orange Pi CM4 ==
  
Line 209: Line 244:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image7.png|561x863px|1694398522447]]
+
[[File:cm4-img7.png|800px]]
  
 
</div>
 
</div>
 
<span id="interface-details-of-orange-pi-cm4-base-board"></span>
 
<span id="interface-details-of-orange-pi-cm4-base-board"></span>
 +
 
=== Interface details of Orange Pi CM4 base board ===
 
=== Interface details of Orange Pi CM4 base board ===
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image8.png|575x635px|1694398625758]]
+
[[File:cm4-img8.png|800px]]
  
 
</div>
 
</div>
[[File:media/image9.png|575x264px]]
+
[[File:cm4-img9.png]]
  
'''The diameter of the three positioning holes on the base plate is 2.6mm, the diameter of the M.2 PICE device fixing hole is 2.7mm, and the diameter of the four positioning holes on the core board is 2.7mm.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''The diameter of the three positioning holes on the base plate is 2.6mm, the diameter of the M.2 PICE device fixing hole is 2.7mm, and the diameter of the four positioning holes on the core board is 2.7mm.'''</big>
 +
|}
  
 
<span id="introduction-to-the-use-of-the-development-board"></span>
 
<span id="introduction-to-the-use-of-the-development-board"></span>
 +
 
= '''Introduction to the use of the development board''' =
 
= '''Introduction to the use of the development board''' =
  
Line 232: Line 273:
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>TF card, a class 10 or above high-speed SanDisk card with a minimum capacity of 16GB (32GB or above recommended)</p>
 
<li><p>TF card, a class 10 or above high-speed SanDisk card with a minimum capacity of 16GB (32GB or above recommended)</p>
<p>[[File:media/image10.png|124x96px]]</p></li>
+
<p>[[File:cm4-img10.png]]</p></li>
 
<li><p>TF card reader, used to burn the image into the TF card</p>
 
<li><p>TF card reader, used to burn the image into the TF card</p>
<p>[[File:media/image11.png|139x106px]]</p></li>
+
<p>[[File:cm4-img11.png]]</p></li>
 
<li><p>Display with HDMI interface</p>
 
<li><p>Display with HDMI interface</p>
<p>[[File:media/image12.png|256x165px]]</p></li>
+
<p>[[File:cm4-img12.png]]</p></li>
 
<li><p>Micro HDMI to HDMI cable, used to connect the development board to an HDMI monitor or TV for display</p>
 
<li><p>Micro HDMI to HDMI cable, used to connect the development board to an HDMI monitor or TV for display</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image13.png|181x181px|40B5201C-C998-4dcd-BA92-54C1BD4D78D2]]
+
[[File:cm4-img13.png]]
  
 
</div>
 
</div>
<p>'''Note, if you want to connect a 4K monitor, make sure the HDMI cable supports 4K video output.'''</p></li>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''Note, if you want to connect a 4K monitor, make sure the HDMI cable supports 4K video output.'''</p></big>
 +
|}
 +
</li>
 
<li><p>Power adapter. Orange Pi CM4 is recommended to use a 5V/3A Type-C power supply.</p>
 
<li><p>Power adapter. Orange Pi CM4 is recommended to use a 5V/3A Type-C power supply.</p>
<p>[[File:media/image14.png|184x160px]]</p></li>
+
<p>[[File:cm4-img14.png]]</p></li>
 
<li><p>The mouse and keyboard of the USB interface, as long as the mouse and keyboard of the standard USB interface are acceptable, the mouse and keyboard can be used to control the Orange Pi development board</p>
 
<li><p>The mouse and keyboard of the USB interface, as long as the mouse and keyboard of the standard USB interface are acceptable, the mouse and keyboard can be used to control the Orange Pi development board</p>
<p>[[File:media/image15.png|227x193px]]</p></li>
+
<p>[[File:cm4-img15.png]]</p></li>
 
<li><p>USB camera</p>
 
<li><p>USB camera</p>
<p>[[File:media/image16.png|255x148px]]</p></li>
+
<p>[[File:cm4-img16.png]]</p></li>
 
<li><p>PCIe NVMe SSD, the development board supports SSDs with M.2 2230 and M.2 2242 specifications. M.2 2280 is also supported, but it cannot be fixed with screws.</p>
 
<li><p>PCIe NVMe SSD, the development board supports SSDs with M.2 2230 and M.2 2242 specifications. M.2 2280 is also supported, but it cannot be fixed with screws.</p>
<p>'''The development board does not come with an SPI Flash chip by default. You need to buy it yourself and then solder it on. The SPI Flash chip model we recommend is XM25QU128CWIQT08Q.'''</p>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<p>'''Please pay special attention to this point if you need to use SPIFlash+NVMe SSD to start the system.'''</p></li>
+
|-
 +
|
 +
<big><p>'''The development board does not come with an SPI Flash chip by default. You need to buy it yourself and then solder it on. The SPI Flash chip model we recommend is <span style="color:#FF0000">XM25QU128CWIQT08Q</span>.'''</p>
 +
<p>'''Please pay special attention to this point if you need to use SPIFlash+NVMe SSD to start the system.'''</p></big>
 +
|}
 +
</li>
 
<li><p>100M or 1000M network cable, used to connect the development board to the Internet</p>
 
<li><p>100M or 1000M network cable, used to connect the development board to the Internet</p>
<p>[[File:media/image17.png|143x112px]]</p></li>
+
<p>[[File:cm4-img17.png]]</p></li>
 
<li><p>USB2.0 male-to-male data cable, used for burning images to eMMC, TF card, etc.</p>
 
<li><p>USB2.0 male-to-male data cable, used for burning images to eMMC, TF card, etc.</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image18.png|158x155px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
+
[[File:cm4-img18.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>'''3.3V''' USB to TTL module and DuPont line, when using serial port debugging function, need USB to TTL module and DuPont line to connect the development board and computer</p>
 
<li><p>'''3.3V''' USB to TTL module and DuPont line, when using serial port debugging function, need USB to TTL module and DuPont line to connect the development board and computer</p>
<p>[[File:media/image19.png|217x89px|G7U7JZX(V`L$`A6864]38$P]] [[File:media/image20.png|305x110px]]</p></li>
+
<p>[[File:cm4-img19.png|350px]] [[File:cm4-img20.png|450px]]</p></li>
<li><p>Personal computer with Ubuntu and Windows operating systems installed</p></li></ol>
+
<li><p>Personal computer with Ubuntu and Windows operating systems installed</p>
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"  
 
|-
 
|-
| style="text-align: left;"| 1
+
| 1
| style="text-align: left;"| Ubuntu22.04 PC
+
| Ubuntu22.04 PC
| style="text-align: left;"| Optional, used to compile Linux source code
+
| Optional, used to compile Linux source code
 
|-
 
|-
| style="text-align: left;"| 2
+
| 2
| style="text-align: left;"| Windows PC
+
| Windows PC
| style="text-align: left;"| For burning Android and Linux images
+
| For burning Android and Linux images
 
|}
 
|}
 +
</li></ol>
 +
<span id="download-the-image-of-the-development-board-and-related-materials"></span>
  
<span id="download-the-image-of-the-development-board-and-related-materials"></span>
 
 
== Download the image of the development board and related materials ==
 
== Download the image of the development board and related materials ==
  
Line 282: Line 334:
 
<li><p>The website for downloading the English version is:</p>
 
<li><p>The website for downloading the English version is:</p>
 
<p>[http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html '''http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4.html''']</p>
 
<p>[http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3B.html '''http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4.html''']</p>
<p>[[File:media/image21.png|431x461px]]</p></li>
+
<p>[[File:cm4-img21.png]]</p></li>
 
<li><p>The information mainly includes</p></li></ol>
 
<li><p>The information mainly includes</p></li></ol>
  
Line 299: Line 351:
 
== Method of burning Linux image to TF card based on Windows PC ==
 
== Method of burning Linux image to TF card based on Windows PC ==
  
'''Note that the Linux images mentioned here specifically refer to Linux distribution images such as Debian, Ubuntu and OPi OS Arch downloaded from the''' [http://www.orangepi.org/html/serviceAndSupport/index.html Orange Pi's data download page]'''.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that the Linux images mentioned here specifically refer to Linux distribution images such as Debian, Ubuntu and OPi OS Arch downloaded from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html Orange Pi's data download page].'''</big>
 +
|}
  
 
<span id="how-to-use-balenaetcher-to-burn-linux-image"></span>
 
<span id="how-to-use-balenaetcher-to-burn-linux-image"></span>
=== '''How to use balenaEtcher to burn Linux image''' ===
+
=== How to use balenaEtcher to burn Linux image ===
  
 
# First prepare a TF card with a capacity of 16GB or larger. The transmission speed of the TF card must be class 10 or above. It is recommended to use TF cards from SanDisk and other brands.
 
# First prepare a TF card with a capacity of 16GB or larger. The transmission speed of the TF card must be class 10 or above. It is recommended to use TF cards from SanDisk and other brands.
 
# Then use the card reader to insert the TF card into the computer
 
# Then use the card reader to insert the TF card into the computer
# Download the Linux operating system image file compression package that you want to burn from the [http://www.orangepi.org/html/serviceAndSupport/index.html Orange Pi's data download page], and then use the decompression software to decompress it. Among the decompressed files, the file ending with &quot;'''.img'''&quot; is the image file of the operating system. The size is generally above 2GB.
+
# Download the Linux operating system image file compression package that you want to burn from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html Orange Pi's data download page], and then use the decompression software to decompress it. Among the decompressed files, the file ending with &quot;'''.img'''&quot; is the image file of the operating system. The size is generally above 2GB.
 
# Then download the Linux image burning software-'''balenaEtcher''', the download address is:
 
# Then download the Linux image burning software-'''balenaEtcher''', the download address is:
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[https://www.balena.io/etcher/ '''https://www.balena.io/etcher/''']
 
[https://www.balena.io/etcher/ '''https://www.balena.io/etcher/''']
 +
|}
  
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
 
<li><p>After entering the balenaEtcher download page, click the green download button to jump to the place where the software is downloaded</p>
 
<li><p>After entering the balenaEtcher download page, click the green download button to jump to the place where the software is downloaded</p>
<p>[[File:media/image22.png|359x172px]]</p></li>
+
<p>[[File:cm4-img22.png]]</p></li>
 
<li><p>Then you can choose to download the Portable version of balenaEtcher software. The Portable version does not need to be installed, and you can use it by double-clicking to open it</p>
 
<li><p>Then you can choose to download the Portable version of balenaEtcher software. The Portable version does not need to be installed, and you can use it by double-clicking to open it</p>
<p>[[File:media/image23.png|382x141px]]</p></li>
+
<p>[[File:cm4-img23.png]]</p></li>
 
<li><p>If you downloaded the version of balenaEtcher that needs to be installed, please install it first and then use it. If you downloaded the Portable version of balenaEtcher, just double-click to open it. The balenaEtcher interface after opening is as shown below:</p>
 
<li><p>If you downloaded the version of balenaEtcher that needs to be installed, please install it first and then use it. If you downloaded the Portable version of balenaEtcher, just double-click to open it. The balenaEtcher interface after opening is as shown below:</p>
<p>[[File:media/image24.png|369x233px]]</p></li></ol>
+
<p>[[File:cm4-img24.png]]</p>
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''If the following error is prompted when opening balenaEtcher:'''</big>
  
'''If the following error is prompted when opening balenaEtcher:'''
+
[[File:cm4-img25.png|center]]
  
[[File:media/image25.png|209x164px]]
+
<big>'''Please select balenaEtcher, right-click, and select Run as administrator.'''</big>
 
 
'''Please select balenaEtcher, right-click, and select Run as administrator.'''
 
 
 
[[File:media/image26.png|273x37px]]
 
  
 +
[[File:cm4-img26.png|center]]
 +
|}
 +
</li></ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
 
<li><p>The specific steps to use balenaEtcher to burn a Linux image are as follows</p>
 
<li><p>The specific steps to use balenaEtcher to burn a Linux image are as follows</p>
<p>a. First select the path of the Linux image file to be burned</p>
+
::<p>a. First select the path of the Linux image file to be burned</p>
<p>b. Then select the drive letter of the TF card</p>
+
::<p>b. Then select the drive letter of the TF card</p>
<p>c. Finally click Flash and it will start burning the Linux image to the TF card.</p>
+
::<p>c. Finally click Flash and it will start burning the Linux image to the TF card.</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image27.png|501x281px|03]]
+
::[[File:cm4-img27.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>The interface displayed in the process of burning the Linux image by balenaEtcher is shown in the figure below, and the progress bar displays purple, indicating that the Linux image is being burned into the TF card</p>
 
<li><p>The interface displayed in the process of burning the Linux image by balenaEtcher is shown in the figure below, and the progress bar displays purple, indicating that the Linux image is being burned into the TF card</p>
<p>[[File:media/image28.png|428x268px]]</p></li>
+
<p>[[File:cm4-img28.png]]</p></li>
 
<li><p>After burning the Linux image, balenaEtcher will also verify the image burned into the TF card by default to ensure that there is no problem in the burning process. As shown in the figure below, a green progress bar indicates that the image has been burnt, and balenaEtcher is verifying the burnt image</p>
 
<li><p>After burning the Linux image, balenaEtcher will also verify the image burned into the TF card by default to ensure that there is no problem in the burning process. As shown in the figure below, a green progress bar indicates that the image has been burnt, and balenaEtcher is verifying the burnt image</p>
<p>[[File:media/image29.png|427x267px]]</p></li>
+
<p>[[File:cm4-img29.png]]</p></li>
 
<li><p>After successful burning, the display interface of balenaEtcher is as shown below. If the green indicator icon is displayed, it means that the image burning is successful. At this time, you can exit balenaEtcher, then pull out the TF card and insert it into the TF card slot of the development board for use.</p>
 
<li><p>After successful burning, the display interface of balenaEtcher is as shown below. If the green indicator icon is displayed, it means that the image burning is successful. At this time, you can exit balenaEtcher, then pull out the TF card and insert it into the TF card slot of the development board for use.</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image30.png|523x324px|04]]
+
[[File:cm4-img30.png]]
  
 
</div></li></ol>
 
</div></li></ol>
  
 
<span id="how-to-use-rkdevtool-to-burn-linux-image-to-tf-card"></span>
 
<span id="how-to-use-rkdevtool-to-burn-linux-image-to-tf-card"></span>
 +
 
=== How to use RKDevTool to burn Linux image to TF card ===
 
=== How to use RKDevTool to burn Linux image to TF card ===
  
Line 355: Line 419:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image18.png|146x143px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
+
[[File:cm4-img18.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>You also need to prepare a TF card with a capacity of 16GB or larger. The transmission speed of the TF card must be '''class 10''' or above. It is recommended to use TF cards from SanDisk and other brands.</p></li>
 
<li><p>You also need to prepare a TF card with a capacity of 16GB or larger. The transmission speed of the TF card must be '''class 10''' or above. It is recommended to use TF cards from SanDisk and other brands.</p></li>
<li><p>Then download the Rockchip driver '''DriverAssitant_v5.12.zip''' and '''MiniLoader''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from the '''Orange Pi's data download page'''</p>
+
<li><p>Then download the Rockchip driver '''DriverAssitant_v5.12.zip''' and '''MiniLoader''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi information download page''']</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>On the '''Orange Pi's data download page''', first select the official tool, and then enter the folder below</p>
+
<li><p>On the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi information download page'''], first select the official tool, and then enter the folder below</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image31.png|283x90px|6d1c77df7eeb7e491e5f79e8d85cbdc]]
+
[[File:cm4-img31.png]]
  
 
</div></li>
 
</div></li>
Line 370: Line 434:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image32.png|290x130px|34acacded202b29eee42fd20f5b4c92]]
+
[[File:cm4-img32.png]]
  
 
</div>
 
</div>
<p>'''Note that the &quot;<span class="mark">MiniLoader-things needed to burn Linux images</span>&quot; folder will be referred to as the MiniLoader folder below.'''</p></li></ol>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''Note that the &quot;<span class="mark">MiniLoader-things needed to burn Linux images</span>&quot; folder will be referred to as the MiniLoader folder below.'''</p></big>
 +
|}
 +
</li></ol>
 
</li>
 
</li>
<li><p>Then download the compressed package of the Linux operating system image file you want to burn from the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi information download page'''], and then use the decompression software to decompress it. In the decompressed file, the file ending with &quot;'''.img'''&quot; is the image file of the operating system. , the size is generally above 2GB</p></li>
+
<li><p>Then download the compressed package of the Linux operating system image file you want to burn from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi information download page'''], and then use the decompression software to decompress it. In the decompressed file, the file ending with &quot;'''.img'''&quot; is the image file of the operating system. , the size is generally above 2GB</p></li>
 
<li><p>Then use decompression software to decompress '''DriverAssitant_v5.12.zip''', then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it.</p>
 
<li><p>Then use decompression software to decompress '''DriverAssitant_v5.12.zip''', then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it.</p>
<p>[[File:media/image33.png|464x136px]]</p></li>
+
<p>[[File:cm4-img33.png]]</p></li>
 
<li><p>Open '''DriverInstall.exe''' and install the Rockchip microdriver as follows</p>
 
<li><p>Open '''DriverInstall.exe''' and install the Rockchip microdriver as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>Click the &quot;'''Driver Installation'''&quot; button</p>
 
<li><p>Click the &quot;'''Driver Installation'''&quot; button</p>
<p>[[File:media/image34.png|245x129px]]</p></li>
+
<p>[[File:cm4-img34.png]]</p></li>
 
<li><p>After waiting for a period of time, a window will pop up prompting &quot;'''Driver installation successful'''&quot;, then click the &quot;'''OK'''&quot; button.</p>
 
<li><p>After waiting for a period of time, a window will pop up prompting &quot;'''Driver installation successful'''&quot;, then click the &quot;'''OK'''&quot; button.</p>
<p>[[File:media/image35.png|254x132px]]</p></li></ol>
+
<p>[[File:cm4-img35.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>Then unzip '''RKDevTool_Release_v3.15.zip'''. This software does not need to be installed. Just find '''RKDevTool''' in the unzipped folder and open it.</p>
 
<li><p>Then unzip '''RKDevTool_Release_v3.15.zip'''. This software does not need to be installed. Just find '''RKDevTool''' in the unzipped folder and open it.</p>
<p>[[File:media/image36.png|448x132px]]</p></li>
+
<p>[[File:cm4-img36.png]]</p></li>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not connected to the development board through the USB2.0 male-to-male data cable at this time, the lower left corner will prompt &quot;'''No device found'''&quot;</p>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not connected to the development board through the USB2.0 male-to-male data cable at this time, the lower left corner will prompt &quot;'''No device found'''&quot;</p>
<p>[[File:media/image37.png|402x189px]]</p></li>
+
<p>[[File:cm4-img37.png]]</p></li>
 
<li><p>Then start burning the Linux image to the TF card</p>
 
<li><p>Then start burning the Linux image to the TF card</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>First, connect the development board to the Windows computer through a USB2.0 male-to-male data cable. The location of the USB2.0 programming port on the development board is as shown in the figure below.</p>
 
<li><p>First, connect the development board to the Windows computer through a USB2.0 male-to-male data cable. The location of the USB2.0 programming port on the development board is as shown in the figure below.</p>
<p>[[File:media/image38.png|269x108px]]</p></li>
+
<p>[[File:cm4-img38.png]]</p></li>
 
<li><p>Make sure the TF card slot is not inserted into the TF card</p></li>
 
<li><p>Make sure the TF card slot is not inserted into the TF card</p></li>
 
<li><p>Then press and hold the MaskROM button on the development board, the position of the MaskROM button on the development board is shown in the figure below:</p>
 
<li><p>Then press and hold the MaskROM button on the development board, the position of the MaskROM button on the development board is shown in the figure below:</p>
<p>[[File:media/image39.png|439x98px]]</p></li>
+
<p>[[File:cm4-img39.png]]</p></li>
 
<li><p>Then connect the development board to the power supply of the Type-C interface, power it on, and then release the MaskROM button.</p>
 
<li><p>Then connect the development board to the power supply of the Type-C interface, power it on, and then release the MaskROM button.</p>
<p>[[File:media/image40.png|441x103px]]</p></li>
+
<p>[[File:cm4-img40.png]]</p></li>
 
<li><p>If the previous steps are successful, the development board will enter the '''MASKROM''' mode at this time, and the interface of the burning tool will prompt &quot;'''found a MASKROM device'''&quot;</p>
 
<li><p>If the previous steps are successful, the development board will enter the '''MASKROM''' mode at this time, and the interface of the burning tool will prompt &quot;'''found a MASKROM device'''&quot;</p>
<p>[[File:media/image41.png|454x213px]]</p></li>
+
<p>[[File:cm4-img41.png]]</p></li>
 
<li><p>At this time, please insert the TF card into the TF card slot</p></li>
 
<li><p>At this time, please insert the TF card into the TF card slot</p></li>
 
<li><p>Then place the mouse cursor in the area below</p>
 
<li><p>Then place the mouse cursor in the area below</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image42.png|455x216px|图片1]]
+
[[File:cm4-img42.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click the right mouse button and the selection interface shown in the figure below will pop up</p>
 
<li><p>Then click the right mouse button and the selection interface shown in the figure below will pop up</p>
<p>[[File:media/image43.png|453x213px]]</p></li>
+
<p>[[File:cm4-img43.png]]</p></li>
 
<li><p>Then select the '''<span class="mark">import configuration</span>''' option</p>
 
<li><p>Then select the '''<span class="mark">import configuration</span>''' option</p>
<p>[[File:media/image44.png|458x215px]]</p></li>
+
<p>[[File:cm4-img44.png]]</p></li>
 
<li><p>Then select the '''rk356x_linux_tfcard.cfg''' configuration file in the '''MiniLoader''' folder downloaded earlier, and click '''<span class="mark">Open</span>'''</p>
 
<li><p>Then select the '''rk356x_linux_tfcard.cfg''' configuration file in the '''MiniLoader''' folder downloaded earlier, and click '''<span class="mark">Open</span>'''</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image45.jpeg|464x241px|[BXCMJ([KF%SJ}1X{LT`2@I]]
+
[[File:cm4-img45.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click '''<span class="mark">OK</span>'''</p>
 
<li><p>Then click '''<span class="mark">OK</span>'''</p>
<p>[[File:media/image46.png|467x219px]]</p></li>
+
<p>[[File:cm4-img46.png]]</p></li>
 
<li><p>Then click the position shown in the figure below</p>
 
<li><p>Then click the position shown in the figure below</p>
<p>[[File:media/image47.png|486x228px]]</p></li>
+
<p>[[File:cm4-img47.png]]</p></li>
 
<li><p>Then select '''MiniLoaderAll.bin''' in the '''MiniLoader''' folder downloaded earlier, and then click to '''<span class="mark">open</span>'''</p>
 
<li><p>Then select '''MiniLoaderAll.bin''' in the '''MiniLoader''' folder downloaded earlier, and then click to '''<span class="mark">open</span>'''</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image48.png|491x250px|(@G{}Y0U)`5J5K@9R(ICYWA]]
+
[[File:cm4-img48.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click on the location shown in the picture below</p>
 
<li><p>Then click on the location shown in the picture below</p>
<p>[[File:media/image49.png|493x232px]]</p></li>
+
<p>[[File:cm4-img49.png]]</p></li>
 
<li><p>Then select the path of the Linux image you want to burn, and then click '''<span class="mark">Open</span>'''</p>
 
<li><p>Then select the path of the Linux image you want to burn, and then click '''<span class="mark">Open</span>'''</p>
<p>'''Before burning the image, it is recommended to rename the Linux image to be burned to orangepi.img or another shorter name, so that you can see the percentage of the burning progress when burning the image.'''</p>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<p>[[File:media/image50.png|499x234px]]</p></li>
+
|-
 +
|
 +
<big><p>'''Before burning the image, it is recommended to rename the Linux image to be burned to orangepi.img or another shorter name, so that you can see the percentage of the burning progress when burning the image.'''</p></big>
 +
|}
 +
<p>[[File:cm4-img50.png]]</p></li>
 
<li><p>Then please check the option to '''<span class="mark">force writing by address</span>'''.</p>
 
<li><p>Then please check the option to '''<span class="mark">force writing by address</span>'''.</p>
<p>[[File:media/image51.png|497x234px]]</p></li>
+
<p>[[File:cm4-img51.png]]</p></li>
 
<li><p>Click the execute button again and it will start burning the Linux image to the tf card of the development board.</p>
 
<li><p>Click the execute button again and it will start burning the Linux image to the tf card of the development board.</p>
<p>[[File:media/image52.png|497x233px]]</p></li>
+
<p>[[File:cm4-img52.png]]</p></li>
 
<li><p>The display log after the r.Linux image is burned is as shown below</p>
 
<li><p>The display log after the r.Linux image is burned is as shown below</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image53.png|492x231px|%O4~FPPAT$0RH{3S~CGJ@@Q(1)]]
+
[[File:cm4-img53.png]]
  
 
</div></li>
 
</div></li>
Line 446: Line 519:
  
 
<span id="how-to-burn-linux-image-using-win32diskimager"></span>
 
<span id="how-to-burn-linux-image-using-win32diskimager"></span>
=== '''How to burn Linux image using Win32Diskimager''' ===
+
 
 +
=== How to burn Linux image using Win32Diskimager ===
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
Line 453: Line 527:
 
<li><p>Then format the TF card</p>
 
<li><p>Then format the TF card</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>'''SD Card Formatter''' can be used to format the TF card. The download address is:</li></ol>
+
<li>'''SD Card Formatter''' can be used to format the TF card. The download address is:</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
[https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip '''https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip''']
 
[https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip '''https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip''']
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<li><p>After downloading, unzip and install directly, and then open the software</p></li>
 
<li><p>After downloading, unzip and install directly, and then open the software</p></li>
Line 463: Line 539:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image54.png|209x228px|选区_199]]
+
[[File:cm4-img54.png]]
  
 
</div></li>
 
</div></li>
<li><p>Then click &quot;'''Format'''&quot;. A warning box will pop up before formatting. After selecting &quot;'''Yes (Y)'''&quot;, formatting will begin.</p></li></ol>
+
<li><p>Then click &quot;'''Format'''&quot;. A warning box will pop up before formatting. After selecting &quot;'''Yes (Y)'''&quot;, formatting will begin.</p></li>
 
 
[[File:media/image55.png|304x147px]]
 
  
 +
[[File:cm4-img55.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<li><p>After formatting the TF card, the information shown in the figure below will pop up, click OK</p>
 
<li><p>After formatting the TF card, the information shown in the figure below will pop up, click OK</p>
<p>[[File:media/image56.png|186x149px]]</p></li></ol>
+
<p>[[File:cm4-img56.png]]</p></li></ol>
 
+
</li></ol>
 
<!-- -->
 
<!-- -->
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li><p>Download the compressed package of the Linux operating system image file you want to burn from the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi information download page'''], and then use the decompression software to decompress it. In the decompressed file, the file ending with &quot;'''.img'''&quot; is the image file of the operating system. The size is generally above 2GB</p></li>
+
<li><p>Download the compressed package of the Linux operating system image file you want to burn from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi information download page'''], and then use the decompression software to decompress it. In the decompressed file, the file ending with &quot;'''.img'''&quot; is the image file of the operating system. The size is generally above 2GB</p></li>
 
<li><p>Use '''Win32Diskimager''' to burn the Linux image to the TF card</p>
 
<li><p>Use '''Win32Diskimager''' to burn the Linux image to the TF card</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The download page of Win32Diskimager is</li></ol>
+
<li>The download page of Win32Diskimager is</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
[http://sourceforge.net/projects/win32diskimager/files/Archive/ '''http://sourceforge.net/projects/win32diskimager/files/Archive/''']
 
[http://sourceforge.net/projects/win32diskimager/files/Archive/ '''http://sourceforge.net/projects/win32diskimager/files/Archive/''']
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<li><p>After downloading, you can install it directly. The Win32Diskimager interface is as follows</p>
 
<li><p>After downloading, you can install it directly. The Win32Diskimager interface is as follows</p>
<p>a) First select the path to the image file</p>
+
:<p>a) First select the path to the image file</p>
<p>b) Then confirm that the drive letter of the TF card is consistent with what is displayed in the &quot;Device&quot; column</p>
+
:<p>b) Then confirm that the drive letter of the TF card is consistent with what is displayed in the &quot;Device&quot; column</p>
<p>c) Finally click &quot;Write&quot; to start burning</p>
+
:<p>c) Finally click &quot;Write&quot; to start burning</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image57.png|297x206px|C:\Users\orangepi\Desktop\用户手册插图\Pi5 Plus\a8fda8737c5b0b3b38fbb75ef68acfc.pnga8fda8737c5b0b3b38fbb75ef68acfc]]
+
:[[File:cm4-img57.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>After the image writing is completed, click the &quot;'''Exit'''&quot; button to exit, and then you can pull out the TF card and insert it into the development board to start</p></li></ol>
 
<li><p>After the image writing is completed, click the &quot;'''Exit'''&quot; button to exit, and then you can pull out the TF card and insert it into the development board to start</p></li></ol>
 +
</li></ol>
 +
<span id="method-of-burning-linux-image-to-tf-card-based-on-ubuntu-pc"></span>
  
<span id="method-of-burning-linux-image-to-tf-card-based-on-ubuntu-pc"></span>
 
 
== Method of burning Linux image to TF card based on Ubuntu PC ==
 
== Method of burning Linux image to TF card based on Ubuntu PC ==
  
'''Note that the Linux images here refer specifically to the images of Linux distributions like Debian, Ubuntu, and OPi OS Arch downloaded from the [http://www.orangepi.org/html/serviceAndSupport/index.html Orange Pi's data download page], and Ubuntu PC refers to a personal computer with Ubuntu installed.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that the Linux images here refer specifically to the images of Linux distributions like Debian, Ubuntu, and OPi OS Arch downloaded from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html Orange Pi's data download page], and Ubuntu PC refers to a personal computer with Ubuntu installed.'''</big>
 +
|}
  
 
# First prepare a 16GB or larger capacity TF card, TF card transmission speed must be class10 or above, it is recommended to use Sandisk and other brands of TF card
 
# First prepare a 16GB or larger capacity TF card, TF card transmission speed must be class10 or above, it is recommended to use Sandisk and other brands of TF card
 
# Then use the card reader to insert the TF card into the computer
 
# Then use the card reader to insert the TF card into the computer
 
# Download the balenaEtcher software, the download address is
 
# Download the balenaEtcher software, the download address is
 
+
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[https://www.balena.io/etcher/ '''https://www.balena.io/etcher/''']
 
[https://www.balena.io/etcher/ '''https://www.balena.io/etcher/''']
 +
|}
  
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
 
<li><p>After entering the balenaEtcher download page, click the green download button to jump to the place where the software is downloaded</p>
 
<li><p>After entering the balenaEtcher download page, click the green download button to jump to the place where the software is downloaded</p>
<p>[[File:media/image22.png|434x208px]]</p></li>
+
<p>[[File:cm4-img22.png]]</p></li>
 
<li><p>Then choose to download the Linux version of the software</p>
 
<li><p>Then choose to download the Linux version of the software</p>
<p>[[File:media/image58.png|430x163px]]</p></li>
+
<p>[[File:cm4-img58.png]]</p></li>
<li><p>Download the compressed Linux operating system image file you want to burn from [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi's data download page'''], and then use the decompression software to decompress it. Files ending with &quot;'''.img''' &quot;in the decompressed files are the image files of the operating system, and the size is generally more than 2GB</p>
+
<li><p>Download the compressed Linux operating system image file you want to burn from [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi's data download page'''], and then use the decompression software to decompress it. Files ending with &quot;'''.img''' &quot;in the decompressed files are the image files of the operating system, and the size is generally more than 2GB</p>
 
<p>The following command is used to decompress the compressed package ending in 7z</p>
 
<p>The following command is used to decompress the compressed package ending in 7z</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''7z x Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z'''</p>
 
<p>test@test:~$ '''7z x Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z'''</p>
 
<p>test@test:~$ '''ls Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.*'''</p>
 
<p>test@test:~$ '''ls Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.*'''</p>
 
<p>Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.sha #Checksum file</p>
 
<p>Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.sha #Checksum file</p>
<p>Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.img #Image file</p></li>
+
<p>Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.img #Image file</p>
 +
|}
 +
</li>
 
<li><p>After decompressing the image, you can first use the '''sha256sum -c *.sha''' command to calculate whether the checksum is correct, if the success indicates that the downloaded image is not wrong, you can rest assured to burn to the TF card, if the '''checksum does not match''' that there is a problem with the downloaded image, please try to re-download</p>
 
<li><p>After decompressing the image, you can first use the '''sha256sum -c *.sha''' command to calculate whether the checksum is correct, if the success indicates that the downloaded image is not wrong, you can rest assured to burn to the TF card, if the '''checksum does not match''' that there is a problem with the downloaded image, please try to re-download</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''sha256sum -c *.sha'''</p>
 
<p>test@test:~$ '''sha256sum -c *.sha'''</p>
<p>Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.img: OK</p></li>
+
<p>Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.img: OK</p>
 +
|}
 +
</li>
 
<li><p>Then double-click '''balenaEtcher-1.5.109-x64.AppImage''' in the graphical interface of Ubuntu PC to open balenaEtcher '''(no installation required)''', and the interface after balenaEtcher is opened is shown as the following figure</p>
 
<li><p>Then double-click '''balenaEtcher-1.5.109-x64.AppImage''' in the graphical interface of Ubuntu PC to open balenaEtcher '''(no installation required)''', and the interface after balenaEtcher is opened is shown as the following figure</p>
<p>[[File:media/image59.png|423x251px]]</p></li>
+
<p>[[File:cm4-img59.png]]</p></li>
 
<li><p>The specific steps to burn a Linux image using balenaEtcher are shown below</p>
 
<li><p>The specific steps to burn a Linux image using balenaEtcher are shown below</p>
<p>a. Select the path of the Linux image file to be burned</p>
+
:<p>a. Select the path of the Linux image file to be burned</p>
<p>b. Then select the drive letter of the TF card</p>
+
:<p>b. Then select the drive letter of the TF card</p>
<p>c. Finally, clicking Flash will start burning the Linux image to the TF card</p>
+
:<p>c. Finally, clicking Flash will start burning the Linux image to the TF card</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image27.png|501x281px|03]]
+
:[[File:cm4-img27.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>The interface displayed during balenaEtcher burning the Linux image is as shown in the following figure. In addition, the progress bar showing purple indicates that the Linux image is burning to the TF card</p>
 
<li><p>The interface displayed during balenaEtcher burning the Linux image is as shown in the following figure. In addition, the progress bar showing purple indicates that the Linux image is burning to the TF card</p>
<p>[[File:media/image60.png|429x184px]]</p></li>
+
<p>[[File:cm4-img60.png]]</p></li>
 
<li><p>After the Linux image is burned, balenaEtcher will also verify the image burned to the TF card by default to ensure that there is no problem in the burning process. As shown in the following figure, the green progress bar indicates that the image has been burned, and balenaEtcher is verifying the burned image</p>
 
<li><p>After the Linux image is burned, balenaEtcher will also verify the image burned to the TF card by default to ensure that there is no problem in the burning process. As shown in the following figure, the green progress bar indicates that the image has been burned, and balenaEtcher is verifying the burned image</p>
<p>[[File:media/image61.png|436x190px]]</p></li></ol>
+
<p>[[File:cm4-img61.png]]</p></li></ol>
  
 
<!-- -->
 
<!-- -->
 
<ol start="12" style="list-style-type: decimal;">
 
<ol start="12" style="list-style-type: decimal;">
 
<li><p>The display interface of balenaEtcher after the successful burning is shown as the following figure. If the green indicator icon is displayed indicating that the image is burned successfully, you can exit balenaEtcher at this time, and then pull out the TF card and insert it into the TF card slot of the development board</p>
 
<li><p>The display interface of balenaEtcher after the successful burning is shown as the following figure. If the green indicator icon is displayed indicating that the image is burned successfully, you can exit balenaEtcher at this time, and then pull out the TF card and insert it into the TF card slot of the development board</p>
<p>[[File:media/image62.png|435x257px]]</p></li></ol>
+
<p>[[File:cm4-img62.png]]</p></li></ol>
  
 
<span id="methods-for-burning-linux-images-to-emmc"></span>
 
<span id="methods-for-burning-linux-images-to-emmc"></span>
 +
 
== Methods for burning Linux images to eMMC ==
 
== Methods for burning Linux images to eMMC ==
  
Line 548: Line 645:
 
=== Methods for burning Linux images to eMMC using RKDevTool ===
 
=== Methods for burning Linux images to eMMC using RKDevTool ===
  
'''Note that all of the following actions are performed on a Windows computer.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 
+
|-
'''Note that the Linux images here specifically refer to the images of Linux distributions such as Debian, Ubuntu, and OPi OS Arch downloaded from the [http://www.orangepi.org/html/serviceAndSupport/index.html Orange Pi's data download page].'''
+
|
 +
<big>'''Note that all of the following actions are performed on a Windows computer.'''</big>
 +
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that the Linux images here specifically refer to the images of Linux distributions such as Debian, Ubuntu, and OPi OS Arch downloaded from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html Orange Pi's data download page].'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
Line 556: Line 660:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image18.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
+
[[File:cm4-img18.png]]
  
 
</div></li>
 
</div></li>
<li><p>Then download the Rockchip '''DriverAssitant_v5.12.zip''' and '''MiniLoader''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi's data download page''']</p>
+
<li><p>Then download the Rockchip '''DriverAssitant_v5.12.zip''' and '''MiniLoader''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi's data download page''']</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>On the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi's data download page'''], first select the official tool and then go to the following folder</p>
+
<li><p>On the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi's data download page'''], first select the official tool and then go to the following folder</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image31.png|360x115px|C:\Users\orangepi\Desktop\用户手册插图\Pi5 Plus\6d1c77df7eeb7e491e5f79e8d85cbdc.png6d1c77df7eeb7e491e5f79e8d85cbdc]]
+
[[File:cm4-img31.png]]
  
 
</div></li>
 
</div></li>
Line 570: Line 674:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image32.png|320x144px|C:\Users\orangepi\Desktop\用户手册插图\Pi5 Plus\34acacded202b29eee42fd20f5b4c92.png34acacded202b29eee42fd20f5b4c92]]
+
[[File:cm4-img32.png]]
  
 
</div>
 
</div>
<p>'''Note that the folder <span class="mark">&quot;MiniLoader- What you Need to burn Linux images&quot;</span> is hereinafter referred to as the MiniLoader folder.'''</p></li></ol>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''Note that the folder &quot;MiniLoader- What you Need to burn Linux images&quot; is hereinafter referred to as the MiniLoader folder.'''</p></big>
 +
|}
 +
</li></ol>
 
</li>
 
</li>
<li><p>Download the compressed Linux operating system image file you want to burn from the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi's data download page'''], and then use the decompression software to decompress it. After decompressing the file, the file ending with &quot;'''.img''' &quot;is the image file of the operating system, and the size is generally more than 2GB</p></li>
+
<li><p>Download the compressed Linux operating system image file you want to burn from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi's data download page'''], and then use the decompression software to decompress it. After decompressing the file, the file ending with &quot;'''.img''' &quot;is the image file of the operating system, and the size is generally more than 2GB</p></li>
 
<li><p>Then use the decompression software to decompress '''DriverAssitant_v5.12.zip''', and then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it</p>
 
<li><p>Then use the decompression software to decompress '''DriverAssitant_v5.12.zip''', and then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it</p>
<p>[[File:media/image33.png|496x146px]]</p></li>
+
<p>[[File:cm4-img33.png]]</p></li>
 
<li><p>Open '''DriverInstall.exe''' and install the SWick micro driver as follows</p>
 
<li><p>Open '''DriverInstall.exe''' and install the SWick micro driver as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>Click the "'''Driver Installation'''" button</p>
 
<li><p>Click the "'''Driver Installation'''" button</p>
<p>[[File:media/image34.png|284x149px]]</p></li>
+
<p>[[File:cm4-img34.png]]</p></li>
 
<li><p>Wait for a period of time, the pop-up window will prompt &gt; &quot;'''Driver installation successful'''&quot;, and then click the &gt; &quot;'''OK'''&quot; button</p>
 
<li><p>Wait for a period of time, the pop-up window will prompt &gt; &quot;'''Driver installation successful'''&quot;, and then click the &gt; &quot;'''OK'''&quot; button</p>
<p>[[File:media/image35.png|296x154px]]</p></li></ol>
+
<p>[[File:cm4-img35.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>Then decompress '''RKDevTool_Release_v3.15.zip''', this software does not need to be installed, find '''RKDevTool''' in the decompressed folder and open it</p>
 
<li><p>Then decompress '''RKDevTool_Release_v3.15.zip''', this software does not need to be installed, find '''RKDevTool''' in the decompressed folder and open it</p>
<p>[[File:media/image36.png|484x143px]]</p></li>
+
<p>[[File:cm4-img36.png]]</p></li>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not connected to the development board through the USB2.0 public-to-public data cable at this time, the lower left corner will indicate &quot;'''no device found'''&quot;.</p>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not connected to the development board through the USB2.0 public-to-public data cable at this time, the lower left corner will indicate &quot;'''no device found'''&quot;.</p>
<p>[[File:media/image37.png|442x208px]]</p></li>
+
<p>[[File:cm4-img37.png]]</p></li>
 
<li><p>Then start burning the Linux image into eMMC</p>
 
<li><p>Then start burning the Linux image into eMMC</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>First, connect the development board to the Windows computer through the USB2.0 male-to-public data cable. The position of the USB2.0 burning port on the development board is shown in the figure below</p>
 
<li><p>First, connect the development board to the Windows computer through the USB2.0 male-to-public data cable. The position of the USB2.0 burning port on the development board is shown in the figure below</p>
<p>[[File:media/image38.png|269x108px]]</p></li>
+
<p>[[File:cm4-img38.png]]</p></li>
 
<li><p>Ensure that no TF card is inserted into the development board and no power supply is connected</p></li>
 
<li><p>Ensure that no TF card is inserted into the development board and no power supply is connected</p></li>
 
<li><p>Then press and hold the MaskROM button on the development board. The position of the MaskROM button on the development board is shown as follows:</p>
 
<li><p>Then press and hold the MaskROM button on the development board. The position of the MaskROM button on the development board is shown as follows:</p>
<p>[[File:media/image39.png|439x98px]]</p></li>
+
<p>[[File:cm4-img39.png]]</p></li>
 
<li><p>Then connect the Type-C interface to the development board, and power on, and then you can release the MaskROM button</p>
 
<li><p>Then connect the Type-C interface to the development board, and power on, and then you can release the MaskROM button</p>
<p>[[File:media/image40.png|441x103px]]</p></li>
+
<p>[[File:cm4-img40.png]]</p></li>
 
<li><p>If the previous steps are smooth, the development board will enter '''MASKROM''' mode at this time, and the interface of the burning tool will prompt &quot;'''Found a MASKROM device'''&quot;.</p>
 
<li><p>If the previous steps are smooth, the development board will enter '''MASKROM''' mode at this time, and the interface of the burning tool will prompt &quot;'''Found a MASKROM device'''&quot;.</p>
<p>[[File:media/image41.png|457x215px]]</p></li>
+
<p>[[File:cm4-img41.png]]</p></li>
 
<li><p>Then place the mouse cursor on the field below</p>
 
<li><p>Then place the mouse cursor on the field below</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image63.jpeg|458x215px|C:\Users\orangepi\Desktop\用户手册插图\Pi5 Plus\未标题-4.jpg未标题-4]]
+
[[File:cm4-img63.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click the right mouse button to pop up the selection interface as shown in the following figure</p>
 
<li><p>Then click the right mouse button to pop up the selection interface as shown in the following figure</p>
<p>[[File:media/image43.png|460x216px]]</p></li>
+
<p>[[File:cm4-img43.png]]</p></li>
 
<li><p>Then select the '''Import configuration''' option</p>
 
<li><p>Then select the '''Import configuration''' option</p>
<p>[[File:media/image44.png|458x215px]]</p></li>
+
<p>[[File:cm4-img44.png]]</p></li>
 
<li><p>Then select the '''rk356x_linux_emmc.cfg''' configuration file in the '''MiniLoader''' folder downloaded earlier and click '''Open'''</p>
 
<li><p>Then select the '''rk356x_linux_emmc.cfg''' configuration file in the '''MiniLoader''' folder downloaded earlier and click '''Open'''</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image64.png|466x244px|UWD{G1]NB1Y${7ARF[8IIVP]]
+
[[File:cm4-img64.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click '''<span class="mark">OK</span>'''</p>
 
<li><p>Then click '''<span class="mark">OK</span>'''</p>
<p>[[File:media/image65.png|468x220px]]</p></li>
+
<p>[[File:cm4-img65.png]]</p></li>
 
<li><p>Then click on the location shown in the image below</p>
 
<li><p>Then click on the location shown in the image below</p>
<p>[[File:media/image66.png|462x217px]]</p></li>
+
<p>[[File:cm4-img66.png]]</p></li>
 
<li><p>Select '''MiniLoaderAll.bin''' from the '''MiniLoader''' folder downloaded earlier, and then click '''<span class="mark">Open</span>'''</p>
 
<li><p>Select '''MiniLoaderAll.bin''' from the '''MiniLoader''' folder downloaded earlier, and then click '''<span class="mark">Open</span>'''</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image48.png|462x236px|(@G{}Y0U)`5J5K@9R(ICYWA]]
+
[[File:cm4-img48.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click on the location shown in the image below</p>
 
<li><p>Then click on the location shown in the image below</p>
<p>[[File:media/image67.png|459x216px]]</p></li>
+
<p>[[File:cm4-img67.png]]</p></li>
 
<li><p>Then select the path of the Linux image you want to burn and click '''<span class="mark">Open</span>'''</p>
 
<li><p>Then select the path of the Linux image you want to burn and click '''<span class="mark">Open</span>'''</p>
<p>'''Before burning the image, it is recommended to rename the Linux image to orangepi.img or something shorter so that you can see the percentage of the burn progress when burning the image.'''</p>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<p>[[File:media/image50.png|499x234px]]</p></li>
+
|-
 +
|
 +
<big><p>'''Before burning the image, it is recommended to rename the Linux image to orangepi.img or something shorter so that you can see the percentage of the burn progress when burning the image.'''</p></big>
 +
|}
 +
<p>[[File:cm4-img50.png]]</p></li>
 
<li><p>Then check the '''<span class="mark">Force write to address</span>''' option</p>
 
<li><p>Then check the '''<span class="mark">Force write to address</span>''' option</p>
<p>[[File:media/image68.png|501x235px]]</p></li>
+
<p>[[File:cm4-img68.png]]</p></li>
 
<li><p>Click the Execute button again to start burning the Linux image to eMMC on the development board</p>
 
<li><p>Click the Execute button again to start burning the Linux image to eMMC on the development board</p>
<p>[[File:media/image69.png|502x236px]]</p></li>
+
<p>[[File:cm4-img69.png]]</p></li>
 
<li><p>The following figure shows the display log after the Linux image is burned</p>
 
<li><p>The following figure shows the display log after the Linux image is burned</p>
<p>[[File:media/image70.png|500x235px]]</p></li>
+
<p>[[File:cm4-img70.png]]</p></li>
 
<li><p>After the Linux image is burned into eMMC, the Linux system automatically starts</p></li></ol>
 
<li><p>After the Linux image is burned into eMMC, the Linux system automatically starts</p></li></ol>
 
</li></ol>
 
</li></ol>
  
 
<span id="how-to-burn-a-linux-image-to-emmc-using-the-dd-command"></span>
 
<span id="how-to-burn-a-linux-image-to-emmc-using-the-dd-command"></span>
 +
 
=== How to burn a Linux image to eMMC using the dd command ===
 
=== How to burn a Linux image to eMMC using the dd command ===
  
'''Note that by Linux images, I specifically mean images of Linux distributions such as Debian, Ubuntu, or OPi OS Arch downloaded from the [http://www.orangepi.org/html/serviceAndSupport/index.html Orange Pi's data download page].'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that by Linux images, I specifically mean images of Linux distributions such as Debian, Ubuntu, or OPi OS Arch downloaded from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html Orange Pi's data download page].'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
<li><p>Using dd command to burn Linux image to eMMC needs TF card to complete, so first need to burn Linux image to TF card, and then use TF card to start the development board into the Linux system. For the method of burning a Linux image to a TF card, see the two sections for '''[[\l|the method of burning a Linux image to a TF Card based on a Windows PC]]''' and [[\l|'''the method of burning a Linux image to a TF card based on an Ubuntu PC''']].</p></li>
+
<li><p>Using dd command to burn Linux image to eMMC needs TF card to complete, so first need to burn Linux image to TF card, and then use TF card to start the development board into the Linux system. For the method of burning a Linux image to a TF card, see the two sections for '''[[Orange Pi CM4#Method of burning Linux image to TF card based on Windows PC|the method of burning a Linux image to a TF Card based on a Windows PC]]''' and [[Orange Pi CM4#Method of burning Linux image to TF card based on Ubuntu PC|'''the method of burning a Linux image to a TF card based on an Ubuntu PC''']].</p></li>
<li><p>After starting the Linux system with the TF card, we first upload the decompressed Linux image file (Debian, Ubuntu image or OPi OS (Arch) image downloaded from the official website) to the TF card. For details about how to upload a Linux image file to the development board, see section [[\l|'''Uploading Files to the Linux system on the Development Board''']].</p></li>
+
<li><p>After starting the Linux system with the TF card, we first upload the decompressed Linux image file (Debian, Ubuntu image or OPi OS (Arch) image downloaded from the official website) to the TF card. For details about how to upload a Linux image file to the development board, see section [[Orange Pi CM4#Method of uploading files to the development board Linux system|'''Uploading Files to the Linux system on the Development Board''']].</p></li>
 
<li><p>After uploading the image to the Linux system of the development board, we can enter the storage path of the image file in the command line of the Linux system of the development board. For example, I saved the Linux image of the development board in the directory '''/home/orangepi/Desktop'''. Then go to the '''/home/orangepi/Desktop''' directory and you will see the uploaded image file.</p>
 
<li><p>After uploading the image to the Linux system of the development board, we can enter the storage path of the image file in the command line of the Linux system of the development board. For example, I saved the Linux image of the development board in the directory '''/home/orangepi/Desktop'''. Then go to the '''/home/orangepi/Desktop''' directory and you will see the uploaded image file.</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''cd /home/orangepi/Desktop'''</p>
 
<p>orangepi@orangepi:~$ '''cd /home/orangepi/Desktop'''</p>
 
<p>orangepi@orangepi:~/Desktop$ '''ls'''</p>
 
<p>orangepi@orangepi:~/Desktop$ '''ls'''</p>
 
<p>Orangepicm4_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img</p>
 
<p>Orangepicm4_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img</p>
<p>'''How to enter the development board Linux system command line?'''</p>
+
|}
<p>'''1. For details about how to log in to the terminal through the serial port, see section [[\l|Debugging Serial Port]].'''</p>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<p>'''2. For details about how to remotely log in to the Linux operating system over ssh, see section &quot;[[\l|Logging In to the Development Board over SSH]]&quot;.'''</p>
+
|-
<p>'''3. If you are connected to a display screen such as HDMI or LCD, you can open a command line terminal on the desktop.'''</p></li>
+
|
 +
<big><p>'''How to enter the development board Linux system command line?'''</p>
 +
<p>'''1. For details about how to log in to the terminal through the serial port, see section [[Orange Pi CM4#How to use the debugging serial port|Debugging Serial Port]].'''</p>
 +
<p>'''2. For details about how to remotely log in to the Linux operating system over ssh, see section &quot;[[Orange Pi CM4#SSH remote login development board|Logging In to the Development Board over SSH]]&quot;.'''</p>
 +
<p>'''3. If you are connected to a display screen such as HDMI or LCD, you can open a command line terminal on the desktop.'''</p></big>
 +
|}
 +
</li>
 
<li><p>Next, we first use the following command to identify the eMMC device node</p>
 
<li><p>Next, we first use the following command to identify the eMMC device node</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~/Desktop$ '''ls /dev/mmcblk*boot0 | cut -c1-12'''</p>
 
<p>orangepi@orangepi:~/Desktop$ '''ls /dev/mmcblk*boot0 | cut -c1-12'''</p>
<p>'''/dev/mmcblk0'''</p></li>
+
<p>'''<span style="color:#FF0000">/dev/mmcblk0</span>'''</p>
 +
|}
 +
</li>
 
<li><p>Then we can use the dd command to clear eMMC, pay attention to the '''of=''' parameter after please fill in the output result of the above command</p>
 
<li><p>Then we can use the dd command to clear eMMC, pay attention to the '''of=''' parameter after please fill in the output result of the above command</p>
<p>orangepi@orangepi:~/Desktop$ '''sudo dd bs=1M if=/dev/zero of=/dev/mmcblk0 count=1000 status=progress'''</p>
+
{| class="wikitable" style="width:800px;"
<p>orangepi@orangepi:~/Desktop$ '''sudo sync'''</p></li>
+
|-
 +
|
 +
<p>orangepi@orangepi:~/Desktop$ '''sudo dd bs=1M if=/dev/zero of=<span style="color:#FF0000">/dev/mmcblk0</span> count=1000 status=progress'''</p>
 +
<p>orangepi@orangepi:~/Desktop$ '''sudo sync'''</p>
 +
|}
 +
</li>
 
<li><p>You can then use the dd command to burn the Linux image of the development board into eMMC</p>
 
<li><p>You can then use the dd command to burn the Linux image of the development board into eMMC</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>'''if''' = parameter in the command is to fill in behind the Linux + Linux mirror mirror to store the full path name (such as'''<span class="mark">/home/orangepi/Desktop/Linux image name</span>'''). Since we have entered the path of the Linux image above, we only need to fill in the name of the Linux image.</p></li>
 
<li><p>'''if''' = parameter in the command is to fill in behind the Linux + Linux mirror mirror to store the full path name (such as'''<span class="mark">/home/orangepi/Desktop/Linux image name</span>'''). Since we have entered the path of the Linux image above, we only need to fill in the name of the Linux image.</p></li>
 
<li><p>Do not copy the Linux image name in the following command. Replace it with the actual image name (because the version of the image may be updated).</p>
 
<li><p>Do not copy the Linux image name in the following command. Replace it with the actual image name (because the version of the image may be updated).</p>
<p>'''sudo dd bs=1M if=Orangepicm4_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img of=/dev/mmcblk0 status=progress'''</p>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>'''sudo dd bs=1M if=Orangepicm4_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img of=<span style="color:#FF0000">/dev/mmcblk0</span> status=progress'''</p>
 
<p>'''sudo''' '''sync'''</p>
 
<p>'''sudo''' '''sync'''</p>
<p>'''Note that if you are uploading a.7z or.xz Linux image file, please decompress it before using the dd command to burn it.'''</p>
+
|}
<p>'''A detailed description of all the parameters of the dd command and more usage can be seen by running the man dd command on Linux.'''</p></li></ol>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''<span style="color:#FF0000">Note that if you are uploading a.7z or.xz Linux image file, please decompress it before using the dd command to burn it.</span>'''</p>
 +
<p>'''A detailed description of all the parameters of the dd command and more usage can be seen by running the man dd command on Linux.'''</p></big>
 +
|}
 +
</li></ol>
 
</li>
 
</li>
 
<li><p>After successfully burning the Linux image of the development board to eMMC, you can use the poweroff command to shut down. Then pull out the TF card, power it on again, and the Linux system in eMMC will be started.</p></li></ol>
 
<li><p>After successfully burning the Linux image of the development board to eMMC, you can use the poweroff command to shut down. Then pull out the TF card, power it on again, and the Linux system in eMMC will be started.</p></li></ol>
  
 
<span id="method-of-burning-linux-image-to-spiflashnvme-ssd"></span>
 
<span id="method-of-burning-linux-image-to-spiflashnvme-ssd"></span>
 +
 
== Method of burning Linux image to SPIFlash+NVMe SSD ==
 
== Method of burning Linux image to SPIFlash+NVMe SSD ==
  
'''Before starting to burn the image, it is necessary to ensure that the SPI Flash chip has been affixed to the development board, because the development board does not have SPI Flash chip when it is shipped, so it is necessary to purchase and weld it by itself. We suggest that the SPI Flash chip model be XM25QU128CWIQT08Q'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 
+
|-
'''eMMC has a higher boot priority than NVMe SSDS. Therefore, you need to clear the eMMC system before burning the image. For details about how to clear eMMC, see section &quot;[[\l|Clearing eMMC using RKDevTool]]&quot;'''
+
|
 
+
<big>'''Before starting to burn the image, it is necessary to ensure that the SPI Flash chip has been affixed to the development board, because the development board does not have SPI Flash chip when it is shipped, so it is necessary to purchase and weld it by itself. We suggest that the SPI Flash chip model be <span style="color:#FF0000">XM25QU128CWIQT08Q</span>'''</big>
'''Note that the Linux images here specifically refer to the images of Linux distributions such as Debian, Ubuntu, and OPi OS Arch downloaded from the Orange Pi's data download page.'''
+
|}
 
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
'''Note that all of the following actions are performed on a Windows computer.'''
+
|-
 +
|
 +
<big>'''eMMC has a higher boot priority than NVMe SSDS. Therefore, you need to clear the eMMC system before burning the image. For details about how to clear eMMC, see section &quot;[[Orange Pi CM4#How to clear eMMC using RKDevTool|Clearing eMMC using RKDevTool]]&quot;'''</big>
 +
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that the Linux images here specifically refer to the images of Linux distributions such as Debian, Ubuntu, and OPi OS Arch downloaded from the Orange Pi's data download page.'''</big>
 +
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that all of the following actions are performed on a Windows computer.'''</big>
 +
|}
  
 
<span id="method-of-burning-using-rkdevtool"></span>
 
<span id="method-of-burning-using-rkdevtool"></span>
Line 691: Line 851:
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>M.2 2230 SSD specifications are as follows</p>
 
<li><p>M.2 2230 SSD specifications are as follows</p>
<p>[[File:media/image71.png|157x128px]]</p></li>
+
<p>[[File:cm4-img71.png]]</p></li>
 
<li><p>M.2 2242 SSDS are described as follows</p>
 
<li><p>M.2 2242 SSDS are described as follows</p>
<p>[[File:media/image72.png|174x105px]]</p></li></ol>
+
<p>[[File:cm4-img72.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>Insert the NVMe SSD into the M.2 PCIe port on the development board and secure it</p>
 
<li><p>Insert the NVMe SSD into the M.2 PCIe port on the development board and secure it</p>
<p>[[File:media/image73.png|274x185px]]</p></li>
+
<p>[[File:cm4-img73.png]]</p></li>
 
<li><p>Please ensure that the SPI Flash is affixed to the development board. The position of SPI Flash on the development board is shown in the figure below. No other Settings are required before burning</p>
 
<li><p>Please ensure that the SPI Flash is affixed to the development board. The position of SPI Flash on the development board is shown in the figure below. No other Settings are required before burning</p>
<p>[[File:media/image74.png|274x205px]]</p></li>
+
<p>[[File:cm4-img74.png]]</p></li>
 
<li><p>Then you need to prepare a good quality USB2.0 public-to-public data cable</p>
 
<li><p>Then you need to prepare a good quality USB2.0 public-to-public data cable</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image18.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
+
[[File:cm4-img18.png]]
  
 
</div></li>
 
</div></li>
<li><p>Then download the Rockchip '''DriverAssitant_v5.12.zip''' and '''MiniLoader''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi's data download page''']</p>
+
<li><p>Then download the Rockchip '''DriverAssitant_v5.12.zip''' and '''MiniLoader''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi's data download page''']</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>On the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi's data download page'''], first select the '''official tool''' and then go to the following folder</p>
+
<li><p>On the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi's data download page'''], first select the '''official tool''' and then go to the following folder</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image31.png|362x115px|C:\Users\orangepi\Desktop\用户手册插图\Pi5 Plus\6d1c77df7eeb7e491e5f79e8d85cbdc.png6d1c77df7eeb7e491e5f79e8d85cbdc]]
+
[[File:cm4-img31.png]]
  
 
</div></li>
 
</div></li>
Line 716: Line 876:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image32.png|264x118px|C:\Users\orangepi\Desktop\用户手册插图\Pi5 Plus\34acacded202b29eee42fd20f5b4c92.png34acacded202b29eee42fd20f5b4c92]]
+
[[File:cm4-img32.png]]
  
 
</div>
 
</div>
<p>'''Note that the folder <span class="mark">&quot;MiniLoader- What you Need to burn Linux images&quot;</span> is hereinafter referred to as the MiniLoader folder.'''</p></li></ol>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''Note that the folder <span class="mark">&quot;MiniLoader- What you Need to burn Linux images&quot;</span> is hereinafter referred to as the MiniLoader folder.'''</p></big>
 +
|}
 +
</li></ol>
 
</li>
 
</li>
<li><p>Download the compressed Linux operating system image file you want to burn from the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi's data download page'''], and then use the decompression software to decompress it. In the decompressed file, the file ending with &quot;'''.img''' &quot;is the image file of the operating system, and the size is generally more than 2GB</p></li>
+
<li><p>Download the compressed Linux operating system image file you want to burn from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi's data download page'''], and then use the decompression software to decompress it. In the decompressed file, the file ending with &quot;'''.img''' &quot;is the image file of the operating system, and the size is generally more than 2GB</p></li>
 
<li><p>Then use the decompression software to decompress '''DriverAssitant_v5.12.zip''', and then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it</p>
 
<li><p>Then use the decompression software to decompress '''DriverAssitant_v5.12.zip''', and then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it</p>
<p>[[File:media/image33.png|446x131px]]</p></li>
+
<p>[[File:cm4-img33.png]]</p></li>
 
<li><p>Open '''DriverInstall.exe''' and install the Rockchip driver as follows</p>
 
<li><p>Open '''DriverInstall.exe''' and install the Rockchip driver as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>Click the &quot;'''Driver Installation'''&quot; button</p>
 
<li><p>Click the &quot;'''Driver Installation'''&quot; button</p>
<p>[[File:media/image34.png|253x133px]]</p></li>
+
<p>[[File:cm4-img34.png]]</p></li>
<li><p>Wait for a period of time, the pop-up window will prompt &gt; &quot;'''Driver installation successful'''&quot;, and then click the &gt; &quot;'''OK'''&quot; button</p>
+
<li><p>Wait for a period of time, the pop-up window will prompt &quot;'''Driver installation successful'''&quot;, and then click the &quot;'''OK'''&quot; button</p>
<p>[[File:media/image35.png|269x140px]]</p></li></ol>
+
<p>[[File:cm4-img35.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>Then decompress '''RKDevTool_Release_v3.15.zip''', this software does not need to be installed, find '''RKDevTool''' in the decompressed folder and open it</p>
 
<li><p>Then decompress '''RKDevTool_Release_v3.15.zip''', this software does not need to be installed, find '''RKDevTool''' in the decompressed folder and open it</p>
<p>[[File:media/image36.png|402x119px]]</p></li>
+
<p>[[File:cm4-img36.png]]</p></li>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not connected to the development board through the USB2.0 public-to-public data cable at this time, the lower left corner will indicate &quot;'''No device found'''&quot;.</p>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not connected to the development board through the USB2.0 public-to-public data cable at this time, the lower left corner will indicate &quot;'''No device found'''&quot;.</p>
<p>[[File:media/image37.png|402x189px]]</p></li>
+
<p>[[File:cm4-img37.png]]</p></li>
 
<li><p>Then start burning the Linux image to the SSD</p>
 
<li><p>Then start burning the Linux image to the SSD</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>First, connect the development board to the Windows computer &gt; through the USB2.0 male-to-public data cable. The position of &gt; the USB2.0 burning interface on the development board is shown &gt; in the figure below</p>
+
<li><p>First, connect the development board to the Windows computer through the USB2.0 male-to-public data cable. The position of the USB2.0 burning interface on the development board is shown in the figure below</p>
<p>[[File:media/image38.png|269x108px]]</p></li>
+
<p>[[File:cm4-img38.png]]</p></li>
<li><p>Ensure that no TF card is inserted into the development board &gt; and no power supply is connected</p></li>
+
<li><p>Ensure that no TF card is inserted into the development board and no power supply is connected</p></li>
<li><p>Then press and hold the MaskROM button on the development board. &gt; The position of the MaskROM button on the development board is &gt; shown as follows:</p>
+
<li><p>Then press and hold the MaskROM button on the development board. The position of the MaskROM button on the development board is shown as follows:</p>
<p>[[File:media/image39.png|439x98px]]</p></li>
+
<p>[[File:cm4-img39.png]]</p></li>
<li><p>Then connect the Type-C interface to the development board, and &gt; power on, and then you can release the MaskROM button</p>
+
<li><p>Then connect the Type-C interface to the development board, and power on, and then you can release the MaskROM button</p>
<p>[[File:media/image40.png|441x103px]]</p></li>
+
<p>[[File:cm4-img40.png]]</p></li>
<li><p>If the previous steps are smooth, the development board will &gt; enter '''MASKROM''' mode at this time, and the interface of the &gt; burning tool will prompt &quot;'''Found a MASKROM device'''&quot;.</p>
+
<li><p>If the previous steps are smooth, the development board will enter '''MASKROM''' mode at this time, and the interface of the burning tool will prompt &quot;'''Found a MASKROM device'''&quot;.</p>
<p>[[File:media/image41.png|457x215px]]</p></li>
+
<p>[[File:cm4-img41.png]]</p></li>
 
<li><p>Then place the mouse cursor on the field below</p>
 
<li><p>Then place the mouse cursor on the field below</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image63.jpeg|458x215px|C:\Users\orangepi\Desktop\用户手册插图\Pi5 Plus\未标题-4.jpg未标题-4]]
+
[[File:cm4-img63.png]]
  
 
</div></li>
 
</div></li>
<li><p>Then click the right mouse button to pop up the selection &gt; interface as shown in the following figure</p>
+
<li><p>Then click the right mouse button to pop up the selection interface as shown in the following figure</p>
<p>[[File:media/image43.png|453x213px]]</p></li>
+
<p>[[File:cm4-img43.png]]</p></li>
 
<li><p>Then select the '''Import configuration''' option</p>
 
<li><p>Then select the '''Import configuration''' option</p>
<p>[[File:media/image44.png|458x215px]]</p></li>
+
<p>[[File:cm4-img44.png]]</p></li>
<li><p>Then go to the previously downloaded '''MiniLoader''' folder, &gt; select the '''rk356x_linux_pcie.cfg''' configuration file, and &gt; click '''Open'''</p>
+
<li><p>Then go to the previously downloaded '''MiniLoader''' folder, select the '''rk356x_linux_pcie.cfg''' configuration file, and click '''Open'''</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image75.png|469x240px|9~MB4BQ%AB[R]6]O7]D6885]]
+
[[File:cm4-img75.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click '''<span class="mark">OK</span>'''</p>
 
<li><p>Then click '''<span class="mark">OK</span>'''</p>
<p>[[File:media/image76.png|468x220px]]</p></li>
+
<p>[[File:cm4-img76.png]]</p></li>
 
<li><p>Then click on the location shown in the image below</p>
 
<li><p>Then click on the location shown in the image below</p>
<p>[[File:media/image77.png|475x223px]]</p></li>
+
<p>[[File:cm4-img77.png]]</p></li>
<li><p>Select '''MiniLoaderAll.bin''' from the '''MiniLoader''' folder &gt; downloaded earlier, and then click '''<span class="mark">Open</span>'''</p>
+
<li><p>Select '''MiniLoaderAll.bin''' from the '''MiniLoader''' folder downloaded earlier, and then click '''<span class="mark">Open</span>'''</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image48.png|483x247px|(@G{}Y0U)`5J5K@9R(ICYWA]]
+
[[File:cm4-img48.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click on the location shown in the image below</p>
 
<li><p>Then click on the location shown in the image below</p>
<p>[[File:media/image78.png|486x228px]]</p></li>
+
<p>[[File:cm4-img78.png]]</p></li>
<li><p>Then go to the previously downloaded '''MiniLoader''' folder, &gt; select '''rkspi_loader.img''', and click '''<span class="mark">Open</span>'''</p>
+
<li><p>Then go to the previously downloaded '''MiniLoader''' folder, select '''rkspi_loader.img''', and click '''<span class="mark">Open</span>'''</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image79.png|489x250px|IVB8KM4PM(J~U[(I3HB}$XU]]
+
[[File:cm4-img79.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click on the location shown in the image below</p>
 
<li><p>Then click on the location shown in the image below</p>
<p>[[File:media/image80.png|493x231px]]</p></li>
+
<p>[[File:cm4-img80.png]]</p></li>
<li><p>Then select the path of the Linux image you want to burn and &gt; click '''<span class="mark">Open</span>'''</p>
+
<li><p>Then select the path of the Linux image you want to burn and click '''<span class="mark">Open</span>'''</p>
<p>'''Before burning the image, it is recommended to rename the Linux image to orangepi.img or something shorter so that you can see the percentage of the burn progress when burning the image.'''</p>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<p>[[File:media/image50.png|499x234px]]</p></li>
+
|-
 +
|
 +
<big><p>'''Before burning the image, it is recommended to rename the Linux image to orangepi.img or something shorter so that you can see the percentage of the burn progress when burning the image.'''</p></big>
 +
|}
 +
<p>[[File:cm4-img50.png]]</p></li>
 
<li><p>Then select '''<span class="mark">Force Write to address</span>'''</p>
 
<li><p>Then select '''<span class="mark">Force Write to address</span>'''</p>
<p>[[File:media/image81.png|498x234px]]</p></li>
+
<p>[[File:cm4-img81.png]]</p></li>
<li><p>Click the Run button again to start burning the Linux image to &gt; the SSD</p>
+
<li><p>Click the Run button again to start burning the Linux image to the SSD</p>
<p>[[File:media/image82.png|500x235px]]</p></li>
+
<p>[[File:cm4-img82.png]]</p></li>
<li><p>The display log of the S.lux image after burning is shown in the &gt; following figure</p>
+
<li><p>The display log of the S.lux image after burning is shown in the following figure</p>
<p>[[File:media/image83.png|504x240px]]</p>
+
<p>[[File:cm4-img83.png]]</p>
<p>'''If you have problems with burning, please clear the SPIFlash first and then burn the test. For instructions on how to clear SPIFlash, refer to the section on [[\l|how to clear SPIFlash using RKDevTool]].'''</p></li>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<li><p>After the image is burned, the Linux system in the SPIFlash+PCIe &gt; SSD automatically starts. If it does not start properly, power &gt; it on again.</p></li></ol>
+
|-
 +
|
 +
<big><p>'''If you have problems with burning, please clear the SPIFlash first and then burn the test. For instructions on how to clear SPIFlash, refer to the section on [[Orange Pi CM4#How to clear SPIFlash using RKDevTool|how to clear SPIFlash using RKDevTool]].'''</p></big>
 +
|}
 +
</li>
 +
<li><p>After the image is burned, the Linux system in the SPIFlash+PCIe SSD automatically starts. If it does not start properly, power it on again.</p></li></ol>
 
</li></ol>
 
</li></ol>
  
 
<span id="method-of-burning-using-dd-command"></span>
 
<span id="method-of-burning-using-dd-command"></span>
 +
 
=== Method of burning using dd command ===
 
=== Method of burning using dd command ===
  
Line 802: Line 977:
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>M.2 2230 SSDS are as follows</p>
 
<li><p>M.2 2230 SSDS are as follows</p>
<p>[[File:media/image71.png|158x114px]]</p></li>
+
<p>[[File:cm4-img71.png]]</p></li>
 
<li><p>M.2 2242 SSDS are described as follows</p>
 
<li><p>M.2 2242 SSDS are described as follows</p>
<p>[[File:media/image72.png|192x104px]]</p></li></ol>
+
<p>[[File:cm4-img72.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>Insert the NVMe SSD into the M.2 PCIe port on the development board and secure it</p>
 
<li><p>Insert the NVMe SSD into the M.2 PCIe port on the development board and secure it</p>
<p>[[File:media/image73.png|274x185px]]</p></li>
+
<p>[[File:cm4-img73.png]]</p></li>
 
<li><p>Please ensure that the SPI Flash is affixed to the development board. The position of SPI Flash on the development board is shown in the figure below. No other Settings are required before burning</p>
 
<li><p>Please ensure that the SPI Flash is affixed to the development board. The position of SPI Flash on the development board is shown in the figure below. No other Settings are required before burning</p>
<p>[[File:media/image74.png|274x205px]]</p></li>
+
<p>[[File:cm4-img74.png]]</p></li>
<li><p>Burning Linux image to SPIFlash+NVMe SSD requires TF card to complete, so first need to burn Linux image to TF card, and then use the TF card to start the development board into the Linux system. For the method of burning a Linux image to a TF card, see the two sections on [[\l|'''the method of burning a Linux image to a TF card''' '''based on a Windows PC''']] and '''[[\l|the method of burning a Linux image to a TF card based on an Ubuntu PC]].'''</p></li>
+
<li><p>Burning Linux image to SPIFlash+NVMe SSD requires TF card to complete, so first need to burn Linux image to TF card, and then use the TF card to start the development board into the Linux system. For the method of burning a Linux image to a TF card, see the two sections on [[Orange Pi CM4#Method of burning Linux image to TF card based on Windows PC|'''the method of burning a Linux image to a TF card''' '''based on a Windows PC''']] and '''[[Orange Pi CM4#Method of burning Linux image to TF card based on Ubuntu PC|the method of burning a Linux image to a TF card based on an Ubuntu PC]].'''</p></li>
 
<li><p>After starting the Linux system with TF card, we first burn the u-boot image into SPI Flash</p>
 
<li><p>After starting the Linux system with TF card, we first burn the u-boot image into SPI Flash</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>Run '''nand-sata-install'''l first. '''Ordinary users remember to &gt; add sudo permission'''</p>
+
<li><p>Run '''nand-sata-install'''l first. '''<span style="color:#FF0000">Ordinary users remember to add sudo permission</span>'''</p>
<p>orangepi@orangepi:~$ '''sudo nand-sata-install'''</p></li>
+
{| class="wikitable" style="width:800px;"
<li><p>Then select '''7 Install/Update ther bootloader on SPI Flash'''</p></li></ol>
+
|-
</li></ol>
+
|
 +
<p>orangepi@orangepi:~$ '''sudo nand-sata-install'''</p>
 +
|}
 +
</li>
 +
<li><p>Then select '''7 Install/Update ther bootloader on SPI Flash'''</p></li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image84.png|355x174px|IMG_256]]
+
[[File:cm4-img84.png]]
  
</div>
+
</div></ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Yes&gt;'''</li></ol>
+
<li>Then select '''&lt;Yes&gt;'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image85.png|356x179px|IMG_256]]
+
[[File:cm4-img85.png]]
  
</div>
+
</div></ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then please wait patiently for the burning to complete, after the &gt; burning is completed, it will be displayed as follows (a '''Done''' &gt; will be displayed in the lower left corner) :</li></ol>
+
<li>Then please wait patiently for the burning to complete, after the burning is completed, it will be displayed as follows (a '''Done''' will be displayed in the lower left corner) :</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image86.png|358x161px|IMG_256]]
+
[[File:cm4-img86.png]]
  
</div>
+
</div></ol>
 +
</li></ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li><p>Then upload the Linux image file (Debian or Ubuntu image downloaded from the official website) to the TF card. For details about how to upload a Linux image file to the development board, see section [[\l|'''Uploading Files to the Linux system on the Development Board''']].</p></li>
+
<li><p>Then upload the Linux image file (Debian or Ubuntu image downloaded from the official website) to the TF card. For details about how to upload a Linux image file to the development board, see section [[Orange Pi CM4#Method of uploading files to the development board Linux system|'''Uploading Files to the Linux system on the Development Board''']].</p></li>
 
<li><p>After uploading the image to the Linux system of the development board, we can enter the storage path of the image file in the command line of the Linux system of the development board. For example, I saved the Linux image of the development board in the directory '''/home/orangepi/Desktop'''. Then go to the '''/home/orangepi/Desktop''' directory and you will see the uploaded image file.</p>
 
<li><p>After uploading the image to the Linux system of the development board, we can enter the storage path of the image file in the command line of the Linux system of the development board. For example, I saved the Linux image of the development board in the directory '''/home/orangepi/Desktop'''. Then go to the '''/home/orangepi/Desktop''' directory and you will see the uploaded image file.</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''cd /home/orangepi/Desktop'''</p>
 
<p>orangepi@orangepi:~$ '''cd /home/orangepi/Desktop'''</p>
 
<p>orangepi@orangepi:~/Desktop$ '''ls'''</p>
 
<p>orangepi@orangepi:~/Desktop$ '''ls'''</p>
 
<p>Orangepi3b_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img</p>
 
<p>Orangepi3b_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img</p>
<p>'''How to enter the development board Linux system command line?'''</p>
+
|}
<p>'''1. For details about how to log in to the terminal through the serial port, see section [[\l|Debugging Serial Port]].'''</p>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<p>'''2. For details about how to remotely log in to the Linux operating system over ssh, see section &quot;[[\l|Logging In to the Development Board over SSH]]&quot;.'''</p>
+
|-
<p>'''3. If you are connected to a display screen such as HDMI or LCD, you can open a command line terminal on the desktop.'''</p></li>
+
|
 +
<big><p>'''How to enter the development board Linux system command line?'''</p>
 +
<p>'''1. For details about how to log in to the terminal through the serial port, see section [[Orange Pi CM4#How to use the debugging serial port|Debugging Serial Port]].'''</p>
 +
<p>'''2. For details about how to remotely log in to the Linux operating system over ssh, see section &quot;[[Orange Pi CM4#SSH remote login development board|Logging In to the Development Board over SSH]]&quot;.'''</p>
 +
<p>'''3. If you are connected to a display screen such as HDMI or LCD, you can open a command line terminal on the desktop.'''</p></big>
 +
|}
 +
</li>
 
<li><p>Next, let's first make sure that NVMe SSD has been properly recognized by Linux development board. If the NVMe SSD is correctly identified, run the '''sudo fdisk -l''' command to view information about the '''nvme'''</p>
 
<li><p>Next, let's first make sure that NVMe SSD has been properly recognized by Linux development board. If the NVMe SSD is correctly identified, run the '''sudo fdisk -l''' command to view information about the '''nvme'''</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~/Desktop$ '''sudo fdisk -l | grep &quot;nvme0n1&quot;'''</p>
 
<p>orangepi@orangepi:~/Desktop$ '''sudo fdisk -l | grep &quot;nvme0n1&quot;'''</p>
 
<p>Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors</p>
 
<p>Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors</p>
 +
|}
 
<p>Use the '''lspci''' command to see an NVME-related PCI device</p>
 
<p>Use the '''lspci''' command to see an NVME-related PCI device</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~/Desktop$ '''lspci'''</p>
 
<p>orangepi@orangepi:~/Desktop$ '''lspci'''</p>
 
<p>00:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3566 (rev 01)</p>
 
<p>00:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3566 (rev 01)</p>
<p>01:00.0 Non-Volatile memory controller: Realtek Semiconductor Co., Ltd. Device 5765 (rev 01)</p></li>
+
<p>01:00.0 Non-Volatile memory controller: Realtek Semiconductor Co., Ltd. Device 5765 (rev 01)</p>
 +
|}
 +
</li>
 
<li><p>Then we can use the dd command to empty the NVMe SSD (optional)</p>
 
<li><p>Then we can use the dd command to empty the NVMe SSD (optional)</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi3b:~/Desktop$ '''sudo dd bs=1M if=/dev/zero of=/dev/nvme0n1 count=2000 status=progress'''</p>
 
<p>orangepi@orangepi3b:~/Desktop$ '''sudo dd bs=1M if=/dev/zero of=/dev/nvme0n1 count=2000 status=progress'''</p>
<p>orangepi@orangepi3b:~/Desktop$ '''sudo sync'''</p></li>
+
<p>orangepi@orangepi3b:~/Desktop$ '''sudo sync'''</p>
 +
|}
 +
</li>
 
<li><p>You can then use the dd command to burn the Linux image of the development board into the NVMe SSD</p>
 
<li><p>You can then use the dd command to burn the Linux image of the development board into the NVMe SSD</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>if = parameter in the command is to fill in behind the Linux + &gt; Linux mirror image to store the full path name (such &gt; as'''<span class="mark">/home/orangepi/Desktop/Linux image name</span>'''). Since &gt; we have entered the path of the Linux image above, we only &gt; need to fill in the name of the Linux image.</p></li>
+
<li><p>if = parameter in the command is to fill in behind the Linux + Linux mirror image to store the full path name (such as'''<span class="mark">/home/orangepi/Desktop/Linux image name</span>'''). Since we have entered the path of the Linux image above, we only need to fill in the name of the Linux image.</p></li>
<li><p>Do not copy the Linux image name in the following command. &gt; Replace it with the actual image name (because the version of &gt; the image may be updated).</p>
+
<li><p>Do not copy the Linux image name in the following command. Replace it with the actual image name (because the version of the image may be updated).</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>'''sudo dd bs=1M if=Orangepi3b_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img of=/dev/nvme0n1 status=progress'''</p>
 
<p>'''sudo dd bs=1M if=Orangepi3b_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img of=/dev/nvme0n1 status=progress'''</p>
 
<p>'''sudo''' '''sync'''</p>
 
<p>'''sudo''' '''sync'''</p>
<p>'''Note that if you are uploading a.7z or.xz or.gz Linux image file, remember to decompress it before burning it with the dd command.'''</p>
+
|}
<p>'''A detailed description of all the parameters of the dd command and more usage can be seen by running the man dd command on Linux.'''</p></li></ol>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''<span style="color:#FF0000">Note that if you are uploading a.7z or.xz or.gz Linux image file, remember to decompress it before burning it with the dd command.</span>'''</p>
 +
<p>'''A detailed description of all the parameters of the dd command and more usage can be seen by running the man dd command on Linux.'''</p></big>
 +
|}
 +
</li></ol>
 
</li>
 
</li>
 
<li><p>After successfully burning the Linux image of the development board to the NVMe SSD, you can use the '''poweroff''' command to shut down. Then, pull out the TF card, press the power button again, and then start the Linux system in the SPIFlash+NVMe SSD.</p></li>
 
<li><p>After successfully burning the Linux image of the development board to the NVMe SSD, you can use the '''poweroff''' command to shut down. Then, pull out the TF card, press the power button again, and then start the Linux system in the SPIFlash+NVMe SSD.</p></li>
Line 872: Line 1,084:
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>128GB NVMe SSD</p>
 
<li><p>128GB NVMe SSD</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''df -h'''</p>
 
<p>orangepi@orangepi:~$ '''df -h'''</p>
<p>Filesystem Size Used Avail Use% Mounted on</p>
+
<span style="margin-right: 80px;">Filesystem </span><span style="margin-right: 50px;">Size </span><span style="margin-right: 30px;">Used </span><span style="margin-right: 30px;">Avail</span><span style="margin-right: 50px;">Use% Mounted on</span><br>
<p>udev 3.8G 8.0K 3.8G 1% /dev</p>
+
<span style="margin-right: 110px;">udev</span><span style="margin-right: 60px;">3.8G </span><span style="margin-right: 50px;">8.0K </span><span style="margin-right: 70px;">3.8G </span><span style="margin-right: 90px;">1% /dev</span><br>
<p>tmpfs 769M 1.4M 768M 1% /run</p>
+
<span style="margin-right: 100px;">tmpfs </span><span style="margin-right: 50px;">769M </span><span style="margin-right: 30px;">1.4M </span><span style="margin-right: 70px;">768M </span><span style="margin-right: 90px;">1% /run</span><br>
<p>'''/dev/nvme0n1p2 118G 5.8G 111G 5% /'''</p>
+
<span style="margin-right: 25px;color:#FF0000">'''/dev/nvme0n1p2'''</span><span style="margin-right: 50px;color:#FF0000">'''118G '''</span><span style="margin-right: 35px;color:#FF0000">'''5.8G '''</span><span style="margin-right: 80px;color:#FF0000">'''111G '''</span><span style="margin-right: 90px;color:#FF0000">'''5% /'''</span><br>
<p>tmpfs 3.8G 0 3.8G 0% /dev/shm</p>
+
<span style="margin-right: 100px;">tmpfs </span><span style="margin-right: 60px;">3.8G </span><span style="margin-right: 50px;">0</span><span style="margin-right: 50px;">3.8G </span><span style="margin-right: 90px;">0% /dev/shm</span><br>
<p>tmpfs 5.0M 4.0K 5.0M 1% /run/lock</p>
+
<span style="margin-right: 100px;">tmpfs </span><span style="margin-right: 60px;">5.0M </span><span style="margin-right: 50px;">4.0K </span><span style="margin-right: 50px;">5.0M </span><span style="margin-right: 90px;">1% /run/lock</span><br>
<p>tmpfs 3.8G 16K 3.8G 1% /tmp</p>
+
<span style="margin-right: 100px;">tmpfs </span><span style="margin-right: 60px;">3.8G </span><span style="margin-right: 50px;">16K </span><span style="margin-right: 50px;">3.8G </span><span style="margin-right: 90px;">1% /tmp</span><br>
<p>'''/dev/nvme0n1p1 256M 90M 166M 36% /boot'''</p>
+
<span style="margin-right: 25px;color:#FF0000">'''/dev/nvme0n1p1'''</span><span style="margin-right: 50px;color:#FF0000">'''256M '''</span><span style="margin-right: 35px;color:#FF0000">'''90M '''</span><span style="margin-right: 80px;color:#FF0000">'''166M '''</span><span style="margin-right: 90px;color:#FF0000">'''36% /boot'''</span><br>
<p>/dev/zram1 194M 9.9M 170M 6% /var/log</p>
+
<span style="margin-right: 65px;">/dev/zram1</span><span style="margin-right: 60px;">194M </span><span style="margin-right: 50px;">9.9M </span><span style="margin-right: 50px;">170M </span><span style="margin-right: 90px;">6% /var/log</span><br>
<p>tmpfs 769M 60K 769M 1% /run/user/1000</p>
+
<span style="margin-right: 100px;">tmpfs </span><span style="margin-right: 60px;">769M </span><span style="margin-right: 50px;">60K </span><span style="margin-right: 50px;">769M </span><span style="margin-right: 90px;">1% /run/user/1000</span><br>
<p>tmpfs 769M 48K 769M 1% /run/user/0</p></li>
+
<span style="margin-right: 100px;">tmpfs </span><span style="margin-right: 60px;">769M </span><span style="margin-right: 50px;">48K </span><span style="margin-right: 50px;">769M </span><span style="margin-right: 90px;">1% /run/user/0</span><br>
 +
|}</li>
 
<li><p>2TB NVMe SSD</p>
 
<li><p>2TB NVMe SSD</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''df -h'''</p>
 
<p>orangepi@orangepi:~$ '''df -h'''</p>
<p>Filesystem Size Used Avail Use% Mounted on</p>
+
<span style="margin-right: 80px;">Filesystem </span><span style="margin-right: 50px;">Size </span><span style="margin-right: 30px;">Used </span><span style="margin-right: 30px;">Avail</span><span style="margin-right: 50px;">Use% Mounted on</span><br>
<p>udev 3.8G 8.0K 3.8G 1% /dev</p>
+
<span style="margin-right: 110px;">udev</span><span style="margin-right: 60px;">3.8G </span><span style="margin-right: 50px;">8.0K </span><span style="margin-right: 70px;">3.8G </span><span style="margin-right: 90px;">1% /dev</span><br>
<p>tmpfs 769M 1.4M 768M 1% /run</p>
+
<span style="margin-right: 100px;">tmpfs </span><span style="margin-right: 50px;">769M </span><span style="margin-right: 30px;">1.4M </span><span style="margin-right: 70px;">768M </span><span style="margin-right: 90px;">1% /run</span><br>
<p>'''/dev/nvme0n1p2 1.9T 4.1G 1.8T 1% /'''</p>
+
<span style="margin-right: 25px;color:#FF0000">'''/dev/nvme0n1p2'''</span><span style="margin-right: 50px;color:#FF0000">'''1.9T '''</span><span style="margin-right: 35px;color:#FF0000">'''4.1G '''</span><span style="margin-right: 80px;color:#FF0000">'''1.8T '''</span><span style="margin-right: 90px;color:#FF0000">'''1% /'''</span><br>
<p>tmpfs 3.8G 0 3.8G 0% /dev/shm</p>
+
<span style="margin-right: 100px;">tmpfs </span><span style="margin-right: 60px;">3.8G </span><span style="margin-right: 50px;">0</span><span style="margin-right: 50px;">3.8G </span><span style="margin-right: 90px;">0% /dev/shm</span><br>
<p>tmpfs 5.0M 4.0K 5.0M 1% /run/lock</p>
+
<span style="margin-right: 100px;">tmpfs </span><span style="margin-right: 60px;">5.0M </span><span style="margin-right: 50px;">4.0K </span><span style="margin-right: 50px;">5.0M </span><span style="margin-right: 90px;">1% /run/lock</span><br>
<p>/dev/zram2 3.7G 76K 3.5G 1% /tmp</p>
+
<span style="margin-right: 65px;">/dev/zram2</span><span style="margin-right: 60px;">3.7G </span><span style="margin-right: 50px;">76K </span><span style="margin-right: 50px;">3.5G </span><span style="margin-right: 90px;">1% /tmp</span><br>
<p>'''/dev/nvme0n1p1 256M 90M 166M 36% /boot'''</p>
+
<span style="margin-right: 25px;color:#FF0000">'''/dev/nvme0n1p1'''</span><span style="margin-right: 50px;color:#FF0000">'''256M '''</span><span style="margin-right: 35px;color:#FF0000">'''90M '''</span><span style="margin-right: 80px;color:#FF0000">'''166M '''</span><span style="margin-right: 90px;color:#FF0000">'''36% /boot'''</span><br>
<p>/dev/zram1 194M 15M 165M 9% /var/log</p>
+
<span style="margin-right: 65px;">/dev/zram1</span><span style="margin-right: 60px;">194M </span><span style="margin-right: 50px;">9.9M </span><span style="margin-right: 50px;">170M </span><span style="margin-right: 90px;">6% /var/log</span><br>
<p>tmpfs 769M 60K 769M 1% /run/user/1000</p>
+
<span style="margin-right: 100px;">tmpfs </span><span style="margin-right: 60px;">769M </span><span style="margin-right: 50px;">60K </span><span style="margin-right: 50px;">769M </span><span style="margin-right: 90px;">1% /run/user/1000</span><br>
<p>tmpfs 769M 48K 769M 1% /run/user/0</p></li></ol>
+
<span style="margin-right: 100px;">tmpfs </span><span style="margin-right: 60px;">769M </span><span style="margin-right: 50px;">48K </span><span style="margin-right: 50px;">769M </span><span style="margin-right: 90px;">1% /run/user/0</span><br>
 +
|}</li></ol>
 
</li>
 
</li>
 
<li><p>When the TF card and NVMe SSD burn exactly the same system, '''if the TF card and NVMe SSD are inserted in the development board, power on the development board at this time, u-boot will give priority to start the system in the TF card.''' However, since the TF card and the NVMe SSD system are identical, the UUID of the /'''boot''' partition and '''rootfs''' partition in the two storage devices are the same, which will cause the TF card may load the NVMe SSD partition when it is started. Run the following script to solve this problem.</p>
 
<li><p>When the TF card and NVMe SSD burn exactly the same system, '''if the TF card and NVMe SSD are inserted in the development board, power on the development board at this time, u-boot will give priority to start the system in the TF card.''' However, since the TF card and the NVMe SSD system are identical, the UUID of the /'''boot''' partition and '''rootfs''' partition in the two storage devices are the same, which will cause the TF card may load the NVMe SSD partition when it is started. Run the following script to solve this problem.</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''sudo fix_mmc_ssd.sh'''</p>
 
<p>orangepi@orangepi:~$ '''sudo fix_mmc_ssd.sh'''</p>
<p>'''An identical system means that the mirror name is exactly the same. Even if it is a Debian11 system, the version is different.'''</p></li></ol>
+
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''An identical system means that the mirror name is exactly the same. Even if it is a Debian11 system, the version is different.'''</p></big>
 +
|}
 +
</li></ol>
  
 
<span id="method-of-burning-using-balenaetcher-software"></span>
 
<span id="method-of-burning-using-balenaetcher-software"></span>
 +
 
=== Method of burning using balenaEtcher software ===
 
=== Method of burning using balenaEtcher software ===
  
Line 909: Line 1,139:
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>M.2 2230 SSDS are as follows</p>
 
<li><p>M.2 2230 SSDS are as follows</p>
<p>[[File:media/image71.png|189x136px]]</p></li>
+
<p>[[File:cm4-img71.png]]</p></li>
 
<li><p>M.2 2242 SSDS are described as follows</p>
 
<li><p>M.2 2242 SSDS are described as follows</p>
<p>[[File:media/image72.png|238x129px]]</p></li></ol>
+
<p>[[File:cm4-img72.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>Insert the NVMe SSD into the M.2 PCIe port on the development board and secure it</p>
 
<li><p>Insert the NVMe SSD into the M.2 PCIe port on the development board and secure it</p>
<p>[[File:media/image73.png|274x185px]]</p></li>
+
<p>[[File:cm4-img73.png]]</p></li>
 
<li><p>Please ensure that the SPI Flash is affixed to the development board. The position of SPI Flash on the development board is shown in the figure below. No other Settings are required before burning</p>
 
<li><p>Please ensure that the SPI Flash is affixed to the development board. The position of SPI Flash on the development board is shown in the figure below. No other Settings are required before burning</p>
<p>[[File:media/image74.png|274x205px]]</p></li>
+
<p>[[File:cm4-img74.png]]</p></li>
<li><p>Burning Linux image to SPIFlash+NVMe SSD requires TF card to complete, so first need to burn Linux image to TF card, and then use the TF card to start the development board into the Linux system. For the method of burning a Linux image to a TF card, see the two sections on '''[[\l|the method of burning a Linux image to a TF card based on a Windows PC]]''' and '''[[\l|the method of burning a Linux image to a TF card based on an Ubuntu PC]].'''</p></li>
+
<li><p>Burning Linux image to SPIFlash+NVMe SSD requires TF card to complete, so first need to burn Linux image to TF card, and then use the TF card to start the development board into the Linux system. For the method of burning a Linux image to a TF card, see the two sections on '''[[Orange Pi CM4#Method of burning Linux image to TF card based on Windows PC|the method of burning a Linux image to a TF card based on a Windows PC]]''' and '''[[Orange Pi CM4#Method of burning Linux image to TF card based on Ubuntu PC|the method of burning a Linux image to a TF card based on an Ubuntu PC]].'''</p></li>
 
<li><p>After starting the Linux system in the TF card, please make sure that the NVMe SSD has been properly recognized by Linux on the development board. If the NVMe SSD is correctly identified, run the '''sudo fdisk -l''' command to view information about the '''nvme'''</p>
 
<li><p>After starting the Linux system in the TF card, please make sure that the NVMe SSD has been properly recognized by Linux on the development board. If the NVMe SSD is correctly identified, run the '''sudo fdisk -l''' command to view information about the '''nvme'''</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~/Desktop$ '''sudo fdisk -l | grep &quot;nvme0n1&quot;'''</p>
 
<p>orangepi@orangepi:~/Desktop$ '''sudo fdisk -l | grep &quot;nvme0n1&quot;'''</p>
 
<p>Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors</p>
 
<p>Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors</p>
 +
|}
 
<p>Use the '''lspci''' command to see an NVME-related PCI device</p>
 
<p>Use the '''lspci''' command to see an NVME-related PCI device</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~/Desktop$ '''lspci'''</p>
 
<p>orangepi@orangepi:~/Desktop$ '''lspci'''</p>
 
<p>00:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3566 (rev 01)</p>
 
<p>00:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3566 (rev 01)</p>
<p>01:00.0 Non-Volatile memory controller: Realtek Semiconductor Co., Ltd. Device 5765 (rev 01)</p></li>
+
<p>01:00.0 Non-Volatile memory controller: Realtek Semiconductor Co., Ltd. Device 5765 (rev 01)</p>
<li><p>balenaEtcher has been pre-installed in the Linux image, and the opening method is as follows:</p></li></ol>
+
|}
 +
</li>
 +
<li><p>balenaEtcher has been pre-installed in the Linux image, and the opening method is as follows:</p>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image87.png|506x249px|IMG_256]]
+
[[File:cm4-img87.png]]
  
 
</div>
 
</div>
'''If the balenaEtcher arm64 version is not pre-installed, for details about how to download and install the balenaEtcher arm64 version, see section [[\l|How to Download and Install the balenaEtcher arm64 version]].'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 
+
|-
 +
|
 +
<big>'''If the balenaEtcher arm64 version is not pre-installed, for details about how to download and install the balenaEtcher arm64 version, see section [[Orange Pi CM4#How to download and install arm64 version balenaEtcher|How to Download and Install the balenaEtcher arm64 version]].'''</big>
 +
|}
 +
</li></ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>The interface after balenaEtcher is opened is as follows:</li></ol>
+
<li>The interface after balenaEtcher is opened is as follows:</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image88.png|406x207px|IMG_256]]
+
[[File:cm4-img88.png]]
  
</div>
+
</div></ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
 
<li><p>The method of using balenaEtcher to burn u-boot to SPI Flash on the development board is as follows:</p>
 
<li><p>The method of using balenaEtcher to burn u-boot to SPI Flash on the development board is as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First click '''Flash from file'''</li></ol>
+
<li>First click '''Flash from file'''</li>
</li></ol>
 
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image89.png|406x205px|IMG_256]]
+
[[File:cm4-img89.png]]
  
</div>
+
</div></ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Go to '''/usr/lib/linux-u-boot-legacy-orangepi3b_1.x.x_arm64''', &gt; select '''rkspi_loader.img''', and click '''Open'''</li></ol>
+
<li>Go to '''/usr/lib/linux-u-boot-legacy-orangepi3b_1.x.x_arm64''', select '''rkspi_loader.img''', and click '''Open'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image90.png|563x110px|IMG_256]]
+
[[File:cm4-img90.png]]
  
</div>
+
</div></ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<li><p>Open '''rkspi_loader.img'''. The following interface is displayed:</p>
 
<li><p>Open '''rkspi_loader.img'''. The following interface is displayed:</p>
<p>[[File:media/image91.png|379x181px]]</p></li>
+
<p>[[File:cm4-img91.png]]</p></li>
<li><p>Then click '''Select target'''</p></li></ol>
+
<li><p>Then click '''Select target'''</p></li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image92.png|379x171px|IMG_256]]
+
[[File:cm4-img92.png]]
  
</div>
+
</div></ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Then click '''Show 2 hidden''' to open the option for more storage &gt; devices</li></ol>
+
<li>Then click '''Show 2 hidden''' to open the option for more storage devices</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image93.png|385x155px|IMG_256]]
+
[[File:cm4-img93.png]]
  
</div>
+
</div></ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>Then Select the SPI Flash device name '''/dev/mtdblock0''' and click &gt; '''Select'''</li></ol>
+
<li>Then Select the SPI Flash device name '''/dev/mtdblock0''' and click '''Select'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image94.png|389x264px|IMG_256]]
+
[[File:cm4-img94.png]]
  
</div>
+
</div></ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
<li>Then click '''Flash'''</li></ol>
+
<li>Then click '''Flash'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image95.png|394x268px|IMG_256]]
+
[[File:cm4-img95.png]]
  
</div>
+
</div></ol>
 
<ol start="8" style="list-style-type: lower-alpha;">
 
<ol start="8" style="list-style-type: lower-alpha;">
<li>Then click '''Yes, I’m sure'''</li></ol>
+
<li>Then click '''Yes, I’m sure'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image96.png|396x269px|IMG_256]]
+
[[File:cm4-img96.png]]
  
</div>
+
</div></ol>
 
<ol style="list-style-type: lower-roman;">
 
<ol style="list-style-type: lower-roman;">
<li>Then enter the password '''orangepi''' of the development board Linux &gt; system, and the u-boot image will be burned to the SPI Flash</li></ol>
+
<li>Then enter the password '''orangepi''' of the development board Linux system, and the u-boot image will be burned to the SPI Flash</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image97.png|393x269px|IMG_256]]
+
[[File:cm4-img97.png]]
  
</div>
+
</div></ol>
 
<ol start="10" style="list-style-type: lower-alpha;">
 
<ol start="10" style="list-style-type: lower-alpha;">
<li>The burning process is displayed as follows:</li></ol>
+
<li>The burning process is displayed as follows:</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image98.png|397x272px|IMG_256]]
+
[[File:cm4-img98.png]]
  
</div>
+
</div></ol>
 
<ol start="11" style="list-style-type: lower-alpha;">
 
<ol start="11" style="list-style-type: lower-alpha;">
<li>The display after burning is as follows:</li></ol>
+
<li>The display after burning is as follows:</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image99.png|395x225px|IMG_256]]
+
[[File:cm4-img99.png]]
  
</div>
+
</div></ol>
 +
</li></ol>
 
<ol start="9" style="list-style-type: decimal;">
 
<ol start="9" style="list-style-type: decimal;">
 
<li><p>Method of burning the Linux system in the TF card to the NVMe SSD (this method is equivalent to cloning the system in the TF card to the NVMe SSD)</p>
 
<li><p>Method of burning the Linux system in the TF card to the NVMe SSD (this method is equivalent to cloning the system in the TF card to the NVMe SSD)</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First click '''Clone drive'''</li></ol>
+
<li>First click '''Clone drive'''</li>
</li></ol>
 
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image100.png|386x204px|IMG_256]]
+
[[File:cm4-img100.png]]
  
</div>
+
</div></ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then select the device name of the TF card '''/dev/mmcblk1'''</li></ol>
+
<li>Then select the device name of the TF card '''/dev/mmcblk1'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image101.png|379x256px|IMG_256]]
+
[[File:cm4-img101.png]]
  
</div>
+
</div></ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>The interface after opening the TF card is as follows:</li></ol>
+
<li>The interface after opening the TF card is as follows:</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image102.png|381x191px|IMG_256]]
+
[[File:cm4-img102.png]]
  
</div>
+
</div></ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then click '''Select target'''</li></ol>
+
<li>Then click '''Select target'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image92.png|379x171px|IMG_256]]
+
[[File:cm4-img92.png]]
  
</div>
+
</div></ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Then click '''Show 2 hidden''' to open the option for more storage &gt; devices</li></ol>
+
<li>Then click '''Show 2 hidden''' to open the option for more storage devices</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image93.png|385x155px|IMG_256]]
+
[[File:cm4-img93.png]]
  
</div>
+
</div></ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>Then Select the device name for the NVMe SSD '''/dev/nvme0n1''' and &gt; click '''Select'''</li></ol>
+
<li>Then Select the device name for the NVMe SSD '''/dev/nvme0n1''' and click '''Select'''</li>
 
 
[[File:media/image103.png|386x264px]]
 
  
 +
[[File:cm4-img103.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
<li>Then click '''Flash'''</li></ol>
+
<li>Then click '''Flash'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image104.png|389x264px|IMG_256]]
+
[[File:cm4-img104.png]]
  
</div>
+
</div></ol>
 
<ol start="8" style="list-style-type: lower-alpha;">
 
<ol start="8" style="list-style-type: lower-alpha;">
<li>Then click '''Yes, I’m sure'''</li></ol>
+
<li>Then click '''Yes, I’m sure'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image105.png|392x268px|IMG_256]]
+
[[File:cm4-img105.png]]
  
</div>
+
</div></ol>
 
<ol style="list-style-type: lower-roman;">
 
<ol style="list-style-type: lower-roman;">
<li>Then enter the password orangepi for the development board Linux &gt; system and start burning the Linux image to the SSD</li></ol>
+
<li>Then enter the password orangepi for the development board Linux system and start burning the Linux image to the SSD</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image106.png|390x267px|IMG_256]]
+
[[File:cm4-img106.png]]
  
</div>
+
</div></ol>
 
<ol start="10" style="list-style-type: lower-alpha;">
 
<ol start="10" style="list-style-type: lower-alpha;">
<li>The burning process is shown as follows:</li></ol>
+
<li>The burning process is shown as follows:</li>
  
[[File:media/image107.png|393x212px]]
+
[[File:cm4-img107.png]]
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image108.png|395x205px|IMG_256]]
+
[[File:cm4-img108.png]]
  
</div>
+
</div></ol>
 
<ol start="11" style="list-style-type: lower-alpha;">
 
<ol start="11" style="list-style-type: lower-alpha;">
<li>The display after burning is as follows:</li></ol>
+
<li>The display after burning is as follows:</li>
 
 
[[File:media/image109.png|398x227px]]
 
  
 +
[[File:cm4-img109.png]]
 +
</ol>
 
<ol start="12" style="list-style-type: lower-alpha;">
 
<ol start="12" style="list-style-type: lower-alpha;">
<li><p>To expand the capacity of the rootfs partition on the NVMe SSD, &gt; perform the following steps:</p>
+
<li><p>To expand the capacity of the rootfs partition on the NVMe SSD, perform the following steps:</p>
<ol style="list-style-type: lower-alpha;">
+
<ol style="list-style-type: none;">
<li><p>First, open '''GParted'''. If Gparted is not pre-installed, run &gt; apt command to install it</p>
+
<li><p>a) First, open '''GParted'''. If Gparted is not pre-installed, run apt command to install it</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y gparted'''</p></li></ol>
+
{| class="wikitable" style="width:800px;"
</li></ol>
+
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''sudo apt-get install -y gparted'''</p>
 +
|}
 +
</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image110.png|576x215px|IMG_256]]
+
[[File:cm4-img110.png]]
  
</div>
+
</div></ol>
<ol start="2" style="list-style-type: lower-alpha;">
+
<ol start="2" style="list-style-type: none;">
<li>Then enter the password orangepi for Linux and click &gt; '''Authenticate'''</li></ol>
+
<li>b) Then enter the password orangepi for Linux and click '''Authenticate'''</li>
  
[[File:media/image111.png|356x173px]]
+
[[File:cm4-img111.png]]
 
+
</ol>
<ol start="3" style="list-style-type: lower-alpha;">
+
<ol start="3" style="list-style-type: none;">
<li><p>Then click '''Fix'''</p>
+
<li><p>c) Then click '''Fix'''</p>
<p>[[File:media/image112.png|355x261px]]</p></li>
+
<p>[[File:cm4-img112.png]]</p></li>
<li><p>Then select NVMe SSD</p></li></ol>
+
<li><p>d) Then select NVMe SSD</p></li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image113.png|452x187px|IMG_256]]
+
[[File:cm4-img113.png]]
  
</div>
+
</div></ol>
<ol start="5" style="list-style-type: lower-alpha;">
+
<ol start="5" style="list-style-type: none;">
<li>The following information is displayed after the NVMe SSD is &gt; selected:</li></ol>
+
<li>e) The following information is displayed after the NVMe SSD is selected:</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image114.png|451x187px|IMG_256]]
+
[[File:cm4-img114.png]]
  
</div>
+
</div></ol>
<ol start="6" style="list-style-type: lower-alpha;">
+
<ol start="6" style="list-style-type: none;">
<li>Then select the '''/dev/nvme0n1p2''' partition, right-click, and &gt; select '''Resize/Move'''</li></ol>
+
<li>f) Then select the '''/dev/nvme0n1p2''' partition, right-click, and select '''Resize/Move'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image115.png|448x345px|IMG_256]]
+
[[File:cm4-img115.png]]
 
 
</div>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<li><p>Then drag the capacity to the maximum as shown in the image below</p>
 
<p>[[File:media/image116.png|339x210px]]</p></li>
 
<li><p>Then click '''Resize/Move'''</p>
 
<p>[[File:media/image117.png|339x212px]]</p></li>
 
<li><p>Then click on the green'''√''' in the picture below</p>
 
<p>[[File:media/image118.png|425x166px]]</p></li>
 
<li><p>Then click '''Apply'''</p>
 
<p>[[File:media/image119.png|378x276px]]</p></li>
 
<li><p>Then click '''Close''' to close it</p>
 
<p>[[File:media/image120.png|383x234px]]</p></li></ol>
 
  
 +
</div></ol>
 +
<ol start="7" style="list-style-type: none;">
 +
<li><p>g) Then drag the capacity to the maximum as shown in the image below</p>
 +
<p>[[File:cm4-img116.png]]</p></li>
 +
<li><p>h) Then click '''Resize/Move'''</p>
 +
<p>[[File:cm4-img117.png]]</p></li>
 +
<li><p>i) Then click on the green'''√''' in the picture below</p>
 +
<p>[[File:cm4-img118.png]]</p></li>
 +
<li><p>j) Then click '''Apply'''</p>
 +
<p>[[File:cm4-img119.png]]</p></li>
 +
<li><p>k) Then click '''Close''' to close it</p>
 +
<p>[[File:cm4-img120.png]]</p></li></ol>
 +
</li></ol>
 
<!-- -->
 
<!-- -->
 
<ol start="13" style="list-style-type: lower-alpha;">
 
<ol start="13" style="list-style-type: lower-alpha;">
<li>At this point, you can shut it down using the '''sudo poweroff''' &gt; command. Then, pull out the TF card, press the power button again, &gt; and then start the Linux system in the SPIFlash+NVMe SSD.</li></ol>
+
<li>At this point, you can shut it down using the '''sudo poweroff''' command. Then, pull out the TF card, press the power button again, and then start the Linux system in the SPIFlash+NVMe SSD.</li></ol>
 
+
</li></ol>
 
<!-- -->
 
<!-- -->
 
<ol start="10" style="list-style-type: decimal;">
 
<ol start="10" style="list-style-type: decimal;">
<li><p>The '''9)''' step is to clone the system in the TF card to the NMVe SSD, we can also directly burn the Linux image file to the NVMe SSD, here roughly say the following steps:</p>
+
<li><p>The '''9''' step is to clone the system in the TF card to the NMVe SSD, we can also directly burn the Linux image file to the NVMe SSD, here roughly say the following steps:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>Upload the Linux image file to the Linux operating system on the &gt; development board</p></li>
+
<li><p>Upload the Linux image file to the Linux operating system on the development board</p></li>
 
<li><p>Then use balenaEtcher to burn</p>
 
<li><p>Then use balenaEtcher to burn</p>
<p>[[File:media/image121.png|463x291px]]</p></li>
+
<p>[[File:cm4-img121.png]]</p></li>
<li><p>'''There is no need to manually expand the capacity after burning &gt; the image using this method. The first startup will &gt; automatically expand the capacity.'''</p></li></ol>
+
<li><p>'''There is no need to manually expand the capacity after burning the image using this method. The first startup will automatically expand the capacity.'''</p></li></ol>
 
</li></ol>
 
</li></ol>
  
 
<span id="method-of-burning-android-image-to-tf-card"></span>
 
<span id="method-of-burning-android-image-to-tf-card"></span>
 +
 
== Method of burning Android image to TF card ==
 
== Method of burning Android image to TF card ==
  
Line 1,194: Line 1,441:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image18.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
+
[[File:cm4-img18.png]]
  
 
</div></li>
 
</div></li>
<li><p>Then download the Rockchip '''DriverAssitant_v5.12.zip''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi's data download page''']</p>
+
<li><p>Then download the Rockchip '''DriverAssitant_v5.12.zip''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi's data download page''']</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>On the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi's Data download &gt; page'''], &gt; first select the official tool and then go to the following &gt; folder</p>
+
<li><p>On the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi's Data download page'''], first select the official tool and then go to the following folder</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image31.png|283x90px|6d1c77df7eeb7e491e5f79e8d85cbdc]]
+
[[File:cm4-img31.png]]
  
 
</div></li>
 
</div></li>
Line 1,208: Line 1,455:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image32.png|290x130px|34acacded202b29eee42fd20f5b4c92]]
+
[[File:cm4-img32.png]]
  
 
</div></li></ol>
 
</div></li></ol>
 
</li>
 
</li>
<li><p>Then download the Android image from [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi's Data download page'''].</p>
+
<li><p>Then download the Android image from [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi's Data download page'''].</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>After opening the download link of Android image, you can see &gt; the following two types of Android image. Please select '''<span class="mark">TF &gt; card and eMMC image</span>''' folder to start the image &gt; download</p>
+
<li><p>After opening the download link of Android image, you can see the following two types of Android image. Please select '''<span class="mark">TF card and eMMC image</span>''' folder to start the image download</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image122.png|340x108px|e6986fc9c8fc078e8cb6a9c39b76fb8]]
+
[[File:cm4-img122.png]]
  
 
</div></li>
 
</div></li>
<li><p>After entering the '''<span class="mark">TF card and eMMC to start the &gt; image</span>''' folder, you can see the following two images, &gt; their differences are:</p>
+
<li><p>After entering the '''<span class="mark">TF card and eMMC to start the image</span>''' folder, you can see the following two images, their differences are:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>The first image is dedicated to HDMI display and supports 4K &gt; display, if you do not use LCD screen, please download the &gt; image without lcd</p></li>
+
<li><p>The first image is dedicated to HDMI display and supports 4K display, if you do not use LCD screen, please download the image without lcd</p></li>
 
<li><p>If you want to use an lcd screen, select an image with lcd</p>
 
<li><p>If you want to use an lcd screen, select an image with lcd</p>
<p>[[File:media/image123.png|369x84px]]</p></li></ol>
+
<p>[[File:cm4-img123.png]]</p></li></ol>
 
</li></ol>
 
</li></ol>
 
</li>
 
</li>
 
<li><p>Then use the decompression software to decompress the compressed package of the downloaded Android image. In the decompressed file, the file ending with &quot;.img &quot;is the Android image file, the size of which is more than 1GB</p></li>
 
<li><p>Then use the decompression software to decompress the compressed package of the downloaded Android image. In the decompressed file, the file ending with &quot;.img &quot;is the Android image file, the size of which is more than 1GB</p></li>
 
<li><p>Then use the decompression software to decompress '''DriverAssitant_v5.12.zip''', and then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it</p>
 
<li><p>Then use the decompression software to decompress '''DriverAssitant_v5.12.zip''', and then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it</p>
<p>[[File:media/image33.png|575x169px]]</p></li>
+
<p>[[File:cm4-img33.png]]</p></li>
 
<li><p>Open '''DriverInstall.exe''' and install the SWick micro driver as follows</p>
 
<li><p>Open '''DriverInstall.exe''' and install the SWick micro driver as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>Click the "'''Driver Installation'''" button</p>
 
<li><p>Click the "'''Driver Installation'''" button</p>
<p>[[File:media/image34.png|300x157px]]</p></li>
+
<p>[[File:cm4-img34.png]]</p></li>
 
<li><p>Wait for a period of time, the pop-up window will prompt &quot;'''Driver installation successful'''&quot;, and then click the &quot;'''OK'''&quot; button</p>
 
<li><p>Wait for a period of time, the pop-up window will prompt &quot;'''Driver installation successful'''&quot;, and then click the &quot;'''OK'''&quot; button</p>
<p>[[File:media/image35.png|315x164px]]</p></li></ol>
+
<p>[[File:cm4-img35.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>Then decompress '''RKDevTool_Release_v3.15.zip''', this software does not need to be installed, find '''RKDevTool''' in the decompressed folder and open it</p>
 
<li><p>Then decompress '''RKDevTool_Release_v3.15.zip''', this software does not need to be installed, find '''RKDevTool''' in the decompressed folder and open it</p>
<p>[[File:media/image36.png|454x134px]]</p></li>
+
<p>[[File:cm4-img36.png]]</p></li>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not connected to the development board through the USB2.0 public-to-public data cable at this time, the lower left corner will display &quot;'''No device found'''&quot;.</p>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not connected to the development board through the USB2.0 public-to-public data cable at this time, the lower left corner will display &quot;'''No device found'''&quot;.</p>
<p>[[File:media/image37.png|442x208px]]</p></li>
+
<p>[[File:cm4-img37.png]]</p></li>
 
<li><p>Then start burning Android image to TF card</p>
 
<li><p>Then start burning Android image to TF card</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>First, connect the development board to the Windows computer &gt; through the USB2.0 male-to-public data cable. The position of &gt; the USB2.0 burning interface on the development board is shown &gt; in the figure below</p>
+
<li><p>First, connect the development board to the Windows computer through the USB2.0 male-to-public data cable. The position of the USB2.0 burning interface on the development board is shown in the figure below</p>
<p>[[File:media/image38.png|269x108px]]</p></li>
+
<p>[[File:cm4-img38.png]]</p></li>
<li><p>Then make sure that no TF card is inserted into the development &gt; board and no power is connected</p></li>
+
<li><p>Then make sure that no TF card is inserted into the development board and no power is connected</p></li>
<li><p>Then press and hold the MaskROM button on the development board. &gt; The position of the MaskROM button on the development board is &gt; shown as follows:</p>
+
<li><p>Then press and hold the MaskROM button on the development board. The position of the MaskROM button on the development board is shown as follows:</p>
<p>[[File:media/image39.png|439x98px]]</p></li>
+
<p>[[File:cm4-img39.png]]</p></li>
<li><p>Connect the development board to the Type-C port, and power on &gt; the development board</p>
+
<li><p>Connect the development board to the Type-C port, and power on the development board</p>
<p>[[File:media/image40.png|441x103px]]</p></li>
+
<p>[[File:cm4-img40.png]]</p></li>
<li><p>If the previous steps are smooth, the development board will &gt; enter '''MASKROM''' mode at this time, and the interface of the &gt; burning tool will prompt &quot;'''Found a MASKROM device'''&quot;.</p>
+
<li><p>If the previous steps are smooth, the development board will enter '''MASKROM''' mode at this time, and the interface of the burning tool will prompt &quot;'''Found a MASKROM device'''&quot;.</p>
<p>[[File:media/image41.png|457x215px]]</p></li>
+
<p>[[File:cm4-img41.png]]</p></li>
 
<li><p>Then insert the TF card into the development board</p></li>
 
<li><p>Then insert the TF card into the development board</p></li>
 
<li><p>Then select '''<span class="mark">Advanced features</span>'''</p>
 
<li><p>Then select '''<span class="mark">Advanced features</span>'''</p>
<p>[[File:media/image124.png|458x138px]]</p></li>
+
<p>[[File:cm4-img124.png]]</p></li>
 
<li><p>Then click on the location shown in the image below</p>
 
<li><p>Then click on the location shown in the image below</p>
<p>[[File:media/image125.png|459x216px]]</p></li>
+
<p>[[File:cm4-img125.png]]</p></li>
<li><p>Select '''MiniLoaderAll.bin''' from the '''MiniLoader''' folder &gt; downloaded earlier and click Open</p>
+
<li><p>Select '''MiniLoaderAll.bin''' from the '''MiniLoader''' folder downloaded earlier and click Open</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image48.png|459x234px|(@G{}Y0U)`5J5K@9R(ICYWA]]
+
[[File:cm4-img48.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click '''<span class="mark">Download</span>'''</p>
 
<li><p>Then click '''<span class="mark">Download</span>'''</p>
<p>[[File:media/image126.png|472x222px]]</p></li>
+
<p>[[File:cm4-img126.png]]</p></li>
<li><p>The following figure is displayed after '''MiniLoaderAll.bin''' is &gt; downloaded</p>
+
<li><p>The following figure is displayed after '''MiniLoaderAll.bin''' is downloaded</p>
<p>[[File:media/image127.png|474x227px]]</p></li>
+
<p>[[File:cm4-img127.png]]</p></li>
<li><p>Then select the storage device as '''<span class="mark">SD</span>''' and click &gt; '''<span class="mark">Switch storage</span>'''</p>
+
<li><p>Then select the storage device as '''<span class="mark">SD</span>''' and click '''<span class="mark">Switch storage</span>'''</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image128.jpeg|477x222px|D~T2CO%X~K2@ELR98)BVP~2]]
+
[[File:cm4-img128.png]]
  
 
</div></li>
 
</div></li>
<li><p>If the switchover is successful, the following figure is &gt; displayed</p>
+
<li><p>If the switchover is successful, the following figure is displayed</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image129.jpeg|474x223px|QFVLTK~19N32OK2UGH{D{AK]]
+
[[File:cm4-img129.png]]
  
 
</div></li>
 
</div></li>
<li><p>Then click on the &quot;'''Upgrade Firmware'''&quot; section of the &gt; burning tool</p>
+
<li><p>Then click on the &quot;'''Upgrade Firmware'''&quot; section of the burning tool</p>
<p>[[File:media/image130.png|477x224px]]</p></li>
+
<p>[[File:cm4-img130.png]]</p></li>
<li><p>Then click the &quot;'''Firmware'''&quot; button to select the path of the &gt; Android image that you want to burn</p>
+
<li><p>Then click the &quot;'''Firmware'''&quot; button to select the path of the Android image that you want to burn</p>
<p>[[File:media/image131.png|444x209px]]</p></li>
+
<p>[[File:cm4-img131.png]]</p></li>
<li><p>Finally, click the &quot;'''Upgrade'''&quot; button to start burning. The &gt; log in the burning process is shown below. The Android system &gt; will start automatically after the burning is complete.</p></li></ol>
+
<li><p>Finally, click the &quot;'''Upgrade'''&quot; button to start burning. The log in the burning process is shown below. The Android system will start automatically after the burning is complete.</p></li>
</li></ol>
 
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image132.png|447x209px|09ce44c8ba61c0440bce194fa1835d36]]
+
[[File:cm4-img132.png]]
  
</div>
+
</div></ol>
 +
</li></ol>
 
<span id="method-of-burning-android-image-into-emmc"></span>
 
<span id="method-of-burning-android-image-into-emmc"></span>
 +
 
== Method of burning Android image into eMMC ==
 
== Method of burning Android image into eMMC ==
  
Line 1,297: Line 1,545:
 
=== Method of burning Android image into eMMC through USB2.0 burning port ===
 
=== Method of burning Android image into eMMC through USB2.0 burning port ===
  
'''Note that all operations below are performed on a Windows computer.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that all operations below are performed on a Windows computer.'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
Line 1,303: Line 1,555:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image18.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
+
[[File:cm4-img18.png]]
  
 
</div></li>
 
</div></li>
<li><p>Then download Rockchip driver '''DriverAssitant_v5.12.zip''' and burning tool '''RKDevTool_Release_v3.15.zip''' from [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi's data download page''']</p></li>
+
<li><p>Then download Rockchip driver '''DriverAssitant_v5.12.zip''' and burning tool '''RKDevTool_Release_v3.15.zip''' from [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi's data download page''']</p></li>
<li><p>Then download the Android image from the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi download page'''].</p>
+
<li><p>Then download the Android image from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi download page'''].</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>After opening the download link of the Android image, you can &gt; see the following two types of Android images. Please select &gt; the image in the '''<span class="mark">TF card and eMMC boot image</span>''' &gt; folder to download.</p>
+
<li><p>After opening the download link of the Android image, you can see the following two types of Android images. Please select the image in the '''<span class="mark">TF card and eMMC boot image</span>''' folder to download.</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image122.png|340x108px|e6986fc9c8fc078e8cb6a9c39b76fb8]]
+
[[File:cm4-img122.png]]
  
 
</div></li>
 
</div></li>
<li><p>After entering the '''<span class="mark">TF card and eMMC boot image</span>''' &gt; folders, you can see the following two images. The difference &gt; between them is:</p>
+
<li><p>After entering the '''<span class="mark">TF card and eMMC boot image</span>''' folders, you can see the following two images. The difference between them is:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>The first image is dedicated to HDMI display and supports 4K &gt; display. If you don’t use LCD screen, please download the &gt; image without lcd</p></li>
+
<li><p>The first image is dedicated to HDMI display and supports 4K display. If you don’t use LCD screen, please download the image without lcd</p></li>
<li><p>If you want to use an LCD screen, please choose the image &gt; with LCD</p>
+
<li><p>If you want to use an LCD screen, please choose the image with LCD</p>
<p>[[File:media/image123.png|369x84px]]</p></li></ol>
+
<p>[[File:cm4-img123.png]]</p></li></ol>
 
</li></ol>
 
</li></ol>
 
</li>
 
</li>
 
<li><p>Then use decompression software to decompress the compressed package of the downloaded Android image. In the decompressed file, the file ending with &quot;.img&quot; is the Android image file, with a size of more than 1GB.</p></li>
 
<li><p>Then use decompression software to decompress the compressed package of the downloaded Android image. In the decompressed file, the file ending with &quot;.img&quot; is the Android image file, with a size of more than 1GB.</p></li>
 
<li><p>Then use decompression software to decompress '''DriverAssitant_v5.12.zip''', then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it.</p>
 
<li><p>Then use decompression software to decompress '''DriverAssitant_v5.12.zip''', then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it.</p>
<p>[[File:media/image33.png|575x169px]]</p></li>
+
<p>[[File:cm4-img33.png]]</p></li>
 
<li><p>Open '''DriverInstall.exe''' and install the Rockchip microdriver as follows</p>
 
<li><p>Open '''DriverInstall.exe''' and install the Rockchip microdriver as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>Click the &quot;'''Driver Installation'''&quot; button</p>
 
<li><p>Click the &quot;'''Driver Installation'''&quot; button</p>
<p>[[File:media/image34.png|300x157px]]</p></li>
+
<p>[[File:cm4-img34.png]]</p></li>
 
<li><p>After waiting for a period of time, a window will pop up prompting &quot;'''Driver installation successful'''&quot;, then click the &quot;'''OK'''&quot; button.</p>
 
<li><p>After waiting for a period of time, a window will pop up prompting &quot;'''Driver installation successful'''&quot;, then click the &quot;'''OK'''&quot; button.</p>
<p>[[File:media/image35.png|315x164px]]</p></li></ol>
+
<p>[[File:cm4-img35.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>Then unzip '''RKDevTool_Release_v3.15.zip'''. This software does not need to be installed. Just find '''RKDevTool''' in the unzipped folder and open it.</p>
 
<li><p>Then unzip '''RKDevTool_Release_v3.15.zip'''. This software does not need to be installed. Just find '''RKDevTool''' in the unzipped folder and open it.</p>
<p>[[File:media/image36.png|454x134px]]</p></li>
+
<p>[[File:cm4-img36.png]]</p></li>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not connected to the development board through the USB2.0 male-to-male data cable at this time, the lower left corner will prompt &quot;'''No device found'''&quot;</p>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not connected to the development board through the USB2.0 male-to-male data cable at this time, the lower left corner will prompt &quot;'''No device found'''&quot;</p>
<p>[[File:media/image37.png|442x208px]]</p></li>
+
<p>[[File:cm4-img37.png]]</p></li>
 
<li><p>Then start burning the Android image into eMMC</p>
 
<li><p>Then start burning the Android image into eMMC</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>First, connect the development board to the Windows computer &gt; through a USB2.0 male-to-male data cable. The location of the &gt; development board’s USB2.0 burning interface is as shown in &gt; the figure below.</p>
+
<li><p>First, connect the development board to the Windows computer through a USB2.0 male-to-male data cable. The location of the development board’s USB2.0 burning interface is as shown in the figure below.</p>
<p>[[File:media/image38.png|269x108px]]</p></li>
+
<p>[[File:cm4-img38.png]]</p></li>
<li><p>Then make sure that the development board is not inserted into &gt; the TF card and not connected to the power supply</p></li>
+
<li><p>Then make sure that the development board is not inserted into the TF card and not connected to the power supply</p></li>
<li><p>Then press and hold the MaskROM button on the development board, &gt; the position of the MaskROM button on the development board is &gt; shown in the figure below:</p>
+
<li><p>Then press and hold the MaskROM button on the development board, the position of the MaskROM button on the development board is shown in the figure below:</p>
<p>[[File:media/image39.png|439x98px]]</p></li>
+
<p>[[File:cm4-img39.png]]</p></li>
<li><p>Then connect the development board to the power supply of the &gt; Type-C interface and power on</p>
+
<li><p>Then connect the development board to the power supply of the Type-C interface and power on</p>
<p>[[File:media/image40.png|441x103px]]</p></li>
+
<p>[[File:cm4-img40.png]]</p></li>
<li><p>If the previous steps are successful, the development board will &gt; enter the '''MASKROM''' mode at this time, and the interface of &gt; the burning tool will prompt &quot;'''found a MASKROM device'''&quot;</p>
+
<li><p>If the previous steps are successful, the development board will enter the '''MASKROM''' mode at this time, and the interface of the burning tool will prompt &quot;'''found a MASKROM device'''&quot;</p>
<p>[[File:media/image41.png|457x215px]]</p></li>
+
<p>[[File:cm4-img41.png]]</p></li>
 
<li><p>Then please select '''<span class="mark">advanced functions</span>'''</p>
 
<li><p>Then please select '''<span class="mark">advanced functions</span>'''</p>
<p>[[File:media/image124.png|458x138px]]</p></li>
+
<p>[[File:cm4-img124.png]]</p></li>
 
<li><p>Then click the position shown in the figure below</p>
 
<li><p>Then click the position shown in the figure below</p>
<p>[[File:media/image125.png|459x216px]]</p></li>
+
<p>[[File:cm4-img125.png]]</p></li>
 
<li><p>Then select '''MiniLoaderAll.bin''' in the '''MiniLoader''' folder downloaded earlier, and then click Open</p>
 
<li><p>Then select '''MiniLoaderAll.bin''' in the '''MiniLoader''' folder downloaded earlier, and then click Open</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image48.png|462x236px|(@G{}Y0U)`5J5K@9R(ICYWA]]
+
[[File:cm4-img48.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click '''<span class="mark">Download</span>'''</p>
 
<li><p>Then click '''<span class="mark">Download</span>'''</p>
<p>[[File:media/image126.png|472x222px]]</p></li>
+
<p>[[File:cm4-img126.png]]</p></li>
 
<li><p>The display after downloading '''MiniLoaderAll.bin''' is shown in the figure below</p>
 
<li><p>The display after downloading '''MiniLoaderAll.bin''' is shown in the figure below</p>
<p>[[File:media/image133.png|474x223px]]</p></li>
+
<p>[[File:cm4-img133.png]]</p></li>
 
<li><p>Then select the storage device as '''EMMC''', and then click '''<span class="mark">Switch Storage</span>'''</p>
 
<li><p>Then select the storage device as '''EMMC''', and then click '''<span class="mark">Switch Storage</span>'''</p>
<p>[[File:media/image134.png|468x225px]]</p></li>
+
<p>[[File:cm4-img134.png]]</p></li>
 
<li><p>The successful switching is displayed as shown below</p>
 
<li><p>The successful switching is displayed as shown below</p>
<p>[[File:media/image135.png|472x227px]]</p></li>
+
<p>[[File:cm4-img135.png]]</p></li>
<li><p>Then click the &quot;'''Upgrade Firmware'''&quot; column of the burning &gt; tool</p>
+
<li><p>Then click the &quot;'''Upgrade Firmware'''&quot; column of the burning tool</p>
<p>[[File:media/image130.png|442x208px]]</p></li>
+
<p>[[File:cm4-img130.png]]</p></li>
<li><p>Then click the &quot;'''Firmware'''&quot; button to select the path of the &gt; Android image that needs to be burned.</p>
+
<li><p>Then click the &quot;'''Firmware'''&quot; button to select the path of the Android image that needs to be burned.</p>
<p>[[File:media/image131.png|444x209px]]</p></li>
+
<p>[[File:cm4-img131.png]]</p></li>
<li><p>Finally, click the &quot;'''Upgrade'''&quot; button to start burning. The &gt; log during the burning process is as shown below. After &gt; burning is completed, the Android system will start &gt; automatically.</p>
+
<li><p>Finally, click the &quot;'''Upgrade'''&quot; button to start burning. The log during the burning process is as shown below. After burning is completed, the Android system will start automatically.</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image132.png|447x209px|09ce44c8ba61c0440bce194fa1835d36]]
+
[[File:cm4-img132.png]]
  
 
</div></li></ol>
 
</div></li></ol>
Line 1,378: Line 1,630:
  
 
<span id="how-to-burn-the-android11-image-into-emmc-through-the-tf-card"></span>
 
<span id="how-to-burn-the-android11-image-into-emmc-through-the-tf-card"></span>
 +
 
=== How to burn the Android11 image into EMMC through the TF card ===
 
=== How to burn the Android11 image into EMMC through the TF card ===
  
'''Note that all of the following operations are performed in Windows computers.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that all of the following operations are performed in Windows computers.'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>It is also necessary to prepare a 8GB or larger TF card. The transmission speed of the TF card must be '''class10''' or more. It is recommended to use TF cards from brands such as SanDisk.</p></li>
 
<li><p>It is also necessary to prepare a 8GB or larger TF card. The transmission speed of the TF card must be '''class10''' or more. It is recommended to use TF cards from brands such as SanDisk.</p></li>
 
<li><p>Then use the card reader to insert the TF card into the computer</p></li>
 
<li><p>Then use the card reader to insert the TF card into the computer</p></li>
<li><p>Then download the SDDiskTool burn tool from [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange PI's data download page'''], '''please make sure that the version of the SDDiskTool tool is the latest V1.72'''</p></li>
+
<li><p>Then download the SDDiskTool burn tool from [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange PI's data download page'''], '''<span style="color:#FF0000">please make sure that the version of the SDDiskTool tool is the latest V1.72</span>'''</p></li>
<li><p>Then download the image of Android from [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi's data download page''']</p>
+
<li><p>Then download the image of Android from [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi's data download page''']</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>After turning on the download link of the Android image, you can &gt; see the two types of Android images below. Please select &gt; '''<span class="mark">the image in the TF card and EMMC startup image</span>''' &gt; folder for download</p>
+
<li><p>After turning on the download link of the Android image, you can see the two types of Android images below. Please select '''<span class="mark">the image in the TF card and EMMC startup image</span>''' folder for download</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image122.png|340x108px|e6986fc9c8fc078e8cb6a9c39b76fb8]]
+
[[File:cm4-img122.png]]
  
 
</div></li>
 
</div></li>
<li><p>After entering the '''<span class="mark">TF card and EMMC startup image</span>''' &gt; folder, you can see the following two mirrors. The difference &gt; between them is:</p>
+
<li><p>After entering the '''<span class="mark">TF card and EMMC startup image</span>''' folder, you can see the following two mirrors. The difference between them is:</p>
<ol style="list-style-type: lower-alpha;">
+
<ol style="list-style-type: none;">
<li><p>The first image is specifically used for HDMI display. It &gt; supports 4K display. If you do not use the LCD screen, &gt; download the image without LCD</p></li>
+
<li><p>a) The first image is specifically used for HDMI display. It supports 4K display. If you do not use the LCD screen, download the image without LCD</p></li>
<li><p>If you want to use the LCD screen, select the image with LCD</p>
+
<li><p>b) If you want to use the LCD screen, select the image with LCD</p>
<p>[[File:media/image123.png|369x84px]]</p></li></ol>
+
<p>[[File:cm4-img123.png]]</p></li></ol>
 
</li></ol>
 
</li></ol>
 
</li>
 
</li>
 
<li><p>Then use the decompression software to decompress the downloaded Android image compressed package. In the files that are decompressed, the file ending with &quot;.img&quot; is the Android image file with a memory of more than 1GB</p></li>
 
<li><p>Then use the decompression software to decompress the downloaded Android image compressed package. In the files that are decompressed, the file ending with &quot;.img&quot; is the Android image file with a memory of more than 1GB</p></li>
 
<li><p>Then use the decompression software to decompress the '''SDDiskTool_v1.72.zip'''. This software does not need to be installed. Find the '''SD_Firmware_Tool.exe''' in the unzipped folder and open it.</p>
 
<li><p>Then use the decompression software to decompress the '''SDDiskTool_v1.72.zip'''. This software does not need to be installed. Find the '''SD_Firmware_Tool.exe''' in the unzipped folder and open it.</p>
<p>[[File:media/image136.png|429x103px]]</p></li>
+
<p>[[File:cm4-img136.png]]</p></li>
<li><p>After opening '''SDDiskTool''', if the TF card is recognized normally, the inserted disk device will be displayed in the &quot;'''Select Removable Disk Device'''&quot; column. '''<span class="mark">Please make sure that the displayed disk device is consistent with the drive letter of the TF card you want to burn</span>'''. If there is no display, you can try to unplug the TF card</p>
+
<li><p>After opening '''SDDiskTool''', if the TF card is recognized normally, the inserted disk device will be displayed in the &quot;'''Select Removable Disk Device'''&quot; column. '''<span style="color:#FF0000">Please make sure that the displayed disk device is consistent with the drive letter of the TF card you want to burn</span>'''. If there is no display, you can try to unplug the TF card</p>
<p>[[File:media/image137.png|267x228px]]</p></li>
+
<p>[[File:cm4-img137.png]]</p></li>
 
<li><p>After confirming the drive letter, you can format the TF card first and click the '''<span class="mark">Recover Disk</span>''' button in '''SDDiskTool'''. You can also use the '''SD Card Formatter''' mentioned earlier to format the TF card</p>
 
<li><p>After confirming the drive letter, you can format the TF card first and click the '''<span class="mark">Recover Disk</span>''' button in '''SDDiskTool'''. You can also use the '''SD Card Formatter''' mentioned earlier to format the TF card</p>
<p>[[File:media/image138.png|247x212px]]</p></li>
+
<p>[[File:cm4-img138.png]]</p></li>
 
<li><p>Then start writing the Android image to the TF card</p>
 
<li><p>Then start writing the Android image to the TF card</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>First confirm that the displayed drive letter is the drive &gt; letter corresponding to the TF card under &quot;'''Select Removable &gt; Disk Device'''&quot;</p></li>
+
<li><p>First confirm that the displayed drive letter is the drive letter corresponding to the TF card under &quot;'''Select Removable Disk Device'''&quot;</p></li>
<li><p>Then select '''&quot;Firmware Upgrade&quot;''' in '''&quot;Select Function &gt; Mode&quot;'''</p></li>
+
<li><p>Then select '''&quot;Firmware Upgrade&quot;''' in '''&quot;Select Function Mode&quot;'''</p></li>
<li><p>Then select the path of the Android firmware in the &quot;'''Select &gt; Upgrade Firmware'''&quot; column</p></li>
+
<li><p>Then select the path of the Android firmware in the &quot;'''Select Upgrade Firmware'''&quot; column</p></li>
<li><p>Finally, click the &quot;'''Start Creating'''&quot; button to start &gt; burning.</p>
+
<li><p>Finally, click the &quot;'''Start Creating'''&quot; button to start burning.</p>
<p>[[File:media/image139.png|290x246px]]</p></li></ol>
+
<p>[[File:cm4-img139.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>After the burning is completed, the display is as shown below, and then you can exit SDDiskTool</p>
 
<li><p>After the burning is completed, the display is as shown below, and then you can exit SDDiskTool</p>
<p>[[File:media/image140.png|285x243px]]</p></li>
+
<p>[[File:cm4-img140.png]]</p></li>
 
<li><p>Then pull out the TF card from the computer and insert it into the development board. After the development board is powered on, it will automatically start burning the Android image in the TF card into the eMMC of the development board.</p></li>
 
<li><p>Then pull out the TF card from the computer and insert it into the development board. After the development board is powered on, it will automatically start burning the Android image in the TF card into the eMMC of the development board.</p></li>
 
<li><p>If the development board is connected to an HDMI display, you can also see the progress bar of burning the Android image to eMMC from the HDMI display</p>
 
<li><p>If the development board is connected to an HDMI display, you can also see the progress bar of burning the Android image to eMMC from the HDMI display</p>
<p>[[File:media/image141.png|430x247px]]</p></li>
+
<p>[[File:cm4-img141.png]]</p></li>
 
<li><p>When the HDMI monitor displays the following information, it means that the burning of the Android image into the eMMC has been completed. At this time, the TF card can be pulled out, and then the Android system in the eMMC will start.</p>
 
<li><p>When the HDMI monitor displays the following information, it means that the burning of the Android image into the eMMC has been completed. At this time, the TF card can be pulled out, and then the Android system in the eMMC will start.</p>
<p>[[File:media/image142.png|576x389px]]</p></li></ol>
+
<p>[[File:cm4-img142.png]]</p></li></ol>
  
 
<span id="how-to-burn-android-image-to-spiflashnvme-ssd"></span>
 
<span id="how-to-burn-android-image-to-spiflashnvme-ssd"></span>
 +
 
== How to burn Android image to SPIFlash+NVMe SSD ==
 
== How to burn Android image to SPIFlash+NVMe SSD ==
  
'''Before starting to burn the image, you must make sure that the development board has been pasted with the SPI Flash chip, because the development board is not pasted with the SPI Flash chip when it leaves the factory, so it needs to be purchased and soldered on by yourself. The SPI Flash chip model we recommend is XM25QU128CWIQT08Q'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 
+
|-
'''Since the startup priority of eMMC is higher than that of NVMe SSD, the system of eMMC needs to be cleared before burning the image. For the method of clearing eMMC, please refer to the instructions in the section &quot;[[\l|How to Clear eMMC Using RKDevTool]]&quot;'''
+
|
 
+
<big>'''Before starting to burn the image, you must make sure that the development board has been pasted with the SPI Flash chip, because the development board is not pasted with the SPI Flash chip when it leaves the factory, so it needs to be purchased and soldered on by yourself. The SPI Flash chip model we recommend is XM25QU128CWIQT08Q'''</big>
'''Note that all the following operations are performed on a Windows computer'''
+
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Since the startup priority of eMMC is higher than that of NVMe SSD, the system of eMMC needs to be cleared before burning the image. For the method of clearing eMMC, please refer to the instructions in the section &quot;[[Orange Pi CM4#How to clear eMMC using RKDevTool|How to Clear eMMC Using RKDevTool]]&quot;'''</big>
 +
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that all the following operations are performed on a Windows computer'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
Line 1,437: Line 1,705:
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>The M.2 2230 SSD is as follows</p>
 
<li><p>The M.2 2230 SSD is as follows</p>
<p>[[File:media/image71.png|147x106px]]</p></li>
+
<p>[[File:cm4-img71.png]]</p></li>
 
<li><p>The M.2 2242 specification SSD is as follows</p>
 
<li><p>The M.2 2242 specification SSD is as follows</p>
<p>[[File:media/image72.png|216x119px]]</p></li></ol>
+
<p>[[File:cm4-img72.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>Then insert the NVMe SSD into the M.2 PCIe interface of the development board and fix it</p>
 
<li><p>Then insert the NVMe SSD into the M.2 PCIe interface of the development board and fix it</p>
<p>[[File:media/image73.png|274x185px]]</p></li>
+
<p>[[File:cm4-img73.png]]</p></li>
 
<li><p>Please make sure that the SPI Flash has been attached to the development board. The location of the SPI Flash on the development board is as shown in the picture below. No other settings are required before starting burning</p>
 
<li><p>Please make sure that the SPI Flash has been attached to the development board. The location of the SPI Flash on the development board is as shown in the picture below. No other settings are required before starting burning</p>
<p>[[File:media/image74.png|274x205px]]</p></li>
+
<p>[[File:cm4-img74.png]]</p></li>
 
<li><p>You also need to prepare a good quality USB2.0 male-to-male data cable</p>
 
<li><p>You also need to prepare a good quality USB2.0 male-to-male data cable</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image18.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
+
[[File:cm4-img18.png]]
  
 
</div></li>
 
</div></li>
<li><p>Then download the Rockchip microdriver '''DriverAssitant_v5.12.zip''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi data download page'''].</p></li>
+
<li><p>Then download the Rockchip microdriver '''DriverAssitant_v5.12.zip''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi data download page'''].</p></li>
 
<li><p>Then download the image of Android11</p>
 
<li><p>Then download the image of Android11</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>After opening the download link of the Android image, you can &gt; see the following two types of Android images. Please select &gt; the image in the '''<span class="mark">SPIFlash-NVME SSD boot image</span>''' &gt; folder to download</p>
+
<li><p>After opening the download link of the Android image, you can see the following two types of Android images. Please select the image in the '''<span class="mark">SPIFlash-NVME SSD boot image</span>''' folder to download</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image122.png|340x108px|e6986fc9c8fc078e8cb6a9c39b76fb8]]
+
[[File:cm4-img122.png]]
  
 
</div></li>
 
</div></li>
<li><p>After entering the '''<span class="mark">SPIFlash-NVME SSD boot image</span>''' &gt; folder, you can see the following two images. The difference &gt; between them is:</p>
+
<li><p>After entering the '''<span class="mark">SPIFlash-NVME SSD boot image</span>''' folder, you can see the following two images. The difference between them is:</p>
<ol style="list-style-type: lower-alpha;">
+
<ol style="list-style-type: none;">
<li><p>The image without lcd is specially used for HDMI display and &gt; supports 4K display. If you don’t use the LCD screen, &gt; please download the image without lcd</p></li>
+
<li><p>a) The image without lcd is specially used for HDMI display and supports 4K display. If you don’t use the LCD screen, please download the image without lcd</p></li>
<li><p>If you want to use an LCD screen, please choose the image &gt; with lcd</p>
+
<li><p>b) If you want to use an LCD screen, please choose the image with lcd</p>
<p>[[File:media/image143.png|292x50px]]</p></li></ol>
+
<p>[[File:cm4-img143.png]]</p></li></ol>
 
</li></ol>
 
</li></ol>
 
</li>
 
</li>
 
<li><p>Then use decompression software to decompress '''<span class="mark">DriverAssitant_v5.12.zip</span>''', then find the '''<span class="mark">DriverInstall.exe</span>''' executable file in the decompressed folder and open it.</p>
 
<li><p>Then use decompression software to decompress '''<span class="mark">DriverAssitant_v5.12.zip</span>''', then find the '''<span class="mark">DriverInstall.exe</span>''' executable file in the decompressed folder and open it.</p>
<p>[[File:media/image33.png|407x120px]]</p></li>
+
<p>[[File:cm4-img33.png]]</p></li>
 
<li><p>The steps to install the Rockchip driver after opening '''DriverInstall.exe''' are as follows</p>
 
<li><p>The steps to install the Rockchip driver after opening '''DriverInstall.exe''' are as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>Click the &quot;'''Driver Installation'''&quot; button</p>
 
<li><p>Click the &quot;'''Driver Installation'''&quot; button</p>
<p>[[File:media/image34.png|286x150px]]</p></li>
+
<p>[[File:cm4-img34.png]]</p></li>
 
<li><p>After waiting for a period of time, a window will pop up prompting &quot;'''Driver installation successful'''&quot;, then click the &quot;'''OK'''&quot; button</p>
 
<li><p>After waiting for a period of time, a window will pop up prompting &quot;'''Driver installation successful'''&quot;, then click the &quot;'''OK'''&quot; button</p>
<p>[[File:media/image35.png|296x154px]]</p></li></ol>
+
<p>[[File:cm4-img35.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>Then unzip '''RKDevTool_Release_v3.15.zip'''. This software does not need to be installed. Just find '''RKDevTool''' in the unzipped folder and open it</p>
 
<li><p>Then unzip '''RKDevTool_Release_v3.15.zip'''. This software does not need to be installed. Just find '''RKDevTool''' in the unzipped folder and open it</p>
<p>[[File:media/image36.png|413x122px]]</p></li>
+
<p>[[File:cm4-img36.png]]</p></li>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not yet connected to the development board through the USB2.0 male-to-male data cable, a message &quot;'''No device found'''&quot; will appear in the lower left corner.</p>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not yet connected to the development board through the USB2.0 male-to-male data cable, a message &quot;'''No device found'''&quot; will appear in the lower left corner.</p>
<p>[[File:media/image37.png|402x189px]]</p></li>
+
<p>[[File:cm4-img37.png]]</p></li>
 
<li><p>Then start burning the Android image to SPIFlash+NVMe SSD</p>
 
<li><p>Then start burning the Android image to SPIFlash+NVMe SSD</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>First, connect the development board to the Windows computer &gt; through a USB2.0 male-to-male data cable. The location of the &gt; USB2.0 programming port on the development board is as shown &gt; in the figure below.</p>
+
<li><p>First, connect the development board to the Windows computer through a USB2.0 male-to-male data cable. The location of the USB2.0 programming port on the development board is as shown in the figure below.</p>
<p>[[File:media/image38.png|269x108px]]</p></li>
+
<p>[[File:cm4-img38.png]]</p></li>
<li><p>Make sure that the development board is not inserted into the TF &gt; card and not connected to the power supply</p></li>
+
<li><p>Make sure that the development board is not inserted into the TF card and not connected to the power supply</p></li>
<li><p>Then press and hold the MaskROM button on the development board. &gt; The location of the MaskROM button on the development board is &gt; as shown in the figure below:</p>
+
<li><p>Then press and hold the MaskROM button on the development board. The location of the MaskROM button on the development board is as shown in the figure below:</p>
<p>[[File:media/image39.png|439x98px]]</p></li>
+
<p>[[File:cm4-img39.png]]</p></li>
<li><p>Then connect the development board to the power supply of the &gt; Type-C interface, power it on, and then release the MaskROM &gt; button</p>
+
<li><p>Then connect the development board to the power supply of the Type-C interface, power it on, and then release the MaskROM button</p>
<p>[[File:media/image40.png|441x103px]]</p></li>
+
<p>[[File:cm4-img40.png]]</p></li>
<li><p>If the previous steps are successful, the development board will &gt; enter the '''MASKROM''' mode at this time, and the interface of &gt; the burning tool will prompt &quot;'''Found a MASKROM devic'''e &quot;</p>
+
<li><p>If the previous steps are successful, the development board will enter the '''MASKROM''' mode at this time, and the interface of the burning tool will prompt &quot;'''Found a MASKROM devic'''e &quot;</p>
<p>[[File:media/image41.png|443x208px]]</p></li>
+
<p>[[File:cm4-img41.png]]</p></li>
<li><p>Then click the &quot;'''Upgrade Firmware'''&quot; column of the burning &gt; tool</p>
+
<li><p>Then click the &quot;'''Upgrade Firmware'''&quot; column of the burning tool</p>
<p>[[File:media/image130.png|442x208px]]</p></li>
+
<p>[[File:cm4-img130.png]]</p></li>
<li><p>Then click the &quot;'''Firmware'''&quot; button to select the Android &gt; image that needs to be burned</p>
+
<li><p>Then click the &quot;'''Firmware'''&quot; button to select the Android image that needs to be burned</p>
<p>[[File:media/image131.png|444x209px]]</p></li>
+
<p>[[File:cm4-img131.png]]</p></li>
<li><p>Finally, click the &quot;'''Upgrade'''&quot; button to start burning. The &gt; burning process is shown in the figure below. You can see that &gt; the firmware will be burned into SPIFlash first, and then &gt; burned into PCIE. The Android system will start automatically &gt; after burning.</p>
+
<li><p>Finally, click the &quot;'''Upgrade'''&quot; button to start burning. The burning process is shown in the figure below. You can see that the firmware will be burned into SPIFlash first, and then burned into PCIE. The Android system will start automatically after burning.</p>
<p>[[File:media/image144.png|453x212px]]</p></li></ol>
+
<p>[[File:cm4-img144.png]]</p></li></ol>
 
</li></ol>
 
</li></ol>
  
 
<span id="how-to-clear-spiflash-using-rkdevtool"></span>
 
<span id="how-to-clear-spiflash-using-rkdevtool"></span>
 +
 
== How to clear SPIFlash using RKDevTool ==
 
== How to clear SPIFlash using RKDevTool ==
  
'''There is no SPI Flash chip on the development board when it leaves the factory, so it needs to be pasted by yourself. The model of the SPI Flash chip we recommend is XM25QU128CWIQT08Q'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''There is no SPI Flash chip on the development board when it leaves the factory, so it needs to be pasted by yourself. The model of the SPI Flash chip we recommend is <span style="color:#FF0000">XM25QU128CWIQT08Q</span>'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>The location of SPI Flash on the development board is shown in the figure below</p>
 
<li><p>The location of SPI Flash on the development board is shown in the figure below</p>
<p>[[File:media/image74.png|274x205px]]</p></li>
+
<p>[[File:cm4-img74.png]]</p></li>
 
<li><p>First of all, you need to prepare a good quality USB2.0 male-to-male data cable</p>
 
<li><p>First of all, you need to prepare a good quality USB2.0 male-to-male data cable</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image18.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
+
[[File:cm4-img18.png]]
  
 
</div></li>
 
</div></li>
<li><p>Then download the Rockchip driver '''DriverAssitant_v5.12.zi''' and '''MiniLoade''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi data download page''']</p>
+
<li><p>Then download the Rockchip driver '''DriverAssitant_v5.12.zi''' and '''MiniLoade''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi data download page''']</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>On the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi data download &gt; page'''], &gt; first select the official tool, and then enter the folder &gt; below</p>
+
<li><p>On the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi data download page'''], first select the official tool, and then enter the folder below</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image145.png|342x56px|1691401357374]]
+
[[File:cm4-img145.png]]
  
 
</div></li>
 
</div></li>
Line 1,524: Line 1,797:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image146.png|347x139px|1691401520573]]
+
[[File:cm4-img146.png]]
  
 
</div>
 
</div>
<p>'''Note that the &quot;MiniLoader-things needed to burn Linux images&quot; folder will be referred to as the MiniLoader folder below'''</p></li></ol>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''Note that the &quot;MiniLoader-things needed to burn Linux images&quot; folder will be referred to as the MiniLoader folder below'''</p></big>
 +
|}
 +
</li></ol>
 
</li>
 
</li>
 
<li><p>Then use decompression software to decompress '''DriverAssitant_v5.12.zip''', then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it</p>
 
<li><p>Then use decompression software to decompress '''DriverAssitant_v5.12.zip''', then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it</p>
<p>[[File:media/image33.png|472x139px]]</p></li>
+
<p>[[File:cm4-img33.png]]</p></li>
 
<li><p>The steps to install the Rockchip driver after opening '''DriverInstall.exe''' are as follows</p>
 
<li><p>The steps to install the Rockchip driver after opening '''DriverInstall.exe''' are as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>Click the &quot;'''Driver Installation'''&quot; button</p>
 
<li><p>Click the &quot;'''Driver Installation'''&quot; button</p>
<p>[[File:media/image34.png|276x145px]]</p></li>
+
<p>[[File:cm4-img34.png]]</p></li>
<li><p>After waiting for a period of time, a pop-up window will prompt &gt; &quot;'''Driver installed successfully'''&quot;, and then click the &gt; &quot;'''OK'''&quot; button.</p>
+
<li><p>After waiting for a period of time, a pop-up window will prompt &quot;'''Driver installed successfully'''&quot;, and then click the &quot;'''OK'''&quot; button.</p>
<p>[[File:media/image35.png|292x151px]]</p></li></ol>
+
<p>[[File:cm4-img35.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>Then unzip '''RKDevTool_Release_v3.15.zip'''. This software does not need to be installed. Just find '''RKDevTool''' in the unzipped folder and open it.</p>
 
<li><p>Then unzip '''RKDevTool_Release_v3.15.zip'''. This software does not need to be installed. Just find '''RKDevTool''' in the unzipped folder and open it.</p>
<p>[[File:media/image36.png|467x138px]]</p></li>
+
<p>[[File:cm4-img36.png]]</p></li>
 
<li><p>After opening the '''RKDevTool'''burning tool, because the computer has not yet connected to the development board through the USB2.0 male-to-male data cable, a message &quot;'''No device found'''&quot; will appear in the lower left corner.</p>
 
<li><p>After opening the '''RKDevTool'''burning tool, because the computer has not yet connected to the development board through the USB2.0 male-to-male data cable, a message &quot;'''No device found'''&quot; will appear in the lower left corner.</p>
<p>[[File:media/image37.png|402x189px]]</p></li>
+
<p>[[File:cm4-img37.png]]</p></li>
 
<li><p>Then you can start to clear the contents of the SPI FLASH</p>
 
<li><p>Then you can start to clear the contents of the SPI FLASH</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>First, connect the development board to the Windows computer &gt; through a USB2.0 male-to-male data cable. The location of the &gt; USB2.0 programming port on the development board is as shown &gt; in the figure below.</p>
+
<li><p>First, connect the development board to the Windows computer through a USB2.0 male-to-male data cable. The location of the USB2.0 programming port on the development board is as shown in the figure below.</p>
<p>[[File:media/image38.png|269x108px]]</p></li>
+
<p>[[File:cm4-img38.png]]</p></li>
<li><p>Make sure that the development board is not inserted into the TF &gt; card and not connected to the power supply</p></li>
+
<li><p>Make sure that the development board is not inserted into the TF card and not connected to the power supply</p></li>
<li><p>Then press and hold the MaskROM button on the development board. &gt; The location of the MaskROM button on the development board is &gt; as shown in the figure below:</p>
+
<li><p>Then press and hold the MaskROM button on the development board. The location of the MaskROM button on the development board is as shown in the figure below:</p>
<p>[[File:media/image39.png|439x98px]]</p></li>
+
<p>[[File:cm4-img39.png]]</p></li>
<li><p>Then connect the development board to the power supply of the &gt; Type-C interface, power it on, and then release the MaskROM &gt; button.</p>
+
<li><p>Then connect the development board to the power supply of the Type-C interface, power it on, and then release the MaskROM button.</p>
<p>[[File:media/image40.png|441x103px]]</p></li>
+
<p>[[File:cm4-img40.png]]</p></li>
<li><p>If the previous steps are successful, the development board will &gt; enter the '''MASKROM''' mode at this time, and the interface of &gt; the burning tool will prompt &quot;'''found a MASKROM device'''&quot;</p>
+
<li><p>If the previous steps are successful, the development board will enter the '''MASKROM''' mode at this time, and the interface of the burning tool will prompt &quot;'''found a MASKROM device'''&quot;</p>
<p>[[File:media/image41.png|457x215px]]</p></li>
+
<p>[[File:cm4-img41.png]]</p></li>
 
<li><p>Then please select '''<span class="mark">advanced functions</span>'''</p>
 
<li><p>Then please select '''<span class="mark">advanced functions</span>'''</p>
<p>[[File:media/image124.png|458x138px]]</p></li>
+
<p>[[File:cm4-img124.png]]</p></li>
 
<li><p>Then click the position shown in the figure below</p>
 
<li><p>Then click the position shown in the figure below</p>
<p>[[File:media/image125.png|459x216px]]</p></li>
+
<p>[[File:cm4-img125.png]]</p></li>
 
<li><p>Then select '''MiniLoaderAll.bin''' in the '''MiniLoader''' folder downloaded earlier, and then click Open</p>
 
<li><p>Then select '''MiniLoaderAll.bin''' in the '''MiniLoader''' folder downloaded earlier, and then click Open</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image48.png|469x239px|(@G{}Y0U)`5J5K@9R(ICYWA]]
+
[[File:cm4-img48.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click '''<span class="mark">Download</span>'''</p>
 
<li><p>Then click '''<span class="mark">Download</span>'''</p>
<p>[[File:media/image126.png|472x222px]]</p></li>
+
<p>[[File:cm4-img126.png]]</p></li>
 
<li><p>The display after downloading '''MiniLoaderAll.bin''' is shown in the figure below</p>
 
<li><p>The display after downloading '''MiniLoaderAll.bin''' is shown in the figure below</p>
<p>[[File:media/image133.png|474x223px]]</p></li>
+
<p>[[File:cm4-img133.png]]</p></li>
 
<li><p>Then select the storage device as '''SPINOR'''</p>
 
<li><p>Then select the storage device as '''SPINOR'''</p>
<p>[[File:media/image147.png|467x220px]]</p></li>
+
<p>[[File:cm4-img147.png]]</p></li>
 
<li><p>Then click '''<span class="mark">switch storage</span>'''</p>
 
<li><p>Then click '''<span class="mark">switch storage</span>'''</p>
<p>[[File:media/image148.png|464x218px]]</p></li>
+
<p>[[File:cm4-img148.png]]</p></li>
 
<li><p>Then click '''<span class="mark">Erase All</span>''' and it will start erasing SPIFlash.</p>
 
<li><p>Then click '''<span class="mark">Erase All</span>''' and it will start erasing SPIFlash.</p>
<p>[[File:media/image149.png|467x220px]]</p></li>
+
<p>[[File:cm4-img149.png]]</p></li>
 
<li><p>The display log after erasing SPIFlash is shown in the figure below</p>
 
<li><p>The display log after erasing SPIFlash is shown in the figure below</p>
<p>[[File:media/image150.png|460x216px]]</p></li></ol>
+
<p>[[File:cm4-img150.png]]</p></li></ol>
 
</li></ol>
 
</li></ol>
  
 
<span id="how-to-clear-emmc-using-rkdevtool"></span>
 
<span id="how-to-clear-emmc-using-rkdevtool"></span>
 +
 
== How to clear eMMC using RKDevTool ==
 
== How to clear eMMC using RKDevTool ==
  
Line 1,584: Line 1,863:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image18.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
+
[[File:cm4-img18.png]]
  
 
</div></li>
 
</div></li>
<li><p>Then download the Rockchip microdriver '''DriverAssitant_v5.12.zip''' and '''MiniLoader''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi data download page''']</p>
+
<li><p>Then download the Rockchip microdriver '''DriverAssitant_v5.12.zip''' and '''MiniLoader''' and the burning tool '''RKDevTool_Release_v3.15.zip''' from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi data download page''']</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>On the [http://www.orangepi.org/html/serviceAndSupport/index.html '''Orange Pi data download &gt; page'''], &gt; first select the '''official tool''', and then enter the folder &gt; below</p>
+
<li><p>On the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''Orange Pi data download page'''], first select the '''official tool''', and then enter the folder below</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image145.png|342x56px|1691401357374]]
+
[[File:cm4-img145.png]]
  
 
</div></li>
 
</div></li>
Line 1,598: Line 1,877:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image146.png|347x139px|1691401520573]]
+
[[File:cm4-img146.png]]
  
 
</div>
 
</div>
<p>'''Note that the &quot;<span class="mark">MiniLoader-things needed to burn the Linux image</span>&quot; folder is hereinafter referred to as the MiniLoader folder.'''</p></li></ol>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''Note that the &quot;<span class="mark">MiniLoader-things needed to burn the Linux image</span>&quot; folder is hereinafter referred to as the MiniLoader folder.'''</p></big>
 +
|}
 +
</li></ol>
 
</li>
 
</li>
 
<li><p>Then use the decompression software to decompress '''DriverAssitant_v5.12.zip''', and then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it</p>
 
<li><p>Then use the decompression software to decompress '''DriverAssitant_v5.12.zip''', and then find the '''DriverInstall.exe''' executable file in the decompressed folder and open it</p>
<p>[[File:media/image33.png|472x139px]]</p></li>
+
<p>[[File:cm4-img33.png]]</p></li>
 
<li><p>After opening '''DriverInstall.exe''', the steps to install the Rockchip driver are as follows</p>
 
<li><p>After opening '''DriverInstall.exe''', the steps to install the Rockchip driver are as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>Click the &quot;'''Driver Installation'''&quot; button</p>
 
<li><p>Click the &quot;'''Driver Installation'''&quot; button</p>
<p>[[File:media/image34.png|276x145px]]</p></li>
+
<p>[[File:cm4-img34.png]]</p></li>
<li><p>After waiting for a period of time, a window will pop up &gt; prompting &quot;'''Driver installation successful'''&quot;, then click &gt; the &quot;'''OK'''&quot; button.</p>
+
<li><p>After waiting for a period of time, a window will pop up prompting &quot;'''Driver installation successful'''&quot;, then click the &quot;'''OK'''&quot; button.</p>
<p>[[File:media/image35.png|292x151px]]</p></li></ol>
+
<p>[[File:cm4-img35.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>Then unzip '''RKDevTool_Release_v3.15.zip'''. This software does not need to be installed. Just find '''RKDevTool''' in the unzipped folder and open it.</p>
 
<li><p>Then unzip '''RKDevTool_Release_v3.15.zip'''. This software does not need to be installed. Just find '''RKDevTool''' in the unzipped folder and open it.</p>
<p>[[File:media/image36.png|467x138px]]</p></li>
+
<p>[[File:cm4-img36.png]]</p></li>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not connected to the development board through the USB2.0 male-to-male data cable at this time, the lower left corner will prompt &quot;'''No device found'''&quot;</p>
 
<li><p>After opening the '''RKDevTool''' burning tool, because the computer has not connected to the development board through the USB2.0 male-to-male data cable at this time, the lower left corner will prompt &quot;'''No device found'''&quot;</p>
<p>[[File:media/image37.png|402x189px]]</p></li>
+
<p>[[File:cm4-img37.png]]</p></li>
 
<li><p>Then you can start to clear the content in eMMC</p>
 
<li><p>Then you can start to clear the content in eMMC</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>First, connect the development board to the Windows computer &gt; through a USB2.0 male-to-male data cable. The location of the &gt; USB2.0 programming port on the development board is as shown &gt; in the figure below.</p>
+
<li><p>First, connect the development board to the Windows computer through a USB2.0 male-to-male data cable. The location of the USB2.0 programming port on the development board is as shown in the figure below.</p>
<p>[[File:media/image38.png|269x108px]]</p></li>
+
<p>[[File:cm4-img38.png]]</p></li>
<li><p>Make sure that the development board is not inserted into the TF &gt; card and not connected to the power supply</p></li>
+
<li><p>Make sure that the development board is not inserted into the TF card and not connected to the power supply</p></li>
<li><p>Then press and hold the MaskROM button on the development board. &gt; The location of the MaskROM button on the development board is &gt; as shown in the figure below:</p>
+
<li><p>Then press and hold the MaskROM button on the development board. The location of the MaskROM button on the development board is as shown in the figure below:</p>
<p>[[File:media/image39.png|439x98px]]</p></li>
+
<p>[[File:cm4-img39.png]]</p></li>
<li><p>Then connect the development board to the power supply of the &gt; Type-C interface, power it on, and then release the MaskROM &gt; button</p>
+
<li><p>Then connect the development board to the power supply of the Type-C interface, power it on, and then release the MaskROM button</p>
<p>[[File:media/image40.png|441x103px]]</p></li>
+
<p>[[File:cm4-img40.png]]</p></li>
<li><p>If the previous steps are successful, the development board will &gt; enter the '''MASKROM''' mode at this time, and the interface of &gt; the burning tool will prompt &quot;'''found a MASKROM device'''&quot;</p>
+
<li><p>If the previous steps are successful, the development board will enter the '''MASKROM''' mode at this time, and the interface of the burning tool will prompt &quot;'''found a MASKROM device'''&quot;</p>
<p>[[File:media/image41.png|457x215px]]</p></li>
+
<p>[[File:cm4-img41.png]]</p></li>
 
<li><p>Then please select '''<span class="mark">advanced functions</span>'''</p>
 
<li><p>Then please select '''<span class="mark">advanced functions</span>'''</p>
<p>[[File:media/image124.png|458x138px]]</p></li>
+
<p>[[File:cm4-img124.png]]</p></li>
 
<li><p>Then click the position shown in the figure below</p>
 
<li><p>Then click the position shown in the figure below</p>
<p>[[File:media/image125.png|459x216px]]</p></li>
+
<p>[[File:cm4-img125.png]]</p></li>
 
<li><p>Then select '''MiniLoaderAll.bin''' in the '''MiniLoader''' folder downloaded earlier, and then click Open</p>
 
<li><p>Then select '''MiniLoaderAll.bin''' in the '''MiniLoader''' folder downloaded earlier, and then click Open</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image48.png|469x239px|(@G{}Y0U)`5J5K@9R(ICYWA]]
+
[[File:cm4-img48.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then click '''<span class="mark">Download</span>'''</p>
 
<li><p>Then click '''<span class="mark">Download</span>'''</p>
<p>[[File:media/image126.png|472x222px]]</p></li>
+
<p>[[File:cm4-img126.png]]</p></li>
 
<li><p>The display after downloading '''MiniLoaderAll.bin''' is shown in the figure below</p>
 
<li><p>The display after downloading '''MiniLoaderAll.bin''' is shown in the figure below</p>
<p>[[File:media/image133.png|474x223px]]</p></li>
+
<p>[[File:cm4-img133.png]]</p></li>
 
<li><p>Then select the storage device as '''eMMC'''</p>
 
<li><p>Then select the storage device as '''eMMC'''</p>
<p>[[File:media/image151.png|465x218px]]</p></li>
+
<p>[[File:cm4-img151.png]]</p></li>
 
<li><p>Then click '''<span class="mark">switch storage</span>'''</p>
 
<li><p>Then click '''<span class="mark">switch storage</span>'''</p>
<p>[[File:media/image152.png|470x221px]]</p></li>
+
<p>[[File:cm4-img152.png]]</p></li>
 
<li><p>Then click '''<span class="mark">Erase All</span>''' to start erasing the eMMC.</p>
 
<li><p>Then click '''<span class="mark">Erase All</span>''' to start erasing the eMMC.</p>
<p>[[File:media/image153.png|466x221px]]</p></li>
+
<p>[[File:cm4-img153.png]]</p></li>
 
<li><p>The display log after erasing eMMC is as shown below</p>
 
<li><p>The display log after erasing eMMC is as shown below</p>
<p>[[File:media/image154.png|466x221px]]</p></li></ol>
+
<p>[[File:cm4-img154.png]]</p></li></ol>
 
</li></ol>
 
</li></ol>
  
 
<span id="boot-the-orange-pi-development-board"></span>
 
<span id="boot-the-orange-pi-development-board"></span>
 +
 
== Boot the Orange Pi development board ==
 
== Boot the Orange Pi development board ==
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First install the Orange Pi CM4 core board on the base board</p>
 
<li><p>First install the Orange Pi CM4 core board on the base board</p>
<p>[[File:media/image155.png|417x277px]]</p></li>
+
<p>[[File:cm4-img155.png]]</p></li>
 
<li><p>Then insert the TF card with the burned image into the TF card slot of the Orange Pi development board.</p></li>
 
<li><p>Then insert the TF card with the burned image into the TF card slot of the Orange Pi development board.</p></li>
 
<li><p>The development board has a Micro HDMI interface, and the development board can be connected to a TV or HDMI display through a Micro HDMI to HDMI cable. If you have purchased an LCD screen, you can also use the LCD screen to display the system interface of the development board</p></li>
 
<li><p>The development board has a Micro HDMI interface, and the development board can be connected to a TV or HDMI display through a Micro HDMI to HDMI cable. If you have purchased an LCD screen, you can also use the LCD screen to display the system interface of the development board</p></li>
 
<li><p>Connect a USB mouse and keyboard to control the Orange Pi development board</p></li>
 
<li><p>Connect a USB mouse and keyboard to control the Orange Pi development board</p></li>
 
<li><p>The development board has an Ethernet port, which can be plugged into a network cable to access the Internet</p></li>
 
<li><p>The development board has an Ethernet port, which can be plugged into a network cable to access the Internet</p></li>
<li><p>Connect a '''high-quality''' power adapter with a 5V/3A USB Type-C interface.</p></li></ol>
+
<li><p>Connect a '''high-quality''' power adapter with a 5V/3A USB Type-C interface.</p>
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big style="color:#FF0000">'''Remember not to plug in a power adapter with a voltage output greater than 5V, it will burn out the development board.'''
  
'''Remember not to plug in a power adapter with a voltage output greater than 5V, it will burn out the development board.'''
 
  
 
'''Many unstable phenomena during system power-on and startup are basically caused by power supply problems, so a reliable power adapter is very important. If you find that you are constantly restarting during the startup process, please replace the power supply or Type-C data cable and try again.'''
 
'''Many unstable phenomena during system power-on and startup are basically caused by power supply problems, so a reliable power adapter is very important. If you find that you are constantly restarting during the startup process, please replace the power supply or Type-C data cable and try again.'''
 +
  
 
'''Type-C power interface does not support PD negotiation.'''
 
'''Type-C power interface does not support PD negotiation.'''
  
'''In addition, please do not connect to the USB interface of the computer to power the development board.'''
 
  
 +
'''In addition, please do not connect to the USB interface of the computer to power the development board.'''</big>
 +
|}
 +
</li></ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
 
<li><p>Then turn on the switch of the power adapter. If everything is normal, you can see the startup screen of the system on the HDMI monitor or LCD screen.</p></li>
 
<li><p>Then turn on the switch of the power adapter. If everything is normal, you can see the startup screen of the system on the HDMI monitor or LCD screen.</p></li>
<li><p>If you want to view the output information of the system through the debugging serial port, please use the serial port cable to connect the development board to the computer. For the connection method of the serial port, please refer to the section on [[\l|'''how to use the debugging serial port''']]</p></li></ol>
+
<li><p>If you want to view the output information of the system through the debugging serial port, please use the serial port cable to connect the development board to the computer. For the connection method of the serial port, please refer to the section on [[Orange Pi CM4#How to use the debugging serial port|'''how to use the debugging serial port''']]</p></li></ol>
  
 
<span id="how-to-use-the-debugging-serial-port"></span>
 
<span id="how-to-use-the-debugging-serial-port"></span>
 +
 
== How to use the debugging serial port ==
 
== How to use the debugging serial port ==
  
Line 1,683: Line 1,975:
 
# First, you need to prepare a '''3.3V'''USB to TTL module, and then insert the USB interface end of the USB to TTL module into the USB interface of the computer.
 
# First, you need to prepare a '''3.3V'''USB to TTL module, and then insert the USB interface end of the USB to TTL module into the USB interface of the computer.
  
'''For better compatibility, it is recommended to use CH340 USB to TTL module, please do not use CP2102, PL2303 type USB to TTL module.'''
+
::{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''For better compatibility, it is recommended to use CH340 USB to TTL module, please do not use CP2102, PL2303 type USB to TTL module.'''
  
'''Before purchasing a USB to TTL module, please confirm that the module supports a baud rate of 1500000.'''
+
'''Before purchasing a USB to TTL module, please confirm that the module supports a baud rate of 1500000.'''</big>
 +
|}
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image156.png|576x115px|07]]
+
::[[File:cm4-img156.png]]
  
 
</div>
 
</div>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>The corresponding relationship between the GND, RXD and TXD pins of the development board’s debugging serial port is as shown in the figure below</p>
 
<li><p>The corresponding relationship between the GND, RXD and TXD pins of the development board’s debugging serial port is as shown in the figure below</p>
<p>[[File:media/image157.png|499x66px]]</p></li>
+
<p>[[File:cm4-img157.png]]</p></li>
 
<li><p>The GND, TXD and RXD pins of the USB to TTL module need to be connected to the debugging serial port of the development board through Dupont lines</p>
 
<li><p>The GND, TXD and RXD pins of the USB to TTL module need to be connected to the debugging serial port of the development board through Dupont lines</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>Connect the GND of the USB to TTL module to the GND of the &gt; development board</p></li>
+
<li><p>Connect the GND of the USB to TTL module to the GND of the development board</p></li>
<li><p>The RX of the USB to TTL module is '''connected to the TX of the &gt; development board'''</p></li>
+
<li><p>The RX of the USB to TTL module is '''<span style="color:#FF0000">connected to the TX of the development board</span>'''</p></li>
<li><p>The TX of the USB to TTL module is '''connected to the RX of the &gt; development board'''</p></li></ol>
+
<li><p>The TX of the USB to TTL module is '''<span style="color:#FF0000">connected to the RX of the development board</span>'''</p></li></ol>
 
</li>
 
</li>
 
<li><p>The schematic diagram of connecting the USB to TTL module to the computer and Orange Pi development board is as shown below</p>
 
<li><p>The schematic diagram of connecting the USB to TTL module to the computer and Orange Pi development board is as shown below</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image158.jpeg|524x189px|C:\Users\orangepi\Desktop\用户手册插图\pi 3b\USB-to-TTL-module-to-the-computer.jpgUSB-to-TTL-module-to-the-computer]]
+
[[File:cm4-img158.png]]
  
 
</div>
 
</div>
<p>'''The TX and RX of the serial port need to be cross-connected. If you don’t want to carefully distinguish the order of TX and RX, you can connect the TX and RX of the serial port casually. If there is no output in the test, then exchange the order of TX and RX, so that there is always a The order is correct'''</p></li></ol>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''The TX and RX of the serial port need to be cross-connected. If you don’t want to carefully distinguish the order of TX and RX, you can connect the TX and RX of the serial port casually. If there is no output in the test, then exchange the order of TX and RX, so that there is always a The order is correct'''</p></big>
 +
|}
 +
</li></ol>
  
 
<span id="how-to-use-the-debugging-serial-port-on-ubuntu-platform"></span>
 
<span id="how-to-use-the-debugging-serial-port-on-ubuntu-platform"></span>
 +
 
=== How to use the debugging serial port on Ubuntu platform ===
 
=== How to use the debugging serial port on Ubuntu platform ===
  
'''There are many serial port debugging software that can be used under Linux, such as putty, minicom, etc. The following demonstrates how to use putty.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''There are many serial port debugging software that can be used under Linux, such as putty, minicom, etc. The following demonstrates how to use putty.'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First insert the USB to TTL module into the USB interface of the Ubuntu computer. If the USB to TTL module is connected and recognized normally, you can see the corresponding device node name under '''/dev''' of the Ubuntu PC. Remember this node name and set the serial port later. software will be used.</p>
 
<li><p>First insert the USB to TTL module into the USB interface of the Ubuntu computer. If the USB to TTL module is connected and recognized normally, you can see the corresponding device node name under '''/dev''' of the Ubuntu PC. Remember this node name and set the serial port later. software will be used.</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''ls /dev/ttyUSB*'''</p>
 
<p>test@test:~$ '''ls /dev/ttyUSB*'''</p>
<p>/dev/ttyUSB0</p></li>
+
<p>/dev/ttyUSB0</p>
 +
|}
 +
</li>
 
<li><p>Then use the following command to install putty on Ubuntu PC</p>
 
<li><p>Then use the following command to install putty on Ubuntu PC</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''sudo apt-get update'''</p>
 
<p>test@test:~$ '''sudo apt-get update'''</p>
<p>test@test:~$ '''sudo apt-get install -y putty'''</p></li>
+
<p>test@test:~$ '''sudo apt-get install -y putty'''</p>
<li><p>Then run putty, '''remember to add sudo permissions'''</p>
+
|}
<p>test@test:~$ '''sudo putty'''</p></li>
+
</li>
 +
<li><p>Then run putty, '''<span style="color:#FF0000">remember to add sudo permissions</span>'''</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>test@test:~$ '''sudo putty'''</p>
 +
|}
 +
</li>
 
<li><p>After executing the putty command, the following interface will pop up</p>
 
<li><p>After executing the putty command, the following interface will pop up</p>
<p>[[File:media/image159.png|367x321px]]</p></li>
+
<p>[[File:cm4-img159.png]]</p></li>
 
<li><p>First select the serial port setting interface</p>
 
<li><p>First select the serial port setting interface</p>
<p>[[File:media/image160.png|359x352px]]</p></li>
+
<p>[[File:cm4-img160.png]]</p></li>
 
<li><p>Then set the parameters of the serial port</p>
 
<li><p>Then set the parameters of the serial port</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>Set the '''<span class="mark">Serial line to connect to</span>''' to &gt; '''<span class="mark">/dev/ttyUSB0</span>''' (modify to the corresponding node &gt; name, usually '''<span class="mark">/dev/ttyUSB0</span>''')</p></li>
+
<li><p>Set the '''<span class="mark">Serial line to connect to</span>''' to '''<span class="mark">/dev/ttyUSB0</span>''' (modify to the corresponding node name, usually '''<span class="mark">/dev/ttyUSB0</span>''')</p></li>
<li><p>Set '''<span class="mark">Speed(baud)</span>''' to 1500000 (the baud rate of the &gt; serial port)</p></li>
+
<li><p>Set '''<span class="mark">Speed(baud)</span>''' to 1500000 (the baud rate of the serial port)</p></li>
 
<li><p>Set Flow control to None</p>
 
<li><p>Set Flow control to None</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image161.png|317x312px|09]]
+
[[File:cm4-img161.png]]
  
 
</div></li></ol>
 
</div></li></ol>
Line 1,744: Line 2,065:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image162.png|345x340px|10]]
+
[[File:cm4-img162.png]]
  
 
</div></li></ol>
 
</div></li></ol>
 
</li>
 
</li>
 
<li><p>After starting the development board, you can see the Log information output by the system from the open serial terminal.</p>
 
<li><p>After starting the development board, you can see the Log information output by the system from the open serial terminal.</p>
<p>[[File:media/image163.png|468x340px]]</p></li></ol>
+
<p>[[File:cm4-img163.png]]</p></li></ol>
  
 
<span id="how-to-use-the-debugging-serial-port-on-windows-platform"></span>
 
<span id="how-to-use-the-debugging-serial-port-on-windows-platform"></span>
 +
 
=== How to use the debugging serial port on Windows platform ===
 
=== How to use the debugging serial port on Windows platform ===
  
'''There are many serial port debugging software that can be used under Windows, such as SecureCRT, MobaXterm, etc. The following demonstrates how to use MobaXterm. This software has a free version and can be used without buying a serial number.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''There are many serial port debugging software that can be used under Windows, such as SecureCRT, MobaXterm, etc. The following demonstrates how to use MobaXterm. This software has a free version and can be used without buying a serial number.'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
Line 1,760: Line 2,086:
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>Download MobaXterm website as follows</p>
 
<li><p>Download MobaXterm website as follows</p>
<p>[https://mobaxterm.mobatek.net/ '''https://mobaxterm.mobatek.net''']</p></li>
+
{| class="wikitable" style="width:800px;"
<li><p>After entering the MobaXterm download page, click '''GET XOBATERM &gt; NOW!'''</p>
+
|-
<p>[[File:media/image164.png|576x334px]]</p></li>
+
|
 +
<p>[https://mobaxterm.mobatek.net/ '''https://mobaxterm.mobatek.net''']</p>
 +
|}
 +
</li>
 +
<li><p>After entering the MobaXterm download page, click '''GET XOBATERM NOW!'''</p>
 +
<p>[[File:cm4-img164.png]]</p></li>
 
<li><p>Then choose to download the Home version</p>
 
<li><p>Then choose to download the Home version</p>
<p>[[File:media/image165.png|353x231px]]</p></li>
+
<p>[[File:cm4-img165.png]]</p></li>
 
<li><p>Then select the Portable version. There is no need to install it after downloading. You can open it directly and use it.</p>
 
<li><p>Then select the Portable version. There is no need to install it after downloading. You can open it directly and use it.</p>
<p>[[File:media/image166.png|575x259px]]</p></li></ol>
+
<p>[[File:cm4-img166.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>After downloading, use decompression software to decompress the downloaded compressed package to get the MobaXterm executable software, and then double-click to open it.</p>
 
<li><p>After downloading, use decompression software to decompress the downloaded compressed package to get the MobaXterm executable software, and then double-click to open it.</p>
<p>[[File:media/image167.png|576x81px]]</p></li>
+
<p>[[File:cm4-img167.png]]</p></li>
 
<li><p>After opening the software, the steps to set up the serial port connection are as follows</p>
 
<li><p>After opening the software, the steps to set up the serial port connection are as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>Open the session settings interface</p></li>
 
<li><p>Open the session settings interface</p></li>
 
<li><p>Select the serial port type</p></li>
 
<li><p>Select the serial port type</p></li>
<li><p>Select the port number of the serial port (select the &gt; corresponding port number according to the actual situation). &gt; If you cannot see the port number, please use '''360 Driver &gt; Master''' to scan and install the driver for the USB to TTL &gt; serial port chip.</p></li>
+
<li><p>Select the port number of the serial port (select the corresponding port number according to the actual situation). If you cannot see the port number, please use '''360 Driver Master''' to scan and install the driver for the USB to TTL serial port chip.</p></li>
 
<li><p>Select the baud rate of the serial port to be '''1500000'''</p></li>
 
<li><p>Select the baud rate of the serial port to be '''1500000'''</p></li>
<li><p>Finally click the &quot;'''OK'''&quot; button to complete the setup</p></li></ol>
+
<li><p>Finally click the &quot;'''OK'''&quot; button to complete the setup</p></li>
</li></ol>
 
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image168.png|575x438px|11]]
+
[[File:cm4-img168.png]]
  
</div>
+
</div></ol>
 +
</li></ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
 
<li><p>After clicking the &quot;'''OK'''&quot; button, you will enter the following interface. At this time, you can see the output information of the serial port</p>
 
<li><p>After clicking the &quot;'''OK'''&quot; button, you will enter the following interface. At this time, you can see the output information of the serial port</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image169.png|575x291px|12]]
+
[[File:cm4-img169.png]]
  
 
</div></li></ol>
 
</div></li></ol>
  
 
<span id="instructions-for-using-the-5v-pin-in-the-40pin-interface-of-the-development-board-to-supply-power"></span>
 
<span id="instructions-for-using-the-5v-pin-in-the-40pin-interface-of-the-development-board-to-supply-power"></span>
 +
 
== Instructions for using the 5v pin in the 40pin interface of the development board to supply power ==
 
== Instructions for using the 5v pin in the 40pin interface of the development board to supply power ==
  
'''The power supply method we recommend for the development board is to use the 5V/3A Type C interface power cord to plug into the Type-C power interface of the development board. If you need to use the 5V pin in the 40-pin interface to power the development board, please ensure that the power cord and power adapter used can meet the power supply requirements of the development board. If the use is unstable, please switch to Type-C power supply.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''The power supply method we recommend for the development board is to use the 5V/3A Type C interface power cord to plug into the Type-C power interface of the development board. If you need to use the 5V pin in the 40-pin interface to power the development board, please ensure that the power cord and power adapter used can meet the power supply requirements of the development board. If the use is unstable, please switch to Type-C power supply.'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
Line 1,801: Line 2,137:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image170.jpeg|151x108px|C:\Users\orangepi\Desktop\用户手册插图\Pi5 Plus\未标题-7.jpg未标题-7]]
+
[[File:cm4-img170.png]]
  
 
</div>
 
</div>
<p>'''The power cord shown in the figure above can be bought on Taobao, please search for purchase by yourself.'''</p></li>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''The power cord shown in the figure above can be bought on Taobao, please search for purchase by yourself.'''</p></big>
 +
|}
 +
</li>
 
<li><p>Use the 5V pin in the 40pin interface to power the development board. The power cord connection is as follows</p>
 
<li><p>Use the 5V pin in the 40pin interface to power the development board. The power cord connection is as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>The USB A port of the power cord shown in the picture above &gt; needs to be plugged into the 5V/3A power adapter &gt; connector.('''Please do not plug it into the USB port of your &gt; computer for power supply''')</p></li>
+
<li><p>The USB A port of the power cord shown in the picture above needs to be plugged into the 5V/3A power adapter connector.('''<span style="color:#FF0000">Please do not plug it into the USB port of your computer for power supply</span>''')</p></li>
<li><p>The red DuPont line needs to be plugged into the 5V pin of the &gt; development board 40pin</p></li>
+
<li><p>The red DuPont line needs to be plugged into the 5V pin of the development board 40pin</p></li>
<li><p>The black DuPont wire needs to be plugged into the GND pin of &gt; the 40pin interface</p></li>
+
<li><p>The black DuPont wire needs to be plugged into the GND pin of the 40pin interface</p></li>
<li><p>The position of the 40Pin interface 5V pin and GND pin in the &gt; development board is shown in the figure below, '''Remember not &gt; to reverse'''</p>
+
<li><p>The position of the 40Pin interface 5V pin and GND pin in the development board is shown in the figure below, '''<span style="color:#FF0000">Remember not to reverse</span>'''</p>
<p>[[File:media/image171.png|414x91px]]</p></li></ol>
+
<p>[[File:cm4-img171.png]]</p></li></ol>
 
</li></ol>
 
</li></ol>
  
 
<span id="ubuntudebian-server-and-xfce-desktop-system-instructions"></span>
 
<span id="ubuntudebian-server-and-xfce-desktop-system-instructions"></span>
= Ubuntu/Debian Server and Xfce desktop system instructions =
 
  
'''The content of this chapter is written based on the Linux server version image and the xfce desktop version image.'''
+
= '''Ubuntu/Debian Server and Xfce desktop system instructions''' =
 +
 
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''The content of this chapter is written based on the Linux server version image and the xfce desktop version image.'''</big>
 +
|}
  
 
<span id="supported-linux-image-types-and-kernel-versions"></span>
 
<span id="supported-linux-image-types-and-kernel-versions"></span>
 
== Supported Linux image types and kernel versions ==
 
== Supported Linux image types and kernel versions ==
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"  
 
|-
 
|-
| style="text-align: left;"| '''Linux image type'''
+
| '''Linux image type'''
| style="text-align: left;"| '''Kernel version'''
+
| '''Kernel version'''
| style="text-align: left;"| '''server version'''
+
| '''server version'''
| style="text-align: left;"| '''desktop version'''
+
| '''desktop version'''
 
|-
 
|-
| style="text-align: left;"| '''Debian 11 - Bullseye'''
+
| '''Debian 11 - Bullseye'''
| style="text-align: left;"| '''Linux5.10'''
+
| '''Linux5.10'''
| style="text-align: left;"| '''support'''
+
| '''support'''
| style="text-align: left;"| '''support'''
+
| '''support'''
 
|-
 
|-
| style="text-align: left;"| '''Debian12 - Bookworm'''
+
| '''Debian12 - Bookworm'''
| style="text-align: left;"| '''Linux5.10'''
+
| '''Linux5.10'''
| style="text-align: left;"| '''support'''
+
| '''support'''
| style="text-align: left;"| '''support'''
+
| '''support'''
 
|-
 
|-
| style="text-align: left;"| '''Ubuntu 20.04 - Focal'''
+
| '''Ubuntu 20.04 - Focal'''
| style="text-align: left;"| '''Linux5.10'''
+
| '''Linux5.10'''
| style="text-align: left;"| '''support'''
+
| '''support'''
| style="text-align: left;"| '''support'''
+
| '''support'''
 
|-
 
|-
| style="text-align: left;"| '''Ubuntu 22.04 - Jammy'''
+
| '''Ubuntu 22.04 - Jammy'''
| style="text-align: left;"| '''Linux5.10'''
+
| '''Linux5.10'''
| style="text-align: left;"| '''support'''
+
| '''support'''
| style="text-align: left;"| '''support'''
+
| '''support'''
 
|}
 
|}
  
Line 1,853: Line 2,199:
 
== Linux system adaptation situation ==
 
== Linux system adaptation situation ==
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"  
 
|-
 
|-
| style="text-align: left;"| '''Function'''
+
| '''Function'''
| style="text-align: left;"| '''Debian11'''
+
| '''Debian11'''
| style="text-align: left;"| '''Debian12'''
+
| '''Debian12'''
| style="text-align: left;"| '''Ubuntu20.04'''
+
| '''Ubuntu20.04'''
| style="text-align: left;"| '''Ubuntu22.04'''
+
| '''Ubuntu22.04'''
 
|-
 
|-
| style="text-align: left;"| '''USB2.0x3'''
+
| '''USB2.0x3'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''USB3.0x1'''
+
| '''USB3.0x1'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''M.2 NVMe SSD Boot'''
+
| '''M.2 NVMe SSD Boot'''
| style="text-align: left;"| '''OK, you need to attach SPI Flash to it for normal use.'''
+
| colspan=4 | '''<span style="color:#FF0000">OK, you need to attach SPI Flash to it for normal use.</span>'''
| style="text-align: left;"|
 
| style="text-align: left;"|
 
| style="text-align: left;"|
 
 
|-
 
|-
| style="text-align: left;"| '''WIFI'''
+
| '''WIFI'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Bluetooth'''
+
| '''Bluetooth'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''GPIO(40pin)'''
+
| '''GPIO(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''UART(40pin)'''
+
| '''UART(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''SPI(40pin)'''
+
| '''SPI(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''I2C(40pin)'''
+
| '''I2C(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''PWM(40pin)'''
+
| '''PWM(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''PWM fan interface'''
+
| '''PWM fan interface'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''3pin debugging serial port'''
+
| '''3pin debugging serial port'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''EMMC'''
+
| '''EMMC'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''TF card startup'''
+
| '''TF card startup'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''HDMI video'''
+
| '''HDMI video'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''HDMI audio'''
+
| '''HDMI audio'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''OV5647 camera'''
+
| '''OV5647 camera'''
| style="text-align: left;"| '''Kernel driver is OK, 3A is not adjusted'''
+
| colspan=4 | '''<span style="color:#FF0000">Kernel driver is OK, 3A is not adjusted</span>'''
| style="text-align: left;"|
 
| style="text-align: left;"|
 
| style="text-align: left;"|
 
 
|-
 
|-
| style="text-align: left;"| '''LCD'''
+
| '''LCD'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''eDP display'''
+
| '''eDP display'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Gigabit Ethernet port'''
+
| '''Gigabit Ethernet port'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Network port status light'''
+
| '''Network port status light'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Headphone playback'''
+
| '''Headphone playback'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''headphone recording'''
+
| '''headphone recording'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''LED light'''
+
| '''LED light'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''GPU'''
+
| '''GPU'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''NPU'''
+
| '''NPU'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''VPU'''
+
| '''VPU'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''watchdog test'''
+
| '''watchdog test'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Chromium hard decryption video'''
+
| '''Chromium hard decryption video'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|}
 
|}
  
Line 2,041: Line 2,381:
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>All commands that need to be entered in the Linux system in this manual will be enclosed in the following boxes</p>
 
<li><p>All commands that need to be entered in the Linux system in this manual will be enclosed in the following boxes</p>
<p>As shown below, the content in the yellow box indicates the content that needs special attention, except for the commands in it</p></li>
+
{| class="wikitable" style="width:800px;height:40px"
 +
|-
 +
|
 +
 
 +
|}
 +
<p>As shown below, the content in the yellow box indicates the content that needs special attention, except for the commands in it</p>
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;height:40px"
 +
|-
 +
|
 +
 
 +
|}
 +
</li>
 
<li><p>Description of the prompt type in front of the command</p>
 
<li><p>Description of the prompt type in front of the command</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>The prompt in front of the command refers to the content of the &gt; red part in the box below. This part of the content is not &gt; part of the Linux command, so when entering the command in the &gt; Linux system, please do not enter the content of the red font &gt; part.</p>
+
<li><p>The prompt in front of the command refers to the content of the red part in the box below. This part of the content is not part of the Linux command, so when entering the command in the Linux system, please do not enter the content of the red font part.</p>
<p>'''orangepi@orangepi:~$ sudo apt update'''</p>
+
{| class="wikitable" style="width:800px;"
<p>'''root@orangepi:~#''' '''vim /boot/boot.cmd'''</p>
+
|-
<p>'''test@test:~$ ssh [mailto:root@192.168.1.36 root@192.168.1.]xxx'''</p>
+
|
<p>'''root@test:~# ls'''</p></li>
+
<p>'''<span style="color:#FF0000">orangepi@orangepi:~$</span> sudo apt update'''</p>
<li><p>'''root@orangepi:~$''' The prompt indicates that this command is &gt; entered in the Linux system of the development board. The &gt; '''$''' at the end of the prompt indicates that the current &gt; user of the system is an ordinary user. When executing a &gt; privileged command, '''sudo''' needs to be added.</p></li>
+
<p>'''<span style="color:#FF0000">root@orangepi:~#</span>''' '''vim /boot/boot.cmd'''</p>
<li><p>'''root@orangepi:~#''' The prompt indicates that this command is &gt; entered in the '''Linux system of the development board''', and &gt; the '''#''' at the end of the prompt indicates that the current &gt; user of the system is the root user, who can execute any &gt; desired command</p></li>
+
<p>'''<span style="color:#FF0000">test@test:~$</span> ssh [mailto:root@192.168.1.36 root@192.168.1.]xxx'''</p>
<li><p>'''test@test:~$''' The prompt indicates that the command was &gt; entered in the Ubuntu PC or Ubuntu virtual machine, not the &gt; Linux system of the development board. The '''$''' at the end &gt; of the prompt indicates that the current user of the system is &gt; an ordinary user. When executing privileged commands, '''sudo''' &gt; needs to be added.</p></li>
+
<p>'''<span style="color:#FF0000">root@test:~#</span> ls'''</p>
<li><p>'''root@test:~#''' The prompt indicates that the command was &gt; entered in the Ubuntu PC or Ubuntu virtual machine, not the &gt; Linux system of the development board. The '''#''' at the end &gt; of the prompt indicates that the current user of the system is &gt; the root user and can execute any command you want to execute.</p></li></ol>
+
|}
 +
</li>
 +
<li><p>'''<span style="color:#FF0000">root@orangepi:~$</span>''' The prompt indicates that this command is entered in the Linux system of the development board. The '''<span style="color:#FF0000">$</span>''' at the end of the prompt indicates that the current user of the system is an ordinary user. When executing a privileged command, '''sudo''' needs to be added.</p></li>
 +
<li><p>'''<span style="color:#FF0000">root@orangepi:~#</span>''' The prompt indicates that this command is entered in the '''Linux system of the development board''', and the '''<span style="color:#FF0000">#</span>''' at the end of the prompt indicates that the current user of the system is the root user, who can execute any desired command</p></li>
 +
<li><p>'''<span style="color:#FF0000">test@test:~$</span>''' The prompt indicates that the command was entered in the Ubuntu PC or Ubuntu virtual machine, not the Linux system of the development board. The '''<span style="color:#FF0000">$</span>''' at the end of the prompt indicates that the current user of the system is an ordinary user. When executing privileged commands, '''sudo''' needs to be added.</p></li>
 +
<li><p>'''<span style="color:#FF0000">root@test:~#</span>''' The prompt indicates that the command was entered in the Ubuntu PC or Ubuntu virtual machine, not the Linux system of the development board. The '''<span style="color:#FF0000">#</span>''' at the end of the prompt indicates that the current user of the system is the root user and can execute any command you want to execute.</p></li></ol>
 
</li>
 
</li>
 
<li><p>What are the commands that need to be entered?</p>
 
<li><p>What are the commands that need to be entered?</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>As shown below, '''the bold black part''' is the command that &gt; needs to be input. The content below the command is the output &gt; content (some commands have output, and some may not output). &gt; This part of the content does not need to be input</p>
+
<li><p>As shown below, '''the bold black part''' is the command that needs to be input. The content below the command is the output content (some commands have output, and some may not output). This part of the content does not need to be input</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>root@orangepi:~# '''cat /boot/orangepiEnv.txt'''</p>
 
<p>root@orangepi:~# '''cat /boot/orangepiEnv.txt'''</p>
<p>'''verbosity=7'''</p>
+
<p>'''<span style="color:#FF0000">verbosity=7</span>'''</p>
 
<p>bootlogo=false</p>
 
<p>bootlogo=false</p>
<p>'''console=serial'''</p></li>
+
<p>'''<span style="color:#FF0000">console=serial</span>'''</p>
<li><p>As shown below, some commands cannot be written in one line and &gt; will be placed on the next line. As long as the black and bold &gt; parts are all commands that need to be input. When these &gt; commands are entered into one line, the last &quot;\&quot; of each &gt; line needs to be removed, this is not part of the command. In &gt; addition, there are spaces in different parts of the command, &gt; please don’t miss it</p>
+
|}
 +
</li>
 +
<li><p>As shown below, some commands cannot be written in one line and will be placed on the next line. As long as the black and bold parts are all commands that need to be input. When these commands are entered into one line, the last &quot;\&quot; of each line needs to be removed, this is not part of the command. In addition, there are spaces in different parts of the command, please don't miss it</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''echo \'''</p>
 
<p>orangepi@orangepi:~$ '''echo \'''</p>
 
<p>'''&quot;deb [arch=$(dpkg --print-architecture) \'''</p>
 
<p>'''&quot;deb [arch=$(dpkg --print-architecture) \'''</p>
 
<p>'''signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \'''</p>
 
<p>'''signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \'''</p>
 
<p>'''https://download.docker.com/linux/debian \'''</p>
 
<p>'''https://download.docker.com/linux/debian \'''</p>
<p>'''$(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null'''</p></li></ol>
+
<p>'''$(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null'''</p>
 +
|}
 +
</li></ol>
 
</li></ol>
 
</li></ol>
  
 
<span id="linux-system-login-instructions"></span>
 
<span id="linux-system-login-instructions"></span>
 +
 
== Linux system login instructions ==
 
== Linux system login instructions ==
  
Line 2,075: Line 2,442:
 
=== Linux system default login account and password ===
 
=== Linux system default login account and password ===
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"
 
|-
 
|-
| style="text-align: left;"| '''account'''
+
| '''account'''
| style="text-align: left;"| '''password'''
+
| '''password'''
 
|-
 
|-
| style="text-align: left;"| '''root'''
+
| '''root'''
| style="text-align: left;"| '''orangepi'''
+
| '''orangepi'''
 
|-
 
|-
| style="text-align: left;"| '''orangepi'''
+
| '''orangepi'''
| style="text-align: left;"| '''orangepi'''
+
| '''orangepi'''
 
|}
 
|}
  
'''Note that when entering a password, <span class="mark">the specific content of the entered password will not be displayed on the screen</span>. Please do not think that there is something wrong. Just press Enter after entering it.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that when entering a password, <span style="color:#FF0000">the specific content of the entered password will not be displayed on the screen</span>. Please do not think that there is something wrong. Just press Enter after entering it.'''</big>
 +
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''When you are prompted for an incorrect password or there is a problem with the ssh connection, please note that as long as you are using the Linux image provided by Orange Pi, <span style="color:#FF0000">please do not suspect that the above password is incorrect, but look for other reasons.</span>'''</big>
 +
|}
  
'''When you are prompted for an incorrect password or there is a problem with the ssh connection, please note that as long as you are using the Linux image provided by Orange Pi, please do not suspect that the above password is incorrect, but look for other reasons..'''
+
<span id="how-to-set-up-automatic-login-of-linux-system-terminal"></span>
  
<span id="how-to-set-up-automatic-login-of-linux-system-terminal"></span>
 
 
=== How to set up automatic login of Linux system terminal ===
 
=== How to set up automatic login of Linux system terminal ===
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
<li><p>The Linux system automatically logs in to the terminal by default. The default login user name is '''orangepi'''.</p>
+
<li><p>The Linux system automatically logs in to the terminal by default. The default login user name is '''<span style="color:#FF0000">orangepi</span>'''.</p>
<p>[[File:media/image172.png|286x220px]]</p></li>
+
<p>[[File:cm4-img172.png]]</p></li>
 
<li><p>Use the following command to set the root user to automatically log in to the terminal</p>
 
<li><p>Use the following command to set the root user to automatically log in to the terminal</p>
<p>orangepi@orangepi:~$ '''sudo auto_login_cli.sh root'''</p></li>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''sudo auto_login_cli.sh root'''</p>
 +
|}
 +
</li>
 
<li><p>Use the following command to disable automatic login to the terminal</p>
 
<li><p>Use the following command to disable automatic login to the terminal</p>
<p>orangepi@orangepi:~$ '''sudo auto_login_cli.sh -d'''</p></li>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''sudo auto_login_cli.sh -d'''</p>
 +
|}
 +
</li>
 
<li><p>Use the following command to set the orangepi user to automatically log in to the terminal again</p>
 
<li><p>Use the following command to set the orangepi user to automatically log in to the terminal again</p>
<p>orangepi@orangepi:~$ '''sudo auto_login_cli.sh orangepi'''</p></li></ol>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''sudo auto_login_cli.sh orangepi'''</p>
 +
|}
 +
</li></ol>
  
 
<span id="instructions-for-automatic-login-of-the-linux-desktop-version-system"></span>
 
<span id="instructions-for-automatic-login-of-the-linux-desktop-version-system"></span>
 +
 
=== Instructions for automatic login of the Linux desktop version system ===
 
=== Instructions for automatic login of the Linux desktop version system ===
  
Line 2,111: Line 2,502:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image173.png|576x324px|1]]
+
[[File:cm4-img173.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Run the following command to prevent the desktop system from automatically logging into the desktop</p>
 
<li><p>Run the following command to prevent the desktop system from automatically logging into the desktop</p>
<p>orangepi@orangepi:~$ '''sudo disable_desktop_autologin.sh'''</p></li>
+
{| class="wikitable" style="width:800px;"
<li><p>Then restart the system and a login dialog box will appear. At this time, you need to enter a [[\l|'''password''']] to enter the system</p>
+
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''sudo disable_desktop_autologin.sh'''</p>
 +
|}
 +
</li>
 +
<li><p>Then restart the system and a login dialog box will appear. At this time, you need to enter a [[Orange Pi CM4#Linux system default login account and password|'''password''']] to enter the system</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image174.png|569x320px|IMG_256]]
+
[[File:cm4-img174.png]]
  
 
</div></li></ol>
 
</div></li></ol>
  
 
<span id="the-setting-method-of-root-user-automatic-login-in-linux-desktop-version-system"></span>
 
<span id="the-setting-method-of-root-user-automatic-login-in-linux-desktop-version-system"></span>
 +
 
=== The setting method of root user automatic login in Linux desktop version system ===
 
=== The setting method of root user automatic login in Linux desktop version system ===
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>Execute the following command to set the desktop version of the system to automatically log in using the root user</p>
 
<li><p>Execute the following command to set the desktop version of the system to automatically log in using the root user</p>
<p>orangepi@orangepi:~$ '''sudo desktop_login.sh root'''</p></li>
+
{| class="wikitable" style="width:800px;"
<li><p>Then restart the system, it will automatically use the root user to log in to the desktop</p>
+
|-
<p>[[File:media/image175.png|448x187px]]</p>
+
|
<p>'''Note that if you use the root user to log in to the desktop system, you cannot use pulseaudio in the upper right corner to manage audio devices.'''</p>
+
<p>orangepi@orangepi:~$ '''sudo desktop_login.sh root'''</p>
<p>'''Also note that this is not a bug, since pulseaudio is not allowed to run as root.'''</p></li>
+
|}
 +
</li>
 +
<li><p>Then restart the system, it will automatically use the root user to log in to the desktop</p>
 +
<p>[[File:cm4-img175.png]]</p>
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''Note that if you use the root user to log in to the desktop system, you cannot use pulseaudio in the upper right corner to manage audio devices.'''</p>
 +
<p>'''Also note that this is not a bug, since pulseaudio is not allowed to run as root.'''</p></big>
 +
|}
 +
</li>
 
<li><p>Execute the following command to set up the desktop version of the system again to use orangepi user to automatically log in</p>
 
<li><p>Execute the following command to set up the desktop version of the system again to use orangepi user to automatically log in</p>
<p>orangepi@orangepi:~$ '''sudo desktop_login.sh orangepi'''</p></li></ol>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''sudo desktop_login.sh orangepi'''</p>
 +
|}
 +
</li></ol>
  
 
<span id="how-to-disable-the-desktop-in-linux-desktop-system"></span>
 
<span id="how-to-disable-the-desktop-in-linux-desktop-system"></span>
 +
 
=== How to disable the desktop in Linux desktop system ===
 
=== How to disable the desktop in Linux desktop system ===
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
<li><p>First enter the following command in the command line, '''please remember to add sudo permission'''</p>
+
<li><p>First enter the following command in the command line, '''<span style="color:#FF0000">please remember to add sudo permission</span>'''</p>
<p>orangepi@orangepi:~$ '''sudo systemctl disable lightdm.service'''</p></li>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''sudo systemctl disable lightdm.service'''</p>
 +
|}
 +
</li>
 
<li><p>Then restart the Linux system and you will find that the desktop will not be displayed.</p>
 
<li><p>Then restart the Linux system and you will find that the desktop will not be displayed.</p>
 
<p>orangepi@orangepi:~$ '''sudo reboot'''</p></li>
 
<p>orangepi@orangepi:~$ '''sudo reboot'''</p></li>
 
<li><p>The steps to reopen the desktop are as follows:</p>
 
<li><p>The steps to reopen the desktop are as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>First enter the following command in the command line, '''please &gt; remember to add sudo permission'''</p>
+
<li><p>First enter the following command in the command line, '''<span style="color:#FF0000">please remember to add sudo permission</span>'''</p>
<p>orangepi@orangepi:~$ '''sudo systemctl start lightdm.service'''</p></li>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''sudo systemctl start lightdm.service'''</p>
 +
|}
 +
</li>
 
<li><p>After the command is executed, the desktop will be displayed</p></li></ol>
 
<li><p>After the command is executed, the desktop will be displayed</p></li></ol>
 
</li></ol>
 
</li></ol>
  
 
<span id="onboard-led-light-test-instructions"></span>
 
<span id="onboard-led-light-test-instructions"></span>
 +
 
== Onboard LED light test instructions ==
 
== Onboard LED light test instructions ==
  
Line 2,158: Line 2,582:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image176.png|575x161px|Onboard LED light test]]
+
[[File:cm4-img176.png]]
  
 
</div></li>
 
</div></li>
<li><p>'''As long as the development board is powered on, the red LED light will always be on, which is controlled by the hardware and cannot be turned off by the software'''</p></li>
+
<li><p>'''<span style="color:#FF0000">As long as the development board is powered on, the red LED light will always be on, which is controlled by the hardware and cannot be turned off by the software</span>'''</p></li>
 
<li><p>The green LED light will keep flashing after the kernel is started, which is controlled by software</p></li>
 
<li><p>The green LED light will keep flashing after the kernel is started, which is controlled by software</p></li>
 
<li><p>The PCIe indicator light will flash when there is data transmission on the PCIe interface.</p></li>
 
<li><p>The PCIe indicator light will flash when there is data transmission on the PCIe interface.</p></li>
 
<li><p>The method of setting the green light to turn on and off and flash is as follows</p>
 
<li><p>The method of setting the green light to turn on and off and flash is as follows</p>
<p>'''Note that the following operations should be performed under the root user'''</p>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''Note that the following operations should be performed under the root user'''</p></big>
 +
|}
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>First enter the setting directory of the green light</p>
 
<li><p>First enter the setting directory of the green light</p>
<p>root@orangepi:~# '''cd /sys/class/leds/status_led'''</p></li>
+
{| class="wikitable" style="width:800px;"
<li><p>The command to set the green light to stop flashing is as &gt; follows:</p>
+
|-
<p>root@orangepi:/sys/class/leds/status_led# '''echo none &gt; trigger'''</p></li>
+
|
<li><p>The command to set the green light to be always on is as &gt; follows:</p>
+
<p>root@orangepi:~# '''cd /sys/class/leds/status_led'''</p>
<p>root@orangepi:/sys/class/leds/status_led# '''echo default-on &gt; trigger'''</p></li>
+
|}
 +
</li>
 +
<li><p>The command to set the green light to stop flashing is as follows:</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>root@orangepi:/sys/class/leds/status_led# '''echo none trigger'''</p>
 +
|}
 +
</li>
 +
<li><p>The command to set the green light to be always on is as follows:</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>root@orangepi:/sys/class/leds/status_led# '''echo default-on trigger'''</p>
 +
|}
 +
</li>
 
<li><p>The command to set the green light flashing is as follows:</p>
 
<li><p>The command to set the green light flashing is as follows:</p>
<p>root@orangepi:/sys/class/leds/status_led# '''echo heartbeat &gt; trigger'''</p></li></ol>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>root@orangepi:/sys/class/leds/status_led# '''echo heartbeat trigger'''</p>
 +
|}
 +
</li></ol>
 
</li></ol>
 
</li></ol>
  
 
<span id="network-connection-test"></span>
 
<span id="network-connection-test"></span>
 +
 
== Network connection test ==
 
== Network connection test ==
  
Line 2,185: Line 2,634:
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First, plug one end of the network cable into the Ethernet interface of the development board, and the other end of the network cable into the router, and make sure the network is open.</p></li>
 
<li><p>First, plug one end of the network cable into the Ethernet interface of the development board, and the other end of the network cable into the router, and make sure the network is open.</p></li>
<li><p>After the system starts, it will automatically assign an IP address to the Ethernet card through '''DHCP'''., '''No other configuration is required'''</p></li>
+
<li><p>After the system starts, it will automatically assign an IP address to the Ethernet card through '''DHCP''', '''<span style="color:#FF0000">No other configuration is required</span>'''</p></li>
 
<li><p>The command to view the IP address in the Linux system of the development board is as follows</p>
 
<li><p>The command to view the IP address in the Linux system of the development board is as follows</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''ip addr show eth0'''</p>
 
<p>orangepi@orangepi:~$ '''ip addr show eth0'''</p>
 
<p>2: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc mq state UP group default qlen 1000</p>
 
<p>2: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc mq state UP group default qlen 1000</p>
<p>link/ether 4a:fe:2b:3d:17:1c brd ff:ff:ff:ff:ff:ff</p>
+
:<p>link/ether 4a:fe:2b:3d:17:1c brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.150'''/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0</p>
+
:<p>inet '''<span style="color:#FF0000">192.168.1.150</span>'''/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0</p>
<p>valid_lft 43150sec preferred_lft 43150sec</p>
+
::<p>valid_lft 43150sec preferred_lft 43150sec</p>
<p>inet6 fe80::9a04:3703:faed:23be/64 scope link noprefixroute</p>
+
:<p>inet6 fe80::9a04:3703:faed:23be/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p>
+
::<p>valid_lft forever preferred_lft forever</p>
<p>'''When using ifconfig to check the IP address, if the following information is prompted, it is caused by not adding sudo. The correct command is:sudo ifconfig'''</p>
+
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''When using ifconfig to check the IP address, if the following information is prompted, it is caused by not adding sudo. The correct command is: sudo ifconfig'''</p></big>
 +
 
 +
 
 
<p>orangepi@orangepi:~$ '''ifconfig'''</p>
 
<p>orangepi@orangepi:~$ '''ifconfig'''</p>
 
<p>Command 'ifconfig' is available in the following places</p>
 
<p>Command 'ifconfig' is available in the following places</p>
Line 2,201: Line 2,659:
 
<p>The command could not be located because '/sbin:/usr/sbin' is not included in the PATH environment variable.</p>
 
<p>The command could not be located because '/sbin:/usr/sbin' is not included in the PATH environment variable.</p>
 
<p>This is most likely caused by the lack of administrative privileges associated with your user account.</p>
 
<p>This is most likely caused by the lack of administrative privileges associated with your user account.</p>
<p>ifconfig: command not found</p></li></ol>
+
<p>ifconfig: command not found</p>
 +
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''There are three ways to check the IP address after the development board is started.:'''
 +
 
 +
1. '''Connect the HDMI display, then log in to the system and use the ip addr show eth0 command to view the IP address.'''
  
'''There are three ways to check the IP address after the development board is started.:'''
+
2. '''Enter the ip addr show eth0 command in the debugging serial terminal to view the IP address.'''
  
# '''Connect the HDMI display, then log in to the system and use the ip addr show eth0 command to view the IP address.'''
+
3. '''If there is no debugging serial port and no HDMI display, you can also check the IP address of the development board network port through the management interface of the router. However, in this method, some people often cannot see the IP address of the development board normally. If you can't see it, the debugging method is as follows:'''
# '''Enter the ip addr show eth0 command in the debugging serial terminal to view the IP address.'''
 
# '''If there is no debugging serial port and no HDMI display, you can also check the IP address of the development board network port through the management interface of the router. However, in this method, some people often cannot see the IP address of the development board normally. If you can't see it, the debugging method is as follows:'''
 
  
<!-- -->
 
 
<ol style="list-style-type: upper-alpha;">
 
<ol style="list-style-type: upper-alpha;">
 
<li><p>'''First, check whether the Linux system has started normally. If the green light of the development board is flashing, it usually means that it has started normally. If only the red light is on, it means that the system has not started normally.;'''</p></li>
 
<li><p>'''First, check whether the Linux system has started normally. If the green light of the development board is flashing, it usually means that it has started normally. If only the red light is on, it means that the system has not started normally.;'''</p></li>
 
<li><p>'''Check whether the network cable is plugged in tightly, or try another network cable;'''</p></li>
 
<li><p>'''Check whether the network cable is plugged in tightly, or try another network cable;'''</p></li>
 
<li><p>'''Try another router (I have encountered many problems with routers, such as the router being unable to assign an IP address normally, or the IP address being assigned normally but not visible in the router);'''</p></li>
 
<li><p>'''Try another router (I have encountered many problems with routers, such as the router being unable to assign an IP address normally, or the IP address being assigned normally but not visible in the router);'''</p></li>
<li><p>'''If there is no router to replace, you can only connect an HDMI display or use the debugging serial port to check the IP address.'''</p>
+
<li><p>'''If there is no router to replace, you can only connect an HDMI display or use the debugging serial port to check the IP address.'''</p></li></ol>
<p>'''In addition, it should be noted that the development board's DHCP automatic allocation of IP addresses does not require any settings.'''</p></li></ol>
+
 
 +
 
 +
<p>'''In addition, it should be noted that the development board's DHCP automatic allocation of IP addresses does not require any settings.'''</p></big>
 +
|}
 +
</li></ol>
  
 
<!-- -->
 
<!-- -->
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
 
<li><p>The command to test the network connectivity is as follows, the '''ping''' command can be interrupted through the shortcut key of '''Ctrl+C'''</p>
 
<li><p>The command to test the network connectivity is as follows, the '''ping''' command can be interrupted through the shortcut key of '''Ctrl+C'''</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''ping www.baidu.com -I eth0'''</p>
 
<p>orangepi@orangepi:~$ '''ping www.baidu.com -I eth0'''</p>
 
<p>PING www.a.shifen.com (14.215.177.38) from 192.168.1.12 eth0: 56(84) bytes of data.</p>
 
<p>PING www.a.shifen.com (14.215.177.38) from 192.168.1.12 eth0: 56(84) bytes of data.</p>
Line 2,229: Line 2,698:
 
<p>--- www.a.shifen.com ping statistics ---</p>
 
<p>--- www.a.shifen.com ping statistics ---</p>
 
<p>4 packets transmitted, 4 received, 0% packet loss, time 3002ms</p>
 
<p>4 packets transmitted, 4 received, 0% packet loss, time 3002ms</p>
<p>rtt min/avg/max/mdev = 6.260/6.770/7.275/0.373 ms</p></li></ol>
+
<p>rtt min/avg/max/mdev = 6.260/6.770/7.275/0.373 ms</p>
 +
|}
 +
</li></ol>
  
 
<span id="wifi-connection-test"></span>
 
<span id="wifi-connection-test"></span>
 +
 
=== WIFI connection test ===
 
=== WIFI connection test ===
  
'''Please do not connect to WIFI by modifying the /etc/network/interfaces configuration file. There will be problems in connecting to the WIFI network in this way.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Please do not connect to WIFI by modifying the /etc/network/interfaces configuration file. There will be problems in connecting to the WIFI network in this way.'''</big>
 +
|}
  
 
<span id="the-server-image-connects-to-wifi-through-commands"></span>
 
<span id="the-server-image-connects-to-wifi-through-commands"></span>
 
==== The server image connects to WIFI through commands ====
 
==== The server image connects to WIFI through commands ====
  
'''When the development board is not connected to Ethernet, not connected to HDMI display, but only connected to the serial port, it is recommended to use the commands demonstrated in this section to connect to the WIFI network. Because nmtui can only display characters in some serial port software (such as minicom) and cannot display the graphical interface normally. Of course, if the development board is connected to an Ethernet or HDMI display, you can also use the commands demonstrated in this section to connect to the WIFI network.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''When the development board is not connected to Ethernet, not connected to HDMI display, but only connected to the serial port, it is recommended to use the commands demonstrated in this section to connect to the WIFI network. Because nmtui can only display characters in some serial port software (such as minicom) and cannot display the graphical interface normally. Of course, if the development board is connected to an Ethernet or HDMI display, you can also use the commands demonstrated in this section to connect to the WIFI network.'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First log in to the Linux system, there are three ways:</p>
 
<li><p>First log in to the Linux system, there are three ways:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>If the development board is connected with a network cable, you &gt; can [[\l|'''remotely log in to the Linux system through ssh''']]</li></ol>
+
<li>If the development board is connected with a network cable, you can [[Orange Pi CM4#SSH remote login development board|'''remotely log in to the Linux system through ssh''']]</li></ol>
  
<!-- -->
+
<ol start="2" style="list-style-type: lower-alpha;">
<ol style="list-style-type: lower-alpha;">
+
<li><p>If the development board is connected to the debugging serial port, you can use the serial port terminal to log in to the Linux system</p></li>
<li><p>If the development board is connected to the debugging serial &gt; port, you can use the serial port terminal to log in to the &gt; Linux system</p></li>
+
<li><p>If the development board is connected to the HDMI display, you can log in to the Linux system through the terminal displayed on the HDMI</p></li></ol>
<li><p>If the development board is connected to the HDMI display, you &gt; can log in to the Linux system through the terminal displayed &gt; on the HDMI</p></li></ol>
 
 
</li></ol>
 
</li></ol>
  
<!-- -->
+
<ol start="2" style="list-style-type: decimal;">
<ol style="list-style-type: decimal;">
 
 
<li><p>First use the '''nmcli dev wifi''' command to scan the surrounding WIFI hotspots</p>
 
<li><p>First use the '''nmcli dev wifi''' command to scan the surrounding WIFI hotspots</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''nmcli dev wifi'''</p>
 
<p>orangepi@orangepi:~$ '''nmcli dev wifi'''</p>
 +
|}
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image177.png|575x250px|选区_011]]
+
[[File:cm4-img177.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then use the '''nmcli''' command to connect to the scanned WIFI hotspot,</p>
 
<li><p>Then use the '''nmcli''' command to connect to the scanned WIFI hotspot,</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>'''wifi_name''' needs to be replaced with the name of the WIFI &gt; hotspot you want to connect to</p></li>
+
<li><p>'''wifi_name''' needs to be replaced with the name of the WIFI hotspot you want to connect to</p></li>
<li><p>'''wifi_passwd''' needs to be replaced with the password of the &gt; WIFI hotspot you want to connect to</p>
+
<li><p>'''wifi_passwd''' needs to be replaced with the password of the WIFI hotspot you want to connect to</p>
<p>orangepi@orangepi:~$ '''nmcli dev wifi connect wifi_name password wifi_passwd'''</p>
+
{| class="wikitable" style="width:800px;"
<p>Device 'wlan0' successfully activated with 'cf937f88-ca1e-4411-bb50-61f402eef293'.</p></li></ol>
+
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''nmcli dev wifi connect <span style="color:#FF0000">wifi_name</span> password <span style="color:#FF0000">wifi_passwd</span>'''</p>
 +
<p>Device 'wlan0' successfully activated with 'cf937f88-ca1e-4411-bb50-61f402eef293'.</p>
 +
|}
 +
</li></ol>
 
</li>
 
</li>
<li><p>You can check the IP address of the wifi through the'''ip addr show wlan0''' command</p>
+
<li><p>You can check the IP address of the wifi through the '''ip addr show wlan0''' command</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''ip addr show wlan0'''</p>
 
<p>orangepi@orangepi:~$ '''ip addr show wlan0'''</p>
 
<p>11: wlan0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
 
<p>11: wlan0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
<p>link/ether 23:8c:d6:ae:76:bb brd ff:ff:ff:ff:ff:ff</p>
+
:<p>link/ether 23:8c:d6:ae:76:bb brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.11'''/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0</p>
+
:<p>inet '''<span style="color:#FF0000">192.168.1.11</span>'''/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0</p>
<p>valid_lft 259192sec preferred_lft 259192sec</p>
+
::<p>valid_lft 259192sec preferred_lft 259192sec</p>
<p>inet6 240e:3b7:3240:c3a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute</p>
+
:<p>inet6 240e:3b7:3240:c3a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute</p>
<p>valid_lft 259192sec preferred_lft 172792sec</p>
+
::<p>valid_lft 259192sec preferred_lft 172792sec</p>
<p>inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute</p>
+
:<p>inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li>
+
::<p>valid_lft forever preferred_lft forever</p>
 +
|}
 +
</li>
 
<li><p>Use the '''ping''' command to test the connectivity of the wifi network, and the '''ping''' command can be interrupted through the shortcut key '''Ctrl+C'''</p>
 
<li><p>Use the '''ping''' command to test the connectivity of the wifi network, and the '''ping''' command can be interrupted through the shortcut key '''Ctrl+C'''</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''ping www.orangepi.org -I wlan0'''</p>
 
<p>orangepi@orangepi:~$ '''ping www.orangepi.org -I wlan0'''</p>
 
<p>PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.</p>
 
<p>PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.</p>
Line 2,289: Line 2,784:
 
<p>--- www.orangepi.org ping statistics ---</p>
 
<p>--- www.orangepi.org ping statistics ---</p>
 
<p>5 packets transmitted, 5 received, 0% packet loss, time 4006ms</p>
 
<p>5 packets transmitted, 5 received, 0% packet loss, time 4006ms</p>
<p>rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms</p></li></ol>
+
<p>rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms</p>
 +
|}
 +
</li></ol>
  
 
<span id="server-version-image-connects-to-wifi-graphically"></span>
 
<span id="server-version-image-connects-to-wifi-graphically"></span>
 +
 
==== Server version image connects to WIFI graphically ====
 
==== Server version image connects to WIFI graphically ====
  
Line 2,297: Line 2,795:
 
<li><p>First log in to the Linux system, there are three ways:</p>
 
<li><p>First log in to the Linux system, there are three ways:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>If the development board is connected with a network cable, you &gt; can [[\l|'''remotely log in to the Linux system through ssh''']]</p></li>
+
<li><p>If the development board is connected with a network cable, you can [[Orange Pi CM4#SSH remote login development board|'''remotely log in to the Linux system through ssh''']]</p></li>
<li><p>If the development board is connected to the debugging serial &gt; port, you can use the serial port terminal to log in to the &gt; Linux system (please use MobaXterm for the serial port &gt; software, the graphical interface cannot be displayed using &gt; minicom)</p></li>
+
<li><p>If the development board is connected to the debugging serial port, you can use the serial port terminal to log in to the Linux system (please use MobaXterm for the serial port software, the graphical interface cannot be displayed using minicom)</p></li>
<li><p>If the development board is connected to the HDMI display, you &gt; can log in to the Linux system through the terminal displayed &gt; on the HDMI</p></li></ol>
+
<li><p>If the development board is connected to the HDMI display, you can log in to the Linux system through the terminal displayed on the HDMI</p></li></ol>
 
</li>
 
</li>
 
<li><p>Then enter the nmtui command in the command line to open the wifi connection interface</p>
 
<li><p>Then enter the nmtui command in the command line to open the wifi connection interface</p>
<p>orangepi@orangepi:~$ '''nmtui'''</p></li>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''nmtui'''</p>
 +
|}
 +
</li>
 
<li><p>Enter the nmtui command to open the interface as shown below</p>
 
<li><p>Enter the nmtui command to open the interface as shown below</p>
<p>[[File:media/image178.png|345x215px]]</p></li>
+
<p>[[File:cm4-img178.png]]</p></li>
 
<li><p>Select '''Activate a connect''' and press Enter</p>
 
<li><p>Select '''Activate a connect''' and press Enter</p>
<p>[[File:media/image179.png|349x216px]]</p></li>
+
<p>[[File:cm4-img179.png]]</p></li>
 
<li><p>Then you can see all the searched WIFI hotspots</p>
 
<li><p>Then you can see all the searched WIFI hotspots</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image180.jpeg|426x270px|16]]
+
[[File:cm4-img180.png]]
  
 
</div></li>
 
</div></li>
Line 2,316: Line 2,819:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image181.jpeg|474x298px|17]]
+
[[File:cm4-img181.png]]
  
 
</div></li>
 
</div></li>
Line 2,322: Line 2,825:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image182.jpeg|480x308px|18]]
+
[[File:cm4-img182.png]]
  
 
</div></li>
 
</div></li>
Line 2,328: Line 2,831:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image183.jpeg|443x283px|C:\Users\orangepi\Desktop\用户手册插图\Zero3\未标题-9.jpg未标题-9]]
+
[[File:cm4-img183.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>You can check the IP address of the wifi through the '''ip addr show wlan0''' command</p>
 
<li><p>You can check the IP address of the wifi through the '''ip addr show wlan0''' command</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''ip addr show wlan0'''</p>
 
<p>orangepi@orangepi:~$ '''ip addr show wlan0'''</p>
 
<p>11: wlan0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
 
<p>11: wlan0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
<p>link/ether 24:8c:d3:aa:76:bb brd ff:ff:ff:ff:ff:ff</p>
+
:<p>link/ether 24:8c:d3:aa:76:bb brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.11'''/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0</p>
+
:<p>inet '''<span style="color:#FF0000">192.168.1.11</span>'''/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0</p>
<p>valid_lft 259069sec preferred_lft 259069sec</p>
+
::<p>valid_lft 259069sec preferred_lft 259069sec</p>
<p>inet6 240e:3b7:3240:c4a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute</p>
+
:<p>inet6 240e:3b7:3240:c4a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute</p>
<p>valid_lft 259071sec preferred_lft 172671sec</p>
+
::<p>valid_lft 259071sec preferred_lft 172671sec</p>
<p>inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute</p>
+
:<p>inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li>
+
::<p>valid_lft forever preferred_lft forever</p>
 +
|}
 +
</li>
 
<li><p>Use the '''ping''' command to test the connectivity of the wifi network. The '''ping''' command can be interrupted by pressing the '''Ctrl+C''' shortcut key</p>
 
<li><p>Use the '''ping''' command to test the connectivity of the wifi network. The '''ping''' command can be interrupted by pressing the '''Ctrl+C''' shortcut key</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''ping www.orangepi.org -I wlan0'''</p>
 
<p>orangepi@orangepi:~$ '''ping www.orangepi.org -I wlan0'''</p>
 
<p>PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.</p>
 
<p>PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.</p>
Line 2,352: Line 2,863:
 
<p>--- www.orangepi.org ping statistics ---</p>
 
<p>--- www.orangepi.org ping statistics ---</p>
 
<p>5 packets transmitted, 5 received, 0% packet loss, time 4006ms</p>
 
<p>5 packets transmitted, 5 received, 0% packet loss, time 4006ms</p>
<p>rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms</p></li></ol>
+
<p>rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms</p>
 +
|}
 +
</li></ol>
  
 
<span id="test-method-of-desktop-image"></span>
 
<span id="test-method-of-desktop-image"></span>
 +
 
==== Test method of desktop image ====
 
==== Test method of desktop image ====
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>Click the network configuration icon in the upper right corner of the desktop (please do not connect the network cable when testing WIFI)</p>
 
<li><p>Click the network configuration icon in the upper right corner of the desktop (please do not connect the network cable when testing WIFI)</p>
<p>[[File:media/image184.png|377x166px]]</p></li>
+
<p>[[File:cm4-img184.png]]</p></li>
 
<li><p>Click '''More networks''' in the pop-up drop-down box to see all scanned WIFI hotspots, and then select the WIFI hotspot you want to connect to.</p>
 
<li><p>Click '''More networks''' in the pop-up drop-down box to see all scanned WIFI hotspots, and then select the WIFI hotspot you want to connect to.</p>
<p>[[File:media/image185.png|576x353px]]</p></li>
+
<p>[[File:cm4-img185.png]]</p></li>
 
<li><p>Then enter the password of the WIFI hotspot, and then click '''Connect''' to start connecting to WIFI</p>
 
<li><p>Then enter the password of the WIFI hotspot, and then click '''Connect''' to start connecting to WIFI</p>
<p>[[File:media/image186.png|320x163px]]</p></li>
+
<p>[[File:cm4-img186.png]]</p></li>
 
<li><p>After connecting to WIFI, you can open the browser to check whether you can access the Internet. The entrance of the browser is shown in the figure below</p>
 
<li><p>After connecting to WIFI, you can open the browser to check whether you can access the Internet. The entrance of the browser is shown in the figure below</p>
<p>[[File:media/image187.png|576x308px]]</p></li>
+
<p>[[File:cm4-img187.png]]</p></li>
 
<li><p>If you can open other web pages after opening the browser, it means the WIFI connection is normal</p>
 
<li><p>If you can open other web pages after opening the browser, it means the WIFI connection is normal</p>
<p>[[File:media/image188.png|575x218px]]</p></li></ol>
+
<p>[[File:cm4-img188.png]]</p></li></ol>
  
 
<span id="how-to-set-a-static-ip-address"></span>
 
<span id="how-to-set-a-static-ip-address"></span>
 +
 
=== How to set a static IP address ===
 
=== How to set a static IP address ===
  
'''Please do not set a static IP address by modifying the /etc/network/interfaces configuration file'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Please do not set a static IP address by modifying the /etc/network/interfaces configuration file'''</big>
 +
|}
  
 
<span id="use-the-nmtui-command-to-set-a-static-ip-address"></span>
 
<span id="use-the-nmtui-command-to-set-a-static-ip-address"></span>
Line 2,379: Line 2,898:
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First run the nmtui command</p>
 
<li><p>First run the nmtui command</p>
<p>orangepi@orangepi:~$ '''nmtui'''</p></li>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''nmtui'''</p>
 +
|}
 +
</li>
 
<li><p>Then select '''Edit a connection''' and press Enter</p>
 
<li><p>Then select '''Edit a connection''' and press Enter</p>
<p>[[File:media/image189.png|227x247px]]</p></li>
+
<p>[[File:cm4-img189.png]]</p></li>
 
<li><p>Then select the network interface for which a static IP address needs to be set. For example, to set the static IP address of the '''Ethernet''' interface, select '''Wired connection 1'''.</p>
 
<li><p>Then select the network interface for which a static IP address needs to be set. For example, to set the static IP address of the '''Ethernet''' interface, select '''Wired connection 1'''.</p>
<p>[[File:media/image190.png|310x149px]]</p></li>
+
<p>[[File:cm4-img190.png]]</p></li>
 
<li><p>Then select '''Edit''' via the '''Tab''' key and press the Enter key</p>
 
<li><p>Then select '''Edit''' via the '''Tab''' key and press the Enter key</p>
<p>[[File:media/image191.png|316x144px]]</p></li>
+
<p>[[File:cm4-img191.png]]</p></li>
 
<li><p>Then use the Tab key to move the cursor to the'''&lt;Automatic&gt;''' position shown in the figure below to configure IPv4</p>
 
<li><p>Then use the Tab key to move the cursor to the'''&lt;Automatic&gt;''' position shown in the figure below to configure IPv4</p>
<p>[[File:media/image192.png|575x240px]]</p></li>
+
<p>[[File:cm4-img192.png]]</p></li>
 
<li><p>Then press Enter, select '''Manual''' through the up and down arrow keys, and then press Enter to confirm.</p>
 
<li><p>Then press Enter, select '''Manual''' through the up and down arrow keys, and then press Enter to confirm.</p>
<p>[[File:media/image193.png|576x237px]]</p></li>
+
<p>[[File:cm4-img193.png]]</p></li>
 
<li><p>The display after selection is as shown below</p>
 
<li><p>The display after selection is as shown below</p>
<p>[[File:media/image194.png|575x240px]]</p></li>
+
<p>[[File:cm4-img194.png]]</p></li>
 
<li><p>Then move the cursor to '''&lt;Show&gt;''' via the Tab key</p>
 
<li><p>Then move the cursor to '''&lt;Show&gt;''' via the Tab key</p>
<p>[[File:media/image195.png|576x241px]]</p></li>
+
<p>[[File:cm4-img195.png]]</p></li>
 
<li><p>Then press Enter. After pressing Enter, the following setting interface will pop up.</p>
 
<li><p>Then press Enter. After pressing Enter, the following setting interface will pop up.</p>
<p>[[File:media/image196.png|575x450px]]</p></li>
+
<p>[[File:cm4-img196.png]]</p></li>
<li><p>Then you can set the IP address (Addresses), gateway (Gateway) and DNS server address as shown in the figure below (there are many other setting options, please explore by yourself),'''Please set it according to your specific needs. The value set in the picture below is just an example.'''</p>
+
<li><p>Then you can set the IP address (Addresses), gateway (Gateway) and DNS server address as shown in the figure below (there are many other setting options, please explore by yourself),'''<span style="color:#FF0000">Please set it according to your specific needs. The value set in the picture below is just an example.</span>'''</p>
<p>[[File:media/image197.png|576x233px]]</p></li>
+
<p>[[File:cm4-img197.png]]</p></li>
 
<li><p>After setting, move the cursor to '''&lt;OK&gt;''' in the lower right corner, and then press Enter to confirm.</p>
 
<li><p>After setting, move the cursor to '''&lt;OK&gt;''' in the lower right corner, and then press Enter to confirm.</p>
<p>[[File:media/image198.png|576x116px]]</p></li>
+
<p>[[File:cm4-img198.png]]</p></li>
 
<li><p>Then click '''&lt;Back&gt;''' to return to the previous level selection interface</p>
 
<li><p>Then click '''&lt;Back&gt;''' to return to the previous level selection interface</p>
<p>[[File:media/image199.png|330x325px]]</p></li>
+
<p>[[File:cm4-img199.png]]</p></li>
 
<li><p>Then select '''Activate a connection''', then move the cursor to '''&lt;OK&gt;''', and finally click Enter</p>
 
<li><p>Then select '''Activate a connection''', then move the cursor to '''&lt;OK&gt;''', and finally click Enter</p>
<p>[[File:media/image200.png|331x248px]]</p></li>
+
<p>[[File:cm4-img200.png]]</p></li>
 
<li><p>Then select the network interface that needs to be set, such as '''Wired connection 1''', then move the cursor to '''&lt;Deactivate&gt;''', and press Enter to disable '''Wired connection 1'''</p>
 
<li><p>Then select the network interface that needs to be set, such as '''Wired connection 1''', then move the cursor to '''&lt;Deactivate&gt;''', and press Enter to disable '''Wired connection 1'''</p>
<p>[[File:media/image201.png|576x224px]]</p></li>
+
<p>[[File:cm4-img201.png]]</p></li>
 
<li><p>Then please do not move the cursor, and then press the Enter key to re-enable '''Wired connection 1''', so that the static IP address set earlier will take effect</p>
 
<li><p>Then please do not move the cursor, and then press the Enter key to re-enable '''Wired connection 1''', so that the static IP address set earlier will take effect</p>
<p>[[File:media/image202.png|576x224px]]</p></li>
+
<p>[[File:cm4-img202.png]]</p></li>
 
<li><p>Then you can exit nmtui through the '''&lt;Back&gt;'''and '''Quit''' buttons</p>
 
<li><p>Then you can exit nmtui through the '''&lt;Back&gt;'''and '''Quit''' buttons</p>
<p>[[File:media/image203.png|300x253px]] [[File:media/image204.png|227x252px]]</p></li>
+
<p>[[File:cm4-img203.png]] [[File:cm4-img204.png]]</p></li>
 
<li><p>Then through '''ip addr show eth0''', you can see that the IP address of the network port has changed to the static IP address set earlier</p>
 
<li><p>Then through '''ip addr show eth0''', you can see that the IP address of the network port has changed to the static IP address set earlier</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''ip addr show eth0'''</p>
 
<p>orangepi@orangepi:~$ '''ip addr show eth0'''</p>
 
<p>3: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
 
<p>3: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
<p>link/ether 5e:ac:14:a5:92:b3 brd ff:ff:ff:ff:ff:ff</p>
+
:<p>link/ether 5e:ac:14:a5:92:b3 brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.177'''/24 brd 192.168.1.255 scope global noprefixroute eth0</p>
+
:<p>inet '''<span style="color:#FF0000">192.168.1.177</span>'''/24 brd 192.168.1.255 scope global noprefixroute eth0</p>
<p>valid_lft forever preferred_lft forever</p>
+
::<p>valid_lft forever preferred_lft forever</p>
<p>inet6 241e:3b8:3240:c3a0:e269:8305:dc08:135e/64 scope global dynamic noprefixroute</p>
+
:<p>inet6 241e:3b8:3240:c3a0:e269:8305:dc08:135e/64 scope global dynamic noprefixroute</p>
<p>valid_lft 259149sec preferred_lft 172749sec</p>
+
::<p>valid_lft 259149sec preferred_lft 172749sec</p>
<p>inet6 fe80::957d:bbbe:4928:3604/64 scope link noprefixroute</p>
+
:<p>inet6 fe80::957d:bbbe:4928:3604/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li>
+
::<p>valid_lft forever preferred_lft forever</p>
 +
|}
 +
</li>
 
<li><p>Then you can test the network connectivity to check whether the IP address is configured OK. The ping command can be interrupted by using the '''Ctrl+C''' shortcut key.</p>
 
<li><p>Then you can test the network connectivity to check whether the IP address is configured OK. The ping command can be interrupted by using the '''Ctrl+C''' shortcut key.</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''ping 192.168.1.47 -I eth0'''</p>
 
<p>orangepi@orangepi:~$ '''ping 192.168.1.47 -I eth0'''</p>
 
<p>PING 192.168.1.47 (192.168.1.47) from 192.168.1.188 eth0: 56(84) bytes of data.</p>
 
<p>PING 192.168.1.47 (192.168.1.47) from 192.168.1.188 eth0: 56(84) bytes of data.</p>
Line 2,431: Line 2,963:
 
<p>--- 192.168.1.47 ping statistics ---</p>
 
<p>--- 192.168.1.47 ping statistics ---</p>
 
<p>5 packets transmitted, 5 received, 0% packet loss, time 4042ms</p>
 
<p>5 packets transmitted, 5 received, 0% packet loss, time 4042ms</p>
<p>rtt min/avg/max/mdev = 0.233/0.262/0.275/0.015 ms</p></li></ol>
+
<p>rtt min/avg/max/mdev = 0.233/0.262/0.275/0.015 ms</p>
 +
|}
 +
</li></ol>
  
 
<span id="use-the-nmcli-command-to-set-a-static-ip-address"></span>
 
<span id="use-the-nmcli-command-to-set-a-static-ip-address"></span>
 +
 
==== Use the nmcli command to set a static IP address ====
 
==== Use the nmcli command to set a static IP address ====
  
Line 2,440: Line 2,975:
 
<li><p>Then you can view the name of the network device through the '''nmcli con show''' command, as shown below</p>
 
<li><p>Then you can view the name of the network device through the '''nmcli con show''' command, as shown below</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>'''orangepi''' is the name of the WIFI network interface (the name &gt; is not necessarily the same)</p></li>
+
<li><p>'''orangepi''' is the name of the WIFI network interface (the name is not necessarily the same)</p></li>
 
<li><p>'''Wired connection 1''' is the name of the Ethernet interface</p>
 
<li><p>'''Wired connection 1''' is the name of the Ethernet interface</p>
<p>orangepi@orangepi:~$ '''nmcli con show'''</p>
+
{| class="wikitable" style="width:800px;"
<p>NAME UUID TYPE DEVICE</p>
+
|-
<p>'''orangepi''' cfc4f922-ae48-46f1-84e1-2f19e9ec5e2a wifi wlan0</p>
+
|
<p>'''Wired connection 1''' 9db058b7-7701-37b8-9411-efc2ae8bfa30 ethernet eth0</p></li></ol>
+
orangepi@orangepi:~$ '''nmcli con show'''<br>
 +
<span style="margin-right: 180px;">NAME</span><span style="margin-right: 260px;">UUID </span><span style="margin-right: 45px;">TYPE </span><span style="margin-right: 50px;">DEVICE</span><br>
 +
<span style="margin-right: 125px;">'''orangepi'''</span><span style="margin-right: 70px;">cfc4f922-ae48-46f1-84e1-2f19e9ec5e2a</span><span style="margin-right: 50px;">wifi </span><span style="margin-right: 50px;">wlan0</span><br>
 +
<span style="margin-right: 50px;">'''Wired connection 1'''</span><span style="margin-right: 50px;">9db058b7-7701-37b8-9411-efc2ae8bfa30</span><span style="margin-right: 30px;">ethernet </span><span style="margin-right: 50px;">eth0</span><br>
 +
|}</li></ol>
 
</li>
 
</li>
 
<li><p>Then enter the following command,</p>
 
<li><p>Then enter the following command,</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>'''&quot;Wired connection 1&quot;''' It means to set the static IP address &gt; of the Ethernet port. If you need to set the static IP address &gt; of WIFI, please modify it to the corresponding name of the &gt; WIFI network interface (you can get it through the '''nmcli con &gt; show''')</p></li>
+
<li><p>'''&quot;Wired connection 1&quot;''' It means to set the static IP address of the Ethernet port. If you need to set the static IP address of WIFI, please modify it to the corresponding name of the WIFI network interface (you can get it through the '''nmcli con show''')</p></li>
<li><p>'''ipv4.addresses''' Behind is the static IP address to be set, &gt; which can be modified to the value you want to set.</p></li>
+
<li><p>'''ipv4.addresses''' Behind is the static IP address to be set, which can be modified to the value you want to set.</p></li>
 
<li><p>'''ipv4.gateway''' Indicates the address of the gateway</p>
 
<li><p>'''ipv4.gateway''' Indicates the address of the gateway</p>
 
<p>orangepi@orangepi:~$ '''nmcli con mod &quot;Wired connection 1&quot; \'''</p>
 
<p>orangepi@orangepi:~$ '''nmcli con mod &quot;Wired connection 1&quot; \'''</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>'''ipv4.addresses &quot;192.168.1.110&quot; \'''</p>
 
<p>'''ipv4.addresses &quot;192.168.1.110&quot; \'''</p>
 
<p>'''ipv4.gateway &quot;192.168.1.1&quot; \'''</p>
 
<p>'''ipv4.gateway &quot;192.168.1.1&quot; \'''</p>
 
<p>'''ipv4.dns &quot;8.8.8.8&quot; \'''</p>
 
<p>'''ipv4.dns &quot;8.8.8.8&quot; \'''</p>
<p>'''ipv4.method &quot;manual&quot;'''</p></li></ol>
+
<p>'''ipv4.method &quot;manual&quot;'''</p>
 +
|}
 +
</li></ol>
 
</li>
 
</li>
 
<li><p>Then restart the Linux system</p>
 
<li><p>Then restart the Linux system</p>
<p>orangepi@orangepi:~$ '''sudo reboot'''</p></li>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''sudo reboot'''</p>
 +
|}
 +
</li>
 
<li><p>Then re-enter the Linux system and use the '''ip addr show eth0''' command to see that the IP address has been set to the desired value</p>
 
<li><p>Then re-enter the Linux system and use the '''ip addr show eth0''' command to see that the IP address has been set to the desired value</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''ip addr show eth0'''</p>
 
<p>orangepi@orangepi:~$ '''ip addr show eth0'''</p>
 
<p>3: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
 
<p>3: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000</p>
<p>link/ether 5e:ae:14:a5:91:b3 brd ff:ff:ff:ff:ff:ff</p>
+
:<p>link/ether 5e:ae:14:a5:91:b3 brd ff:ff:ff:ff:ff:ff</p>
<p>inet '''192.168.1.110'''/32 brd 192.168.1.110 scope global noprefixroute eth0</p>
+
:<p>inet '''<span style="color:#FF0000">192.168.1.110</span>'''/32 brd 192.168.1.110 scope global noprefixroute eth0</p>
<p>valid_lft forever preferred_lft forever</p>
+
::<p>valid_lft forever preferred_lft forever</p>
<p>inet6 240e:3b7:3240:c3a0:97de:1d01:b290:fe3a/64 scope global dynamic noprefixroute</p>
+
:<p>inet6 240e:3b7:3240:c3a0:97de:1d01:b290:fe3a/64 scope global dynamic noprefixroute</p>
<p>valid_lft 259183sec preferred_lft 172783sec</p>
+
::<p>valid_lft 259183sec preferred_lft 172783sec</p>
<p>inet6 fe80::3312:861a:a589:d3c/64 scope link noprefixroute</p>
+
:<p>inet6 fe80::3312:861a:a589:d3c/64 scope link noprefixroute</p>
<p>valid_lft forever preferred_lft forever</p></li></ol>
+
::<p>valid_lft forever preferred_lft forever</p>
 +
|}
 +
</li></ol>
  
 
<span id="ssh-remote-login-development-board"></span>
 
<span id="ssh-remote-login-development-board"></span>
 +
 
== SSH remote login development board ==
 
== SSH remote login development board ==
  
'''Linux systems enable ssh remote login by default and allow root users to log in to the system. Before ssh login, you first need to ensure that the Ethernet or wifi network is connected, and then use the ip addr command or obtain the IP address of the development board by checking the router.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Linux systems enable ssh remote login by default and allow root users to log in to the system. Before ssh login, you first need to ensure that the Ethernet or wifi network is connected, and then use the ip addr command or obtain the IP address of the development board by checking the router.'''</big>
 +
|}
  
 
<span id="ssh-remote-login-development-board-under-ubuntu"></span>
 
<span id="ssh-remote-login-development-board-under-ubuntu"></span>
Line 2,482: Line 3,041:
 
# Then you can remotely log in to the Linux system through the ssh command
 
# Then you can remotely log in to the Linux system through the ssh command
  
test@test:~$ '''ssh [mailto:root@192.168.1.36 root@192.168.1.]xxx''' (Need to be replaced with the IP address of the development board)
+
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
test@test:~$ '''ssh [mailto:root@192.168.1.36 root@192.168.1.]xxx''' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Need to be replaced with the IP address of the development board)
  
root@192.168.1.xx's password: (Enter the password here, the default password is orangepi)
+
root@192.168.1.xx's password: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Enter the password here, the default password is orangepi)
 +
|}
 +
::{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that when entering the password, <span style="color:#FF0000">the specific content of the entered password will not be displayed on the screen</span>, please do not think that there is any fault, just press Enter after inputting.'''
  
'''Note that when entering the password, the specific content of the entered password will not be displayed on the screen, please do not think that there is any fault, just press Enter after inputting.'''
+
'''If you are prompted to refuse the connection, as long as you are using the image provided by Orange Pi, <span style="color:#FF0000">please do not suspect that the password orangepi is wrong</span>, but find other reasons'''</big>
 
+
|}
'''If you are prompted to refuse the connection, as long as you are using the image provided by Orange Pi, please do not suspect that the password orangepi is wrong, but find other reasons'''
 
  
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
Line 2,494: Line 3,060:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image205.png|394x218px|R[`56P}CFQVXI2Y]H1DTBOL]]
+
[[File:cm4-img205.png]]
  
 
</div>
 
</div>
<p>'''If ssh fails to log in to the Linux system normally, first check whether the IP address of the development board can be pinged. If there is no problem with the ping, you can log in to the Linux system through the serial port or HDMI display, and then enter the following command on the development board and try again. Is it possible to connect:'''</p></li></ol>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''If ssh fails to log in to the Linux system normally, first check whether the IP address of the development board can be pinged. If there is no problem with the ping, you can log in to the Linux system through the serial port or HDMI display, and then enter the following command on the development board and try again. Is it possible to connect:'''</p>
 +
 
  
 
root@orangepi:~# '''reset_ssh.sh'''
 
root@orangepi:~# '''reset_ssh.sh'''
  
'''If it still doesn't work, please try again by resetting the system.'''
 
  
 +
'''If it still doesn't work, please try again by resetting the system.'''</big>
 +
|}
 +
</li></ol>
 
<span id="ssh-remote-login-development-board-under-windows"></span>
 
<span id="ssh-remote-login-development-board-under-windows"></span>
 +
 
=== SSH remote login development board under Windows ===
 
=== SSH remote login development board under Windows ===
  
Line 2,512: Line 3,085:
 
<li><p>Open '''Session'''</p></li>
 
<li><p>Open '''Session'''</p></li>
 
<li><p>Then select '''SSH''' in '''Session Setting'''</p></li>
 
<li><p>Then select '''SSH''' in '''Session Setting'''</p></li>
<li><p>Then enter the IP address of the development board in the &gt; '''Remote host'''</p></li>
+
<li><p>Then enter the IP address of the development board in the '''Remote host'''</p></li>
<li><p>Then enter the username '''root''' or '''orangepi''' of the Linux &gt; system in '''Specify username'''</p></li>
+
<li><p>Then enter the username '''root''' or '''orangepi''' of the Linux system in '''Specify username'''</p></li>
 
<li><p>Finally click '''OK'''</p>
 
<li><p>Finally click '''OK'''</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image206.jpeg|553x280px|14]]
+
[[File:cm4-img206.png]]
  
 
</div></li></ol>
 
</div></li></ol>
 
</li>
 
</li>
 
<li><p>Then you will be prompted to enter a password. The default passwords for root and orangepi users are orangepi</p>
 
<li><p>Then you will be prompted to enter a password. The default passwords for root and orangepi users are orangepi</p>
<p>'''Note that when entering a password, the specific content of the entered password will not be displayed on the screen. Please do not think that there is something wrong. Just press Enter after entering it.'''</p></li></ol>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''Note that when entering a password, <span style="color:#FF0000">the specific content of the entered password will not be displayed on the screen</span>. Please do not think that there is something wrong. Just press Enter after entering it.'''</p></big>
 +
|}
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image207.jpeg|578x150px|C:\Users\orangepi\Desktop\用户手册插图\pi 3b\just press Enter after inputting..jpgjust press Enter after inputting.]]
+
[[File:cm4-img207.png]]
  
 
</div>
 
</div>
 +
</li></ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>After successfully logging into the system, the display is as shown below</li></ol>
+
<li>After successfully logging into the system, the display is as shown below</li>
  
[[File:media/image208.png|575x364px]]
+
[[File:cm4-img208.png]]
 +
</ol>
 +
<span id="method-of-uploading-files-to-the-development-board-linux-system"></span>
  
<span id="method-of-uploading-files-to-the-development-board-linux-system"></span>
 
 
== Method of uploading files to the development board Linux system ==
 
== Method of uploading files to the development board Linux system ==
  
Line 2,546: Line 3,125:
 
<li><p>Use the scp command to upload files from the Ubuntu PC to the Linux system of the development board. The specific commands are as follows</p>
 
<li><p>Use the scp command to upload files from the Ubuntu PC to the Linux system of the development board. The specific commands are as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>'''file_path:'''Need to be replaced with the path of the file to &gt; be uploaded</p></li>
+
<li><p>'''file_path:'''Need to be replaced with the path of the file to be uploaded</p></li>
<li><p>'''orangepi:'''This is the username of the Linux system of the &gt; development board. It can also be replaced with another one, &gt; such as root.</p></li>
+
<li><p>'''orangepi:'''This is the username of the Linux system of the development board. It can also be replaced with another one, such as root.</p></li>
<li><p>'''192.168.xx.xx:''' It is the IP address of the development &gt; board, please modify it according to the actual situation</p></li>
+
<li><p>'''192.168.xx.xx:''' It is the IP address of the development board, please modify it according to the actual situation</p></li>
<li><p>'''/home/orangepi:''' The path in the Linux system of the &gt; development board can also be modified to other paths</p>
+
<li><p>'''/home/orangepi:''' The path in the Linux system of the development board can also be modified to other paths</p>
<p>test@test:~$ '''scp file_path orangepi@192.168.xx.xx:/home/orangepi/'''</p></li></ol>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>test@test:~$ '''scp file_path orangepi@192.168.xx.xx:/home/orangepi/'''</p>
 +
|}
 +
</li></ol>
 
</li>
 
</li>
 
<li><p>If you want to upload a folder, you need to add the -r parameter</p>
 
<li><p>If you want to upload a folder, you need to add the -r parameter</p>
<p>test@test:~$ '''scp -r dir_path orangepi@192.168.xx.xx:/home/orangepi/'''</p></li>
+
{| class="wikitable" style="width:800px;"
<li><p>There are more usages of scp, please use the following command to view the man manual</p></li></ol>
+
|-
 
+
|
 +
<p>test@test:~$ '''scp <span style="color:#FF0000">-r</span> dir_path orangepi@192.168.xx.xx:/home/orangepi/'''</p>
 +
|}
 +
</li>
 +
<li><p>There are more usages of scp, please use the following command to view the man manual</p></li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~$ '''man scp'''
 
test@test:~$ '''man scp'''
 +
|}
 +
</ol>
 +
<span id="how-to-upload-files-using-filezilla"></span>
  
<span id="how-to-upload-files-using-filezilla"></span>
 
 
==== How to upload files using filezilla ====
 
==== How to upload files using filezilla ====
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First install filezilla in Ubuntu PC</p>
 
<li><p>First install filezilla in Ubuntu PC</p>
<p>test@test:~$ '''sudo apt install -y filezilla'''</p></li>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>test@test:~$ '''sudo apt install -y filezilla'''</p>
 +
|}
 +
</li>
 
<li><p>Then use the following command to open filezilla</p>
 
<li><p>Then use the following command to open filezilla</p>
<p>test@test:~$ '''filezilla'''</p></li>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>test@test:~$ '''filezilla'''</p>
 +
|}
 +
</li>
 
<li><p>The interface after opening filezilla is as shown below. At this time, the remote site on the right is empty.</p>
 
<li><p>The interface after opening filezilla is as shown below. At this time, the remote site on the right is empty.</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image209.png|576x453px|截图 2022-12-03 19-04-40]]
+
[[File:cm4-img209.png]]
  
 
</div></li>
 
</div></li>
<li><p>The method of connecting the development board is as shown in the figure below</p></li></ol>
+
<li><p>The method of connecting the development board is as shown in the figure below</p></li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image210.png|575x128px|图片565]]
+
[[File:cm4-img210.png]]
  
</div>
+
</div></ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
 
<li><p>Then choose to '''<span class="mark">save the password</span>''', and then click '''<span class="mark">OK</span>'''</p>
 
<li><p>Then choose to '''<span class="mark">save the password</span>''', and then click '''<span class="mark">OK</span>'''</p>
<p>[[File:media/image211.png|249x181px]]</p></li>
+
<p>[[File:cm4-img211.png]]</p></li>
<li><p>Then select '''<span class="mark">Always trust this host</span>''' and click '''<span class="mark">OK</span>'''</p></li></ol>
+
<li><p>Then select '''<span class="mark">Always trust this host</span>''' and click '''<span class="mark">OK</span>'''</p></li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image212.png|278x150px|IMG_256]]
+
[[File:cm4-img212.png]]
  
</div>
+
</div></ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>After the connection is successful, you can see the directory structure of the development board's Linux file system on the right side of the filezilla software.</li></ol>
+
<li>After the connection is successful, you can see the directory structure of the development board's Linux file system on the right side of the filezilla software.</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image213.png|533x330px|IMG_256]]
+
[[File:cm4-img213.png]]
  
</div>
+
</div></ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>Then select the path to be uploaded to the development board on the right side of the filezilla software, select the file to be uploaded in Ubuntu PC on the left side of the filezilla software, right-click the mouse, and click the upload option to start uploading the file to the development board.</li></ol>
+
<li>Then select the path to be uploaded to the development board on the right side of the filezilla software, select the file to be uploaded in Ubuntu PC on the left side of the filezilla software, right-click the mouse, and click the upload option to start uploading the file to the development board.</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image214.png|529x414px|IMG_256]]
+
[[File:cm4-img214.png]]
  
</div>
+
</div></ol>
 
<ol start="9" style="list-style-type: decimal;">
 
<ol start="9" style="list-style-type: decimal;">
 
<li><p>After the upload is complete, you can go to the corresponding path in the Linux system of the development board to view the uploaded files</p></li>
 
<li><p>After the upload is complete, you can go to the corresponding path in the Linux system of the development board to view the uploaded files</p></li>
<li><p>The method of uploading a folder is the same as the method of uploading a file, so I won’t go into details here.</p></li></ol>
+
<li><p>The method of uploading a folder is the same as the method of uploading a file, so I won't go into details here.</p></li></ol>
  
 
<span id="the-method-of-uploading-files-to-the-linux-system-of-the-development-board-in-windows-pc"></span>
 
<span id="the-method-of-uploading-files-to-the-linux-system-of-the-development-board-in-windows-pc"></span>
 +
 
=== The method of uploading files to the Linux system of the development board in Windows PC ===
 
=== The method of uploading files to the Linux system of the development board in Windows PC ===
  
Line 2,617: Line 3,221:
 
# First download the installation file of the Windows version of the filezilla software. The download link is as follows
 
# First download the installation file of the Windows version of the filezilla software. The download link is as follows
  
[https://filezilla-project.org/download.php?type=client '''https://filezilla-project.org/download.php?type=client'''][[File:media/image215.jpeg|472x171px|C:\Users\orangepi\Desktop\用户手册插图\Pi5 Plus\未标题-15.jpg未标题-15]]
+
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
[https://filezilla-project.org/download.php?type=client '''https://filezilla-project.org/download.php?type=client''']
 +
|}
 +
 
 +
::[[File:cm4-img215.png]]
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image216.png|393x283px|图片5552]]
+
::[[File:cm4-img216.png]]
  
 
</div>
 
</div>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>The downloaded installation package is as shown below, then double-click to install it directly</p>
 
<li><p>The downloaded installation package is as shown below, then double-click to install it directly</p>
<p>'''FileZilla_Server_1.5.1_win64-setup.exe'''</p></li></ol>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>'''FileZilla_Server_1.5.1_win64-setup.exe'''</p>
 +
|}
  
 
During the installation process, please select '''Decline''' on the following installation interface, and then select <span class="mark">&lt;'''Next&gt;'''</span>
 
During the installation process, please select '''Decline''' on the following installation interface, and then select <span class="mark">&lt;'''Next&gt;'''</span>
Line 2,632: Line 3,246:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image217.png|319x251px|IMG_256]]
+
[[File:cm4-img217.png]]
  
 
</div>
 
</div>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>The interface after opening filezilla is as shown below. At this time, the remote site on the right is empty.</li></ol>
+
<li>The interface after opening filezilla is as shown below. At this time, the remote site on the right is empty.</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image218.png|451x357px|IMG_256]]
+
[[File:cm4-img218.png]]
  
</div>
+
</div></ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>The method of connecting the development board is shown in the figure below:</li></ol>
+
<li>The method of connecting the development board is shown in the figure below:</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image210.png|575x128px|图片565]]
+
[[File:cm4-img210.png]]
  
</div>
+
</div></ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Then choose to '''<span class="mark">save the password,</span>''' and then click '''<span class="mark">OK</span>'''</li></ol>
+
<li>Then choose to '''<span class="mark">save the password,</span>''' and then click '''<span class="mark">OK</span>'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image219.png|207x146px|IMG_256]]
+
[[File:cm4-img219.png]]
  
</div>
+
</div></ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then select '''<span class="mark">Always trust this host</span>''' and click '''<span class="mark">OK</span>'''</li></ol>
+
<li>Then select '''<span class="mark">Always trust this host</span>''' and click '''<span class="mark">OK</span>'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image220.png|221x109px|IMG_256]]
+
[[File:cm4-img220.png]]
  
</div>
+
</div></ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>After the connection is successful, you can see the directory structure of the development board's Linux file system on the right side of the filezilla software.</li></ol>
+
<li>After the connection is successful, you can see the directory structure of the development board's Linux file system on the right side of the filezilla software.</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image221.jpeg|446x329px|图片3]]
+
[[File:cm4-img221.png]]
  
</div>
+
</div></ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>Then select the path to be uploaded to the development board on the right side of the filezilla software, select the file to be uploaded on the Windows PC on the left side of the filezilla software, right-click the mouse, and then click the upload option to start uploading the file to the development board.</li></ol>
+
<li>Then select the path to be uploaded to the development board on the right side of the filezilla software, select the file to be uploaded on the Windows PC on the left side of the filezilla software, right-click the mouse, and then click the upload option to start uploading the file to the development board.</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image222.png|535x394px|IMG_256]]
+
[[File:cm4-img222.png]]
  
</div>
+
</div></ol>
 
<ol start="9" style="list-style-type: decimal;">
 
<ol start="9" style="list-style-type: decimal;">
 
<li><p>After the upload is complete, you can go to the corresponding path in the Linux system of the development board to view the uploaded files</p></li>
 
<li><p>After the upload is complete, you can go to the corresponding path in the Linux system of the development board to view the uploaded files</p></li>
<li><p>The method of uploading a folder is the same as the method of uploading a file, so I won’t go into details here.</p></li></ol>
+
<li><p>The method of uploading a folder is the same as the method of uploading a file, so I won't go into details here.</p></li></ol>
  
 
<span id="hdmi-test"></span>
 
<span id="hdmi-test"></span>
 +
 
== HDMI test ==
 
== HDMI test ==
  
Line 2,697: Line 3,313:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image223.png|199x199px|Micro HDMI to HDMI cable]]
+
[[File:cm4-img223.png]]
  
 
</div></li>
 
</div></li>
<li><p>After starting the Linux system, if there is image output on the HDMI display, it means that the Micro HDMI interface is working normally.</p></li></ol>
+
<li><p>After starting the Linux system, if there is image output on the HDMI display, it means that the Micro HDMI interface is working normally.</p></li>
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that although many laptops have HDMI interfaces, the HDMI interface of the laptop generally only has the output function and does not have the HDMI in function, which means that the HDMI output of other devices cannot be displayed on the laptop screen.'''
  
'''Note that although many laptops have HDMI interfaces, the HDMI interface of the laptop generally only has the output function and does not have the HDMI in function, which means that the HDMI output of other devices cannot be displayed on the laptop screen.'''
+
'''When you want to connect the Micro HDMI of the development board to the HDMI port of the laptop, please make sure that your laptop supports the function HDMI in'''</big>
 
+
|}
'''When you want to connect the Micro HDMI of the development board to the HDMI port of the laptop, please make sure that your laptop supports the function HDMI in'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 
+
|-
'''When HDMI does not display, please first check whether the Micro HDMI cable is plugged in tightly. After confirming that the wiring is OK, you can try a different screen to see if there is a display.'''
+
|
 +
<big>'''When HDMI does not display, please first check whether the Micro HDMI cable is plugged in tightly. After confirming that the wiring is OK, you can try a different screen to see if there is a display.'''</big>
 +
|}
 +
</ol>
 +
<span id="hdmi-resolution-setting-method"></span>
  
<span id="hdmi-resolution-setting-method"></span>
 
 
=== HDMI resolution setting method ===
 
=== HDMI resolution setting method ===
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First open '''Display''' in '''Settings'''</p>
 
<li><p>First open '''Display''' in '''Settings'''</p>
<p>[[File:media/image224.png|509x327px]]</p></li>
+
<p>[[File:cm4-img224.png]]</p></li>
 
<li><p>Then you can see the current resolution of the system</p>
 
<li><p>Then you can see the current resolution of the system</p>
<p>[[File:media/image225.png|382x254px]]</p></li>
+
<p>[[File:cm4-img225.png]]</p></li>
 
<li><p>Click the drop-down box of Resolution to see all resolutions currently supported by the display</p>
 
<li><p>Click the drop-down box of Resolution to see all resolutions currently supported by the display</p>
<p>[[File:media/image226.png|415x274px]]</p></li>
+
<p>[[File:cm4-img226.png]]</p></li>
 
<li><p>Then select the resolution you want to set and click Apply</p>
 
<li><p>Then select the resolution you want to set and click Apply</p>
<p>[[File:media/image227.png|415x277px]]</p></li>
+
<p>[[File:cm4-img227.png]]</p></li>
 
<li><p>After the new resolution is set, select '''Keep the configuration'''</p>
 
<li><p>After the new resolution is set, select '''Keep the configuration'''</p>
<p>[[File:media/image228.png|447x243px]]</p></li></ol>
+
<p>[[File:cm4-img228.png]]</p></li></ol>
  
 
<span id="how-to-use-bluetooth"></span>
 
<span id="how-to-use-bluetooth"></span>
Line 2,731: Line 3,354:
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>Click the Bluetooth icon in the upper right corner of the desktop</p>
 
<li><p>Click the Bluetooth icon in the upper right corner of the desktop</p>
<p>[[File:media/image229.png|330x128px]]</p></li>
+
<p>[[File:cm4-img229.png]]</p></li>
 
<li><p>Then select the adapter</p>
 
<li><p>Then select the adapter</p>
<p>[[File:media/image230.png|375x165px]]</p></li>
+
<p>[[File:cm4-img230.png]]</p></li>
 
<li><p>If prompted with the following interface, please select '''Yes'''.</p>
 
<li><p>If prompted with the following interface, please select '''Yes'''.</p>
<p>[[File:media/image231.png|248x85px]]</p></li>
+
<p>[[File:cm4-img231.png]]</p></li>
 
<li><p>Then set the '''Visibility Setting''' to '''Always visible''' in the Bluetooth adapter setting interface, and then close it</p>
 
<li><p>Then set the '''Visibility Setting''' to '''Always visible''' in the Bluetooth adapter setting interface, and then close it</p>
<p>[[File:media/image232.png|243x229px]]</p></li>
+
<p>[[File:cm4-img232.png]]</p></li>
 
<li><p>Then open the configuration interface of the Bluetooth device</p>
 
<li><p>Then open the configuration interface of the Bluetooth device</p>
<p>[[File:media/image233.png|438x179px]]</p></li>
+
<p>[[File:cm4-img233.png]]</p></li>
 
<li><p>Click '''Search''' to start scanning for surrounding Bluetooth devices</p>
 
<li><p>Click '''Search''' to start scanning for surrounding Bluetooth devices</p>
<p>[[File:media/image234.png|322x217px]]</p></li>
+
<p>[[File:cm4-img234.png]]</p></li>
 
<li><p>Then select the Bluetooth device you want to connect to, and then click the right mouse button to pop up the operation interface for this Bluetooth device, select '''Pair''' to start pairing, and the demonstration here is to pair with an Android phone</p>
 
<li><p>Then select the Bluetooth device you want to connect to, and then click the right mouse button to pop up the operation interface for this Bluetooth device, select '''Pair''' to start pairing, and the demonstration here is to pair with an Android phone</p>
<p>[[File:media/image235.png|338x263px]]</p></li>
+
<p>[[File:cm4-img235.png]]</p></li>
 
<li><p>When pairing, a pairing confirmation box will pop up in the upper right corner of the desktop. Just select '''Confirm''' to confirm. At this time, you also need to confirm on the mobile phone.</p>
 
<li><p>When pairing, a pairing confirmation box will pop up in the upper right corner of the desktop. Just select '''Confirm''' to confirm. At this time, you also need to confirm on the mobile phone.</p>
<p>[[File:media/image236.png|417x152px]]</p></li>
+
<p>[[File:cm4-img236.png]]</p></li>
 
<li><p>After pairing with the mobile phone, you can select the paired Bluetooth device, then right click and select '''Send a File''' to start sending a picture to the mobile phone</p>
 
<li><p>After pairing with the mobile phone, you can select the paired Bluetooth device, then right click and select '''Send a File''' to start sending a picture to the mobile phone</p>
<p>[[File:media/image237.png|439x259px]]</p></li>
+
<p>[[File:cm4-img237.png]]</p></li>
 
<li><p>The interface for sending pictures is as follows</p>
 
<li><p>The interface for sending pictures is as follows</p>
<p>[[File:media/image238.png|437x253px]]</p></li></ol>
+
<p>[[File:cm4-img238.png]]</p></li></ol>
  
 
<span id="usb-interface-test"></span>
 
<span id="usb-interface-test"></span>
 
== USB interface test ==
 
== USB interface test ==
  
'''The USB interface can be connected to a USB hub to expand the number of USB interfaces.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''The USB interface can be connected to a USB hub to expand the number of USB interfaces.'''</big>
 +
|}
  
 
<span id="connect-usb-mouse-or-keyboard-to-test"></span>
 
<span id="connect-usb-mouse-or-keyboard-to-test"></span>
Line 2,769: Line 3,396:
 
# Execute the following command, if you can see the output of sdX, it means that the U disk is recognized successfully
 
# Execute the following command, if you can see the output of sdX, it means that the U disk is recognized successfully
  
orangepi@orangepi:~$ '''cat /proc/partitions | grep &quot;sd*&quot;'''
+
::{| class="wikitable" style="width:800px;"
 
+
|-
major minor #blocks name
+
|
 
+
orangepi@orangepi:~$ '''cat /proc/partitions | grep &quot;sd*&quot;'''<br>
8 0 30044160 '''sda'''
+
<span style="margin-right: 30px;">major </span><span style="margin-right: 40px;">minor </span><span style="margin-right: 30px;">#blocks</span><span style="margin-right: 50px;">name</span><br>
 
+
<span style="margin-right: 70px;">8</span><span style="margin-right: 60px;">0</span><span style="margin-right: 50px;">30044160 </span><span style="margin-right: 50px;color:#FF0000">'''sda'''</span><br>
8 1 30043119 '''sda1'''
+
<span style="margin-right: 70px;">8</span><span style="margin-right: 60px;">1</span><span style="margin-right: 50px;">30043119 </span><span style="margin-right: 50px;color:#FF0000">'''sda1'''</span><br>
 +
|}
  
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Use the mount command to mount the U disk to '''/mnt''', and then you can view the files in the U disk</li></ol>
+
<li>Use the mount command to mount the U disk to '''/mnt''', and then you can view the files in the U disk</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo mount /dev/sda1 /mnt/'''
 
orangepi@orangepi:~$ '''sudo mount /dev/sda1 /mnt/'''
  
Line 2,785: Line 3,415:
  
 
test.txt
 
test.txt
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>After mounting, you can check the capacity usage and mount point of the U disk through the '''df -h''' command.</li></ol>
+
<li>After mounting, you can check the capacity usage and mount point of the U disk through the '''df -h''' command.</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''df -h | grep &quot;sd&quot;'''
 
orangepi@orangepi:~$ '''df -h | grep &quot;sd&quot;'''
  
/dev/sda1 29G 208K 29G 1% /mnt
+
/dev/sda1 &nbsp;&nbsp;&nbsp; 29G &nbsp;&nbsp; 208K &nbsp;&nbsp; 29G &nbsp;&nbsp; 1% /mnt
 +
|}
 +
</ol>
 +
<span id="usb-wireless-network-card-test"></span>
  
<span id="usb-wireless-network-card-test"></span>
 
 
=== USB wireless network card test ===
 
=== USB wireless network card test ===
  
 
The usable USB wireless network cards that have been '''tested''' so far are as follows. Please test other types of USB wireless network cards by yourself. If they cannot be used, you need to transplant the corresponding USB wireless network card driver.
 
The usable USB wireless network cards that have been '''tested''' so far are as follows. Please test other types of USB wireless network cards by yourself. If they cannot be used, you need to transplant the corresponding USB wireless network card driver.
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"
 
|-
 
|-
 
| serial number
 
| serial number
Line 2,805: Line 3,440:
 
|-
 
|-
 
| 1
 
| 1
| RTL8723BU
+
|  
 +
RTL8723BU
  
 
support 2.4G WIFI+BT4.0
 
support 2.4G WIFI+BT4.0
  
| [[File:media/image2%2039.png]]
+
| [[File:cm4-img239.png]]
 
|-
 
|-
 
| 2
 
| 2
| RTL8811
+
|  
 +
RTL8811
  
 
support 2.4G +5G WIFI
 
support 2.4G +5G WIFI
  
| [[File:media/image2%2040.png]]
+
| [[File:cm4-img240.png]]
 
|}
 
|}
  
Line 2,825: Line 3,462:
 
<li><p>First insert the RTL8723BU wireless network card module into the USB interface of the development board</p></li>
 
<li><p>First insert the RTL8723BU wireless network card module into the USB interface of the development board</p></li>
 
<li><p>Then the Linux system will automatically load the RTL8723BU bluetooth and WIFI-related kernel modules, through the lsmod command, you can see that the following kernel modules have been automatically loaded</p>
 
<li><p>Then the Linux system will automatically load the RTL8723BU bluetooth and WIFI-related kernel modules, through the lsmod command, you can see that the following kernel modules have been automatically loaded</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''lsmod'''</p>
 
<p>orangepi@orangepi:~$ '''lsmod'''</p>
<p>Module Size Used by</p>
+
<span style="margin-right: 100px;">Module </span><span style="margin-right: 50px;">Size </span><span style="margin-right: 45px;">Used by</span><br>
<p>rfcomm 57344 16</p>
+
<span style="margin-right: 100px;">rfcomm </span><span style="margin-right: 50px;">57344</span><span style="margin-right: 50px;">16</span><br>
<p>rtl8xxxu 106496 0</p>
+
<span style="margin-right: 95px;">rtl8xxxu </span><span style="margin-right: 50px;">106496</span><span style="margin-right: 30px;">0</span><br>
<p>rtk_btusb 61440 0</p></li>
+
<span style="margin-right: 90px;">rtk_btusb </span><span style="margin-right: 50px;">61440</span><span style="margin-right: 30px;">0</span><br>
 +
|}
 +
</li>
 
<li><p>Through the dmesg command, you can see the loading information of the RTL8723BU module</p>
 
<li><p>Through the dmesg command, you can see the loading information of the RTL8723BU module</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''dmesg'''</p>
 
<p>orangepi@orangepi:~$ '''dmesg'''</p>
 
<p>......</p>
 
<p>......</p>
Line 2,861: Line 3,506:
 
<p>[ 84.266999] Bluetooth: RFCOMM ver 1.11</p>
 
<p>[ 84.266999] Bluetooth: RFCOMM ver 1.11</p>
 
<p>[ 84.884270] usbcore: registered new interface driver rtl8xxxu</p>
 
<p>[ 84.884270] usbcore: registered new interface driver rtl8xxxu</p>
<p>[ 84.912046] rtl8xxxu 2-1:1.2 wlx0013eff458ae: renamed from wlan0</p></li>
+
<p>[ 84.912046] rtl8xxxu 2-1:1.2 wlx0013eff458ae: renamed from wlan0</p>
<li><p>Then you can see the device node of RTL8723BU WIFI through the '''sudo ifconfig''' command. For the connection and test method of WIFI, please refer to the section of [[\l|'''WIFI connection test''']], which will not be repeated here</p>
+
|}
 +
</li>
 +
<li><p>Then you can see the device node of RTL8723BU WIFI through the '''sudo ifconfig''' command. For the connection and test method of WIFI, please refer to the section of [[Orange Pi CM4#WIFI connection test|'''WIFI connection test''']], which will not be repeated here</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''sudo ifconfig wlx0013eff458ae'''</p>
 
<p>orangepi@orangepi:~$ '''sudo ifconfig wlx0013eff458ae'''</p>
 
<p>wlx0013eff458ae: flags=4099&lt;UP,BROADCAST,MULTICAST&gt; mtu 1500</p>
 
<p>wlx0013eff458ae: flags=4099&lt;UP,BROADCAST,MULTICAST&gt; mtu 1500</p>
<p>ether 00:13:ef:f4:58:ae txqueuelen 1000 (Ethernet)</p>
+
::<p>ether 00:13:ef:f4:58:ae txqueuelen 1000 (Ethernet)</p>
<p>RX packets 0 bytes 0 (0.0 B)</p>
+
::<p>RX packets 0 bytes 0 (0.0 B)</p>
<p>RX errors 0 dropped 0 overruns 0 frame 0</p>
+
::<p>RX errors 0 dropped 0 overruns 0 frame 0</p>
<p>TX packets 0 bytes 0 (0.0 B)</p>
+
::<p>TX packets 0 bytes 0 (0.0 B)</p>
<p>TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0</p></li>
+
::<p>TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0</p>
 +
|}
 +
</li>
 
<li><p>Then you can see the USB Bluetooth device through the '''hciconfig''' command</p>
 
<li><p>Then you can see the USB Bluetooth device through the '''hciconfig''' command</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''sudo apt update &amp;&amp; sudo apt install bluez'''</p>
 
<p>orangepi@orangepi:~$ '''sudo apt update &amp;&amp; sudo apt install bluez'''</p>
 
<p>orangepi@orangepi:~$ '''hciconfig'''</p>
 
<p>orangepi@orangepi:~$ '''hciconfig'''</p>
<p>hci0: Type: Primary Bus: '''USB'''</p>
+
<p>hci0: Type: Primary Bus: '''<span style="color:#FF0000">USB</span>'''</p>
<p>BD Address: 00:13:EF:F4:58:AE ACL MTU: 820:8 SCO MTU: 255:16</p>
+
::<p>BD Address: 00:13:EF:F4:58:AE ACL MTU: 820:8 SCO MTU: 255:16</p>
<p>DOWN</p>
+
::<p>DOWN</p>
<p>RX bytes:1252 acl:0 sco:0 events:125 errors:0</p>
+
::<p>RX bytes:1252 acl:0 sco:0 events:125 errors:0</p>
<p>TX bytes:23307 acl:0 sco:0 commands:125 errors:0</p></li>
+
::<p>TX bytes:23307 acl:0 sco:0 commands:125 errors:0</p>
<li><p>You can also see the Bluetooth icon on the desktop. Bluetooth is not turned on at this time, so a red '''x''' will be displayed</p>
+
|}
<p>[[File:media/image241.png|576x157px]]</p></li>
+
</li>
 +
<li><p>You can also see the Bluetooth icon on the desktop. Bluetooth is not turned on at this time, so a red '''<span style="color:#FF0000">x</span>''' will be displayed</p>
 +
<p>[[File:cm4-img241.png]]</p></li>
 
<li><p>Click '''Turn Bluetooth On''' to turn on Bluetooth</p>
 
<li><p>Click '''Turn Bluetooth On''' to turn on Bluetooth</p>
<p>[[File:media/image242.png|576x262px]]</p></li>
+
<p>[[File:cm4-img242.png]]</p></li>
 
<li><p>The display after turning on Bluetooth is as follows</p>
 
<li><p>The display after turning on Bluetooth is as follows</p>
<p>[[File:media/image243.png|576x164px]]</p></li>
+
<p>[[File:cm4-img243.png]]</p></li>
<li><p>For the Bluetooth test method, please refer to the section on [[\l|'''Bluetooth usage''']] and will not be repeated here.</p></li></ol>
+
<li><p>For the Bluetooth test method, please refer to the section on [[Orange Pi CM4#How to use Bluetooth|'''Bluetooth usage''']] and will not be repeated here.</p></li></ol>
  
 
<span id="rtl8811-test"></span>
 
<span id="rtl8811-test"></span>
 +
 
==== RTL8811 test ====
 
==== RTL8811 test ====
  
Line 2,892: Line 3,550:
 
<li><p>First insert the RTL8811 wireless network card module into the USB interface of the development board</p></li>
 
<li><p>First insert the RTL8811 wireless network card module into the USB interface of the development board</p></li>
 
<li><p>Then the Linux system will automatically load the kernel module related to RTL8811 WIFI. Through the lsmod command, you can see that the following kernel module has been automatically loaded.</p>
 
<li><p>Then the Linux system will automatically load the kernel module related to RTL8811 WIFI. Through the lsmod command, you can see that the following kernel module has been automatically loaded.</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''lsmod'''</p>
 
<p>orangepi@orangepi:~$ '''lsmod'''</p>
<p>Module Size Used by</p>
+
<span style="margin-right: 100px;">Module </span><span style="margin-right: 50px;">Size </span><span style="margin-right: 45px;">Used by</span><br>
<p>8821cu 1839104 0</p></li>
+
<span style="margin-right: 100px;">8821cu </span><span style="margin-right: 50px;">1839104 </span><span style="margin-right: 50px;">0</span><br>
 +
|}
 +
</li>
 
<li><p>You can see the loading information of the RTL8811 module through the dmesg command</p>
 
<li><p>You can see the loading information of the RTL8811 module through the dmesg command</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''dmesg'''</p>
 
<p>orangepi@orangepi:~$ '''dmesg'''</p>
 
<p>[ 118.618194] usb 2-1: new high-speed USB device number 2 using ehci-platform</p>
 
<p>[ 118.618194] usb 2-1: new high-speed USB device number 2 using ehci-platform</p>
Line 2,904: Line 3,570:
 
<p>[ 118.767235] usb 2-1: SerialNumber: 123456</p>
 
<p>[ 118.767235] usb 2-1: SerialNumber: 123456</p>
 
<p>[ 119.500530] usbcore: registered new interface driver rtl8821cu</p>
 
<p>[ 119.500530] usbcore: registered new interface driver rtl8821cu</p>
<p>[ 119.525498] rtl8821cu 2-1:1.0 wlx1cbfced9d260: renamed from wlan0</p></li>
+
<p>[ 119.525498] rtl8821cu 2-1:1.0 wlx1cbfced9d260: renamed from wlan0</p>
<li><p>Then, you can see the WIFI device node through the '''sudo ifconfig''' command. For the WIFI connection and test method, please refer to the [[\l|'''WIFI connection test''']] section, which will not be repeated here</p>
+
|}
 +
</li>
 +
<li><p>Then, you can see the WIFI device node through the '''sudo ifconfig''' command. For the WIFI connection and test method, please refer to the [[Orange Pi CM4#WIFI connection test|'''WIFI connection test''']] section, which will not be repeated here</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''sudo ifconfig wlx1cbfced9d260'''</p>
 
<p>orangepi@orangepi:~$ '''sudo ifconfig wlx1cbfced9d260'''</p>
 
<p>wlx1cbfced9d260: flags=4099&lt;UP,BROADCAST,MULTICAST&gt; mtu 1500</p>
 
<p>wlx1cbfced9d260: flags=4099&lt;UP,BROADCAST,MULTICAST&gt; mtu 1500</p>
<p>ether 1c:bf:ce:d9:d2:60 txqueuelen 1000 (Ethernet)</p>
+
::<p>ether 1c:bf:ce:d9:d2:60 txqueuelen 1000 (Ethernet)</p>
<p>RX packets 0 bytes 0 (0.0 B)</p>
+
::<p>RX packets 0 bytes 0 (0.0 B)</p>
<p>RX errors 0 dropped 0 overruns 0 frame 0</p>
+
::<p>RX errors 0 dropped 0 overruns 0 frame 0</p>
<p>TX packets 0 bytes 0 (0.0 B)</p>
+
::<p>TX packets 0 bytes 0 (0.0 B)</p>
<p>TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0</p></li></ol>
+
::<p>TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0</p>
 +
|}
 +
</li></ol>
  
 
<span id="usb-camera-test"></span>
 
<span id="usb-camera-test"></span>
 +
 
=== USB camera test ===
 
=== USB camera test ===
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First, you need to prepare a USB camera as shown in the picture below or similar that supports UVC protocol, and then insert the USB camera into the USB interface of the Orange Pi development board</p>
 
<li><p>First, you need to prepare a USB camera as shown in the picture below or similar that supports UVC protocol, and then insert the USB camera into the USB interface of the Orange Pi development board</p>
<p>[[File:media/image16.png|259x150px]]</p></li>
+
<p>[[File:cm4-img16.png]]</p></li>
 
<li><p>Through the v4l2-ctl command, you can see that the device node information of the USB camera is /dev/video0</p>
 
<li><p>Through the v4l2-ctl command, you can see that the device node information of the USB camera is /dev/video0</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''v4l2-ctl --list-devices'''</p>
 
<p>orangepi@orangepi:~$ '''v4l2-ctl --list-devices'''</p>
<p>Q8 HD Webcam: Q8 HD Webcam ('''usb'''-fc880000.usb-1):</p>
+
<p>Q8 HD Webcam: Q8 HD Webcam ('''<span style="color:#FF0000">usb</span>'''-fc880000.usb-1):</p>
<p>'''/dev/video0'''</p>
+
::<p>'''/dev/video0'''</p>
<p>/dev/video1</p>
+
::<p>/dev/video1</p>
<p>/dev/media0</p>
+
::<p>/dev/media0</p>
<p>'''Note that l in v4l2 is a lowercase letter l, not the number 1'''</p>
+
|}
<p>'''In addition, the serial number of the video is not necessarily video0, please refer to what you actually see.'''</p></li>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''Note that l in v4l2 is a lowercase letter l, not the number 1'''</p>
 +
<p>'''In addition, the serial number of the video is not necessarily video0, please refer to what you actually see.'''</p></big>
 +
|}
 +
</li>
 
<li><p>In the desktop system, you can use Cheese to directly open the USB camera. The method of opening Cheese is as shown in the figure below:</p>
 
<li><p>In the desktop system, you can use Cheese to directly open the USB camera. The method of opening Cheese is as shown in the figure below:</p>
<p>[[File:media/image244.png|474x302px]]</p>
+
<p>[[File:cm4-img244.png]]</p>
 
<p>The interface after Cheese turns on the USB camera is as shown below:</p>
 
<p>The interface after Cheese turns on the USB camera is as shown below:</p>
<p>[[File:media/image245.png|473x277px]]</p></li>
+
<p>[[File:cm4-img245.png]]</p></li>
 
<li><p>How to use fswebcam to test USB camera</p>
 
<li><p>How to use fswebcam to test USB camera</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>Install fswebcam</p>
 
<li><p>Install fswebcam</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''sudo''' '''apt update'''</p>
 
<p>orangepi@orangepi:~$ '''sudo''' '''apt update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y fswebcam'''</p></li>
+
<p>orangepi@orangepi:~$ '''sudo apt-get install -y fswebcam'''</p>
<li><p>After installing fswebcam, you can use the following command to &gt; take pictures</p>
+
|}
<ol style="list-style-type: lower-alpha;">
+
</li>
<li><p>-d option is used to specify the device node of the USB &gt; camera</p></li>
+
<li><p>After installing fswebcam, you can use the following command to take pictures</p>
<li><p>--no-banner Used to remove watermarks from photos</p></li>
+
<ol style="list-style-type: none;">
<li><p>-r option to specify the resolution of the photo</p></li>
+
<li><p>a) -d option is used to specify the device node of the USB camera</p></li>
<li><p>-S Option to set the number of previous frames to skip</p></li>
+
<li><p>b) --no-banner Used to remove watermarks from photos</p></li>
<li><p>./image.jpg Used to set the name and path of the generated &gt; photo</p>
+
<li><p>c) -r option to specify the resolution of the photo</p></li>
 +
<li><p>d) -S Option to set the number of previous frames to skip</p></li>
 +
<li><p>e) ./image.jpg Used to set the name and path of the generated photo</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''sudo''' '''fswebcam -d /dev/video0 \'''</p>
 
<p>orangepi@orangepi:~$ '''sudo''' '''fswebcam -d /dev/video0 \'''</p>
<p>'''--no-banner -r 1280x720 -S 5 ./image.jpg'''</p></li></ol>
+
<p>'''--no-banner -r 1280x720 -S 5 ./image.jpg'''</p>
 +
|}
 +
</li></ol>
 +
</li>
 +
<li><p>In the server version of the Linux system, you can use the scp command to transfer the taken pictures to the Ubuntu PC for mirror viewing after taking pictures</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''scp image.jpg [mailto:test@192.168.1.55:/home/test test@192.168.1.55:/home/test] (Modify the IP address and path according to the actual situation)'''</p>
 +
|}
 
</li>
 
</li>
<li><p>In the server version of the Linux system, you can use the scp &gt; command to transfer the taken pictures to the Ubuntu PC for &gt; mirror viewing after taking pictures</p>
+
<li><p>In the desktop version of the Linux system, you can directly view the captured pictures through the HDMI display</p></li></ol>
<p>orangepi@orangepi:~$ '''scp image.jpg [mailto:test@192.168.1.55:/home/test test@192.168.1.55:/home/test] (Modify the IP address and path according to the actual situation)'''</p></li>
 
<li><p>In the desktop version of the Linux system, you can directly &gt; view the captured pictures through the HDMI display</p></li></ol>
 
 
</li></ol>
 
</li></ol>
  
 
<span id="audio-test"></span>
 
<span id="audio-test"></span>
 +
 
== Audio test ==
 
== Audio test ==
  
Line 2,960: Line 3,659:
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First open the file manager</p>
 
<li><p>First open the file manager</p>
<p>[[File:media/image246.png|357x176px]]</p></li>
+
<p>[[File:cm4-img246.png]]</p></li>
 
<li><p>Then find the following file (if there is no such audio file in the system, you can upload an audio file to the system yourself)</p>
 
<li><p>Then find the following file (if there is no such audio file in the system, you can upload an audio file to the system yourself)</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image247.jpeg|250x199px|Then find the following file]]
+
[[File:cm4-img247.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then select the audio.wav file, right-click and select open with vlc to start playing.</p>
 
<li><p>Then select the audio.wav file, right-click and select open with vlc to start playing.</p>
<p>[[File:media/image248.png|288x234px]]</p></li>
+
<p>[[File:cm4-img248.png]]</p></li>
 
<li><p>How to switch between different audio devices such as HDMI playback and headphone playback</p>
 
<li><p>How to switch between different audio devices such as HDMI playback and headphone playback</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>First open the volume control interface</p>
 
<li><p>First open the volume control interface</p>
<p>[[File:media/image249.png|308x169px]]</p></li>
+
<p>[[File:cm4-img249.png]]</p></li>
<li><p>When playing audio, the audio device options that can be used by &gt; the playback software will be displayed in '''Playback''', as &gt; shown in the figure below. Here you can set which audio device &gt; needs to be played</p>
+
<li><p>When playing audio, the audio device options that can be used by the playback software will be displayed in '''Playback''', as shown in the figure below. Here you can set which audio device needs to be played</p>
<p>[[File:media/image250.png|576x282px]]</p></li></ol>
+
<p>[[File:cm4-img250.png]]</p></li></ol>
 
</li></ol>
 
</li></ol>
  
 
<span id="how-to-use-commands-to-play-audio"></span>
 
<span id="how-to-use-commands-to-play-audio"></span>
 +
 
=== How to use commands to play audio ===
 
=== How to use commands to play audio ===
  
Line 2,985: Line 3,685:
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First insert the headphones into the headphone jack of the development board</p>
 
<li><p>First insert the headphones into the headphone jack of the development board</p>
<p>[[File:media/image251.png|466x110px]]</p></li>
+
<p>[[File:cm4-img251.png]]</p></li>
 
<li><p>Then you can use the '''aplay -l''' command to check the sound card devices supported by the Linux system. From the output below, we can see that '''card 0''' is the sound card device of rk809, which is the sound card device of the headset.</p>
 
<li><p>Then you can use the '''aplay -l''' command to check the sound card devices supported by the Linux system. From the output below, we can see that '''card 0''' is the sound card device of rk809, which is the sound card device of the headset.</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''aplay -l'''</p>
 
<p>orangepi@orangepi:~$ '''aplay -l'''</p>
 
<p>**** List of PLAYBACK Hardware Devices ****</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>
 
<p>'''card 0: rockchiprk809 [rockchip-rk809], device 0: dailink-multicodecs rk817-hifi-0 [dailink-multicodecs rk817-hifi-0]'''</p>
<p>'''Subdevices: 0/1'''</p>
+
:<p>'''Subdevices: 0/1'''</p>
<p>'''Subdevice #0: subdevice #0'''</p>
+
:<p>'''Subdevice #0: subdevice #0'''</p>
 
<p>card 1: rockchiphdmi [rockchip,hdmi], device 0: fe400000.i2s-i2s-hifi i2s-hifi-0 [fe400000.i2s-i2s-hifi i2s-hifi-0]</p>
 
<p>card 1: rockchiphdmi [rockchip,hdmi], device 0: fe400000.i2s-i2s-hifi i2s-hifi-0 [fe400000.i2s-i2s-hifi i2s-hifi-0]</p>
<p>Subdevices: 0/1</p>
+
:<p>Subdevices: 0/1</p>
<p>Subdevice #0: subdevice #0</p>
+
:<p>Subdevice #0: subdevice #0</p>
<p>Subdevice #0: subdevice #0</p></li>
+
:<p>Subdevice #0: subdevice #0</p>
 +
|}
 +
</li>
 
<li><p>Then use the '''aplay''' command to play the audio file that comes with the system. If the headset can hear the sound, it means that the hardware can be used normally.</p>
 
<li><p>Then use the '''aplay''' command to play the audio file that comes with the system. If the headset can hear the sound, it means that the hardware can be used normally.</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''aplay -D hw:0,0 /usr/share/sounds/alsa/audio.wav'''</p>
 
<p>orangepi@orangepi:~$ '''aplay -D hw:0,0 /usr/share/sounds/alsa/audio.wav'''</p>
<p>Playing WAVE 'audio.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo</p></li></ol>
+
<p>Playing WAVE 'audio.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo</p>
 +
|}
 +
</li></ol>
  
 
<span id="hdmi-audio-playback-test"></span>
 
<span id="hdmi-audio-playback-test"></span>
 +
 
==== HDMI audio playback test ====
 
==== HDMI audio playback test ====
  
Line 3,006: Line 3,717:
 
<li><p>First use a Micro HDMI to HDMI cable to connect the Orange Pi development board to the TV (other HDMI displays need to ensure that they can play audio)</p></li>
 
<li><p>First use a Micro HDMI to HDMI cable to connect the Orange Pi development board to the TV (other HDMI displays need to ensure that they can play audio)</p></li>
 
<li><p>Then check the serial number of the HDMI sound card. From the output below, you can know that the HDMI sound card is '''card 1'''</p>
 
<li><p>Then check the serial number of the HDMI sound card. From the output below, you can know that the HDMI sound card is '''card 1'''</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''aplay -l'''</p>
 
<p>orangepi@orangepi:~$ '''aplay -l'''</p>
 
<p>**** List of PLAYBACK Hardware Devices ****</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>
 
<p>card 0: rockchiprk809 [rockchip-rk809], device 0: dailink-multicodecs rk817-hifi-0 [dailink-multicodecs rk817-hifi-0]</p>
<p>Subdevices: 0/1</p>
+
:<p>Subdevices: 0/1</p>
<p>Subdevice #0: subdevice #0</p>
+
:<p>Subdevice #0: subdevice #0</p>
 
<p>'''card 1: rockchiphdmi [rockchip,hdmi], device 0: fe400000.i2s-i2s-hifi i2s-hifi-0 [fe400000.i2s-i2s-hifi i2s-hifi-0]'''</p>
 
<p>'''card 1: rockchiphdmi [rockchip,hdmi], device 0: fe400000.i2s-i2s-hifi i2s-hifi-0 [fe400000.i2s-i2s-hifi i2s-hifi-0]'''</p>
<p>'''Subdevices: 0/1'''</p>
+
:<p>'''Subdevices: 0/1'''</p>
<p>'''Subdevice #0: subdevice #0'''</p>
+
:<p>'''Subdevice #0: subdevice #0'''</p>
<p>'''Subdevice #0: subdevice #0'''</p></li>
+
:<p>'''Subdevice #0: subdevice #0'''</p>
 +
|}
 +
</li>
 
<li><p>Then use the '''aplay''' command to play the audio file that comes with the system. If the sound can be heard on the HDMI display or TV, it means that the hardware can be used normally.</p>
 
<li><p>Then use the '''aplay''' command to play the audio file that comes with the system. If the sound can be heard on the HDMI display or TV, it means that the hardware can be used normally.</p>
<p>orangepi@orangepi:~$ '''aplay -D hw:1,0 /usr/share/sounds/alsa/audio.wav'''</p></li></ol>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''aplay -D hw:<span style="color:#FF0000">1</span>,0 /usr/share/sounds/alsa/audio.wav'''</p>
 +
|}
 +
</li></ol>
  
 
<span id="how-to-test-recording-using-commands"></span>
 
<span id="how-to-test-recording-using-commands"></span>
 +
 
=== How to test recording using commands ===
 
=== How to test recording using commands ===
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>The Orange Pi CM4 development board does not have an onboard MIC, and audio can only be recorded through headphones with a MIC function. After inserting the headset with MIC function into the development board, run the following command to record an audio period through the headset.</p>
 
<li><p>The Orange Pi CM4 development board does not have an onboard MIC, and audio can only be recorded through headphones with a MIC function. After inserting the headset with MIC function into the development board, run the following command to record an audio period through the headset.</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''amixer -c 0 cset name='Capture MIC Path' 'Main Mic''''</p>
 
<p>orangepi@orangepi:~$ '''amixer -c 0 cset name='Capture MIC Path' 'Main Mic''''</p>
<p>orangepi@orangepi:~$ '''arecord -D hw:0,0 -d 5 -f cd -t wav /tmp/test.wav'''</p></li></ol>
+
<p>orangepi@orangepi:~$ '''arecord -D hw:0,0 -d 5 -f cd -t wav /tmp/test.wav'''</p>
 +
|}
 +
</li></ol>
  
 
<span id="temperature-sensor"></span>
 
<span id="temperature-sensor"></span>
 +
 
== Temperature sensor ==
 
== Temperature sensor ==
  
 
# The command to view the system temperature sensor is:
 
# The command to view the system temperature sensor is:
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sensors'''
 
orangepi@orangepi:~$ '''sensors'''
  
Line 3,037: Line 3,768:
 
Adapter: Virtual device
 
Adapter: Virtual device
  
temp1: +41.9°C (crit = +115.0°C)
+
temp1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +41.9°C (crit = +115.0°C)
  
 
gpu_thermal-virtual-0
 
gpu_thermal-virtual-0
Line 3,043: Line 3,774:
 
Adapter: Virtual device
 
Adapter: Virtual device
  
temp1: +43.8°C
+
temp1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +43.8°C
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>The command to view the current temperature of the nvme ssd solid state drive is:</p>
 
<li><p>The command to view the current temperature of the nvme ssd solid state drive is:</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''sudo smartctl -a /dev/nvme0 | grep &quot;Temperature:&quot;'''</p>
 
<p>orangepi@orangepi:~$ '''sudo smartctl -a /dev/nvme0 | grep &quot;Temperature:&quot;'''</p>
<p>Temperature: '''40 Celsius'''</p></li></ol>
+
<p>Temperature: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''<span style="color:#FF0000">40 Celsius</span>'''</p>
 +
|}
 +
</li></ol>
  
 
<span id="pin-interface-pin-description"></span>
 
<span id="pin-interface-pin-description"></span>
 +
 
== 40 Pin interface pin description ==
 
== 40 Pin interface pin description ==
  
Line 3,057: Line 3,795:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image252.png|575x109px|40 Pin interface pin]]
+
[[File:cm4-img252.png]]
  
 
</div></li>
 
</div></li>
Line 3,063: Line 3,801:
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>The following is the complete pin diagram of 40pin</p>
 
<li><p>The following is the complete pin diagram of 40pin</p>
<p>[[File:media/image253.png|575x176px]]</p></li>
+
<p>[[File:cm4-img253.png]]</p></li>
<li><p>The table below is the picture of the left half of the complete &gt; table above, so you can see it clearly</p>
+
<li><p>The table below is the picture of the left half of the complete table above, so you can see it clearly</p>
<p>[[File:media/image254.png|492x294px]]</p></li>
+
<p>[[File:cm4-img254.png]]</p></li>
<li><p>The table below is the picture of the right half of the complete &gt; table above, so you can see it clearly</p>
+
<li><p>The table below is the picture of the right half of the complete table above, so you can see it clearly</p>
<p>[[File:media/image255.png|491x305px]]</p></li></ol>
+
<p>[[File:cm4-img255.png]]</p></li></ol>
 
</li>
 
</li>
<li><p>There are a total of '''28''' GPIO ports in the 40pin interface, and the voltage of all GPIO ports is '''3.3v'''</p></li></ol>
+
<li><p>There are a total of '''<span style="color:#FF0000">28</span>''' GPIO ports in the 40pin interface, and the voltage of all GPIO ports is '''<span style="color:#FF0000">3.3v</span>'''</p></li></ol>
  
 
<span id="how-to-install-wiringop"></span>
 
<span id="how-to-install-wiringop"></span>
 +
 
== How to install wiringOP ==
 
== How to install wiringOP ==
  
'''Note that wiringOP is already pre-installed in the Linux image released by Orange Pi. Unless the wiringOP code is updated, there is no need to re-download, compile and install it, just use it directly.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that wiringOP is already pre-installed in the Linux image released by Orange Pi. Unless the wiringOP code is updated, there is no need to re-download, compile and install it, just use it directly.'''
 +
 
  
 
'''The storage path of the compiled wiringOP deb package in orangepi-build is:'''
 
'''The storage path of the compiled wiringOP deb package in orangepi-build is:'''
  
'''orangepi-build/external/cache/debs/arm64/wiringpi_x.xx.deb'''
+
'''<span style="color:blue">orangepi-build/external/cache/debs/arm64/wiringpi_x.xx.deb</span>'''
 +
 
  
'''After entering the system, you can run the gpio readall command. If you can see the following output, it means that wiringOP has been pre-installed and can be used normally.'''
+
'''After entering the system, you can run the gpio readall command. If you can see the following output, it means that wiringOP has been pre-installed and can be used normally.'''</big>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image256.png|575x352px|DGH7EEA7KFTH_@G9X9W6~SD]]
+
[[File:cm4-img256.png|center]]
  
 
</div>
 
</div>
'''WiringOP currently mainly adapts to the functions of setting GPIO port input and output, setting GPIO port output high and low levels, and setting pull-up and pull-down resistors. Functions such as hardware PWM cannot be used.'''
+
 
 +
<big>'''WiringOP currently mainly adapts to the functions of setting GPIO port input and output, setting GPIO port output high and low levels, and setting pull-up and pull-down resistors. Functions such as hardware PWM cannot be used.'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>Download the code of wiringOP</p>
 
<li><p>Download the code of wiringOP</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''sudo apt update'''</p>
 
<p>orangepi@orangepi:~$ '''sudo apt update'''</p>
 
<p>orangepi@orangepi:~$ '''sudo apt install -y git'''</p>
 
<p>orangepi@orangepi:~$ '''sudo apt install -y git'''</p>
 
<p>orangepi@orangepi:~$ '''git clone https://github.com/orangepi-xunlong/wiringOP.git -b next'''</p>
 
<p>orangepi@orangepi:~$ '''git clone https://github.com/orangepi-xunlong/wiringOP.git -b next'''</p>
<p>'''Note that Orange Pi CM4 needs to download the code of wiringOP next branch. Please don’t miss the -b next parameter.'''</p>
+
|}
<p>'''If you have problems downloading the code from GitHub, you can directly use the wiringOP source code that comes with the Linux image, and the storage location is: /usr/src/wiringOP.'''</p></li>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big><p>'''Note that Orange Pi CM4 needs to download the code of wiringOP next branch. Please don’t miss the -b next parameter.'''</p>
 +
<p>'''If you have problems downloading the code from GitHub, you can directly use the wiringOP source code that comes with the Linux image, and the storage location is: /usr/src/wiringOP.'''</p></big>
 +
|}
 +
</li>
 
<li><p>Compile and install wiringOP</p>
 
<li><p>Compile and install wiringOP</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''cd wiringOP'''</p>
 
<p>orangepi@orangepi:~$ '''cd wiringOP'''</p>
 
<p>orangepi@orangepi:~/wiringOP$ '''sudo ./build clean'''</p>
 
<p>orangepi@orangepi:~/wiringOP$ '''sudo ./build clean'''</p>
<p>orangepi@orangepi:~/wiringOP$ '''sudo ./build'''</p></li>
+
<p>orangepi@orangepi:~/wiringOP$ '''sudo ./build'''</p>
 +
|}
 +
</li>
 
<li><p>Test the output of the gpio readall command as follows</p>
 
<li><p>Test the output of the gpio readall command as follows</p>
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image256.png|575x352px|DGH7EEA7KFTH_@G9X9W6~SD]]
+
[[File:cm4-img256.png]]
  
 
</div></li></ol>
 
</div></li></ol>
  
 
<span id="pin-interface-gpio-i2c-uart-spi-and-pwm-test"></span>
 
<span id="pin-interface-gpio-i2c-uart-spi-and-pwm-test"></span>
 +
 
== 40pin interface GPIO, I2C, UART, SPI and PWM test ==
 
== 40pin interface GPIO, I2C, UART, SPI and PWM test ==
  
'''Note, if you need to set overlays to open multiple configurations at the same time, please use spaces to separate them and write them on one line as follows.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note, if you need to set overlays to open multiple configurations at the same time, please use spaces to separate them and write them on one line as follows.'''</big>
 +
 
  
 
orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''
 
orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''
  
'''overlays=spi3-m0-cs0-spidev i2c2-m1 i2c3-m0 uart7-m2 uart9-m2 pwm11-m1'''
+
'''<span style="color:#FF0000">overlays=spi3-m0-cs0-spidev i2c2-m1 i2c3-m0 uart7-m2 uart9-m2 pwm11-m1</span>'''
 +
|}
  
 
<span id="pin-gpio-port-test"></span>
 
<span id="pin-gpio-port-test"></span>
 
=== 40pin GPIO port test ===
 
=== 40pin GPIO port test ===
  
'''The Linux system released by Orange Pi has a pre-installed blink_all_gpio program, which will set all 28 GPIO ports in the 40pin to switch between high and low levels continuously.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''The Linux system released by Orange Pi has a pre-installed blink_all_gpio program, which will set all 28 GPIO ports in the 40pin to switch between high and low levels continuously.'''
 +
 
  
 
'''After running the blink_all_gpio program, when using a multimeter to measure the level of the GPIO port, you will find that the GPIO pin will switch between 0 and 3.3v continuously. Using this program we can test whether the GPIO port is working properly.'''
 
'''After running the blink_all_gpio program, when using a multimeter to measure the level of the GPIO port, you will find that the GPIO pin will switch between 0 and 3.3v continuously. Using this program we can test whether the GPIO port is working properly.'''
  
'''The way to run the blink_all_gpio program is as follows:'''
 
  
orangepi@orangepicm4:~$ '''sudo blink_all_gpio''' # Remember to add sudo permission
+
'''The way to run the blink_all_gpio program is as follows:'''</big>
 +
 
 +
orangepi@orangepicm4:~$ '''sudo blink_all_gpio''' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Remember to add sudo permission
  
[sudo] password for orangepi: # A password is required here
+
[sudo] password for orangepi: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # A password is required here
 +
|}
  
 
# There are a total of 28 GPIO ports in the 40pins of the development board that can be used. The following uses pin 7—the corresponding GPIO is GPIO4_C3——the corresponding wPi serial number is 2—as an example to demonstrate how to set the high and low levels of the GPIO port
 
# There are a total of 28 GPIO ports in the 40pins of the development board that can be used. The following uses pin 7—the corresponding GPIO is GPIO4_C3——the corresponding wPi serial number is 2—as an example to demonstrate how to set the high and low levels of the GPIO port
  
[[File:media/image257.png|575x119px]]
+
::[[File:cm4-img257.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>First set the GPIO port to output mode, where the third parameter needs to input the serial number of wPi corresponding to the pin</li></ol>
+
<li>First set the GPIO port to output mode, where the third parameter needs to input the serial number of wPi corresponding to the pin</li>
 
+
{| class="wikitable" style="width:800px;"
root@orangepi:~/wiringOP# '''gpio mode 2 out'''
+
|-
 
+
|
 +
root@orangepi:~/wiringOP# '''gpio mode <span style="color:#FF0000">2</span> out'''
 +
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then set the GPIO port to output low level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 0v, it means that the low level is set successfully.</li></ol>
+
<li>Then set the GPIO port to output low level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 0v, it means that the low level is set successfully.</li>
 
+
{| class="wikitable" style="width:800px;"
root@orangepi:~/wiringOP# '''gpio write 2 0'''
+
|-
 +
|
 +
root@orangepi:~/wiringOP# '''gpio write 2 <span style="color:#FF0000">0</span>'''
 +
|}
  
 
Use gpio readall to see that the value (V) of pin 7 has changed to 0
 
Use gpio readall to see that the value (V) of pin 7 has changed to 0
  
[[File:media/image258.png|576x119px]]
+
[[File:cm4-img258.png]]
 
+
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then set the GPIO port to output a high level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 3.3v, it means that the high level is set successfully</li></ol>
+
<li>Then set the GPIO port to output a high level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 3.3v, it means that the high level is set successfully</li>
 
+
{| class="wikitable" style="width:800px;"
root@orangepi:~/wiringOP# '''gpio write 2 1'''
+
|-
 +
|
 +
root@orangepi:~/wiringOP# '''gpio write 2 <span style="color:#FF0000">1</span>'''
 +
|}
  
 
Use gpio readall to see that the value (V) of pin 7 has changed to 1
 
Use gpio readall to see that the value (V) of pin 7 has changed to 1
  
[[File:media/image259.png|575x123px]]
+
[[File:cm4-img259.png]]
 
+
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
 
<li>The setting method of other pins is similar, just modify the serial number of wPi to the corresponding serial number of the pin</li></ol>
 
<li>The setting method of other pins is similar, just modify the serial number of wPi to the corresponding serial number of the pin</li></ol>
  
 
<span id="how-to-set-the-pull-up-and-pull-down-resistance-of-40pin-gpio-port"></span>
 
<span id="how-to-set-the-pull-up-and-pull-down-resistance-of-40pin-gpio-port"></span>
 +
 
=== How to set the pull-up and pull-down resistance of 40pin GPIO port ===
 
=== How to set the pull-up and pull-down resistance of 40pin GPIO port ===
  
'''Note that the 4 GPIO pins below the Orange Pi CM4 have an external 3.3V pull-up, so setting the pull-down is invalid, and the other pins can normally set the pull-up and pull-down resistor function'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that the 4 GPIO pins below the Orange Pi CM4 have an external 3.3V pull-up, so setting the pull-down is invalid, and the other pins can normally set the pull-up and pull-down resistor function'''</big>
  
[[File:media/image260.png|575x353px]]
+
[[File:cm4-img260.png|center]]
 +
|}
  
 
# The following takes pin 11—the corresponding GPIO is GPIO3_C6—the corresponding wPi serial number is 5—as an example to demonstrate how to set the pull-up and pull-down resistance of the GPIO port
 
# The following takes pin 11—the corresponding GPIO is GPIO3_C6—the corresponding wPi serial number is 5—as an example to demonstrate how to set the pull-up and pull-down resistance of the GPIO port
  
[[File:media/image261.png|576x160px]]
+
::[[File:cm4-img261.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>First, you need to set the GPIO port to the input mode, and the third parameter needs to be the serial number of the wPi corresponding to the input pin</li></ol>
+
<li>First, you need to set the GPIO port to the input mode, and the third parameter needs to be the serial number of the wPi corresponding to the input pin</li>
 
+
{| class="wikitable" style="width:800px;"
root@orangepi:~/wiringOP# '''gpio mode 5 in'''
+
|-
 
+
|
 +
root@orangepi:~/wiringOP# '''gpio mode <span style="color:#FF0000">5</span> in'''
 +
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>After setting to input mode, execute the following command to set the GPIO port to pull-up mode</li></ol>
+
<li>After setting to input mode, execute the following command to set the GPIO port to pull-up mode</li>
 
+
{| class="wikitable" style="width:800px;"
root@orangepi:~/wiringOP# '''gpio mode 5 up'''
+
|-
 
+
|
 +
root@orangepi:~/wiringOP# '''gpio mode <span style="color:#FF0000">5</span> up'''
 +
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then enter the following command to read the level of the GPIO port, if the level is 1, it means that the pull-up mode is set successfully</li></ol>
+
<li>Then enter the following command to read the level of the GPIO port, if the level is 1, it means that the pull-up mode is set successfully</li>
 
+
{| class="wikitable" style="width:800px;"
root@orangepi:~/wiringOP# '''gpio read 5'''
+
|-
 
+
|
'''1'''
+
root@orangepi:~/wiringOP# '''gpio read <span style="color:#FF0000">5</span>'''
  
 +
'''<span style="color:#FF0000">1</span>'''
 +
|}
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Then execute the following command to set the GPIO port to pull-down mode</li></ol>
+
<li>Then execute the following command to set the GPIO port to pull-down mode</li>
 
+
{| class="wikitable" style="width:800px;"
root@orangepi:~/wiringOP# '''gpio mode 5 down'''
+
|-
 
+
|
 +
root@orangepi:~/wiringOP# '''gpio mode <span style="color:#FF0000">5</span> down'''
 +
|}
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then enter the following command to read the level of the GPIO port, if the level is 0, the pull-down mode is set successfully</li></ol>
+
<li>Then enter the following command to read the level of the GPIO port, if the level is 0, the pull-down mode is set successfully</li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
root@orangepi:~/wiringOP# '''gpio read <span style="color:#FF0000">5</span>'''
  
root@orangepi:~/wiringOP# '''gpio read 5'''
+
'''<span style="color:#FF0000">0</span>'''
 +
|}
 +
</ol>
 +
<span id="pin-spi-test"></span>
  
'''0'''
 
 
<span id="pin-spi-test"></span>
 
 
=== 40pin SPI test ===
 
=== 40pin SPI test ===
  
 
# According to the schematic diagram of the 40pin interface, the spi available for Orange Pi CM4 is spi3
 
# According to the schematic diagram of the 40pin interface, the spi available for Orange Pi CM4 is spi3
  
[[File:media/image262.png|575x192px]]
+
::[[File:cm4-img262.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>In the linux system, the SPI in the 40 pin is closed by default, and it needs to be opened manually to use it. The detailed steps are as follows:</p>
 
<li><p>In the linux system, the SPI in the 40 pin is closed by default, and it needs to be opened manually to use it. The detailed steps are as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li></ol>
+
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then select '''System'''</li></ol>
+
<li>Then select '''System'''</li>
 
 
[[File:media/image263.png|397x205px]]
 
  
 +
[[File:cm4-img263.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then select '''Hardware'''</li></ol>
+
<li>Then select '''Hardware'''</li>
 
 
[[File:media/image264.png|389x169px]]
 
  
 +
[[File:cm4-img264.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the SPI configuration you want to open</li></ol>
+
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the SPI configuration you want to open</li>
 
 
[[File:media/image265.png|393x244px]]
 
  
 +
[[File:cm4-img265.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Save&gt;'''Save</li></ol>
+
<li>Then select '''&lt;Save&gt;'''Save</li>
 
 
[[File:media/image266.png|396x161px]]
 
  
 +
[[File:cm4-img266.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>Then select'''&lt;Back&gt;'''</li></ol>
+
<li>Then select'''&lt;Back&gt;'''</li>
 
 
[[File:media/image267.png|393x158px]]
 
  
 +
[[File:cm4-img267.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
<li>Then select'''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</li></ol>
+
<li>Then select'''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</li>
 
 
[[File:media/image268.png|332x146px]]
 
  
 +
[[File:cm4-img268.png]]
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>After restarting, enter the system to check whether there is a '''spidev3.0''' device node in the Linux system. If it exists, it means that SPI3 has been set up and can be used directly</li></ol>
+
<li>After restarting, enter the system to check whether there is a '''spidev3.0''' device node in the Linux system. If it exists, it means that SPI3 has been set up and can be used directly</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''ls /dev/spidev3.0'''
 
orangepi@orangepi:~$ '''ls /dev/spidev3.0'''
  
 
/dev/spidev3.0
 
/dev/spidev3.0
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Do not short-circuit the mosi and miso pins of SPI3 first, and the output result of running spidev_test is as follows, you can see that the data of TX and RX are inconsistent</li></ol>
+
<li>Do not short-circuit the mosi and miso pins of SPI3 first, and the output result of running spidev_test is as follows, you can see that the data of TX and RX are inconsistent</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev3.0'''
 
orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev3.0'''
  
Line 3,262: Line 4,072:
 
max speed: 500000 Hz (500 KHz)
 
max speed: 500000 Hz (500 KHz)
  
TX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
+
TX | FF FF FF FF FF FF '''<span style="color:#FF0000">40 00 00 00 00 95</span>''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
 
 
RX | FF FF FF FF FF FF '''FF FF FF FF FF FF''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ............................….
 
  
 +
RX | FF FF FF FF FF FF '''<span style="color:#FF0000">FF FF FF FF FF FF</span>''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ............................….
 +
|}
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Then short-circuit the two pins of mosi (pin 19 in the 40pin interface) and miso (pin 21 in the 40pin interface) of SPI3 and run the output of spidev_test as follows, you can see the sending and receiving same data</li></ol>
+
<li>Then short-circuit the two pins of mosi (pin 19 in the 40pin interface) and miso (pin 21 in the 40pin interface) of SPI3 and run the output of spidev_test as follows, you can see the sending and receiving same data</li>
 
 
[[File:media/image269.png|479x109px]]
 
  
 +
[[File:cm4-img269.png]]
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev3.0'''
 
orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev3.0'''
  
Line 3,279: Line 4,092:
 
max speed: 500000 Hz (500 KHz)
 
max speed: 500000 Hz (500 KHz)
  
TX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
+
TX | FF FF FF FF FF FF '''<span style="color:#FF0000">40 00 00 00 00 95</span>''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
  
RX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
+
RX | FF FF FF FF FF FF '''<span style="color:#FF0000">40 00 00 00 00 95</span>''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.
 +
|}
 +
</ol>
 +
<span id="pin-i2c-test"></span>
  
<span id="pin-i2c-test"></span>
 
 
=== 40pin I2C test ===
 
=== 40pin I2C test ===
  
 
# As can be seen from the table below, the available i2c for Orange Pi CM4 is i2c2, i2c3 and i2c4, a total of three sets of i2c buses
 
# As can be seen from the table below, the available i2c for Orange Pi CM4 is i2c2, i2c3 and i2c4, a total of three sets of i2c buses
  
[[File:media/image270.png|576x174px]]
+
::[[File:cm4-img270.png]]
  
'''As can be seen from the above table, i2c4_m0 and spi3_m0 are multiplexed pins, and both cannot be opened at the same time. i2c3_m0 and uart3_m0 are also multiplexed pins, and both cannot be opened at the same time'''
+
::{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''As can be seen from the above table, i2c4_m0 and spi3_m0 are multiplexed pins, and both cannot be opened at the same time. i2c3_m0 and uart3_m0 are also multiplexed pins, and both cannot be opened at the same time'''</big>
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>In the linux system, the I2C bus in the 40 pin is closed by default, and it needs to be opened manually to use it. The detailed steps are as follows:</p>
 
<li><p>In the linux system, the I2C bus in the 40 pin is closed by default, and it needs to be opened manually to use it. The detailed steps are as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li></ol>
+
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then select '''System'''</li></ol>
+
<li>Then select '''System'''</li>
 
 
[[File:media/image263.png|397x205px]]
 
  
 +
[[File:cm4-img263.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then select '''Hardware'''</li></ol>
+
<li>Then select '''Hardware'''</li>
 
 
[[File:media/image264.png|385x167px]]
 
  
 +
[[File:cm4-img264.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the I2C configuration you want to open</li></ol>
+
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the I2C configuration you want to open</li>
 
 
[[File:media/image271.png|380x53px]]
 
  
 +
[[File:cm4-img271.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Save&gt;''' Save</li></ol>
+
<li>Then select '''&lt;Save&gt;''' Save</li>
 
 
[[File:media/image266.png|382x156px]]
 
  
 +
[[File:cm4-img266.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Back&gt;'''</li></ol>
+
<li>Then select '''&lt;Back&gt;'''</li>
 
 
[[File:media/image267.png|386x155px]]
 
  
 +
[[File:cm4-img267.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
<li>Then select'''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</li></ol>
+
<li>Then select'''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</li>
 
 
[[File:media/image268.png|254x112px]]
 
  
 +
[[File:cm4-img268.png]]
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>After starting the Linux system, first confirm that there is an i2c device node under /dev</li></ol>
+
<li>After starting the Linux system, first confirm that there is an i2c device node under /dev</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~# '''ls /dev/i2c-*'''
 
orangepi@orangepi:~# '''ls /dev/i2c-*'''
  
/dev/i2c-0 '''/dev/i2c-2''' '''/dev/i2c-3''' '''/dev/i2c-4''' /dev/i2c-6
+
/dev/i2c-0 &nbsp;&nbsp;&nbsp;&nbsp; '''/dev/i2c-2''' &nbsp;&nbsp;&nbsp;&nbsp; '''/dev/i2c-3''' &nbsp;&nbsp;&nbsp;&nbsp; '''/dev/i2c-4''' &nbsp;&nbsp;&nbsp;&nbsp; /dev/i2c-6
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then connect an i2c device to the i2c pin of the 40pin connector</li></ol>
+
<li>Then connect an i2c device to the i2c pin of the 40pin connector</li>
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"
 
|-
 
|-
 
|
 
|
| style="text-align: left;"| i2c2-m1
+
| i2c2-m1
| style="text-align: left;"| i2c3-m0
+
| i2c3-m0
| style="text-align: left;"| i2c4-m0
+
| i2c4-m0
 
|-
 
|-
 
| Sda Pin
 
| Sda Pin
| style="text-align: left;"| Corresponding to No. 3 pin
+
| Corresponding to No.3 pin
| style="text-align: left;"| Corresponding to No. 27 pin
+
| Corresponding to No.27 pin
| style="text-align: left;"| Corresponding to No. 19 pin
+
| Corresponding to No.19 pin
 
|-
 
|-
 
| Sck Pin
 
| Sck Pin
| style="text-align: left;"| Corresponding to No. 5 pin
+
| Corresponding to No.5 pin
| style="text-align: left;"| Corresponding to No. 28 pin
+
| Corresponding to No.28 pin
| style="text-align: left;"| Corresponding to No. 23 pin
+
| Corresponding to No.23 pin
 
|-
 
|-
 
| Vcc Pin
 
| Vcc Pin
| style="text-align: left;"| Corresponding to No. 1 pin
+
| Corresponding to No.1 pin
| style="text-align: left;"| Corresponding to No. 1 pin
+
| Corresponding to No.1 pin
| style="text-align: left;"| Corresponding to No. 1 pin
+
| Corresponding to No.1 pin
 
|-
 
|-
 
| Gnd Pin
 
| Gnd Pin
| style="text-align: left;"| Corresponding to No. 6 pin
+
| Corresponding to No.6 pin
| style="text-align: left;"| Corresponding to No. 6 pin
+
| Corresponding to No.6 pin
| style="text-align: left;"| Corresponding to No. 6 pin
+
| Corresponding to No.6 pin
 
|}
 
|}
 
+
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Then use the '''i2cdetect -y''' command, if the address of the connected i2c device can be detected, it means that i2c can be used normally</li></ol>
+
<li>Then use the '''i2cdetect -y''' command, if the address of the connected i2c device can be detected, it means that i2c can be used normally</li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
orangepi@orangepi:~$ sudo i2cdetect -y 2 &nbsp;&nbsp;&nbsp;&nbsp; #i2c2 command
  
orangepi@orangepi:~$ sudo i2cdetect -y 2 #i2c2 command
+
orangepi@orangepi:~$ sudo i2cdetect -y 3 &nbsp;&nbsp;&nbsp;&nbsp; #i2c3 command
  
orangepi@orangepi:~$ sudo i2cdetect -y 3 #i2c3 command
+
orangepi@orangepi:~$ sudo i2cdetect -y 4 &nbsp;&nbsp;&nbsp;&nbsp; #i2c4 command
 +
|}
  
orangepi@orangepi:~$ sudo i2cdetect -y 4 #i2c4 command
+
[[File:cm4-img272.png]]
 +
</ol>
 +
<span id="pin-uart-test"></span>
  
[[File:media/image272.png|416x164px]]
 
 
<span id="pin-uart-test"></span>
 
 
=== 40pin UART test ===
 
=== 40pin UART test ===
  
 
# As can be seen from the table below, the available uarts of Orange Pi CM4 are three sets of uart buses: uart3, uart7 and uart9
 
# As can be seen from the table below, the available uarts of Orange Pi CM4 are three sets of uart buses: uart3, uart7 and uart9
  
[[File:media/image273.png|575x176px]]
+
::[[File:cm4-img273.png]]
  
'''As can be seen from the above table, i2c3_m0 and uart3_m0 are multiplexed pins, and both cannot be opened at the same time'''
+
::{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''As can be seen from the above table, i2c3_m0 and uart3_m0 are multiplexed pins, and both cannot be opened at the same time'''</big>
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>In the linux system, the UART in the 40 pins is closed by default, and it needs to be opened manually to use. The detailed steps are as follows:</p>
 
<li><p>In the linux system, the UART in the 40 pins is closed by default, and it needs to be opened manually to use. The detailed steps are as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li></ol>
+
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then select '''System'''</li></ol>
+
<li>Then select '''System'''</li>
 
 
[[File:media/image263.png|397x205px]]
 
  
 +
[[File:cm4-img263.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then select '''Hardware'''</li></ol>
+
<li>Then select '''Hardware'''</li>
 
 
[[File:media/image264.png|403x175px]]
 
  
 +
[[File:cm4-img264.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the UART configuration you want to open</li></ol>
+
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the UART configuration you want to open</li>
 
 
[[File:media/image274.png|333x49px]]
 
  
 +
[[File:cm4-img274.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Save&gt;''' Save</li></ol>
+
<li>Then select '''&lt;Save&gt;''' Save</li>
 
 
[[File:media/image275.png|331x137px]]
 
  
 +
[[File:cm4-img275.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Back&gt;'''</li></ol>
+
<li>Then select '''&lt;Back&gt;'''</li>
 
 
[[File:media/image276.png|323x132px]]
 
  
 +
[[File:cm4-img276.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</li></ol>
+
<li>Then select '''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</li>
 
 
[[File:media/image268.png|235x103px]]
 
  
 +
[[File:cm4-img268.png]]
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>After entering the Linux system, first confirm whether there is a device node corresponding to uart under /dev</li></ol>
+
<li>After entering the Linux system, first confirm whether there is a device node corresponding to uart under /dev</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~# '''ls /dev/ttyS*'''
 
orangepi@orangepi:~# '''ls /dev/ttyS*'''
  
/dev/ttyS1 '''/dev'''/'''ttyS3 /dev/ttyS7 /dev/ttyS9'''
+
/dev/ttyS1 &nbsp;&nbsp;&nbsp;&nbsp; '''/dev/ttyS3 &nbsp;&nbsp;&nbsp;&nbsp; /dev/ttyS7 &nbsp;&nbsp;&nbsp;&nbsp; /dev/ttyS9'''
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then start to test the uart interface, first use the DuPont line to short the rx and tx of the uart interface to be tested</li></ol>
+
<li>Then start to test the uart interface, first use the DuPont line to short the rx and tx of the uart interface to be tested</li>
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"
 
|-
 
|-
 
|
 
|
| style="text-align: left;"| uart3
+
| uart3
| style="text-align: left;"| uart7
+
| uart7
| style="text-align: left;"| uart9
+
| uart9
 
|-
 
|-
 
| tx pin
 
| tx pin
| style="text-align: left;"| Corresponding to pin 28
+
| Corresponding to pin 28
| style="text-align: left;"| Corresponding to pin 16
+
| Corresponding to pin 16
| style="text-align: left;"| Corresponding to pin 29
+
| Corresponding to pin 29
 
|-
 
|-
 
| rx pin
 
| rx pin
| style="text-align: left;"| Corresponding to pin 27
+
| Corresponding to pin 27
| style="text-align: left;"| Corresponding to pin 15
+
| Corresponding to pin 15
| style="text-align: left;"| Corresponding to pin 22
+
| Corresponding to pin 22
 
|}
 
|}
  
[[File:media/image277.png|586x125px]]
+
[[File:cm4-img277.png]]
 
+
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
 
<li><p>Use the '''gpio serial''' command to test the loopback function of the serial port as shown below, if you can see the following print, it means the serial port communication is normal</p>
 
<li><p>Use the '''gpio serial''' command to test the loopback function of the serial port as shown below, if you can see the following print, it means the serial port communication is normal</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>Test UART3</li></ol>
+
<li>Test UART3</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo gpio serial /dev/ttyS3'''
 
orangepi@orangepi:~$ '''sudo gpio serial /dev/ttyS3'''
  
 
[sudo] password for orangepi: # enter password here
 
[sudo] password for orangepi: # enter password here
 +
  
 
Out: 0: -&gt; 0
 
Out: 0: -&gt; 0
Line 3,477: Line 4,318:
  
 
Out: 5: -&gt; 5^C
 
Out: 5: -&gt; 5^C
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Test UART7</li></ol>
+
<li>Test UART7</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo gpio serial /dev/ttyS7'''
 
orangepi@orangepi:~$ '''sudo gpio serial /dev/ttyS7'''
  
 
[sudo] password for orangepi: #enter password here
 
[sudo] password for orangepi: #enter password here
 +
  
 
Out: 0: -&gt; 0
 
Out: 0: -&gt; 0
Line 3,496: Line 4,341:
  
 
Out: 5: -&gt; 5^C
 
Out: 5: -&gt; 5^C
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Test UART9</li></ol>
+
<li>Test UART9</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo gpio serial /dev/ttyS9'''
 
orangepi@orangepi:~$ '''sudo gpio serial /dev/ttyS9'''
  
 
[sudo] password for orangepi: # enter password here
 
[sudo] password for orangepi: # enter password here
 +
  
 
Out: 0: -&gt; 0
 
Out: 0: -&gt; 0
Line 3,515: Line 4,364:
  
 
Out: 5: -&gt; 5^C
 
Out: 5: -&gt; 5^C
 +
|}
 +
</ol>
 +
</li></ol>
 +
<span id="pwm-test-method"></span>
  
<span id="pwm-test-method"></span>
 
 
=== PWM test method ===
 
=== PWM test method ===
  
 
# As can be seen from the table below, Orange Pi CM4 has two channels of pwm available pwm11 and pwm15
 
# As can be seen from the table below, Orange Pi CM4 has two channels of pwm available pwm11 and pwm15
  
[[File:media/image278.png|575x176px]]
+
::[[File:cm4-img278.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>In the linux system, the PWM in the 40 pin is turned off by default, and it needs to be turned on manually before it can be used. The detailed steps are as follows:</p>
 
<li><p>In the linux system, the PWM in the 40 pin is turned off by default, and it needs to be turned on manually before it can be used. The detailed steps are as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li></ol>
+
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then select'''System'''</li></ol>
+
<li>Then select'''System'''</li>
 
 
[[File:media/image279.png|416x192px]]
 
  
 +
[[File:cm4-img279.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then select '''Hardware'''</li></ol>
+
<li>Then select '''Hardware'''</li>
 
 
[[File:media/image264.png|457x198px]]
 
  
 +
[[File:cm4-img264.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the PWM configuration you want to open</li></ol>
+
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the PWM configuration you want to open</li>
 
 
[[File:media/image280.png|371x37px]]
 
  
 +
[[File:cm4-img280.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Save&gt;''' Save</li></ol>
+
<li>Then select '''&lt;Save&gt;''' Save</li>
 
 
[[File:media/image266.png|366x149px]]
 
  
 +
[[File:cm4-img266.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Back&gt;'''</li></ol>
+
<li>Then select '''&lt;Back&gt;'''</li>
 
 
[[File:media/image267.png|369x148px]]
 
  
 +
[[File:cm4-img267.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</li></ol>
+
<li>Then select '''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</li>
 
 
[[File:media/image268.png|235x103px]]
 
  
 +
[[File:cm4-img268.png]]
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>After opening a pwm, there will be an extra pwmchipX in /sys/class/pwm/ (X is a specific number), for example, after opening pwm11, check the pwmchipX under /sys/class/pwm/ one becomes two</li></ol>
+
<li>After opening a pwm, there will be an extra pwmchipX in /sys/class/pwm/ (X is a specific number), for example, after opening pwm11, check the pwmchipX under /sys/class/pwm/ one becomes two</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''ls /sys/class/pwm/'''
 
orangepi@orangepi:~$ '''ls /sys/class/pwm/'''
  
pwmchip0 pwmchip1
+
pwmchip0 &nbsp;&nbsp;&nbsp;&nbsp; pwmchip1
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Which of the above pwmchips corresponds to pwm11? Let’s first check the output of the '''ls /sys/class/pwm/ -l''' command, as shown below:</li></ol>
+
<li>Which of the above pwmchips corresponds to pwm11? Let’s first check the output of the '''ls /sys/class/pwm/ -l''' command, as shown below:</li>
 
 
[[File:media/image281.png|575x48px]]
 
  
 +
[[File:cm4-img281.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Then it can be known from the table below that the base address of the pwm11 register is fe6f0030, and then look at the output of the '''ls /sys/class/pwm/ -l''' command, you can see that pwmchip1 is linked to fe6f0030.pwm, so pwm11 corresponds to pwmchip as pwmchip1</li></ol>
+
<li>Then it can be known from the table below that the base address of the pwm11 register is fe6f0030, and then look at the output of the '''ls /sys/class/pwm/ -l''' command, you can see that pwmchip1 is linked to fe6f0030.pwm, so pwm11 corresponds to pwmchip as pwmchip1</li>
 
 
[[File:media/image282.png|426x265px]]
 
  
 +
[[File:cm4-img282.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then use the following command to make pwm11 output a 50Hz square wave (please switch to the root user first, and then execute the following command)</li></ol>
+
<li>Then use the following command to make pwm11 output a 50Hz square wave (please switch to the root user first, and then execute the following command)</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~# '''echo 0 &gt; /sys/class/pwm/pwmchip1/export'''
 
root@orangepi:~# '''echo 0 &gt; /sys/class/pwm/pwmchip1/export'''
  
Line 3,588: Line 4,448:
  
 
root@orangepi:~# '''echo 1 &gt; /sys/class/pwm/pwmchip1/pwm0/enable'''
 
root@orangepi:~# '''echo 1 &gt; /sys/class/pwm/pwmchip1/pwm0/enable'''
 +
|}
  
[[File:media/image283.png|575x346px]]
+
[[File:cm4-img283.png]]
 
+
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
 
<li>The test method of pwm11 demonstrated above is similar to other pwm test methods.</li></ol>
 
<li>The test method of pwm11 demonstrated above is similar to other pwm test methods.</li></ol>
  
 
<span id="how-to-install-and-use-wiringop-python"></span>
 
<span id="how-to-install-and-use-wiringop-python"></span>
 +
 
== How to install and use wiringOP-Python ==
 
== How to install and use wiringOP-Python ==
  
'''wiringOP-Python is the Python language version of wiringOP, which is used to operate the hardware resources of the development board, such as GPIO, I2C, SPI and UART, in the Python program.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''wiringOP-Python is the Python language version of wiringOP, which is used to operate the hardware resources of the development board, such as GPIO, I2C, SPI and UART, in the Python program.'''
  
'''In addition, please note that all the following commands are operated under the root user.'''
+
'''In addition, please note that all the following commands are operated under the <span style="color:#FF0000">root </span>user.'''</big>
 +
|}
  
 
<span id="how-to-install-wiringop-python"></span>
 
<span id="how-to-install-wiringop-python"></span>
=== 3.17.1. How to install wiringOP-Python ===
+
=== How to install wiringOP-Python ===
  
 
# First install the dependent packages
 
# First install the dependent packages
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~# '''sudo apt-get update'''
 
root@orangepi:~# '''sudo apt-get update'''
  
 
root@orangepi:~# '''sudo apt-get -y install git swig python3-dev python3-setuptools'''
 
root@orangepi:~# '''sudo apt-get -y install git swig python3-dev python3-setuptools'''
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Then use the following command to download the source code of wiringOP-Python</li></ol>
+
<li>Then use the following command to download the source code of wiringOP-Python</li>
 
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
'''Note that the following git clone--recursive command will automatically download the source code of wiringOP, because wiringOP-Python depends on wiringOP. Please make sure that the download process does not report errors due to network problems.'''
+
|-
 
+
|
'''If you have problems downloading the code from GitHub, you can directly use the wiringOP-Python source code that comes with the Linux image, and the storage location is:/usr/src/wiringOP-Python'''.
+
<big>'''Note that the following git clone--recursive command will automatically download the source code of wiringOP, because wiringOP-Python depends on wiringOP. Please make sure that the download process does not report errors due to network problems.'''
  
 +
'''If you have problems downloading the code from GitHub, you can directly use the wiringOP-Python source code that comes with the Linux image, and the storage location is:/usr/src/wiringOP-Python'''.</big>
 +
|}
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~# '''git clone --recursive https://github.com/orangepi-xunlong/wiringOP-Python -b next'''
 
root@orangepi:~# '''git clone --recursive https://github.com/orangepi-xunlong/wiringOP-Python -b next'''
  
Line 3,622: Line 4,497:
  
 
root@orangepi:~/wiringOP-Python# '''git submodule update --init --remote'''
 
root@orangepi:~/wiringOP-Python# '''git submodule update --init --remote'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then use the following command to compile wiringOP-Python and install it into the Linux system of the development board</li></ol>
+
<li>Then use the following command to compile wiringOP-Python and install it into the Linux system of the development board</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~# '''cd wiringOP-Python'''
 
root@orangepi:~# '''cd wiringOP-Python'''
  
Line 3,631: Line 4,509:
  
 
root@orangepi:~/wiringOP-Python# '''sudo python3 setup.py install'''
 
root@orangepi:~/wiringOP-Python# '''sudo python3 setup.py install'''
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then enter the following command, if there is help information output, it means that wiringOP-Python is installed successfully, press the q key to exit the help information interface</li></ol>
+
<li>Then enter the following command, if there is help information output, it means that wiringOP-Python is installed successfully, press the q key to exit the help information interface</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; help(wiringpi)&quot;'''
 
root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; help(wiringpi)&quot;'''
  
 
Help on module wiringpi:
 
Help on module wiringpi:
 +
  
 
NAME
 
NAME
  
wiringpi
+
:wiringpi
 +
 
  
 
DESCRIPTION
 
DESCRIPTION
  
# This file was automatically generated by SWIG (http://www.swig.org).
+
: # This file was automatically generated by SWIG (http://www.swig.org).
  
# Version 4.0.2
+
: # Version 4.0.2
  
#
+
: #
  
# Do not make changes to this file unless you know what you are doing--modify
+
: # Do not make changes to this file unless you know what you are doing--modify
 
 
# the SWIG interface file instead.
 
  
 +
: # the SWIG interface file instead.
 +
|}
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
 
<li><p>The steps to test whether wiringOP-Python is successfully installed under the python command line are as follows:</p>
 
<li><p>The steps to test whether wiringOP-Python is successfully installed under the python command line are as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First use the python3 command to enter the command line mode of python3</li></ol>
+
<li>First use the python3 command to enter the command line mode of python3</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
root@orangepi:~# '''python3'''
 
root@orangepi:~# '''python3'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then import the python module of wiringpi</li></ol>
+
<li>Then import the python module of wiringpi</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
&gt;&gt;&gt; '''import wiringpi;'''
 
&gt;&gt;&gt; '''import wiringpi;'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Finally, enter the following command to view the help information of wiringOP-Python, press the q key to exit the help information interface</li></ol>
+
<li>Finally, enter the following command to view the help information of wiringOP-Python, press the q key to exit the help information interface</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
&gt;&gt;&gt; '''help(wiringpi)'''
 
&gt;&gt;&gt; '''help(wiringpi)'''
  
 
Help on module wiringpi:
 
Help on module wiringpi:
 +
  
 
NAME
 
NAME
  
wiringpi
+
:wiringpi
 +
 
  
 
DESCRIPTION
 
DESCRIPTION
  
# This file was automatically generated by SWIG (http://www.swig.org).
+
: # This file was automatically generated by SWIG (http://www.swig.org).
  
# Version 4.0.2
+
: # Version 4.0.2
  
#
+
: #
  
# Do not make changes to this file unless you know what you are doing--modify
+
: # Do not make changes to this file unless you know what you are doing--modify
 +
 
 +
: # the SWIG interface file instead.
  
# the SWIG interface file instead.
 
  
 
CLASSES
 
CLASSES
  
builtins.object
+
:builtins.object
  
GPIO
+
::GPIO
  
I2C
+
::I2C
  
Serial
+
::Serial
  
nes
+
::nes
  
class GPIO(builtins.object)
 
  
| GPIO(pinmode=0)
+
:class GPIO(builtins.object)
 +
 
 +
:| GPIO(pinmode=0)
 +
 
 +
:|
  
|
 
  
 
&gt;&gt;&gt;
 
&gt;&gt;&gt;
 +
|}
 +
</ol>
 +
</li></ol>
 +
<span id="pin-gpio-port-test-1"></span>
  
<span id="pin-gpio-port-test-1"></span>
 
 
=== 40pin GPIO port test ===
 
=== 40pin GPIO port test ===
  
'''wiringOP-Python is the same as wiringOP, you can also determine which GPIO pin to operate by specifying the wPi number, because there is no command to check the wPi number in wiringOP-Python, so you can only check the board wPi number and physical Correspondence between pins.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''wiringOP-Python is the same as wiringOP, you can also determine which GPIO pin to operate by specifying the wPi number, because there is no command to check the wPi number in wiringOP-Python, so you can only check the board wPi number and physical Correspondence between pins.'''</big>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image256.png|575x352px|DGH7EEA7KFTH_@G9X9W6~SD]]
+
[[File:cm4-img256.png|center]]
  
 
</div>
 
</div>
 +
|}
 +
 
# The following takes pin No. 7—the corresponding GPIO is GPIO4_C3—the corresponding wPi number is 2—as an example to demonstrate how to set the high and low levels of the GPIO port
 
# The following takes pin No. 7—the corresponding GPIO is GPIO4_C3—the corresponding wPi number is 2—as an example to demonstrate how to set the high and low levels of the GPIO port
  
[[File:media/image257.png|575x119px]]
+
::[[File:cm4-img257.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>The steps to test directly with the command are as follows</p>
 
<li><p>The steps to test directly with the command are as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First set the GPIO port to output mode, where the first parameter of the '''pinMode''' function is the serial number of the wPi corresponding to the pin, and the second parameter is the GPIO mode</li></ol>
+
<li>First set the GPIO port to output mode, where the first parameter of the '''pinMode''' function is the serial number of the wPi corresponding to the pin, and the second parameter is the GPIO mode</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; \'''
 
root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; \'''
  
 
'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ; \'''
 
'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ; \'''
  
'''wiringpi.pinMode(2, GPIO.OUTPUT) ; &quot;'''
+
'''wiringpi.pinMode(<span style="color:#FF0000">2, GPIO.OUTPUT</span>) ; &quot;'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then set the GPIO port to output low level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 0v, it means that the low level is set successfully.</li></ol>
+
<li>Then set the GPIO port to output low level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 0v, it means that the low level is set successfully.</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; \'''
 
root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; \'''
  
 
'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''
 
'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''
  
'''wiringpi.digitalWrite(2, GPIO.LOW)&quot;'''
+
'''wiringpi.digitalWrite(<span style="color:#FF0000">2, GPIO.LOW</span>)&quot;'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then set the GPIO port to output a high level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 3.3v, it means that the high level is set successfully.</li></ol>
+
<li>Then set the GPIO port to output a high level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 3.3v, it means that the high level is set successfully.</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; \'''
 
root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; \'''
  
 
'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''
 
'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''
  
'''wiringpi.digitalWrite(2, GPIO.HIGH)&quot;'''
+
'''wiringpi.digitalWrite(<span style="color:#FF0000">2, GPIO.HIGH</span>)&quot;'''
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
 
<li><p>The steps to test in the python3 command line are as follows:</p>
 
<li><p>The steps to test in the python3 command line are as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First use the python3 command to enter the command line mode of python3</li></ol>
+
<li>First use the python3 command to enter the command line mode of python3</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
root@orangepi:~# '''python3'''
 
root@orangepi:~# '''python3'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then import the python module of wiringpi</li></ol>
+
<li>Then import the python module of wiringpi</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
&gt;&gt;&gt; '''import wiringpi'''
 
&gt;&gt;&gt; '''import wiringpi'''
  
 
&gt;&gt;&gt; '''from wiringpi import GPIO'''
 
&gt;&gt;&gt; '''from wiringpi import GPIO'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then set the GPIO port to output mode, where the first parameter of the '''pinMode''' function is the serial number of the wPi corresponding to the pin, and the second parameter is the GPIO mode</li></ol>
+
<li>Then set the GPIO port to output mode, where the first parameter of the '''pinMode''' function is the serial number of the wPi corresponding to the pin, and the second parameter is the GPIO mode</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
&gt;&gt;&gt; '''wiringpi.wiringPiSetup()'''
 
&gt;&gt;&gt; '''wiringpi.wiringPiSetup()'''
  
 
0
 
0
  
&gt;&gt;&gt; '''wiringpi.pinMode(2, GPIO.OUTPUT)'''
+
&gt;&gt;&gt; '''wiringpi.pinMode(<span style="color:#FF0000">2, GPIO.OUTPUT</span>)'''
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then set the GPIO port to output a low level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 0v, it means that the low level is set successfully.</li></ol>
+
<li>Then set the GPIO port to output a low level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 0v, it means that the low level is set successfully.</li>
 
+
{| class="wikitable" style="width:800px;"
&gt;&gt;&gt; '''wiringpi.digitalWrite(2, GPIO.LOW)'''
+
|-
 
+
|
 +
&gt;&gt;&gt; '''wiringpi.digitalWrite(<span style="color:#FF0000">2, GPIO.LOW</span>)'''
 +
|}
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Then set the GPIO port to output a high level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 3.3v, it means that the high level is set successfully.</li></ol>
+
<li>Then set the GPIO port to output a high level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 3.3v, it means that the high level is set successfully.</li>
 
+
{| class="wikitable" style="width:800px;"
&gt;&gt;&gt; '''wiringpi.digitalWrite(2, GPIO.HIGH)'''
+
|-
 
+
|
 +
&gt;&gt;&gt; '''wiringpi.digitalWrite(<span style="color:#FF0000">2, GPIO.HIGH</span>)'''
 +
|}
 +
</ol>
 +
</li></ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>The method of setting GPIO high and low levels in the python code by wiringOP-Python can refer to the '''blink.py''' test program in the examples below. The '''blink.py''' test program will set the voltage of all GPIO ports in the 40 pins of the development board to change continuously.</li></ol>
+
<li>The method of setting GPIO high and low levels in the python code by wiringOP-Python can refer to the '''blink.py''' test program in the examples below. The '''blink.py''' test program will set the voltage of all GPIO ports in the 40 pins of the development board to change continuously.</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~/wiringOP-Python# '''cd examples'''
 
root@orangepi:~/wiringOP-Python# '''cd examples'''
  
 
root@orangepi:~/wiringOP-Python/examples# '''ls blink.py'''
 
root@orangepi:~/wiringOP-Python/examples# '''ls blink.py'''
  
'''blink.py'''
+
'''<span style="color:blue">blink.py</span>'''
  
 
root@orangepi:~/wiringOP-Python/examples'''# python3 blink.py'''
 
root@orangepi:~/wiringOP-Python/examples'''# python3 blink.py'''
 +
|}
 +
</ol>
 +
<span id="pin-spi-test-1"></span>
  
<span id="pin-spi-test-1"></span>
 
 
=== 40pin SPI test ===
 
=== 40pin SPI test ===
  
 
# According to the schematic diagram of the 40pin interface, the spi available for Orange Pi CM4 is spi3
 
# According to the schematic diagram of the 40pin interface, the spi available for Orange Pi CM4 is spi3
  
[[File:media/image262.png|575x192px]]
+
::[[File:cm4-img262.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>In the linux system, the SPI in the 40 pin is closed by default, and it needs to be opened manually to use it. The detailed steps are as follows:</p>
 
<li><p>In the linux system, the SPI in the 40 pin is closed by default, and it needs to be opened manually to use it. The detailed steps are as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li></ol>
+
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then select '''System'''</li></ol>
+
<li>Then select '''System'''</li>
 
 
[[File:media/image263.png|397x205px]]
 
  
 +
[[File:cm4-img263.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then select '''Hardware'''</li></ol>
+
<li>Then select '''Hardware'''</li>
 
 
[[File:media/image264.png|389x169px]]
 
  
 +
[[File:cm4-img264.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the SPI configuration you want to open</li></ol>
+
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the SPI configuration you want to open</li>
 
 
[[File:media/image265.png|393x244px]]
 
  
 +
[[File:cm4-img265.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Save&gt;'''Save</li></ol>
+
<li>Then select '''&lt;Save&gt;'''Save</li>
 
 
[[File:media/image266.png|396x161px]]
 
  
 +
[[File:cm4-img266.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Back&gt;'''</li></ol>
+
<li>Then select '''&lt;Back&gt;'''</li>
 
 
[[File:media/image267.png|393x158px]]
 
  
 +
[[File:cm4-img267.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
<li>Then select'''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</li></ol>
+
<li>Then select'''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</li>
 
 
[[File:media/image268.png|332x146px]]
 
  
 +
[[File:cm4-img268.png]]
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>First check whether there is a '''spidev3.0''' device node in the Linux system. If it exists, it means that SPI3 has been set up and can be used directly</li></ol>
+
<li>First check whether there is a '''spidev3.0''' device node in the Linux system. If it exists, it means that SPI3 has been set up and can be used directly</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''ls /dev/spidev3.0'''
 
orangepi@orangepi:~$ '''ls /dev/spidev3.0'''
  
 
/dev/spidev3.0
 
/dev/spidev3.0
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then you can use the '''spidev_test.py''' program in the examples to test the loopback function of the SPI. The '''spidev_test.py''' program needs to specify the following two parameters:</li></ol>
+
<li>Then you can use the '''spidev_test.py''' program in the examples to test the loopback function of the SPI. The '''spidev_test.py''' program needs to specify the following two parameters:</li>
 
 
a. -- '''channel''': Specify the channel number of SPI
 
  
b. -- '''port''': Specify the port number of SPI
+
:a. -- '''channel''': Specify the channel number of SPI
  
 +
:b. -- '''port''': Specify the port number of SPI
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Do not short-circuit the mosi and miso pins of SPI3, the output of running spidev_test.py is as follows, you can see that the data of TX and RX are inconsistent</li></ol>
+
<li>Do not short-circuit the mosi and miso pins of SPI3, the output of running spidev_test.py is as follows, you can see that the data of TX and RX are inconsistent</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~/wiringOP-Python# '''cd examples'''
 
root@orangepi:~/wiringOP-Python# '''cd examples'''
  
Line 3,874: Line 4,814:
 
Opening device /dev/spidev3.0
 
Opening device /dev/spidev3.0
  
TX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
+
TX | FF FF FF FF FF FF '''<span style="color:#FF0000">40 00 00 00 00 95</span>''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
 
 
RX | FF FF FF FF FF FF '''FF FF FF FF FF FF''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |.............….|
 
  
 +
RX | FF FF FF FF FF FF '''<span style="color:#FF0000">FF FF FF FF FF FF</span>''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |.............….|
 +
|}
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then use the Dupont wire to short-circuit the two pins of txd (pin 19 in the 40pin interface) and rxd (pin 21 in the 40pin interface) of SPI3 and then run the output of spidev_test.py as follows, you can see The data sent and received are the same, indicating that the SPI3 loopback test is normal</li></ol>
+
<li>Then use the Dupont wire to short-circuit the two pins of txd (pin 19 in the 40pin interface) and rxd (pin 21 in the 40pin interface) of SPI3 and then run the output of spidev_test.py as follows, you can see The data sent and received are the same, indicating that the SPI3 loopback test is normal</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~/wiringOP-Python# '''cd examples'''
 
root@orangepi:~/wiringOP-Python# '''cd examples'''
  
Line 3,893: Line 4,836:
 
Opening device /dev/spidev3.0
 
Opening device /dev/spidev3.0
  
TX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
+
TX | FF FF FF FF FF FF '''<span style="color:#FF0000">40 00 00 00 00 95</span>''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
  
RX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
+
RX | FF FF FF FF FF FF '''<span style="color:#FF0000">40 00 00 00 00 95</span>''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
 +
|}
 +
</ol>
 +
<span id="pin-i2c-test-1"></span>
  
<span id="pin-i2c-test-1"></span>
 
 
=== 40pin I2C test ===
 
=== 40pin I2C test ===
  
 
# As can be seen from the table below, the available i2c for Orange Pi CM4 is i2c2, i2c3 and i2c4, a total of three sets of i2c buses
 
# As can be seen from the table below, the available i2c for Orange Pi CM4 is i2c2, i2c3 and i2c4, a total of three sets of i2c buses
  
[[File:media/image270.png|576x174px]]
+
::[[File:cm4-img270.png]]
  
'''As can be seen from the above table, i2c4_m0 and spi3_m0 are multiplexed pins, and both cannot be opened at the same time. i2c3_m0 and uart3_m0 are also multiplexed pins, and both cannot be opened at the same time'''
+
::{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''As can be seen from the above table, i2c4_m0 and spi3_m0 are multiplexed pins, and both cannot be opened at the same time. i2c3_m0 and uart3_m0 are also multiplexed pins, and both cannot be opened at the same time'''</big>
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>In the linux system, the I2C bus in the 40 pin is closed by default, and it needs to be opened manually to use it. The detailed steps are as follows:</p>
 
<li><p>In the linux system, the I2C bus in the 40 pin is closed by default, and it needs to be opened manually to use it. The detailed steps are as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li></ol>
+
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then select '''System'''</li></ol>
+
<li>Then select '''System'''</li>
 
 
[[File:media/image263.png|397x205px]]
 
  
 +
[[File:cm4-img263.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then select '''Hardware'''</li></ol>
+
<li>Then select '''Hardware'''</li>
 
 
[[File:media/image264.png|385x167px]]
 
  
 +
[[File:cm4-img264.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the I2C configuration you want to open</li></ol>
+
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the I2C configuration you want to open</li>
 
 
[[File:media/image271.png|380x53px]]
 
  
 +
[[File:cm4-img271.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Save&gt;''' Save</li></ol>
+
<li>Then select '''&lt;Save&gt;''' Save</li>
 
 
[[File:media/image266.png|382x156px]]
 
  
 +
[[File:cm4-img266.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Back&gt;'''</li></ol>
+
<li>Then select '''&lt;Back&gt;'''</li>
 
 
[[File:media/image267.png|386x155px]]
 
  
 +
[[File:cm4-img267.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<li><p>Then select '''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</p>
 
<li><p>Then select '''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</p>
<p>[[File:media/image268.png|254x112px]]</p></li></ol>
+
<p>[[File:cm4-img268.png]]</p></li></ol>
 
+
</li></ol>
<!-- -->
 
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>After starting the Linux system, first confirm that there is an i2c device node under /dev</li></ol>
+
<li>After starting the Linux system, first confirm that there is an i2c device node under /dev</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~# '''ls /dev/i2c-*'''
 
orangepi@orangepi:~# '''ls /dev/i2c-*'''
  
/dev/i2c-0 '''/dev/i2c-2''' '''/dev/i2c-3''' '''/dev/i2c-4''' /dev/i2c-6
+
/dev/i2c-0 &nbsp;&nbsp;&nbsp;&nbsp; '''/dev/i2c-2''' &nbsp;&nbsp;&nbsp;&nbsp; '''/dev/i2c-3''' &nbsp;&nbsp;&nbsp;&nbsp; '''/dev/i2c-4''' &nbsp;&nbsp;&nbsp;&nbsp; /dev/i2c-6
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then connect an i2c device to the i2c pin of the 40pin connector, here we take the ds1307 RTC module as an example</li></ol>
+
<li>Then connect an i2c device to the i2c pin of the 40pin connector, here we take the ds1307 RTC module as an example</li>
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"  
 
|-
 
|-
 
|
 
|
| style="text-align: left;"| i2c2-m1
+
| i2c2-m1
| style="text-align: left;"| i2c3-m0
+
| i2c3-m0
| style="text-align: left;"| i2c4-m0
+
| i2c4-m0
 
|-
 
|-
 
| Sda pin
 
| Sda pin
| style="text-align: left;"| Corresponding to pin 3
+
| Corresponding to pin 3
| style="text-align: left;"| Corresponding to pin 27
+
| Corresponding to pin 27
| style="text-align: left;"| Corresponding to pin 19
+
| Corresponding to pin 19
 
|-
 
|-
 
| Sck pin
 
| Sck pin
| style="text-align: left;"| Corresponding to pin 5
+
| Corresponding to pin 5
| style="text-align: left;"| Corresponding to pin 28
+
| Corresponding to pin 28
| style="text-align: left;"| Corresponding to pin 28
+
| Corresponding to pin 28
 
|-
 
|-
 
| Vcc pin
 
| Vcc pin
| style="text-align: left;"| Corresponding to pin 1
+
| Corresponding to pin 1
| style="text-align: left;"| Corresponding to pin 1
+
| Corresponding to pin 1
| style="text-align: left;"| Corresponding to pin 1
+
| Corresponding to pin 1
 
|-
 
|-
 
| Gnd pin
 
| Gnd pin
| style="text-align: left;"| Corresponding to pin 6
+
| Corresponding to pin 6
| style="text-align: left;"| Corresponding to pin 6
+
| Corresponding to pin 6
| style="text-align: left;"| Corresponding to pin 6
+
| Corresponding to pin 6
 
|}
 
|}
  
[[File:media/image284.png|180x153px]]
+
[[File:cm4-img284.png]]
 
+
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Then use the '''i2cdetect -y''' command, if the address of the connected i2c device can be detected, it means that i2c can be used normally</li></ol>
+
<li>Then use the '''i2cdetect -y''' command, if the address of the connected i2c device can be detected, it means that i2c can be used normally</li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
orangepi@orangepi:~$ sudo i2cdetect -y 2 &nbsp;&nbsp;&nbsp;&nbsp; #i2c2 command
  
orangepi@orangepi:~$ sudo i2cdetect -y 2 #i2c2 command
+
orangepi@orangepi:~$ sudo i2cdetect -y 3 &nbsp;&nbsp;&nbsp;&nbsp; #i2c3 command
  
orangepi@orangepi:~$ sudo i2cdetect -y 3 #i2c3 command
+
orangepi@orangepi:~$ sudo i2cdetect -y 4 &nbsp;&nbsp;&nbsp;&nbsp; #i2c4 command
 
+
|}
orangepi@orangepi:~$ sudo i2cdetect -y 4 #i2c4 command
 
 
 
[[File:media/image272.png|416x164px]]
 
  
 +
[[File:cm4-img272.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then you can run the '''ds1307.py''' test program in the '''examples'''to read the RTC time</li></ol>
+
<li>Then you can run the '''ds1307.py''' test program in the '''examples''' to read the RTC time</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~/wiringOP-Python# '''cd examples'''
 
root@orangepi:~/wiringOP-Python# '''cd examples'''
  
Line 4,013: Line 4,971:
  
 
exit
 
exit
 +
|}
 +
</ol>
 +
<span id="pin-uart-test-1"></span>
  
<span id="pin-uart-test-1"></span>
 
 
=== 40pin UART test ===
 
=== 40pin UART test ===
  
 
# As can be seen from the table below, the available uarts of Orange Pi CM4 are three sets of uart buses: uart3, uart7 and uart9
 
# As can be seen from the table below, the available uarts of Orange Pi CM4 are three sets of uart buses: uart3, uart7 and uart9
  
[[File:media/image273.png|575x176px]]
+
::[[File:cm4-img273.png]]
  
'''As can be seen from the above table, i2c3_m0 and uart3_m0 are multiplexed pins, and both cannot be opened at the same time'''
+
::{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''As can be seen from the above table, i2c3_m0 and uart3_m0 are multiplexed pins, and both cannot be opened at the same time'''</big>
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>In the linux system, the UART in the 40 pins is closed by default, and it needs to be opened manually to use. The detailed steps are as follows:</p>
 
<li><p>In the linux system, the UART in the 40 pins is closed by default, and it needs to be opened manually to use. The detailed steps are as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li></ol>
+
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then select '''System'''</li></ol>
+
<li>Then select '''System'''</li>
 
 
[[File:media/image263.png|397x205px]]
 
  
 +
[[File:cm4-img263.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then select '''Hardware'''</li></ol>
+
<li>Then select '''Hardware'''</li>
 
 
[[File:media/image264.png|403x175px]]
 
  
 +
[[File:cm4-img264.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the UART configuration you want to open</li></ol>
+
<li>Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the UART configuration you want to open</li>
 
 
[[File:media/image274.png|333x49px]]
 
  
 +
[[File:cm4-img274.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Then select'''&lt;Save&gt;''' Save</li></ol>
+
<li>Then select'''&lt;Save&gt;''' Save</li>
 
 
[[File:media/image275.png|331x137px]]
 
  
 +
[[File:cm4-img275.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Back&gt;'''</li></ol>
+
<li>Then select '''&lt;Back&gt;'''</li>
 
 
[[File:media/image276.png|323x132px]]
 
  
 +
[[File:cm4-img276.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
<li>Then select'''&lt;Reboot&gt;'''Restart the system for the configuration to take effect</li></ol>
+
<li>Then select'''&lt;Reboot&gt;'''Restart the system for the configuration to take effect</li>
 
 
[[File:media/image268.png|235x103px]]
 
  
 +
[[File:cm4-img268.png]]
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>After entering the Linux system, first confirm whether there is a device node corresponding to uart under /dev</li></ol>
+
<li>After entering the Linux system, first confirm whether there is a device node corresponding to uart under /dev</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~# '''ls /dev/ttyS*'''
 
orangepi@orangepi:~# '''ls /dev/ttyS*'''
  
/dev/ttyS1 '''/dev'''/'''ttyS3 /dev/ttyS7 /dev/ttyS9'''
+
/dev/ttyS1 &nbsp;&nbsp;&nbsp;&nbsp; '''/dev/ttyS3 &nbsp;&nbsp;&nbsp;&nbsp; /dev/ttyS7 &nbsp;&nbsp;&nbsp;&nbsp; /dev/ttyS9'''
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then start to test the uart interface, first use the DuPont line to short the rx and tx of the uart interface to be tested</li></ol>
+
<li>Then start to test the uart interface, first use the DuPont line to short the rx and tx of the uart interface to be tested</li>
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"  
 
|-
 
|-
 
|
 
|
| style="text-align: left;"| uart3
+
| uart3
| style="text-align: left;"| uart7
+
| uart7
| style="text-align: left;"| uart9
+
| uart9
 
|-
 
|-
 
| tx pin
 
| tx pin
| style="text-align: left;"| Corresponding to pin 28
+
| Corresponding to pin 28
| style="text-align: left;"| Corresponding to pin 16
+
| Corresponding to pin 16
| style="text-align: left;"| Corresponding to pin 29
+
| Corresponding to pin 29
 
|-
 
|-
 
| rx pin
 
| rx pin
| style="text-align: left;"| Corresponding to pin 27
+
| Corresponding to pin 27
| style="text-align: left;"| Corresponding to pin 15
+
| Corresponding to pin 15
| style="text-align: left;"| Corresponding to pin 22
+
| Corresponding to pin 22
 
|}
 
|}
  
[[File:media/image277.png|585x125px]]
+
[[File:cm4-img277.png]]
 
+
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
 
<li><p>Use the '''serialTest.py''' program in the examples to test the loopback function of the serial port as shown below. If you can see the following print, it means that the serial port communication is normal</p>
 
<li><p>Use the '''serialTest.py''' program in the examples to test the loopback function of the serial port as shown below. If you can see the following print, it means that the serial port communication is normal</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>Test UART3</li></ol>
+
<li>Test UART3</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device \'''
 
root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device \'''
  
Line 4,112: Line 5,083:
  
 
exit
 
exit
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Test UART7</li></ol>
+
<li>Test UART7</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device \'''
 
root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device \'''
  
Line 4,131: Line 5,105:
  
 
exit
 
exit
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Test UART9</li></ol>
+
<li>Test UART9</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device \'''
 
root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device \'''
  
Line 4,150: Line 5,127:
  
 
exit
 
exit
 +
|}
 +
</ol>
 +
</li></ol>
 +
<span id="hardware-watchdog-test"></span>
  
<span id="hardware-watchdog-test"></span>
 
 
== Hardware watchdog test ==
 
== Hardware watchdog test ==
  
<blockquote>The watchdog_test program is pre-installed in the Linux system released by Orange Pi, which can be tested directly.
+
The watchdog_test program is pre-installed in the Linux system released by Orange Pi, which can be tested directly.
</blockquote>
+
 
 +
 
 
The method to run the watchdog_test program is as follows:
 
The method to run the watchdog_test program is as follows:
  
<blockquote>a. The second parameter 10 indicates the counting time of the watchdog. If the dog is not fed within this time, the system will restart
+
 
 +
a. The second parameter 10 indicates the counting time of the watchdog. If the dog is not fed within this time, the system will restart
  
 
b. We can feed the dog by pressing any key on the keyboard (except ESC). After feeding the dog, the program will print a line of keep alive to indicate that the dog is fed successfully
 
b. We can feed the dog by pressing any key on the keyboard (except ESC). After feeding the dog, the program will print a line of keep alive to indicate that the dog is fed successfully
</blockquote>
+
 
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo watchdog_test 10'''
 
orangepi@orangepi:~$ '''sudo watchdog_test 10'''
  
Line 4,185: Line 5,170:
  
 
keep alive
 
keep alive
 +
|}
  
 
<span id="check-the-serial-number-of-rk3566-chip"></span>
 
<span id="check-the-serial-number-of-rk3566-chip"></span>
 +
 
== Check the serial number of RK3566 chip ==
 
== Check the serial number of RK3566 chip ==
  
 
The command to view the serial number of the RK3566 chip is as follows. The serial number of each chip is different, so the serial number can be used to distinguish multiple development boards.
 
The command to view the serial number of the RK3566 chip is as follows. The serial number of each chip is different, so the serial number can be used to distinguish multiple development boards.
  
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''cat_serial.sh'''
 
orangepi@orangepi:~$ '''cat_serial.sh'''
  
Serial : '''8fa18eaf489041f0'''
+
Serial : '''<span style="color:blue">8fa18eaf489041f0</span>'''
 +
|}
  
 
<span id="how-to-install-docker"></span>
 
<span id="how-to-install-docker"></span>
 +
 
== How to install Docker ==
 
== How to install Docker ==
  
 
# The linux image provided by Orange Pi has pre-installed Docker, but the Docker service is not enabled by default
 
# The linux image provided by Orange Pi has pre-installed Docker, but the Docker service is not enabled by default
# Use the '''enable_docker.sh'''script to enable the docker service, and then you can start using the docker command, and the docker service will be automatically started when the system is started next time
+
# Use the '''enable_docker.sh''' script to enable the docker service, and then you can start using the docker command, and the docker service will be automatically started when the system is started next time
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''enable_docker.sh'''
 
orangepi@orangepi:~$ '''enable_docker.sh'''
 +
|}
  
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then you can use the following command to test docker, if you can run hello-world, it means that docker can be used normally</li></ol>
+
<li>Then you can use the following command to test docker, if you can run hello-world, it means that docker can be used normally</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''docker run hello-world'''
 
orangepi@orangepi:~$ '''docker run hello-world'''
  
Line 4,218: Line 5,216:
 
Status: Downloaded newer image for hello-world:latest
 
Status: Downloaded newer image for hello-world:latest
  
'''Hello from Docker!'''
 
  
'''This message shows that your installation appears to be working correctly.'''
+
'''<span style="color:#FF0000">Hello from Docker!</span>'''
 +
 
 +
'''<span style="color:#FF0000">This message shows that your installation appears to be working correctly.</span>'''
  
 
'''.….'''
 
'''.….'''
 +
|}
 +
</ol>
 +
<span id="how-to-download-and-install-arm64-version-balenaetcher"></span>
  
<span id="how-to-download-and-install-arm64-version-balenaetcher"></span>
 
 
== How to download and install arm64 version balenaEtcher ==
 
== How to download and install arm64 version balenaEtcher ==
  
Line 4,230: Line 5,231:
 
<li><p>The download address of balenaEtcher arm64 version is:</p>
 
<li><p>The download address of balenaEtcher arm64 version is:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The download address of the deb installation package is as follows, which needs to be installed before it can be used</li></ol>
+
<li>The download address of the deb installation package is as follows, which needs to be installed before it can be used</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
[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''']
 
[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''']
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>The download address of the AppImage version that does not need to be installed is as follows:</li></ol>
+
<li>The download address of the AppImage version that does not need to be installed is as follows:</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[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''']
 
[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''']
 +
|}
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image285.png|527x211px|IMG_256]]
+
[[File:cm4-img285.png]]
  
</div>
+
</div></ol>
 +
</li></ol>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>How to install and use the deb version of balenaEtcher:</p>
 
<li><p>How to install and use the deb version of balenaEtcher:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The deb version of balenaEtcher installation command is as follows:</li></ol>
+
<li>The deb version of balenaEtcher installation command is as follows:</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo apt install -y \'''
 
orangepi@orangepi:~$ '''sudo apt install -y \'''
  
 
'''--fix-broken ./balena-etcher-electron_1.7.9+5945ab1f_arm64.deb'''
 
'''--fix-broken ./balena-etcher-electron_1.7.9+5945ab1f_arm64.deb'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>After the deb version of balenaEtcher is installed, it can be opened in the Application</li></ol>
+
<li>After the deb version of balenaEtcher is installed, it can be opened in the Application</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image87.png|507x249px|IMG_256]]
+
[[File:cm4-img87.png]]
  
 
</div>
 
</div>
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>The interface after balenaEtcher is opened is as follows:</li></ol>
+
<li>The interface after balenaEtcher is opened is as follows:</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image286.png|429x263px|IMG_256]]
+
[[File:cm4-img286.png]]
  
</div>
+
</div></ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
 
<li><p>How to use AppImage version of balenaEtcher:</p>
 
<li><p>How to use AppImage version of balenaEtcher:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First add permissions to balenaEtcher</li></ol>
+
<li>First add permissions to balenaEtcher</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~/Desktop$ '''chmod +x balenaEtcher-1.7.9+5945ab1f-arm64.AppImage'''
 
orangepi@orangepi:~/Desktop$ '''chmod +x balenaEtcher-1.7.9+5945ab1f-arm64.AppImage'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then select the AppImage version balenaEtcher, then click the right mouse button, and then click Execute to open balenaEtcher</li></ol>
+
<li>Then select the AppImage version balenaEtcher, then click the right mouse button, and then click Execute to open balenaEtcher</li>
  
[[File:media/image287.png|145x118px]]
+
[[File:cm4-img287.png]]
 +
</ol>
 +
</li></ol>
 +
<span id="how-to-install-baota-linux-panel"></span>
  
<span id="how-to-install-baota-linux-panel"></span>
 
 
== How to install BaoTa Linux panel ==
 
== How to install BaoTa Linux panel ==
  
'''BaoTa Linux panel is a server management software that improves the efficiency of operation and maintenance. It supports one-click configuration of more than 100 server management functions such as LAMP/LNMP/cluster/monitoring/website/FTP/database/JAVA (excerpted from BaoTa Linux official website)'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 
+
|-
# First, you need to expand the size of the'''/tmp''' space. After setting, you need to '''restart the linux system of the development board'''. The command is as follows:
+
|
 +
<big>'''BaoTa Linux panel is a server management software that improves the efficiency of operation and maintenance. It supports one-click configuration of more than 100 server management functions such as LAMP/LNMP/cluster/monitoring/website/FTP/database/JAVA (excerpted from BaoTa Linux official website)'''</big>
 +
|}
  
 +
# First, you need to expand the size of the'''/tmp''' space. After setting, you need to '''<span style="color:#FF0000">restart the linux system of the development board</span>'''. The command is as follows:
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo sed -i 's/nosuid/&amp;,size=2G/' /etc/fstab'''
 
orangepi@orangepi:~$ '''sudo sed -i 's/nosuid/&amp;,size=2G/' /etc/fstab'''
  
 
orangepi@orangepi:~$ '''sudo reboot'''
 
orangepi@orangepi:~$ '''sudo reboot'''
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>After restarting, you can see that the size of '''/tmp''' space has changed to 2G</li></ol>
+
<li>After restarting, you can see that the size of '''/tmp''' space has changed to 2G</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''df -h | grep &quot;/tmp&quot;'''
 
orangepi@orangepi:~$ '''df -h | grep &quot;/tmp&quot;'''
  
tmpfs 2.0G 12K '''2.0G''' 1% /tmp
+
tmpfs &nbsp;&nbsp;&nbsp;&nbsp; 2.0G &nbsp;&nbsp;&nbsp;&nbsp; 12K &nbsp;&nbsp;&nbsp;&nbsp; '''<span style="color:#FF0000">2.0G</span>''' &nbsp;&nbsp;&nbsp;&nbsp; 1% /tmp
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then enter the following command in the Linux system to start the installation of the BaoTa</li></ol>
+
<li>Then enter the following command in the Linux system to start the installation of the BaoTa</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo install_bt_panel.sh'''
 
orangepi@orangepi:~$ '''sudo install_bt_panel.sh'''
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then the installer will remind whether to install '''Bt-Panel''' to the '''/www''' folder, and then enter y</li></ol>
+
<li>Then the installer will remind whether to install '''Bt-Panel''' to the '''/www''' folder, and then enter y</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
+----------------------------------------------------------------------
 
+----------------------------------------------------------------------
  
| Bt-WebPanel FOR CentOS/Ubuntu/Debian
+
<p>| Bt-WebPanel FOR CentOS/Ubuntu/Debian</p>
  
 
+----------------------------------------------------------------------
 
+----------------------------------------------------------------------
  
| Copyright © 2015-2099 BT-SOFT(http://www.bt.cn) All rights reserved.
+
<p>| Copyright © 2015-2099 BT-SOFT(http://www.bt.cn) All rights reserved.</p>
  
 
+----------------------------------------------------------------------
 
+----------------------------------------------------------------------
  
| The WebPanel URL will be http://SERVER_IP:8888 when installed.
+
<p>| The WebPanel URL will be http://SERVER_IP:8888 when installed.</p>
  
 
+----------------------------------------------------------------------
 
+----------------------------------------------------------------------
  
Do you want to install Bt-Panel to the /www directory now?(y/n): '''y'''
 
  
 +
<p>Do you want to install Bt-Panel to the /www directory now?(y/n): '''<span style="color:#FF0000">y</span>'''</p>
 +
|}
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>The next thing to do is to wait patiently. When you see the following print information output from the terminal, it means that the BaoTa has been installed. The entire installation process takes about 34 minutes, and there may be some differences depending on the network speed</li></ol>
+
<li>The next thing to do is to wait patiently. When you see the following print information output from the terminal, it means that the BaoTa has been installed. The entire installation process takes about 34 minutes, and there may be some differences depending on the network speed</li>
 
 
[[File:media/image288.png|576x233px]]
 
  
 +
[[File:cm4-img288.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li><p>At this time, enter the panel address shown above in the browser to open the login interface of the BaoTa Linux panel, and then enter the '''username''' and '''password''' shown in the above figure at the corresponding position to log in.<br />
+
<li><p>At this time, enter the panel address shown above in the browser to open the login interface of the BaoTa Linux panel, and then enter the '''username''' and '''password''' shown in the above figure at the corresponding position to log in.</p>
[[File:media/image289.png|575x281px]]</p></li>
 
<li><p>After successfully logging into the pagoda, the following welcome interface will pop up. First, please read the user notice in the middle and drag it to the bottom, then you can select &quot;I have agreed and read the &quot;User Agreement&quot;&quot;, and then click &quot;Enter the panel&quot; You can enter the BaoTa</p></li></ol>
 
  
[[File:media/image290.png|575x317px]]
+
[[File:cm4-img289.png]]</li>
 +
<li><p>After successfully logging into the pagoda, the following welcome interface will pop up. First, please read the user notice in the middle and drag it to the bottom, then you can select &quot;I have agreed and read the &quot;User Agreement&quot;&quot;, and then click &quot;Enter the panel&quot; You can enter the BaoTa</p></li>
  
 +
[[File:cm4-img290.png]]
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li><p>If you do not have an account, you can go to the official website of the BaoTa (http://www.aapanel.com/)to register [[File:media/image291.png|576x300px]]</p></li>
+
<li><p>If you do not have an account, you can go to the official website of the BaoTa (http://www.aapanel.com/) to register </p>
<li><p>The final displayed interface is as shown in the figure below. You can intuitively see some status information of the Linux system on the development board, such as load status, CPU usage, memory usage, and storage space usage, etc.</p></li></ol>
+
[[File:cm4-img291.png]]</li>
 
+
<li><p>The final displayed interface is as shown in the figure below. You can intuitively see some status information of the Linux system on the development board, such as load status, CPU usage, memory usage, and storage space usage, etc.</p></li>
[[File:media/image292.png|575x306px]]
 
  
 +
[[File:cm4-img292.png]]
 +
</ol>
 
<ol start="10" style="list-style-type: decimal;">
 
<ol start="10" style="list-style-type: decimal;">
<li>For more functions of the pagoda, you can refer to the following information to explore by yourself</li></ol>
+
<li>For more functions of the pagoda, you can refer to the following information to explore by yourself</li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
Manual: [http://docs.bt.cn '''http://docs.bt.cn''']
  
Manual:[http://docs.bt.cn '''http://docs.bt.cn''']
+
Forum address: [https://www.bt.cn/bbs '''https://www.bt.cn/bbs''']
  
Forum address:[https://www.bt.cn/bbs '''https://www.bt.cn/bbs''']
+
GitHub Link: '''https://github.com/aaPanel/BaoTa'''
 
+
|}
GitHub Link:'''https://github.com/aaPanel/BaoTa'''
+
</ol>
 +
<span id="setting-chinese-environment-and-installing-chinese-input-method"></span>
  
<span id="setting-chinese-environment-and-installing-chinese-input-method"></span>
 
 
== Setting Chinese environment and installing Chinese input method ==
 
== Setting Chinese environment and installing Chinese input method ==
  
'''Note, before installing the Chinese input method, please make sure that the Linux system used by the development board is a desktop system.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note, before installing the Chinese input method, please make sure that the Linux system used by the development board is a desktop system.'''</big>
 +
|}
  
 
<span id="how-to-install-debian-system"></span>
 
<span id="how-to-install-debian-system"></span>
Line 4,362: Line 5,404:
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
<li><p>First set the default '''locale'''to Chinese</p>
+
<li><p>First set the default '''locale''' to Chinese</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>Enter the following command to start the configuration '''locale'''</li></ol>
+
<li>Enter the following command to start the configuration '''locale'''</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo dpkg-reconfigure locales'''
 
orangepi@orangepi:~$ '''sudo dpkg-reconfigure locales'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then select '''zh_CN.UTF-8 UTF-8''' in the pop-up interface (move up and down through the up and down direction keys on the keyboard, select through the space bar, and finally move the cursor to'''&lt;OK&gt;'''through the Tab key, and then return to car)</li></ol>
+
<li>Then select '''zh_CN.UTF-8 UTF-8''' in the pop-up interface (move up and down through the up and down direction keys on the keyboard, select through the space bar, and finally move the cursor to '''&lt;OK&gt;''' through the Tab key, and then return to car)</li>
 
+
[[File:cm4-img293.png]]
[[File:media/image293.png|575x296px]]
+
</ol>
 
 
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then set the default '''locale''' as '''zh_CN.UTF-8'''</li></ol>
+
<li>Then set the default '''locale''' as '''zh_CN.UTF-8'''</li>
 
 
[[File:media/image294.png|575x160px]]
 
  
 +
[[File:cm4-img294.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>After exiting the interface, the '''locale''' setting will start, and the output displayed on the command line is as follows</li></ol>
+
<li>After exiting the interface, the '''locale''' setting will start, and the output displayed on the command line is as follows</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo dpkg-reconfigure locales'''
 
orangepi@orangepi:~$ '''sudo dpkg-reconfigure locales'''
  
Line 4,391: Line 5,436:
  
 
Generation complete.
 
Generation complete.
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Then open '''Input Method'''</li></ol>
+
<li>Then open '''Input Method'''</li>
 
 
[[File:media/image295.png|575x361px]]
 
  
 +
[[File:cm4-img295.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then Select '''OK'''</li></ol>
+
<li>Then Select '''OK'''</li>
 
 
[[File:media/image296.png|295x212px]]
 
  
 +
[[File:cm4-img296.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then Select '''Yes'''</li></ol>
+
<li>Then Select '''Yes'''</li>
 
 
[[File:media/image297.png|303x192px]]
 
  
 +
[[File:cm4-img297.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Then Select '''fcitx'''</li></ol>
+
<li>Then Select '''fcitx'''</li>
 
 
[[File:media/image298.png|307x220px]]
 
  
 +
[[File:cm4-img298.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then Select '''OK'''</li></ol>
+
<li>Then Select '''OK'''</li>
 
 
[[File:media/image299.png|305x216px]]
 
  
 +
[[File:cm4-img299.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li><p>'''Then restart the Linux system to make the configuration take effect'''</p></li>
+
<li><p>'''<span style="color:#FF0000">Then restart the Linux system to make the configuration take effect</span>'''</p></li>
<li><p>Then open '''Fcitx configuration'''</p></li></ol>
+
<li><p>Then open '''Fcitx configuration'''</p></li>
 
 
[[File:media/image300.png|575x376px]]
 
  
 +
[[File:cm4-img300.png]]
 +
</ol>
 
<ol start="9" style="list-style-type: decimal;">
 
<ol start="9" style="list-style-type: decimal;">
<li>Then click the + sign in the position shown in the figure below</li></ol>
+
<li>Then click the + sign in the position shown in the figure below</li>
 
 
[[File:media/image301.png|280x187px]]
 
  
 +
[[File:cm4-img301.png]]
 +
</ol>
 
<ol start="10" style="list-style-type: decimal;">
 
<ol start="10" style="list-style-type: decimal;">
<li>Then search '''Google Pinyin''' and click '''OK'''</li></ol>
+
<li>Then search '''Google Pinyin''' and click '''OK'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image302.jpeg|291x196px|C:\Users\orangepi\Desktop\用户手册插图\Pi5 Plus\未标题-10.jpg未标题-10]]
+
[[File:cm4-img302.png]]
  
</div>
+
</div></ol>
 
<ol start="11" style="list-style-type: decimal;">
 
<ol start="11" style="list-style-type: decimal;">
<li>Then bring'''Google Pinyin''' to the front</li></ol>
+
<li>Then bring'''Google Pinyin''' to the front</li>
 
 
[[File:media/image303.png|299x202px]]
 
  
[[File:media/image304.png|300x202px]]
+
[[File:cm4-img303.png]]
  
 +
[[File:cm4-img304.png]]
 +
</ol>
 
<ol start="12" style="list-style-type: decimal;">
 
<ol start="12" style="list-style-type: decimal;">
<li>Then open the '''Geany''' editor to test the Chinese input method</li></ol>
+
<li>Then open the '''Geany''' editor to test the Chinese input method</li>
 
 
[[File:media/image305.png|349x212px]]
 
  
 +
[[File:cm4-img305.png]]
 +
</ol>
 
<ol start="13" style="list-style-type: decimal;">
 
<ol start="13" style="list-style-type: decimal;">
<li>The Chinese input method test is as follows</li></ol>
+
<li>The Chinese input method test is as follows</li>
 
 
[[File:media/image306.png|575x325px]]
 
  
 +
[[File:cm4-img306.png]]
 +
</ol>
 
<ol start="14" style="list-style-type: decimal;">
 
<ol start="14" style="list-style-type: decimal;">
 
<li><p>The Chinese and English input methods can be switched through the '''Ctrl+Space''' shortcut key</p></li>
 
<li><p>The Chinese and English input methods can be switched through the '''Ctrl+Space''' shortcut key</p></li>
<li><p>If the entire system needs to be displayed in Chinese, you can set the variables in '''/etc/default/locale''' to '''zh_CN.UTF-8'''</p></li></ol>
+
<li><p>If the entire system needs to be displayed in Chinese, you can set the variables in '''/etc/default/locale''' to '''zh_CN.UTF-8'''</p></li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo vim /etc/default/locale'''
 
orangepi@orangepi:~$ '''sudo vim /etc/default/locale'''
  
# File generated by update-locale
+
<p># File generated by update-locale</p>
  
LC_MESSAGES='''zh_CN.UTF-8'''
+
LC_MESSAGES='''<span style="color:#FF0000">zh_CN.UTF-8</span>'''
  
LANG='''zh_CN.UTF-8'''
+
LANG='''<span style="color:#FF0000">zh_CN.UTF-8</span>'''
 
 
LANGUAGE='''zh_CN.UTF-8'''
 
  
 +
LANGUAGE='''<span style="color:#FF0000">zh_CN.UTF-8</span>'''
 +
|}
 +
</ol>
 
<ol start="16" style="list-style-type: decimal;">
 
<ol start="16" style="list-style-type: decimal;">
<li>Then '''restart the system''' and you can see that the system is displayed in Chinese</li></ol>
+
<li>Then '''<span style="color:#FF0000">restart the system</span>''' and you can see that the system is displayed in Chinese</li>
  
[[File:media/image307.png|576x356px]]
+
[[File:cm4-img307.png]]
 +
</ol>
 +
<span id="how-to-install-ubuntu-20.04-system"></span>
  
<span id="how-to-install-ubuntu-20.04-system"></span>
 
 
=== How to install Ubuntu 20.04 system ===
 
=== How to install Ubuntu 20.04 system ===
  
 
# Open first '''Language Support'''
 
# Open first '''Language Support'''
  
[[File:media/image308.png|575x351px]]
+
::[[File:cm4-img308.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Then find the '''Chinese (China)''' option</li></ol>
+
<li>Then find the '''Chinese (China)''' option</li>
 
 
[[File:media/image309.png|318x311px]]
 
  
 +
[[File:cm4-img309.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then please use the left mouse button to select '''Chinese (China)''' and hold it down, then drag it up to the initial position, and the display after dragging is as shown in the figure below:</li></ol>
+
<li>Then please use the left mouse button to select '''Chinese (China)''' and hold it down, then drag it up to the initial position, and the display after dragging is as shown in the figure below:</li>
  
[[File:media/image310.png|324x320px]]
+
[[File:cm4-img310.png]]
 
 
'''Note that this step is not easy to drag, please be patient and try a few more times.'''
 
  
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that this step is not easy to drag, please be patient and try a few more times.'''</big>
 +
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then select '''Apply System-Wide''' to apply the Chinese settings to the entire system</li></ol>
+
<li>Then select '''Apply System-Wide''' to apply the Chinese settings to the entire system</li>
 
 
[[File:media/image311.png|321x316px]]
 
  
 +
[[File:cm4-img311.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Then set '''Keyboard input method system''' as '''fcitx'''</li></ol>
+
<li>Then set '''Keyboard input method system''' as '''fcitx'''</li>
 
 
[[File:media/image312.png|327x320px]]
 
  
 +
[[File:cm4-img312.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li><p>'''Then restart the Linux system to make the configuration take effect'''</p></li>
+
<li><p>'''<span style="color:#FF0000">Then restart the Linux system to make the configuration take effect</span>'''</p></li>
<li><p>After re-entering the system, please choose '''not to ask me again''' in the following interface, and then please decide whether the standard folder should also be updated to Chinese according to your preferences</p></li></ol>
+
<li><p>After re-entering the system, please choose '''not to ask me again''' in the following interface, and then please decide whether the standard folder should also be updated to Chinese according to your preferences</p></li>
 
 
[[File:media/image313.png|303x247px]]
 
  
 +
[[File:cm4-img313.png]]
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>Then you can see that the desktop is displayed in Chinese</li></ol>
+
<li>Then you can see that the desktop is displayed in Chinese</li>
 
 
[[File:media/image314.png|575x383px]]
 
  
 +
[[File:cm4-img314.png]]
 +
</ol>
 
<ol start="9" style="list-style-type: decimal;">
 
<ol start="9" style="list-style-type: decimal;">
<li>Then we can open '''Geany''' to test the Chinese input method, the opening method is as shown in the figure below</li></ol>
+
<li>Then we can open '''Geany''' to test the Chinese input method, the opening method is as shown in the figure below</li>
 
 
[[File:media/image315.png|576x292px]]
 
  
 +
[[File:cm4-img315.png]]
 +
</ol>
 
<ol start="10" style="list-style-type: decimal;">
 
<ol start="10" style="list-style-type: decimal;">
<li>After opening'''Geany''', the default is English input method, we can switch to Chinese input method through '''Ctrl+Space'''shortcut key, and then we can input Chinese</li></ol>
+
<li>After opening'''Geany''', the default is English input method, we can switch to Chinese input method through '''Ctrl+Space'''shortcut key, and then we can input Chinese</li>
  
[[File:media/image316.png|575x308px]]
+
[[File:cm4-img316.png]]
 +
</ol>
 +
<span id="how-to-install-ubuntu-22.04-system"></span>
  
<span id="how-to-install-ubuntu-22.04-system"></span>
 
 
=== How to install Ubuntu 22.04 system ===
 
=== How to install Ubuntu 22.04 system ===
  
 
# Open first '''Language Support'''
 
# Open first '''Language Support'''
  
[[File:media/image308.png|575x351px]]
+
::[[File:cm4-img308.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Then find the '''Chinese (China)''' option</li></ol>
+
<li>Then find the '''Chinese (China)''' option</li>
 
 
[[File:media/image317.png|335x326px]]
 
  
 +
[[File:cm4-img317.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then please use the left mouse button to select '''Chinese (China)''' and hold it down, then drag it up to the initial position, and the display after dragging is as shown in the figure below:</li></ol>
+
<li>Then please use the left mouse button to select '''Chinese (China)''' and hold it down, then drag it up to the initial position, and the display after dragging is as shown in the figure below:</li>
  
[[File:media/image318.png|337x331px]]
+
[[File:cm4-img318.png]]
 
 
'''Note that this step is not easy to drag, please be patient and try a few more times.'''
 
  
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that this step is not easy to drag, please be patient and try a few more times.'''</big>
 +
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then select '''Apply System-Wide''' to apply the Chinese settings to the entire system</li></ol>
+
<li>Then select '''Apply System-Wide''' to apply the Chinese settings to the entire system</li>
 
 
[[File:media/image319.png|336x330px]]
 
  
 +
[[File:cm4-img319.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li><p>'''Then restart the Linux system to make the configuration take effect'''</p></li>
+
<li><p>'''<span style="color:#FF0000">Then restart the Linux system to make the configuration take effect</span>'''</p></li>
<li><p>After re-entering the system, please choose '''not to ask me again''' in the following interface, and then please decide whether the standard folder should also be updated to Chinese according to your preferences</p></li></ol>
+
<li><p>After re-entering the system, please choose '''not to ask me again''' in the following interface, and then please decide whether the standard folder should also be updated to Chinese according to your preferences</p></li>
 
 
[[File:media/image313.png|303x247px]]
 
  
 +
[[File:cm4-img313.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>Then you can see that the desktop is displayed in Chinese</li></ol>
+
<li>Then you can see that the desktop is displayed in Chinese</li>
 
 
[[File:media/image314.png|575x383px]]
 
  
 +
[[File:cm4-img314.png]]
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>Then open the Fcitx5 configuration program</li></ol>
+
<li>Then open the Fcitx5 configuration program</li>
 
 
[[File:media/image320.png|575x349px]]
 
  
 +
[[File:cm4-img320.png]]
 +
</ol>
 
<ol start="9" style="list-style-type: decimal;">
 
<ol start="9" style="list-style-type: decimal;">
<li>Then choose to use Pinyin input method</li></ol>
+
<li>Then choose to use Pinyin input method</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image321.jpeg|338x267px|C:\Users\orangepi\Desktop\用户手册插图\Pi5 Plus\未标题-11.jpg未标题-11]]
+
[[File:cm4-img321.png]]
  
</div>
+
</div></ol>
 
<ol start="10" style="list-style-type: decimal;">
 
<ol start="10" style="list-style-type: decimal;">
<li>The interface after selection is as shown below, and then click OK</li></ol>
+
<li>The interface after selection is as shown below, and then click OK</li>
 
 
[[File:media/image322.png|366x290px]]
 
  
 +
[[File:cm4-img322.png]]
 +
</ol>
 
<ol start="11" style="list-style-type: decimal;">
 
<ol start="11" style="list-style-type: decimal;">
<li>Then we can open '''Geany'''to test the Chinese input method, the opening method is as shown in the figure below</li></ol>
+
<li>Then we can open '''Geany'''to test the Chinese input method, the opening method is as shown in the figure below</li>
 
 
[[File:media/image315.png|576x292px]]
 
  
 +
[[File:cm4-img315.png]]
 +
</ol>
 
<ol start="12" style="list-style-type: decimal;">
 
<ol start="12" style="list-style-type: decimal;">
<li>After opening '''Geany''', the default is English input method, we can switch to Chinese input method through '''Ctrl+Space''' shortcut key, and then we can input Chinese</li></ol>
+
<li>After opening '''Geany''', the default is English input method, we can switch to Chinese input method through '''Ctrl+Space''' shortcut key, and then we can input Chinese</li>
  
[[File:media/image323.png|576x408px]]
+
[[File:cm4-img323.png]]
 +
</ol>
 +
<span id="how-to-remotely-log-in-to-the-desktop-of-the-linux-system"></span>
  
<span id="how-to-remotely-log-in-to-the-desktop-of-the-linux-system"></span>
 
 
== How to remotely log in to the desktop of the Linux system ==
 
== How to remotely log in to the desktop of the Linux system ==
  
 
<span id="remote-login-using-nomachine"></span>
 
<span id="remote-login-using-nomachine"></span>
=== 3.24.1. Remote login using NoMachine ===
+
=== Remote login using NoMachine ===
  
'''Please make sure that the Ubuntu or Debian system installed on the development board is a desktop version. In addition, NoMachine also provides detailed usage documents. It is strongly recommended to read this document to familiarize yourself with the use of NoMachine. The document link is as follows: Please make sure that the Ubuntu or Debian system installed on the development board is a desktop version. In addition, NoMachine also provides detailed usage documents. It is strongly recommended to read this document to familiarize yourself with the use of NoMachine. The document link is as follows:'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Please make sure that the Ubuntu or Debian system installed on the development board is a desktop version. In addition, NoMachine also provides detailed usage documents. It is strongly recommended to read this document to familiarize yourself with the use of NoMachine. The document link is as follows: Please make sure that the Ubuntu or Debian system installed on the development board is a desktop version. In addition, NoMachine also provides detailed usage documents. It is strongly recommended to read this document to familiarize yourself with the use of NoMachine. The document link is as follows:'''
  
'''https://knowledgebase.nomachine.com/DT10R00166'''
+
'''https://knowledgebase.nomachine.com/DT10R00166'''</big>
 
+
|}
'''NoMachine supports Windows, Mac, Linux, iOS and Android platforms, so we can remotely log in and control the Orange Pi development board through NoMachine on a variety of devices. The following demonstrates how to remotely log in to the Linux system desktop of the Orange Pi development board through NoMachine in Windows. For installation methods on other platforms, please refer to the official documentation of NoMachine.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 
+
|-
'''Before operation, please make sure that the Windows computer and the development board are in the same LAN, and you can log in to the Ubuntu or Debian system of the development board through ssh.'''
+
|
 +
<big>'''NoMachine supports Windows, Mac, Linux, iOS and Android platforms, so we can remotely log in and control the Orange Pi development board through NoMachine on a variety of devices. The following demonstrates how to remotely log in to the Linux system desktop of the Orange Pi development board through NoMachine in Windows. For installation methods on other platforms, please refer to the official documentation of NoMachine.'''</big>
 +
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Before operation, please make sure that the Windows computer and the development board are in the same LAN, and you can log in to the Ubuntu or Debian system of the development board through ssh.'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First download the installation package of the NoMachine software Linux arm64 deb version, and then install it in the Linux system of the development board</p>
 
<li><p>First download the installation package of the NoMachine software Linux arm64 deb version, and then install it in the Linux system of the development board</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>Since RK3566 is an SOC with ARMv8 architecture, the system we use is Ubuntu or Debian, so here we need to download the '''NoMachine for ARM ARMv8 DEB''' installation package. The download link is as follows:</li></ol>
+
<li>Since RK3566 is an SOC with ARMv8 architecture, the system we use is Ubuntu or Debian, so here we need to download the '''NoMachine for ARM ARMv8 DEB''' installation package. The download link is as follows:</li>
</li></ol>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 
+
|-
'''Note that this download link may change, please look for the deb package of the Armv8/Arm64 version.'''
+
|
 
+
<big>'''Note that this download link may change, please look for the deb package of the Armv8/Arm64 version.'''</big>
 +
|}
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[https://downloads.nomachine.com/download/?id=116&distro=ARM '''https://downloads.nomachine.com/download/?id=116&amp;distro=ARM''']
 
[https://downloads.nomachine.com/download/?id=116&distro=ARM '''https://downloads.nomachine.com/download/?id=116&amp;distro=ARM''']
 +
|}
  
[[File:media/image324.png|575x227px]]
+
[[File:cm4-img324.png]]
 +
</ol>
 +
<ol start="2" style="list-style-type: lower-alpha;">
 +
<li>In addition, you can also download the '''NoMachine''' installation package in the official tool</li>
  
<ol start="2" style="list-style-type: lower-alpha;">
+
[[File:cm4-img325.png]]
<li>In addition, you can also download the '''NoMachine''' installation package in the official tool</li></ol>
 
  
[[File:media/image325.png|66x102px]]
+
First '''enter the remote login software-NoMachine''' folder
  
<blockquote>First '''enter the remote login software-NoMachine''' folder
+
[[File:cm4-img326.png]]
</blockquote>
 
[[File:media/image326.png|271x43px]]
 
  
<blockquote>Then download the arm64 version of the deb installation package
+
Then download the arm64 version of the deb installation package
</blockquote>
 
[[File:media/image327.png|180x109px]]
 
  
 +
[[File:cm4-img327.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<li><p>Then upload the downloaded '''nomachine_x.x.x_x_arm64.deb''' to the Linux system of the development board</p></li>
 
<li><p>Then upload the downloaded '''nomachine_x.x.x_x_arm64.deb''' to the Linux system of the development board</p></li>
<li><p>Then use the following command to install NoMachine in the Linux system of the development board '''NoMachine'''</p></li></ol>
+
<li><p>Then use the following command to install NoMachine in the Linux system of the development board '''NoMachine'''</p></li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo dpkg -i nomachine_x.x.x_x_arm64_arm64.deb'''
 
orangepi@orangepi:~$ '''sudo dpkg -i nomachine_x.x.x_x_arm64_arm64.deb'''
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Then download the installation package of the Windows version of the NoMachine software, the download address is as follows</li></ol>
+
<li>Then download the installation package of the Windows version of the NoMachine software, the download address is as follows</li>
 
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
'''Note that this download link may change.'''
+
|-
 
+
|
 +
<big>'''Note that this download link may change.'''</big>
 +
|}
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[https://downloads.nomachine.com/download/?id=8 '''https://downloads.nomachine.com/download/?id=8''']
 
[https://downloads.nomachine.com/download/?id=8 '''https://downloads.nomachine.com/download/?id=8''']
 +
|}
  
[[File:media/image328.png|575x163px]]
+
[[File:cm4-img328.png]]
 
+
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
 
<li><p>Then install NoMachine in Windows, '''please restart the computer after installation'''</p></li>
 
<li><p>Then install NoMachine in Windows, '''please restart the computer after installation'''</p></li>
<li><p>Then open NoMachine in Window '''NoMachine'''</p></li></ol>
+
<li><p>Then open NoMachine in Window '''NoMachine'''</p></li>
 
 
[[File:media/image329.png|76x66px]]
 
  
 +
[[File:cm4-img329.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>After NoMachine starts, it will automatically scan other devices installed with NoMachine in the LAN. After entering the main interface of NoMachine, you can see that the development board is already in the list of connectable devices, and then click the position shown in the red box in the figure below You can start to log in to the Linux system desktop of the development board</li></ol>
+
<li>After NoMachine starts, it will automatically scan other devices installed with NoMachine in the LAN. After entering the main interface of NoMachine, you can see that the development board is already in the list of connectable devices, and then click the position shown in the red box in the figure below You can start to log in to the Linux system desktop of the development board</li>
 
 
[[File:media/image330.png|321x92px]]
 
  
 +
[[File:cm4-img330.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then Click '''OK'''</li></ol>
+
<li>Then Click '''OK'''</li>
 
 
[[File:media/image331.png|402x275px]]
 
  
 +
[[File:cm4-img331.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>Then enter the user name and password of the Linux system of the development board in the corresponding position in the figure below, and then click '''OK''' to start logging in</li></ol>
+
<li>Then enter the user name and password of the Linux system of the development board in the corresponding position in the figure below, and then click '''OK''' to start logging in</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image332.jpeg|303x204px|C:\Users\orangepi\Desktop\用户手册插图\Pi5 Plus\未标题-12.jpg未标题-12]]
+
[[File:cm4-img332.png]]
  
</div>
+
</div></ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
 
<li><p>Then click OK in the next interface</p></li>
 
<li><p>Then click OK in the next interface</p></li>
 
<li><p>Finally, you can see the desktop of the development board Linux system</p>
 
<li><p>Finally, you can see the desktop of the development board Linux system</p>
<p>[[File:media/image333.png|411x246px]]</p></li></ol>
+
<p>[[File:cm4-img333.png]]</p></li></ol>
  
 
<span id="use-vnc-to-log-in-remotely"></span>
 
<span id="use-vnc-to-log-in-remotely"></span>
 +
 
=== Use VNC to log in remotely ===
 
=== Use VNC to log in remotely ===
  
'''Before operation, please make sure that the Windows computer and the development board are in the same LAN, and you can log in to the Ubuntu or Debian system of the development board through ssh.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Before operation, please make sure that the Windows computer and the development board are in the same LAN, and you can log in to the Ubuntu or Debian system of the development board through ssh.'''
  
'''Ubuntu20.04 has many problems testing VNC, please do not use this method.'''
+
'''<span style="color:#FF0000">Ubuntu20.04 has many problems testing VNC, please do not use this method.</span>'''</big>
 +
|}
  
# First run the '''set_vnc.sh''' script to set up vnc, '''remember to add sudo permission'''
+
# First run the '''set_vnc.sh''' script to set up vnc, '''<span style="color:#FF0000">remember to add sudo permission</span>'''
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo set_vnc.sh'''
 
orangepi@orangepi:~$ '''sudo set_vnc.sh'''
  
 
You will require a password to access your desktops.
 
You will require a password to access your desktops.
  
Password: '''# Set the vnc password here, 8 characters'''
 
  
Verify: '''# Set the vnc password here, 8 characters'''
+
Password: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''<span style="color:#FF0000"># Set the vnc password here, 8 characters</span>'''
 +
 
 +
Verify: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''<span style="color:#FF0000"># Set the vnc password here, 8 characters</span>'''
  
 
Would you like to enter a view-only password (y/n)? '''n'''
 
Would you like to enter a view-only password (y/n)? '''n'''
  
 
xauth: file /root/.Xauthority does not exist
 
xauth: file /root/.Xauthority does not exist
 +
  
 
New 'X' desktop is orangepicm4:1
 
New 'X' desktop is orangepicm4:1
 +
  
 
Creating default startup script /root/.vnc/xstartup
 
Creating default startup script /root/.vnc/xstartup
Line 4,696: Line 5,793:
  
 
Log file is /root/.vnc/orangepicm4:1.log
 
Log file is /root/.vnc/orangepicm4:1.log
 +
  
 
Killing Xtightvnc process ID 3047
 
Killing Xtightvnc process ID 3047
 +
  
 
New 'X' desktop is orangepicm4:1
 
New 'X' desktop is orangepicm4:1
 +
  
 
Starting applications specified in /root/.vnc/xstartup
 
Starting applications specified in /root/.vnc/xstartup
  
 
Log file is /root/.vnc/orangepicm4:1.log
 
Log file is /root/.vnc/orangepicm4:1.log
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>The steps to use MobaXterm software to connect to the Linux system desktop of the development board are as follows:</p>
 
<li><p>The steps to use MobaXterm software to connect to the Linux system desktop of the development board are as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First click on Session, then select VNC, then fill in the IP address and port of the development board, and finally click OK to confirm</li></ol>
+
<li>First click on Session, then select VNC, then fill in the IP address and port of the development board, and finally click OK to confirm</li>
</li></ol>
 
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image334.png|490x349px|图片1208]]
+
[[File:cm4-img334.png]]
  
</div>
+
</div></ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then enter the VNC password set earlier</li></ol>
+
<li>Then enter the VNC password set earlier</li>
 
 
[[File:media/image335.png|274x131px]]
 
  
 +
[[File:cm4-img335.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<li><p>After successful login, the interface is displayed as shown in the figure below, and then you can remotely operate the desktop of the Linux system on the development board</p>
 
<li><p>After successful login, the interface is displayed as shown in the figure below, and then you can remotely operate the desktop of the Linux system on the development board</p>
<p>[[File:media/image336.png|405x293px]]</p></li></ol>
+
<p>[[File:cm4-img336.png]]</p></li></ol>
 +
</li></ol>
 +
<span id="some-programming-language-tests-supported-by-linux-system"></span>
  
<span id="some-programming-language-tests-supported-by-linux-system"></span>
 
 
== Some programming language tests supported by Linux system ==
 
== Some programming language tests supported by Linux system ==
  
Line 4,734: Line 5,835:
 
<li><p>Debian Bullseye has a gcc compilation tool chain installed by default, which can directly compile C language programs in the Linux system of the development board</p>
 
<li><p>Debian Bullseye has a gcc compilation tool chain installed by default, which can directly compile C language programs in the Linux system of the development board</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The version of gcc is as follows</li></ol>
+
<li>The version of gcc is as follows</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''gcc --version'''
 
orangepi@orangepi:~$ '''gcc --version'''
  
Line 4,746: Line 5,848:
  
 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Write the '''hello_world.c''' program in C language</li></ol>
+
<li>Write the '''hello_world.c''' program in C language</li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
orangepi@orangepi:~$ '''vim hello_world.c'''
  
orangepi@orangepi:~$ '''vim hello_world.c'''
+
<p>#include &lt;stdio.h&gt;</p>
  
#include &lt;stdio.h&gt;
 
  
 
int main(void)
 
int main(void)
Line 4,758: Line 5,864:
 
{
 
{
  
printf(&quot;Hello World!\n&quot;);
+
:printf(&quot;Hello World!\n&quot;);
 +
 
  
return 0;
+
:return 0;
  
 
}
 
}
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then compile and run '''hello_world.c'''</li></ol>
+
<li>Then compile and run '''hello_world.c'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''
 
orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''
  
Line 4,772: Line 5,882:
  
 
Hello World!
 
Hello World!
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>Debian Bullseye has Python3 installed by default</p>
 
<li><p>Debian Bullseye has Python3 installed by default</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The specific version of Python is as follows</li></ol>
+
<li>The specific version of Python is as follows</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''python3'''
 
orangepi@orangepi:~$ '''python3'''
  
Line 4,788: Line 5,901:
  
 
&gt;&gt;&gt;
 
&gt;&gt;&gt;
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Write '''hello_world.py''' program in Python language</li></ol>
+
<li>Write '''hello_world.py''' program in Python language</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''vim hello_world.py'''
 
orangepi@orangepi:~$ '''vim hello_world.py'''
  
 
print('Hello World!')
 
print('Hello World!')
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>The result of running '''hello_world.py'''is as follows</li></ol>
+
<li>The result of running '''hello_world.py'''is as follows</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''python3 hello_world.py'''
 
orangepi@orangepi:~$ '''python3 hello_world.py'''
  
 
Hello World!
 
Hello World!
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
 
<li><p>Debian Bullseye does not install Java compilation tools and runtime environment by default</p>
 
<li><p>Debian Bullseye does not install Java compilation tools and runtime environment by default</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>You can use the following command to install openjdk, the latest version in Debian Bullseye is openjdk-17</li></ol>
+
<li>You can use the following command to install openjdk, the latest version in Debian Bullseye is openjdk-17</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''
 
orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>After installation, you can check the version of Java</li></ol>
+
<li>After installation, you can check the version of Java</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''java --version'''
 
orangepi@orangepi:~$ '''java --version'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Write the Java version '''hello_world.java'''</li></ol>
+
<li>Write the Java version '''hello_world.java'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''vim hello_world.java'''
 
orangepi@orangepi:~$ '''vim hello_world.java'''
  
Line 4,825: Line 5,953:
 
{
 
{
  
public static void main(String[] args)
+
:public static void main(String[] args)
  
{
+
:{
  
System.out.println(&quot;Hello World!&quot;);
+
::System.out.println(&quot;Hello World!&quot;);
  
}
+
:}
  
 
}
 
}
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then compile and run '''hello_world.java'''</li></ol>
+
<li>Then compile and run '''hello_world.java'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''javac hello_world.java'''
 
orangepi@orangepi:~$ '''javac hello_world.java'''
  
Line 4,843: Line 5,974:
  
 
Hello World!
 
Hello World!
 +
|}
 +
</ol>
 +
</li></ol>
 +
<span id="debian-bookworm-system"></span>
  
<span id="debian-bookworm-system"></span>
 
 
=== Debian Bookworm System ===
 
=== Debian Bookworm System ===
  
Line 4,850: Line 5,984:
 
<li><p>Debian Bookworm is installed with the gcc compilation tool chain by default, which can directly compile C language programs in the Linux system of the development board</p>
 
<li><p>Debian Bookworm is installed with the gcc compilation tool chain by default, which can directly compile C language programs in the Linux system of the development board</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The version of gcc is as follows</li></ol>
+
<li>The version of gcc is as follows</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''gcc --version'''
 
orangepi@orangepi:~$ '''gcc --version'''
  
Line 4,862: Line 5,997:
  
 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Write the '''hello_world.c''' program in C language</li></ol>
+
<li>Write the '''hello_world.c''' program in C language</li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
orangepi@orangepi:~$ '''vim hello_world.c'''
  
orangepi@orangepi:~$ '''vim hello_world.c'''
+
<p>#include &lt;stdio.h&gt;</p>
  
#include &lt;stdio.h&gt;
 
  
 
int main(void)
 
int main(void)
Line 4,874: Line 6,013:
 
{
 
{
  
printf(&quot;Hello World!\n&quot;);
+
:printf(&quot;Hello World!\n&quot;);
  
return 0;
+
 
 +
:return 0;
  
 
}
 
}
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then compile and run '''hello_world.c'''</li></ol>
+
<li>Then compile and run '''hello_world.c'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''
 
orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''
  
Line 4,888: Line 6,031:
  
 
Hello World!
 
Hello World!
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>Debian Bookworm has Python3 installed by default</p>
 
<li><p>Debian Bookworm has Python3 installed by default</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The specific version of Python is as follows</li></ol>
+
<li>The specific version of Python is as follows</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''python3'''
 
orangepi@orangepi:~$ '''python3'''
  
Line 4,902: Line 6,048:
  
 
&gt;&gt;&gt;
 
&gt;&gt;&gt;
 
+
|}
'''Use the Ctrl+D shortcut to exit python's interactive mode.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 
+
|-
 +
|
 +
<big>'''Use the Ctrl+D shortcut to exit python's interactive mode.'''</big>
 +
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Write '''hello_world.py''' program in Python language</li></ol>
+
<li>Write '''hello_world.py''' program in Python language</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''vim hello_world.py'''
 
orangepi@orangepi:~$ '''vim hello_world.py'''
  
 
print('Hello World!')
 
print('Hello World!')
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>The result of running '''hello_world.py''' is as follows</li></ol>
+
<li>The result of running '''hello_world.py''' is as follows</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''python3 hello_world.py'''
 
orangepi@orangepi:~$ '''python3 hello_world.py'''
  
 
Hello World!
 
Hello World!
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
 
<li><p>Debian Bookworm does not install Java compilation tools and runtime environment by default</p>
 
<li><p>Debian Bookworm does not install Java compilation tools and runtime environment by default</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>You can use the following command to install openjdk, the latest version in Debian Bookworm is openjdk-17</li></ol>
+
<li>You can use the following command to install openjdk, the latest version in Debian Bookworm is openjdk-17</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''
 
orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>After installation, you can check the version of Java</li></ol>
+
<li>After installation, you can check the version of Java</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''java --version'''
 
orangepi@orangepi:~$ '''java --version'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Write the Java version '''hello_world.java'''</li></ol>
+
<li>Write the Java version '''hello_world.java'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''vim hello_world.java'''
 
orangepi@orangepi:~$ '''vim hello_world.java'''
  
Line 4,941: Line 6,105:
 
{
 
{
  
public static void main(String[] args)
+
:public static void main(String[] args)
  
{
+
:{
  
System.out.println(&quot;Hello World!&quot;);
+
::System.out.println(&quot;Hello World!&quot;);
  
}
+
:}
  
 
}
 
}
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then compile and run '''hello_world.java'''</li></ol>
+
<li>Then compile and run '''hello_world.java'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''javac hello_world.java'''
 
orangepi@orangepi:~$ '''javac hello_world.java'''
  
Line 4,959: Line 6,126:
  
 
Hello World!
 
Hello World!
 +
|}
 +
</ol>
 +
</li></ol>
 +
<span id="ubuntu-focal-system"></span>
  
<span id="ubuntu-focal-system"></span>
 
 
=== Ubuntu Focal system ===
 
=== Ubuntu Focal system ===
  
Line 4,966: Line 6,136:
 
<li><p>Ubuntu Focal has a gcc compilation tool chain installed by default, which can directly compile C language programs in the Linux system of the development board</p>
 
<li><p>Ubuntu Focal has a gcc compilation tool chain installed by default, which can directly compile C language programs in the Linux system of the development board</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The version of gcc is as follows</li></ol>
+
<li>The version of gcc is as follows</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''gcc --version'''
 
orangepi@orangepi:~$ '''gcc --version'''
  
Line 4,978: Line 6,149:
  
 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Write the '''hello_world.c''' program in C language</li></ol>
+
<li>Write the '''hello_world.c''' program in C language</li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
orangepi@orangepi:~$ '''vim hello_world.c'''
  
orangepi@orangepi:~$ '''vim hello_world.c'''
+
<p>#include &lt;stdio.h&gt;</p>
  
#include &lt;stdio.h&gt;
 
  
 
int main(void)
 
int main(void)
Line 4,990: Line 6,165:
 
{
 
{
  
printf(&quot;Hello World!\n&quot;);
+
:printf(&quot;Hello World!\n&quot;);
 +
 
  
return 0;
+
:return 0;
  
 
}
 
}
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then compile and run '''hello_world.c'''</li></ol>
+
<li>Then compile and run '''hello_world.c'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''
 
orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''
  
Line 5,004: Line 6,183:
  
 
Hello World!
 
Hello World!
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>Ubuntu Focal has Python3 installed by default</p>
 
<li><p>Ubuntu Focal has Python3 installed by default</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The specific version of Python3 is as follows</li></ol>
+
<li>The specific version of Python3 is as follows</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''python3'''
 
orangepi@orangepi:~$ '''python3'''
  
Line 5,020: Line 6,202:
  
 
&gt;&gt;&gt;
 
&gt;&gt;&gt;
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Write '''hello_world.py''' program in Python language</li></ol>
+
<li>Write '''hello_world.py''' program in Python language</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''vim hello_world.py'''
 
orangepi@orangepi:~$ '''vim hello_world.py'''
  
 
print('Hello World!')
 
print('Hello World!')
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>The result of running '''hello_world.py''' is as follows</li></ol>
+
<li>The result of running '''hello_world.py''' is as follows</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''python3 hello_world.py'''
 
orangepi@orangepi:~$ '''python3 hello_world.py'''
  
 
Hello World!
 
Hello World!
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
 
<li><p>Ubuntu Focal does not install Java compilation tools and operating environment by default</p>
 
<li><p>Ubuntu Focal does not install Java compilation tools and operating environment by default</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>You can use the following command to install openjdk-17</li></ol>
+
<li>You can use the following command to install openjdk-17</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''
 
orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>After installation, you can check the version of Java</li></ol>
+
<li>After installation, you can check the version of Java</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''java --version'''
 
orangepi@orangepi:~$ '''java --version'''
  
Line 5,053: Line 6,247:
  
 
OpenJDK 64-Bit Server VM (build 17.0.2+8-Ubuntu-120.04, mixed mode, sharing)
 
OpenJDK 64-Bit Server VM (build 17.0.2+8-Ubuntu-120.04, mixed mode, sharing)
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Write the Java version '''hello_world.java'''</li></ol>
+
<li>Write the Java version '''hello_world.java'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''vim hello_world.java'''
 
orangepi@orangepi:~$ '''vim hello_world.java'''
  
Line 5,063: Line 6,260:
 
{
 
{
  
public static void main(String[] args)
+
:public static void main(String[] args)
  
{
+
:{
  
System.out.println(&quot;Hello World!&quot;);
+
::System.out.println(&quot;Hello World!&quot;);
  
}
+
:}
  
 
}
 
}
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then compile and run '''hello_world.java'''</li></ol>
+
<li>Then compile and run '''hello_world.java'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''javac hello_world.java'''
 
orangepi@orangepi:~$ '''javac hello_world.java'''
  
Line 5,081: Line 6,281:
  
 
Hello World!
 
Hello World!
 +
|}
 +
</ol>
 +
</li></ol>
 +
<span id="ubuntu-jammy-system"></span>
  
<span id="ubuntu-jammy-system"></span>
 
 
=== Ubuntu Jammy system ===
 
=== Ubuntu Jammy system ===
  
Line 5,088: Line 6,291:
 
<li><p>Ubuntu Jammy has a gcc compilation tool chain installed by default, which can directly compile C language programs in the Linux system of the development board</p>
 
<li><p>Ubuntu Jammy has a gcc compilation tool chain installed by default, which can directly compile C language programs in the Linux system of the development board</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The version of gcc is as follows</li></ol>
+
<li>The version of gcc is as follows</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''gcc --version'''
 
orangepi@orangepi:~$ '''gcc --version'''
  
Line 5,100: Line 6,304:
  
 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Write the '''hello_world.c''' program in C language</li></ol>
+
<li>Write the '''hello_world.c''' program in C language</li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
orangepi@orangepi:~$ '''vim hello_world.c'''
  
orangepi@orangepi:~$ '''vim hello_world.c'''
+
<p>#include &lt;stdio.h&gt;</p>
  
#include &lt;stdio.h&gt;
 
  
 
int main(void)
 
int main(void)
Line 5,112: Line 6,320:
 
{
 
{
  
printf(&quot;Hello World!\n&quot;);
+
:printf(&quot;Hello World!\n&quot;);
  
return 0;
+
 
 +
:return 0;
  
 
}
 
}
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then compile and run '''hello_world.c'''</li></ol>
+
<li>Then compile and run '''hello_world.c'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''
 
orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''
  
Line 5,126: Line 6,338:
  
 
Hello World!
 
Hello World!
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>Ubuntu Jammy has Python3 installed by default</p>
 
<li><p>Ubuntu Jammy has Python3 installed by default</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The specific version of Python3 is as follows</li></ol>
+
<li>The specific version of Python3 is as follows</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''python3'''
 
orangepi@orangepi:~$ '''python3'''
  
Line 5,140: Line 6,355:
  
 
&gt;&gt;&gt;
 
&gt;&gt;&gt;
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Write '''hello_world.py''' program in Python language</li></ol>
+
<li>Write '''hello_world.py''' program in Python language</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''vim hello_world.py'''
 
orangepi@orangepi:~$ '''vim hello_world.py'''
  
 
print('Hello World!')
 
print('Hello World!')
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>The result of running '''hello_world.py''' is as follows</li></ol>
+
<li>The result of running '''hello_world.py''' is as follows</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''python3 hello_world.py'''
 
orangepi@orangepi:~$ '''python3 hello_world.py'''
  
 
Hello World!
 
Hello World!
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
 
<li><p>Ubuntu Jammy does not install Java compilation tools and runtime environment by default</p>
 
<li><p>Ubuntu Jammy does not install Java compilation tools and runtime environment by default</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>You can use the following command to install openjdk-18</li></ol>
+
<li>You can use the following command to install openjdk-18</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo apt install -y openjdk-18-jdk'''
 
orangepi@orangepi:~$ '''sudo apt install -y openjdk-18-jdk'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>After installation, you can check the version of Java</li></ol>
+
<li>After installation, you can check the version of Java</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''java --version'''
 
orangepi@orangepi:~$ '''java --version'''
  
Line 5,173: Line 6,400:
  
 
OpenJDK 64-Bit Server VM (build 18-ea+36-Ubuntu-1, mixed mode, sharing)
 
OpenJDK 64-Bit Server VM (build 18-ea+36-Ubuntu-1, mixed mode, sharing)
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Write the Java version '''hello_world.java'''</li></ol>
+
<li>Write the Java version '''hello_world.java'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''vim hello_world.java'''
 
orangepi@orangepi:~$ '''vim hello_world.java'''
  
Line 5,183: Line 6,413:
 
{
 
{
  
public static void main(String[] args)
+
:public static void main(String[] args)
  
{
+
:{
  
System.out.println(&quot;Hello World!&quot;);
+
::System.out.println(&quot;Hello World!&quot;);
  
}
+
:}
  
 
}
 
}
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then compile and run '''hello_world.java'''</li></ol>
+
<li>Then compile and run '''hello_world.java'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''javac hello_world.java'''
 
orangepi@orangepi:~$ '''javac hello_world.java'''
  
Line 5,201: Line 6,434:
  
 
Hello World!
 
Hello World!
 +
|}
 +
</ol>
 +
</li></ol>
 +
<span id="how-to-install-qt"></span>
  
<span id="how-to-install-qt"></span>
 
 
== How to install QT ==
 
== How to install QT ==
  
 
# Use the script below to install QT5 and QT Creator
 
# Use the script below to install QT5 and QT Creator
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''install_qt.sh'''
 
orangepi@orangepi:~$ '''install_qt.sh'''
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>After installation, the version number of QT will be automatically printed</p>
 
<li><p>After installation, the version number of QT will be automatically printed</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The qt version that comes with Ubuntu 20.04 is '''5.12.8'''</li></ol>
+
<li>The qt version that comes with Ubuntu 20.04 is '''5.12.8'''</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''install_qt.sh'''
 
orangepi@orangepi:~$ '''install_qt.sh'''
  
Line 5,221: Line 6,462:
 
QMake version 3.1
 
QMake version 3.1
  
Using Qt version '''5.12.8''' in /usr/lib/aarch64-linux-gnu
+
Using Qt version '''<span style="color:#FF0000">5.12.8</span>''' in /usr/lib/aarch64-linux-gnu
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>The QT version that comes with Ubuntu 22.04 is '''5.15.3'''</li></ol>
+
<li>The QT version that comes with Ubuntu 22.04 is '''5.15.3'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''install_qt.sh'''
 
orangepi@orangepi:~$ '''install_qt.sh'''
  
Line 5,232: Line 6,476:
 
QMake version 3.1
 
QMake version 3.1
  
Using Qt version '''5.15.3''' in /usr/lib/aarch64-linux-gnu
+
Using Qt version '''<span style="color:#FF0000">5.15.3</span>''' in /usr/lib/aarch64-linux-gnu
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>The QT version that comes with Debian11 is '''5.15.2'''</li></ol>
+
<li>The QT version that comes with Debian11 is '''5.15.2'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''install_qt.sh'''
 
orangepi@orangepi:~$ '''install_qt.sh'''
  
Line 5,243: Line 6,490:
 
QMake version 3.1
 
QMake version 3.1
  
Using Qt version '''5.15.2''' in /usr/lib/aarch64-linux-gnu
+
Using Qt version '''<span style="color:#FF0000">5.15.2</span>''' in /usr/lib/aarch64-linux-gnu
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>The QT version that comes with Debian12 '''is 5.15.8'''</li></ol>
+
<li>The QT version that comes with Debian12 '''is 5.15.8'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''install_qt.sh'''
 
orangepi@orangepi:~$ '''install_qt.sh'''
  
Line 5,254: Line 6,504:
 
QMake version 3.1
 
QMake version 3.1
  
Using Qt version '''5.15.8''' in /usr/lib/aarch64-linux-gnu
+
Using Qt version '''<span style="color:#FF0000">5.15.8</span>''' in /usr/lib/aarch64-linux-gnu
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then you can see the startup icon of QT Creator in '''Applications'''</li></ol>
+
<li>Then you can see the startup icon of QT Creator in '''Applications'''</li>
  
[[File:media/image337.png|576x270px]]
+
[[File:cm4-img337.png]]
  
 
You can also use the following command to open QT Creator
 
You can also use the following command to open QT Creator
  
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''qtcreator'''
 
orangepi@orangepi:~$ '''qtcreator'''
 +
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''During the startup process of QT and QT application, if the following error is prompted, please ignore it directly, this error will not affect the operation of the application.'''
  
'''During the startup process of QT and QT application, if the following error is prompted, please ignore it directly, this error will not affect the operation of the application.'''
 
  
 
'''libGL error: failed to create dri screen'''
 
'''libGL error: failed to create dri screen'''
Line 5,273: Line 6,532:
 
'''libGL error: failed to create dri screen'''
 
'''libGL error: failed to create dri screen'''
  
'''libGL error: failed to load driver: rockchip'''
+
'''libGL error: failed to load driver: rockchip'''</big>
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>The interface after QT Creator is opened is as follows</li></ol>
+
<li>The interface after QT Creator is opened is as follows</li>
 
 
[[File:media/image338.png|418x222px]]
 
  
 +
[[File:cm4-img338.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
 
<li><p>The version of QT Creator is as follows</p>
 
<li><p>The version of QT Creator is as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The default version of QT Creator in '''Ubuntu20.04''' is as follows</li></ol>
+
<li>The default version of QT Creator in '''Ubuntu20.04''' is as follows</li>
</li></ol>
 
 
 
[[File:media/image339.png|419x224px]]
 
  
 +
[[File:cm4-img339.png]]
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>The default version of QT Creator in '''Ubuntu22.04''' is as follows</li></ol>
+
<li>The default version of QT Creator in '''Ubuntu22.04''' is as follows</li>
 
 
[[File:media/image340.png|443x237px]]
 
  
 +
[[File:cm4-img340.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>The default version of QT Creator in '''Debian11''' is as follows</li></ol>
+
<li>The default version of QT Creator in '''Debian11''' is as follows</li>
 
 
[[File:media/image341.png|444x238px]]
 
  
 +
[[File:cm4-img341.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>The default version of QT Creator in '''Debian12''' is as follows</li></ol>
+
<li>The default version of QT Creator in '''Debian12''' is as follows</li>
 
 
[[File:media/image342.png|449x277px]]
 
  
 +
[[File:cm4-img342.png]]
 +
</ol>
 +
</li></ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
 
<li><p>Then set the QT</p>
 
<li><p>Then set the QT</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>open first '''Help'''-&gt;'''About Plugins...'''</li></ol>
+
<li>open first '''Help'''-&gt;'''About Plugins...'''</li>
</li></ol>
 
 
 
[[File:media/image343.png|573x164px]]
 
  
 +
[[File:cm4-img343.png]]
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then remove the tick of '''ClangCodeModel'''</li></ol>
+
<li>Then remove the tick of '''ClangCodeModel'''</li>
 
 
[[File:media/image344.png|408x254px]]
 
  
 +
[[File:cm4-img344.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li><p>'''After setting, you need to restart QT Creator'''</p></li>
+
<li><p>'''<span style="color:#FF0000">After setting, you need to restart QT Creator</span>'''</p></li>
<li><p>Then make sure the GCC compiler used by QT Creator, if the default is Clang, please modify it to GCC</p></li></ol>
+
<li><p>Then make sure the GCC compiler used by QT Creator, if the default is Clang, please modify it to GCC</p></li>
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Debian12 please skip this step.'''</big>
 +
|}
  
'''Debian12 please skip this step.'''
+
[[File:cm4-img345.png]]
 
 
[[File:media/image345.png|576x315px]]
 
 
 
[[File:media/image346.png|575x307px]]
 
  
 +
[[File:cm4-img346.png]]
 +
</ol>
 +
</li></ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>Then you can open a sample code</li></ol>
+
<li>Then you can open a sample code</li>
 
 
[[File:media/image347.png|575x312px]]
 
  
 +
[[File:cm4-img347.png]]
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>After clicking the sample code, the corresponding instruction document will be opened automatically, you can read the instruction carefully</li></ol>
+
<li>After clicking the sample code, the corresponding instruction document will be opened automatically, you can read the instruction carefully</li>
 
 
[[File:media/image348.png|576x218px]]
 
  
 +
[[File:cm4-img348.png]]
 +
</ol>
 
<ol start="9" style="list-style-type: decimal;">
 
<ol start="9" style="list-style-type: decimal;">
<li>Then click next '''Configure Project'''</li></ol>
+
<li>Then click next '''Configure Project'''</li>
 
 
[[File:media/image349.png|575x304px]]
 
  
 +
[[File:cm4-img349.png]]
 +
</ol>
 
<ol start="10" style="list-style-type: decimal;">
 
<ol start="10" style="list-style-type: decimal;">
<li>Then click the green triangle in the lower left corner to compile and run the sample code</li></ol>
+
<li>Then click the green triangle in the lower left corner to compile and run the sample code</li>
 
 
[[File:media/image350.png|575x312px]]
 
  
 +
[[File:cm4-img350.png]]
 +
</ol>
 
<ol start="11" style="list-style-type: decimal;">
 
<ol start="11" style="list-style-type: decimal;">
<li>After waiting for a period of time, the interface shown in the figure below will pop up, which means that QT can compile and run normally</li></ol>
+
<li>After waiting for a period of time, the interface shown in the figure below will pop up, which means that QT can compile and run normally</li>
 
 
[[File:media/image351.png|576x308px]]
 
  
 +
[[File:cm4-img351.png]]
 +
</ol>
 
<ol start="12" style="list-style-type: decimal;">
 
<ol start="12" style="list-style-type: decimal;">
<li>References</li></ol>
+
<li>References</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[https://wiki.qt.io/Install_Qt_5_on_Ubuntu '''https://wiki.qt.io/Install_Qt_5_on_Ubuntu''']
 
[https://wiki.qt.io/Install_Qt_5_on_Ubuntu '''https://wiki.qt.io/Install_Qt_5_on_Ubuntu''']
  
Line 5,359: Line 6,624:
  
 
[https://download.qt.io/archive/qt '''https://download.qt.io/archive/qt''']
 
[https://download.qt.io/archive/qt '''https://download.qt.io/archive/qt''']
 +
|}
 +
</ol>
 +
<span id="how-to-install-ros"></span>
  
<span id="how-to-install-ros"></span>
 
 
== How to install ROS ==
 
== How to install ROS ==
  
Line 5,368: Line 6,635:
 
# The current active version of ROS 1 is as follows, and the recommended version is '''Noetic Ninjemys'''
 
# The current active version of ROS 1 is as follows, and the recommended version is '''Noetic Ninjemys'''
  
[[File:media/image352.png|345x235px]]
+
::[[File:cm4-img352.png]]
  
[[File:media/image353.png|576x210px]]
+
::[[File:cm4-img353.png]]
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[http://docs.ros.org/ '''http://docs.ros.org''']
 
[http://docs.ros.org/ '''http://docs.ros.org''']
  
 
'''https://wiki.ros.org/Distributions'''
 
'''https://wiki.ros.org/Distributions'''
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>The official installation document link of ROS 1 '''Noetic Ninjemys''' is as follows:</li></ol>
+
<li>The official installation document link of ROS 1 '''Noetic Ninjemys''' is as follows:</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[http://wiki.ros.org/noetic/Installation/Ubuntu '''http://wiki.ros.org/noetic/Installation/Ubuntu''']
 
[http://wiki.ros.org/noetic/Installation/Ubuntu '''http://wiki.ros.org/noetic/Installation/Ubuntu''']
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>In the official installation document of ROS '''Noetic Ninjemys''', Ubuntu recommends using Ubuntu20.04, so please make sure that the system used by the development board is '''Ubuntu20.04 desktop system'''</li></ol>
+
<li>In the official installation document of ROS '''Noetic Ninjemys''', Ubuntu recommends using Ubuntu20.04, so please make sure that the system used by the development board is '''Ubuntu20.04 desktop system'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[http://wiki.ros.org/noetic/Installation '''http://wiki.ros.org/noetic/Installation''']
 
[http://wiki.ros.org/noetic/Installation '''http://wiki.ros.org/noetic/Installation''']
 +
|}
  
[[File:media/image354.png|312x176px]]
+
[[File:cm4-img354.png]]
 
+
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then use the following script to install ros1</li></ol>
+
<li>Then use the following script to install ros1</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepicm4:~$ '''install_ros.sh ros1'''
 
orangepi@orangepicm4:~$ '''install_ros.sh ros1'''
 
+
|}
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Before using the ROS tool, you first need to initialize rosdep, and then you can quickly install some system dependencies and some core components in ROS when compiling the source code</li></ol>
+
<li>Before using the ROS tool, you first need to initialize rosdep, and then you can quickly install some system dependencies and some core components in ROS when compiling the source code</li>
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''<span style="color:#FF0000">Note that running the following command needs to ensure that the development board can access github normally, otherwise an error will be reported due to network problems.</span>'''
  
'''Note that running the following command needs to ensure that the development board can access github normally, otherwise an error will be reported due to network problems.'''
 
  
 
'''The install_ros.sh script will try to modify /etc/hosts and automatically run the following commands. However, this method cannot guarantee normal access to github every time. If the following error is prompted after installing ros1 in install_ros.sh, please find other ways to allow the Linux system of the development board to access github normally, and then manually run the following Order.'''
 
'''The install_ros.sh script will try to modify /etc/hosts and automatically run the following commands. However, this method cannot guarantee normal access to github every time. If the following error is prompted after installing ros1 in install_ros.sh, please find other ways to allow the Linux system of the development board to access github normally, and then manually run the following Order.'''
 +
  
 
'''https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml'''
 
'''https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml'''
Line 5,404: Line 6,688:
 
'''Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml'''
 
'''Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml'''
  
'''ERROR: error loading sources list:'''
+
'''<span style="color:#FF0000">ERROR: error loading sources list:</span>'''
 
 
'''The read operation timed out'''
 
  
 +
::'''<span style="color:#FF0000">The read operation timed out</span>'''</big>
 +
|}
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''source /opt/ros/noetic/setup.bash'''
 
orangepi@orangepi:~$ '''source /opt/ros/noetic/setup.bash'''
  
Line 5,416: Line 6,703:
 
Recommended: please run
 
Recommended: please run
  
rosdep update
+
 
 +
::rosdep update
  
 
orangepi@orangepi:~$ '''rosdep update'''
 
orangepi@orangepi:~$ '''rosdep update'''
Line 5,469: Line 6,757:
  
 
updated cache in /home/orangepi/.ros/rosdep/sources.cache
 
updated cache in /home/orangepi/.ros/rosdep/sources.cache
 
+
|}
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then open a command line terminal window on the desktop, and then use the '''test_ros.sh''' script to start a small turtle routine to test whether ROS can be used normally</li></ol>
+
<li>Then open a command line terminal window on the desktop, and then use the '''test_ros.sh''' script to start a small turtle routine to test whether ROS can be used normally</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''test_ros.sh'''
 
orangepi@orangepi:~$ '''test_ros.sh'''
 
+
|}
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>After running the '''test_ros.sh''' script, a little turtle as shown in the figure below will pop up</li></ol>
+
<li>After running the '''test_ros.sh''' script, a little turtle as shown in the figure below will pop up</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image355.png|575x275px|图片4]]
+
[[File:cm4-img355.png]]
  
</div>
+
</div></ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>Then please keep the terminal window just opened at the top</li></ol>
+
<li>Then please keep the terminal window just opened at the top</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image356.png|576x275px|图片5]]
+
[[File:cm4-img356.png]]
  
</div>
+
</div></ol>
 
<ol start="9" style="list-style-type: decimal;">
 
<ol start="9" style="list-style-type: decimal;">
<li>At this time, press the direction keys on the keyboard to control the little turtle to move up, down, left, and right</li></ol>
+
<li>At this time, press the direction keys on the keyboard to control the little turtle to move up, down, left, and right</li>
  
[[File:media/image357.png|575x296px]]
+
[[File:cm4-img357.png]]
 +
</ol>
 +
<span id="how-to-install-ros-2-galactic-on-ubuntu-20.04"></span>
  
<span id="how-to-install-ros-2-galactic-on-ubuntu-20.04"></span>
 
 
=== How to install ROS 2 Galactic on Ubuntu 20.04 ===
 
=== How to install ROS 2 Galactic on Ubuntu 20.04 ===
  
 
# The current active version of ROS 2 is as follows, and the recommended version is '''Galactic Geochelone'''
 
# The current active version of ROS 2 is as follows, and the recommended version is '''Galactic Geochelone'''
  
[[File:media/image358.png|576x271px]]
+
::[[File:cm4-img358.png]]
  
[[File:media/image359.png|575x265px]]
+
::[[File:cm4-img359.png]]
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[http://docs.ros.org/ '''http://docs.ros.org''']
 
[http://docs.ros.org/ '''http://docs.ros.org''']
  
 
'''http://docs.ros.org/en/galactic/Releases.html'''
 
'''http://docs.ros.org/en/galactic/Releases.html'''
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>The link to the official ROS 2 '''Galactic Geochelone''' installation documentation is as follows:</li></ol>
+
<li>The link to the official ROS 2 '''Galactic Geochelone''' installation documentation is as follows:</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
'''docs.ros.org/en/galactic/Installation.html'''
 
'''docs.ros.org/en/galactic/Installation.html'''
  
 
'''http://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.html'''
 
'''http://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.html'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li><p>In the official ROS 2 '''Galactic Geochelone''' installation document, Ubuntu Linux recommends using Ubuntu 20.04, so please make sure that the system used by the development board is the '''Ubuntu 20.04 desktop system'''. There are several ways to install ROS 2. The following demonstrates how to install it through '''Debian packages''' ROS 2 '''Galactic Geochelone'''</p></li>
+
<li><p>In the official ROS 2 '''Galactic Geochelone''' installation document, Ubuntu Linux recommends using Ubuntu 20.04, so please make sure that the system used by the development board is the '''<span style="color:#FF0000">Ubuntu 20.04 desktop system</span>'''. There are several ways to install ROS 2. The following demonstrates how to install it through '''Debian packages''' ROS 2 '''Galactic Geochelone'''</p></li>
<li><p>Use the '''install_ros.sh''' script to install ros2</p></li></ol>
+
<li><p>Use the '''install_ros.sh''' script to install ros2</p></li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''install_ros.sh ros2'''
 
orangepi@orangepi:~$ '''install_ros.sh ros2'''
 
+
|}
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>The '''install_ros.sh''' script will automatically run the '''ros2 -h'''command after installing ros2. If you can see the following print, it means that the ros2 installation is complete</li></ol>
+
<li>The '''install_ros.sh''' script will automatically run the '''ros2 -h''' command after installing ros2. If you can see the following print, it means that the ros2 installation is complete</li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
usage: ros2 [-h] Call `ros2 &lt;command&gt; -h` for more detailed usage. ...
  
usage: ros2 [-h] Call `ros2 &lt;command&gt; -h` for more detailed usage. ...
 
  
 
ros2 is an extensible command-line tool for ROS 2.
 
ros2 is an extensible command-line tool for ROS 2.
 +
  
 
optional arguments:
 
optional arguments:
  
-h, --help show this help message and exit
+
:-h, --help show this help message and exit
 +
 
  
 
Commands:
 
Commands:
  
action Various action related sub-commands
+
:action Various action related sub-commands
  
bag Various rosbag related sub-commands
+
:bag Various rosbag related sub-commands
  
component Various component related sub-commands
+
:component Various component related sub-commands
  
daemon Various daemon related sub-commands
+
:daemon Various daemon related sub-commands
  
doctor Check ROS setup and other potential issues
+
:doctor Check ROS setup and other potential issues
  
interface Show information about ROS interfaces
+
:interface Show information about ROS interfaces
  
launch Run a launch file
+
:launch Run a launch file
  
lifecycle Various lifecycle related sub-commands
+
:lifecycle Various lifecycle related sub-commands
  
multicast Various multicast related sub-commands
+
:multicast Various multicast related sub-commands
  
node Various node related sub-commands
+
:node Various node related sub-commands
  
param Various param related sub-commands
+
:param Various param related sub-commands
  
pkg Various package related sub-commands
+
:pkg Various package related sub-commands
  
run Run a package specific executable
+
:run Run a package specific executable
  
security Various security related sub-commands
+
:security Various security related sub-commands
  
service Various service related sub-commands
+
:service Various service related sub-commands
  
topic Various topic related sub-commands
+
:topic Various topic related sub-commands
  
wtf Use `wtf` as alias to `doctor`
+
:wtf Use `wtf` as alias to `doctor`
  
Call `ros2 &lt;command&gt; -h` for more detailed usage.
 
  
 +
:Call `ros2 &lt;command&gt; -h` for more detailed usage.
 +
|}
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then you can use the '''test_ros.sh''' script to test whether ROS 2 is installed successfully. If you can see the following print, it means that ROS 2 can run normally</li></ol>
+
<li>Then you can use the '''test_ros.sh''' script to test whether ROS 2 is installed successfully. If you can see the following print, it means that ROS 2 can run normally</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepicm4:~$ '''test_ros.sh'''
 
orangepi@orangepicm4:~$ '''test_ros.sh'''
  
Line 5,587: Line 6,899:
  
 
[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]
 
[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]
 
+
|}
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>Run the following command to open rviz2</li></ol>
+
<li>Run the following command to open rviz2</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''source /opt/ros/galactic/setup.bash'''
 
orangepi@orangepi:~$ '''source /opt/ros/galactic/setup.bash'''
  
 
orangepi@orangepi:~$ '''ros2 run rviz2 rviz2'''
 
orangepi@orangepi:~$ '''ros2 run rviz2 rviz2'''
 +
|}
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image360.png|576x324px|1]]
+
[[File:cm4-img360.png]]
  
</div>
+
</div></ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>For how to use ROS, please refer to the documentation of ROS 2</li></ol>
+
<li>For how to use ROS, please refer to the documentation of ROS 2</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[http://docs.ros.org/en/galactic/Tutorials.html '''http://docs.ros.org/en/galactic/Tutorials.html''']
 
[http://docs.ros.org/en/galactic/Tutorials.html '''http://docs.ros.org/en/galactic/Tutorials.html''']
 +
|}
 +
</ol>
 +
<span id="how-to-install-ros-2-humble-on-ubuntu-22.04"></span>
  
<span id="how-to-install-ros-2-humble-on-ubuntu-22.04"></span>
 
 
=== How to install ROS 2 Humble on Ubuntu 22.04 ===
 
=== How to install ROS 2 Humble on Ubuntu 22.04 ===
  
 
# Use the '''install_ros.sh''' script to install ros2
 
# Use the '''install_ros.sh''' script to install ros2
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''install_ros.sh ros2'''
 
orangepi@orangepi:~$ '''install_ros.sh ros2'''
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>The '''install_ros.sh''' script will automatically run the '''ros2 -h''' command after installing ros2. If you can see the following print, it means that the ros2 installation is complete</li></ol>
+
<li>The '''install_ros.sh''' script will automatically run the '''ros2 -h''' command after installing ros2. If you can see the following print, it means that the ros2 installation is complete</li>
  
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
usage: ros2 [-h] Call `ros2 &lt;command&gt; -h` for more detailed usage. ...
 
usage: ros2 [-h] Call `ros2 &lt;command&gt; -h` for more detailed usage. ...
 +
  
 
ros2 is an extensible command-line tool for ROS 2.
 
ros2 is an extensible command-line tool for ROS 2.
 +
  
 
optional arguments:
 
optional arguments:
  
-h, --help show this help message and exit
+
:-h, --help show this help message and exit
 +
 
  
 
Commands:
 
Commands:
  
action Various action related sub-commands
+
:action Various action related sub-commands
  
bag Various rosbag related sub-commands
+
:bag Various rosbag related sub-commands
  
component Various component related sub-commands
+
:component Various component related sub-commands
  
daemon Various daemon related sub-commands
+
:daemon Various daemon related sub-commands
  
doctor Check ROS setup and other potential issues
+
:doctor Check ROS setup and other potential issues
  
interface Show information about ROS interfaces
+
:interface Show information about ROS interfaces
  
launch Run a launch file
+
:launch Run a launch file
  
lifecycle Various lifecycle related sub-commands
+
:lifecycle Various lifecycle related sub-commands
  
multicast Various multicast related sub-commands
+
:multicast Various multicast related sub-commands
  
node Various node related sub-commands
+
:node Various node related sub-commands
  
param Various param related sub-commands
+
:param Various param related sub-commands
  
pkg Various package related sub-commands
+
:pkg Various package related sub-commands
  
run Run a package specific executable
+
:run Run a package specific executable
  
security Various security related sub-commands
+
:security Various security related sub-commands
  
service Various service related sub-commands
+
:service Various service related sub-commands
  
topic Various topic related sub-commands
+
:topic Various topic related sub-commands
  
wtf Use `wtf` as alias to `doctor`
+
:wtf Use `wtf` as alias to `doctor`
  
Call `ros2 &lt;command&gt; -h` for more detailed usage.
 
  
 +
:Call `ros2 &lt;command&gt; -h` for more detailed usage.
 +
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then you can use the '''test_ros.sh''' script to test whether ROS 2 is installed successfully. If you can see the following print, it means that ROS 2 can run normally</li></ol>
+
<li>Then you can use the '''test_ros.sh''' script to test whether ROS 2 is installed successfully. If you can see the following print, it means that ROS 2 can run normally</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepicm4:~$ '''test_ros.sh'''
 
orangepi@orangepicm4:~$ '''test_ros.sh'''
  
Line 5,677: Line 7,011:
  
 
[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]
 
[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Run the following command to open rviz2</li></ol>
+
<li>Run the following command to open rviz2</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''source /opt/ros/humble/setup.bash'''
 
orangepi@orangepi:~$ '''source /opt/ros/humble/setup.bash'''
  
 
orangepi@orangepi:~$ '''ros2 run rviz2 rviz2'''
 
orangepi@orangepi:~$ '''ros2 run rviz2 rviz2'''
 +
|}
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image361.png|576x324px|1]]
+
[[File:cm4-img361.png]]
  
</div>
+
</div></ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Reference documents</li></ol>
+
<li>Reference documents</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
'''http://docs.ros.org/en/humble/index.html'''
 
'''http://docs.ros.org/en/humble/index.html'''
  
 
[http://docs.ros.org/en/galactic/Tutorials.html '''http://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html''']
 
[http://docs.ros.org/en/galactic/Tutorials.html '''http://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html''']
 +
|}
 +
</ol>
 +
<span id="how-to-install-kernel-header-files"></span>
  
<span id="how-to-install-kernel-header-files"></span>
 
 
== How to install kernel header files ==
 
== How to install kernel header files ==
  
 
# The Linux image released by OPi comes with the deb package of the kernel header file by default, and the storage location is '''/opt/'''
 
# The Linux image released by OPi comes with the deb package of the kernel header file by default, and the storage location is '''/opt/'''
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''ls /opt/linux-headers*'''
 
orangepi@orangepi:~$ '''ls /opt/linux-headers*'''
  
 
/opt/linux-headers-legacy-rockchip-rk356x_x.x.x_arm64.deb
 
/opt/linux-headers-legacy-rockchip-rk356x_x.x.x_arm64.deb
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Use the following command to install the deb package of the kernel header file</li></ol>
+
<li>Use the following command to install the deb package of the kernel header file</li>
 
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
'''The name of the kernel header file deb package needs to be replaced with the actual name, please do not copy it.'''
+
|-
 
+
|
 +
<big>'''The name of the kernel header file deb package needs to be replaced with the actual name, please do not copy it.'''</big>
 +
|}
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo dpkg -i /opt/linux-headers-legacy-rockchip-rk356x_1.x.x_arm64.deb'''
 
orangepi@orangepi:~$ '''sudo dpkg -i /opt/linux-headers-legacy-rockchip-rk356x_1.x.x_arm64.deb'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>After installation, you can see the folder where the kernel header files are located under '''/usr/src'''</li></ol>
+
<li>After installation, you can see the folder where the kernel header files are located under '''/usr/src'''</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''ls /usr/src'''
 
orangepi@orangepi:~$ '''ls /usr/src'''
  
 
linux-headers-5.10.160-rockchip-rk356x
 
linux-headers-5.10.160-rockchip-rk356x
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
 
<li><p>Then you can write a hello kernel module to test the kernel header file</p>
 
<li><p>Then you can write a hello kernel module to test the kernel header file</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First write the code of the hello kernel module, as follows:</li></ol>
+
<li>First write the code of the hello kernel module, as follows:</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
orangepi@orangepi:~$ '''vim hello.c'''
  
orangepi@orangepi:~$ '''vim hello.c'''
+
<p>#include &lt;linux/init.h&gt;</p>
  
#include &lt;linux/init.h&gt;
+
<p>#include &lt;linux/module.h&gt;</p>
  
#include &lt;linux/module.h&gt;
 
  
 
static int hello_init(void)
 
static int hello_init(void)
Line 5,736: Line 7,093:
 
{
 
{
  
printk(&quot;Hello Orange Pi -- init\n&quot;);
+
:printk(&quot;Hello Orange Pi -- init\n&quot;);
 +
 
  
return 0;
+
:return 0;
  
 
}
 
}
Line 5,746: Line 7,104:
 
{
 
{
  
printk(&quot;Hello Orange Pi -- exit\n&quot;);
+
:printk(&quot;Hello Orange Pi -- exit\n&quot;);
 +
 
  
return;
+
:return;
  
 
}
 
}
 +
  
 
module_init(hello_init);
 
module_init(hello_init);
  
 
module_exit(hello_exit);
 
module_exit(hello_exit);
 +
  
 
MODULE_LICENSE(&quot;GPL&quot;);
 
MODULE_LICENSE(&quot;GPL&quot;);
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then write the Makefile for compiling the hello kernel module, as follows:</li></ol>
+
<li>Then write the Makefile for compiling the hello kernel module, as follows:</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''vim Makefile'''
 
orangepi@orangepi:~$ '''vim Makefile'''
  
Line 5,775: Line 7,139:
 
all:
 
all:
  
make -C $(KDIR) M=$(PWD) modules
+
:make -C $(KDIR) M=$(PWD) modules
  
 
clean:
 
clean:
  
rm -f *.ko *.o *.mod.o *.mod *.symvers *.cmd *.mod.c *.order
+
:rm -f *.ko *.o *.mod.o *.mod *.symvers *.cmd *.mod.c *.order
  
 
endif
 
endif
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then use the make command to compile the hello kernel module. The output of the compilation process is as follows:</li></ol>
+
<li>Then use the make command to compile the hello kernel module. The output of the compilation process is as follows:</li>
 
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
'''If there is a problem with compiling the code you copied here, please go to the official tool to download the source code and upload it to the Linux system of the development board for testing.'''
+
|-
 
+
|
[[File:media/image362.png|337x52px]]
+
<big>'''If there is a problem with compiling the code you copied here, please go to the official tool to download the source code and upload it to the Linux system of the development board for testing.'''</big>
  
 +
[[File:cm4-img362.png|center]]
 +
|}
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''make'''
 
orangepi@orangepi:~$ '''make'''
  
Line 5,796: Line 7,166:
 
make[1]: Entering directory '/usr/src/linux-headers-5.10.160-rockchip-rk35xx'
 
make[1]: Entering directory '/usr/src/linux-headers-5.10.160-rockchip-rk35xx'
  
CC [M] /home/orangepi/hello.o
+
:CC [M] /home/orangepi/hello.o
  
MODPOST /home/orangepi/Module.symvers
+
:MODPOST /home/orangepi/Module.symvers
  
CC [M] /home/orangepi/hello.mod.o
+
:CC [M] /home/orangepi/hello.mod.o
  
LD [M] /home/orangepi/hello.ko
+
:LD [M] /home/orangepi/hello.ko
  
 
make[1]: Leaving directory '/usr/src/linux-headers-5.10.160-rockchip-rk35xx'
 
make[1]: Leaving directory '/usr/src/linux-headers-5.10.160-rockchip-rk35xx'
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>After compiling, the '''hello.ko''' kernel module will be generated</li></ol>
+
<li>After compiling, the '''hello.ko''' kernel module will be generated</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''ls *.ko'''
 
orangepi@orangepi:~$ '''ls *.ko'''
  
 
hello.ko
 
hello.ko
 
+
|}
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Use the '''insmod'''command to insert the '''hello.ko''' kernel module into the kernel</li></ol>
+
<li>Use the '''insmod'''command to insert the '''hello.ko''' kernel module into the kernel</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo insmod hello.ko'''
 
orangepi@orangepi:~$ '''sudo insmod hello.ko'''
 
+
|}
 +
</ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>Then use the '''demsg''' command to view the output of the '''hello.ko''' kernel module. If you can see the output below, it means that the'''hello.ko''' kernel module is loaded correctly.</li></ol>
+
<li>Then use the '''demsg''' command to view the output of the '''hello.ko''' kernel module. If you can see the output below, it means that the'''hello.ko''' kernel module is loaded correctly.</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''dmesg | grep &quot;Hello&quot;'''
 
orangepi@orangepi:~$ '''dmesg | grep &quot;Hello&quot;'''
  
 
[ 2871.893988] '''Hello Orange Pi -- init'''
 
[ 2871.893988] '''Hello Orange Pi -- init'''
 
+
|}
 +
</ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
<li>Use the '''rmmod''' command to uninstall the '''hello.ko''' kernel module</li></ol>
+
<li>Use the '''rmmod''' command to uninstall the '''hello.ko''' kernel module</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo rmmod hello'''
 
orangepi@orangepi:~$ '''sudo rmmod hello'''
  
Line 5,835: Line 7,217:
  
 
[ 3173.800892] '''Hello Orange Pi -- exit'''
 
[ 3173.800892] '''Hello Orange Pi -- exit'''
 +
|}
 +
</ol>
 +
</li></ol>
 +
<span id="use-of-raspberry-pi-5-inch-screen"></span>
  
<span id="use-of-raspberry-pi-5-inch-screen"></span>
 
 
== Use of Raspberry Pi 5 Inch screen ==
 
== Use of Raspberry Pi 5 Inch screen ==
  
Line 5,845: Line 7,230:
 
<li><p>First prepare the required accessories</p>
 
<li><p>First prepare the required accessories</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>Raspberry Pi 5-inch MIPI LCD display + Touch screen</li></ol>
+
<li>Raspberry Pi 5-inch MIPI LCD display + Touch screen</li>
</li></ol>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Raspberry Pi 5-inch MIPI LCD display + Touch screenis shown in the figure below'''</big>
  
'''Raspberry Pi 5-inch MIPI LCD display + Touch screenis shown in the figure below'''
+
[[File:cm4-img363.png|center]]
 
+
|}
[[File:media/image363.png|312x312px]]
 
 
 
[[File:media/image364.png|306x219px]]
 
  
 +
[[File:cm4-img364.png]]
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>15pin MIPI cable</li></ol>
+
<li>15pin MIPI cable</li>
 
 
[[File:media/image365.png|276x111px]]
 
  
 +
[[File:cm4-img365.png]]
 +
</ol>
 +
</li></ol>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Then connect the 15pin MIPI cable to the Raspberry Pi 5-inch screen as shown in the figure below (note the orientation of the insulating surface)</li></ol>
+
<li>Then connect the 15pin MIPI cable to the Raspberry Pi 5-inch screen as shown in the figure below (note the orientation of the insulating surface)</li>
 
 
[[File:media/image366.png|294x160px]]
 
  
 +
[[File:cm4-img366.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Finally connect to the LCD interface of the Orange Pi CM4 development board</li></ol>
+
<li>Finally connect to the LCD interface of the Orange Pi CM4 development board</li>
  
[[File:media/image367.png|299x173px]]
+
[[File:cm4-img367.png]]
 +
</ol>
 +
<span id="how-to-open-raspberry-pi-5-inch-screen-configuration"></span>
  
<span id="how-to-open-raspberry-pi-5-inch-screen-configuration"></span>
 
 
=== How to open Raspberry Pi 5-inch screen configuration ===
 
=== How to open Raspberry Pi 5-inch screen configuration ===
  
Line 5,876: Line 7,265:
 
<li><p>The steps to open the mipi lcd configuration are as follows:</p>
 
<li><p>The steps to open the mipi lcd configuration are as follows:</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li></ol>
+
<li>First run '''orangepi-config''', common users remember to add '''sudo''' permission</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
orangepi@orangepi:~$ '''sudo orangepi-config'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then select '''System'''</li></ol>
+
<li>Then select '''System'''</li>
 
 
[[File:media/image368.png|576x304px]]
 
  
 +
[[File:cm4-img368.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Then select '''Hardware'''</li></ol>
+
<li>Then select '''Hardware'''</li>
 
 
[[File:media/image369.png|576x266px]]
 
  
 +
[[File:cm4-img369.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then use the arrow keys on the keyboard to navigate to raspi-7inch-touchscreen, and then use the space to select</li></ol>
+
<li>Then use the arrow keys on the keyboard to navigate to raspi-7inch-touchscreen, and then use the space to select</li>
 
 
[[File:media/image370.png|408x310px]]
 
  
 +
[[File:cm4-img370.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Save&gt;'''Save</li></ol>
+
<li>Then select '''&lt;Save&gt;''' Save</li>
 
 
[[File:media/image371.png|404x133px]]
 
  
 +
[[File:cm4-img371.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Back&gt;'''</li></ol>
+
<li>Then select '''&lt;Back&gt;'''</li>
 
 
[[File:media/image372.png|397x151px]]
 
  
 +
[[File:cm4-img372.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
<li>Then select '''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</li></ol>
+
<li>Then select '''&lt;Reboot&gt;''' Restart the system for the configuration to take effect</li>
  
[[File:media/image373.png|331x154px]]
+
[[File:cm4-img373.png]]
  
'''The above settings will eventually add the configuration of overlays=raspi-7inch-touchscreen to /boot/orangepiEnv.txt. After setting, you can check it first. If this configuration does not exist, then there is a problem with the settings.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''The above settings will eventually add the configuration of <span style="color:#FF0000">overlays=raspi-7inch-touchscreen</span> to /boot/orangepiEnv.txt. After setting, you can check it first. If this configuration does not exist, then there is a problem with the settings.'''
 +
 
 +
'''If you find it troublesome to use orangepi-config, you can also use the vim editor to open /boot/orangepiEnv.txt, and then add the configuration of <span style="color:#FF0000">overlays=raspi-7inch-touchscreen</span> is also possible.'''</big>
  
'''If you find it troublesome to use orangepi-config, you can also use the vim editor to open /boot/orangepiEnv.txt, and then add the configuration of overlays=raspi-7inch-touchscreen is also possible.'''
 
  
 
orangepi@orangepi:~$ '''cat /boot/orangepiEnv.txt | grep &quot;raspi&quot;'''
 
orangepi@orangepi:~$ '''cat /boot/orangepiEnv.txt | grep &quot;raspi&quot;'''
  
'''overlays=raspi-7inch-touchscreen # sample configuration'''
+
'''<span style="color:#FF0000">overlays=raspi-7inch-touchscreen # sample configuration</span>'''
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>After startup, you can see the display of the LCD screen as follows:</li></ol>
+
<li>After startup, you can see the display of the LCD screen as follows:</li>
  
[[File:media/image374.png|381x262px]]
+
[[File:cm4-img374.png]]
 +
</ol>
 +
<span id="the-method-of-server-version-image-rotation-display-direction"></span>
  
<span id="the-method-of-server-version-image-rotation-display-direction"></span>
 
 
=== The method of server version image rotation display direction ===
 
=== The method of server version image rotation display direction ===
  
# Add '''extraargs=fbcon=rotate:the direction to rotate''' in '''/boot/orangepiEnv.txt''' This line configuration can set the direction displayed by the server version of the Linux system, where the number after '''fbcon=rotate:''' can be set as:
+
<ol start="1" style="list-style-type: decimal;">
 +
<li>Add '''extraargs=fbcon=rotate:the direction to rotate''' in '''/boot/orangepiEnv.txt''' This line configuration can set the direction displayed by the server version of the Linux system, where the number after '''fbcon=rotate:''' can be set as:
  
<!-- -->
 
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>0: normal screen (default is landscape)</p></li>
 
<li><p>0: normal screen (default is landscape)</p></li>
 
<li><p>1: Turn clockwise 90 degrees</p></li>
 
<li><p>1: Turn clockwise 90 degrees</p></li>
 
<li><p>2: Flip 180 degrees</p></li>
 
<li><p>2: Flip 180 degrees</p></li>
<li><p>3: Turn clockwise 270 degrees</p></li></ol>
+
<li><p>3: Turn clockwise 270 degrees</p></li>
  
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''
 
orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''
  
 
overlays=lcd1
 
overlays=lcd1
  
'''extraargs=cma=64M fbcon=rotate:3'''
+
'''<span style="color:#FF0000">extraargs=cma=64M fbcon=rotate:3</span>'''
 
+
|}
'''Note that if there is the line extraargs=cma=64M in /boot/orangepiEnv.txt by default, the configuration fbcon=rotate:3 can be added after extraargs=cma=64M (separated by spaces).'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 
+
|-
 +
|
 +
<big>'''Note that if there is the line extraargs=cma=64M in /boot/orangepiEnv.txt by default, the configuration fbcon=rotate:3 can be added after extraargs=cma=64M (separated by spaces).'''</big>
 +
|}
 +
</ol>
 +
</li></ol>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Then '''restart''' the Linux system and you can see that the direction displayed on the LCD screen has been rotated</li></ol>
+
<li>Then '''<span style="color:#FF0000">restart</span>''' the Linux system and you can see that the direction displayed on the LCD screen has been rotated</li></ol>
  
 
<span id="method-of-rotating-display-and-touch-direction-of-desktop-version-image"></span>
 
<span id="method-of-rotating-display-and-touch-direction-of-desktop-version-image"></span>
 +
 
=== Method of rotating display and touch direction of desktop version image ===
 
=== Method of rotating display and touch direction of desktop version image ===
  
 
# First open '''Display''' Settings in Linux
 
# First open '''Display''' Settings in Linux
  
[[File:media/image375.png|298x206px]]
+
::[[File:cm4-img375.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
Line 5,960: Line 7,367:
 
<li><p>'''Left''': rotate left 90 degrees</p></li>
 
<li><p>'''Left''': rotate left 90 degrees</p></li>
 
<li><p>'''Inverted''': Flip up and down, which is equivalent to rotating 180 degrees</p></li>
 
<li><p>'''Inverted''': Flip up and down, which is equivalent to rotating 180 degrees</p></li>
<li><p>'''Right''': rotate right 90 degrees</p></li></ol>
+
<li><p>'''Right''': rotate right 90 degrees</p></li>
 +
 
 +
[[File:cm4-img376.png]]
 +
</ol>
 
</li></ol>
 
</li></ol>
 
[[File:media/image376.png|286x180px]]
 
 
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then click '''Apply'''</li></ol>
+
<li>Then click '''Apply'''</li>
 
 
[[File:media/image377.png|330x207px]]
 
  
 +
[[File:cm4-img377.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then select '''Keep this configuration'''</li></ol>
+
<li>Then select '''Keep this configuration'''</li>
 
 
[[File:media/image378.png|374x210px]]
 
  
 +
[[File:cm4-img378.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
 
<li><p>At this point, the screen display has been rotated, and then close the '''Display''' program</p></li>
 
<li><p>At this point, the screen display has been rotated, and then close the '''Display''' program</p></li>
 
<li><p>The above steps will only select the display direction, and will not rotate the direction of the touch. Use the '''set_lcd_rotate.sh''' script to rotate the direction of the touch. After the script is set, it will automatically restart, and then you can test whether the touch has been used normally.</p>
 
<li><p>The above steps will only select the display direction, and will not rotate the direction of the touch. Use the '''set_lcd_rotate.sh''' script to rotate the direction of the touch. After the script is set, it will automatically restart, and then you can test whether the touch has been used normally.</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>'''None''': no rotation</li></ol>
+
<li>'''None''': no rotation</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
orangepi@orangepi:~$ '''set_lcd_rotate.sh none'''
 
orangepi@orangepi:~$ '''set_lcd_rotate.sh none'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>'''Left''': rotate left 90 degrees</li></ol>
+
<li>'''Left''': rotate left 90 degrees</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''set_lcd_rotate.sh left'''
 
orangepi@orangepi:~$ '''set_lcd_rotate.sh left'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>'''Inverted''': Flip up and down, which is equivalent to rotating 180 degrees</li></ol>
+
<li>'''Inverted''': Flip up and down, which is equivalent to rotating 180 degrees</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''set_lcd_rotate.sh inverted'''
 
orangepi@orangepi:~$ '''set_lcd_rotate.sh inverted'''
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>'''Right''': rotate right 90 degrees</li></ol>
+
<li>'''Right''': rotate right 90 degrees</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''set_lcd_rotate.sh right'''
 
orangepi@orangepi:~$ '''set_lcd_rotate.sh right'''
 +
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''The set_lcd_rotate.sh script mainly does four things:'''
  
'''The set_lcd_rotate.sh script mainly does four things:'''
 
  
 
'''1. Rotate the direction displayed by the framebuffer'''
 
'''1. Rotate the direction displayed by the framebuffer'''
Line 6,009: Line 7,430:
 
'''4. Restart the system'''
 
'''4. Restart the system'''
  
'''Rotating the touch direction is achieved by adding the line Option &quot;TransformationMatrix&quot; &quot;x x x x x x x x x&quot; to /usr/share/X11/xorg.conf.d/40-libinput.conf Where &quot;x x x x x x x x x&quot; is configured differently for different directions.'''
 
  
 +
'''Rotating the touch direction is achieved by adding the line Option &quot;TransformationMatrix&quot; &quot;x x x x x x x x x&quot; to /usr/share/X11/xorg.conf.d/40-libinput.conf Where &quot;x x x x x x x x x&quot; is configured differently for different directions.'''</big>
 +
|}
 +
</ol>
 +
</li></ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>Touch rotation reference</li></ol>
+
<li>Touch rotation reference</li>
 
+
{| class="wikitable" style="width:800px;"
https://wiki.ubuntu.com/X/InputCoordinateTransformation
+
|-
 +
|
 +
'''https://wiki.ubuntu.com/X/InputCoordinateTransformation'''
 +
|}
 +
</ol>
 +
<span id="how-to-use-the-edp-screen"></span>
  
<span id="how-to-use-the-edp-screen"></span>
 
 
== How to use the eDP screen ==
 
== How to use the eDP screen ==
  
Line 6,028: Line 7,456:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image379.jpeg|190x186px|single-head cable in the same direction]]
+
[[File:cm4-img379.png]]
  
 
</div></li>
 
</div></li>
Line 6,034: Line 7,462:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image380.jpeg|243x452px|eDP display]]
+
[[File:cm4-img380.png]]
  
 
</div></li></ol>
 
</div></li></ol>
 
</li>
 
</li>
 
<li><p>Connect the 30pin eDP interface of the screen and the eDP interface of the development board with a 30pin single-head cable in the same direction</p>
 
<li><p>Connect the 30pin eDP interface of the screen and the eDP interface of the development board with a 30pin single-head cable in the same direction</p>
<p>[[File:media/image381.png|470x194px]]</p></li></ol>
+
<p>[[File:cm4-img381.png]]</p></li></ol>
  
 
<span id="how-to-open-the-edp-screen-configuration"></span>
 
<span id="how-to-open-the-edp-screen-configuration"></span>
 
=== How to open the eDP screen configuration ===
 
=== How to open the eDP screen configuration ===
  
'''Note that the method described below is only applicable to the adapted eDP screen. If the customer uses an unadapted screen, it cannot be turned on according to the following method.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that the method described below is only applicable to the adapted eDP screen. If the customer uses an unadapted screen, it cannot be turned on according to the following method.'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
Line 6,051: Line 7,483:
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>First run '''orangepi-config''', ordinary users remember to add &gt; '''sudo''' permission</p>
 
<li><p>First run '''orangepi-config''', ordinary users remember to add &gt; '''sudo''' permission</p>
<p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p></li>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p>
 +
|}
 +
</li>
 
<li><p>Then select '''System'''</p>
 
<li><p>Then select '''System'''</p>
<p>[[File:media/image368.png|576x304px]]</p></li>
+
<p>[[File:cm4-img368.png]]</p></li>
 
<li><p>Then select '''Hardware'''</p>
 
<li><p>Then select '''Hardware'''</p>
<p>[[File:media/image369.png|576x266px]]</p></li>
+
<p>[[File:cm4-img369.png]]</p></li>
 
<li><p>Then use the arrow keys on the keyboard to navigate to edp, and &gt; then use the '''space''' to select</p>
 
<li><p>Then use the arrow keys on the keyboard to navigate to edp, and &gt; then use the '''space''' to select</p>
<p>[[File:media/image382.png|396x379px]]</p></li>
+
<p>[[File:cm4-img382.png]]</p></li>
 
<li><p>Then select '''&lt;Save&gt;''' to save</p>
 
<li><p>Then select '''&lt;Save&gt;''' to save</p>
<p>[[File:media/image371.png|404x133px]]</p></li>
+
<p>[[File:cm4-img371.png]]</p></li>
 
<li><p>Then select '''&lt;Back&gt;'''</p>
 
<li><p>Then select '''&lt;Back&gt;'''</p>
<p>[[File:media/image372.png|397x151px]]</p></li>
+
<p>[[File:cm4-img372.png]]</p></li>
 
<li><p>Then select '''&lt;Reboot&gt;''' to restart the system to make the &gt; configuration take effect</p>
 
<li><p>Then select '''&lt;Reboot&gt;''' to restart the system to make the &gt; configuration take effect</p>
<p>[[File:media/image373.png|331x154px]]</p>
+
<p>[[File:cm4-img373.png]]</p>
<p>'''The above settings will eventually add the configuration of overlays=edp to /boot/orangepiEnv.txt. After setting, you can check it first. If this configuration does not exist, then there is a problem with the settings.'''</p>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<p>'''If you find it troublesome to use orangepi-config, you can also use the vim editor to open /boot/orangepiEnv.txt, and then add the configuration of overlays=edp.'''</p>
+
|-
 +
|
 +
<big><p>'''The above settings will eventually add the configuration of <span style="color:#FF0000">overlays=edp</span> to /boot/orangepiEnv.txt. After setting, you can check it first. If this configuration does not exist, then there is a problem with the settings.'''</p>
 +
<p>'''If you find it troublesome to use orangepi-config, you can also use the vim editor to open /boot/orangepiEnv.txt, and then add the configuration of <span style="color:#FF0000">overlays=edp</span>.'''</p></big>
 +
 
 +
 
 
<p>orangepi@orangepi:~$ '''cat /boot/orangepiEnv.txt | grep &quot;edp&quot;'''</p>
 
<p>orangepi@orangepi:~$ '''cat /boot/orangepiEnv.txt | grep &quot;edp&quot;'''</p>
<p>'''overlays=edp #sample configuration'''</p></li></ol>
+
<p>'''<span style="color:#FF0000">overlays=edp &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #sample configuration</span>'''</p>
 +
|}
 +
</li></ol>
 
</li>
 
</li>
 
<li><p>After startup, you can see the display of the eDP screen as follows:</p>
 
<li><p>After startup, you can see the display of the eDP screen as follows:</p>
<p>[[File:media/image383.png|462x290px]]</p></li></ol>
+
<p>[[File:cm4-img383.png]]</p></li></ol>
  
 
<span id="instructions-for-using-the-switch-logo"></span>
 
<span id="instructions-for-using-the-switch-logo"></span>
 +
 
== Instructions for using the switch logo ==
 
== Instructions for using the switch logo ==
  
Line 6,078: Line 7,523:
 
<li><p>By default, the switch logo will only be displayed in the desktop version of the system</p></li>
 
<li><p>By default, the switch logo will only be displayed in the desktop version of the system</p></li>
 
<li><p>Set the '''bootlogo''' variable to '''false''' in '''/boot/orangepiEnv.txt''' to turn off the switch logo</p>
 
<li><p>Set the '''bootlogo''' variable to '''false''' in '''/boot/orangepiEnv.txt''' to turn off the switch logo</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''vim /boot/orangepiEnv.txt'''</p>
 
<p>orangepi@orangepi:~$ '''vim /boot/orangepiEnv.txt'''</p>
 
<p>verbosity=1</p>
 
<p>verbosity=1</p>
<p>'''bootlogo=false'''</p></li>
+
<p>'''<span style="color:#FF0000">bootlogo=false</span>'''</p>
 +
|}
 +
</li>
 
<li><p>Set the '''bootlogo''' variable to '''true''' in '''/boot/orangepiEnv.txt''' to enable the switch logo</p>
 
<li><p>Set the '''bootlogo''' variable to '''true''' in '''/boot/orangepiEnv.txt''' to enable the switch logo</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>orangepi@orangepi:~$ '''vim /boot/orangepiEnv.txt'''</p>
 
<p>orangepi@orangepi:~$ '''vim /boot/orangepiEnv.txt'''</p>
 
<p>verbosity=1</p>
 
<p>verbosity=1</p>
<p>'''bootlogo=true'''</p></li>
+
<p>'''<span style="color:#FF0000">bootlogo=true</span>'''</p>
<li><p>The location of the boot logo image in the Linux system is</p></li></ol>
+
|}
 
+
</li>
 +
<li><p>The location of the boot logo image in the Linux system is</p></li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
'''/usr/share/plymouth/themes/orangepi/watermark.png'''
 
'''/usr/share/plymouth/themes/orangepi/watermark.png'''
 
+
|}
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>After replacing the boot logo picture, you need to run the following command to take effect</li></ol>
+
<li>After replacing the boot logo picture, you need to run the following command to take effect</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo update-initramfs -u'''
 
orangepi@orangepi:~$ '''sudo update-initramfs -u'''
 +
|}
 +
</ol>
 +
<span id="how-to-use-the-zfs-file-system"></span>
  
<span id="how-to-use-the-zfs-file-system"></span>
 
 
== How to use the ZFS file system ==
 
== How to use the ZFS file system ==
  
Line 6,100: Line 7,562:
 
=== How to install ZFS ===
 
=== How to install ZFS ===
  
'''Before installing zfs, please make sure that the Linux image used is the latest version. In addition, if zfs is already installed in the system, it needs to be installed again.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Before installing zfs, please make sure that the Linux image used is the latest version. In addition, if zfs is already installed in the system, it needs to be installed again.'''</big>
 +
|}
  
Before installing zfs, you need to install the kernel header file first. For the method of installing the kernel header file, please refer to the instructions in the [[\l|'''section on the method of installing the kernel header file''']].
+
Before installing zfs, you need to install the kernel header file first. For the method of installing the kernel header file, please refer to the instructions in the [[Orange Pi CM4#How to install kernel header files|'''section on the method of installing the kernel header file''']].
  
 
In Ubuntu20.04, Ubuntu22.04 and Debian11 systems, zfs cannot be installed directly through apt, because the default apt source zfs version is lower than 2.1.6, and there is a problem of incompatibility with rk Linux5.10 kernel. This problem is fixed in zfs version 2.1.6 and later.
 
In Ubuntu20.04, Ubuntu22.04 and Debian11 systems, zfs cannot be installed directly through apt, because the default apt source zfs version is lower than 2.1.6, and there is a problem of incompatibility with rk Linux5.10 kernel. This problem is fixed in zfs version 2.1.6 and later.
  
To solve this problem, we provide a zfs deb package that can be installed normally, which can be downloaded from the [http://www.orangepi.org/html/serviceAndSupport/index.html '''official tool'''] of the development board. Open the '''<span class="mark">official tool</span>''', and enter the '''<span class="mark">zfs-related deb package folders used by Ubuntu and Debian systems</span>'''. You can see three types of deb packages: Ubuntu20.04, Ubuntu22.04 and Debian11. Please download the required version.
+
To solve this problem, we provide a zfs deb package that can be installed normally, which can be downloaded from the [http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html '''official tool'''] of the development board. Open the '''<span class="mark">official tool</span>''', and enter the '''<span class="mark">zfs-related deb package folders used by Ubuntu and Debian systems</span>'''. You can see three types of deb packages: Ubuntu20.04, Ubuntu22.04 and Debian11. Please download the required version.
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image384.png|230x127px|1692258914099]]
+
[[File:cm4-img384.png]]
  
 
</div>
 
</div>
After downloading the zfs deb packages of the corresponding version, please upload them to the Linux system of the development board. For the upload method, please refer to '''[[\l|the description in the section of the method of uploading files to the Linux system of the development board]].'''
+
After downloading the zfs deb packages of the corresponding version, please upload them to the Linux system of the development board. For the upload method, please refer to '''[[Orange Pi CM4#Method of uploading files to the development board Linux system|the description in the section of the method of uploading files to the Linux system of the development board]].'''
  
 
After the upload is complete, use the '''cd''' command in the command line of the development board Linux system to enter the directory of the deb package, and then use the following command to install the deb package of zfs.
 
After the upload is complete, use the '''cd''' command in the command line of the development board Linux system to enter the directory of the deb package, and then use the following command to install the deb package of zfs.
  
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo apt install ./*.deb'''
 
orangepi@orangepi:~$ '''sudo apt install ./*.deb'''
 +
|}
  
 
After the installation is complete, use the following command to see the zfs-related kernel modules:
 
After the installation is complete, use the following command to see the zfs-related kernel modules:
  
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''ls /lib/modules/5.10.160-rockchip-rk356x/updates/dkms/'''
 
orangepi@orangepi:~$ '''ls /lib/modules/5.10.160-rockchip-rk356x/updates/dkms/'''
  
 
'''icp.ko spl.ko zavl.ko zcommon.ko zfs.ko zlua.ko znvpair.ko zunicode.ko zzstd.ko'''
 
'''icp.ko spl.ko zavl.ko zcommon.ko zfs.ko zlua.ko znvpair.ko zunicode.ko zzstd.ko'''
 +
|}
  
 
Then restart the Linux system to see that the zfs kernel module will be automatically loaded:
 
Then restart the Linux system to see that the zfs kernel module will be automatically loaded:
  
orangepi@orangepi:~$ '''lsmod | grep &quot;zfs&quot;'''
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
orangepi@orangepi:~$ '''lsmod | grep "zfs"'''
  
zfs 2801664 0
+
zfs   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;              2801664 &nbsp;&nbsp;&nbsp;  0
  
zunicode 327680 1 zfs
+
zunicode     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        327680 &nbsp;&nbsp;&nbsp;  1 &nbsp; zfs
  
zzstd 471040 1 zfs
+
zzstd       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;        471040 &nbsp;&nbsp;&nbsp;  1 &nbsp; zfs
  
zlua 139264 1 zfs
+
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
  
zcommon 69632 1 zfs
+
zcommon     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        69632 &nbsp;&nbsp;&nbsp;  1 &nbsp; zfs
  
znvpair 61440 2 zfs,zcommon
+
znvpair         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      61440 &nbsp;&nbsp;&nbsp;  2 &nbsp; zfs,zcommon
  
zavl 16384 1 zfs
+
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
  
icp 221184 1 zfs
+
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
  
spl 77824 6 zfs,icp,zzstd,znvpair,zcommon,zavl
+
spl       &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; zfs,icp,zzstd,znvpair,zcommon,zavl
 +
|}
  
 
In Debian12, the default version of zfs is 2.1.11, so we can install zfs directly through the following command. Again, please make sure that the system has installed the deb package of the kernel header file before installation.
 
In Debian12, the default version of zfs is 2.1.11, so we can install zfs directly through the following command. Again, please make sure that the system has installed the deb package of the kernel header file before installation.
  
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo apt install -y zfsutils-linux zfs-dkms'''
 
orangepi@orangepi:~$ '''sudo apt install -y zfsutils-linux zfs-dkms'''
 +
|}
  
 
<span id="methods-of-creating-zfs-pools"></span>
 
<span id="methods-of-creating-zfs-pools"></span>
 +
 
=== Methods of creating ZFS pools ===
 
=== Methods of creating ZFS pools ===
  
'''ZFS is based on storage pools, we can add multiple physical storage devices to the pool, and then allocate storage space from this pool.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''ZFS is based on storage pools, we can add multiple physical storage devices to the pool, and then allocate storage space from this pool.'''
  
'''The following content is demonstrated based on the development board connected to an NVMe SSD and a USB flash drive.'''
+
'''The following content is demonstrated based on the development board connected to an NVMe SSD and a USB flash drive.'''</big>
 +
|}
  
 
# First, we can use the '''lsblk''' command to view all storage devices on the development board. The current development board is connected to an NVMe SSD and a U disk. The output is as follows:
 
# First, we can use the '''lsblk''' command to view all storage devices on the development board. The current development board is connected to an NVMe SSD and a U disk. The output is as follows:
  
[[File:media/image385.png|379x227px]]
+
::[[File:cm4-img385.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Then enter the following command to create a ZFS pool, including two storage devices, NVMe SSD and U disk</li></ol>
+
<li>Then enter the following command to create a ZFS pool, including two storage devices, NVMe SSD and U disk</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo zpool create -f pool1 /dev/nvme0n1 /dev/sda'''
 
orangepi@orangepi:~$ '''sudo zpool create -f pool1 /dev/nvme0n1 /dev/sda'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then use the '''zpool list''' command to see that the system has created a ZFS pool named '''pool1''', and the size of the ZFS pool pool1 is the size of the NVME SSD plus the size of the U disk</li></ol>
+
<li>Then use the '''zpool list''' command to see that the system has created a ZFS pool named '''pool1''', and the size of the ZFS pool pool1 is the size of the NVME SSD plus the size of the U disk</li>
 
 
[[File:media/image386.png|576x37px]]
 
  
 +
[[File:cm4-img386.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then execute '''df -h''' to see that '''pool1''' is mounted to the '''/pool1''' directory</li></ol>
+
<li>Then execute '''df -h''' to see that '''pool1''' is mounted to the '''/pool1''' directory</li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
orangepi@orangepi:~$ '''df -h''' <br>
  
orangepi@orangepi:~$ '''df -h'''
+
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
  
Filesystem Size Used Avail Use% Mounted on
+
tmpfs  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        1.6G  &nbsp;&nbsp;&nbsp; 18M  1.6G  2% /run <br>
  
tmpfs 1.6G 18M 1.6G 2% /run
+
/dev/mmcblk0p2 &nbsp;&nbsp;&nbsp;  29G &nbsp;&nbsp;&nbsp; 6.0G  22G  22% / <br>
  
/dev/mmcblk0p2 29G 6.0G 22G 22% /
+
tmpfs    &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/shm <br>
  
tmpfs 7.7G 46M 7.7G 1% /dev/shm
+
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% /run/lock <br>
  
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
+
tmpfs   &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% /tmp <br>
  
tmpfs 7.7G 944K 7.7G 1% /tmp
+
/dev/mmcblk0p1  &nbsp;&nbsp;&nbsp;  1022M &nbsp;&nbsp;&nbsp; 115M  908M  12% /boot <br>
  
/dev/mmcblk0p1 1022M 115M 908M 12% /boot
+
/dev/zram1  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    188M &nbsp;&nbsp;&nbsp; 4.5M  169M  3% /var/log <br>
  
/dev/zram1 188M 4.5M 169M 3% /var/log
+
tmpfs     &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% /run/user/1000 <br>
 
 
tmpfs 1.6G 80K 1.6G 1% /run/user/1000
 
 
 
'''pool1 489G 9.3M 489G 1% /pool1'''
 
  
 +
'''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</span>''' <br>
 +
|}
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Use the following command to see that the file system type of pool1 is zfs</li></ol>
+
<li>Use the following command to see that the file system type of pool1 is zfs</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''mount | grep pool1'''
 
orangepi@orangepi:~$ '''mount | grep pool1'''
  
 
pool1 on /pool1 type '''zfs''' (rw,xattr,noacl)
 
pool1 on /pool1 type '''zfs''' (rw,xattr,noacl)
 
+
|}
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then we can test copying a file to the ZFS pool</li></ol>
+
<li>Then we can test copying a file to the ZFS pool</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo cp -v /usr/local/test.mp4 /pool1/'''
 
orangepi@orangepi:~$ '''sudo cp -v /usr/local/test.mp4 /pool1/'''
  
 
'/usr/local/test.mp4' -&gt; '/pool1/test.mp4'
 
'/usr/local/test.mp4' -&gt; '/pool1/test.mp4'
 +
|}
 +
</ol>
 +
<span id="test-the-data-deduplication-function-of-zfs"></span>
  
<span id="test-the-data-deduplication-function-of-zfs"></span>
 
 
=== Test the data deduplication function of ZFS ===
 
=== Test the data deduplication function of ZFS ===
  
 
# The data deduplication function of ZFS is disabled by default, we need to execute the following command to enable it
 
# The data deduplication function of ZFS is disabled by default, we need to execute the following command to enable it
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''sudo zfs set dedup=on pool1'''
 
orangepi@orangepi:~$ '''sudo zfs set dedup=on pool1'''
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Then do a simple test, first enter pool1, and then execute the following command to generate a random file with a size of 1G</li></ol>
+
<li>Then do a simple test, first enter pool1, and then execute the following command to generate a random file with a size of 1G</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''cd /pool1/'''
 
orangepi@orangepi:~$ '''cd /pool1/'''
  
Line 6,230: Line 7,736:
  
 
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.04367 s, 213 MB/s
 
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.04367 s, 213 MB/s
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then use the following command to copy 1000 random files of size 1G</li></ol>
+
<li>Then use the following command to copy 1000 random files of size 1G</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:/pool1$ '''for ((i=0; i&lt;1000; i++)); do sudo cp test.1g $i.test.1g; done'''
 
root@orangepi:/pool1$ '''for ((i=0; i&lt;1000; i++)); do sudo cp test.1g $i.test.1g; done'''
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then use '''du -lh''' to see that there are currently 1002G of data in the pool, but in fact the size of the ZFS pool is only '''504GB''' (the total capacity of SSD+U disk), which cannot hold such a large amount of data</li></ol>
+
<li>Then use '''du -lh''' to see that there are currently 1002G of data in the pool, but in fact the size of the ZFS pool is only '''504GB''' (the total capacity of SSD+U disk), which cannot hold such a large amount of data</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:/pool1$ '''du -lh'''
 
root@orangepi:/pool1$ '''du -lh'''
  
 
1002G
 
1002G
 
+
|}
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Then use the '''zpool list''' command to see that only 1.01G is actually occupied, because these 1001 files are all duplicates, indicating that the data deduplication function is effective.</li></ol>
+
<li>Then use the '''zpool list''' command to see that only 1.01G is actually occupied, because these 1001 files are all duplicates, indicating that the data deduplication function is effective.</li>
  
[[File:media/image387.png|576x36px]]
+
[[File:cm4-img387.png]]
 +
</ol>
 +
<span id="test-the-data-compression-function-of-zfs"></span>
  
<span id="test-the-data-compression-function-of-zfs"></span>
 
 
=== Test the data compression function of ZFS ===
 
=== Test the data compression function of ZFS ===
  
 
# Because the stored data is different, the disk space saved by compression will also be different, so we choose to compress relatively large plain text files for compression testing, and execute the following commands to pack the '''/var/log/''' and '''/etc/''' directories into a tarball
 
# Because the stored data is different, the disk space saved by compression will also be different, so we choose to compress relatively large plain text files for compression testing, and execute the following commands to pack the '''/var/log/''' and '''/etc/''' directories into a tarball
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
orangepi@orangepi:~$ '''cd /pool1/'''
 
orangepi@orangepi:~$ '''cd /pool1/'''
  
 
root@orangepi:/pool1$ '''sudo tar -cf text.tar /var/log/ /etc/'''
 
root@orangepi:/pool1$ '''sudo tar -cf text.tar /var/log/ /etc/'''
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Then the file size that can be seen through the '''ls -lh''' command and the space occupied in the ZFS pool are both '''27M'''</li></ol>
+
<li>Then the file size that can be seen through the '''ls -lh''' command and the space occupied in the ZFS pool are both '''27M'''</li>
 
 
[[File:media/image388.png|576x90px]]
 
  
 +
[[File:cm4-img388.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then we enable compression in the ZFS pool pool1</li></ol>
+
<li>Then we enable compression in the ZFS pool pool1</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:/pool1$ '''sudo zfs set compression=lz4 pool1'''
 
root@orangepi:/pool1$ '''sudo zfs set compression=lz4 pool1'''
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then execute the following command again to package the '''/var/log/''' and '''/etc/''' directories into a tar package</li></ol>
+
<li>Then execute the following command again to package the '''/var/log/''' and '''/etc/''' directories into a tar package</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:/pool1$ '''sudo tar -cf text.tar /var/log/ /etc/'''
 
root@orangepi:/pool1$ '''sudo tar -cf text.tar /var/log/ /etc/'''
 
+
|}
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>At this time, you can see that the size of the '''text.tar''' file is still 27M, but it only occupies 9.47M in the ZFS pool, indicating that the file is compressed</li></ol>
+
<li>At this time, you can see that the size of the '''text.tar''' file is still 27M, but it only occupies 9.47M in the ZFS pool, indicating that the file is compressed</li>
  
[[File:media/image389.png|576x79px]]
+
[[File:cm4-img389.png]]
 +
</ol>
 +
<span id="how-to-shut-down-and-restart-the-development-board"></span>
  
<span id="how-to-shut-down-and-restart-the-development-board"></span>
 
 
== How to shut down and restart the development board ==
 
== How to shut down and restart the development board ==
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>During the running of the Linux system, if the Type-C power supply is directly unplugged, some data may be lost or damaged in the file system, so please use the '''poweroff''' command to shut down the Linux system of the development board before powering off. Then unplug the power again.</p>
 
<li><p>During the running of the Linux system, if the Type-C power supply is directly unplugged, some data may be lost or damaged in the file system, so please use the '''poweroff''' command to shut down the Linux system of the development board before powering off. Then unplug the power again.</p>
<p>orangepi@orangepi:~$ '''sudo poweroff'''</p></li>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''sudo poweroff'''</p>
 +
|}
 +
</li>
 
<li><p>The command to restart the Linux system is</p>
 
<li><p>The command to restart the Linux system is</p>
<p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p></li></ol>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p>
 +
|}
 +
</li></ol>
  
 
<span id="linux-sdkorangepi-build-instructions"></span>
 
<span id="linux-sdkorangepi-build-instructions"></span>
= Linux SDK——orangepi-build instructions =
+
 
 +
= '''Linux SDK——orangepi-build instructions''' =
  
 
<span id="compilation-system-requirements"></span>
 
<span id="compilation-system-requirements"></span>
 
== Compilation system requirements ==
 
== Compilation system requirements ==
  
'''We can cross-compile the Linux image of the development board on the x64 computer, or compile the Linux image of the development board on the Ubuntu22.04 system of the development board, please choose one according to your preference.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''We can cross-compile the Linux image of the development board on the x64 computer, or compile the Linux image of the development board on the Ubuntu22.04 system of the development board, please choose one according to your preference.'''
  
'''If you use orangepi-build to compile the Linux image in the Ubuntu22.04 system of the development board, please do a good job of cooling (especially when the SSD starts). If the heat dissipation is not done well, it is prone to the error of file system runaway.'''
+
'''If you use orangepi-build to compile the Linux image in the Ubuntu22.04 system of the development board, please do a good job of cooling (especially when the SSD starts). If the heat dissipation is not done well, it is prone to the error of file system runaway.'''</big>
 +
|}
  
 
<span id="compile-with-the-ubuntu22.04-system-of-the-development-board"></span>
 
<span id="compile-with-the-ubuntu22.04-system-of-the-development-board"></span>
Line 6,300: Line 7,840:
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
<li><p>The Linux SDK, namely '''orangepi-build''', supports running on the '''Ubuntu 22.04''' of the development board (other systems have not been tested), so before downloading orangepi-build, please first ensure that the Ubuntu version installed on the development board is Ubuntu 22.04. The command to check the Ubuntu version installed on the development board is as follows. If the Release field does not display '''22.04''', it means that the current Ubuntu version does not meet the requirements. Please replace the system before performing the following operations.</p>
+
<li><p>The Linux SDK, namely '''orangepi-build''', supports running on the '''<span style="color:#FF0000">Ubuntu 22.04</span>''' of the development board (other systems have not been tested), so before downloading orangepi-build, please first ensure that the Ubuntu version installed on the development board is Ubuntu 22.04. The command to check the Ubuntu version installed on the development board is as follows. If the Release field does not display '''<span style="color:#FF0000">22.04</span>''', it means that the current Ubuntu version does not meet the requirements. Please replace the system before performing the following operations.</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''lsb_release -a'''</p>
 
<p>test@test:~$ '''lsb_release -a'''</p>
 
<p>No LSB modules are available.</p>
 
<p>No LSB modules are available.</p>
 
<p>Distributor ID: Ubuntu</p>
 
<p>Distributor ID: Ubuntu</p>
 
<p>Description: Ubuntu 22.04 LTS</p>
 
<p>Description: Ubuntu 22.04 LTS</p>
<p>Release: '''22.04'''</p>
+
<p>Release: '''<span style="color:#FF0000">22.04</span>'''</p>
<p>Codename: jammy</p></li></ol>
+
<p>Codename: jammy</p>
 +
|}
 +
</li></ol>
  
<!-- -->
 
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>If the computer is installed with Windows system and there is no computer with Ubuntu 22.04 installed, you can consider using '''VirtualBox''' or '''VMwar''' to install an Ubuntu 22.04 virtual machine in the Windows system. But please be careful not to compile orangepi-build on the WSL virtual machine, because orangepi-build has not been tested in the WSL virtual machine, so it cannot be guaranteed that orangepi-build can be used normally in WSL.</p></li>
 
<li><p>If the computer is installed with Windows system and there is no computer with Ubuntu 22.04 installed, you can consider using '''VirtualBox''' or '''VMwar''' to install an Ubuntu 22.04 virtual machine in the Windows system. But please be careful not to compile orangepi-build on the WSL virtual machine, because orangepi-build has not been tested in the WSL virtual machine, so it cannot be guaranteed that orangepi-build can be used normally in WSL.</p></li>
<li><p>The download address of the installation image of Ubuntu 22.04 '''amd64''' version is:</p>
+
<li><p>The download address of the installation image of Ubuntu 22.04 '''<span style="color:#FF0000">amd64</span>''' version is:</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<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>[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>or</p>
 
<p>or</p>
<p>'''https://repo.huaweicloud.com/ubuntu-releases/22.04/ubuntu-22.04.1-desktop-amd64.iso'''</p></li></ol>
+
<p>'''https://repo.huaweicloud.com/ubuntu-releases/22.04/ubuntu-22.04.1-desktop-amd64.iso'''</p>
 +
|}
 +
</li></ol>
  
 
<span id="get-the-source-code-of-linux-sdk"></span>
 
<span id="get-the-source-code-of-linux-sdk"></span>
 +
 
== Get the source code of Linux sdk ==
 
== Get the source code of Linux sdk ==
  
Line 6,324: Line 7,874:
 
# The Linux sdk actually refers to the code of orangepi-build. orangepi-build is modified based on the armbian build system. Using orangepi-build, multiple versions of Linux images can be compiled. First download the code of orangepi-build, the command is as follows:
 
# The Linux sdk actually refers to the code of orangepi-build. orangepi-build is modified based on the armbian build system. Using orangepi-build, multiple versions of Linux images can be compiled. First download the code of orangepi-build, the command is as follows:
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~$ '''sudo apt-get update'''
 
test@test:~$ '''sudo apt-get update'''
  
 
test@test:~$ '''sudo apt-get install -y git'''
 
test@test:~$ '''sudo apt-get install -y git'''
  
test@test:~$ '''git clone https://github.com/orangepi-xunlong/orangepi-build.git -b next'''
+
test@test:~$ '''git clone https://github.com/orangepi-xunlong/orangepi-build.git <span style="color:#FF0000">-b next</span>'''
 +
|}
  
'''Note that the Orange Pi 3B development board needs to download the source code of the next branch of orangepi-build. The above git clone command needs to specify the branch of the orangepi-build source code as next.'''
+
::{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that the Orange Pi 3B development board needs to download the source code of the <span style="color:#FF0000">next</span> branch of orangepi-build. The above git clone command needs to specify the branch of the orangepi-build source code as next.'''</big>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image390.png|576x298px|图片6]]
+
[[File:cm4-img390.png|center|790px]]
  
 
</div>
 
</div>
'''Downloading the orangepi-build code through the git clone command does not require entering the user name and password of the github account (the same is true for downloading other codes in this manual), if the Ubuntu PC prompts the user to enter the github account after entering the git clone command The name and password are usually entered incorrectly in the address of the orangepi-build warehouse behind the git clone. Please check the spelling of the command carefully, instead of thinking that we forgot to provide the username and password of the github account.'''
+
|}
 +
::{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Downloading the orangepi-build code through the git clone command does not require entering the user name and password of the github account (the same is true for downloading other codes in this manual), if the Ubuntu PC prompts the user to enter the github account after entering the git clone command The name and password are usually entered incorrectly in the address of the orangepi-build warehouse behind the git clone. Please check the spelling of the command carefully, instead of thinking that we forgot to provide the username and password of the github account.'''</big>
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>The u-boot and Linux kernel versions currently used by the development board are as follows</li></ol>
+
<li>The u-boot and Linux kernel versions currently used by the development board are as follows</li>
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"  
 
|-
 
|-
| style="text-align: left;"| '''branch'''
+
| '''branch'''
| style="text-align: left;"| '''u-boot version'''
+
| '''u-boot version'''
| style="text-align: left;"| '''Linux Kernel version'''
+
| '''Linux Kernel version'''
 
|-
 
|-
| style="text-align: left;"| '''legacy'''
+
| '''legacy'''
| style="text-align: left;"| '''u-boot 2017.09'''
+
| '''u-boot 2017.09'''
| style="text-align: left;"| '''Linux5.10'''
+
| '''Linux5.10'''
 
|}
 
|}
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''The branch mentioned here is not the same thing as the branch of the orangepi-build source code, please do not confuse it. This branch is mainly used to distinguish different kernel source code versions.'''
  
'''The branch mentioned here is not the same thing as the branch of the orangepi-build source code, please do not confuse it. This branch is mainly used to distinguish different kernel source code versions.'''
+
'''Currently, the Linux5.10 bsp kernel provided by RK is defined as the legacy branch. If the mainline kernel is supported in the future, a current branch will be added.'''</big>
 
+
|}
'''Currently, the Linux5.10 bsp kernel provided by RK is defined as the legacy branch. If the mainline kernel is supported in the future, a current branch will be added.'''
+
</ol>
 
 
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
 
<li><p>orangepi-build will contain the following files and folders after downloading</p>
 
<li><p>orangepi-build will contain the following files and folders after downloading</p>
Line 6,363: Line 7,928:
 
<li><p>'''external''': Contains the configuration files needed to compile the image, specific scripts, and the source code of some programs, etc.</p></li>
 
<li><p>'''external''': Contains the configuration files needed to compile the image, specific scripts, and the source code of some programs, etc.</p></li>
 
<li><p>'''LICENSE''': GPL 2 license file</p></li>
 
<li><p>'''LICENSE''': GPL 2 license file</p></li>
<li><p>README.md: orangepi-build documentation</p></li>
+
<li><p>'''README.md''': orangepi-build documentation</p></li>
<li><p>'''scripts''': General script for compiling Linux images</p></li></ol>
+
<li><p>'''scripts''': General script for compiling Linux images</p></li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
test@test:~/orangepi-build$ '''ls'''
 
test@test:~/orangepi-build$ '''ls'''
  
'''build.sh external LICENSE''' README.md '''scripts'''
+
'''build.sh &nbsp;&nbsp;&nbsp;&nbsp; external &nbsp;&nbsp;&nbsp;&nbsp; LICENSE''' &nbsp;&nbsp;&nbsp;&nbsp; '''README.md''' &nbsp;&nbsp;&nbsp;&nbsp; '''scripts'''
 
+
|}
'''If you downloaded the code of orangepi-build from github, after downloading, you may find that orangepi-build does not contain the source code of u-boot and Linux kernel, nor does u-boot and Linux kernel need to use cross-compilation tools Chain, this is normal, because these things are stored in other separate github warehouses or some servers (the addresses will be detailed below). orangepi-build will specify the address of u-boot, Linux kernel and cross-compilation toolchain in the script and configuration file. When running orangepi-build, when it finds that there are no such things locally, it will automatically go to the corresponding place to download them.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''If you downloaded the code of orangepi-build from github, after downloading, you may find that orangepi-build does not contain the source code of u-boot and Linux kernel, nor does u-boot and Linux kernel need to use cross-compilation tools Chain, this is normal, because these things are stored in other separate github warehouses or some servers (the addresses will be detailed below). orangepi-build will specify the address of u-boot, Linux kernel and cross-compilation toolchain in the script and configuration file. When running orangepi-build, when it finds that there are no such things locally, it will automatically go to the corresponding place to download them.'''</big>
 +
|}
 +
</ol>
 +
</li></ol>
 +
<span id="download-the-cross-compilation-toolchain"></span>
  
<span id="download-the-cross-compilation-toolchain"></span>
 
 
=== Download the cross-compilation toolchain ===
 
=== Download the cross-compilation toolchain ===
  
'''The cross-compilation toolchain will only be downloaded when the orangepi-build compilation image is used on an x64 computer. Compiling the Linux image of the development board in the Ubuntu22.04 of the development board will not download the cross-compilation toolchain. At this time, orangepi-build/toolchains will be an empty folder.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''The cross-compilation toolchain will only be downloaded when the orangepi-build compilation image is used on an x64 computer. Compiling the Linux image of the development board in the Ubuntu22.04 of the development board will not download the cross-compilation toolchain. At this time, orangepi-build/toolchains will be an empty folder.'''</big>
 +
|}
  
 
# When orangepi-build runs for the first time, it will automatically download the cross-compilation toolchain and put it in the '''toolchains''' folder. Every time after running the build.sh script of orangepi-build, it will check whether the cross-compilation toolchain in '''toolchains''' exists , if it does not exist, the download will be restarted, if it exists, it will be used directly, and the download will not be repeated.
 
# When orangepi-build runs for the first time, it will automatically download the cross-compilation toolchain and put it in the '''toolchains''' folder. Every time after running the build.sh script of orangepi-build, it will check whether the cross-compilation toolchain in '''toolchains''' exists , if it does not exist, the download will be restarted, if it exists, it will be used directly, and the download will not be repeated.
Line 6,382: Line 7,958:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image391.png|575x278px|选区_396]]
+
::[[File:cm4-img391.png]]
  
 
</div>
 
</div>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>The image URL of the cross-compilation toolchain in China is the open source software image site of Tsinghua University</li></ol>
+
<li>The image URL of the cross-compilation toolchain in China is the open source software image site of Tsinghua University</li>
 
+
{| class="wikitable" style="width:800px;"
https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/
+
|-
 
+
|
 +
'''https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/'''
 +
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>After '''toolchains''' is downloaded, it will contain multiple versions of cross-compilation toolchains, and the development board will only use two of them</li></ol>
+
<li>After '''toolchains''' is downloaded, it will contain multiple versions of cross-compilation toolchains, and the development board will only use two of them</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~/orangepi-build$ '''ls toolchains/'''
 
test@test:~/orangepi-build$ '''ls toolchains/'''
  
Line 6,416: Line 7,997:
  
 
gcc-linaro-arm-none-eabi-4.8-2014.04_linux
 
gcc-linaro-arm-none-eabi-4.8-2014.04_linux
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
 
<li><p>The cross-compilation toolchain used to compile the Linux kernel source code is</p>
 
<li><p>The cross-compilation toolchain used to compile the Linux kernel source code is</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>Linux5.10</li></ol>
+
<li>Linux5.10</li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
'''gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''
 +
|}
 +
</ol>
 
</li></ol>
 
</li></ol>
 
'''gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''
 
 
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
 
<li><p>The cross-compilation tool chain used to compile the u-boot source code is</p>
 
<li><p>The cross-compilation tool chain used to compile the u-boot source code is</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>v2017.09</li></ol>
+
<li>v2017.09</li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
'''gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu'''
 +
|}
 +
</ol>
 
</li></ol>
 
</li></ol>
 +
<span id="orangepi-build-complete-directory-structure-description"></span>
  
'''gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu'''
 
 
<span id="orangepi-build-complete-directory-structure-description"></span>
 
 
=== orangepi-build complete directory structure description ===
 
=== orangepi-build complete directory structure description ===
  
Line 6,439: Line 8,028:
 
<li><p>The orangepi-build repository does not contain the source code of the Linux kernel, u-boot, and cross-compilation toolchain after downloading. The source code of the Linux kernel and u-boot is stored in an independent git repository</p>
 
<li><p>The orangepi-build repository does not contain the source code of the Linux kernel, u-boot, and cross-compilation toolchain after downloading. The source code of the Linux kernel and u-boot is stored in an independent git repository</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The git repository where the Linux kernel source code is stored is as follows:</li></ol>
+
<li>The git repository where the Linux kernel source code is stored is as follows:</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 +
<p>root@orangepi:~# '''cd /sys/class/leds/status_led'''</p>
 +
|}
 
'''https://github.com/orangepi-xunlong/linux-orangepi/tree/orange-pi-5.10-rk35xx'''
 
'''https://github.com/orangepi-xunlong/linux-orangepi/tree/orange-pi-5.10-rk35xx'''
 
+
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>The git warehouse where the b.u-boot source code is stored is as follows:</li></ol>
+
<li>The git warehouse where the b.u-boot source code is stored is as follows:</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>root@orangepi:~# '''cd /sys/class/leds/status_led'''</p>
 +
|}
 
'''https://github.com/orangepi-xunlong/u-boot-orangepi/tree/v2017.09-rk3588'''
 
'''https://github.com/orangepi-xunlong/u-boot-orangepi/tree/v2017.09-rk3588'''
 
+
</ol>
 +
</li></ol>
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
 
<li><p>When orangepi-build runs for the first time, it will download the cross-compilation toolchain, u-boot and Linux kernel source code. After successfully compiling a Linux image, the files and folders that can be seen in orangepi-build are:</p>
 
<li><p>When orangepi-build runs for the first time, it will download the cross-compilation toolchain, u-boot and Linux kernel source code. After successfully compiling a Linux image, the files and folders that can be seen in orangepi-build are:</p>
<p>a. '''build.sh''': compile startup script</p>
+
:<p>a. '''build.sh''': compile startup script</p>
<p>b. '''external''': Contains the configuration files needed to compile the image, scripts with specific functions, and the source code of some programs. The rootfs compressed package cached during the image compilation process is also stored in external</p>
+
:<p>b. '''external''': Contains the configuration files needed to compile the image, scripts with specific functions, and the source code of some programs. The rootfs compressed package cached during the image compilation process is also stored in external</p>
<p>c. '''kernel''': stores the source code of the Linux kernel, and the folder named orange-pi-5.10-rk35xx stores the kernel source code of the legacy branch of the RK3588/RK3588S/RK3566 series development boards. Please do not manually name the folder name of the kernel source code Modify, if modified, the kernel source code will be re-downloaded when the compilation system is running</p>
+
:<p>c. '''kernel''': stores the source code of the Linux kernel, and the folder named orange-pi-5.10-rk35xx stores the kernel source code of the legacy branch of the RK3588/RK3588S/RK3566 series development boards. Please do not manually name the folder name of the kernel source code Modify, if modified, the kernel source code will be re-downloaded when the compilation system is running</p>
<p>d. '''LICENSE''': GPL 2 license file</p>
+
:<p>d. '''LICENSE''': GPL 2 license file</p>
<p>e. '''README.md''': orangepi-build documentation</p>
+
:<p>e. '''README.md''': orangepi-build documentation</p>
<p>f. '''output''': Store compiled deb packages such as u-boot and Linux, compilation logs, and compiled images and other files</p>
+
:<p>f. '''output''': Store compiled deb packages such as u-boot and Linux, compilation logs, and compiled images and other files</p>
<p>g. '''scripts''': general scripts for compiling Linux images</p>
+
:<p>g. '''scripts''': general scripts for compiling Linux images</p>
<p>h. '''toolchains''': store cross-compilation toolchain</p>
+
:<p>h. '''toolchains''': store cross-compilation toolchain</p>
<p>i. '''u-boot''': stores the source code of u-boot, the folder named '''v2017.09-rk3588''' stores the u-boot source code of the legacy branch of the RK3588/RK3588S/RK3566 series development boards, the name of the folder of the u-boot source code Please do not modify it manually, if it is modified, the u-boot source code will be re-downloaded when the compiling system is running</p>
+
:<p>i. '''u-boot''': stores the source code of u-boot, the folder named '''v2017.09-rk3588''' stores the u-boot source code of the legacy branch of the RK3588/RK3588S/RK3566 series development boards, the name of the folder of the u-boot source code Please do not modify it manually, if it is modified, the u-boot source code will be re-downloaded when the compiling system is running</p>
<p>j. '''userpatches''': Store configuration files needed to compile scripts</p></li></ol>
+
:<p>j. '''userpatches''': Store configuration files needed to compile scripts</p></li>
 
+
:{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~/orangepi-build$ '''ls'''
 
test@test:~/orangepi-build$ '''ls'''
  
'''build.sh external kernel LICENSE output''' README.md '''scripts toolchains u-boot userpatches'''
+
'''build.sh &nbsp;&nbsp;&nbsp;&nbsp; external &nbsp;&nbsp;&nbsp;&nbsp; kernel &nbsp;&nbsp;&nbsp;&nbsp; LICENSE &nbsp;&nbsp;&nbsp;&nbsp; output &nbsp;&nbsp;&nbsp;&nbsp;''' README.md ''' &nbsp;&nbsp;&nbsp;&nbsp;scripts &nbsp;&nbsp;&nbsp;&nbsp; toolchains &nbsp;&nbsp;&nbsp;&nbsp; u-boot &nbsp;&nbsp;&nbsp;&nbsp; userpatches'''
 +
|}
 +
</ol>
 +
<span id="compile-u-boot"></span>
  
<span id="compile-u-boot"></span>
 
 
== Compile u-boot ==
 
== Compile u-boot ==
  
 
# Run the build.sh script, remember to add sudo permission
 
# Run the build.sh script, remember to add sudo permission
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~/orangepi-build$ '''sudo ./build.sh'''
 
test@test:~/orangepi-build$ '''sudo ./build.sh'''
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
Line 6,477: Line 8,082:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image392.png|576x132px|选区_238]]
+
[[File:cm4-img392.png]]
  
 
</div></li>
 
</div></li>
Line 6,483: Line 8,088:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image393.png|576x253px|7d7048f5baea57bf0b852752e46b5446]]
+
[[File:cm4-img393.png]]
  
 
</div></li>
 
</div></li>
 
<li><p>Then it will start to compile u-boot, and some information prompted during compilation is explained as follows</p>
 
<li><p>Then it will start to compile u-boot, and some information prompted during compilation is explained as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>u-boot source code version</li></ol>
+
<li>u-boot source code version</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
[ o.k. ] Compiling u-boot [ '''v2017.09''' ]
 
[ o.k. ] Compiling u-boot [ '''v2017.09''' ]
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>The version of the cross-compilation toolchain</li></ol>
+
<li>The version of the cross-compilation toolchain</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 7.4.1''' ]
 
[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 7.4.1''' ]
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Path to the generated u-boot deb package</li></ol>
+
<li>Path to the generated u-boot deb package</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] Target directory [ '''orangepi-build/output/debs/u-boot''' ]
 
[ o.k. ] Target directory [ '''orangepi-build/output/debs/u-boot''' ]
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>The package name of the generated u-boot deb package</li></ol>
+
<li>The package name of the generated u-boot deb package</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] File name [ '''linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb''' ]
 
[ o.k. ] File name [ '''linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb''' ]
 
+
|}
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Compilation time</li></ol>
+
<li>Compilation time</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] Runtime [ '''1 min''' ]
 
[ o.k. ] Runtime [ '''1 min''' ]
 
+
|}
 +
</ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>Repeat the command to compile u-boot, use the following command to start compiling u-boot directly without selecting through the graphical interface</li></ol>
+
<li>Repeat the command to compile u-boot, use the following command to start compiling u-boot directly without selecting through the graphical interface</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi3b BRANCH=legacy BUILD_OPT=u-boot KERNEL_CONFIGURE=no''' ]
 
[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi3b BRANCH=legacy BUILD_OPT=u-boot KERNEL_CONFIGURE=no''' ]
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>View the u-boot deb package generated by compilation</li></ol>
+
<li>View the u-boot deb package generated by compilation</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~/orangepi-build$ '''ls output/debs/u-boot/'''
 
test@test:~/orangepi-build$ '''ls output/debs/u-boot/'''
  
 
linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb
 
linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb
 
+
|}
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
 
<li><p>The files contained in the generated u-boot deb package are as follows</p>
 
<li><p>The files contained in the generated u-boot deb package are as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>Use the following command to decompress the deb package</li></ol>
+
<li>Use the following command to decompress the deb package</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
test@test:~/orangepi-build$ '''cd output/debs/u-boot'''
 
test@test:~/orangepi-build$ '''cd output/debs/u-boot'''
  
Line 6,540: Line 8,167:
  
 
linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb '''usr'''
 
linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb '''usr'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>The decompressed file is as follows</li></ol>
+
<li>The decompressed file is as follows</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~/orangepi-build/output/debs/u-boot$ '''tree usr'''
 
test@test:~/orangepi-build/output/debs/u-boot$ '''tree usr'''
  
Line 6,550: Line 8,180:
 
└── lib
 
└── lib
  
├── linux-u-boot-legacy-orangepi3b_1.0.0_arm64
+
:├── linux-u-boot-legacy-orangepi3b_1.0.0_arm64
  
│   ├── idbloader.img
+
:│   ├── idbloader.img
  
│   ├── rkspi_loader.img
+
:│   ├── rkspi_loader.img
  
│   └── u-boot.itb
+
:│   └── u-boot.itb
  
└── u-boot
+
:└── u-boot
  
├── LICENSE
+
::├── LICENSE
  
├── orangepi-3b-rk3566_defconfig
+
::├── orangepi-3b-rk3566_defconfig
 +
 
 +
::└── platform_install.sh
  
└── platform_install.sh
 
  
 
3 directories, 6 files
 
3 directories, 6 files
 +
|}
 +
</ol>
 +
</li></ol>
 +
<ol start="7" style="list-style-type: decimal;">
 +
<li>When the orangepi-bulid compilation system compiles the u-boot source code, it will first synchronize the u-boot source code with the u-boot source code of the github server, so if you want to modify the u-boot source code, you first need to turn off the download and update function of the source code '''(This function needs to be fully compiled once u-boot, otherwise it will prompt that the source code of u-boot cannot be found. If the source code package downloaded from Baidu cloud disk, there is no such problem, because the source code of u-boot is all cached)''', otherwise the changes made will be reverted, the method is as follows:</li>
  
<ol start="7" style="list-style-type: decimal;">
+
Set the IGNORE_UPDATES variable in userpatches/config-default.conf to &quot;yes&quot;
<li>When the orangepi-bulid compilation system compiles the u-boot source code, it will first synchronize the u-boot source code with the u-boot source code of the github server, so if you want to modify the u-boot source code, you first need to turn off the download and update function of the source code '''(This function needs to be fully compiled once u-boot, otherwise it will prompt that the source code of u-boot cannot be found. If the source code package downloaded from Baidu cloud disk, there is no such problem, because the source code of u-boot is all cached)''', otherwise the changes made will be reverted, the method is as follows:</li></ol>
 
  
<blockquote>Set the IGNORE_UPDATES variable in userpatches/config-default.conf to &quot;yes&quot;
+
{| class="wikitable" style="width:800px;"
</blockquote>
+
|-
 +
|
 
test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''
 
test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''
  
IGNORE_UPDATES=&quot;'''yes'''&quot;
+
IGNORE_UPDATES=&quot;'''<span style="color:#FF0000">yes</span>'''&quot;
 
+
|}
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
 
<li><p>When debugging u-boot code, you can use the following method to update u-boot in the Linux image for testing</p>
 
<li><p>When debugging u-boot code, you can use the following method to update u-boot in the Linux image for testing</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>Upload the compiled u-boot deb package to the Linux system of the development board</li></ol>
+
<li>Upload the compiled u-boot deb package to the Linux system of the development board</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
test@test:~/orangepi-build$ '''cd output/debs/u-boot'''
 
test@test:~/orangepi-build$ '''cd output/debs/u-boot'''
  
 
test@test:~/orangepi_build/output/debs/u-boot$ '''scp \'''
 
test@test:~/orangepi_build/output/debs/u-boot$ '''scp \'''
  
'''linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb''' [mailto:root@192.168.1.xxx:/root root@192.168.1.xxx:/root]
+
'''linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb root@192.168.1.xxx:/root'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then log in to the development board and uninstall the deb package of u-boot installed</li></ol>
+
<li>Then log in to the development board and uninstall the deb package of u-boot installed</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~# '''apt purge -y linux-u-boot-orangepi3b-legacy'''
 
root@orangepi:~# '''apt purge -y linux-u-boot-orangepi3b-legacy'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Install the new u-boot deb package just uploaded</li></ol>
+
<li>Install the new u-boot deb package just uploaded</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~# '''dpkg -i''' '''linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb'''
 
root@orangepi:~# '''dpkg -i''' '''linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb'''
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then run the nand-sata-install script</li></ol>
+
<li>Then run the nand-sata-install script</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~# '''nand-sata-install'''
 
root@orangepi:~# '''nand-sata-install'''
 
+
|}
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>Then select '''5 Install/Update the bootloader on SD/eMMC''' to update the u-boot in the TF card or '''7 Install/Update the bootloader on SPI Flash''' to update the u-boot in the SPI Flash</li></ol>
+
<li>Then select '''5 Install/Update the bootloader on SD/eMMC''' to update the u-boot in the TF card or '''7 Install/Update the bootloader on SPI Flash''' to update the u-boot in the SPI Flash</li>
 
 
[[File:media/image394.png|312x152px]]
 
  
 +
[[File:cm4-img394.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>After pressing the Enter key, a Warning will pop up first</li></ol>
+
<li>After pressing the Enter key, a Warning will pop up first</li>
 
 
[[File:media/image395.png|309x168px]]
 
  
 +
[[File:cm4-img395.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
<li>Press the Enter key again to start updating u-boot, and the following information will be displayed after the update is completed</li></ol>
+
<li>Press the Enter key again to start updating u-boot, and the following information will be displayed after the update is completed</li>
 
 
[[File:media/image396.png|244x137px]]
 
  
 +
[[File:cm4-img396.png]]
 +
</ol>
 
<ol start="8" style="list-style-type: lower-alpha;">
 
<ol start="8" style="list-style-type: lower-alpha;">
 
<li>Then you can restart the development board to test whether the modification of u-boot takes effect</li></ol>
 
<li>Then you can restart the development board to test whether the modification of u-boot takes effect</li></ol>
 +
</li></ol>
  
<!-- -->
 
 
<ol start="9" style="list-style-type: decimal;">
 
<ol start="9" style="list-style-type: decimal;">
 
<li><p>Other useful information</p>
 
<li><p>Other useful information</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>In the u-boot 2017.09 source code, the defconfig configuration file used by the development board is</li></ol>
+
<li>In the u-boot 2017.09 source code, the defconfig configuration file used by the development board is</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
[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''']
 
[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''']
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>In the u-boot 2017.09 source code, the dts file used by the development board is</li></ol>
+
<li>In the u-boot 2017.09 source code, the dts file used by the development board is</li>
 
+
{| class="wikitable" style="width:800px;"
[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]
+
|-
 +
|
 +
[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''']
 +
|}
 +
</ol>
 +
</li></ol>
 +
<span id="compile-the-linux-kernel"></span>
  
<span id="compile-the-linux-kernel"></span>
 
 
== Compile the Linux kernel ==
 
== Compile the Linux kernel ==
  
 
# Run the build.sh script, remember to add sudo permission
 
# Run the build.sh script, remember to add sudo permission
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~/orangepi-build$ '''sudo ./build.sh'''
 
test@test:~/orangepi-build$ '''sudo ./build.sh'''
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Select '''Kernel package''', then enter</li></ol>
+
<li>Select '''Kernel package''', then enter</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image397.png|575x116px|选区_240]]
+
[[File:cm4-img397.png]]
  
</div>
+
</div></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then select the model of the development board</li></ol>
+
<li>Then select the model of the development board</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image393.png|576x253px|7d7048f5baea57bf0b852752e46b5446]]
+
[[File:cm4-img393.png]]
  
</div>
+
</div></ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then it will prompt whether to display the kernel configuration interface. If you do not need to modify the kernel configuration, select the first one. If you need to modify the kernel configuration, select the second one.</li></ol>
+
<li>Then it will prompt whether to display the kernel configuration interface. If you do not need to modify the kernel configuration, select the first one. If you need to modify the kernel configuration, select the second one.</li>
 
 
[[File:media/image398.png|576x87px]]
 
  
 +
[[File:cm4-img398.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>If you choose to display the kernel configuration menu (the second option) in step 4, the kernel configuration interface opened by '''make menuconfig''' will pop up. At this time, you can directly modify the kernel configuration, save and exit after modification. Yes, after exiting, the kernel source code will be compiled</li></ol>
+
<li>If you choose to display the kernel configuration menu (the second option) in step 4, the kernel configuration interface opened by '''make menuconfig''' will pop up. At this time, you can directly modify the kernel configuration, save and exit after modification. Yes, after exiting, the kernel source code will be compiled</li>
  
[[File:media/image399.png|462x322px]]
+
[[File:cm4-img399.png]]
  
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>If you do not need to modify the configuration options of the kernel, when running the build.sh script, pass in '''KERNEL_CONFIGURE=no''' to temporarily block the pop-up kernel configuration interface</li></ol>
+
<li>If you do not need to modify the configuration options of the kernel, when running the build.sh script, pass in '''KERNEL_CONFIGURE=no''' to temporarily block the pop-up kernel configuration interface</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~/orangepi-build$ '''sudo ./build.sh KERNEL_CONFIGURE=no'''
 
test@test:~/orangepi-build$ '''sudo ./build.sh KERNEL_CONFIGURE=no'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<li><p>You can also set '''KERNEL_CONFIGURE=no''' in the '''orangepi-build/userpatches/config-default.conf''' configuration file, which can permanently disable this function</p></li>
 
<li><p>You can also set '''KERNEL_CONFIGURE=no''' in the '''orangepi-build/userpatches/config-default.conf''' configuration file, which can permanently disable this function</p></li>
<li><p>If the following error is displayed when compiling the kernel, it is because the terminal interface of the Ubuntu PC is too small to display the '''make menuconfig''' interface. Please maximize the terminal of the Ubuntu PC and run the build.sh script again</p></li></ol>
+
<li><p>If the following error is displayed when compiling the kernel, it is because the terminal interface of the Ubuntu PC is too small to display the '''make menuconfig''' interface. Please maximize the terminal of the Ubuntu PC and run the build.sh script again</p></li>
 
 
[[File:media/image400.png|574x234px]]
 
  
 +
[[File:cm4-img400.png]]
 +
</ol>
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
 
<li><p>Part of the information prompted when compiling the kernel source code is as follows</p>
 
<li><p>Part of the information prompted when compiling the kernel source code is as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The version of the Linux kernel source code</li></ol>
+
<li>The version of the Linux kernel source code</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
[ o.k. ] Compiling current kernel [ '''5.10.160''' ]
 
[ o.k. ] Compiling current kernel [ '''5.10.160''' ]
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>The version of the cross-compilation toolchain used</li></ol>
+
<li>The version of the cross-compilation toolchain used</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] Compiler version [ '''aarch64-none-linux-gnu-gcc 11.2.1''' ]
 
[ o.k. ] Compiler version [ '''aarch64-none-linux-gnu-gcc 11.2.1''' ]
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>The configuration file used by the kernel by default and the path where it is stored</li></ol>
+
<li>The configuration file used by the kernel by default and the path where it is stored</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] Using kernel config file [ '''config/kernel/linux-rockchip-rk356x-legacy.config''' ]
 
[ o.k. ] Using kernel config file [ '''config/kernel/linux-rockchip-rk356x-legacy.config''' ]
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>The path of the deb package related to the kernel generated by compiling</li></ol>
+
<li>The path of the deb package related to the kernel generated by compiling</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] Target directory [ '''orangepi-build/output/debs/''' ]
 
[ o.k. ] Target directory [ '''orangepi-build/output/debs/''' ]
 
+
|}
 +
</ol>
 
<ol start="5" style="list-style-type: lower-alpha;">
 
<ol start="5" style="list-style-type: lower-alpha;">
<li>The package name of the compiled kernel image deb package</li></ol>
+
<li>The package name of the compiled kernel image deb package</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] File name [ '''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb''' ]
 
[ o.k. ] File name [ '''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb''' ]
 
+
|}
 +
</ol>
 
<ol start="6" style="list-style-type: lower-alpha;">
 
<ol start="6" style="list-style-type: lower-alpha;">
<li>The time used for compilation</li></ol>
+
<li>The time used for compilation</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] Runtime [ '''5 min''' ]
 
[ o.k. ] Runtime [ '''5 min''' ]
 
+
|}
 +
</ol>
 
<ol start="7" style="list-style-type: lower-alpha;">
 
<ol start="7" style="list-style-type: lower-alpha;">
<li>Finally, the compilation command to repeatedly compile the kernel selected last time will be displayed. Use the following command to start compiling the kernel source code directly without selecting through the graphical interface</li></ol>
+
<li>Finally, the compilation command to repeatedly compile the kernel selected last time will be displayed. Use the following command to start compiling the kernel source code directly without selecting through the graphical interface</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi3b BRANCH=legacy BUILD_OPT=kernel KERNEL_CONFIGURE=no''' ]
 
[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepi3b BRANCH=legacy BUILD_OPT=kernel KERNEL_CONFIGURE=no''' ]
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
 
<li><p>View the deb package related to the kernel generated by compilation</p>
 
<li><p>View the deb package related to the kernel generated by compilation</p>
Line 6,723: Line 8,407:
 
<li><p>'''linux-dtb-legacy-rockchip-rk356x_1.0.0_arm64.deb''' Contains dtb files used by the kernel</p></li>
 
<li><p>'''linux-dtb-legacy-rockchip-rk356x_1.0.0_arm64.deb''' Contains dtb files used by the kernel</p></li>
 
<li><p>'''linux-headers-legacy-rockchip-rk356x_1.0.0_arm64.deb''' Include kernel header files</p></li>
 
<li><p>'''linux-headers-legacy-rockchip-rk356x_1.0.0_arm64.deb''' Include kernel header files</p></li>
<li><p>'''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb''' Contains kernel images and kernel modules</p></li></ol>
+
<li><p>'''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb''' Contains kernel images and kernel modules</p></li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
test@test:~/orangepi-build$ '''ls output/debs/linux-*'''
 
test@test:~/orangepi-build$ '''ls output/debs/linux-*'''
  
Line 6,731: Line 8,416:
  
 
output/debs/linux-headers-legacy-rockchip-rk356x_1.0.0_arm64.deb
 
output/debs/linux-headers-legacy-rockchip-rk356x_1.0.0_arm64.deb
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
 
<li><p>The files contained in the generated Linux-image deb package are as follows</p>
 
<li><p>The files contained in the generated Linux-image deb package are as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>Use the following command to decompress the deb package</li></ol>
+
<li>Use the following command to decompress the deb package</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
test@test:~/orangepi-build$ '''cd output/debs'''
 
test@test:~/orangepi-build$ '''cd output/debs'''
  
Line 6,755: Line 8,443:
  
 
'''boot etc lib''' linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb '''usr'''
 
'''boot etc lib''' linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb '''usr'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>The decompressed file is as follows</li></ol>
+
<li>The decompressed file is as follows</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~/orangepi-build/output/debs/test$ '''tree -L 2'''
 
test@test:~/orangepi-build/output/debs/test$ '''tree -L 2'''
  
Line 6,783: Line 8,474:
 
└── usr
 
└── usr
  
├── lib
+
:├── lib
 
 
└── share
 
  
 +
:└── share
 +
|}
 +
</ol>
 +
</li></ol>
 
<ol start="9" style="list-style-type: decimal;">
 
<ol start="9" style="list-style-type: decimal;">
<li>The orangepi-bulid compilation system will first synchronize the Linux kernel source code with the Linux kernel source code of the github server when compiling the Linux kernel source code, so if you want to modify the Linux kernel source code, you first need to turn off the update function of the source code '''(You need to fully compile the Linux kernel source code before turning off this function. Otherwise, you will be prompted that the source code of the Linux kernel cannot be found. If you download the source code package from Baidu cloud disk, there is no such problem, because the source code of Linux has been cached.)''', otherwise the The changes made will be reverted as follows:</li></ol>
+
<li>The orangepi-bulid compilation system will first synchronize the Linux kernel source code with the Linux kernel source code of the github server when compiling the Linux kernel source code, so if you want to modify the Linux kernel source code, you first need to turn off the update function of the source code '''(You need to fully compile the Linux kernel source code before turning off this function. Otherwise, you will be prompted that the source code of the Linux kernel cannot be found. If you download the source code package from Baidu cloud disk, there is no such problem, because the source code of Linux has been cached.)''', otherwise the The changes made will be reverted as follows:</li>
 +
 
 +
Set the IGNORE_UPDATES variable in '''userpatches/config-default.conf''' to &quot;yes&quot;
  
<blockquote>Set the IGNORE_UPDATES variable in '''userpatches/config-default.conf''' to &quot;yes&quot;
+
{| class="wikitable" style="width:800px;"
</blockquote>
+
|-
 +
|
 
test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''
 
test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''
  
 
IGNORE_UPDATES=&quot;'''yes'''&quot;
 
IGNORE_UPDATES=&quot;'''yes'''&quot;
 
+
|}
 +
</ol>
 
<ol start="10" style="list-style-type: decimal;">
 
<ol start="10" style="list-style-type: decimal;">
 
<li><p>If the kernel has been modified, the following method can be used to update the kernel and kernel modules of the development board Linux system</p>
 
<li><p>If the kernel has been modified, the following method can be used to update the kernel and kernel modules of the development board Linux system</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>Upload the deb package of the compiled Linux kernel to the Linux system of the development board</li></ol>
+
<li>Upload the deb package of the compiled Linux kernel to the Linux system of the development board</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
test@test:~/orangepi-build$ '''cd output/debs'''
 
test@test:~/orangepi-build$ '''cd output/debs'''
  
Line 6,807: Line 8,505:
  
 
'''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb root@192.168.1.xxx:/root'''
 
'''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb root@192.168.1.xxx:/root'''
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Then log in to the development board and uninstall the deb package of the installed Linux kernel</li></ol>
+
<li>Then log in to the development board and uninstall the deb package of the installed Linux kernel</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~# '''apt purge -y linux-image-legacy-rockchip-rk356x'''
 
root@orangepi:~# '''apt purge -y linux-image-legacy-rockchip-rk356x'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>Install the deb package of the new Linux kernel just uploaded</li></ol>
+
<li>Install the deb package of the new Linux kernel just uploaded</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~# '''dpkg -i linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb'''
 
root@orangepi:~# '''dpkg -i linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb'''
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>Then restart the development board, and then check whether the kernel-related modifications have taken effect</li></ol>
+
<li>Then restart the development board, and then check whether the kernel-related modifications have taken effect</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
root@orangepi:~# '''reboot'''
 
root@orangepi:~# '''reboot'''
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="11" style="list-style-type: decimal;">
 
<ol start="11" style="list-style-type: decimal;">
 
<li><p>Other useful information</p>
 
<li><p>Other useful information</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>The storage location of the kernel configuration file is as &gt; follows, please do not go to the kernel source code to find &gt; the kernel configuration file used by the development board</p></li>
+
<li><p>The storage location of the kernel configuration file is as follows, please do not go to the kernel source code to find the kernel configuration file used by the development board</p></li>
<li><p>[https://github.com/orangepi-xunlong/orangepi-build/blob/next/external/config/kernel/linux-rockchip-rk356x-legacy.config '''orangepi-build/external/config/kernel/linux-rockchip-rk356x-legacy.config''']The &gt; location of the dts file used by the development board is</p></li></ol>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
[https://github.com/orangepi-xunlong/orangepi-build/blob/next/external/config/kernel/linux-rockchip-rk356x-legacy.config '''orangepi-build/external/config/kernel/linux-rockchip-rk356x-legacy.config''']
 +
|}
 +
<li><p>The location of the dts file used by the development board is</p></li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
[https://github.com/orangepi-xunlong/linux-orangepi/blob/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-cm4.dts '''orangepi-build/kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-cm4.dts''']
 +
|}
 +
</ol>
 
</li></ol>
 
</li></ol>
 +
<span id="compile-rootfs"></span>
  
[https://github.com/orangepi-xunlong/linux-orangepi/blob/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-cm4.dts '''orangepi-build/kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-cm4.dts''']
 
 
<span id="compile-rootfs"></span>
 
 
== Compile rootfs ==
 
== Compile rootfs ==
  
 
# Run the build.sh script, remember to add sudo permission
 
# Run the build.sh script, remember to add sudo permission
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~/orangepi-build$ '''sudo ./build.sh'''
 
test@test:~/orangepi-build$ '''sudo ./build.sh'''
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Select '''Rootfs and all deb packages''', then enter</li></ol>
+
<li>Select '''Rootfs and all deb packages''', then enter</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image401.png|576x119px|选区_241]]
+
[[File:cm4-img401.png]]
  
</div>
+
</div></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then select the model of the development board</li></ol>
+
<li>Then select the model of the development board</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image393.png|576x253px|7d7048f5baea57bf0b852752e46b5446]]
+
[[File:cm4-img393.png]]
  
</div>
+
</div></ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then select the type of rootfs</li></ol>
+
<li>Then select the type of rootfs</li>
 
 
[[File:media/image402.png|575x86px]]
 
  
 +
[[File:cm4-img402.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
 
<li><p>Then select the type of image</p>
 
<li><p>Then select the type of image</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>'''Image with console interface (server)''' Indicates the image of the server version, which is relatively small</p></li>
 
<li><p>'''Image with console interface (server)''' Indicates the image of the server version, which is relatively small</p></li>
<li><p>'''Image with desktop environment''' Indicates a image with a desktop, which is relatively large</p></li></ol>
+
<li><p>'''Image with desktop environment''' Indicates a image with a desktop, which is relatively large</p></li>
</li></ol>
 
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image403.png|576x75px|选区_245]]
+
[[File:cm4-img403.png]]
  
</div>
+
</div></ol>
 +
</li></ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>If you are compiling the image of the server version, you can also choose to compile the Standard version or the Minimal version. The pre-installed software of the Minimal version will be much less than that of the Standard version '''(please do not choose the Minimal version if there is no special requirement, because many things are not pre-installed by default. Some functions may not be available)'''</li></ol>
+
<li>If you are compiling the image of the server version, you can also choose to compile the Standard version or the Minimal version. The pre-installed software of the Minimal version will be much less than that of the Standard version '''(please do not choose the Minimal version if there is no special requirement, because many things are not pre-installed by default. Some functions may not be available)'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image404.png|576x78px|选区_397]]
+
[[File:cm4-img404.png]]
  
</div>
+
</div></ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>If you are compiling the image of the desktop version, you also need to select the type of desktop environment. Currently, Ubuntu Jammy mainly maintains XFCE and Gnome desktops, Ubuntu Focal only maintains XFCE desktops, and Debian Bullseye mainly maintains XFCE and KDE desktops</li></ol>
+
<li>If you are compiling the image of the desktop version, you also need to select the type of desktop environment. Currently, Ubuntu Jammy mainly maintains XFCE and Gnome desktops, Ubuntu Focal only maintains XFCE desktops, and Debian Bullseye mainly maintains XFCE and KDE desktops</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image405.png|575x99px|Selection_001]]
+
[[File:cm4-img405.png]]
  
 
</div>
 
</div>
[[File:media/image406.png|576x74px]]
+
[[File:cm4-img406.png]]
  
 
You can then select additional packages that need to be installed. Please press the Enter key to skip directly here.
 
You can then select additional packages that need to be installed. Please press the Enter key to skip directly here.
  
[[File:media/image407.png|575x264px]]
+
[[File:cm4-img407.png]]
 
+
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
 
<li><p>Then it will start to compile rootfs, and some of the information prompted during compilation are as follows</p>
 
<li><p>Then it will start to compile rootfs, and some of the information prompted during compilation are as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The type of rootfs</li></ol>
+
<li>The type of rootfs</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
[ o.k. ] local not found [ Creating new rootfs cache for '''jammy''']
 
[ o.k. ] local not found [ Creating new rootfs cache for '''jammy''']
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>The storage path of the compiled rootfs compressed package</li></ol>
+
<li>The storage path of the compiled rootfs compressed package</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] Target directory [ '''external/cache/rootfs''' ]
 
[ o.k. ] Target directory [ '''external/cache/rootfs''' ]
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: lower-alpha;">
 
<ol start="3" style="list-style-type: lower-alpha;">
<li>The name of the rootfs compressed package generated by compilation</li></ol>
+
<li>The name of the rootfs compressed package generated by compilation</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] File name [ '''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4''' ]
 
[ o.k. ] File name [ '''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4''' ]
 
+
|}
 +
</ol>
 
<ol start="4" style="list-style-type: lower-alpha;">
 
<ol start="4" style="list-style-type: lower-alpha;">
<li>The time used for compilation</li></ol>
+
<li>The time used for compilation</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ o.k. ] Runtime [ '''13 min''' ]
 
[ o.k. ] Runtime [ '''13 min''' ]
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="9" style="list-style-type: decimal;">
 
<ol start="9" style="list-style-type: decimal;">
 
<li><p>View the rootfs compressed package generated by compilation</p>
 
<li><p>View the rootfs compressed package generated by compilation</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>'''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4''' is the rootfs compressed package, the meaning of each field of the name is</p>
 
<li><p>'''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4''' is the rootfs compressed package, the meaning of each field of the name is</p>
<ol style="list-style-type: lower-alpha;">
+
<ol style="list-style-type: none;">
<li><p>'''jammy''' indicates the type of Linux distribution of rootfs</p></li>
+
<li><p>a) '''jammy''' indicates the type of Linux distribution of rootfs</p></li>
<li><p>'''xfce''' means rootfs is the type of desktop version, if it is '''cli''', it means the type of server version</p></li>
+
<li><p>b) '''xfce''' means rootfs is the type of desktop version, if it is '''cli''', it means the type of server version</p></li>
<li><p>'''arm64''' represents the architecture type of rootfs</p></li>
+
<li><p>c) '''arm64''' represents the architecture type of rootfs</p></li>
<li><p>'''f930ff6ebbac1a72108a2e100762b18f''' is the MD5 hash value generated by the package names of all software packages installed by rootfs. As long as the list of software packages installed by rootfs is not modified, this value will not change. The compilation script will use this MD5 hash value to generate Determine whether rootfs needs to be recompiled</p></li></ol>
+
<li><p>d) '''f930ff6ebbac1a72108a2e100762b18f''' is the MD5 hash value generated by the package names of all software packages installed by rootfs. As long as the list of software packages installed by rootfs is not modified, this value will not change. The compilation script will use this MD5 hash value to generate Determine whether rootfs needs to be recompiled</p></li></ol>
 
</li>
 
</li>
<li><p>'''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.list''' lists the package names of all packages installed by rootfs</p></li></ol>
+
<li><p>'''jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.list''' lists the package names of all packages installed by rootfs</p></li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
test@test:~/orangepi-build$ '''ls external/cache/rootfs/'''
 
test@test:~/orangepi-build$ '''ls external/cache/rootfs/'''
  
Line 6,937: Line 8,672:
  
 
jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.list
 
jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.list
 
+
|}
 +
</ol>
 +
</li></ol>
 
<ol start="10" style="list-style-type: decimal;">
 
<ol start="10" style="list-style-type: decimal;">
 
<li>If the required rootfs already exists under '''external/cache/rootfs''', then compiling rootfs again will directly skip the compilation process and will not restart the compilation. When compiling the image, it will also go to '''external/cache/rootfs''' to find out whether it has If there is rootfs available in the cache, use it directly, which can save a lot of download and compilation time.</li></ol>
 
<li>If the required rootfs already exists under '''external/cache/rootfs''', then compiling rootfs again will directly skip the compilation process and will not restart the compilation. When compiling the image, it will also go to '''external/cache/rootfs''' to find out whether it has If there is rootfs available in the cache, use it directly, which can save a lot of download and compilation time.</li></ol>
  
 
<span id="compile-linux-image"></span>
 
<span id="compile-linux-image"></span>
 +
 
== Compile Linux image ==
 
== Compile Linux image ==
  
 
# Run the build.sh script, remember to add sudo permission
 
# Run the build.sh script, remember to add sudo permission
  
 +
::{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~/orangepi-build$ '''sudo ./build.sh'''
 
test@test:~/orangepi-build$ '''sudo ./build.sh'''
 +
|}
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Select '''Full OS image for flashing''', then enter</li></ol>
+
<li>Select '''Full OS image for flashing''', then enter</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image408.png|576x128px|选区_242]]
+
[[File:cm4-img408.png]]
  
</div>
+
</div></ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then select the model of the development board</li></ol>
+
<li>Then select the model of the development board</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image393.png|576x253px|7d7048f5baea57bf0b852752e46b5446]]
+
[[File:cm4-img393.png]]
  
</div>
+
</div></ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then select the type of rootfs</li></ol>
+
<li>Then select the type of rootfs</li>
 
 
[[File:media/image402.png|575x86px]]
 
  
 +
[[File:cm4-img402.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
 
<li><p>Then select the type of image</p>
 
<li><p>Then select the type of image</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>'''Image with console interface (server)''' Indicates the image of the server version, which is relatively small</p></li>
 
<li><p>'''Image with console interface (server)''' Indicates the image of the server version, which is relatively small</p></li>
<li><p>'''Image with desktop environment''' Indicates a image with a desktop, which is relatively large</p></li></ol>
+
<li><p>'''Image with desktop environment''' Indicates a image with a desktop, which is relatively large</p></li>
</li></ol>
 
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image403.png|576x75px|选区_245]]
+
[[File:cm4-img403.png]]
  
</div>
+
</div></ol>
 +
</li></ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>If you are compiling the image of the server version, you can also choose to compile the Standard version or the Minimal version. The pre-installed software of the Minimal version will be much less than that of the Standard version '''(please do not choose the Minimal version if there is no special requirement, because many things are not pre-installed by default. Some functions may not be available)'''</li></ol>
+
<li>If you are compiling the image of the server version, you can also choose to compile the Standard version or the Minimal version. The pre-installed software of the Minimal version will be much less than that of the Standard version '''(please do not choose the Minimal version if there is no special requirement, because many things are not pre-installed by default. Some functions may not be available)'''</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image404.png|569x77px|选区_397]]
+
[[File:cm4-img404.png]]
  
</div>
+
</div></ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>If you are compiling the image of the desktop version, you also need to select the type of desktop environment. Currently, Ubuntu Jammy mainly maintains XFCE and Gnome desktops, Ubuntu Focal only maintains XFCE desktops, and Debian Bullseye mainly maintains XFCE and KDE desktops</li></ol>
+
<li>If you are compiling the image of the desktop version, you also need to select the type of desktop environment. Currently, Ubuntu Jammy mainly maintains XFCE and Gnome desktops, Ubuntu Focal only maintains XFCE desktops, and Debian Bullseye mainly maintains XFCE and KDE desktops</li>
  
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image405.png|575x99px|Selection_001]]
+
[[File:cm4-img405.png]]
  
 
</div>
 
</div>
[[File:media/image406.png|576x74px]]
+
[[File:cm4-img406.png]]
  
 
You can then select additional packages that need to be installed. Please press the Enter key to skip directly here.
 
You can then select additional packages that need to be installed. Please press the Enter key to skip directly here.
  
[[File:media/image407.png|575x264px]]
+
[[File:cm4-img407.png]]
 
+
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
 
<li><p>Then it will start to compile the Linux image. The general process of compilation is as follows</p>
 
<li><p>Then it will start to compile the Linux image. The general process of compilation is as follows</p>
<p>a. Initialize the compilation environment of Ubuntu PC and install the software packages required for the compilation process</p>
+
::<p>a. Initialize the compilation environment of Ubuntu PC and install the software packages required for the compilation process</p>
<p>b. Download the source code of u-boot and Linux kernel (if cached, only update the code)</p>
+
::<p>b. Download the source code of u-boot and Linux kernel (if cached, only update the code)</p>
<p>c. Compile u-boot source code and generate u-boot deb package</p>
+
::<p>c. Compile u-boot source code and generate u-boot deb package</p>
<p>d. Compile the Linux source code and generate Linux-related deb packages</p>
+
::<p>d. Compile the Linux source code and generate Linux-related deb packages</p>
<p>e. Make the deb package of Linux firmware</p>
+
::<p>e. Make the deb package of Linux firmware</p>
<p>f. Make the deb package of the orangepi-config tool</p>
+
::<p>f. Make the deb package of the orangepi-config tool</p>
<p>g. Create a deb package supported by the board</p>
+
::<p>g. Create a deb package supported by the board</p>
<p>h. If you are compiling the desktop image, you will also create desktop-related deb packages</p>
+
::<p>h. If you are compiling the desktop image, you will also create desktop-related deb packages</p>
<p>i. Check whether the rootfs has been cached, if not, recreate the rootfs, if it has been cached, directly decompress and use</p>
+
::<p>i. Check whether the rootfs has been cached, if not, recreate the rootfs, if it has been cached, directly decompress and use</p>
<p>j. Install the previously generated deb package into rootfs</p>
+
::<p>j. Install the previously generated deb package into rootfs</p>
<p>k. Make some specific settings for different development boards and different types of images, such as pre-installing additional software packages, modifying system configuration, etc.</p>
+
::<p>k. Make some specific settings for different development boards and different types of images, such as pre-installing additional software packages, modifying system configuration, etc.</p>
<p>l. Then make an image file and format the partition, the default type is ext4</p>
+
::<p>l. Then make an image file and format the partition, the default type is ext4</p>
<p>m. Then copy the configured rootfs to the mirrored partition</p>
+
::<p>m. Then copy the configured rootfs to the mirrored partition</p>
<p>n. Then update initramfs</p>
+
::<p>n. Then update initramfs</p>
<p>o. Finally, write the bin file of u-boot into the image through the dd command</p></li>
+
::<p>o. Finally, write the bin file of u-boot into the image through the dd command</p></li>
 
<li><p>After compiling the image, the following information will be prompted</p>
 
<li><p>After compiling the image, the following information will be prompted</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>The storage path of the compiled image</li></ol>
+
<li>The storage path of the compiled image</li>
</li></ol>
+
{| class="wikitable" style="width:800px;"
 
+
|-
 +
|
 
[ 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''' ]
 
[ 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''' ]
 
+
|}
 +
</ol>
 
<ol start="2" style="list-style-type: lower-alpha;">
 
<ol start="2" style="list-style-type: lower-alpha;">
<li>Compilation time</li></ol>
+
<li>Compilation time</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
'''[ o.k. ] Runtime [ 19 min ]'''
 
'''[ o.k. ] Runtime [ 19 min ]'''
 
+
|}
 +
</ol>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li>Repeat the command to compile the image, and use the following command to start compiling the image directly without selecting through the graphical interface</li></ol>
+
<li>Repeat the command to compile the image, and use the following command to start compiling the image directly without selecting through the graphical interface</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[ 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''' ]
 
[ 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''' ]
 +
|}
 +
</ol>
 +
</li></ol>
 +
<span id="instructions-for-using-the-orange-pi-os-arch-system"></span>
  
<span id="instructions-for-using-the-orange-pi-os-arch-system"></span>
+
= '''Instructions for using the Orange Pi OS Arch system''' =
= Instructions for using the Orange Pi OS Arch system =
 
  
 
<span id="orange-pi-os-arch-system-function-adaptation"></span>
 
<span id="orange-pi-os-arch-system-function-adaptation"></span>
 
== Orange Pi OS Arch system function adaptation ==
 
== Orange Pi OS Arch system function adaptation ==
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"  
 
|-
 
|-
| style="text-align: left;"| '''Function'''
+
| '''Function'''
| style="text-align: left;"| '''OPi OS Arch'''
+
| '''OPi OS Arch'''
 
|-
 
|-
| style="text-align: left;"| '''USB2.0x3'''
+
| '''USB2.0x3'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''USB3.0x1'''
+
| '''USB3.0x1'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''SPIFlash+M.2 NVMe SSD Boot'''
+
| '''SPIFlash+M.2 NVMe SSD Boot'''
| style="text-align: left;"| '''OK, It needs to be pasted with SPI Flash to work normally'''
+
| '''<span style="color:#FF0000">OK, It needs to be pasted with SPI Flash to work normally</span>'''
 
|-
 
|-
| style="text-align: left;"| '''WIFI'''
+
| '''WIFI'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Bluetooth'''
+
| '''Bluetooth'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''GPIO(40pin)'''
+
| '''GPIO(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''UART(40pin)'''
+
| '''UART(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''SPI(40pin)'''
+
| '''SPI(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''I2C(40pin)'''
+
| '''I2C(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''PWM(40pin)'''
+
| '''PWM(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''3pin debugging serial port'''
+
| '''3pin debugging serial port'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''eMMC start'''
+
| '''eMMC start'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''TF card start'''
+
| '''TF card start'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''HDMI video'''
+
| '''HDMI video'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''HDMI audio'''
+
| '''HDMI audio'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Raspberry Pi 5 inch screen display'''
+
| '''Raspberry Pi 5 inch screen display'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Raspberry Pi 5-inch screen touch function'''
+
| '''Raspberry Pi 5-inch screen touch function'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''eDP display'''
+
| '''eDP display'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''OV5647 camera'''
+
| '''OV5647 camera'''
| style="text-align: left;"| '''The kernel driver is OK, 3A is not adjusted'''
+
| '''<span style="color:#FF0000">The kernel driver is OK, 3A is not adjusted</span>'''
 
|-
 
|-
| style="text-align: left;"| '''Gigabit Ethernet port'''
+
| '''Gigabit Ethernet port'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Network port status light'''
+
| '''Network port status light'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''headphone playback'''
+
| '''headphone playback'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''headphone recording'''
+
| '''headphone recording'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''LED lights'''
+
| '''LED lights'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''GPU'''
+
| '''GPU'''
| style="text-align: left;"| '''NO'''
+
| '''<span style="color:#FF0000">NO</span>'''
 
|-
 
|-
| style="text-align: left;"| '''NPU'''
+
| '''NPU'''
| style="text-align: left;"| '''NO'''
+
| '''<span style="color:#FF0000">NO</span>'''
 
|-
 
|-
| style="text-align: left;"| '''VPU'''
+
| '''VPU'''
| style="text-align: left;"| '''NO'''
+
| '''<span style="color:#FF0000">NO</span>'''
 
|}
 
|}
  
 
<span id="orange-pi-os-arch-system-user-guide-instructions"></span>
 
<span id="orange-pi-os-arch-system-user-guide-instructions"></span>
 +
 
== Orange Pi OS Arch System User Guide Instructions ==
 
== Orange Pi OS Arch System User Guide Instructions ==
  
Line 7,141: Line 8,894:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image409.png|576x324px|1]]
+
[[File:cm4-img409.png]]
  
 
</div></li>
 
</div></li>
Line 7,147: Line 8,900:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image410.png|576x324px|2]]
+
[[File:cm4-img410.png]]
  
 
</div></li>
 
</div></li>
Line 7,153: Line 8,906:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image411.png|576x324px|3]]
+
[[File:cm4-img411.png]]
  
 
</div></li>
 
</div></li>
Line 7,159: Line 8,912:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image412.png|576x324px|4]]
+
[[File:cm4-img412.png]]
  
 
</div></li>
 
</div></li>
Line 7,165: Line 8,918:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image413.png|576x324px|5]]
+
[[File:cm4-img413.png]]
  
 
</div></li>
 
</div></li>
Line 7,171: Line 8,924:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image414.png|576x324px|6]]
+
[[File:cm4-img414.png]]
  
 
</div></li>
 
</div></li>
Line 7,177: Line 8,930:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image415.png|576x324px|7]]
+
[[File:cm4-img415.png]]
  
 
</div></li>
 
</div></li>
Line 7,183: Line 8,936:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image416.png|576x324px|8]]
+
[[File:cm4-img416.png]]
  
 
</div></li>
 
</div></li>
Line 7,189: Line 8,942:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image417.png|576x324px|9]]
+
[[File:cm4-img417.png]]
  
 
</div></li>
 
</div></li>
Line 7,195: Line 8,948:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image418.png|576x324px|1]]
+
[[File:cm4-img418.png]]
  
 
</div>
 
</div>
Line 7,209: Line 8,962:
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First open the '''/boot/extlinux/extlinux.conf''' configuration file</p>
 
<li><p>First open the '''/boot/extlinux/extlinux.conf''' configuration file</p>
<p>[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''</p></li>
+
{| class="wikitable" style="width:800px;"
<li><p>Then open the corresponding configuration by adding '''FDTOVERLAYS /dtbs/rockchip/overlay/xxx.dtbo''' in '''/boot/extlinux/extlinux.conf'''</p></li></ol>
+
|-
 
+
|
'''Note that xxx.dtbo in FDTOVERLAYS /dtbs/rockchip/overlay/xxx.dtbo needs to be replaced with the specific dtbo configuration, please do not copy it.'''
+
<p>[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''</p>
 
+
|}
 +
</li>
 +
<li><p>Then open the corresponding configuration by adding '''FDTOVERLAYS /dtbs/rockchip/overlay/xxx.dtbo''' in '''/boot/extlinux/extlinux.conf'''</p></li>
 +
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Note that xxx.dtbo in FDTOVERLAYS /dtbs/rockchip/overlay/xxx.dtbo needs to be replaced with the specific dtbo configuration, please do not copy it.'''</big>
 +
|}
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''
 
[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''
  
Line 7,222: Line 8,985:
 
FDT /dtbs/rockchip/rk3566-orangepi-3b.dtb
 
FDT /dtbs/rockchip/rk3566-orangepi-3b.dtb
  
'''FDTOVERLAYS /dtbs/rockchip/overlay/xxx.dtbo''' #Configuration that needs to be added
+
'''FDTOVERLAYS /dtbs/rockchip/overlay/<span style="color:#FF0000">xxx.dtbo</span>''' &nbsp;&nbsp;&nbsp;&nbsp; #Configuration that needs to be added
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
 
<li><p>The storage path of xxx.dtbo in the OPi OS Arch image is as follows, please note that not all dtbos under this path can be used.</p>
 
<li><p>The storage path of xxx.dtbo in the OPi OS Arch image is as follows, please note that not all dtbos under this path can be used.</p>
<p>'''/boot/dtbs/rockchip/overlay/'''</p></li>
+
{| class="wikitable" style="width:800px;"
<li><p>The DT overlays configuration that can be used by the development board is as follows</p></li></ol>
+
|-
 +
|
 +
<p>'''/boot/dtbs/rockchip/overlay/'''</p>
 +
|}
 +
</li>
 +
<li><p>The DT overlays configuration that can be used by the development board is as follows</p></li>
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"  
 
|-
 
|-
| style="text-align: left;"| '''Features on the development board'''
+
| '''Features on the development board'''
 
| '''Corresponding DT overlays configuration'''
 
| '''Corresponding DT overlays configuration'''
 
|-
 
|-
| style="text-align: left;"| '''EDP screen'''
+
| '''EDP screen'''
 
| '''rk356x-edp.dtbo'''
 
| '''rk356x-edp.dtbo'''
 
|-
 
|-
| style="text-align: left;"| '''Raspberry Pi 5 inch screen'''
+
| '''Raspberry Pi 5 inch screen'''
 
| '''rk356x-raspi-7inch-touchscreen.dtbo'''
 
| '''rk356x-raspi-7inch-touchscreen.dtbo'''
 
|-
 
|-
| style="text-align: left;"| '''40pin expansion interface - I2C2'''
+
| '''40pin expansion interface - I2C2'''
 
| '''rk356x-i2c2-m1.dtbo'''
 
| '''rk356x-i2c2-m1.dtbo'''
 
|-
 
|-
| style="text-align: left;"| '''40pin expansion interface - I2C3'''
+
| '''40pin expansion interface - I2C3'''
 
| '''rk356x-i2c3-m0.dtbo'''
 
| '''rk356x-i2c3-m0.dtbo'''
 
|-
 
|-
| style="text-align: left;"| '''40pin expansion interface - I2C4'''
+
| '''40pin expansion interface - I2C4'''
 
| '''rk356x-i2c4-m0.dtbo'''
 
| '''rk356x-i2c4-m0.dtbo'''
 
|-
 
|-
| style="text-align: left;"| '''40pin extension interface - PWM11'''
+
| '''40pin extension interface - PWM11'''
 
| '''rk356x-pwm11-m1.dtbo'''
 
| '''rk356x-pwm11-m1.dtbo'''
 
|-
 
|-
| style="text-align: left;"| '''40pin extension interface - PWM15'''
+
| '''40pin extension interface - PWM15'''
 
| '''rk356x-pwm15-m1.dtbo'''
 
| '''rk356x-pwm15-m1.dtbo'''
 
|-
 
|-
| style="text-align: left;"| '''40pin expansion interface - UART3'''
+
| '''40pin expansion interface - UART3'''
 
| '''rk356x-uart3-m0.dtbo'''
 
| '''rk356x-uart3-m0.dtbo'''
 
|-
 
|-
| style="text-align: left;"| '''40pin expansion interface - UART7'''
+
| '''40pin expansion interface - UART7'''
 
| '''rk356x-uart7-m2.dtbo'''
 
| '''rk356x-uart7-m2.dtbo'''
 
|-
 
|-
| style="text-align: left;"| '''40pin expansion interface - UART9'''
+
| '''40pin expansion interface - UART9'''
 
| '''rk356x-uart9-m2.dtbo'''
 
| '''rk356x-uart9-m2.dtbo'''
 
|-
 
|-
| style="text-align: left;"| '''40pin expansion interface - SPI3'''
+
| '''40pin expansion interface - SPI3'''
 
| '''rk356x-spi3-m0-cs0-spidev.dtbo'''
 
| '''rk356x-spi3-m0-cs0-spidev.dtbo'''
 
|}
 
|}
 
+
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
 
<li><p>If you need to open multiple configurations at the same time, just add the paths of multiple configurations directly behind '''FDTOVERLAYS'''. For example, the configurations to open i2c2 and pwm11 at the same time are as follows</p>
 
<li><p>If you need to open multiple configurations at the same time, just add the paths of multiple configurations directly behind '''FDTOVERLAYS'''. For example, the configurations to open i2c2 and pwm11 at the same time are as follows</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''</p>
 
<p>[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''</p>
 
<p>LABEL OPIOS ARM</p>
 
<p>LABEL OPIOS ARM</p>
 
<p>LINUX /Image</p>
 
<p>LINUX /Image</p>
 
<p>FDT /dtbs/rockchip/rk3566-orangepi-3b.dtb</p>
 
<p>FDT /dtbs/rockchip/rk3566-orangepi-3b.dtb</p>
<p>'''FDTOVERLAYS /dtbs/rockchip/overlay/rk356x-i2c2-m1.dtbo /dtbs/rockchip/overlay/rk356x-pwm11-m1.dtbo'''</p></li>
+
<p>'''FDTOVERLAYS <span style="color:#FF0000">/dtbs/rockchip/overlay/rk356x-i2c2-m1.dtbo /dtbs/rockchip/overlay/rk356x-pwm11-m1.dtbo</span>'''</p>
 +
|}
 +
</li>
 
<li><p>After setting, you need to restart the system to make the configuration take effect</p>
 
<li><p>After setting, you need to restart the system to make the configuration take effect</p>
<p>[orangepi@orangepi-pc ~]$ '''sudo reboot'''</p></li></ol>
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
<p>[orangepi@orangepi-pc ~]$ '''sudo reboot'''</p>
 +
|}
 +
</li></ol>
  
 
<span id="use-of-raspberry-pi-5-inch-screen-1"></span>
 
<span id="use-of-raspberry-pi-5-inch-screen-1"></span>
 +
 
== Use of Raspberry Pi 5-inch screen ==
 
== Use of Raspberry Pi 5-inch screen ==
  
Line 7,284: Line 9,064:
 
=== How to assemble the Raspberry Pi 5-inch screen ===
 
=== How to assemble the Raspberry Pi 5-inch screen ===
  
Please refer to [[\l|'''the assembly method of the Raspberry Pi 5-inch screen''']] ('''click the text in the blue part to jump to the corresponding position''').
+
Please refer to [[Orange Pi CM4#How to assemble the Raspberry Pi 5 Inch screen|'''the assembly method of the Raspberry Pi 5-inch screen''']] ('''click the text in the blue part to jump to the corresponding position''').
  
 
<span id="how-to-open-raspberry-pi-5-inch-screen-configuration-1"></span>
 
<span id="how-to-open-raspberry-pi-5-inch-screen-configuration-1"></span>
 +
 
=== How to open Raspberry Pi 5-inch screen configuration ===
 
=== How to open Raspberry Pi 5-inch screen configuration ===
  
Line 7,292: Line 9,073:
  
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>First add the following configuration in &gt; '''/boot/extlinux/extlinux.conf'''</p>
+
<li><p>First add the following configuration in '''/boot/extlinux/extlinux.conf'''</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''</p>
 
<p>[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''</p>
 
<p>LABEL OPIOS ARM</p>
 
<p>LABEL OPIOS ARM</p>
 
<p>LINUX /Image</p>
 
<p>LINUX /Image</p>
 
<p>FDT /dtbs/rockchip/rk3566-orangepi-3b.dtb</p>
 
<p>FDT /dtbs/rockchip/rk3566-orangepi-3b.dtb</p>
<p>'''FDTOVERLAYS /dtbs/rockchip/overlay/rk356x-raspi-7inch-touchscreen.dtbo''' #Configuration that needs to be added</p></li>
+
<p>'''<span style="color:#FF0000">FDTOVERLAYS /dtbs/rockchip/overlay/rk356x-raspi-7inch-touchscreen.dtbo</span>''' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #Configuration that needs to be added</p>
 +
|}
 +
</li>
 
<li><p>Then restart the system</p>
 
<li><p>Then restart the system</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>[orangepi@orangepi-pc ~]$ '''sudo reboot'''</p>
 
<p>[orangepi@orangepi-pc ~]$ '''sudo reboot'''</p>
<p>After restarting, you can see the display on the LCD screen as follows:</p></li></ol>
+
|}
 +
<p>After restarting, you can see the display on the LCD screen as follows:</p></li>
 +
[[File:cm4-img419.png]]
 +
</ol>
 +
<span id="how-to-use-the-edp-screen-1"></span>
  
[[File:media/image419.png|349x215px]]
 
 
<span id="how-to-use-the-edp-screen-1"></span>
 
 
== How to use the eDP screen ==
 
== How to use the eDP screen ==
  
Line 7,310: Line 9,100:
 
=== Assembly method of eDP screen ===
 
=== Assembly method of eDP screen ===
  
Please refer to [[\l|'''how to use the eDP screen''']] ('''click the text in the blue part to jump to the corresponding position''').
+
Please refer to [[Orange Pi CM4#How to use the eDP screen|'''how to use the eDP screen''']] ('''click the text in the blue part to jump to the corresponding position''').
  
 
<span id="how-to-open-edp-screen-configuration"></span>
 
<span id="how-to-open-edp-screen-configuration"></span>
 +
 
=== How to open eDP screen configuration ===
 
=== How to open eDP screen configuration ===
  
Line 7,318: Line 9,109:
  
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>First add the following configuration in &gt; '''/boot/extlinux/extlinux.conf'''</p>
+
<li><p>First add the following configuration in '''/boot/extlinux/extlinux.conf'''</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''</p>
 
<p>[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''</p>
 
<p>LABEL OPIOS ARM</p>
 
<p>LABEL OPIOS ARM</p>
 
<p>LINUX /Image</p>
 
<p>LINUX /Image</p>
 
<p>FDT /dtbs/rockchip/rk3566-orangepi-3b.dtb</p>
 
<p>FDT /dtbs/rockchip/rk3566-orangepi-3b.dtb</p>
<p>'''FDTOVERLAYS /dtbs/rockchip/overlay/rk356x-edp.dtbo''' #Configuration that needs to be added</p></li>
+
<p>'''<span style="color:#FF0000">FDTOVERLAYS /dtbs/rockchip/overlay/rk356x-edp.dtbo</span>''' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #Configuration that needs to be added</p>
 +
|}
 +
</li>
 
<li><p>Then restart the system</p>
 
<li><p>Then restart the system</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>[orangepi@orangepi-pc ~]$ '''sudo reboot'''</p>
 
<p>[orangepi@orangepi-pc ~]$ '''sudo reboot'''</p>
<p>After restarting, you can see that the display of the eDP screen is as follows:</p></li></ol>
+
|}
 +
<p>After restarting, you can see that the display of the eDP screen is as follows:</p></li>
  
[[File:media/image420.png|459x265px]]
+
[[File:cm4-img420.png]]
 +
</ol>
 +
<span id="how-to-install-the-software"></span>
  
<span id="how-to-install-the-software"></span>
 
 
== How to install the software ==
 
== How to install the software ==
  
 
Use the pacman package management tool to install software that is not in OPi OS. For example, the command to install the vim editor is as follows. If you want to install other software, you only need to replace vim with the package name of the software you want to install.
 
Use the pacman package management tool to install software that is not in OPi OS. For example, the command to install the vim editor is as follows. If you want to install other software, you only need to replace vim with the package name of the software you want to install.
  
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
[orangepi@orangepi-pc ~]$ '''sudo pacman -Syy vim'''
 
[orangepi@orangepi-pc ~]$ '''sudo pacman -Syy vim'''
 +
|}
  
 
<span id="android-11-operating-system-instructions"></span>
 
<span id="android-11-operating-system-instructions"></span>
= Android 11 operating system instructions =
+
 
 +
= '''Android 11 operating system instructions''' =
  
 
<span id="supported-android-versions"></span>
 
<span id="supported-android-versions"></span>
 
== Supported Android versions ==
 
== Supported Android versions ==
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"  
 
|-
 
|-
| style="text-align: left;"| '''Android version'''
+
| '''Android version'''
| style="text-align: left;"| '''Kernel version'''
+
| '''Kernel version'''
 
|-
 
|-
| style="text-align: left;"| '''Android 11'''
+
| '''Android 11'''
| style="text-align: left;"| '''Linux4.19'''
+
| '''Linux4.19'''
 
|}
 
|}
  
Line 7,355: Line 9,161:
 
== Android Function Adaptation ==
 
== Android Function Adaptation ==
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"  
 
|-
 
|-
| style="text-align: left;"| '''Functions'''
+
| '''Functions'''
| style="text-align: left;"| '''Android 11'''
+
| '''Android 11'''
 
|-
 
|-
| style="text-align: left;"| '''USB2.0x3'''
+
| '''USB2.0x3'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''USB3.0x1'''
+
| '''USB3.0x1'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''M.2 NVMe SSD boot'''
+
| '''M.2 NVMe SSD boot'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''WIFI'''
+
| '''WIFI'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Bluetooth'''
+
| '''Bluetooth'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''GPIO(40pin)'''
+
| '''GPIO(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''UART(40pin)'''
+
| '''UART(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''SPI(40pin)'''
+
| '''SPI(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''I2C(40pin)'''
+
| '''I2C(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''PWM(40pin)'''
+
| '''PWM(40pin)'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''PWM fan interface'''
+
| '''PWM fan interface'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''3pin Debugging serial port'''
+
| '''3pin Debugging serial port'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''EMMC'''
+
| '''EMMC'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''TF card boot'''
+
| '''TF card boot'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''HDMI video'''
+
| '''HDMI video'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''HDMI Audio'''
+
| '''HDMI Audio'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''LCD'''
+
| '''LCD'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''eDP display'''
+
| '''eDP display'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''OV5647 Camera'''
+
| '''OV5647 Camera'''
| style="text-align: left;"| '''The kernel driver is OK, 3A is not adjusted'''
+
| '''<span style="color:#FF0000">The kernel driver is OK, 3A is not adjusted</span>'''
 
|-
 
|-
| style="text-align: left;"| '''Gigabit network port'''
+
| '''Gigabit network port'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Network port status indicator'''
+
| '''Network port status indicator'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Headphone playback'''
+
| '''Headphone playback'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''Headphone recording'''
+
| '''Headphone recording'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''LED Light'''
+
| '''LED Light'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''GPU'''
+
| '''GPU'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''NPU'''
+
| '''NPU'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''VPU'''
+
| '''VPU'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|-
 
|-
| style="text-align: left;"| '''RTC'''
+
| '''RTC'''
| style="text-align: left;"| '''OK'''
+
| '''OK'''
 
|}
 
|}
  
Line 7,450: Line 9,256:
 
# First click enter '''Setting'''
 
# First click enter '''Setting'''
  
[[File:media/image421.png|549x228px]]
+
::[[File:cm4-img421.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Then select '''Network &amp; internet'''</li></ol>
+
<li>Then select '''Network &amp; internet'''</li>
 
 
[[File:media/image422.png|565x120px]]
 
  
 +
[[File:cm4-img422.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then select '''Wi-Fi'''</li></ol>
+
<li>Then select '''Wi-Fi'''</li>
 
 
[[File:media/image423.png|561x99px]]
 
  
 +
[[File:cm4-img423.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then turn on the '''Wi-Fi''' switch</li></ol>
+
<li>Then turn on the '''Wi-Fi''' switch</li>
 
 
[[File:media/image424.png|560x167px]]
 
  
 +
[[File:cm4-img424.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>After turning on '''Wi-Fi''', if everything is normal, you can scan for nearby Wi-Fi hotspots</li></ol>
+
<li>After turning on '''Wi-Fi''', if everything is normal, you can scan for nearby Wi-Fi hotspots</li>
 
 
[[File:media/image425.png|561x166px]]
 
  
 +
[[File:cm4-img425.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then select the Wi-Fi you want to connect to, and the password input interface shown in the figure below will pop up</li></ol>
+
<li>Then select the Wi-Fi you want to connect to, and the password input interface shown in the figure below will pop up</li>
 
 
[[File:media/image426.png|553x237px]]
 
  
 +
[[File:cm4-img426.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>Then use the keyboard to enter the password corresponding to Wi-Fi, and then use the mouse to click the Enter button in the virtual keyboard to start connecting to Wi-Fi</li></ol>
+
<li>Then use the keyboard to enter the password corresponding to Wi-Fi, and then use the mouse to click the Enter button in the virtual keyboard to start connecting to Wi-Fi</li>
 
 
[[File:media/image427.png|553x232px]]
 
  
 +
[[File:cm4-img427.png]]
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>After the Wi-Fi connection is successful, the display is as shown in the figure below:</li></ol>
+
<li>After the Wi-Fi connection is successful, the display is as shown in the figure below:</li>
  
[[File:media/image428.png|558x102px]]
+
[[File:cm4-img428.png]]
 +
</ol>
 +
<span id="how-to-use-wi-fi-hotspot"></span>
  
<span id="how-to-use-wi-fi-hotspot"></span>
 
 
== How to use Wi-Fi hotspot ==
 
== How to use Wi-Fi hotspot ==
  
Line 7,493: Line 9,300:
 
# Then select '''Settings'''
 
# Then select '''Settings'''
  
[[File:media/image421.png|549x228px]]
+
::[[File:cm4-img421.png]]
  
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then select '''Network &amp; internet'''</li></ol>
+
<li>Then select '''Network &amp; internet'''</li>
 
 
[[File:media/image422.png|565x120px]]
 
  
 +
[[File:cm4-img422.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then select '''Hotspot &amp; tethering'''</li></ol>
+
<li>Then select '''Hotspot &amp; tethering'''</li>
 
 
[[File:media/image429.png|549x173px]]
 
  
 +
[[File:cm4-img429.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Then select '''Wi-Fi hotspot'''</li></ol>
+
<li>Then select '''Wi-Fi hotspot'''</li>
 
 
[[File:media/image430.png|548x104px]]
 
  
 +
[[File:cm4-img430.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then turn on the '''Wi-Fi hotspot''', you can also see the name and password of the generated hotspot in the figure below, remember them, and use them when connecting to the hotspot (If you need to modify the name and password of the hotspot, you need to turn off the '''Wi-Fi hotspot''' first, and then you can modify it)</li></ol>
+
<li>Then turn on the '''Wi-Fi hotspot''', you can also see the name and password of the generated hotspot in the figure below, remember them, and use them when connecting to the hotspot (If you need to modify the name and password of the hotspot, you need to turn off the '''Wi-Fi hotspot''' first, and then you can modify it)</li>
 
 
[[File:media/image431.png|551x158px]]
 
  
 +
[[File:cm4-img431.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>At this time, you can take out your mobile phone. If everything is normal, you can find the WIFI hotspot with the same name ('''here AndroidAP_6953''') displayed under the '''Hotspot name''' in the above picture in the WI-FI list searched by the mobile phone. Then you can click '''AndroidAP_6953''' to connect to the hotspot, and the password can be seen under the '''Hotspot password''' in the above picture</li></ol>
+
<li>At this time, you can take out your mobile phone. If everything is normal, you can find the WIFI hotspot with the same name ('''here AndroidAP_6953''') displayed under the '''Hotspot name''' in the above picture in the WI-FI list searched by the mobile phone. Then you can click '''AndroidAP_6953''' to connect to the hotspot, and the password can be seen under the '''Hotspot password''' in the above picture</li>
 
 
[[File:media/image432.png|313x238px]]
 
  
 +
[[File:cm4-img432.png]]
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>After the connection is successful, it will be displayed as shown in the figure below (the interface of different mobile phones will be different, the specific interface is subject to the display of your mobile phone). At this point, you can open a webpage on your mobile phone to see if you can access the Internet. If you can open the webpage normally, it means that the '''WI-FI Hotspot''' of the development board can be used normally.</li></ol>
+
<li>After the connection is successful, it will be displayed as shown in the figure below (the interface of different mobile phones will be different, the specific interface is subject to the display of your mobile phone). At this point, you can open a webpage on your mobile phone to see if you can access the Internet. If you can open the webpage normally, it means that the '''WI-FI Hotspot''' of the development board can be used normally.</li>
  
[[File:media/image433.png|327x165px]]
+
[[File:cm4-img433.png]]
 +
</ol>
 +
<span id="bluetooth-test-method"></span>
  
<span id="bluetooth-test-method"></span>
 
 
== Bluetooth test method ==
 
== Bluetooth test method ==
  
 
# First click enter '''Setting'''
 
# First click enter '''Setting'''
  
[[File:media/image421.png|549x228px]]
+
::[[File:cm4-img421.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Then select '''Connected devices'''</li></ol>
+
<li>Then select '''Connected devices'''</li>
 
 
[[File:media/image434.png|547x115px]]
 
  
 +
[[File:cm4-img434.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then click '''Pair new device''' to turn on Bluetooth and start scanning the surrounding Bluetooth devices</li></ol>
+
<li>Then click '''Pair new device''' to turn on Bluetooth and start scanning the surrounding Bluetooth devices</li>
 
 
[[File:media/image435.png|547x126px]]
 
  
 +
[[File:cm4-img435.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>The searched Bluetooth devices will be displayed under '''Available devices'''</li></ol>
+
<li>The searched Bluetooth devices will be displayed under '''Available devices'''</li>
 
 
[[File:media/image436.png|559x279px]]
 
  
 +
[[File:cm4-img436.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Then click the Bluetooth device you want to connect to start pairing. When the following interface pops up, please use the mouse to select the '''Pair''' option</li></ol>
+
<li>Then click the Bluetooth device you want to connect to start pairing. When the following interface pops up, please use the mouse to select the '''Pair''' option</li>
 
 
[[File:media/image437.png|522x212px]]
 
  
 +
[[File:cm4-img437.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>The test here is the configuration process of the development board and the Bluetooth of the Android mobile phone. At this time, the following confirmation interface will pop up on the mobile phone. After clicking the pairing button on the mobile phone, the pairing process will start</li></ol>
+
<li>The test here is the configuration process of the development board and the Bluetooth of the Android mobile phone. At this time, the following confirmation interface will pop up on the mobile phone. After clicking the pairing button on the mobile phone, the pairing process will start</li>
 
 
[[File:media/image438.png|236x273px]]
 
  
 +
[[File:cm4-img438.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>After the pairing is completed, you can see the paired Bluetooth device as shown in the figure below</li></ol>
+
<li>After the pairing is completed, you can see the paired Bluetooth device as shown in the figure below</li>
 
 
[[File:media/image439.png|545x178px]]
 
  
 +
[[File:cm4-img439.png]]
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>At this time, you can use the Bluetooth of your mobile phone to send a picture to the development board. After sending, you can see the following confirmation interface in the Android system of the development board, and then click '''Accept''' to start receiving the picture sent by the mobile phone.</li></ol>
+
<li>At this time, you can use the Bluetooth of your mobile phone to send a picture to the development board. After sending, you can see the following confirmation interface in the Android system of the development board, and then click '''Accept''' to start receiving the picture sent by the mobile phone.</li>
 
 
[[File:media/image440.png|559x238px]]
 
  
 +
[[File:cm4-img440.png]]
 +
</ol>
 
<ol start="9" style="list-style-type: decimal;">
 
<ol start="9" style="list-style-type: decimal;">
<li>You can open the '''Download''' directory in the file manager to view the pictures received by the Android system Bluetooth of the development board</li></ol>
+
<li>You can open the '''Download''' directory in the file manager to view the pictures received by the Android system Bluetooth of the development board</li>
  
[[File:media/image441.png|573x97px]]
+
[[File:cm4-img441.png]]
 +
</ol>
 +
<span id="how-to-use-raspberry-pi-5-inch-screen"></span>
  
<span id="how-to-use-raspberry-pi-5-inch-screen"></span>
 
 
== How to use Raspberry Pi 5-inch screen ==
 
== How to use Raspberry Pi 5-inch screen ==
  
'''Please make sure that the image used is the following two versions of the image:'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Please make sure that the image used is the following two versions of the image:'''
  
 
'''OrangePi3B_RK3566_Android11_lcd_v1.x.x.img'''
 
'''OrangePi3B_RK3566_Android11_lcd_v1.x.x.img'''
  
'''OrangePi3B_RK3566_Android11_spi-nvme_lcd_v1.x.x.img'''
+
'''OrangePi3B_RK3566_Android11_spi-nvme_lcd_v1.x.x.img'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
<li><p>The screen needs to be assembled first, please refer to [[\l|the assembly method of the Raspberry Pi 5-inch screen]]</p></li>
+
<li><p>The screen needs to be assembled first, please refer to [[Orange Pi CM4#Use of Raspberry Pi 5 Inch screen|the assembly method of the Raspberry Pi 5-inch screen]]</p></li>
 
<li><p>Connect the Type-C power supply to the board and power it on. After the system starts, you can see the screen display as shown in the figure below</p>
 
<li><p>Connect the Type-C power supply to the board and power it on. After the system starts, you can see the screen display as shown in the figure below</p>
<p>'''Both the display and touch of the Raspberry Pi 5-inch screen can be used. If you have problems with the screen test, please make sure that the screen you purchased is exactly the same as the screen that the Orange Pi is compatible with.'''</p>
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<p>'''The Orange Pi compatible screen is described in the [[\l|assembly method of the Raspberry Pi 5-inch screen]].'''</p></li></ol>
+
|-
 
+
|
<span id="section"></span>
+
<big><p>'''Both the display and touch of the Raspberry Pi 5-inch screen can be used. If you have problems with the screen test, please make sure that the screen you purchased is exactly the same as the screen that the Orange Pi is compatible with.'''</p>
== [[File:media/image442.png|484x312px]] ==
+
<p>'''The Orange Pi compatible screen is described in the [[Orange Pi CM4#Use of Raspberry Pi 5 Inch screen|assembly method of the Raspberry Pi 5-inch screen]].'''</p></big>
 +
|}
 +
[[File:cm4-img442.png]]
 +
</li></ol>
  
<span id="how-to-use-the-edp-screen-2"></span>
 
 
== How to use the eDP screen ==
 
== How to use the eDP screen ==
  
'''Please make sure that the image used is the following two versions of the image:'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Please make sure that the image used is the following two versions of the image:'''
  
 
'''OrangePi3B_RK3566_Android11_lcd_v1.x.x.img'''
 
'''OrangePi3B_RK3566_Android11_lcd_v1.x.x.img'''
  
'''OrangePi3B_RK3566_Android11_spi-nvme_lcd_v1.x.x.img'''
+
'''OrangePi3B_RK3566_Android11_spi-nvme_lcd_v1.x.x.img'''</big>
 
+
|}
'''The eDP screen has no touch function.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''The eDP screen has no touch function.'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
Line 7,607: Line 9,429:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image379.jpeg|261x256px|single-head cable in the same direction]]
+
[[File:cm4-img379.png]]
  
 
</div></li>
 
</div></li>
Line 7,613: Line 9,435:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image380.jpeg|166x309px|eDP display]]
+
[[File:cm4-img380.png]]
  
 
</div></li></ol>
 
</div></li></ol>
 
</li>
 
</li>
<li><p>Connect the FPC end of the 30pin single-head codirectional cable to the eDP interface of the development board, and connect the other end to the eDP interface of the screen</p></li></ol>
+
<li><p>Connect the FPC end of the 30pin single-head codirectional cable to the eDP interface of the development board, and connect the other end to the eDP interface of the screen</p></li>
 
 
[[File:media/image381.png|401x165px]]
 
  
 +
[[File:cm4-img381.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
 
<li><p>Then connect the Type-C power supply to the board and power it on. After the system starts, you can see the screen display as shown in the figure below</p>
 
<li><p>Then connect the Type-C power supply to the board and power it on. After the system starts, you can see the screen display as shown in the figure below</p>
<p>[[File:media/image443.png|357x220px]]</p></li></ol>
+
<p>[[File:cm4-img443.png]]</p></li></ol>
  
 
<span id="pin-interface-gpio-uart-spi-and-pwm-test"></span>
 
<span id="pin-interface-gpio-uart-spi-and-pwm-test"></span>
 +
 
== 40pin interface GPIO, UART, SPI and PWM test ==
 
== 40pin interface GPIO, UART, SPI and PWM test ==
  
Line 7,633: Line 9,456:
 
# First click on the wiringOP icon to open the wiringOP APP
 
# First click on the wiringOP icon to open the wiringOP APP
  
[[File:media/image444.png|576x210px]]
+
::[[File:cm4-img444.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>The main interface of wiringOP APP is displayed as shown in the figure below, and then click the '''GPIO_TEST''' button to open the GPIO test interface</li></ol>
+
<li>The main interface of wiringOP APP is displayed as shown in the figure below, and then click the '''GPIO_TEST''' button to open the GPIO test interface</li>
 
 
[[File:media/image445.png|575x148px]]
 
  
 +
[[File:cm4-img445.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>The GPIO test interface is shown in the figure below. The two rows of '''CheckBox''' buttons on the left are in one-to-one correspondence with the 40pin pins. When the '''CheckBox''' button is checked, the corresponding GPIO pin will be set to '''OUT''' mode, and the pin level will be set to high level; when the checkbox is unchecked, the GPIO pin level will be set to low level; When the '''GPIO READALL''' button is pressed, information such as wPi number, GPIO mode, and pin level can be obtained; when the '''BLINK ALL GPIO''' button is clicked, the program will control the 28 GPIO ports to continuously switch between high and low levels</li></ol>
+
<li>The GPIO test interface is shown in the figure below. The two rows of '''CheckBox''' buttons on the left are in one-to-one correspondence with the 40pin pins. When the '''CheckBox''' button is checked, the corresponding GPIO pin will be set to '''OUT''' mode, and the pin level will be set to high level; when the checkbox is unchecked, the GPIO pin level will be set to low level; When the '''GPIO READALL''' button is pressed, information such as wPi number, GPIO mode, and pin level can be obtained; when the '''BLINK ALL GPIO''' button is clicked, the program will control the 28 GPIO ports to continuously switch between high and low levels</li>
 
 
[[File:media/image446.png|576x303px]]
 
  
 +
[[File:cm4-img446.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>Then click the '''GPIO READALL''' button, the output information is as shown in the figure below:</li></ol>
+
<li>Then click the '''GPIO READALL''' button, the output information is as shown in the figure below:</li>
 
 
[[File:media/image447.png|575x323px]]
 
  
 +
[[File:cm4-img447.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>There are a total of 28 GPIO ports in the 40pins of the development board that can be used. The following uses pin 7—the corresponding GPIO is GPIO4_A4—the corresponding wPi serial number is 2—as an example to demonstrate how to set the high and low levels of the GPIO port. First click the '''CheckBox''' button corresponding to pin 7. When the button is selected, pin 7 will be set to high level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 3.3v, it means setting high level success</li></ol>
+
<li>There are a total of 28 GPIO ports in the 40pins of the development board that can be used. The following uses pin 7—the corresponding GPIO is GPIO4_A4—the corresponding wPi serial number is 2—as an example to demonstrate how to set the high and low levels of the GPIO port. First click the '''CheckBox''' button corresponding to pin 7. When the button is selected, pin 7 will be set to high level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 3.3v, it means setting high level success</li>
 
 
[[File:media/image448.png|241x326px]]
 
  
 +
[[File:cm4-img448.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then click the '''GPIO READALL''' button, you can see that the current pin 7 mode is '''OUT''', and the pin level is high</li></ol>
+
<li>Then click the '''GPIO READALL''' button, you can see that the current pin 7 mode is '''OUT''', and the pin level is high</li>
 
 
[[File:media/image449.png|574x301px]]
 
  
 +
[[File:cm4-img449.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>Click the '''CheckBox''' button in the figure below again to cancel the check status. Pin 7 will be set to low level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is '''0v''', it means that the low level is set successfully.</li></ol>
+
<li>Click the '''CheckBox''' button in the figure below again to cancel the check status. Pin 7 will be set to low level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is '''0v''', it means that the low level is set successfully.</li>
 
 
[[File:media/image450.png|250x345px]]
 
  
 +
[[File:cm4-img450.png]]
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
 
<li><p>Then click the '''GPIO READALL''' button, you can see that the current pin 7 mode is OUT, and the pin level is low</p>
 
<li><p>Then click the '''GPIO READALL''' button, you can see that the current pin 7 mode is OUT, and the pin level is low</p>
<p>[[File:media/image451.png|576x300px]]</p></li></ol>
+
<p>[[File:cm4-img451.png]]</p></li></ol>
  
 
<span id="pin-uart-test-2"></span>
 
<span id="pin-uart-test-2"></span>
 +
 
=== 40pin UART test ===
 
=== 40pin UART test ===
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>UART7 and UART9 are enabled by default in Android. The position of the 40pin is shown in the figure below, and the corresponding device nodes are '''/dev/ttyS7''' and '''/dev/ttyS9''' respectively</p>
 
<li><p>UART7 and UART9 are enabled by default in Android. The position of the 40pin is shown in the figure below, and the corresponding device nodes are '''/dev/ttyS7''' and '''/dev/ttyS9''' respectively</p>
<p>[[File:media/image452.png|507x101px]]</p></li>
+
<p>[[File:cm4-img452.png]]</p></li>
<li><p>First click on the wiringOP icon to open the wiringOP APP</p></li></ol>
+
<li><p>First click on the wiringOP icon to open the wiringOP APP</p></li>
 
 
[[File:media/image444.png|576x210px]]
 
  
 +
[[File:cm4-img444.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>The main interface of wiringOP APP is displayed as shown in the figure below, and then click the '''UART_TEST''' button to open the UART test interface</li></ol>
+
<li>The main interface of wiringOP APP is displayed as shown in the figure below, and then click the '''UART_TEST''' button to open the UART test interface</li>
 
 
[[File:media/image453.png|575x156px]]
 
  
 +
[[File:cm4-img453.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>The serial port test interface of the APP is shown in the figure below</li></ol>
+
<li>The serial port test interface of the APP is shown in the figure below</li>
 
 
[[File:media/image454.png|576x324px]]
 
  
 +
[[File:cm4-img454.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Take the test of '''UART7''' as an example below, select the '''/dev/ttyS7''' node in the selection box, enter the baud rate you want to set in the edit box, and then click the '''OPEN''' button to open the /dev/ttyS7 node. After the opening is successful, the '''OPEN''' button becomes unselectable, and the '''CLOSE''' button and '''SEND''' button become selectable</li></ol>
+
<li>Take the test of '''UART7''' as an example below, select the '''/dev/ttyS7''' node in the selection box, enter the baud rate you want to set in the edit box, and then click the '''OPEN''' button to open the /dev/ttyS7 node. After the opening is successful, the '''OPEN''' button becomes unselectable, and the '''CLOSE''' button and '''SEND''' button become selectable</li>
 
 
[[File:media/image455.png|574x166px]]
 
  
 +
[[File:cm4-img455.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then use Dupont wire to short the RXD and TXD pins of uart7</li></ol>
+
<li>Then use Dupont wire to short the RXD and TXD pins of uart7</li>
 
 
[[File:media/image456.png|574x91px]]
 
  
 +
[[File:cm4-img456.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>Then you can enter a character in the send edit box below, and click the '''SEND''' button to start sending</li></ol>
+
<li>Then you can enter a character in the send edit box below, and click the '''SEND''' button to start sending</li>
 
 
[[File:media/image457.png|575x161px]]
 
  
 +
[[File:cm4-img457.png]]
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>If everything is normal, the received string will be displayed in the receiving box</li></ol>
+
<li>If everything is normal, the received string will be displayed in the receiving box</li>
  
[[File:media/image458.png|574x164px]]
+
[[File:cm4-img458.png]]
 +
</ol>
 +
<span id="pin-spi-test-2"></span>
  
<span id="pin-spi-test-2"></span>
 
 
=== 40pin SPI test ===
 
=== 40pin SPI test ===
  
 
# According to the schematic diagram of the 40pin interface, the spi available for Orange Pi 3B is spi3
 
# According to the schematic diagram of the 40pin interface, the spi available for Orange Pi 3B is spi3
  
[[File:media/image459.png|575x209px]]
+
::[[File:cm4-img459.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>Here, the SPI interface is tested through the w25q64 module. First, the w25q64 device is connected to the SPI3 interface</li></ol>
+
<li>Here, the SPI interface is tested through the w25q64 module. First, the w25q64 device is connected to the SPI3 interface</li>
 
 
[[File:media/image460.png|261x216px]]
 
  
 +
[[File:cm4-img460.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then click the wiringOP icon to open the wiringOP APP</li></ol>
+
<li>Then click the wiringOP icon to open the wiringOP APP</li>
 
 
[[File:media/image444.png|576x210px]]
 
  
 +
[[File:cm4-img444.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>The main interface of wiringOP APP is displayed as shown in the figure below, click the SPI_TEST button to open the SPI test interface</li></ol>
+
<li>The main interface of wiringOP APP is displayed as shown in the figure below, click the SPI_TEST button to open the SPI test interface</li>
 
 
[[File:media/image461.png|574x149px]]
 
  
 +
[[File:cm4-img461.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>Then click the '''OPEN''' button to initialize the SPI</li></ol>
+
<li>Then click the '''OPEN''' button to initialize the SPI</li>
 
 
[[File:media/image462.png|576x241px]]
 
  
 +
[[File:cm4-img462.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then fill in the bytes that need to be sent, such as reading the ID information of w25q64, fill in the address 0x9f in data[0], and then click the '''TRANSFER''' button</li></ol>
+
<li>Then fill in the bytes that need to be sent, such as reading the ID information of w25q64, fill in the address 0x9f in data[0], and then click the '''TRANSFER''' button</li>
 
 
[[File:media/image463.png|572x216px]]
 
  
 +
[[File:cm4-img463.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>Finally, the APP will display the read ID information</li></ol>
+
<li>Finally, the APP will display the read ID information</li>
 
 
[[File:media/image464.png|575x296px]]
 
  
 +
[[File:cm4-img464.png]]
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>The MANUFACTURER ID of the w25q64 module is EFh, and the Device ID is 4017h, corresponding to the value read above (h stands for hexadecimal)</li></ol>
+
<li>The MANUFACTURER ID of the w25q64 module is EFh, and the Device ID is 4017h, corresponding to the value read above (h stands for hexadecimal)</li>
  
[[File:media/image465.png|374x126px]]
+
[[File:cm4-img465.png]]
 +
</ol>
 +
<span id="pin-pwm-test"></span>
  
<span id="pin-pwm-test"></span>
 
 
=== 40pin PWM test ===
 
=== 40pin PWM test ===
  
 
# Android enables '''PWM11''' by default, and the corresponding pin is located at 40pin as shown in the figure below
 
# Android enables '''PWM11''' by default, and the corresponding pin is located at 40pin as shown in the figure below
  
[[File:media/image466.png|465x86px]]
+
::[[File:cm4-img466.png]]
  
 
<ol start="2" style="list-style-type: decimal;">
 
<ol start="2" style="list-style-type: decimal;">
<li>First click on the wiringOP icon to open the wiringOP APP</li></ol>
+
<li>First click on the wiringOP icon to open the wiringOP APP</li>
 
 
[[File:media/image444.png|576x210px]]
 
  
 +
[[File:cm4-img444.png]]
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
<li>Then click the '''PWM_TEST''' button on the main interface of wiringOP to enter the PWM test interface</li></ol>
+
<li>Then click the '''PWM_TEST''' button on the main interface of wiringOP to enter the PWM test interface</li>
 
 
[[File:media/image467.png|575x150px]]
 
  
 +
[[File:cm4-img467.png]]
 +
</ol>
 
<ol start="4" style="list-style-type: decimal;">
 
<ol start="4" style="list-style-type: decimal;">
<li>The base address corresponding to PWM11 is '''fe6f0030''', here pwmchip0 shows '''fdd70020.pwm''' on the right, then you need to click the drop-down option to select other pwmchips until '''fe6f0030.pwm''' is displayed on the right</li></ol>
+
<li>The base address corresponding to PWM11 is '''fe6f0030''', here pwmchip0 shows '''fdd70020.pwm''' on the right, then you need to click the drop-down option to select other pwmchips until '''fe6f0030.pwm''' is displayed on the right</li>
 
 
[[File:media/image468.png|576x178px]]
 
  
 +
[[File:cm4-img468.png]]
 +
</ol>
 
<ol start="5" style="list-style-type: decimal;">
 
<ol start="5" style="list-style-type: decimal;">
<li>When the drop-down option selects '''pwmchip3''', the corresponding base address of PWM11 is '''fe6f0030''' on the right</li></ol>
+
<li>When the drop-down option selects '''pwmchip3''', the corresponding base address of PWM11 is '''fe6f0030''' on the right</li>
 
 
[[File:media/image469.png|574x161px]]
 
  
 +
[[File:cm4-img469.png]]
 +
</ol>
 
<ol start="6" style="list-style-type: decimal;">
 
<ol start="6" style="list-style-type: decimal;">
<li>Then confirm the PWM channel, the default is channel 0, and confirm the PWM cycle, the default configuration is '''50000ns''', converted to PWM frequency is '''20KHz''', you can modify it yourself, click the '''EXPORT''' button to export '''PWM11'''</li></ol>
+
<li>Then confirm the PWM channel, the default is channel 0, and confirm the PWM cycle, the default configuration is '''50000ns''', converted to PWM frequency is '''20KHz''', you can modify it yourself, click the '''EXPORT''' button to export '''PWM11'''</li>
 
 
[[File:media/image470.png|575x160px]]
 
  
 +
[[File:cm4-img470.png]]
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>Then drag the drag bar below to change the PWM duty cycle, and then check Enable to output the PWM waveform</li></ol>
+
<li>Then drag the drag bar below to change the PWM duty cycle, and then check Enable to output the PWM waveform</li>
 
 
[[File:media/image471.png|575x167px]]
 
  
 +
[[File:cm4-img471.png]]
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>Then use an oscilloscope to measure the No. 32 pin in the 40pin of the development board, and you can see the following waveform</li></ol>
+
<li>Then use an oscilloscope to measure the No. 32 pin in the 40pin of the development board, and you can see the following waveform</li>
  
[[File:media/image472.png|460x276px]]
+
[[File:cm4-img472.png]]
 +
</ol>
 +
<span id="how-to-use-adb"></span>
  
<span id="how-to-use-adb"></span>
 
 
== How to use ADB ==
 
== How to use ADB ==
  
Line 7,799: Line 9,626:
 
=== The method of USB OTG mode switching ===
 
=== The method of USB OTG mode switching ===
  
'''The development board has 4 USB interfaces, among which the USB interface marked in red box in the figure below can support both Host mode and Device mode, and the other 3 USB interfaces only support Host mode.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''The development board has 4 USB interfaces, among which the USB interface marked in red box in the figure below can support both Host mode and Device mode, and the other 3 USB interfaces only support Host mode.'''</big>
  
[[File:media/image473.png|365x143px]]
+
[[File:cm4-img473.png|center]]
  
'''The USB OTG interface defaults to Host mode, which can be used to connect USB devices such as mouse and keyboard. If you want to use ADB, you need to manually switch to Device mode.'''
+
<big>'''The USB OTG interface defaults to Host mode, which can be used to connect USB devices such as mouse and keyboard. If you want to use ADB, you need to <span style="color:#FF0000">manually </span>switch to Device mode.'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First open Settings</p>
 
<li><p>First open Settings</p>
<p>[[File:media/image421.png|569x236px]]</p></li>
+
<p>[[File:cm4-img421.png]]</p></li>
 
<li><p>Then select '''About tablet'''</p>
 
<li><p>Then select '''About tablet'''</p>
<p>[[File:media/image474.png|562x315px]]</p></li>
+
<p>[[File:cm4-img474.png]]</p></li>
 
<li><p>Then click the '''Build number''' menu bar several times with the mouse until the prompt '''You are now a developer!''' appears</p>
 
<li><p>Then click the '''Build number''' menu bar several times with the mouse until the prompt '''You are now a developer!''' appears</p>
<p>[[File:media/image475.png|577x321px]]</p></li>
+
<p>[[File:cm4-img475.png]]</p></li>
 
<li><p>Then click to return to the previous menu</p>
 
<li><p>Then click to return to the previous menu</p>
<p>[[File:media/image476.png|578x312px]]</p></li>
+
<p>[[File:cm4-img476.png]]</p></li>
 
<li><p>Then select '''System'''</p>
 
<li><p>Then select '''System'''</p>
<p>[[File:media/image477.png|577x302px]]</p></li>
+
<p>[[File:cm4-img477.png]]</p></li>
 
<li><p>Then select '''Advanced'''</p>
 
<li><p>Then select '''Advanced'''</p>
<p>[[File:media/image478.png|581x206px]]</p></li>
+
<p>[[File:cm4-img478.png]]</p></li>
 
<li><p>Then select '''Developer options''' in the expanded column</p>
 
<li><p>Then select '''Developer options''' in the expanded column</p>
<p>[[File:media/image479.png|577x260px]]</p></li>
+
<p>[[File:cm4-img479.png]]</p></li>
<li><p>Finally find the '''USB OTG Mode Switch''' switch, '''turn on the switch to switch to Device mode, turn off the switch to switch to Host mode'''</p></li></ol>
+
<li><p>Finally find the '''USB OTG Mode Switch''' switch, '''<span style="color:#FF0000">turn on the switch to switch to Device mode, turn off the switch to switch to Host mode</span>'''</p></li>
  
[[File:media/image480.png|579x219px]]
+
[[File:cm4-img480.png]]
 +
</ol>
 +
<span id="use-the-data-cable-to-connect-to-adb-debugging"></span>
  
<span id="use-the-data-cable-to-connect-to-adb-debugging"></span>
 
 
=== Use the data cable to connect to adb debugging ===
 
=== Use the data cable to connect to adb debugging ===
  
Line 7,831: Line 9,663:
 
<div class="figure">
 
<div class="figure">
  
[[File:media/image18.png|141x138px|D6BB9058-CDC3-42d7-A7FC-FBF630D886B7]]
+
[[File:cm4-img18.png]]
  
 
</div></li>
 
</div></li>
<li><p>Then refer to [[\l|'''the method of USB OTG mode switching''']] to switch USB OTG to Device mode</p></li>
+
<li><p>Then refer to [[Orange Pi CM4#The method of USB OTG mode switching|'''the method of USB OTG mode switching''']] to switch USB OTG to Device mode</p></li>
 
<li><p>Then connect the development board to the Ubuntu PC through the USB2.0 male-to-male data cable. The position of the USB OTG interface on the development board is shown in the figure below:</p>
 
<li><p>Then connect the development board to the Ubuntu PC through the USB2.0 male-to-male data cable. The position of the USB OTG interface on the development board is shown in the figure below:</p>
<p>[[File:media/image481.png|318x125px]]</p></li>
+
<p>[[File:cm4-img481.png]]</p></li>
 
<li><p>Then install the adb tool on the Ubuntu PC</p>
 
<li><p>Then install the adb tool on the Ubuntu PC</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''sudo apt update'''</p>
 
<p>test@test:~$ '''sudo apt update'''</p>
<p>test@test:~$ '''sudo apt -y install adb'''</p></li>
+
<p>test@test:~$ '''sudo apt -y install adb'''</p>
 +
|}
 +
</li>
 
<li><p>You can view the identified ADB devices through the following command</p>
 
<li><p>You can view the identified ADB devices through the following command</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''adb devices'''</p>
 
<p>test@test:~$ '''adb devices'''</p>
 
<p>List of devices attached</p>
 
<p>List of devices attached</p>
 
<p>S63QCF54CJ device</p>
 
<p>S63QCF54CJ device</p>
 
<p>test@test:~$ '''lsusb'''</p>
 
<p>test@test:~$ '''lsusb'''</p>
<p>Bus 003 Device 006: ID 2207:0006</p></li>
+
<p>Bus 003 Device 006: ID 2207:0006</p>
<li><p>Then you can log in to the android system through the adb shell on the Ubuntu PC</p></li></ol>
+
|}
 
+
</li>
 +
<li><p>Then you can log in to the android system through the adb shell on the Ubuntu PC</p></li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~$ '''adb shell'''
 
test@test:~$ '''adb shell'''
  
 
console:/ $
 
console:/ $
 
+
|}
 +
</ol>
 
<ol start="7" style="list-style-type: decimal;">
 
<ol start="7" style="list-style-type: decimal;">
<li>Execute the following command to remount the Android system</li></ol>
+
<li>Execute the following command to remount the Android system</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~$ '''adb root'''
 
test@test:~$ '''adb root'''
  
 
test@test:~$ '''adb remount'''
 
test@test:~$ '''adb remount'''
 
+
|}
 +
</ol>
 
<ol start="8" style="list-style-type: decimal;">
 
<ol start="8" style="list-style-type: decimal;">
<li>Then you can transfer files to the Android system</li></ol>
+
<li>Then you can transfer files to the Android system</li>
 
+
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~$ '''adb push example.txt /system/'''
 
test@test:~$ '''adb push example.txt /system/'''
 +
|}
 +
</ol>
 +
<span id="use-network-connection-adb-debugging"></span>
  
<span id="use-network-connection-adb-debugging"></span>
 
 
=== Use network connection adb debugging ===
 
=== Use network connection adb debugging ===
  
'''Using the network adb does not require a data cable to connect the computer and the development board, but to communicate through the network, so first make sure that the wired or wireless network of the development board is connected, and then obtain the IP address of the development board, which will be used later.'''
+
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
 +
|-
 +
|
 +
<big>'''Using the network adb does not require a data cable to connect the computer and the development board, but to communicate through the network, so first make sure that the wired or wireless network of the development board is connected, and then obtain the IP address of the development board, which will be used later.'''</big>
 +
|}
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>Make sure that the '''service.adb.tcp.port''' of the Android system is set to port number 5555</p>
 
<li><p>Make sure that the '''service.adb.tcp.port''' of the Android system is set to port number 5555</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>console:/ # '''getprop | grep &quot;adb.tcp&quot;'''</p>
 
<p>console:/ # '''getprop | grep &quot;adb.tcp&quot;'''</p>
<p>[service.adb.tcp.port]: ['''5555''']</p></li>
+
<p>[service.adb.tcp.port]: ['''5555''']</p>
<li><p>If '''service.adb.tcp.port''' is not set, you can use the following command to set the port number of network adb</p></li></ol>
+
|}
 
+
</li>
 +
<li><p>If '''service.adb.tcp.port''' is not set, you can use the following command to set the port number of network adb</p></li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
console:/ # '''setprop service.adb.tcp.port 5555'''
 
console:/ # '''setprop service.adb.tcp.port 5555'''
  
Line 7,880: Line 9,743:
  
 
console:/ # '''start adbd'''
 
console:/ # '''start adbd'''
 
+
|}
 +
</ol>
 
<ol start="3" style="list-style-type: decimal;">
 
<ol start="3" style="list-style-type: decimal;">
 
<li><p>Install adb tool on Ubuntu PC</p>
 
<li><p>Install adb tool on Ubuntu PC</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''sudo apt update'''</p>
 
<p>test@test:~$ '''sudo apt update'''</p>
<p>test@test:~$ '''sudo apt install -y adb'''</p></li>
+
<p>test@test:~$ '''sudo apt install -y adb'''</p>
 +
|}
 +
</li>
 
<li><p>Then connect to the network adb on the Ubuntu PC</p>
 
<li><p>Then connect to the network adb on the Ubuntu PC</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''adb connect 192.168.1.xxx''' '''(IP地址需要修改为开发板的IP地址)'''</p>
 
<p>test@test:~$ '''adb connect 192.168.1.xxx''' '''(IP地址需要修改为开发板的IP地址)'''</p>
 
<p>* daemon not running; starting now at tcp:5037</p>
 
<p>* daemon not running; starting now at tcp:5037</p>
 
<p>* daemon started successfully</p>
 
<p>* daemon started successfully</p>
 
<p>connected to 192.168.1.xxx:5555</p>
 
<p>connected to 192.168.1.xxx:5555</p>
 +
 +
 
<p>test@test:~$ '''adb devices'''</p>
 
<p>test@test:~$ '''adb devices'''</p>
 
<p>List of devices attached</p>
 
<p>List of devices attached</p>
<p>192.168.1.xxx:5555 device</p></li>
+
<p>192.168.1.xxx:5555 device</p>
<li><p>Then you can log in to the android system through the adb shell on the Ubuntu PC</p></li></ol>
+
|}
 
+
</li>
 +
<li><p>Then you can log in to the android system through the adb shell on the Ubuntu PC</p></li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
test@test:~$ '''adb shell'''
 
test@test:~$ '''adb shell'''
  
 
console:/ #
 
console:/ #
 +
|}
 +
</ol>
 +
<span id="how-to-compile-android11-source-code"></span>
  
<span id="how-to-compile-android11-source-code"></span>
+
= '''How to compile Android11 source code''' =
= How to compile Android11 source code =
 
  
 
<span id="download-the-source-code-of-android-11"></span>
 
<span id="download-the-source-code-of-android-11"></span>
Line 7,909: Line 9,789:
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>Google Drive</p>
 
<li><p>Google Drive</p>
<p>[[File:media/image482.png|499x174px]]</p></li></ol>
+
<p>[[File:cm4-img482.png]]</p></li></ol>
 
</li>
 
</li>
 
<li><p>After downloading the sub-volume compression package of the Android 11 source code, please check whether the MD5 checksum is correct, if not, please download the source code again</p>
 
<li><p>After downloading the sub-volume compression package of the Android 11 source code, please check whether the MD5 checksum is correct, if not, please download the source code again</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''md5sum -c RK356X_Android11.tar.gz.md5sum'''</p>
 
<p>test@test:~$ '''md5sum -c RK356X_Android11.tar.gz.md5sum'''</p>
<p>'''RK356X_Android11.tar.gz00: OK'''</p>
+
<p style="color:#FF0000">'''RK356X_Android11.tar.gz00: OK'''</p>
<p>'''RK356X_Android11.tar.gz01: OK'''</p>
+
<p style="color:#FF0000">'''RK356X_Android11.tar.gz01: OK'''</p>
<p>'''RK356X_Android11.tar.gz02: OK'''</p>
+
<p style="color:#FF0000">'''RK356X_Android11.tar.gz02: OK'''</p>
<p>'''RK356X_Android11.tar.gz03: OK'''</p>
+
<p style="color:#FF0000">'''RK356X_Android11.tar.gz03: OK'''</p>
<p>'''RK356X_Android11.tar.gz04: OK'''</p>
+
<p style="color:#FF0000">'''RK356X_Android11.tar.gz04: OK'''</p>
<p>'''RK356X_Android11.tar.gz05: OK'''</p>
+
<p style="color:#FF0000">'''RK356X_Android11.tar.gz05: OK'''</p>
<p>'''RK356X_Android11.tar.gz06: OK'''</p></li>
+
<p style="color:#FF0000">'''RK356X_Android11.tar.gz06: OK'''</p>
<li><p>Then you need to merge multiple compressed files for decompression</p></li></ol>
+
|}
 
+
</li>
test@test:~$ '''cat RK356X_Android11.tar.gz0* | tar -xvzf -'''
+
<li><p>Then you need to merge multiple compressed files for decompression</p></li>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 +
test@test:~$ '''cat RK356X_Android11.tar.gz<span style="color:#FF0000">0</span>* | tar -xvzf -'''
 +
|}
 +
</ol>
 +
<span id="compile-the-source-code-of-android-11"></span>
  
<span id="compile-the-source-code-of-android-11"></span>
 
 
== Compile the source code of Android 11 ==
 
== Compile the source code of Android 11 ==
  
 
<ol style="list-style-type: decimal;">
 
<ol style="list-style-type: decimal;">
 
<li><p>First install the software packages required to compile the Android11 source code</p>
 
<li><p>First install the software packages required to compile the Android11 source code</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''sudo apt-get update'''</p>
 
<p>test@test:~$ '''sudo apt-get update'''</p>
 
<p>test@test:~$ '''sudo apt-get install -y git gnupg flex bison gperf build-essential \'''</p>
 
<p>test@test:~$ '''sudo apt-get install -y git gnupg flex bison gperf build-essential \'''</p>
 
<p>'''zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 \'''</p>
 
<p>'''zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 \'''</p>
 
<p>'''lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache \'''</p>
 
<p>'''lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache \'''</p>
<p>'''libgl1-mesa-dev libxml2-utils xsltproc unzip liblz4-tool'''</p></li>
+
<p>'''libgl1-mesa-dev libxml2-utils xsltproc unzip liblz4-tool'''</p>
 +
|}
 +
</li>
 
<li><p>There is a build.sh compilation script in the source code, and the compilation parameters are as follows</p>
 
<li><p>There is a build.sh compilation script in the source code, and the compilation parameters are as follows</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
<li><p>-'''U''':Compile uboot</p></li>
+
<li><p>-'''U''': Compile uboot</p></li>
<li><p>-'''K''':Compile kernel</p></li>
+
<li><p>-'''K''': Compile kernel</p></li>
<li><p>-'''A''':compile android</p></li>
+
<li><p>-'''A''': compile android</p></li>
<li><p>-'''u''':Package and generate update.img and update_spi_nvme.img</p></li>
+
<li><p>-'''u''': Package and generate update.img and update_spi_nvme.img</p></li>
<li><p>-'''o''':Compile OTA package</p></li>
+
<li><p>-'''o''': Compile OTA package</p></li>
<li><p>-'''d''':Specify kernel dts</p></li></ol>
+
<li><p>-'''d''': Specify kernel dts</p></li></ol>
 
</li>
 
</li>
 
<li><p>Compile uboot, kernel, android and package them into update.img</p>
 
<li><p>Compile uboot, kernel, android and package them into update.img</p>
 
<ol style="list-style-type: lower-alpha;">
 
<ol style="list-style-type: lower-alpha;">
 
<li><p>The command to compile and support HDMI 4K display mirroring &gt; (LCD is turned off by default) is as follows:</p>
 
<li><p>The command to compile and support HDMI 4K display mirroring &gt; (LCD is turned off by default) is as follows:</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''cd RK356X_Android11'''</p>
 
<p>test@test:~$ '''cd RK356X_Android11'''</p>
 
<p>test@test:~/ RK356X_Android11$ '''export BOARD=orangepi3b'''</p>
 
<p>test@test:~/ RK356X_Android11$ '''export BOARD=orangepi3b'''</p>
 
<p>test@test:~/ RK356X_Android11$ '''source build/envsetup.sh'''</p>
 
<p>test@test:~/ RK356X_Android11$ '''source build/envsetup.sh'''</p>
 
<p>test@test:~/ RK356X_Android11$ '''lunch rk3566_r-userdebug'''</p>
 
<p>test@test:~/ RK356X_Android11$ '''lunch rk3566_r-userdebug'''</p>
<p>test@test:~/ RK356X_Android11$ '''./build.sh -AUKu'''</p></li>
+
<p>test@test:~/ RK356X_Android11$ '''./build.sh -AUKu'''</p>
 +
|}
 +
</li>
 
<li><p>The command to compile and support LCD display mirroring (HDMI &gt; is disabled by default) is as follows:</p>
 
<li><p>The command to compile and support LCD display mirroring (HDMI &gt; is disabled by default) is as follows:</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>test@test:~$ '''cd RK356X_Android11'''</p>
 
<p>test@test:~$ '''cd RK356X_Android11'''</p>
 
<p>test@test:~/ RK356X_Android11$ '''export BOARD=orangepi3b'''</p>
 
<p>test@test:~/ RK356X_Android11$ '''export BOARD=orangepi3b'''</p>
Line 7,957: Line 9,859:
 
<p>test@test:~/ RK356X_Android11$ '''source build/envsetup.sh'''</p>
 
<p>test@test:~/ RK356X_Android11$ '''source build/envsetup.sh'''</p>
 
<p>test@test:~/ RK356X_Android11$ '''lunch rk3566_r-userdebug'''</p>
 
<p>test@test:~/ RK356X_Android11$ '''lunch rk3566_r-userdebug'''</p>
<p>test@test:~/ RK356X_Android11$ '''./build.sh -AUKu'''</p></li></ol>
+
<p>test@test:~/ RK356X_Android11$ '''./build.sh -AUKu'''</p>
 +
|}
 +
</li></ol>
 
</li>
 
</li>
 
<li><p>After the compilation is complete, the following information will be printed</p>
 
<li><p>After the compilation is complete, the following information will be printed</p>
 +
{| class="wikitable" style="width:800px;"
 +
|-
 +
|
 
<p>********rkImageMaker ver 2.1********</p>
 
<p>********rkImageMaker ver 2.1********</p>
 
<p>Generating new image, please wait...</p>
 
<p>Generating new image, please wait...</p>
Line 7,977: Line 9,884:
 
<p>Making update_spi_nvme.img OK.</p>
 
<p>Making update_spi_nvme.img OK.</p>
 
<p>Make update image ok!</p>
 
<p>Make update image ok!</p>
<p>/wspace3/RK3566/RK356X_Android11</p></li>
+
<p>/wspace3/RK3566/RK356X_Android11</p>
 +
|}
 +
</li>
 
<li><p>The final image file will be placed in the '''rockdev/Image-rk3566_r/''' directory. Among them, '''update.img''' is the boot image that supports TF card and eMMC, and '''update_spi_nvme.img''' is the boot image of NVME SSD</p>
 
<li><p>The final image file will be placed in the '''rockdev/Image-rk3566_r/''' directory. Among them, '''update.img''' is the boot image that supports TF card and eMMC, and '''update_spi_nvme.img''' is the boot image of NVME SSD</p>
<p>[mailto:test@test:~OrangePi_4/rk3399-android-8.1$ test@test:~/RK356X_Android11$] '''cd rockdev/Image-rk3566_r'''</p>
+
{| class="wikitable" style="width:800px;"
<p>[mailto:test@test:~OrangePi_4/rk3399-android-8.1$ test@test:~/RK356X_Android11/rockdev/Image-rk3566_r $] '''ls update*'''</p>
+
|-
<p>update.img update_spi_nvme.img</p></li></ol>
+
|
 +
<p>test@test:~/RK356X_Android11$ '''cd rockdev/Image-rk3566_r'''</p>
 +
<p>test@test:~/RK356X_Android11/rockdev/Image-rk3566_r $ '''ls update*'''</p>
 +
<p>update.img update_spi_nvme.img</p>
 +
|}
 +
</li></ol>
  
 
<span id="appendix"></span>
 
<span id="appendix"></span>
= Appendix =
+
 
 +
= '''Appendix''' =
  
 
<span id="user-manual-update-history"></span>
 
<span id="user-manual-update-history"></span>
 
== User Manual Update History ==
 
== User Manual Update History ==
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;text-align: center;"  
 
|-
 
|-
| style="text-align: left;"| '''Version'''
+
| '''Version'''
| style="text-align: left;"| '''Date'''
+
| '''Date'''
| style="text-align: left;"| '''Update Notes'''
+
| '''Update Notes'''
 
|-
 
|-
| style="text-align: left;"| v1.0
+
| v1.0
| style="text-align: left;"| 2023-08-29
+
| 2023-08-29
| style="text-align: left;"| initial version
+
| initial version
 
|-
 
|-
| style="text-align: left;"| v1.1
+
| v1.1
| style="text-align: left;"| 2023-09-05
+
| 2023-09-05
| style="text-align: left;"| Instructions for using the Orange Pi OS Arch system
+
| Instructions for using the Orange Pi OS Arch system
 
|}
 
|}
  
 
<span id="image-update-history"></span>
 
<span id="image-update-history"></span>
 +
 
== Image Update History ==
 
== Image Update History ==
  
{| class="wikitable"
+
{| class="wikitable" style="width:800px;"  
 
|-
 
|-
| '''Date'''
+
| style="text-align:center;" | '''Date'''
| '''Update Notes'''
+
| style="text-align:center;" | '''Update Notes'''
 
|-
 
|-
| 2023-08-29
+
| style="text-align:center;" | 2023-08-29
| O rangepicm4_1.0.0_ubuntu_focal_server_linux5.10.160.7z
+
|  
 +
Orangepicm4_1.0.0_ubuntu_focal_server_linux5.10.160.7z
 +
 
 +
Orangepicm4_1.0.0_ubuntu_jammy_server_linux5.10.160.7z
  
O rangepicm4_1.0.0_ubuntu_jammy_server_linux5.10.160.7z
+
Orangepicm4_1.0.0_debian_bullseye_server_linux5.10.160.7z
  
Oran gepicm4_1.0.0_debian_bullseye_server_linux5.10.160.7z
+
Orangepicm4_1.0.0_debian_bookworm_server_linux5.10.160.7z
  
Oran gepicm4_1.0.0_debian_bookworm_server_linux5.10.160.7z
+
Orangepicm4_1.0.0_ubuntu_focal_desktop_xfce_linux5.10.160.7z
  
Orangep icm4_1.0.0_ubuntu_focal_desktop_xfce_linux5.10.160.7z
+
Orangepicm4_1.0.0_ubuntu_jammy_desktop_xfce_linux5.10.160.7z
  
Orangep icm4_1.0.0_ubuntu_jammy_desktop_xfce_linux5.10.160.7z
+
Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z
  
Orangepicm 4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z
+
Orangepicm4_1.0.0_debian_bookworm_desktop_xfce_linux5.10.160.7z
  
Orangepicm 4_1.0.0_debian_bookworm_desktop_xfce_linux5.10.160.7z
 
  
 
OrangePiCM4_RK3566_Android11_v1.0.0.tar.gz
 
OrangePiCM4_RK3566_Android11_v1.0.0.tar.gz
Line 8,035: Line 9,953:
 
OrangePiCM4_RK3566_Android11_spi-nvme_v1.0.0.tar.gz
 
OrangePiCM4_RK3566_Android11_spi-nvme_v1.0.0.tar.gz
  
Or angePiCM4_RK3566_Android11_lcd_spi-nvme_v1.0.0.tar.gz
+
OrangePiCM4_RK3566_Android11_lcd_spi-nvme_v1.0.0.tar.gz
 +
 
  
 
* initial version
 
* initial version
  
 
|-
 
|-
| 2023-09-05
+
| style="text-align:center;" | 2023-09-05
| Opio s-arch-aarch64-xfce-opicm4-23.09-linux5.10.160.img.xz
+
|  
 +
Opios-arch-aarch64-xfce-opicm4-23.09-linux5.10.160.img.xz
 +
 
  
 
* initial version
 
* initial version
  
 
|}
 
|}

Latest revision as of 19:55, 19 September 2023

Basic features of Orange Pi CM4

What is Orange Pi CM4

Orange Pi CM4 uses Rockchip RK3566 quad-core 64-bit Cortex-A55 processor, using 22nm process, with a main frequency of up to 1.8GHz, integrated ARM Mali-G52 GPU, embedded high-performance 2D image acceleration module, built-in 0.8 The AI accelerator NPU of Tops computing power can choose 1GB, 2GB, 4GB or 8GB memory, and has up to 4K display processing capability.

Orange Pi CM4 brings out quite a lot of interfaces, including Micro HDMI output, M.2 PCIe2.0x1, Gigabit Ethernet port, USB2.0, USB3.0 interface and 40pin expansion pin header, etc. It can be widely used in high-end tablet, edge computing, artificial intelligence, cloud computing, AR/VR, smart security, smart home and other fields, covering various AIoT industries.

Orange Pi CM4 supports Android11, Ubuntu22.04, Ubuntu20.04, Debian11, Debian12, open source Hongmeng 4.0 Beta1, Orange Pi OS (Arch), Orange Pi OS (OH) based on open source Hongmeng and other operating systems.

Usage of Orange Pi CM4

We can use it to achieve:

  • A Linux desktop computer
  • A Linux network server
  • Android tablet
  • Android game console, etc.

Of course, there are more functions. Relying on a powerful ecosystem and a variety of expansion accessories, Orange Pi can help users easily achieve delivery from ideas to prototypes to mass production. It is an ideal choice for makers, dreamers, and hobbyists. An ideal creative platform for readers.

Hardware specifications of Orange Pi CM4

Hardware specifications of Orange Pi CM4 core board

Hardware specifications
Master chip

Rockchip RK3566

CPU

Quad-core 64-bit Cortex-A55 processor, 22nm advanced process, clocked at up to 1.8GHz

GPU

• ARM Mali G52 2EE graphics processor

• Support OpenGL ES 1.1/2.0/3.2, OpenCL 2.0, Vulkan 1.1

• Embedded high-performance 2D acceleration hardware

NPU

•Integrated RKNN NPU AI accelerator, 0.8Tops@INT8 performance

•Supports one-click conversion of Caffe/TensorFlow/TFLite/ONNX/PyTorch/Keras/Darknet architecture models

VPU

• 4K@60fps H.265/H.264/VP9 video decoding

• 1080P@60fps H.265/H.264 video encoding

PMU

Rockchip RK809-5

Memory

2GB/4GB/8GB (LPDDR4/4x)

Storage

• Onboard eMMC: 16GB/32GB/64GB/128GB

• SPI Flash: default blank paste

Wi-Fi+BT

Wi-Fi 5+BT 5.0, BLE(AP6256)

Ethernet transceiver

10/100/1000Mbps Ethernet (onboard PHY chip: YT8531C)

Core board interface

2 x 100PIN, 1 x 24PIN, including the following signals:

• 10/100/1000Mbps Ethernet MDI signal

• 1x HDMI 2.0 interface, up to 4K@60fps

• 1x 4-lane MIPI DSI display interface

• 1x 4-lane MIPI CSI camera interface

• eDP

• SATA3 or PCIe

• 1 x USB3.0

• 3 x USB2.0

• RESET, MASKROM, RECOVERY

• Headphone jack audio input and output signals

• DC 5V input power supply, DC3.3V and 1.8V output power supply

Supported OS

Android11, Ubuntu22.04, Ubuntu20.04, Debian11, Debian12, open source Hongmeng 4.0 Beta1, Orange Pi OS (Arch), Orange Pi OS (OH) based on open source Hongmeng and other operating systems.

Introduction of Appearance Specifications
PCB Size

55x40mm

Hardware specifications of Orange Pi CM4 baseboard

CM4 Base Board Hardware Specifications
Storage

• M.2 M-KEY slot: SATA3 or PCIe2.0 NVME SSD

• TF card slot

Ethernet interface

10/100/1000Mbps Ethernet RJ45 socket

Display

• 1x Micro HDMI TX 2.0, maximum support 4K@60FPS

• 1xMIPI DSI 2 Lane

• eDP1.3

Camera

2xMIPI CSI 2 Lane

USB

• 1xUSB 2.0 supports Device or HOST mode

• 1xUSB 3.0 HOST

• 2xUSB 2.0 HOST

Audio

3.5mm headphone jack audio input/output

Button

1xMaskROM key, 1xRECOVERY key, 1x reset key

FAN

4Pin 2.54mm 5V fan interface

40Pin

40Pin function expansion interface, supports the following interface types:

GPIO、UART、I2C、SPI、PWM

Power Source

Type-C 5V3A

Supported OS

Android11, Ubuntu22.04, Ubuntu20.04, Debian11, Debian12, open source Hongmeng 4.0 Beta1, Orange Pi OS (Arch), Orange Pi OS (OH) based on open source Hongmeng and other operating systems.

Introduction of Appearance Specifications
PCB Size

85x56mm

Top view and bottom view of Orange Pi CM4

Top view and bottom view of Orange Pi CM4 core board

Top view:

 

Bottom view:

 

Top and bottom views of the Orange Pi CM4 base board

Top view:

 

Bottom view:

 

The interface details of Orange Pi CM4

Interface details of Orange Pi CM4 core board

 

Interface details of Orange Pi CM4 base board

 

 

The diameter of the three positioning holes on the base plate is 2.6mm, the diameter of the M.2 PICE device fixing hole is 2.7mm, and the diameter of the four positioning holes on the core board is 2.7mm.

Introduction to the use of the development board

Prepare the required accessories

  1. TF card, a class 10 or above high-speed SanDisk card with a minimum capacity of 16GB (32GB or above recommended)

     

  2. TF card reader, used to burn the image into the TF card

     

  3. Display with HDMI interface

     

  4. Micro HDMI to HDMI cable, used to connect the development board to an HDMI monitor or TV for display

     

    Note, if you want to connect a 4K monitor, make sure the HDMI cable supports 4K video output.

  5. Power adapter. Orange Pi CM4 is recommended to use a 5V/3A Type-C power supply.

     

  6. The mouse and keyboard of the USB interface, as long as the mouse and keyboard of the standard USB interface are acceptable, the mouse and keyboard can be used to control the Orange Pi development board

     

  7. USB camera

     

  8. PCIe NVMe SSD, the development board supports SSDs with M.2 2230 and M.2 2242 specifications. M.2 2280 is also supported, but it cannot be fixed with screws.

    The development board does not come with an SPI Flash chip by default. You need to buy it yourself and then solder it on. The SPI Flash chip model we recommend is XM25QU128CWIQT08Q.

    Please pay special attention to this point if you need to use SPIFlash+NVMe SSD to start the system.

  9. 100M or 1000M network cable, used to connect the development board to the Internet

     

  10. USB2.0 male-to-male data cable, used for burning images to eMMC, TF card, etc.

     

  11. 3.3V USB to TTL module and DuPont line, when using serial port debugging function, need USB to TTL module and DuPont line to connect the development board and computer

       

  12. Personal computer with Ubuntu and Windows operating systems installed

    1 Ubuntu22.04 PC Optional, used to compile Linux source code
    2 Windows PC For burning Android and Linux images

Download the image of the development board and related materials

  1. The website for downloading the English version is:

    http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4.html

     

  2. The information mainly includes

  1. Android source code: saved on Google Cloud Disk

    b. Linux source code: saved on Github

    c. User manual and schematic diagram: saved on Google Cloud Disk

    d. Official tools: mainly include the software that needs to be used during the use of the development board

    e. Android image: saved on Google Cloud Disk

    f. Ubuntu image: saved on Google Cloud Disk

    g. Debian image: saved on Google Cloud Disk

    h. Orange Pi OS Arch image: saved on Google Cloud Disk

Method of burning Linux image to TF card based on Windows PC

Note that the Linux images mentioned here specifically refer to Linux distribution images such as Debian, Ubuntu and OPi OS Arch downloaded from the Orange Pi's data download page.

How to use balenaEtcher to burn Linux image

  1. First prepare a TF card with a capacity of 16GB or larger. The transmission speed of the TF card must be class 10 or above. It is recommended to use TF cards from SanDisk and other brands.
  2. Then use the card reader to insert the TF card into the computer
  3. Download the Linux operating system image file compression package that you want to burn from the Orange Pi's data download page, and then use the decompression software to decompress it. Among the decompressed files, the file ending with ".img" is the image file of the operating system. The size is generally above 2GB.
  4. Then download the Linux image burning software-balenaEtcher, the download address is:

https://www.balena.io/etcher/

  1. After entering the balenaEtcher download page, click the green download button to jump to the place where the software is downloaded

     

  2. Then you can choose to download the Portable version of balenaEtcher software. The Portable version does not need to be installed, and you can use it by double-clicking to open it

     

  3. If you downloaded the version of balenaEtcher that needs to be installed, please install it first and then use it. If you downloaded the Portable version of balenaEtcher, just double-click to open it. The balenaEtcher interface after opening is as shown below:

     

    If the following error is prompted when opening balenaEtcher:

    Please select balenaEtcher, right-click, and select Run as administrator.

  1. The specific steps to use balenaEtcher to burn a Linux image are as follows

    a. First select the path of the Linux image file to be burned

    b. Then select the drive letter of the TF card

    c. Finally click Flash and it will start burning the Linux image to the TF card.

     
  2. The interface displayed in the process of burning the Linux image by balenaEtcher is shown in the figure below, and the progress bar displays purple, indicating that the Linux image is being burned into the TF card

     

  3. After burning the Linux image, balenaEtcher will also verify the image burned into the TF card by default to ensure that there is no problem in the burning process. As shown in the figure below, a green progress bar indicates that the image has been burnt, and balenaEtcher is verifying the burnt image

     

  4. After successful burning, the display interface of balenaEtcher is as shown below. If the green indicator icon is displayed, it means that the image burning is successful. At this time, you can exit balenaEtcher, then pull out the TF card and insert it into the TF card slot of the development board for use.

     

How to use RKDevTool to burn Linux image to TF card

  1. First you need to prepare a good quality USB2.0 male-to-male data cable

     

  2. You also need to prepare a TF card with a capacity of 16GB or larger. The transmission speed of the TF card must be class 10 or above. It is recommended to use TF cards from SanDisk and other brands.

  3. Then download the Rockchip driver DriverAssitant_v5.12.zip and MiniLoader and the burning tool RKDevTool_Release_v3.15.zip from the Orange Pi information download page

    1. On the Orange Pi information download page, first select the official tool, and then enter the folder below

       

    2. Then download all the files below

       

      Note that the "MiniLoader-things needed to burn Linux images" folder will be referred to as the MiniLoader folder below.

  4. Then download the compressed package of the Linux operating system image file you want to burn from the Orange Pi information download page, and then use the decompression software to decompress it. In the decompressed file, the file ending with ".img" is the image file of the operating system. , the size is generally above 2GB

  5. Then use decompression software to decompress DriverAssitant_v5.12.zip, then find the DriverInstall.exe executable file in the decompressed folder and open it.

     

  6. Open DriverInstall.exe and install the Rockchip microdriver as follows

    1. Click the "Driver Installation" button

       

    2. After waiting for a period of time, a window will pop up prompting "Driver installation successful", then click the "OK" button.

       

  7. Then unzip RKDevTool_Release_v3.15.zip. This software does not need to be installed. Just find RKDevTool in the unzipped folder and open it.

     

  8. After opening the RKDevTool burning tool, because the computer has not connected to the development board through the USB2.0 male-to-male data cable at this time, the lower left corner will prompt "No device found"

     

  9. Then start burning the Linux image to the TF card

    1. First, connect the development board to the Windows computer through a USB2.0 male-to-male data cable. The location of the USB2.0 programming port on the development board is as shown in the figure below.

       

    2. Make sure the TF card slot is not inserted into the TF card

    3. Then press and hold the MaskROM button on the development board, the position of the MaskROM button on the development board is shown in the figure below:

       

    4. Then connect the development board to the power supply of the Type-C interface, power it on, and then release the MaskROM button.

       

    5. If the previous steps are successful, the development board will enter the MASKROM mode at this time, and the interface of the burning tool will prompt "found a MASKROM device"

       

    6. At this time, please insert the TF card into the TF card slot

    7. Then place the mouse cursor in the area below

       

    8. Then click the right mouse button and the selection interface shown in the figure below will pop up

       

    9. Then select the import configuration option

       

    10. Then select the rk356x_linux_tfcard.cfg configuration file in the MiniLoader folder downloaded earlier, and click Open

       

    11. Then click OK

       

    12. Then click the position shown in the figure below

       

    13. Then select MiniLoaderAll.bin in the MiniLoader folder downloaded earlier, and then click to open

       

    14. Then click on the location shown in the picture below

       

    15. Then select the path of the Linux image you want to burn, and then click Open

      Before burning the image, it is recommended to rename the Linux image to be burned to orangepi.img or another shorter name, so that you can see the percentage of the burning progress when burning the image.

       

    16. Then please check the option to force writing by address.

       

    17. Click the execute button again and it will start burning the Linux image to the tf card of the development board.

       

    18. The display log after the r.Linux image is burned is as shown below

       

    19. After burning the Linux image to the TF card, the Linux system will start automatically.

How to burn Linux image using Win32Diskimager

  1. First prepare a TF card with a capacity of 16GB or larger. The transmission speed of the TF card must be class 10 or above. It is recommended to use TF cards from SanDisk and other brands.

  2. Then use the card reader to insert the TF card into the computer

  3. Then format the TF card

    1. SD Card Formatter can be used to format the TF card. The download address is:
    2. https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip

    1. After downloading, unzip and install directly, and then open the software

    2. If only the TF card is inserted into the computer, the drive letter of the TF card will be displayed in the "Select card" column. If multiple USB storage devices are inserted into the computer, you can select the drive letter corresponding to the TF card through the drop-down box.

       

    3. Then click "Format". A warning box will pop up before formatting. After selecting "Yes (Y)", formatting will begin.

    4.  

    1. After formatting the TF card, the information shown in the figure below will pop up, click OK

       

  1. Download the compressed package of the Linux operating system image file you want to burn from the Orange Pi information download page, and then use the decompression software to decompress it. In the decompressed file, the file ending with ".img" is the image file of the operating system. The size is generally above 2GB

  2. Use Win32Diskimager to burn the Linux image to the TF card

    1. The download page of Win32Diskimager is
    2. http://sourceforge.net/projects/win32diskimager/files/Archive/

    1. After downloading, you can install it directly. The Win32Diskimager interface is as follows

      a) First select the path to the image file

      b) Then confirm that the drive letter of the TF card is consistent with what is displayed in the "Device" column

      c) Finally click "Write" to start burning

       
    2. After the image writing is completed, click the "Exit" button to exit, and then you can pull out the TF card and insert it into the development board to start

Method of burning Linux image to TF card based on Ubuntu PC

Note that the Linux images here refer specifically to the images of Linux distributions like Debian, Ubuntu, and OPi OS Arch downloaded from the Orange Pi's data download page, and Ubuntu PC refers to a personal computer with Ubuntu installed.

  1. First prepare a 16GB or larger capacity TF card, TF card transmission speed must be class10 or above, it is recommended to use Sandisk and other brands of TF card
  2. Then use the card reader to insert the TF card into the computer
  3. Download the balenaEtcher software, the download address is

https://www.balena.io/etcher/

  1. After entering the balenaEtcher download page, click the green download button to jump to the place where the software is downloaded

     

  2. Then choose to download the Linux version of the software

     

  3. Download the compressed Linux operating system image file you want to burn from Orange Pi's data download page, and then use the decompression software to decompress it. Files ending with ".img "in the decompressed files are the image files of the operating system, and the size is generally more than 2GB

    The following command is used to decompress the compressed package ending in 7z

    test@test:~$ 7z x Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z

    test@test:~$ ls Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.*

    Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.sha #Checksum file

    Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.img #Image file

  4. After decompressing the image, you can first use the sha256sum -c *.sha command to calculate whether the checksum is correct, if the success indicates that the downloaded image is not wrong, you can rest assured to burn to the TF card, if the checksum does not match that there is a problem with the downloaded image, please try to re-download

    test@test:~$ sha256sum -c *.sha

    Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.img: OK

  5. Then double-click balenaEtcher-1.5.109-x64.AppImage in the graphical interface of Ubuntu PC to open balenaEtcher (no installation required), and the interface after balenaEtcher is opened is shown as the following figure

     

  6. The specific steps to burn a Linux image using balenaEtcher are shown below

    a. Select the path of the Linux image file to be burned

    b. Then select the drive letter of the TF card

    c. Finally, clicking Flash will start burning the Linux image to the TF card

     
  7. The interface displayed during balenaEtcher burning the Linux image is as shown in the following figure. In addition, the progress bar showing purple indicates that the Linux image is burning to the TF card

     

  8. After the Linux image is burned, balenaEtcher will also verify the image burned to the TF card by default to ensure that there is no problem in the burning process. As shown in the following figure, the green progress bar indicates that the image has been burned, and balenaEtcher is verifying the burned image

     

  1. The display interface of balenaEtcher after the successful burning is shown as the following figure. If the green indicator icon is displayed indicating that the image is burned successfully, you can exit balenaEtcher at this time, and then pull out the TF card and insert it into the TF card slot of the development board

     

Methods for burning Linux images to eMMC

Methods for burning Linux images to eMMC using RKDevTool

Note that all of the following actions are performed on a Windows computer.

Note that the Linux images here specifically refer to the images of Linux distributions such as Debian, Ubuntu, and OPi OS Arch downloaded from the Orange Pi's data download page.

  1. First of all, you need to prepare a good quality USB2.0 public-to-public data cable

     

  2. Then download the Rockchip DriverAssitant_v5.12.zip and MiniLoader and the burning tool RKDevTool_Release_v3.15.zip from Orange Pi's data download page

    1. On the Orange Pi's data download page, first select the official tool and then go to the following folder

       

    2. Then download all the files below

       

      Note that the folder "MiniLoader- What you Need to burn Linux images" is hereinafter referred to as the MiniLoader folder.

  3. Download the compressed Linux operating system image file you want to burn from the Orange Pi's data download page, and then use the decompression software to decompress it. After decompressing the file, the file ending with ".img "is the image file of the operating system, and the size is generally more than 2GB

  4. Then use the decompression software to decompress DriverAssitant_v5.12.zip, and then find the DriverInstall.exe executable file in the decompressed folder and open it

     

  5. Open DriverInstall.exe and install the SWick micro driver as follows

    1. Click the "Driver Installation" button

       

    2. Wait for a period of time, the pop-up window will prompt > "Driver installation successful", and then click the > "OK" button

       

  6. Then decompress RKDevTool_Release_v3.15.zip, this software does not need to be installed, find RKDevTool in the decompressed folder and open it

     

  7. After opening the RKDevTool burning tool, because the computer has not connected to the development board through the USB2.0 public-to-public data cable at this time, the lower left corner will indicate "no device found".

     

  8. Then start burning the Linux image into eMMC

    1. First, connect the development board to the Windows computer through the USB2.0 male-to-public data cable. The position of the USB2.0 burning port on the development board is shown in the figure below

       

    2. Ensure that no TF card is inserted into the development board and no power supply is connected

    3. Then press and hold the MaskROM button on the development board. The position of the MaskROM button on the development board is shown as follows:

       

    4. Then connect the Type-C interface to the development board, and power on, and then you can release the MaskROM button

       

    5. If the previous steps are smooth, the development board will enter MASKROM mode at this time, and the interface of the burning tool will prompt "Found a MASKROM device".

       

    6. Then place the mouse cursor on the field below

       

    7. Then click the right mouse button to pop up the selection interface as shown in the following figure

       

    8. Then select the Import configuration option

       

    9. Then select the rk356x_linux_emmc.cfg configuration file in the MiniLoader folder downloaded earlier and click Open

       

    10. Then click OK

       

    11. Then click on the location shown in the image below

       

    12. Select MiniLoaderAll.bin from the MiniLoader folder downloaded earlier, and then click Open

       

    13. Then click on the location shown in the image below

       

    14. Then select the path of the Linux image you want to burn and click Open

      Before burning the image, it is recommended to rename the Linux image to orangepi.img or something shorter so that you can see the percentage of the burn progress when burning the image.

       

    15. Then check the Force write to address option

       

    16. Click the Execute button again to start burning the Linux image to eMMC on the development board

       

    17. The following figure shows the display log after the Linux image is burned

       

    18. After the Linux image is burned into eMMC, the Linux system automatically starts

How to burn a Linux image to eMMC using the dd command

Note that by Linux images, I specifically mean images of Linux distributions such as Debian, Ubuntu, or OPi OS Arch downloaded from the Orange Pi's data download page.

  1. Using dd command to burn Linux image to eMMC needs TF card to complete, so first need to burn Linux image to TF card, and then use TF card to start the development board into the Linux system. For the method of burning a Linux image to a TF card, see the two sections for the method of burning a Linux image to a TF Card based on a Windows PC and the method of burning a Linux image to a TF card based on an Ubuntu PC.

  2. After starting the Linux system with the TF card, we first upload the decompressed Linux image file (Debian, Ubuntu image or OPi OS (Arch) image downloaded from the official website) to the TF card. For details about how to upload a Linux image file to the development board, see section Uploading Files to the Linux system on the Development Board.

  3. After uploading the image to the Linux system of the development board, we can enter the storage path of the image file in the command line of the Linux system of the development board. For example, I saved the Linux image of the development board in the directory /home/orangepi/Desktop. Then go to the /home/orangepi/Desktop directory and you will see the uploaded image file.

    orangepi@orangepi:~$ cd /home/orangepi/Desktop

    orangepi@orangepi:~/Desktop$ ls

    Orangepicm4_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img

    How to enter the development board Linux system command line?

    1. For details about how to log in to the terminal through the serial port, see section Debugging Serial Port.

    2. For details about how to remotely log in to the Linux operating system over ssh, see section "Logging In to the Development Board over SSH".

    3. If you are connected to a display screen such as HDMI or LCD, you can open a command line terminal on the desktop.

  4. Next, we first use the following command to identify the eMMC device node

    orangepi@orangepi:~/Desktop$ ls /dev/mmcblk*boot0 | cut -c1-12

    /dev/mmcblk0

  5. Then we can use the dd command to clear eMMC, pay attention to the of= parameter after please fill in the output result of the above command

    orangepi@orangepi:~/Desktop$ sudo dd bs=1M if=/dev/zero of=/dev/mmcblk0 count=1000 status=progress

    orangepi@orangepi:~/Desktop$ sudo sync

  6. You can then use the dd command to burn the Linux image of the development board into eMMC

    1. if = parameter in the command is to fill in behind the Linux + Linux mirror mirror to store the full path name (such as/home/orangepi/Desktop/Linux image name). Since we have entered the path of the Linux image above, we only need to fill in the name of the Linux image.

    2. Do not copy the Linux image name in the following command. Replace it with the actual image name (because the version of the image may be updated).

      sudo dd bs=1M if=Orangepicm4_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img of=/dev/mmcblk0 status=progress

      sudo sync

      Note that if you are uploading a.7z or.xz Linux image file, please decompress it before using the dd command to burn it.

      A detailed description of all the parameters of the dd command and more usage can be seen by running the man dd command on Linux.

  7. After successfully burning the Linux image of the development board to eMMC, you can use the poweroff command to shut down. Then pull out the TF card, power it on again, and the Linux system in eMMC will be started.

Method of burning Linux image to SPIFlash+NVMe SSD

Before starting to burn the image, it is necessary to ensure that the SPI Flash chip has been affixed to the development board, because the development board does not have SPI Flash chip when it is shipped, so it is necessary to purchase and weld it by itself. We suggest that the SPI Flash chip model be XM25QU128CWIQT08Q

eMMC has a higher boot priority than NVMe SSDS. Therefore, you need to clear the eMMC system before burning the image. For details about how to clear eMMC, see section "Clearing eMMC using RKDevTool"

Note that the Linux images here specifically refer to the images of Linux distributions such as Debian, Ubuntu, and OPi OS Arch downloaded from the Orange Pi's data download page.

Note that all of the following actions are performed on a Windows computer.

Method of burning using RKDevTool

  1. First of all, you need to prepare an NVMe SSD. The PCIe supported by the M.2 slot on the development board is PCIe2.0x1, and the theoretical maximum speed is 500MB/s. Pci 3.0 and PCI 4.0 NVMe SSDS are also available, but the speed is only up to the speed of PCI 2.0x1.

    1. M.2 2230 SSD specifications are as follows

       

    2. M.2 2242 SSDS are described as follows

       

  2. Insert the NVMe SSD into the M.2 PCIe port on the development board and secure it

     

  3. Please ensure that the SPI Flash is affixed to the development board. The position of SPI Flash on the development board is shown in the figure below. No other Settings are required before burning

     

  4. Then you need to prepare a good quality USB2.0 public-to-public data cable

     

  5. Then download the Rockchip DriverAssitant_v5.12.zip and MiniLoader and the burning tool RKDevTool_Release_v3.15.zip from Orange Pi's data download page

    1. On the Orange Pi's data download page, first select the official tool and then go to the following folder

       

    2. Then download all the files below

       

      Note that the folder "MiniLoader- What you Need to burn Linux images" is hereinafter referred to as the MiniLoader folder.

  6. Download the compressed Linux operating system image file you want to burn from the Orange Pi's data download page, and then use the decompression software to decompress it. In the decompressed file, the file ending with ".img "is the image file of the operating system, and the size is generally more than 2GB

  7. Then use the decompression software to decompress DriverAssitant_v5.12.zip, and then find the DriverInstall.exe executable file in the decompressed folder and open it

     

  8. Open DriverInstall.exe and install the Rockchip driver as follows

    1. Click the "Driver Installation" button

       

    2. Wait for a period of time, the pop-up window will prompt "Driver installation successful", and then click the "OK" button

       

  9. Then decompress RKDevTool_Release_v3.15.zip, this software does not need to be installed, find RKDevTool in the decompressed folder and open it

     

  10. After opening the RKDevTool burning tool, because the computer has not connected to the development board through the USB2.0 public-to-public data cable at this time, the lower left corner will indicate "No device found".

     

  11. Then start burning the Linux image to the SSD

    1. First, connect the development board to the Windows computer through the USB2.0 male-to-public data cable. The position of the USB2.0 burning interface on the development board is shown in the figure below

       

    2. Ensure that no TF card is inserted into the development board and no power supply is connected

    3. Then press and hold the MaskROM button on the development board. The position of the MaskROM button on the development board is shown as follows:

       

    4. Then connect the Type-C interface to the development board, and power on, and then you can release the MaskROM button

       

    5. If the previous steps are smooth, the development board will enter MASKROM mode at this time, and the interface of the burning tool will prompt "Found a MASKROM device".

       

    6. Then place the mouse cursor on the field below

       

    7. Then click the right mouse button to pop up the selection interface as shown in the following figure

       

    8. Then select the Import configuration option

       

    9. Then go to the previously downloaded MiniLoader folder, select the rk356x_linux_pcie.cfg configuration file, and click Open

       

    10. Then click OK

       

    11. Then click on the location shown in the image below

       

    12. Select MiniLoaderAll.bin from the MiniLoader folder downloaded earlier, and then click Open

       

    13. Then click on the location shown in the image below

       

    14. Then go to the previously downloaded MiniLoader folder, select rkspi_loader.img, and click Open

       

    15. Then click on the location shown in the image below

       

    16. Then select the path of the Linux image you want to burn and click Open

      Before burning the image, it is recommended to rename the Linux image to orangepi.img or something shorter so that you can see the percentage of the burn progress when burning the image.

       

    17. Then select Force Write to address

       

    18. Click the Run button again to start burning the Linux image to the SSD

       

    19. The display log of the S.lux image after burning is shown in the following figure

       

      If you have problems with burning, please clear the SPIFlash first and then burn the test. For instructions on how to clear SPIFlash, refer to the section on how to clear SPIFlash using RKDevTool.

    20. After the image is burned, the Linux system in the SPIFlash+PCIe SSD automatically starts. If it does not start properly, power it on again.

Method of burning using dd command

  1. First of all, you need to prepare an NVMe SSD. The PCIe supported by the M.2 slot on the development board is PCIe2.0x1, and the theoretical maximum speed is 500MB/s. Pci 3.0 and PCI 4.0 NVMe SSDS are also available, but the speed is only up to the speed of PCI 2.0x1.

    1. M.2 2230 SSDS are as follows

       

    2. M.2 2242 SSDS are described as follows

       

  2. Insert the NVMe SSD into the M.2 PCIe port on the development board and secure it

     

  3. Please ensure that the SPI Flash is affixed to the development board. The position of SPI Flash on the development board is shown in the figure below. No other Settings are required before burning

     

  4. Burning Linux image to SPIFlash+NVMe SSD requires TF card to complete, so first need to burn Linux image to TF card, and then use the TF card to start the development board into the Linux system. For the method of burning a Linux image to a TF card, see the two sections on the method of burning a Linux image to a TF card based on a Windows PC and the method of burning a Linux image to a TF card based on an Ubuntu PC.

  5. After starting the Linux system with TF card, we first burn the u-boot image into SPI Flash

    1. Run nand-sata-installl first. Ordinary users remember to add sudo permission

      orangepi@orangepi:~$ sudo nand-sata-install

    2. Then select 7 Install/Update ther bootloader on SPI Flash

    3.  

    1. Then select <Yes>
    2.  

    1. Then please wait patiently for the burning to complete, after the burning is completed, it will be displayed as follows (a Done will be displayed in the lower left corner) :
    2.  

  1. Then upload the Linux image file (Debian or Ubuntu image downloaded from the official website) to the TF card. For details about how to upload a Linux image file to the development board, see section Uploading Files to the Linux system on the Development Board.

  2. After uploading the image to the Linux system of the development board, we can enter the storage path of the image file in the command line of the Linux system of the development board. For example, I saved the Linux image of the development board in the directory /home/orangepi/Desktop. Then go to the /home/orangepi/Desktop directory and you will see the uploaded image file.

    orangepi@orangepi:~$ cd /home/orangepi/Desktop

    orangepi@orangepi:~/Desktop$ ls

    Orangepi3b_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img

    How to enter the development board Linux system command line?

    1. For details about how to log in to the terminal through the serial port, see section Debugging Serial Port.

    2. For details about how to remotely log in to the Linux operating system over ssh, see section "Logging In to the Development Board over SSH".

    3. If you are connected to a display screen such as HDMI or LCD, you can open a command line terminal on the desktop.

  3. Next, let's first make sure that NVMe SSD has been properly recognized by Linux development board. If the NVMe SSD is correctly identified, run the sudo fdisk -l command to view information about the nvme

    orangepi@orangepi:~/Desktop$ sudo fdisk -l | grep "nvme0n1"

    Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors

    Use the lspci command to see an NVME-related PCI device

    orangepi@orangepi:~/Desktop$ lspci

    00:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3566 (rev 01)

    01:00.0 Non-Volatile memory controller: Realtek Semiconductor Co., Ltd. Device 5765 (rev 01)

  4. Then we can use the dd command to empty the NVMe SSD (optional)

    orangepi@orangepi3b:~/Desktop$ sudo dd bs=1M if=/dev/zero of=/dev/nvme0n1 count=2000 status=progress

    orangepi@orangepi3b:~/Desktop$ sudo sync

  5. You can then use the dd command to burn the Linux image of the development board into the NVMe SSD

    1. if = parameter in the command is to fill in behind the Linux + Linux mirror image to store the full path name (such as/home/orangepi/Desktop/Linux image name). Since we have entered the path of the Linux image above, we only need to fill in the name of the Linux image.

    2. Do not copy the Linux image name in the following command. Replace it with the actual image name (because the version of the image may be updated).

      sudo dd bs=1M if=Orangepi3b_x.x.x_debian_bullseye_desktop_xfce_linux5.10.160.img of=/dev/nvme0n1 status=progress

      sudo sync

      Note that if you are uploading a.7z or.xz or.gz Linux image file, remember to decompress it before burning it with the dd command.

      A detailed description of all the parameters of the dd command and more usage can be seen by running the man dd command on Linux.

  6. After successfully burning the Linux image of the development board to the NVMe SSD, you can use the poweroff command to shut down. Then, pull out the TF card, press the power button again, and then start the Linux system in the SPIFlash+NVMe SSD.

  7. After starting the system in the NVMe SSD, run the df -h command to view the actual hard disk capacity

    1. 128GB NVMe SSD

      orangepi@orangepi:~$ df -h

      Filesystem Size Used AvailUse% Mounted on
      udev3.8G 8.0K 3.8G 1% /dev
      tmpfs 769M 1.4M 768M 1% /run
      /dev/nvme0n1p2118G 5.8G 111G 5% /
      tmpfs 3.8G 03.8G 0% /dev/shm
      tmpfs 5.0M 4.0K 5.0M 1% /run/lock
      tmpfs 3.8G 16K 3.8G 1% /tmp
      /dev/nvme0n1p1256M 90M 166M 36% /boot
      /dev/zram1194M 9.9M 170M 6% /var/log
      tmpfs 769M 60K 769M 1% /run/user/1000
      tmpfs 769M 48K 769M 1% /run/user/0

    2. 2TB NVMe SSD

      orangepi@orangepi:~$ df -h

      Filesystem Size Used AvailUse% Mounted on
      udev3.8G 8.0K 3.8G 1% /dev
      tmpfs 769M 1.4M 768M 1% /run
      /dev/nvme0n1p21.9T 4.1G 1.8T 1% /
      tmpfs 3.8G 03.8G 0% /dev/shm
      tmpfs 5.0M 4.0K 5.0M 1% /run/lock
      /dev/zram23.7G 76K 3.5G 1% /tmp
      /dev/nvme0n1p1256M 90M 166M 36% /boot
      /dev/zram1194M 9.9M 170M 6% /var/log
      tmpfs 769M 60K 769M 1% /run/user/1000
      tmpfs 769M 48K 769M 1% /run/user/0

  8. When the TF card and NVMe SSD burn exactly the same system, if the TF card and NVMe SSD are inserted in the development board, power on the development board at this time, u-boot will give priority to start the system in the TF card. However, since the TF card and the NVMe SSD system are identical, the UUID of the /boot partition and rootfs partition in the two storage devices are the same, which will cause the TF card may load the NVMe SSD partition when it is started. Run the following script to solve this problem.

    orangepi@orangepi:~$ sudo fix_mmc_ssd.sh

    An identical system means that the mirror name is exactly the same. Even if it is a Debian11 system, the version is different.

Method of burning using balenaEtcher software

  1. First of all, you need to prepare an NVMe SSD. The PCIe supported by the M.2 slot on the development board is PCIe2.0x1, and the theoretical maximum speed is 500MB/s. Pci 3.0 and PCI 4.0 NVMe SSDS are also available, but the speed is only up to the speed of PCI 2.0x1.

    1. M.2 2230 SSDS are as follows

       

    2. M.2 2242 SSDS are described as follows

       

  2. Insert the NVMe SSD into the M.2 PCIe port on the development board and secure it

     

  3. Please ensure that the SPI Flash is affixed to the development board. The position of SPI Flash on the development board is shown in the figure below. No other Settings are required before burning

     

  4. Burning Linux image to SPIFlash+NVMe SSD requires TF card to complete, so first need to burn Linux image to TF card, and then use the TF card to start the development board into the Linux system. For the method of burning a Linux image to a TF card, see the two sections on the method of burning a Linux image to a TF card based on a Windows PC and the method of burning a Linux image to a TF card based on an Ubuntu PC.

  5. After starting the Linux system in the TF card, please make sure that the NVMe SSD has been properly recognized by Linux on the development board. If the NVMe SSD is correctly identified, run the sudo fdisk -l command to view information about the nvme

    orangepi@orangepi:~/Desktop$ sudo fdisk -l | grep "nvme0n1"

    Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors

    Use the lspci command to see an NVME-related PCI device

    orangepi@orangepi:~/Desktop$ lspci

    00:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3566 (rev 01)

    01:00.0 Non-Volatile memory controller: Realtek Semiconductor Co., Ltd. Device 5765 (rev 01)

  6. balenaEtcher has been pre-installed in the Linux image, and the opening method is as follows:

     

    If the balenaEtcher arm64 version is not pre-installed, for details about how to download and install the balenaEtcher arm64 version, see section How to Download and Install the balenaEtcher arm64 version.

  1. The interface after balenaEtcher is opened is as follows:
  2.  

  1. The method of using balenaEtcher to burn u-boot to SPI Flash on the development board is as follows:

    1. First click Flash from file
    2.  

    1. Go to /usr/lib/linux-u-boot-legacy-orangepi3b_1.x.x_arm64, select rkspi_loader.img, and click Open
    2.  

    1. Open rkspi_loader.img. The following interface is displayed:

       

    2. Then click Select target

    3.  

    1. Then click Show 2 hidden to open the option for more storage devices
    2.  

    1. Then Select the SPI Flash device name /dev/mtdblock0 and click Select
    2.  

    1. Then click Flash
    2.  

    1. Then click Yes, I’m sure
    2.  

    1. Then enter the password orangepi of the development board Linux system, and the u-boot image will be burned to the SPI Flash
    2.  

    1. The burning process is displayed as follows:
    2.  

    1. The display after burning is as follows:
    2.  

  1. Method of burning the Linux system in the TF card to the NVMe SSD (this method is equivalent to cloning the system in the TF card to the NVMe SSD)

    1. First click Clone drive
    2.  

    1. Then select the device name of the TF card /dev/mmcblk1
    2.  

    1. The interface after opening the TF card is as follows:
    2.  

    1. Then click Select target
    2.  

    1. Then click Show 2 hidden to open the option for more storage devices
    2.  

    1. Then Select the device name for the NVMe SSD /dev/nvme0n1 and click Select
    2.  

    1. Then click Flash
    2.  

    1. Then click Yes, I’m sure
    2.  

    1. Then enter the password orangepi for the development board Linux system and start burning the Linux image to the SSD
    2.  

    1. The burning process is shown as follows:
    2.  

       

    1. The display after burning is as follows:
    2.  

    1. To expand the capacity of the rootfs partition on the NVMe SSD, perform the following steps:

      1. a) First, open GParted. If Gparted is not pre-installed, run apt command to install it

        orangepi@orangepi:~$ sudo apt-get install -y gparted

      2.  

      1. b) Then enter the password orangepi for Linux and click Authenticate
      2.  

      1. c) Then click Fix

         

      2. d) Then select NVMe SSD

      3.  

      1. e) The following information is displayed after the NVMe SSD is selected:
      2.  

      1. f) Then select the /dev/nvme0n1p2 partition, right-click, and select Resize/Move
      2.  

      1. g) Then drag the capacity to the maximum as shown in the image below

         

      2. h) Then click Resize/Move

         

      3. i) Then click on the green in the picture below

         

      4. j) Then click Apply

         

      5. k) Then click Close to close it

         

    1. At this point, you can shut it down using the sudo poweroff command. Then, pull out the TF card, press the power button again, and then start the Linux system in the SPIFlash+NVMe SSD.
  1. The 9 step is to clone the system in the TF card to the NMVe SSD, we can also directly burn the Linux image file to the NVMe SSD, here roughly say the following steps:

    1. Upload the Linux image file to the Linux operating system on the development board

    2. Then use balenaEtcher to burn

       

    3. There is no need to manually expand the capacity after burning the image using this method. The first startup will automatically expand the capacity.

Method of burning Android image to TF card

Method of burning Android image to TF card through USB2.0 burning port

  1. First prepare an 8GB or larger capacity TF card, TF card transmission speed must be class10 or above, it is recommended to use Sandisk and other brands of TF card

  2. Also need to prepare a good quality USB2.0 public to public data cable

     

  3. Then download the Rockchip DriverAssitant_v5.12.zip and the burning tool RKDevTool_Release_v3.15.zip from Orange Pi's data download page

    1. On the Orange Pi's Data download page, first select the official tool and then go to the following folder

       

    2. Then download all the files below

       

  4. Then download the Android image from Orange Pi's Data download page.

    1. After opening the download link of Android image, you can see the following two types of Android image. Please select TF card and eMMC image folder to start the image download

       

    2. After entering the TF card and eMMC to start the image folder, you can see the following two images, their differences are:

      1. The first image is dedicated to HDMI display and supports 4K display, if you do not use LCD screen, please download the image without lcd

      2. If you want to use an lcd screen, select an image with lcd

         

  5. Then use the decompression software to decompress the compressed package of the downloaded Android image. In the decompressed file, the file ending with ".img "is the Android image file, the size of which is more than 1GB

  6. Then use the decompression software to decompress DriverAssitant_v5.12.zip, and then find the DriverInstall.exe executable file in the decompressed folder and open it

     

  7. Open DriverInstall.exe and install the SWick micro driver as follows

    1. Click the "Driver Installation" button

       

    2. Wait for a period of time, the pop-up window will prompt "Driver installation successful", and then click the "OK" button

       

  8. Then decompress RKDevTool_Release_v3.15.zip, this software does not need to be installed, find RKDevTool in the decompressed folder and open it

     

  9. After opening the RKDevTool burning tool, because the computer has not connected to the development board through the USB2.0 public-to-public data cable at this time, the lower left corner will display "No device found".

     

  10. Then start burning Android image to TF card

    1. First, connect the development board to the Windows computer through the USB2.0 male-to-public data cable. The position of the USB2.0 burning interface on the development board is shown in the figure below

       

    2. Then make sure that no TF card is inserted into the development board and no power is connected

    3. Then press and hold the MaskROM button on the development board. The position of the MaskROM button on the development board is shown as follows:

       

    4. Connect the development board to the Type-C port, and power on the development board

       

    5. If the previous steps are smooth, the development board will enter MASKROM mode at this time, and the interface of the burning tool will prompt "Found a MASKROM device".

       

    6. Then insert the TF card into the development board

    7. Then select Advanced features

       

    8. Then click on the location shown in the image below

       

    9. Select MiniLoaderAll.bin from the MiniLoader folder downloaded earlier and click Open

       

    10. Then click Download

       

    11. The following figure is displayed after MiniLoaderAll.bin is downloaded

       

    12. Then select the storage device as SD and click Switch storage

       

    13. If the switchover is successful, the following figure is displayed

       

    14. Then click on the "Upgrade Firmware" section of the burning tool

       

    15. Then click the "Firmware" button to select the path of the Android image that you want to burn

       

    16. Finally, click the "Upgrade" button to start burning. The log in the burning process is shown below. The Android system will start automatically after the burning is complete.

    17.  

Method of burning Android image into eMMC

Method of burning Android image into eMMC through USB2.0 burning port

Note that all operations below are performed on a Windows computer.

  1. First you need to prepare a good quality USB2.0 male-to-male data cable

     

  2. Then download Rockchip driver DriverAssitant_v5.12.zip and burning tool RKDevTool_Release_v3.15.zip from Orange Pi's data download page

  3. Then download the Android image from the Orange Pi download page.

    1. After opening the download link of the Android image, you can see the following two types of Android images. Please select the image in the TF card and eMMC boot image folder to download.

       

    2. After entering the TF card and eMMC boot image folders, you can see the following two images. The difference between them is:

      1. The first image is dedicated to HDMI display and supports 4K display. If you don’t use LCD screen, please download the image without lcd

      2. If you want to use an LCD screen, please choose the image with LCD

         

  4. Then use decompression software to decompress the compressed package of the downloaded Android image. In the decompressed file, the file ending with ".img" is the Android image file, with a size of more than 1GB.

  5. Then use decompression software to decompress DriverAssitant_v5.12.zip, then find the DriverInstall.exe executable file in the decompressed folder and open it.

     

  6. Open DriverInstall.exe and install the Rockchip microdriver as follows

    1. Click the "Driver Installation" button

       

    2. After waiting for a period of time, a window will pop up prompting "Driver installation successful", then click the "OK" button.

       

  7. Then unzip RKDevTool_Release_v3.15.zip. This software does not need to be installed. Just find RKDevTool in the unzipped folder and open it.

     

  8. After opening the RKDevTool burning tool, because the computer has not connected to the development board through the USB2.0 male-to-male data cable at this time, the lower left corner will prompt "No device found"

     

  9. Then start burning the Android image into eMMC

    1. First, connect the development board to the Windows computer through a USB2.0 male-to-male data cable. The location of the development board’s USB2.0 burning interface is as shown in the figure below.

       

    2. Then make sure that the development board is not inserted into the TF card and not connected to the power supply

    3. Then press and hold the MaskROM button on the development board, the position of the MaskROM button on the development board is shown in the figure below:

       

    4. Then connect the development board to the power supply of the Type-C interface and power on

       

    5. If the previous steps are successful, the development board will enter the MASKROM mode at this time, and the interface of the burning tool will prompt "found a MASKROM device"

       

    6. Then please select advanced functions

       

    7. Then click the position shown in the figure below

       

    8. Then select MiniLoaderAll.bin in the MiniLoader folder downloaded earlier, and then click Open

       

    9. Then click Download

       

    10. The display after downloading MiniLoaderAll.bin is shown in the figure below

       

    11. Then select the storage device as EMMC, and then click Switch Storage

       

    12. The successful switching is displayed as shown below

       

    13. Then click the "Upgrade Firmware" column of the burning tool

       

    14. Then click the "Firmware" button to select the path of the Android image that needs to be burned.

       

    15. Finally, click the "Upgrade" button to start burning. The log during the burning process is as shown below. After burning is completed, the Android system will start automatically.

       

How to burn the Android11 image into EMMC through the TF card

Note that all of the following operations are performed in Windows computers.

  1. It is also necessary to prepare a 8GB or larger TF card. The transmission speed of the TF card must be class10 or more. It is recommended to use TF cards from brands such as SanDisk.

  2. Then use the card reader to insert the TF card into the computer

  3. Then download the SDDiskTool burn tool from Orange PI's data download page, please make sure that the version of the SDDiskTool tool is the latest V1.72

  4. Then download the image of Android from Orange Pi's data download page

    1. After turning on the download link of the Android image, you can see the two types of Android images below. Please select the image in the TF card and EMMC startup image folder for download

       

    2. After entering the TF card and EMMC startup image folder, you can see the following two mirrors. The difference between them is:

      1. a) The first image is specifically used for HDMI display. It supports 4K display. If you do not use the LCD screen, download the image without LCD

      2. b) If you want to use the LCD screen, select the image with LCD

         

  5. Then use the decompression software to decompress the downloaded Android image compressed package. In the files that are decompressed, the file ending with ".img" is the Android image file with a memory of more than 1GB

  6. Then use the decompression software to decompress the SDDiskTool_v1.72.zip. This software does not need to be installed. Find the SD_Firmware_Tool.exe in the unzipped folder and open it.

     

  7. After opening SDDiskTool, if the TF card is recognized normally, the inserted disk device will be displayed in the "Select Removable Disk Device" column. Please make sure that the displayed disk device is consistent with the drive letter of the TF card you want to burn. If there is no display, you can try to unplug the TF card

     

  8. After confirming the drive letter, you can format the TF card first and click the Recover Disk button in SDDiskTool. You can also use the SD Card Formatter mentioned earlier to format the TF card

     

  9. Then start writing the Android image to the TF card

    1. First confirm that the displayed drive letter is the drive letter corresponding to the TF card under "Select Removable Disk Device"

    2. Then select "Firmware Upgrade" in "Select Function Mode"

    3. Then select the path of the Android firmware in the "Select Upgrade Firmware" column

    4. Finally, click the "Start Creating" button to start burning.

       

  10. After the burning is completed, the display is as shown below, and then you can exit SDDiskTool

     

  11. Then pull out the TF card from the computer and insert it into the development board. After the development board is powered on, it will automatically start burning the Android image in the TF card into the eMMC of the development board.

  12. If the development board is connected to an HDMI display, you can also see the progress bar of burning the Android image to eMMC from the HDMI display

     

  13. When the HDMI monitor displays the following information, it means that the burning of the Android image into the eMMC has been completed. At this time, the TF card can be pulled out, and then the Android system in the eMMC will start.

     

How to burn Android image to SPIFlash+NVMe SSD

Before starting to burn the image, you must make sure that the development board has been pasted with the SPI Flash chip, because the development board is not pasted with the SPI Flash chip when it leaves the factory, so it needs to be purchased and soldered on by yourself. The SPI Flash chip model we recommend is XM25QU128CWIQT08Q

Since the startup priority of eMMC is higher than that of NVMe SSD, the system of eMMC needs to be cleared before burning the image. For the method of clearing eMMC, please refer to the instructions in the section "How to Clear eMMC Using RKDevTool"

Note that all the following operations are performed on a Windows computer

  1. First you need to prepare an NVMe SSD solid state drive

    1. The M.2 2230 SSD is as follows

       

    2. The M.2 2242 specification SSD is as follows

       

  2. Then insert the NVMe SSD into the M.2 PCIe interface of the development board and fix it

     

  3. Please make sure that the SPI Flash has been attached to the development board. The location of the SPI Flash on the development board is as shown in the picture below. No other settings are required before starting burning

     

  4. You also need to prepare a good quality USB2.0 male-to-male data cable

     

  5. Then download the Rockchip microdriver DriverAssitant_v5.12.zip and the burning tool RKDevTool_Release_v3.15.zip from the Orange Pi data download page.

  6. Then download the image of Android11

    1. After opening the download link of the Android image, you can see the following two types of Android images. Please select the image in the SPIFlash-NVME SSD boot image folder to download

       

    2. After entering the SPIFlash-NVME SSD boot image folder, you can see the following two images. The difference between them is:

      1. a) The image without lcd is specially used for HDMI display and supports 4K display. If you don’t use the LCD screen, please download the image without lcd

      2. b) If you want to use an LCD screen, please choose the image with lcd

         

  7. Then use decompression software to decompress DriverAssitant_v5.12.zip, then find the DriverInstall.exe executable file in the decompressed folder and open it.

     

  8. The steps to install the Rockchip driver after opening DriverInstall.exe are as follows

    1. Click the "Driver Installation" button

       

    2. After waiting for a period of time, a window will pop up prompting "Driver installation successful", then click the "OK" button

       

  9. Then unzip RKDevTool_Release_v3.15.zip. This software does not need to be installed. Just find RKDevTool in the unzipped folder and open it

     

  10. After opening the RKDevTool burning tool, because the computer has not yet connected to the development board through the USB2.0 male-to-male data cable, a message "No device found" will appear in the lower left corner.

     

  11. Then start burning the Android image to SPIFlash+NVMe SSD

    1. First, connect the development board to the Windows computer through a USB2.0 male-to-male data cable. The location of the USB2.0 programming port on the development board is as shown in the figure below.

       

    2. Make sure that the development board is not inserted into the TF card and not connected to the power supply

    3. Then press and hold the MaskROM button on the development board. The location of the MaskROM button on the development board is as shown in the figure below:

       

    4. Then connect the development board to the power supply of the Type-C interface, power it on, and then release the MaskROM button

       

    5. If the previous steps are successful, the development board will enter the MASKROM mode at this time, and the interface of the burning tool will prompt "Found a MASKROM device "

       

    6. Then click the "Upgrade Firmware" column of the burning tool

       

    7. Then click the "Firmware" button to select the Android image that needs to be burned

       

    8. Finally, click the "Upgrade" button to start burning. The burning process is shown in the figure below. You can see that the firmware will be burned into SPIFlash first, and then burned into PCIE. The Android system will start automatically after burning.

       

How to clear SPIFlash using RKDevTool

There is no SPI Flash chip on the development board when it leaves the factory, so it needs to be pasted by yourself. The model of the SPI Flash chip we recommend is XM25QU128CWIQT08Q

  1. The location of SPI Flash on the development board is shown in the figure below

     

  2. First of all, you need to prepare a good quality USB2.0 male-to-male data cable

     

  3. Then download the Rockchip driver DriverAssitant_v5.12.zi and MiniLoade and the burning tool RKDevTool_Release_v3.15.zip from the Orange Pi data download page

    1. On the Orange Pi data download page, first select the official tool, and then enter the folder below

       

    2. Then download all the files below

       

      Note that the "MiniLoader-things needed to burn Linux images" folder will be referred to as the MiniLoader folder below

  4. Then use decompression software to decompress DriverAssitant_v5.12.zip, then find the DriverInstall.exe executable file in the decompressed folder and open it

     

  5. The steps to install the Rockchip driver after opening DriverInstall.exe are as follows

    1. Click the "Driver Installation" button

       

    2. After waiting for a period of time, a pop-up window will prompt "Driver installed successfully", and then click the "OK" button.

       

  6. Then unzip RKDevTool_Release_v3.15.zip. This software does not need to be installed. Just find RKDevTool in the unzipped folder and open it.

     

  7. After opening the RKDevToolburning tool, because the computer has not yet connected to the development board through the USB2.0 male-to-male data cable, a message "No device found" will appear in the lower left corner.

     

  8. Then you can start to clear the contents of the SPI FLASH

    1. First, connect the development board to the Windows computer through a USB2.0 male-to-male data cable. The location of the USB2.0 programming port on the development board is as shown in the figure below.

       

    2. Make sure that the development board is not inserted into the TF card and not connected to the power supply

    3. Then press and hold the MaskROM button on the development board. The location of the MaskROM button on the development board is as shown in the figure below:

       

    4. Then connect the development board to the power supply of the Type-C interface, power it on, and then release the MaskROM button.

       

    5. If the previous steps are successful, the development board will enter the MASKROM mode at this time, and the interface of the burning tool will prompt "found a MASKROM device"

       

    6. Then please select advanced functions

       

    7. Then click the position shown in the figure below

       

    8. Then select MiniLoaderAll.bin in the MiniLoader folder downloaded earlier, and then click Open

       

    9. Then click Download

       

    10. The display after downloading MiniLoaderAll.bin is shown in the figure below

       

    11. Then select the storage device as SPINOR

       

    12. Then click switch storage

       

    13. Then click Erase All and it will start erasing SPIFlash.

       

    14. The display log after erasing SPIFlash is shown in the figure below

       

How to clear eMMC using RKDevTool

  1. First you need to prepare a good quality USB2.0 male-to-male data cable

     

  2. Then download the Rockchip microdriver DriverAssitant_v5.12.zip and MiniLoader and the burning tool RKDevTool_Release_v3.15.zip from the Orange Pi data download page

    1. On the Orange Pi data download page, first select the official tool, and then enter the folder below

       

    2. Then download all the files below

       

      Note that the "MiniLoader-things needed to burn the Linux image" folder is hereinafter referred to as the MiniLoader folder.

  3. Then use the decompression software to decompress DriverAssitant_v5.12.zip, and then find the DriverInstall.exe executable file in the decompressed folder and open it

     

  4. After opening DriverInstall.exe, the steps to install the Rockchip driver are as follows

    1. Click the "Driver Installation" button

       

    2. After waiting for a period of time, a window will pop up prompting "Driver installation successful", then click the "OK" button.

       

  5. Then unzip RKDevTool_Release_v3.15.zip. This software does not need to be installed. Just find RKDevTool in the unzipped folder and open it.

     

  6. After opening the RKDevTool burning tool, because the computer has not connected to the development board through the USB2.0 male-to-male data cable at this time, the lower left corner will prompt "No device found"

     

  7. Then you can start to clear the content in eMMC

    1. First, connect the development board to the Windows computer through a USB2.0 male-to-male data cable. The location of the USB2.0 programming port on the development board is as shown in the figure below.

       

    2. Make sure that the development board is not inserted into the TF card and not connected to the power supply

    3. Then press and hold the MaskROM button on the development board. The location of the MaskROM button on the development board is as shown in the figure below:

       

    4. Then connect the development board to the power supply of the Type-C interface, power it on, and then release the MaskROM button

       

    5. If the previous steps are successful, the development board will enter the MASKROM mode at this time, and the interface of the burning tool will prompt "found a MASKROM device"

       

    6. Then please select advanced functions

       

    7. Then click the position shown in the figure below

       

    8. Then select MiniLoaderAll.bin in the MiniLoader folder downloaded earlier, and then click Open

       

    9. Then click Download

       

    10. The display after downloading MiniLoaderAll.bin is shown in the figure below

       

    11. Then select the storage device as eMMC

       

    12. Then click switch storage

       

    13. Then click Erase All to start erasing the eMMC.

       

    14. The display log after erasing eMMC is as shown below

       

Boot the Orange Pi development board

  1. First install the Orange Pi CM4 core board on the base board

     

  2. Then insert the TF card with the burned image into the TF card slot of the Orange Pi development board.

  3. The development board has a Micro HDMI interface, and the development board can be connected to a TV or HDMI display through a Micro HDMI to HDMI cable. If you have purchased an LCD screen, you can also use the LCD screen to display the system interface of the development board

  4. Connect a USB mouse and keyboard to control the Orange Pi development board

  5. The development board has an Ethernet port, which can be plugged into a network cable to access the Internet

  6. Connect a high-quality power adapter with a 5V/3A USB Type-C interface.

    Remember not to plug in a power adapter with a voltage output greater than 5V, it will burn out the development board.


    Many unstable phenomena during system power-on and startup are basically caused by power supply problems, so a reliable power adapter is very important. If you find that you are constantly restarting during the startup process, please replace the power supply or Type-C data cable and try again.


    Type-C power interface does not support PD negotiation.


    In addition, please do not connect to the USB interface of the computer to power the development board.

  1. Then turn on the switch of the power adapter. If everything is normal, you can see the startup screen of the system on the HDMI monitor or LCD screen.

  2. If you want to view the output information of the system through the debugging serial port, please use the serial port cable to connect the development board to the computer. For the connection method of the serial port, please refer to the section on how to use the debugging serial port

How to use the debugging serial port

Connection instruction of debugging serial port

  1. First, you need to prepare a 3.3VUSB to TTL module, and then insert the USB interface end of the USB to TTL module into the USB interface of the computer.

For better compatibility, it is recommended to use CH340 USB to TTL module, please do not use CP2102, PL2303 type USB to TTL module.

Before purchasing a USB to TTL module, please confirm that the module supports a baud rate of 1500000.

 
  1. The corresponding relationship between the GND, RXD and TXD pins of the development board’s debugging serial port is as shown in the figure below

     

  2. The GND, TXD and RXD pins of the USB to TTL module need to be connected to the debugging serial port of the development board through Dupont lines

    1. Connect the GND of the USB to TTL module to the GND of the development board

    2. The RX of the USB to TTL module is connected to the TX of the development board

    3. The TX of the USB to TTL module is connected to the RX of the development board

  3. The schematic diagram of connecting the USB to TTL module to the computer and Orange Pi development board is as shown below

     

    The TX and RX of the serial port need to be cross-connected. If you don’t want to carefully distinguish the order of TX and RX, you can connect the TX and RX of the serial port casually. If there is no output in the test, then exchange the order of TX and RX, so that there is always a The order is correct

How to use the debugging serial port on Ubuntu platform

There are many serial port debugging software that can be used under Linux, such as putty, minicom, etc. The following demonstrates how to use putty.

  1. First insert the USB to TTL module into the USB interface of the Ubuntu computer. If the USB to TTL module is connected and recognized normally, you can see the corresponding device node name under /dev of the Ubuntu PC. Remember this node name and set the serial port later. software will be used.

    test@test:~$ ls /dev/ttyUSB*

    /dev/ttyUSB0

  2. Then use the following command to install putty on Ubuntu PC

    test@test:~$ sudo apt-get update

    test@test:~$ sudo apt-get install -y putty

  3. Then run putty, remember to add sudo permissions

    test@test:~$ sudo putty

  4. After executing the putty command, the following interface will pop up

     

  5. First select the serial port setting interface

     

  6. Then set the parameters of the serial port

    1. Set the Serial line to connect to to /dev/ttyUSB0 (modify to the corresponding node name, usually /dev/ttyUSB0)

    2. Set Speed(baud) to 1500000 (the baud rate of the serial port)

    3. Set Flow control to None

       

  7. After setting up the serial port setting interface, return to the Session interface.

    1. First select the Connection type as Serial

    2. Then click theOpen button to connect to the serial port

       

  8. After starting the development board, you can see the Log information output by the system from the open serial terminal.

     

How to use the debugging serial port on Windows platform

There are many serial port debugging software that can be used under Windows, such as SecureCRT, MobaXterm, etc. The following demonstrates how to use MobaXterm. This software has a free version and can be used without buying a serial number.

  1. Download MobaXterm

    1. Download MobaXterm website as follows

      https://mobaxterm.mobatek.net

    2. After entering the MobaXterm download page, click GET XOBATERM NOW!

       

    3. Then choose to download the Home version

       

    4. Then select the Portable version. There is no need to install it after downloading. You can open it directly and use it.

       

  2. After downloading, use decompression software to decompress the downloaded compressed package to get the MobaXterm executable software, and then double-click to open it.

     

  3. After opening the software, the steps to set up the serial port connection are as follows

    1. Open the session settings interface

    2. Select the serial port type

    3. Select the port number of the serial port (select the corresponding port number according to the actual situation). If you cannot see the port number, please use 360 Driver Master to scan and install the driver for the USB to TTL serial port chip.

    4. Select the baud rate of the serial port to be 1500000

    5. Finally click the "OK" button to complete the setup

    6.  

  1. After clicking the "OK" button, you will enter the following interface. At this time, you can see the output information of the serial port

     

Instructions for using the 5v pin in the 40pin interface of the development board to supply power

The power supply method we recommend for the development board is to use the 5V/3A Type C interface power cord to plug into the Type-C power interface of the development board. If you need to use the 5V pin in the 40-pin interface to power the development board, please ensure that the power cord and power adapter used can meet the power supply requirements of the development board. If the use is unstable, please switch to Type-C power supply.

  1. First you need to prepare a power cord as shown in the picture below

     

    The power cord shown in the figure above can be bought on Taobao, please search for purchase by yourself.

  2. Use the 5V pin in the 40pin interface to power the development board. The power cord connection is as follows

    1. The USB A port of the power cord shown in the picture above needs to be plugged into the 5V/3A power adapter connector.(Please do not plug it into the USB port of your computer for power supply

    2. The red DuPont line needs to be plugged into the 5V pin of the development board 40pin

    3. The black DuPont wire needs to be plugged into the GND pin of the 40pin interface

    4. The position of the 40Pin interface 5V pin and GND pin in the development board is shown in the figure below, Remember not to reverse

       

Ubuntu/Debian Server and Xfce desktop system instructions

The content of this chapter is written based on the Linux server version image and the xfce desktop version image.

Supported Linux image types and kernel versions

Linux image type Kernel version server version desktop version
Debian 11 - Bullseye Linux5.10 support support
Debian12 - Bookworm Linux5.10 support support
Ubuntu 20.04 - Focal Linux5.10 support support
Ubuntu 22.04 - Jammy Linux5.10 support support

Linux system adaptation situation

Function Debian11 Debian12 Ubuntu20.04 Ubuntu22.04
USB2.0x3 OK OK OK OK
USB3.0x1 OK OK OK OK
M.2 NVMe SSD Boot OK, you need to attach SPI Flash to it for normal use.
WIFI OK OK OK OK
Bluetooth OK OK OK OK
GPIO(40pin) OK OK OK OK
UART(40pin) OK OK OK OK
SPI(40pin) OK OK OK OK
I2C(40pin) OK OK OK OK
PWM(40pin) OK OK OK OK
PWM fan interface OK OK OK OK
3pin debugging serial port OK OK OK OK
EMMC OK OK OK OK
TF card startup OK OK OK OK
HDMI video OK OK OK OK
HDMI audio OK OK OK OK
OV5647 camera Kernel driver is OK, 3A is not adjusted
LCD OK OK OK OK
eDP display OK OK OK OK
Gigabit Ethernet port OK OK OK OK
Network port status light OK OK OK OK
Headphone playback OK OK OK OK
headphone recording OK OK OK OK
LED light OK OK OK OK
GPU OK OK OK OK
NPU OK OK OK OK
VPU OK OK OK OK
watchdog test OK OK OK OK
Chromium hard decryption video OK OK OK OK

Linux command format description in this manual

  1. All commands that need to be entered in the Linux system in this manual will be enclosed in the following boxes

    As shown below, the content in the yellow box indicates the content that needs special attention, except for the commands in it

  2. Description of the prompt type in front of the command

    1. The prompt in front of the command refers to the content of the red part in the box below. This part of the content is not part of the Linux command, so when entering the command in the Linux system, please do not enter the content of the red font part.

      orangepi@orangepi:~$ sudo apt update

      root@orangepi:~# vim /boot/boot.cmd

      test@test:~$ ssh root@192.168.1.xxx

      root@test:~# ls

    2. root@orangepi:~$ The prompt indicates that this command is entered in the Linux system of the development board. The $ at the end of the prompt indicates that the current user of the system is an ordinary user. When executing a privileged command, sudo needs to be added.

    3. root@orangepi:~# The prompt indicates that this command is entered in the Linux system of the development board, and the # at the end of the prompt indicates that the current user of the system is the root user, who can execute any desired command

    4. test@test:~$ The prompt indicates that the command was entered in the Ubuntu PC or Ubuntu virtual machine, not the Linux system of the development board. The $ at the end of the prompt indicates that the current user of the system is an ordinary user. When executing privileged commands, sudo needs to be added.

    5. root@test:~# The prompt indicates that the command was entered in the Ubuntu PC or Ubuntu virtual machine, not the Linux system of the development board. The # at the end of the prompt indicates that the current user of the system is the root user and can execute any command you want to execute.

  3. What are the commands that need to be entered?

    1. As shown below, the bold black part is the command that needs to be input. The content below the command is the output content (some commands have output, and some may not output). This part of the content does not need to be input

      root@orangepi:~# cat /boot/orangepiEnv.txt

      verbosity=7

      bootlogo=false

      console=serial

    2. As shown below, some commands cannot be written in one line and will be placed on the next line. As long as the black and bold parts are all commands that need to be input. When these commands are entered into one line, the last "\" of each line needs to be removed, this is not part of the command. In addition, there are spaces in different parts of the command, please don't miss it

      orangepi@orangepi:~$ echo \

      "deb [arch=$(dpkg --print-architecture) \

      signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \

      https://download.docker.com/linux/debian \

      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Linux system login instructions

Linux system default login account and password

account password
root orangepi
orangepi orangepi

Note that when entering a password, the specific content of the entered password will not be displayed on the screen. Please do not think that there is something wrong. Just press Enter after entering it.

When you are prompted for an incorrect password or there is a problem with the ssh connection, please note that as long as you are using the Linux image provided by Orange Pi, please do not suspect that the above password is incorrect, but look for other reasons.

How to set up automatic login of Linux system terminal

  1. The Linux system automatically logs in to the terminal by default. The default login user name is orangepi.

     

  2. Use the following command to set the root user to automatically log in to the terminal

    orangepi@orangepi:~$ sudo auto_login_cli.sh root

  3. Use the following command to disable automatic login to the terminal

    orangepi@orangepi:~$ sudo auto_login_cli.sh -d

  4. Use the following command to set the orangepi user to automatically log in to the terminal again

    orangepi@orangepi:~$ sudo auto_login_cli.sh orangepi

Instructions for automatic login of the Linux desktop version system

  1. The desktop version system will automatically log in to the desktop after startup without entering a password.

     

  2. Run the following command to prevent the desktop system from automatically logging into the desktop

    orangepi@orangepi:~$ sudo disable_desktop_autologin.sh

  3. Then restart the system and a login dialog box will appear. At this time, you need to enter a password to enter the system

     

The setting method of root user automatic login in Linux desktop version system

  1. Execute the following command to set the desktop version of the system to automatically log in using the root user

    orangepi@orangepi:~$ sudo desktop_login.sh root

  2. Then restart the system, it will automatically use the root user to log in to the desktop

     

    Note that if you use the root user to log in to the desktop system, you cannot use pulseaudio in the upper right corner to manage audio devices.

    Also note that this is not a bug, since pulseaudio is not allowed to run as root.

  3. Execute the following command to set up the desktop version of the system again to use orangepi user to automatically log in

    orangepi@orangepi:~$ sudo desktop_login.sh orangepi

How to disable the desktop in Linux desktop system

  1. First enter the following command in the command line, please remember to add sudo permission

    orangepi@orangepi:~$ sudo systemctl disable lightdm.service

  2. Then restart the Linux system and you will find that the desktop will not be displayed.

    orangepi@orangepi:~$ sudo reboot

  3. The steps to reopen the desktop are as follows:

    1. First enter the following command in the command line, please remember to add sudo permission

      orangepi@orangepi:~$ sudo systemctl start lightdm.service

    2. After the command is executed, the desktop will be displayed

Onboard LED light test instructions

  1. There are three LED lights on the development board, one green light, one red light, and one PCIe light. The location is shown in the figure below:

     

  2. As long as the development board is powered on, the red LED light will always be on, which is controlled by the hardware and cannot be turned off by the software

  3. The green LED light will keep flashing after the kernel is started, which is controlled by software

  4. The PCIe indicator light will flash when there is data transmission on the PCIe interface.

  5. The method of setting the green light to turn on and off and flash is as follows

    Note that the following operations should be performed under the root user

    1. First enter the setting directory of the green light

      root@orangepi:~# cd /sys/class/leds/status_led

    2. The command to set the green light to stop flashing is as follows:

      root@orangepi:/sys/class/leds/status_led# echo none trigger

    3. The command to set the green light to be always on is as follows:

      root@orangepi:/sys/class/leds/status_led# echo default-on trigger

    4. The command to set the green light flashing is as follows:

      root@orangepi:/sys/class/leds/status_led# echo heartbeat trigger

Network connection test

Ethernet port test

  1. First, plug one end of the network cable into the Ethernet interface of the development board, and the other end of the network cable into the router, and make sure the network is open.

  2. After the system starts, it will automatically assign an IP address to the Ethernet card through DHCP, No other configuration is required

  3. The command to view the IP address in the Linux system of the development board is as follows

    orangepi@orangepi:~$ ip addr show eth0

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

    link/ether 4a:fe:2b:3d:17:1c brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.150/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0

    valid_lft 43150sec preferred_lft 43150sec

    inet6 fe80::9a04:3703:faed:23be/64 scope link noprefixroute

    valid_lft forever preferred_lft forever

    When using ifconfig to check the IP address, if the following information is prompted, it is caused by not adding sudo. The correct command is: sudo ifconfig


    orangepi@orangepi:~$ ifconfig

    Command 'ifconfig' is available in the following places

    * /sbin/ifconfig

    * /usr/sbin/ifconfig

    The command could not be located because '/sbin:/usr/sbin' is not included in the PATH environment variable.

    This is most likely caused by the lack of administrative privileges associated with your user account.

    ifconfig: command not found

    There are three ways to check the IP address after the development board is started.:

    1. Connect the HDMI display, then log in to the system and use the ip addr show eth0 command to view the IP address.

    2. Enter the ip addr show eth0 command in the debugging serial terminal to view the IP address.

    3. If there is no debugging serial port and no HDMI display, you can also check the IP address of the development board network port through the management interface of the router. However, in this method, some people often cannot see the IP address of the development board normally. If you can't see it, the debugging method is as follows:

    1. First, check whether the Linux system has started normally. If the green light of the development board is flashing, it usually means that it has started normally. If only the red light is on, it means that the system has not started normally.;

    2. Check whether the network cable is plugged in tightly, or try another network cable;

    3. Try another router (I have encountered many problems with routers, such as the router being unable to assign an IP address normally, or the IP address being assigned normally but not visible in the router);

    4. If there is no router to replace, you can only connect an HDMI display or use the debugging serial port to check the IP address.


    In addition, it should be noted that the development board's DHCP automatic allocation of IP addresses does not require any settings.

  1. The command to test the network connectivity is as follows, the ping command can be interrupted through the shortcut key of Ctrl+C

    orangepi@orangepi:~$ ping www.baidu.com -I eth0

    PING www.a.shifen.com (14.215.177.38) from 192.168.1.12 eth0: 56(84) bytes of data.

    64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=56 time=6.74 ms

    64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=56 time=6.80 ms

    64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=56 time=6.26 ms

    64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=56 time=7.27 ms

    ^C

    --- www.a.shifen.com ping statistics ---

    4 packets transmitted, 4 received, 0% packet loss, time 3002ms

    rtt min/avg/max/mdev = 6.260/6.770/7.275/0.373 ms

WIFI connection test

Please do not connect to WIFI by modifying the /etc/network/interfaces configuration file. There will be problems in connecting to the WIFI network in this way.

The server image connects to WIFI through commands

When the development board is not connected to Ethernet, not connected to HDMI display, but only connected to the serial port, it is recommended to use the commands demonstrated in this section to connect to the WIFI network. Because nmtui can only display characters in some serial port software (such as minicom) and cannot display the graphical interface normally. Of course, if the development board is connected to an Ethernet or HDMI display, you can also use the commands demonstrated in this section to connect to the WIFI network.

  1. First log in to the Linux system, there are three ways:

    1. If the development board is connected with a network cable, you can remotely log in to the Linux system through ssh
    1. If the development board is connected to the debugging serial port, you can use the serial port terminal to log in to the Linux system

    2. If the development board is connected to the HDMI display, you can log in to the Linux system through the terminal displayed on the HDMI

  1. First use the nmcli dev wifi command to scan the surrounding WIFI hotspots

    orangepi@orangepi:~$ nmcli dev wifi

     

  2. Then use the nmcli command to connect to the scanned WIFI hotspot,

    1. wifi_name needs to be replaced with the name of the WIFI hotspot you want to connect to

    2. wifi_passwd needs to be replaced with the password of the WIFI hotspot you want to connect to

      orangepi@orangepi:~$ nmcli dev wifi connect wifi_name password wifi_passwd

      Device 'wlan0' successfully activated with 'cf937f88-ca1e-4411-bb50-61f402eef293'.

  3. You can check the IP address of the wifi through the ip addr show wlan0 command

    orangepi@orangepi:~$ ip addr show wlan0

    11: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 23:8c:d6:ae:76:bb brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.11/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0

    valid_lft 259192sec preferred_lft 259192sec

    inet6 240e:3b7:3240:c3a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute

    valid_lft 259192sec preferred_lft 172792sec

    inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute

    valid_lft forever preferred_lft forever

  4. Use the ping command to test the connectivity of the wifi network, and the ping command can be interrupted through the shortcut key Ctrl+C

    orangepi@orangepi:~$ ping www.orangepi.org -I wlan0

    PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.

    64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=1 ttl=52 time=43.5 ms

    64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=2 ttl=52 time=41.3 ms

    64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=3 ttl=52 time=44.9 ms

    64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=4 ttl=52 time=45.6 ms

    64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=5 ttl=52 time=48.8 ms

    ^C

    --- www.orangepi.org ping statistics ---

    5 packets transmitted, 5 received, 0% packet loss, time 4006ms

    rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms

Server version image connects to WIFI graphically

  1. First log in to the Linux system, there are three ways:

    1. If the development board is connected with a network cable, you can remotely log in to the Linux system through ssh

    2. If the development board is connected to the debugging serial port, you can use the serial port terminal to log in to the Linux system (please use MobaXterm for the serial port software, the graphical interface cannot be displayed using minicom)

    3. If the development board is connected to the HDMI display, you can log in to the Linux system through the terminal displayed on the HDMI

  2. Then enter the nmtui command in the command line to open the wifi connection interface

    orangepi@orangepi:~$ nmtui

  3. Enter the nmtui command to open the interface as shown below

     

  4. Select Activate a connect and press Enter

     

  5. Then you can see all the searched WIFI hotspots

     

  6. Select the WIFI hotspot you want to connect to, then use the Tab key to position the cursor on Activate and press Enter

     

  7. Then a dialog box for entering the password will pop up. Enter the corresponding Password in Password and press Enter to start connecting to WIFI.

     

  8. After the WIFI connection is successful, a "*" will be displayed in front of the connected WIFI name.

     

  9. You can check the IP address of the wifi through the ip addr show wlan0 command

    orangepi@orangepi:~$ ip addr show wlan0

    11: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 24:8c:d3:aa:76:bb brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.11/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0

    valid_lft 259069sec preferred_lft 259069sec

    inet6 240e:3b7:3240:c4a0:c401:a445:5002:ccdd/64 scope global dynamic noprefixroute

    valid_lft 259071sec preferred_lft 172671sec

    inet6 fe80::42f1:6019:a80e:4c31/64 scope link noprefixroute

    valid_lft forever preferred_lft forever

  10. Use the ping command to test the connectivity of the wifi network. The ping command can be interrupted by pressing the Ctrl+C shortcut key

    orangepi@orangepi:~$ ping www.orangepi.org -I wlan0

    PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.

    64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=1 ttl=52 time=43.5 ms

    64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=2 ttl=52 time=41.3 ms

    64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=3 ttl=52 time=44.9 ms

    64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=4 ttl=52 time=45.6 ms

    64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=5 ttl=52 time=48.8 ms

    ^C

    --- www.orangepi.org ping statistics ---

    5 packets transmitted, 5 received, 0% packet loss, time 4006ms

    rtt min/avg/max/mdev = 41.321/44.864/48.834/2.484 ms

Test method of desktop image

  1. Click the network configuration icon in the upper right corner of the desktop (please do not connect the network cable when testing WIFI)

     

  2. Click More networks in the pop-up drop-down box to see all scanned WIFI hotspots, and then select the WIFI hotspot you want to connect to.

     

  3. Then enter the password of the WIFI hotspot, and then click Connect to start connecting to WIFI

     

  4. After connecting to WIFI, you can open the browser to check whether you can access the Internet. The entrance of the browser is shown in the figure below

     

  5. If you can open other web pages after opening the browser, it means the WIFI connection is normal

     

How to set a static IP address

Please do not set a static IP address by modifying the /etc/network/interfaces configuration file

Use the nmtui command to set a static IP address

  1. First run the nmtui command

    orangepi@orangepi:~$ nmtui

  2. Then select Edit a connection and press Enter

     

  3. Then select the network interface for which a static IP address needs to be set. For example, to set the static IP address of the Ethernet interface, select Wired connection 1.

     

  4. Then select Edit via the Tab key and press the Enter key

     

  5. Then use the Tab key to move the cursor to the<Automatic> position shown in the figure below to configure IPv4

     

  6. Then press Enter, select Manual through the up and down arrow keys, and then press Enter to confirm.

     

  7. The display after selection is as shown below

     

  8. Then move the cursor to <Show> via the Tab key

     

  9. Then press Enter. After pressing Enter, the following setting interface will pop up.

     

  10. Then you can set the IP address (Addresses), gateway (Gateway) and DNS server address as shown in the figure below (there are many other setting options, please explore by yourself),Please set it according to your specific needs. The value set in the picture below is just an example.

     

  11. After setting, move the cursor to <OK> in the lower right corner, and then press Enter to confirm.

     

  12. Then click <Back> to return to the previous level selection interface

     

  13. Then select Activate a connection, then move the cursor to <OK>, and finally click Enter

     

  14. Then select the network interface that needs to be set, such as Wired connection 1, then move the cursor to <Deactivate>, and press Enter to disable Wired connection 1

     

  15. Then please do not move the cursor, and then press the Enter key to re-enable Wired connection 1, so that the static IP address set earlier will take effect

     

  16. Then you can exit nmtui through the <Back>and Quit buttons

       

  17. Then through ip addr show eth0, you can see that the IP address of the network port has changed to the static IP address set earlier

    orangepi@orangepi:~$ ip addr show eth0

    3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 5e:ac:14:a5:92:b3 brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.177/24 brd 192.168.1.255 scope global noprefixroute eth0

    valid_lft forever preferred_lft forever

    inet6 241e:3b8:3240:c3a0:e269:8305:dc08:135e/64 scope global dynamic noprefixroute

    valid_lft 259149sec preferred_lft 172749sec

    inet6 fe80::957d:bbbe:4928:3604/64 scope link noprefixroute

    valid_lft forever preferred_lft forever

  18. Then you can test the network connectivity to check whether the IP address is configured OK. The ping command can be interrupted by using the Ctrl+C shortcut key.

    orangepi@orangepi:~$ ping 192.168.1.47 -I eth0

    PING 192.168.1.47 (192.168.1.47) from 192.168.1.188 eth0: 56(84) bytes of data.

    64 bytes from 192.168.1.47: icmp_seq=1 ttl=64 time=0.233 ms

    64 bytes from 192.168.1.47: icmp_seq=2 ttl=64 time=0.263 ms

    64 bytes from 192.168.1.47: icmp_seq=3 ttl=64 time=0.273 ms

    64 bytes from 192.168.1.47: icmp_seq=4 ttl=64 time=0.269 ms

    64 bytes from 192.168.1.47: icmp_seq=5 ttl=64 time=0.275 ms

    ^C

    --- 192.168.1.47 ping statistics ---

    5 packets transmitted, 5 received, 0% packet loss, time 4042ms

    rtt min/avg/max/mdev = 0.233/0.262/0.275/0.015 ms

Use the nmcli command to set a static IP address

  1. If you want to set the static IP address of the network port, please insert the network cable into the development board first. If you need to set the static IP address of WIFI, please connect the WIFI first, and then start to set the static IP address

  2. Then you can view the name of the network device through the nmcli con show command, as shown below

    1. orangepi is the name of the WIFI network interface (the name is not necessarily the same)

    2. Wired connection 1 is the name of the Ethernet interface

      orangepi@orangepi:~$ nmcli con show
      NAMEUUID TYPE DEVICE
      orangepicfc4f922-ae48-46f1-84e1-2f19e9ec5e2awifi wlan0
      Wired connection 19db058b7-7701-37b8-9411-efc2ae8bfa30ethernet eth0

  3. Then enter the following command,

    1. "Wired connection 1" It means to set the static IP address of the Ethernet port. If you need to set the static IP address of WIFI, please modify it to the corresponding name of the WIFI network interface (you can get it through the nmcli con show)

    2. ipv4.addresses Behind is the static IP address to be set, which can be modified to the value you want to set.

    3. ipv4.gateway Indicates the address of the gateway

      orangepi@orangepi:~$ nmcli con mod "Wired connection 1" \

      ipv4.addresses "192.168.1.110" \

      ipv4.gateway "192.168.1.1" \

      ipv4.dns "8.8.8.8" \

      ipv4.method "manual"

  4. Then restart the Linux system

    orangepi@orangepi:~$ sudo reboot

  5. Then re-enter the Linux system and use the ip addr show eth0 command to see that the IP address has been set to the desired value

    orangepi@orangepi:~$ ip addr show eth0

    3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 5e:ae:14:a5:91:b3 brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.110/32 brd 192.168.1.110 scope global noprefixroute eth0

    valid_lft forever preferred_lft forever

    inet6 240e:3b7:3240:c3a0:97de:1d01:b290:fe3a/64 scope global dynamic noprefixroute

    valid_lft 259183sec preferred_lft 172783sec

    inet6 fe80::3312:861a:a589:d3c/64 scope link noprefixroute

    valid_lft forever preferred_lft forever

SSH remote login development board

Linux systems enable ssh remote login by default and allow root users to log in to the system. Before ssh login, you first need to ensure that the Ethernet or wifi network is connected, and then use the ip addr command or obtain the IP address of the development board by checking the router.

SSH remote login development board under Ubuntu

  1. Obtain the IP address of the development board
  2. Then you can remotely log in to the Linux system through the ssh command

test@test:~$ ssh root@192.168.1.xxx        (Need to be replaced with the IP address of the development board)

root@192.168.1.xx's password:        (Enter the password here, the default password is orangepi)

Note that when entering the password, the specific content of the entered password will not be displayed on the screen, please do not think that there is any fault, just press Enter after inputting.

If you are prompted to refuse the connection, as long as you are using the image provided by Orange Pi, please do not suspect that the password orangepi is wrong, but find other reasons

  1. After successfully logging into the system, the display is as shown below

     

    If ssh fails to log in to the Linux system normally, first check whether the IP address of the development board can be pinged. If there is no problem with the ping, you can log in to the Linux system through the serial port or HDMI display, and then enter the following command on the development board and try again. Is it possible to connect:


    root@orangepi:~# reset_ssh.sh


    If it still doesn't work, please try again by resetting the system.

SSH remote login development board under Windows

  1. First obtain the IP address of the development board

  2. Under Windows, you can use MobaXterm to remotely log in to the development board, first create a new ssh session

    1. Open Session

    2. Then select SSH in Session Setting

    3. Then enter the IP address of the development board in the Remote host

    4. Then enter the username root or orangepi of the Linux system in Specify username

    5. Finally click OK

       

  3. Then you will be prompted to enter a password. The default passwords for root and orangepi users are orangepi

    Note that when entering a password, the specific content of the entered password will not be displayed on the screen. Please do not think that there is something wrong. Just press Enter after entering it.

     

  1. After successfully logging into the system, the display is as shown below
  2.  

Method of uploading files to the development board Linux system

How to upload files from Ubuntu PC to development board Linux system

How to upload files using scp command

  1. Use the scp command to upload files from the Ubuntu PC to the Linux system of the development board. The specific commands are as follows

    1. file_path:Need to be replaced with the path of the file to be uploaded

    2. orangepi:This is the username of the Linux system of the development board. It can also be replaced with another one, such as root.

    3. 192.168.xx.xx: It is the IP address of the development board, please modify it according to the actual situation

    4. /home/orangepi: The path in the Linux system of the development board can also be modified to other paths

      test@test:~$ scp file_path orangepi@192.168.xx.xx:/home/orangepi/

  2. If you want to upload a folder, you need to add the -r parameter

    test@test:~$ scp -r dir_path orangepi@192.168.xx.xx:/home/orangepi/

  3. There are more usages of scp, please use the following command to view the man manual

  4. test@test:~$ man scp

How to upload files using filezilla

  1. First install filezilla in Ubuntu PC

    test@test:~$ sudo apt install -y filezilla

  2. Then use the following command to open filezilla

    test@test:~$ filezilla

  3. The interface after opening filezilla is as shown below. At this time, the remote site on the right is empty.

     

  4. The method of connecting the development board is as shown in the figure below

  5.  

  1. Then choose to save the password, and then click OK

     

  2. Then select Always trust this host and click OK

  3.  

  1. After the connection is successful, you can see the directory structure of the development board's Linux file system on the right side of the filezilla software.
  2.  

  1. Then select the path to be uploaded to the development board on the right side of the filezilla software, select the file to be uploaded in Ubuntu PC on the left side of the filezilla software, right-click the mouse, and click the upload option to start uploading the file to the development board.
  2.  

  1. After the upload is complete, you can go to the corresponding path in the Linux system of the development board to view the uploaded files

  2. The method of uploading a folder is the same as the method of uploading a file, so I won't go into details here.

The method of uploading files to the Linux system of the development board in Windows PC

How to upload files using filezilla

  1. First download the installation file of the Windows version of the filezilla software. The download link is as follows

https://filezilla-project.org/download.php?type=client

 
 
  1. The downloaded installation package is as shown below, then double-click to install it directly

    FileZilla_Server_1.5.1_win64-setup.exe

    During the installation process, please select Decline on the following installation interface, and then select <Next>

     

  1. The interface after opening filezilla is as shown below. At this time, the remote site on the right is empty.
  2.  

  1. The method of connecting the development board is shown in the figure below:
  2.  

  1. Then choose to save the password, and then click OK
  2.  

  1. Then select Always trust this host and click OK
  2.  

  1. After the connection is successful, you can see the directory structure of the development board's Linux file system on the right side of the filezilla software.
  2.  

  1. Then select the path to be uploaded to the development board on the right side of the filezilla software, select the file to be uploaded on the Windows PC on the left side of the filezilla software, right-click the mouse, and then click the upload option to start uploading the file to the development board.
  2.  

  1. After the upload is complete, you can go to the corresponding path in the Linux system of the development board to view the uploaded files

  2. The method of uploading a folder is the same as the method of uploading a file, so I won't go into details here.

HDMI test

HDMI display test

  1. Use Micro HDMI to HDMI cable to connect the Orange Pi development board and HDMI display

     

  2. After starting the Linux system, if there is image output on the HDMI display, it means that the Micro HDMI interface is working normally.

  3. Note that although many laptops have HDMI interfaces, the HDMI interface of the laptop generally only has the output function and does not have the HDMI in function, which means that the HDMI output of other devices cannot be displayed on the laptop screen.

    When you want to connect the Micro HDMI of the development board to the HDMI port of the laptop, please make sure that your laptop supports the function HDMI in

    When HDMI does not display, please first check whether the Micro HDMI cable is plugged in tightly. After confirming that the wiring is OK, you can try a different screen to see if there is a display.

HDMI resolution setting method

  1. First open Display in Settings

     

  2. Then you can see the current resolution of the system

     

  3. Click the drop-down box of Resolution to see all resolutions currently supported by the display

     

  4. Then select the resolution you want to set and click Apply

     

  5. After the new resolution is set, select Keep the configuration

     

How to use Bluetooth

Test method for desktop image

  1. Click the Bluetooth icon in the upper right corner of the desktop

     

  2. Then select the adapter

     

  3. If prompted with the following interface, please select Yes.

     

  4. Then set the Visibility Setting to Always visible in the Bluetooth adapter setting interface, and then close it

     

  5. Then open the configuration interface of the Bluetooth device

     

  6. Click Search to start scanning for surrounding Bluetooth devices

     

  7. Then select the Bluetooth device you want to connect to, and then click the right mouse button to pop up the operation interface for this Bluetooth device, select Pair to start pairing, and the demonstration here is to pair with an Android phone

     

  8. When pairing, a pairing confirmation box will pop up in the upper right corner of the desktop. Just select Confirm to confirm. At this time, you also need to confirm on the mobile phone.

     

  9. After pairing with the mobile phone, you can select the paired Bluetooth device, then right click and select Send a File to start sending a picture to the mobile phone

     

  10. The interface for sending pictures is as follows

     

USB interface test

The USB interface can be connected to a USB hub to expand the number of USB interfaces.

Connect USB mouse or keyboard to test

  1. Insert the USB interface keyboard into the USB interface of the Orange Pi development board
  2. Connect the Orange Pi development board to the HDMI display
  3. If the mouse or keyboard can operate normally, it means that the USB interface is working normally (the mouse can only be used in the desktop version of the system)

Connect USB storage device to test

  1. First insert the U disk or USB mobile hard disk into the USB interface of the Orange Pi development board
  2. Execute the following command, if you can see the output of sdX, it means that the U disk is recognized successfully

orangepi@orangepi:~$ cat /proc/partitions | grep "sd*"
major minor #blocksname
8030044160 sda
8130043119 sda1

  1. Use the mount command to mount the U disk to /mnt, and then you can view the files in the U disk
  2. orangepi@orangepi:~$ sudo mount /dev/sda1 /mnt/

    orangepi@orangepi:~$ ls /mnt/

    test.txt

  1. After mounting, you can check the capacity usage and mount point of the U disk through the df -h command.
  2. orangepi@orangepi:~$ df -h | grep "sd"

    /dev/sda1     29G    208K    29G    1% /mnt

USB wireless network card test

The usable USB wireless network cards that have been tested so far are as follows. Please test other types of USB wireless network cards by yourself. If they cannot be used, you need to transplant the corresponding USB wireless network card driver.

serial number model
1

RTL8723BU

support 2.4G WIFI+BT4.0

 
2

RTL8811

support 2.4G +5G WIFI

 

RTL8723BU test

  1. First insert the RTL8723BU wireless network card module into the USB interface of the development board

  2. Then the Linux system will automatically load the RTL8723BU bluetooth and WIFI-related kernel modules, through the lsmod command, you can see that the following kernel modules have been automatically loaded

    orangepi@orangepi:~$ lsmod

    Module Size Used by
    rfcomm 5734416
    rtl8xxxu 1064960
    rtk_btusb 614400

  3. Through the dmesg command, you can see the loading information of the RTL8723BU module

    orangepi@orangepi:~$ dmesg

    ......

    [ 83.438901] usb 2-1: new high-speed USB device number 2 using ehci-platform

    [ 83.588375] usb 2-1: New USB device found, idVendor=0bda, idProduct=b720, bcdDevice= 2.00

    [ 83.588403] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3

    [ 83.588422] usb 2-1: Product: 802.11n WLAN Adapter

    [ 83.588443] usb 2-1: Manufacturer: Realtek

    [ 83.588460] usb 2-1: SerialNumber: 00e04c000001

    [ 83.601974] Bluetooth: hci0: RTL: examining hci_ver=06 hci_rev=000b lmp_ver=06 lmp_subver=8723

    [ 83.603894] Bluetooth: hci0: RTL: rom_version status=0 version=1

    [ 83.603920] Bluetooth: hci0: RTL: loading rtl_bt/rtl8723b_fw.bin

    [ 83.610108] Bluetooth: hci0: RTL: loading rtl_bt/rtl8723b_config.bin

    [ 83.611274] Bluetooth: hci0: RTL: cfg_sz 68, total sz 22564

    [ 83.658494] rtk_btusb: Realtek Bluetooth USB driver ver 3.1.6d45ddf.20220519-142432

    [ 83.658651] usbcore: registered new interface driver rtk_btusb

    [ 83.667124] usb 2-1: This Realtek USB WiFi dongle (0x0bda:0xb720) is untested!

    [ 83.667137] usb 2-1: Please report results to Jes.Sorensen@gmail.com

    [ 83.890140] usb 2-1: Vendor: Realtek

    [ 83.890153] usb 2-1: Product: 802.11n WLAN Adapter

    [ 83.890159] usb 2-1: rtl8723bu_parse_efuse: dumping efuse (0x200 bytes):

    ......

    [ 83.890412] usb 2-1: RTL8723BU rev E (SMIC) 1T1R, TX queues 3, WiFi=1, BT=1, GPS=0, HI PA=0

    [ 83.890417] usb 2-1: RTL8723BU MAC: 00:13:ef:f4:58:ae

    [ 83.890421] usb 2-1: rtl8xxxu: Loading firmware rtlwifi/rtl8723bu_nic.bin

    [ 83.895289] usb 2-1: Firmware revision 35.0 (signature 0x5301)

    [ 84.050893] Bluetooth: hci0: RTL: fw version 0x0e2f9f73

    [ 84.266905] Bluetooth: RFCOMM TTY layer initialized

    [ 84.266949] Bluetooth: RFCOMM socket layer initialized

    [ 84.266999] Bluetooth: RFCOMM ver 1.11

    [ 84.884270] usbcore: registered new interface driver rtl8xxxu

    [ 84.912046] rtl8xxxu 2-1:1.2 wlx0013eff458ae: renamed from wlan0

  4. Then you can see the device node of RTL8723BU WIFI through the sudo ifconfig command. For the connection and test method of WIFI, please refer to the section of WIFI connection test, which will not be repeated here

    orangepi@orangepi:~$ sudo ifconfig wlx0013eff458ae

    wlx0013eff458ae: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500

    ether 00:13:ef:f4:58:ae txqueuelen 1000 (Ethernet)

    RX packets 0 bytes 0 (0.0 B)

    RX errors 0 dropped 0 overruns 0 frame 0

    TX packets 0 bytes 0 (0.0 B)

    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

  5. Then you can see the USB Bluetooth device through the hciconfig command

    orangepi@orangepi:~$ sudo apt update && sudo apt install bluez

    orangepi@orangepi:~$ hciconfig

    hci0: Type: Primary Bus: USB

    BD Address: 00:13:EF:F4:58:AE ACL MTU: 820:8 SCO MTU: 255:16

    DOWN

    RX bytes:1252 acl:0 sco:0 events:125 errors:0

    TX bytes:23307 acl:0 sco:0 commands:125 errors:0

  6. You can also see the Bluetooth icon on the desktop. Bluetooth is not turned on at this time, so a red x will be displayed

     

  7. Click Turn Bluetooth On to turn on Bluetooth

     

  8. The display after turning on Bluetooth is as follows

     

  9. For the Bluetooth test method, please refer to the section on Bluetooth usage and will not be repeated here.

RTL8811 test

  1. First insert the RTL8811 wireless network card module into the USB interface of the development board

  2. Then the Linux system will automatically load the kernel module related to RTL8811 WIFI. Through the lsmod command, you can see that the following kernel module has been automatically loaded.

    orangepi@orangepi:~$ lsmod

    Module Size Used by
    8821cu 1839104 0

  3. You can see the loading information of the RTL8811 module through the dmesg command

    orangepi@orangepi:~$ dmesg

    [ 118.618194] usb 2-1: new high-speed USB device number 2 using ehci-platform

    [ 118.767152] usb 2-1: New USB device found, idVendor=0bda, idProduct=c811, bcdDevice= 2.00

    [ 118.767181] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3

    [ 118.767199] usb 2-1: Product: 802.11ac NIC

    [ 118.767219] usb 2-1: Manufacturer: Realtek

    [ 118.767235] usb 2-1: SerialNumber: 123456

    [ 119.500530] usbcore: registered new interface driver rtl8821cu

    [ 119.525498] rtl8821cu 2-1:1.0 wlx1cbfced9d260: renamed from wlan0

  4. Then, you can see the WIFI device node through the sudo ifconfig command. For the WIFI connection and test method, please refer to the WIFI connection test section, which will not be repeated here

    orangepi@orangepi:~$ sudo ifconfig wlx1cbfced9d260

    wlx1cbfced9d260: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500

    ether 1c:bf:ce:d9:d2:60 txqueuelen 1000 (Ethernet)

    RX packets 0 bytes 0 (0.0 B)

    RX errors 0 dropped 0 overruns 0 frame 0

    TX packets 0 bytes 0 (0.0 B)

    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

USB camera test

  1. First, you need to prepare a USB camera as shown in the picture below or similar that supports UVC protocol, and then insert the USB camera into the USB interface of the Orange Pi development board

     

  2. Through the v4l2-ctl command, you can see that the device node information of the USB camera is /dev/video0

    orangepi@orangepi:~$ v4l2-ctl --list-devices

    Q8 HD Webcam: Q8 HD Webcam (usb-fc880000.usb-1):

    /dev/video0

    /dev/video1

    /dev/media0

    Note that l in v4l2 is a lowercase letter l, not the number 1

    In addition, the serial number of the video is not necessarily video0, please refer to what you actually see.

  3. In the desktop system, you can use Cheese to directly open the USB camera. The method of opening Cheese is as shown in the figure below:

     

    The interface after Cheese turns on the USB camera is as shown below:

     

  4. How to use fswebcam to test USB camera

    1. Install fswebcam

      orangepi@orangepi:~$ sudo apt update

      orangepi@orangepi:~$ sudo apt-get install -y fswebcam

    2. After installing fswebcam, you can use the following command to take pictures

      1. a) -d option is used to specify the device node of the USB camera

      2. b) --no-banner Used to remove watermarks from photos

      3. c) -r option to specify the resolution of the photo

      4. d) -S Option to set the number of previous frames to skip

      5. e) ./image.jpg Used to set the name and path of the generated photo

        orangepi@orangepi:~$ sudo fswebcam -d /dev/video0 \

        --no-banner -r 1280x720 -S 5 ./image.jpg

    3. In the server version of the Linux system, you can use the scp command to transfer the taken pictures to the Ubuntu PC for mirror viewing after taking pictures

      orangepi@orangepi:~$ scp image.jpg test@192.168.1.55:/home/test (Modify the IP address and path according to the actual situation)

    4. In the desktop version of the Linux system, you can directly view the captured pictures through the HDMI display

Audio test

Testing audio methods on desktop systems

  1. First open the file manager

     

  2. Then find the following file (if there is no such audio file in the system, you can upload an audio file to the system yourself)

     

  3. Then select the audio.wav file, right-click and select open with vlc to start playing.

     

  4. How to switch between different audio devices such as HDMI playback and headphone playback

    1. First open the volume control interface

       

    2. When playing audio, the audio device options that can be used by the playback software will be displayed in Playback, as shown in the figure below. Here you can set which audio device needs to be played

       

How to use commands to play audio

Headphone interface audio playback test

  1. First insert the headphones into the headphone jack of the development board

     

  2. Then you can use the aplay -l command to check the sound card devices supported by the Linux system. From the output below, we can see that card 0 is the sound card device of rk809, which is the sound card device of the headset.

    orangepi@orangepi:~$ aplay -l

    **** List of PLAYBACK Hardware Devices ****

    card 0: rockchiprk809 [rockchip-rk809], device 0: dailink-multicodecs rk817-hifi-0 [dailink-multicodecs rk817-hifi-0]

    Subdevices: 0/1

    Subdevice #0: subdevice #0

    card 1: rockchiphdmi [rockchip,hdmi], device 0: fe400000.i2s-i2s-hifi i2s-hifi-0 [fe400000.i2s-i2s-hifi i2s-hifi-0]

    Subdevices: 0/1

    Subdevice #0: subdevice #0

    Subdevice #0: subdevice #0

  3. Then use the aplay command to play the audio file that comes with the system. If the headset can hear the sound, it means that the hardware can be used normally.

    orangepi@orangepi:~$ aplay -D hw:0,0 /usr/share/sounds/alsa/audio.wav

    Playing WAVE 'audio.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

HDMI audio playback test

  1. First use a Micro HDMI to HDMI cable to connect the Orange Pi development board to the TV (other HDMI displays need to ensure that they can play audio)

  2. Then check the serial number of the HDMI sound card. From the output below, you can know that the HDMI sound card is card 1

    orangepi@orangepi:~$ aplay -l

    **** List of PLAYBACK Hardware Devices ****

    card 0: rockchiprk809 [rockchip-rk809], device 0: dailink-multicodecs rk817-hifi-0 [dailink-multicodecs rk817-hifi-0]

    Subdevices: 0/1

    Subdevice #0: subdevice #0

    card 1: rockchiphdmi [rockchip,hdmi], device 0: fe400000.i2s-i2s-hifi i2s-hifi-0 [fe400000.i2s-i2s-hifi i2s-hifi-0]

    Subdevices: 0/1

    Subdevice #0: subdevice #0

    Subdevice #0: subdevice #0

  3. Then use the aplay command to play the audio file that comes with the system. If the sound can be heard on the HDMI display or TV, it means that the hardware can be used normally.

    orangepi@orangepi:~$ aplay -D hw:1,0 /usr/share/sounds/alsa/audio.wav

How to test recording using commands

  1. The Orange Pi CM4 development board does not have an onboard MIC, and audio can only be recorded through headphones with a MIC function. After inserting the headset with MIC function into the development board, run the following command to record an audio period through the headset.

    orangepi@orangepi:~$ amixer -c 0 cset name='Capture MIC Path' 'Main Mic'

    orangepi@orangepi:~$ arecord -D hw:0,0 -d 5 -f cd -t wav /tmp/test.wav

Temperature sensor

  1. The command to view the system temperature sensor is:

orangepi@orangepi:~$ sensors

soc_thermal-virtual-0

Adapter: Virtual device

temp1:          +41.9°C (crit = +115.0°C)

gpu_thermal-virtual-0

Adapter: Virtual device

temp1:          +43.8°C

  1. The command to view the current temperature of the nvme ssd solid state drive is:

    orangepi@orangepi:~$ sudo smartctl -a /dev/nvme0 | grep "Temperature:"

    Temperature:          40 Celsius

40 Pin interface pin description

  1. Please refer to the picture below for the order of the 40-pin interface pins of the Orange Pi CM4 development board

     

  2. The functions of the 40-pin interface pins of the Orange Pi CM4 development board are as shown in the table below

    1. The following is the complete pin diagram of 40pin

       

    2. The table below is the picture of the left half of the complete table above, so you can see it clearly

       

    3. The table below is the picture of the right half of the complete table above, so you can see it clearly

       

  3. There are a total of 28 GPIO ports in the 40pin interface, and the voltage of all GPIO ports is 3.3v

How to install wiringOP

Note that wiringOP is already pre-installed in the Linux image released by Orange Pi. Unless the wiringOP code is updated, there is no need to re-download, compile and install it, just use it directly.


The storage path of the compiled wiringOP deb package in orangepi-build is:

orangepi-build/external/cache/debs/arm64/wiringpi_x.xx.deb


After entering the system, you can run the gpio readall command. If you can see the following output, it means that wiringOP has been pre-installed and can be used normally.

WiringOP currently mainly adapts to the functions of setting GPIO port input and output, setting GPIO port output high and low levels, and setting pull-up and pull-down resistors. Functions such as hardware PWM cannot be used.

  1. Download the code of wiringOP

    orangepi@orangepi:~$ sudo apt update

    orangepi@orangepi:~$ sudo apt install -y git

    orangepi@orangepi:~$ git clone https://github.com/orangepi-xunlong/wiringOP.git -b next

    Note that Orange Pi CM4 needs to download the code of wiringOP next branch. Please don’t miss the -b next parameter.

    If you have problems downloading the code from GitHub, you can directly use the wiringOP source code that comes with the Linux image, and the storage location is: /usr/src/wiringOP.

  2. Compile and install wiringOP

    orangepi@orangepi:~$ cd wiringOP

    orangepi@orangepi:~/wiringOP$ sudo ./build clean

    orangepi@orangepi:~/wiringOP$ sudo ./build

  3. Test the output of the gpio readall command as follows

     

40pin interface GPIO, I2C, UART, SPI and PWM test

Note, if you need to set overlays to open multiple configurations at the same time, please use spaces to separate them and write them on one line as follows.


orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt

overlays=spi3-m0-cs0-spidev i2c2-m1 i2c3-m0 uart7-m2 uart9-m2 pwm11-m1

40pin GPIO port test

The Linux system released by Orange Pi has a pre-installed blink_all_gpio program, which will set all 28 GPIO ports in the 40pin to switch between high and low levels continuously.


After running the blink_all_gpio program, when using a multimeter to measure the level of the GPIO port, you will find that the GPIO pin will switch between 0 and 3.3v continuously. Using this program we can test whether the GPIO port is working properly.


The way to run the blink_all_gpio program is as follows:

orangepi@orangepicm4:~$ sudo blink_all_gpio        # Remember to add sudo permission

[sudo] password for orangepi:        # A password is required here

  1. There are a total of 28 GPIO ports in the 40pins of the development board that can be used. The following uses pin 7—the corresponding GPIO is GPIO4_C3——the corresponding wPi serial number is 2—as an example to demonstrate how to set the high and low levels of the GPIO port
 
  1. First set the GPIO port to output mode, where the third parameter needs to input the serial number of wPi corresponding to the pin
  2. root@orangepi:~/wiringOP# gpio mode 2 out

  1. Then set the GPIO port to output low level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 0v, it means that the low level is set successfully.
  2. root@orangepi:~/wiringOP# gpio write 2 0

    Use gpio readall to see that the value (V) of pin 7 has changed to 0

     

  1. Then set the GPIO port to output a high level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 3.3v, it means that the high level is set successfully
  2. root@orangepi:~/wiringOP# gpio write 2 1

    Use gpio readall to see that the value (V) of pin 7 has changed to 1

     

  1. The setting method of other pins is similar, just modify the serial number of wPi to the corresponding serial number of the pin

How to set the pull-up and pull-down resistance of 40pin GPIO port

Note that the 4 GPIO pins below the Orange Pi CM4 have an external 3.3V pull-up, so setting the pull-down is invalid, and the other pins can normally set the pull-up and pull-down resistor function

  1. The following takes pin 11—the corresponding GPIO is GPIO3_C6—the corresponding wPi serial number is 5—as an example to demonstrate how to set the pull-up and pull-down resistance of the GPIO port
 
  1. First, you need to set the GPIO port to the input mode, and the third parameter needs to be the serial number of the wPi corresponding to the input pin
  2. root@orangepi:~/wiringOP# gpio mode 5 in

  1. After setting to input mode, execute the following command to set the GPIO port to pull-up mode
  2. root@orangepi:~/wiringOP# gpio mode 5 up

  1. Then enter the following command to read the level of the GPIO port, if the level is 1, it means that the pull-up mode is set successfully
  2. root@orangepi:~/wiringOP# gpio read 5

    1

  1. Then execute the following command to set the GPIO port to pull-down mode
  2. root@orangepi:~/wiringOP# gpio mode 5 down

  1. Then enter the following command to read the level of the GPIO port, if the level is 0, the pull-down mode is set successfully
  2. root@orangepi:~/wiringOP# gpio read 5

    0

40pin SPI test

  1. According to the schematic diagram of the 40pin interface, the spi available for Orange Pi CM4 is spi3
 
  1. In the linux system, the SPI in the 40 pin is closed by default, and it needs to be opened manually to use it. The detailed steps are as follows:

    1. First run orangepi-config, common users remember to add sudo permission
    2. orangepi@orangepi:~$ sudo orangepi-config

    1. Then select System
    2.  

    1. Then select Hardware
    2.  

    1. Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the SPI configuration you want to open
    2.  

    1. Then select <Save>Save
    2.  

    1. Then select<Back>
    2.  

    1. Then select<Reboot> Restart the system for the configuration to take effect
    2.  

  1. After restarting, enter the system to check whether there is a spidev3.0 device node in the Linux system. If it exists, it means that SPI3 has been set up and can be used directly
  2. orangepi@orangepi:~$ ls /dev/spidev3.0

    /dev/spidev3.0

  1. Do not short-circuit the mosi and miso pins of SPI3 first, and the output result of running spidev_test is as follows, you can see that the data of TX and RX are inconsistent
  2. orangepi@orangepi:~$ sudo spidev_test -v -D /dev/spidev3.0

    spi mode: 0x0

    bits per word: 8

    max speed: 500000 Hz (500 KHz)

    TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.

    RX | FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ............................….

  1. Then short-circuit the two pins of mosi (pin 19 in the 40pin interface) and miso (pin 21 in the 40pin interface) of SPI3 and run the output of spidev_test as follows, you can see the sending and receiving same data
  2.  

    orangepi@orangepi:~$ sudo spidev_test -v -D /dev/spidev3.0

    spi mode: 0x0

    bits per word: 8

    max speed: 500000 Hz (500 KHz)

    TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.

    RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.

40pin I2C test

  1. As can be seen from the table below, the available i2c for Orange Pi CM4 is i2c2, i2c3 and i2c4, a total of three sets of i2c buses
 

As can be seen from the above table, i2c4_m0 and spi3_m0 are multiplexed pins, and both cannot be opened at the same time. i2c3_m0 and uart3_m0 are also multiplexed pins, and both cannot be opened at the same time

  1. In the linux system, the I2C bus in the 40 pin is closed by default, and it needs to be opened manually to use it. The detailed steps are as follows:

    1. First run orangepi-config, common users remember to add sudo permission
    2. orangepi@orangepi:~$ sudo orangepi-config

    1. Then select System
    2.  

    1. Then select Hardware
    2.  

    1. Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the I2C configuration you want to open
    2.  

    1. Then select <Save> Save
    2.  

    1. Then select <Back>
    2.  

    1. Then select<Reboot> Restart the system for the configuration to take effect
    2.  

  1. After starting the Linux system, first confirm that there is an i2c device node under /dev
  2. orangepi@orangepi:~# ls /dev/i2c-*

    /dev/i2c-0      /dev/i2c-2      /dev/i2c-3      /dev/i2c-4      /dev/i2c-6

  1. Then connect an i2c device to the i2c pin of the 40pin connector
  2. i2c2-m1 i2c3-m0 i2c4-m0
    Sda Pin Corresponding to No.3 pin Corresponding to No.27 pin Corresponding to No.19 pin
    Sck Pin Corresponding to No.5 pin Corresponding to No.28 pin Corresponding to No.23 pin
    Vcc Pin Corresponding to No.1 pin Corresponding to No.1 pin Corresponding to No.1 pin
    Gnd Pin Corresponding to No.6 pin Corresponding to No.6 pin Corresponding to No.6 pin
  1. Then use the i2cdetect -y command, if the address of the connected i2c device can be detected, it means that i2c can be used normally
  2. orangepi@orangepi:~$ sudo i2cdetect -y 2      #i2c2 command

    orangepi@orangepi:~$ sudo i2cdetect -y 3      #i2c3 command

    orangepi@orangepi:~$ sudo i2cdetect -y 4      #i2c4 command

     

40pin UART test

  1. As can be seen from the table below, the available uarts of Orange Pi CM4 are three sets of uart buses: uart3, uart7 and uart9
 

As can be seen from the above table, i2c3_m0 and uart3_m0 are multiplexed pins, and both cannot be opened at the same time

  1. In the linux system, the UART in the 40 pins is closed by default, and it needs to be opened manually to use. The detailed steps are as follows:

    1. First run orangepi-config, common users remember to add sudo permission
    2. orangepi@orangepi:~$ sudo orangepi-config

    1. Then select System
    2.  

    1. Then select Hardware
    2.  

    1. Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the UART configuration you want to open
    2.  

    1. Then select <Save> Save
    2.  

    1. Then select <Back>
    2.  

    1. Then select <Reboot> Restart the system for the configuration to take effect
    2.  

  1. After entering the Linux system, first confirm whether there is a device node corresponding to uart under /dev
  2. orangepi@orangepi:~# ls /dev/ttyS*

    /dev/ttyS1      /dev/ttyS3      /dev/ttyS7      /dev/ttyS9

  1. Then start to test the uart interface, first use the DuPont line to short the rx and tx of the uart interface to be tested
  2. uart3 uart7 uart9
    tx pin Corresponding to pin 28 Corresponding to pin 16 Corresponding to pin 29
    rx pin Corresponding to pin 27 Corresponding to pin 15 Corresponding to pin 22

     

  1. Use the gpio serial command to test the loopback function of the serial port as shown below, if you can see the following print, it means the serial port communication is normal

    1. Test UART3
    2. orangepi@orangepi:~$ sudo gpio serial /dev/ttyS3

      [sudo] password for orangepi: # enter password here


      Out: 0: -> 0

      Out: 1: -> 1

      Out: 2: -> 2

      Out: 3: -> 3

      Out: 4: -> 4

      Out: 5: -> 5^C

    1. Test UART7
    2. orangepi@orangepi:~$ sudo gpio serial /dev/ttyS7

      [sudo] password for orangepi: #enter password here


      Out: 0: -> 0

      Out: 1: -> 1

      Out: 2: -> 2

      Out: 3: -> 3

      Out: 4: -> 4

      Out: 5: -> 5^C

    1. Test UART9
    2. orangepi@orangepi:~$ sudo gpio serial /dev/ttyS9

      [sudo] password for orangepi: # enter password here


      Out: 0: -> 0

      Out: 1: -> 1

      Out: 2: -> 2

      Out: 3: -> 3

      Out: 4: -> 4

      Out: 5: -> 5^C

PWM test method

  1. As can be seen from the table below, Orange Pi CM4 has two channels of pwm available pwm11 and pwm15
 
  1. In the linux system, the PWM in the 40 pin is turned off by default, and it needs to be turned on manually before it can be used. The detailed steps are as follows:

    1. First run orangepi-config, common users remember to add sudo permission
    2. orangepi@orangepi:~$ sudo orangepi-config

    1. Then selectSystem
    2.  

    1. Then select Hardware
    2.  

    1. Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the PWM configuration you want to open
    2.  

    1. Then select <Save> Save
    2.  

    1. Then select <Back>
    2.  

    1. Then select <Reboot> Restart the system for the configuration to take effect
    2.  

  1. After opening a pwm, there will be an extra pwmchipX in /sys/class/pwm/ (X is a specific number), for example, after opening pwm11, check the pwmchipX under /sys/class/pwm/ one becomes two
  2. orangepi@orangepi:~$ ls /sys/class/pwm/

    pwmchip0      pwmchip1

  1. Which of the above pwmchips corresponds to pwm11? Let’s first check the output of the ls /sys/class/pwm/ -l command, as shown below:
  2.  

  1. Then it can be known from the table below that the base address of the pwm11 register is fe6f0030, and then look at the output of the ls /sys/class/pwm/ -l command, you can see that pwmchip1 is linked to fe6f0030.pwm, so pwm11 corresponds to pwmchip as pwmchip1
  2.  

  1. Then use the following command to make pwm11 output a 50Hz square wave (please switch to the root user first, and then execute the following command)
  2. root@orangepi:~# echo 0 > /sys/class/pwm/pwmchip1/export

    root@orangepi:~# echo 20000000 > /sys/class/pwm/pwmchip1/pwm0/period

    root@orangepi:~# echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

    root@orangepi:~# echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable

     

  1. The test method of pwm11 demonstrated above is similar to other pwm test methods.

How to install and use wiringOP-Python

wiringOP-Python is the Python language version of wiringOP, which is used to operate the hardware resources of the development board, such as GPIO, I2C, SPI and UART, in the Python program.

In addition, please note that all the following commands are operated under the root user.

How to install wiringOP-Python

  1. First install the dependent packages

root@orangepi:~# sudo apt-get update

root@orangepi:~# sudo apt-get -y install git swig python3-dev python3-setuptools

  1. Then use the following command to download the source code of wiringOP-Python
  2. Note that the following git clone--recursive command will automatically download the source code of wiringOP, because wiringOP-Python depends on wiringOP. Please make sure that the download process does not report errors due to network problems.

    If you have problems downloading the code from GitHub, you can directly use the wiringOP-Python source code that comes with the Linux image, and the storage location is:/usr/src/wiringOP-Python.

    root@orangepi:~# git clone --recursive https://github.com/orangepi-xunlong/wiringOP-Python -b next

    root@orangepi:~# cd wiringOP-Python

    root@orangepi:~/wiringOP-Python# git submodule update --init --remote

  1. Then use the following command to compile wiringOP-Python and install it into the Linux system of the development board
  2. root@orangepi:~# cd wiringOP-Python

    root@orangepi:~/wiringOP-Python# python3 generate-bindings.py > bindings.i

    root@orangepi:~/wiringOP-Python# sudo python3 setup.py install

  1. Then enter the following command, if there is help information output, it means that wiringOP-Python is installed successfully, press the q key to exit the help information interface
  2. root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; help(wiringpi)"

    Help on module wiringpi:


    NAME

    wiringpi


    DESCRIPTION

    # This file was automatically generated by SWIG (http://www.swig.org).
    # Version 4.0.2
    #
    # Do not make changes to this file unless you know what you are doing--modify
    # the SWIG interface file instead.
  1. The steps to test whether wiringOP-Python is successfully installed under the python command line are as follows:

    1. First use the python3 command to enter the command line mode of python3
    2. root@orangepi:~# python3

    1. Then import the python module of wiringpi
    2. >>> import wiringpi;

    1. Finally, enter the following command to view the help information of wiringOP-Python, press the q key to exit the help information interface
    2. >>> help(wiringpi)

      Help on module wiringpi:


      NAME

      wiringpi


      DESCRIPTION

      # This file was automatically generated by SWIG (http://www.swig.org).
      # Version 4.0.2
      #
      # Do not make changes to this file unless you know what you are doing--modify
      # the SWIG interface file instead.


      CLASSES

      builtins.object
      GPIO
      I2C
      Serial
      nes


      class GPIO(builtins.object)
      | GPIO(pinmode=0)
      |


      >>>

40pin GPIO port test

wiringOP-Python is the same as wiringOP, you can also determine which GPIO pin to operate by specifying the wPi number, because there is no command to check the wPi number in wiringOP-Python, so you can only check the board wPi number and physical Correspondence between pins.

  1. The following takes pin No. 7—the corresponding GPIO is GPIO4_C3—the corresponding wPi number is 2—as an example to demonstrate how to set the high and low levels of the GPIO port
 
  1. The steps to test directly with the command are as follows

    1. First set the GPIO port to output mode, where the first parameter of the pinMode function is the serial number of the wPi corresponding to the pin, and the second parameter is the GPIO mode
    2. root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; \

      from wiringpi import GPIO; wiringpi.wiringPiSetup() ; \

      wiringpi.pinMode(2, GPIO.OUTPUT) ; "

    1. Then set the GPIO port to output low level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 0v, it means that the low level is set successfully.
    2. root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; \

      from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\

      wiringpi.digitalWrite(2, GPIO.LOW)"

    1. Then set the GPIO port to output a high level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 3.3v, it means that the high level is set successfully.
    2. root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; \

      from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\

      wiringpi.digitalWrite(2, GPIO.HIGH)"

  1. The steps to test in the python3 command line are as follows:

    1. First use the python3 command to enter the command line mode of python3
    2. root@orangepi:~# python3

    1. Then import the python module of wiringpi
    2. >>> import wiringpi

      >>> from wiringpi import GPIO

    1. Then set the GPIO port to output mode, where the first parameter of the pinMode function is the serial number of the wPi corresponding to the pin, and the second parameter is the GPIO mode
    2. >>> wiringpi.wiringPiSetup()

      0

      >>> wiringpi.pinMode(2, GPIO.OUTPUT)

    1. Then set the GPIO port to output a low level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 0v, it means that the low level is set successfully.
    2. >>> wiringpi.digitalWrite(2, GPIO.LOW)

    1. Then set the GPIO port to output a high level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 3.3v, it means that the high level is set successfully.
    2. >>> wiringpi.digitalWrite(2, GPIO.HIGH)

  1. The method of setting GPIO high and low levels in the python code by wiringOP-Python can refer to the blink.py test program in the examples below. The blink.py test program will set the voltage of all GPIO ports in the 40 pins of the development board to change continuously.
  2. root@orangepi:~/wiringOP-Python# cd examples

    root@orangepi:~/wiringOP-Python/examples# ls blink.py

    blink.py

    root@orangepi:~/wiringOP-Python/examples# python3 blink.py

40pin SPI test

  1. According to the schematic diagram of the 40pin interface, the spi available for Orange Pi CM4 is spi3
 
  1. In the linux system, the SPI in the 40 pin is closed by default, and it needs to be opened manually to use it. The detailed steps are as follows:

    1. First run orangepi-config, common users remember to add sudo permission
    2. orangepi@orangepi:~$ sudo orangepi-config

    1. Then select System
    2.  

    1. Then select Hardware
    2.  

    1. Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the SPI configuration you want to open
    2.  

    1. Then select <Save>Save
    2.  

    1. Then select <Back>
    2.  

    1. Then select<Reboot> Restart the system for the configuration to take effect
    2.  

  1. First check whether there is a spidev3.0 device node in the Linux system. If it exists, it means that SPI3 has been set up and can be used directly
  2. orangepi@orangepi:~$ ls /dev/spidev3.0

    /dev/spidev3.0

  1. Then you can use the spidev_test.py program in the examples to test the loopback function of the SPI. The spidev_test.py program needs to specify the following two parameters:
  2. a. -- channel: Specify the channel number of SPI
    b. -- port: Specify the port number of SPI
  1. Do not short-circuit the mosi and miso pins of SPI3, the output of running spidev_test.py is as follows, you can see that the data of TX and RX are inconsistent
  2. root@orangepi:~/wiringOP-Python# cd examples

    root@orangepi:~/wiringOP-Python/examples# python3 spidev_test.py \

    --channel 3 --port 0

    spi mode: 0x0

    max speed: 500000 Hz (500 KHz)

    Opening device /dev/spidev3.0

    TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|

    RX | FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |.............….|

  1. Then use the Dupont wire to short-circuit the two pins of txd (pin 19 in the 40pin interface) and rxd (pin 21 in the 40pin interface) of SPI3 and then run the output of spidev_test.py as follows, you can see The data sent and received are the same, indicating that the SPI3 loopback test is normal
  2. root@orangepi:~/wiringOP-Python# cd examples

    root@orangepi:~/wiringOP-Python/examples# python3 spidev_test.py \

    --channel 3 --port 0

    spi mode: 0x0

    max speed: 500000 Hz (500 KHz)

    Opening device /dev/spidev3.0

    TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|

    RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|

40pin I2C test

  1. As can be seen from the table below, the available i2c for Orange Pi CM4 is i2c2, i2c3 and i2c4, a total of three sets of i2c buses
 

As can be seen from the above table, i2c4_m0 and spi3_m0 are multiplexed pins, and both cannot be opened at the same time. i2c3_m0 and uart3_m0 are also multiplexed pins, and both cannot be opened at the same time

  1. In the linux system, the I2C bus in the 40 pin is closed by default, and it needs to be opened manually to use it. The detailed steps are as follows:

    1. First run orangepi-config, common users remember to add sudo permission
    2. orangepi@orangepi:~$ sudo orangepi-config

    1. Then select System
    2.  

    1. Then select Hardware
    2.  

    1. Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the I2C configuration you want to open
    2.  

    1. Then select <Save> Save
    2.  

    1. Then select <Back>
    2.  

    1. Then select <Reboot> Restart the system for the configuration to take effect

       

  1. After starting the Linux system, first confirm that there is an i2c device node under /dev
  2. orangepi@orangepi:~# ls /dev/i2c-*

    /dev/i2c-0      /dev/i2c-2      /dev/i2c-3      /dev/i2c-4      /dev/i2c-6

  1. Then connect an i2c device to the i2c pin of the 40pin connector, here we take the ds1307 RTC module as an example
  2. i2c2-m1 i2c3-m0 i2c4-m0
    Sda pin Corresponding to pin 3 Corresponding to pin 27 Corresponding to pin 19
    Sck pin Corresponding to pin 5 Corresponding to pin 28 Corresponding to pin 28
    Vcc pin Corresponding to pin 1 Corresponding to pin 1 Corresponding to pin 1
    Gnd pin Corresponding to pin 6 Corresponding to pin 6 Corresponding to pin 6

     

  1. Then use the i2cdetect -y command, if the address of the connected i2c device can be detected, it means that i2c can be used normally
  2. orangepi@orangepi:~$ sudo i2cdetect -y 2      #i2c2 command

    orangepi@orangepi:~$ sudo i2cdetect -y 3      #i2c3 command

    orangepi@orangepi:~$ sudo i2cdetect -y 4      #i2c4 command

     

  1. Then you can run the ds1307.py test program in the examples to read the RTC time
  2. root@orangepi:~/wiringOP-Python# cd examples

    root@orangepi:~/wiringOP-Python/examples# python3 ds1307.py --device \

    "/dev/i2c-4"

    Thu 2023-01-05 14:57:55

    Thu 2023-01-05 14:57:56

    Thu 2023-01-05 14:57:57

    ^C

    exit

40pin UART test

  1. As can be seen from the table below, the available uarts of Orange Pi CM4 are three sets of uart buses: uart3, uart7 and uart9
 

As can be seen from the above table, i2c3_m0 and uart3_m0 are multiplexed pins, and both cannot be opened at the same time

  1. In the linux system, the UART in the 40 pins is closed by default, and it needs to be opened manually to use. The detailed steps are as follows:

    1. First run orangepi-config, common users remember to add sudo permission
    2. orangepi@orangepi:~$ sudo orangepi-config

    1. Then select System
    2.  

    1. Then select Hardware
    2.  

    1. Then use the arrow keys on the keyboard to navigate to the position shown in the figure below, and then use the space to select the UART configuration you want to open
    2.  

    1. Then select<Save> Save
    2.  

    1. Then select <Back>
    2.  

    1. Then select<Reboot>Restart the system for the configuration to take effect
    2.  

  1. After entering the Linux system, first confirm whether there is a device node corresponding to uart under /dev
  2. orangepi@orangepi:~# ls /dev/ttyS*

    /dev/ttyS1      /dev/ttyS3      /dev/ttyS7      /dev/ttyS9

  1. Then start to test the uart interface, first use the DuPont line to short the rx and tx of the uart interface to be tested
  2. uart3 uart7 uart9
    tx pin Corresponding to pin 28 Corresponding to pin 16 Corresponding to pin 29
    rx pin Corresponding to pin 27 Corresponding to pin 15 Corresponding to pin 22

     

  1. Use the serialTest.py program in the examples to test the loopback function of the serial port as shown below. If you can see the following print, it means that the serial port communication is normal

    1. Test UART3
    2. root@orangepi:~/wiringOP-Python/examples# python3 serialTest.py --device \

      "/dev/ttyS3"

      Out: 0: -> 0

      Out: 1: -> 1

      Out: 2: -> 2

      Out: 3: -> 3

      Out: 4:^C

      exit

    1. Test UART7
    2. root@orangepi:~/wiringOP-Python/examples# python3 serialTest.py --device \

      "/dev/ttyS7"

      Out: 0: -> 0

      Out: 1: -> 1

      Out: 2: -> 2

      Out: 3: -> 3

      Out: 4:^C

      exit

    1. Test UART9
    2. root@orangepi:~/wiringOP-Python/examples# python3 serialTest.py --device \

      "/dev/ttyS9"

      Out: 0: -> 0

      Out: 1: -> 1

      Out: 2: -> 2

      Out: 3: -> 3

      Out: 4:^C

      exit

Hardware watchdog test

The watchdog_test program is pre-installed in the Linux system released by Orange Pi, which can be tested directly.


The method to run the watchdog_test program is as follows:


a. The second parameter 10 indicates the counting time of the watchdog. If the dog is not fed within this time, the system will restart

b. We can feed the dog by pressing any key on the keyboard (except ESC). After feeding the dog, the program will print a line of keep alive to indicate that the dog is fed successfully

orangepi@orangepi:~$ sudo watchdog_test 10

open success

options is 33152,identity is sunxi-wdt

put_usr return,if 0,success:0

The old reset time is: 16

return ENOTTY,if -1,success:0

return ENOTTY,if -1,success:0

put_user return,if 0,success:0

put_usr return,if 0,success:0

keep alive

keep alive

keep alive

Check the serial number of RK3566 chip

The command to view the serial number of the RK3566 chip is as follows. The serial number of each chip is different, so the serial number can be used to distinguish multiple development boards.

orangepi@orangepi:~$ cat_serial.sh

Serial : 8fa18eaf489041f0

How to install Docker

  1. The linux image provided by Orange Pi has pre-installed Docker, but the Docker service is not enabled by default
  2. Use the enable_docker.sh script to enable the docker service, and then you can start using the docker command, and the docker service will be automatically started when the system is started next time

orangepi@orangepi:~$ enable_docker.sh

  1. Then you can use the following command to test docker, if you can run hello-world, it means that docker can be used normally
  2. orangepi@orangepi:~$ docker run hello-world

    Unable to find image 'hello-world:latest' locally

    latest: Pulling from library/hello-world

    256ab8fe8778: Pull complete

    Digest: sha256:7f0a9f93b4aa3022c3a4c147a449ef11e0941a1fd0bf4a8e6c9408b2600777c5

    Status: Downloaded newer image for hello-world:latest


    Hello from Docker!

    This message shows that your installation appears to be working correctly.

    .….

How to download and install arm64 version balenaEtcher

  1. The download address of balenaEtcher arm64 version is:

    1. The download address of the deb installation package is as follows, which needs to be installed before it can be used
    2. https://github.com/Itai-Nelken/BalenaEtcher-arm/releases/download/v1.7.9/balena-etcher-electron_1.7.9+5945ab1f_arm64.deb

    1. The download address of the AppImage version that does not need to be installed is as follows:
    2. https://github.com/Itai-Nelken/BalenaEtcher-arm/releases/download/v1.7.9/balenaEtcher-1.7.9+5945ab1f-arm64.AppImage

       

  1. How to install and use the deb version of balenaEtcher:

    1. The deb version of balenaEtcher installation command is as follows:
    2. orangepi@orangepi:~$ sudo apt install -y \

      --fix-broken ./balena-etcher-electron_1.7.9+5945ab1f_arm64.deb

    1. After the deb version of balenaEtcher is installed, it can be opened in the Application
    2.  

    1. The interface after balenaEtcher is opened is as follows:
    2.  

  1. How to use AppImage version of balenaEtcher:

    1. First add permissions to balenaEtcher
    2. orangepi@orangepi:~/Desktop$ chmod +x balenaEtcher-1.7.9+5945ab1f-arm64.AppImage

    1. Then select the AppImage version balenaEtcher, then click the right mouse button, and then click Execute to open balenaEtcher
    2.  

How to install BaoTa Linux panel

BaoTa Linux panel is a server management software that improves the efficiency of operation and maintenance. It supports one-click configuration of more than 100 server management functions such as LAMP/LNMP/cluster/monitoring/website/FTP/database/JAVA (excerpted from BaoTa Linux official website)

  1. First, you need to expand the size of the/tmp space. After setting, you need to restart the linux system of the development board. The command is as follows:

orangepi@orangepi:~$ sudo sed -i 's/nosuid/&,size=2G/' /etc/fstab

orangepi@orangepi:~$ sudo reboot

  1. After restarting, you can see that the size of /tmp space has changed to 2G
  2. orangepi@orangepi:~$ df -h | grep "/tmp"

    tmpfs      2.0G      12K      2.0G      1% /tmp

  1. Then enter the following command in the Linux system to start the installation of the BaoTa
  2. orangepi@orangepi:~$ sudo install_bt_panel.sh

  1. Then the installer will remind whether to install Bt-Panel to the /www folder, and then enter y
  2. +----------------------------------------------------------------------

    | Bt-WebPanel FOR CentOS/Ubuntu/Debian

    +----------------------------------------------------------------------

    | Copyright © 2015-2099 BT-SOFT(http://www.bt.cn) All rights reserved.

    +----------------------------------------------------------------------

    | The WebPanel URL will be http://SERVER_IP:8888 when installed.

    +----------------------------------------------------------------------


    Do you want to install Bt-Panel to the /www directory now?(y/n): y

  1. The next thing to do is to wait patiently. When you see the following print information output from the terminal, it means that the BaoTa has been installed. The entire installation process takes about 34 minutes, and there may be some differences depending on the network speed
  2.  

  1. At this time, enter the panel address shown above in the browser to open the login interface of the BaoTa Linux panel, and then enter the username and password shown in the above figure at the corresponding position to log in.

     
  2. After successfully logging into the pagoda, the following welcome interface will pop up. First, please read the user notice in the middle and drag it to the bottom, then you can select "I have agreed and read the "User Agreement"", and then click "Enter the panel" You can enter the BaoTa

  3.  

  1. If you do not have an account, you can go to the official website of the BaoTa (http://www.aapanel.com/) to register

     
  2. The final displayed interface is as shown in the figure below. You can intuitively see some status information of the Linux system on the development board, such as load status, CPU usage, memory usage, and storage space usage, etc.

  3.  

  1. For more functions of the pagoda, you can refer to the following information to explore by yourself
  2. Manual: http://docs.bt.cn

    Forum address: https://www.bt.cn/bbs

    GitHub Link: https://github.com/aaPanel/BaoTa

Setting Chinese environment and installing Chinese input method

Note, before installing the Chinese input method, please make sure that the Linux system used by the development board is a desktop system.

How to install Debian system

  1. First set the default locale to Chinese

    1. Enter the following command to start the configuration locale
    2. orangepi@orangepi:~$ sudo dpkg-reconfigure locales

    1. Then select zh_CN.UTF-8 UTF-8 in the pop-up interface (move up and down through the up and down direction keys on the keyboard, select through the space bar, and finally move the cursor to <OK> through the Tab key, and then return to car)
    2.  

    1. Then set the default locale as zh_CN.UTF-8
    2.  

    1. After exiting the interface, the locale setting will start, and the output displayed on the command line is as follows
    2. orangepi@orangepi:~$ sudo dpkg-reconfigure locales

      Generating locales (this might take a while)...

      en_US.UTF-8... done

      zh_CN.UTF-8... done

      Generation complete.

  1. Then open Input Method
  2.  

  1. Then Select OK
  2.  

  1. Then Select Yes
  2.  

  1. Then Select fcitx
  2.  

  1. Then Select OK
  2.  

  1. Then restart the Linux system to make the configuration take effect

  2. Then open Fcitx configuration

  3.  

  1. Then click the + sign in the position shown in the figure below
  2.  

  1. Then search Google Pinyin and click OK
  2.  

  1. Then bringGoogle Pinyin to the front
  2.  

     

  1. Then open the Geany editor to test the Chinese input method
  2.  

  1. The Chinese input method test is as follows
  2.  

  1. The Chinese and English input methods can be switched through the Ctrl+Space shortcut key

  2. If the entire system needs to be displayed in Chinese, you can set the variables in /etc/default/locale to zh_CN.UTF-8

  3. orangepi@orangepi:~$ sudo vim /etc/default/locale

    # File generated by update-locale

    LC_MESSAGES=zh_CN.UTF-8

    LANG=zh_CN.UTF-8

    LANGUAGE=zh_CN.UTF-8

  1. Then restart the system and you can see that the system is displayed in Chinese
  2.  

How to install Ubuntu 20.04 system

  1. Open first Language Support
 
  1. Then find the Chinese (China) option
  2.  

  1. Then please use the left mouse button to select Chinese (China) and hold it down, then drag it up to the initial position, and the display after dragging is as shown in the figure below:
  2.  

    Note that this step is not easy to drag, please be patient and try a few more times.

  1. Then select Apply System-Wide to apply the Chinese settings to the entire system
  2.  

  1. Then set Keyboard input method system as fcitx
  2.  

  1. Then restart the Linux system to make the configuration take effect

  2. After re-entering the system, please choose not to ask me again in the following interface, and then please decide whether the standard folder should also be updated to Chinese according to your preferences

  3.  

  1. Then you can see that the desktop is displayed in Chinese
  2.  

  1. Then we can open Geany to test the Chinese input method, the opening method is as shown in the figure below
  2.  

  1. After openingGeany, the default is English input method, we can switch to Chinese input method through Ctrl+Spaceshortcut key, and then we can input Chinese
  2.  

How to install Ubuntu 22.04 system

  1. Open first Language Support
 
  1. Then find the Chinese (China) option
  2.  

  1. Then please use the left mouse button to select Chinese (China) and hold it down, then drag it up to the initial position, and the display after dragging is as shown in the figure below:
  2.  

    Note that this step is not easy to drag, please be patient and try a few more times.

  1. Then select Apply System-Wide to apply the Chinese settings to the entire system
  2.  

  1. Then restart the Linux system to make the configuration take effect

  2. After re-entering the system, please choose not to ask me again in the following interface, and then please decide whether the standard folder should also be updated to Chinese according to your preferences

  3.  

  1. Then you can see that the desktop is displayed in Chinese
  2.  

  1. Then open the Fcitx5 configuration program
  2.  

  1. Then choose to use Pinyin input method
  2.  

  1. The interface after selection is as shown below, and then click OK
  2.  

  1. Then we can open Geanyto test the Chinese input method, the opening method is as shown in the figure below
  2.  

  1. After opening Geany, the default is English input method, we can switch to Chinese input method through Ctrl+Space shortcut key, and then we can input Chinese
  2.  

How to remotely log in to the desktop of the Linux system

Remote login using NoMachine

Please make sure that the Ubuntu or Debian system installed on the development board is a desktop version. In addition, NoMachine also provides detailed usage documents. It is strongly recommended to read this document to familiarize yourself with the use of NoMachine. The document link is as follows: Please make sure that the Ubuntu or Debian system installed on the development board is a desktop version. In addition, NoMachine also provides detailed usage documents. It is strongly recommended to read this document to familiarize yourself with the use of NoMachine. The document link is as follows:

https://knowledgebase.nomachine.com/DT10R00166

NoMachine supports Windows, Mac, Linux, iOS and Android platforms, so we can remotely log in and control the Orange Pi development board through NoMachine on a variety of devices. The following demonstrates how to remotely log in to the Linux system desktop of the Orange Pi development board through NoMachine in Windows. For installation methods on other platforms, please refer to the official documentation of NoMachine.

Before operation, please make sure that the Windows computer and the development board are in the same LAN, and you can log in to the Ubuntu or Debian system of the development board through ssh.

  1. First download the installation package of the NoMachine software Linux arm64 deb version, and then install it in the Linux system of the development board

    1. Since RK3566 is an SOC with ARMv8 architecture, the system we use is Ubuntu or Debian, so here we need to download the NoMachine for ARM ARMv8 DEB installation package. The download link is as follows:
    2. Note that this download link may change, please look for the deb package of the Armv8/Arm64 version.

      https://downloads.nomachine.com/download/?id=116&distro=ARM

       

    1. In addition, you can also download the NoMachine installation package in the official tool
    2.  

      First enter the remote login software-NoMachine folder

       

      Then download the arm64 version of the deb installation package

       

    1. Then upload the downloaded nomachine_x.x.x_x_arm64.deb to the Linux system of the development board

    2. Then use the following command to install NoMachine in the Linux system of the development board NoMachine

    3. orangepi@orangepi:~$ sudo dpkg -i nomachine_x.x.x_x_arm64_arm64.deb

  1. Then download the installation package of the Windows version of the NoMachine software, the download address is as follows
  2. Note that this download link may change.

    https://downloads.nomachine.com/download/?id=8

     

  1. Then install NoMachine in Windows, please restart the computer after installation

  2. Then open NoMachine in Window NoMachine

  3.  

  1. After NoMachine starts, it will automatically scan other devices installed with NoMachine in the LAN. After entering the main interface of NoMachine, you can see that the development board is already in the list of connectable devices, and then click the position shown in the red box in the figure below You can start to log in to the Linux system desktop of the development board
  2.  

  1. Then Click OK
  2.  

  1. Then enter the user name and password of the Linux system of the development board in the corresponding position in the figure below, and then click OK to start logging in
  2.  

  1. Then click OK in the next interface

  2. Finally, you can see the desktop of the development board Linux system

     

Use VNC to log in remotely

Before operation, please make sure that the Windows computer and the development board are in the same LAN, and you can log in to the Ubuntu or Debian system of the development board through ssh.

Ubuntu20.04 has many problems testing VNC, please do not use this method.

  1. First run the set_vnc.sh script to set up vnc, remember to add sudo permission

orangepi@orangepi:~$ sudo set_vnc.sh

You will require a password to access your desktops.


Password:          # Set the vnc password here, 8 characters

Verify:          # Set the vnc password here, 8 characters

Would you like to enter a view-only password (y/n)? n

xauth: file /root/.Xauthority does not exist


New 'X' desktop is orangepicm4:1


Creating default startup script /root/.vnc/xstartup

Starting applications specified in /root/.vnc/xstartup

Log file is /root/.vnc/orangepicm4:1.log


Killing Xtightvnc process ID 3047


New 'X' desktop is orangepicm4:1


Starting applications specified in /root/.vnc/xstartup

Log file is /root/.vnc/orangepicm4:1.log

  1. The steps to use MobaXterm software to connect to the Linux system desktop of the development board are as follows:

    1. First click on Session, then select VNC, then fill in the IP address and port of the development board, and finally click OK to confirm
    2.  

    1. Then enter the VNC password set earlier
    2.  

    1. After successful login, the interface is displayed as shown in the figure below, and then you can remotely operate the desktop of the Linux system on the development board

       

Some programming language tests supported by Linux system

Debian Bullseye System

  1. Debian Bullseye has a gcc compilation tool chain installed by default, which can directly compile C language programs in the Linux system of the development board

    1. The version of gcc is as follows
    2. orangepi@orangepi:~$ gcc --version

      gcc (Debian 10.2.1-6) 10.2.1 20210110

      Copyright (C) 2020 Free Software Foundation, Inc.

      This is free software; see the source for copying conditions. There is NO

      warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    1. Write the hello_world.c program in C language
    2. orangepi@orangepi:~$ vim hello_world.c

      #include <stdio.h>


      int main(void)

      {

      printf("Hello World!\n");


      return 0;

      }

    1. Then compile and run hello_world.c
    2. orangepi@orangepi:~$ gcc -o hello_world hello_world.c

      orangepi@orangepi:~$ ./hello_world

      Hello World!

  1. Debian Bullseye has Python3 installed by default

    1. The specific version of Python is as follows
    2. orangepi@orangepi:~$ python3

      Python 3.9.2 (default, Feb 28 2021, 17:03:44)

      [GCC 10.2.1 20210110] on linux

      Type "help", "copyright", "credits" or "license" for more information.

      >>>

    1. Write hello_world.py program in Python language
    2. orangepi@orangepi:~$ vim hello_world.py

      print('Hello World!')

    1. The result of running hello_world.pyis as follows
    2. orangepi@orangepi:~$ python3 hello_world.py

      Hello World!

  1. Debian Bullseye does not install Java compilation tools and runtime environment by default

    1. You can use the following command to install openjdk, the latest version in Debian Bullseye is openjdk-17
    2. orangepi@orangepi:~$ sudo apt install -y openjdk-17-jdk

    1. After installation, you can check the version of Java
    2. orangepi@orangepi:~$ java --version

    1. Write the Java version hello_world.java
    2. orangepi@orangepi:~$ vim hello_world.java

      public class hello_world

      {

      public static void main(String[] args)
      {
      System.out.println("Hello World!");
      }

      }

    1. Then compile and run hello_world.java
    2. orangepi@orangepi:~$ javac hello_world.java

      orangepi@orangepi:~$ java hello_world

      Hello World!

Debian Bookworm System

  1. Debian Bookworm is installed with the gcc compilation tool chain by default, which can directly compile C language programs in the Linux system of the development board

    1. The version of gcc is as follows
    2. orangepi@orangepi:~$ gcc --version

      gcc (Debian 12.2.0-14) 12.2.0

      Copyright (C) 2022 Free Software Foundation, Inc.

      This is free software; see the source for copying conditions. There is NO

      warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    1. Write the hello_world.c program in C language
    2. orangepi@orangepi:~$ vim hello_world.c

      #include <stdio.h>


      int main(void)

      {

      printf("Hello World!\n");


      return 0;

      }

    1. Then compile and run hello_world.c
    2. orangepi@orangepi:~$ gcc -o hello_world hello_world.c

      orangepi@orangepi:~$ ./hello_world

      Hello World!

  1. Debian Bookworm has Python3 installed by default

    1. The specific version of Python is as follows
    2. orangepi@orangepi:~$ python3

      Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux

      Type "help", "copyright", "credits" or "license" for more information.

      >>>

      Use the Ctrl+D shortcut to exit python's interactive mode.

    1. Write hello_world.py program in Python language
    2. orangepi@orangepi:~$ vim hello_world.py

      print('Hello World!')

    1. The result of running hello_world.py is as follows
    2. orangepi@orangepi:~$ python3 hello_world.py

      Hello World!

  1. Debian Bookworm does not install Java compilation tools and runtime environment by default

    1. You can use the following command to install openjdk, the latest version in Debian Bookworm is openjdk-17
    2. orangepi@orangepi:~$ sudo apt install -y openjdk-17-jdk

    1. After installation, you can check the version of Java
    2. orangepi@orangepi:~$ java --version

    1. Write the Java version hello_world.java
    2. orangepi@orangepi:~$ vim hello_world.java

      public class hello_world

      {

      public static void main(String[] args)
      {
      System.out.println("Hello World!");
      }

      }

    1. Then compile and run hello_world.java
    2. orangepi@orangepi:~$ javac hello_world.java

      orangepi@orangepi:~$ java hello_world

      Hello World!

Ubuntu Focal system

  1. Ubuntu Focal has a gcc compilation tool chain installed by default, which can directly compile C language programs in the Linux system of the development board

    1. The version of gcc is as follows
    2. orangepi@orangepi:~$ gcc --version

      gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0

      Copyright (C) 2019 Free Software Foundation, Inc.

      This is free software; see the source for copying conditions. There is NO

      warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    1. Write the hello_world.c program in C language
    2. orangepi@orangepi:~$ vim hello_world.c

      #include <stdio.h>


      int main(void)

      {

      printf("Hello World!\n");


      return 0;

      }

    1. Then compile and run hello_world.c
    2. orangepi@orangepi:~$ gcc -o hello_world hello_world.c

      orangepi@orangepi:~$ ./hello_world

      Hello World!

  1. Ubuntu Focal has Python3 installed by default

    1. The specific version of Python3 is as follows
    2. orangepi@orangepi:~$ python3

      Python 3.8.10 (default, Nov 14 2022, 12:59:47)

      [GCC 9.4.0] on linux

      Type "help", "copyright", "credits" or "license" for more information.

      >>>

    1. Write hello_world.py program in Python language
    2. orangepi@orangepi:~$ vim hello_world.py

      print('Hello World!')

    1. The result of running hello_world.py is as follows
    2. orangepi@orangepi:~$ python3 hello_world.py

      Hello World!

  1. Ubuntu Focal does not install Java compilation tools and operating environment by default

    1. You can use the following command to install openjdk-17
    2. orangepi@orangepi:~$ sudo apt install -y openjdk-17-jdk

    1. After installation, you can check the version of Java
    2. orangepi@orangepi:~$ java --version

      openjdk 17.0.2 2022-01-18

      OpenJDK Runtime Environment (build 17.0.2+8-Ubuntu-120.04)

      OpenJDK 64-Bit Server VM (build 17.0.2+8-Ubuntu-120.04, mixed mode, sharing)

    1. Write the Java version hello_world.java
    2. orangepi@orangepi:~$ vim hello_world.java

      public class hello_world

      {

      public static void main(String[] args)
      {
      System.out.println("Hello World!");
      }

      }

    1. Then compile and run hello_world.java
    2. orangepi@orangepi:~$ javac hello_world.java

      orangepi@orangepi:~$ java hello_world

      Hello World!

Ubuntu Jammy system

  1. Ubuntu Jammy has a gcc compilation tool chain installed by default, which can directly compile C language programs in the Linux system of the development board

    1. The version of gcc is as follows
    2. orangepi@orangepi:~$ gcc --version

      gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0

      Copyright (C) 2021 Free Software Foundation, Inc.

      This is free software; see the source for copying conditions. There is NO

      warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    1. Write the hello_world.c program in C language
    2. orangepi@orangepi:~$ vim hello_world.c

      #include <stdio.h>


      int main(void)

      {

      printf("Hello World!\n");


      return 0;

      }

    1. Then compile and run hello_world.c
    2. orangepi@orangepi:~$ gcc -o hello_world hello_world.c

      orangepi@orangepi:~$ ./hello_world

      Hello World!

  1. Ubuntu Jammy has Python3 installed by default

    1. The specific version of Python3 is as follows
    2. orangepi@orangepi:~$ python3

      Python 3.10.4 (main, Apr 2 2022, 09:04:19) [GCC 11.2.0] on linux

      Type "help", "copyright", "credits" or "license" for more information.

      >>>

    1. Write hello_world.py program in Python language
    2. orangepi@orangepi:~$ vim hello_world.py

      print('Hello World!')

    1. The result of running hello_world.py is as follows
    2. orangepi@orangepi:~$ python3 hello_world.py

      Hello World!

  1. Ubuntu Jammy does not install Java compilation tools and runtime environment by default

    1. You can use the following command to install openjdk-18
    2. orangepi@orangepi:~$ sudo apt install -y openjdk-18-jdk

    1. After installation, you can check the version of Java
    2. orangepi@orangepi:~$ java --version

      openjdk 18-ea 2022-03-22

      OpenJDK Runtime Environment (build 18-ea+36-Ubuntu-1)

      OpenJDK 64-Bit Server VM (build 18-ea+36-Ubuntu-1, mixed mode, sharing)

    1. Write the Java version hello_world.java
    2. orangepi@orangepi:~$ vim hello_world.java

      public class hello_world

      {

      public static void main(String[] args)
      {
      System.out.println("Hello World!");
      }

      }

    1. Then compile and run hello_world.java
    2. orangepi@orangepi:~$ javac hello_world.java

      orangepi@orangepi:~$ java hello_world

      Hello World!

How to install QT

  1. Use the script below to install QT5 and QT Creator

orangepi@orangepi:~$ install_qt.sh

  1. After installation, the version number of QT will be automatically printed

    1. The qt version that comes with Ubuntu 20.04 is 5.12.8
    2. orangepi@orangepi:~$ install_qt.sh

      ......

      QMake version 3.1

      Using Qt version 5.12.8 in /usr/lib/aarch64-linux-gnu

    1. The QT version that comes with Ubuntu 22.04 is 5.15.3
    2. orangepi@orangepi:~$ install_qt.sh

      ......

      QMake version 3.1

      Using Qt version 5.15.3 in /usr/lib/aarch64-linux-gnu

    1. The QT version that comes with Debian11 is 5.15.2
    2. orangepi@orangepi:~$ install_qt.sh

      ......

      QMake version 3.1

      Using Qt version 5.15.2 in /usr/lib/aarch64-linux-gnu

    1. The QT version that comes with Debian12 is 5.15.8
    2. orangepi@orangepi:~$ install_qt.sh

      ......

      QMake version 3.1

      Using Qt version 5.15.8 in /usr/lib/aarch64-linux-gnu

  1. Then you can see the startup icon of QT Creator in Applications
  2.  

    You can also use the following command to open QT Creator

    orangepi@orangepi:~$ qtcreator

    During the startup process of QT and QT application, if the following error is prompted, please ignore it directly, this error will not affect the operation of the application.


    libGL error: failed to create dri screen

    libGL error: failed to load driver: rockchip

    libGL error: failed to create dri screen

    libGL error: failed to load driver: rockchip

  1. The interface after QT Creator is opened is as follows
  2.  

  1. The version of QT Creator is as follows

    1. The default version of QT Creator in Ubuntu20.04 is as follows
    2.  

    1. The default version of QT Creator in Ubuntu22.04 is as follows
    2.  

    1. The default version of QT Creator in Debian11 is as follows
    2.  

    1. The default version of QT Creator in Debian12 is as follows
    2.  

  1. Then set the QT

    1. open first Help->About Plugins...
    2.  

    1. Then remove the tick of ClangCodeModel
    2.  

    1. After setting, you need to restart QT Creator

    2. Then make sure the GCC compiler used by QT Creator, if the default is Clang, please modify it to GCC

    3. Debian12 please skip this step.

       

       

  1. Then you can open a sample code
  2.  

  1. After clicking the sample code, the corresponding instruction document will be opened automatically, you can read the instruction carefully
  2.  

  1. Then click next Configure Project
  2.  

  1. Then click the green triangle in the lower left corner to compile and run the sample code
  2.  

  1. After waiting for a period of time, the interface shown in the figure below will pop up, which means that QT can compile and run normally
  2.  

  1. References
  2. https://wiki.qt.io/Install_Qt_5_on_Ubuntu

    https://download.qt.io/archive/qtcreator

    https://download.qt.io/archive/qt

How to install ROS

How to install ROS 1 Noetic on Ubuntu 20.04

  1. The current active version of ROS 1 is as follows, and the recommended version is Noetic Ninjemys
 
 

http://docs.ros.org

https://wiki.ros.org/Distributions

  1. The official installation document link of ROS 1 Noetic Ninjemys is as follows:
  2. http://wiki.ros.org/noetic/Installation/Ubuntu

  1. In the official installation document of ROS Noetic Ninjemys, Ubuntu recommends using Ubuntu20.04, so please make sure that the system used by the development board is Ubuntu20.04 desktop system
  2. http://wiki.ros.org/noetic/Installation

     

  1. Then use the following script to install ros1
  2. orangepi@orangepicm4:~$ install_ros.sh ros1

  1. Before using the ROS tool, you first need to initialize rosdep, and then you can quickly install some system dependencies and some core components in ROS when compiling the source code
  2. Note that running the following command needs to ensure that the development board can access github normally, otherwise an error will be reported due to network problems.


    The install_ros.sh script will try to modify /etc/hosts and automatically run the following commands. However, this method cannot guarantee normal access to github every time. If the following error is prompted after installing ros1 in install_ros.sh, please find other ways to allow the Linux system of the development board to access github normally, and then manually run the following Order.


    https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml

    Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml

    ERROR: error loading sources list:

    The read operation timed out

    orangepi@orangepi:~$ source /opt/ros/noetic/setup.bash

    orangepi@orangepi:~$ sudo rosdep init

    Wrote /etc/ros/rosdep/sources.list.d/20-default.list

    Recommended: please run


    rosdep update

    orangepi@orangepi:~$ rosdep update

    reading in sources list data from /etc/ros/rosdep/sources.list.d

    Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml

    Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml

    Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml

    Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml

    Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml

    Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml

    Skip end-of-life distro "ardent"

    Skip end-of-life distro "bouncy"

    Skip end-of-life distro "crystal"

    Skip end-of-life distro "dashing"

    Skip end-of-life distro "eloquent"

    Add distro "foxy"

    Add distro "galactic"

    Skip end-of-life distro "groovy"

    Add distro "humble"

    Skip end-of-life distro "hydro"

    Skip end-of-life distro "indigo"

    Skip end-of-life distro "jade"

    Skip end-of-life distro "kinetic"

    Skip end-of-life distro "lunar"

    Add distro "melodic"

    Add distro "noetic"

    Add distro "rolling"

    updated cache in /home/orangepi/.ros/rosdep/sources.cache

  1. Then open a command line terminal window on the desktop, and then use the test_ros.sh script to start a small turtle routine to test whether ROS can be used normally
  2. orangepi@orangepi:~$ test_ros.sh

  1. After running the test_ros.sh script, a little turtle as shown in the figure below will pop up
  2.  

  1. Then please keep the terminal window just opened at the top
  2.  

  1. At this time, press the direction keys on the keyboard to control the little turtle to move up, down, left, and right
  2.  

How to install ROS 2 Galactic on Ubuntu 20.04

  1. The current active version of ROS 2 is as follows, and the recommended version is Galactic Geochelone
 
 

http://docs.ros.org

http://docs.ros.org/en/galactic/Releases.html

  1. The link to the official ROS 2 Galactic Geochelone installation documentation is as follows:
  2. docs.ros.org/en/galactic/Installation.html

    http://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.html

  1. In the official ROS 2 Galactic Geochelone installation document, Ubuntu Linux recommends using Ubuntu 20.04, so please make sure that the system used by the development board is the Ubuntu 20.04 desktop system. There are several ways to install ROS 2. The following demonstrates how to install it through Debian packages ROS 2 Galactic Geochelone

  2. Use the install_ros.sh script to install ros2

  3. orangepi@orangepi:~$ install_ros.sh ros2

  1. The install_ros.sh script will automatically run the ros2 -h command after installing ros2. If you can see the following print, it means that the ros2 installation is complete
  2. usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...


    ros2 is an extensible command-line tool for ROS 2.


    optional arguments:

    -h, --help show this help message and exit


    Commands:

    action Various action related sub-commands
    bag Various rosbag related sub-commands
    component Various component related sub-commands
    daemon Various daemon related sub-commands
    doctor Check ROS setup and other potential issues
    interface Show information about ROS interfaces
    launch Run a launch file
    lifecycle Various lifecycle related sub-commands
    multicast Various multicast related sub-commands
    node Various node related sub-commands
    param Various param related sub-commands
    pkg Various package related sub-commands
    run Run a package specific executable
    security Various security related sub-commands
    service Various service related sub-commands
    topic Various topic related sub-commands
    wtf Use `wtf` as alias to `doctor`


    Call `ros2 <command> -h` for more detailed usage.
  1. Then you can use the test_ros.sh script to test whether ROS 2 is installed successfully. If you can see the following print, it means that ROS 2 can run normally
  2. orangepi@orangepicm4:~$ test_ros.sh

    [INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1'

    [INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]

    [INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2'

    [INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]

    [INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'

    [INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]

  1. Run the following command to open rviz2
  2. orangepi@orangepi:~$ source /opt/ros/galactic/setup.bash

    orangepi@orangepi:~$ ros2 run rviz2 rviz2

     

  1. For how to use ROS, please refer to the documentation of ROS 2
  2. http://docs.ros.org/en/galactic/Tutorials.html

How to install ROS 2 Humble on Ubuntu 22.04

  1. Use the install_ros.sh script to install ros2

orangepi@orangepi:~$ install_ros.sh ros2

  1. The install_ros.sh script will automatically run the ros2 -h command after installing ros2. If you can see the following print, it means that the ros2 installation is complete
  2. usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...


    ros2 is an extensible command-line tool for ROS 2.


    optional arguments:

    -h, --help show this help message and exit


    Commands:

    action Various action related sub-commands
    bag Various rosbag related sub-commands
    component Various component related sub-commands
    daemon Various daemon related sub-commands
    doctor Check ROS setup and other potential issues
    interface Show information about ROS interfaces
    launch Run a launch file
    lifecycle Various lifecycle related sub-commands
    multicast Various multicast related sub-commands
    node Various node related sub-commands
    param Various param related sub-commands
    pkg Various package related sub-commands
    run Run a package specific executable
    security Various security related sub-commands
    service Various service related sub-commands
    topic Various topic related sub-commands
    wtf Use `wtf` as alias to `doctor`


    Call `ros2 <command> -h` for more detailed usage.
  1. Then you can use the test_ros.sh script to test whether ROS 2 is installed successfully. If you can see the following print, it means that ROS 2 can run normally
  2. orangepi@orangepicm4:~$ test_ros.sh

    [INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1'

    [INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]

    [INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2'

    [INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]

    [INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'

    [INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]

  1. Run the following command to open rviz2
  2. orangepi@orangepi:~$ source /opt/ros/humble/setup.bash

    orangepi@orangepi:~$ ros2 run rviz2 rviz2

     

  1. Reference documents
  2. http://docs.ros.org/en/humble/index.html

    http://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html

How to install kernel header files

  1. The Linux image released by OPi comes with the deb package of the kernel header file by default, and the storage location is /opt/

orangepi@orangepi:~$ ls /opt/linux-headers*

/opt/linux-headers-legacy-rockchip-rk356x_x.x.x_arm64.deb

  1. Use the following command to install the deb package of the kernel header file
  2. The name of the kernel header file deb package needs to be replaced with the actual name, please do not copy it.

    orangepi@orangepi:~$ sudo dpkg -i /opt/linux-headers-legacy-rockchip-rk356x_1.x.x_arm64.deb

  1. After installation, you can see the folder where the kernel header files are located under /usr/src
  2. orangepi@orangepi:~$ ls /usr/src

    linux-headers-5.10.160-rockchip-rk356x

  1. Then you can write a hello kernel module to test the kernel header file

    1. First write the code of the hello kernel module, as follows:
    2. orangepi@orangepi:~$ vim hello.c

      #include <linux/init.h>

      #include <linux/module.h>


      static int hello_init(void)

      {

      printk("Hello Orange Pi -- init\n");


      return 0;

      }

      static void hello_exit(void)

      {

      printk("Hello Orange Pi -- exit\n");


      return;

      }


      module_init(hello_init);

      module_exit(hello_exit);


      MODULE_LICENSE("GPL");

    1. Then write the Makefile for compiling the hello kernel module, as follows:
    2. orangepi@orangepi:~$ vim Makefile

      ifneq ($(KERNELRELEASE),)

      obj-m:=hello.o

      else

      KDIR :=/lib/modules/$(shell uname -r)/build

      PWD :=$(shell pwd)

      all:

      make -C $(KDIR) M=$(PWD) modules

      clean:

      rm -f *.ko *.o *.mod.o *.mod *.symvers *.cmd *.mod.c *.order

      endif

    1. Then use the make command to compile the hello kernel module. The output of the compilation process is as follows:
    2. If there is a problem with compiling the code you copied here, please go to the official tool to download the source code and upload it to the Linux system of the development board for testing.

      orangepi@orangepi:~$ make

      make -C /lib/modules/5.10.160-rockchip-35xx/build M=/home/orangepi modules

      make[1]: Entering directory '/usr/src/linux-headers-5.10.160-rockchip-rk35xx'

      CC [M] /home/orangepi/hello.o
      MODPOST /home/orangepi/Module.symvers
      CC [M] /home/orangepi/hello.mod.o
      LD [M] /home/orangepi/hello.ko

      make[1]: Leaving directory '/usr/src/linux-headers-5.10.160-rockchip-rk35xx'

    1. After compiling, the hello.ko kernel module will be generated
    2. orangepi@orangepi:~$ ls *.ko

      hello.ko

    1. Use the insmodcommand to insert the hello.ko kernel module into the kernel
    2. orangepi@orangepi:~$ sudo insmod hello.ko

    1. Then use the demsg command to view the output of the hello.ko kernel module. If you can see the output below, it means that thehello.ko kernel module is loaded correctly.
    2. orangepi@orangepi:~$ dmesg | grep "Hello"

      [ 2871.893988] Hello Orange Pi -- init

    1. Use the rmmod command to uninstall the hello.ko kernel module
    2. orangepi@orangepi:~$ sudo rmmod hello

      orangepi@orangepi:~$ dmesg | grep "Hello"

      [ 2871.893988] Hello Orange Pi -- init

      [ 3173.800892] Hello Orange Pi -- exit

Use of Raspberry Pi 5 Inch screen

How to assemble the Raspberry Pi 5 Inch screen

  1. First prepare the required accessories

    1. Raspberry Pi 5-inch MIPI LCD display + Touch screen
    2. Raspberry Pi 5-inch MIPI LCD display + Touch screenis shown in the figure below

       

    1. 15pin MIPI cable
    2.  

  1. Then connect the 15pin MIPI cable to the Raspberry Pi 5-inch screen as shown in the figure below (note the orientation of the insulating surface)
  2.  

  1. Finally connect to the LCD interface of the Orange Pi CM4 development board
  2.  

How to open Raspberry Pi 5-inch screen configuration

  1. By default, the Linux image does not enable the configuration of the Raspberry Pi 5-inch screen. If you need to use the Raspberry Pi 5-inch screen, you need to manually open it.

  2. The steps to open the mipi lcd configuration are as follows:

    1. First run orangepi-config, common users remember to add sudo permission
    2. orangepi@orangepi:~$ sudo orangepi-config

    1. Then select System
    2.  

    1. Then select Hardware
    2.  

    1. Then use the arrow keys on the keyboard to navigate to raspi-7inch-touchscreen, and then use the space to select
    2.  

    1. Then select <Save> Save
    2.  

    1. Then select <Back>
    2.  

    1. Then select <Reboot> Restart the system for the configuration to take effect
    2.  

      The above settings will eventually add the configuration of overlays=raspi-7inch-touchscreen to /boot/orangepiEnv.txt. After setting, you can check it first. If this configuration does not exist, then there is a problem with the settings.

      If you find it troublesome to use orangepi-config, you can also use the vim editor to open /boot/orangepiEnv.txt, and then add the configuration of overlays=raspi-7inch-touchscreen is also possible.


      orangepi@orangepi:~$ cat /boot/orangepiEnv.txt | grep "raspi"

      overlays=raspi-7inch-touchscreen # sample configuration

  1. After startup, you can see the display of the LCD screen as follows:
  2.  

The method of server version image rotation display direction

  1. Add extraargs=fbcon=rotate:the direction to rotate in /boot/orangepiEnv.txt This line configuration can set the direction displayed by the server version of the Linux system, where the number after fbcon=rotate: can be set as:
    1. 0: normal screen (default is landscape)

    2. 1: Turn clockwise 90 degrees

    3. 2: Flip 180 degrees

    4. 3: Turn clockwise 270 degrees

    5. orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt

      overlays=lcd1

      extraargs=cma=64M fbcon=rotate:3

      Note that if there is the line extraargs=cma=64M in /boot/orangepiEnv.txt by default, the configuration fbcon=rotate:3 can be added after extraargs=cma=64M (separated by spaces).

  1. Then restart the Linux system and you can see that the direction displayed on the LCD screen has been rotated

Method of rotating display and touch direction of desktop version image

  1. First open Display Settings in Linux
 
  1. Then select the direction you want to rotate in Rotation

    1. None: no rotation

    2. Left: rotate left 90 degrees

    3. Inverted: Flip up and down, which is equivalent to rotating 180 degrees

    4. Right: rotate right 90 degrees

    5.  

  1. Then click Apply
  2.  

  1. Then select Keep this configuration
  2.  

  1. At this point, the screen display has been rotated, and then close the Display program

  2. The above steps will only select the display direction, and will not rotate the direction of the touch. Use the set_lcd_rotate.sh script to rotate the direction of the touch. After the script is set, it will automatically restart, and then you can test whether the touch has been used normally.

    1. None: no rotation
    2. orangepi@orangepi:~$ set_lcd_rotate.sh none

    1. Left: rotate left 90 degrees
    2. orangepi@orangepi:~$ set_lcd_rotate.sh left

    1. Inverted: Flip up and down, which is equivalent to rotating 180 degrees
    2. orangepi@orangepi:~$ set_lcd_rotate.sh inverted

    1. Right: rotate right 90 degrees
    2. orangepi@orangepi:~$ set_lcd_rotate.sh right

      The set_lcd_rotate.sh script mainly does four things:


      1. Rotate the direction displayed by the framebuffer

      2. Rotate the direction of the touch

      3. Turn off the boot logo

      4. Restart the system


      Rotating the touch direction is achieved by adding the line Option "TransformationMatrix" "x x x x x x x x x" to /usr/share/X11/xorg.conf.d/40-libinput.conf Where "x x x x x x x x x" is configured differently for different directions.

  1. Touch rotation reference
  2. https://wiki.ubuntu.com/X/InputCoordinateTransformation

How to use the eDP screen

Assembly method of eDP screen

  1. Currently only one eDP screen is compatible, including the following accessories:

    1. 0.5 pitch 30pin single-head cable in the same direction

       

    2. eDP display

       

  2. Connect the 30pin eDP interface of the screen and the eDP interface of the development board with a 30pin single-head cable in the same direction

     

How to open the eDP screen configuration

Note that the method described below is only applicable to the adapted eDP screen. If the customer uses an unadapted screen, it cannot be turned on according to the following method.

  1. By default, the Linux image does not have the configuration to open the eDP screen. If you need to use the eDP screen, you need to open it manually.

  2. The steps to open the eDP screen configuration are as follows:

    1. First run orangepi-config, ordinary users remember to add > sudo permission

      orangepi@orangepi:~$ sudo orangepi-config

    2. Then select System

       

    3. Then select Hardware

       

    4. Then use the arrow keys on the keyboard to navigate to edp, and > then use the space to select

       

    5. Then select <Save> to save

       

    6. Then select <Back>

       

    7. Then select <Reboot> to restart the system to make the > configuration take effect

       

      The above settings will eventually add the configuration of overlays=edp to /boot/orangepiEnv.txt. After setting, you can check it first. If this configuration does not exist, then there is a problem with the settings.

      If you find it troublesome to use orangepi-config, you can also use the vim editor to open /boot/orangepiEnv.txt, and then add the configuration of overlays=edp.


      orangepi@orangepi:~$ cat /boot/orangepiEnv.txt | grep "edp"

      overlays=edp        #sample configuration

  3. After startup, you can see the display of the eDP screen as follows:

     

  1. By default, the switch logo will only be displayed in the desktop version of the system

  2. Set the bootlogo variable to false in /boot/orangepiEnv.txt to turn off the switch logo

    orangepi@orangepi:~$ vim /boot/orangepiEnv.txt

    verbosity=1

    bootlogo=false

  3. Set the bootlogo variable to true in /boot/orangepiEnv.txt to enable the switch logo

    orangepi@orangepi:~$ vim /boot/orangepiEnv.txt

    verbosity=1

    bootlogo=true

  4. The location of the boot logo image in the Linux system is

  5. /usr/share/plymouth/themes/orangepi/watermark.png

  1. After replacing the boot logo picture, you need to run the following command to take effect
  2. orangepi@orangepi:~$ sudo update-initramfs -u

How to use the ZFS file system

How to install ZFS

Before installing zfs, please make sure that the Linux image used is the latest version. In addition, if zfs is already installed in the system, it needs to be installed again.

Before installing zfs, you need to install the kernel header file first. For the method of installing the kernel header file, please refer to the instructions in the section on the method of installing the kernel header file.

In Ubuntu20.04, Ubuntu22.04 and Debian11 systems, zfs cannot be installed directly through apt, because the default apt source zfs version is lower than 2.1.6, and there is a problem of incompatibility with rk Linux5.10 kernel. This problem is fixed in zfs version 2.1.6 and later.

To solve this problem, we provide a zfs deb package that can be installed normally, which can be downloaded from the official tool of the development board. Open the official tool, and enter the zfs-related deb package folders used by Ubuntu and Debian systems. You can see three types of deb packages: Ubuntu20.04, Ubuntu22.04 and Debian11. Please download the required version.

 

After downloading the zfs deb packages of the corresponding version, please upload them to the Linux system of the development board. For the upload method, please refer to the description in the section of the method of uploading files to the Linux system of the development board.

After the upload is complete, use the cd command in the command line of the development board Linux system to enter the directory of the deb package, and then use the following command to install the deb package of zfs.

orangepi@orangepi:~$ sudo apt install ./*.deb

After the installation is complete, use the following command to see the zfs-related kernel modules:

orangepi@orangepi:~$ ls /lib/modules/5.10.160-rockchip-rk356x/updates/dkms/

icp.ko spl.ko zavl.ko zcommon.ko zfs.ko zlua.ko znvpair.ko zunicode.ko zzstd.ko

Then restart the Linux system to see that the zfs kernel module will be automatically loaded:

orangepi@orangepi:~$ lsmod | grep "zfs"

zfs                     2801664     0

zunicode             327680     1   zfs

zzstd                  471040     1   zfs

zlua                    139264     1   zfs

zcommon             69632     1   zfs

znvpair                 61440     2   zfs,zcommon

zavl                      16384     1   zfs

icp                     221184     1   zfs

spl                       77824     6   zfs,icp,zzstd,znvpair,zcommon,zavl

In Debian12, the default version of zfs is 2.1.11, so we can install zfs directly through the following command. Again, please make sure that the system has installed the deb package of the kernel header file before installation.

orangepi@orangepi:~$ sudo apt install -y zfsutils-linux zfs-dkms

Methods of creating ZFS pools

ZFS is based on storage pools, we can add multiple physical storage devices to the pool, and then allocate storage space from this pool.

The following content is demonstrated based on the development board connected to an NVMe SSD and a USB flash drive.

  1. First, we can use the lsblk command to view all storage devices on the development board. The current development board is connected to an NVMe SSD and a U disk. The output is as follows:
 
  1. Then enter the following command to create a ZFS pool, including two storage devices, NVMe SSD and U disk
  2. orangepi@orangepi:~$ sudo zpool create -f pool1 /dev/nvme0n1 /dev/sda

  1. Then use the zpool list command to see that the system has created a ZFS pool named pool1, and the size of the ZFS pool pool1 is the size of the NVME SSD plus the size of the U disk
  2.  

  1. Then execute df -h to see that pool1 is mounted to the /pool1 directory
  2. orangepi@orangepi:~$ df -h

    Filesystem                 Size     Used Avail Use% Mounted on

    tmpfs                    1.6G     18M 1.6G 2% /run

    /dev/mmcblk0p2     29G     6.0G 22G 22% /

    tmpfs                    7.7G     46M 7.7G 1% /dev/shm

    tmpfs                    5.0M     4.0K 5.0M 1% /run/lock

    tmpfs                    7.7G     944K 7.7G 1% /tmp

    /dev/mmcblk0p1     1022M     115M 908M 12% /boot

    /dev/zram1                 188M     4.5M 169M 3% /var/log

    tmpfs                    1.6G     80K 1.6G 1% /run/user/1000

    pool1                    489G     9.3M 489G 1% /pool1

  1. Use the following command to see that the file system type of pool1 is zfs
  2. orangepi@orangepi:~$ mount | grep pool1

    pool1 on /pool1 type zfs (rw,xattr,noacl)

  1. Then we can test copying a file to the ZFS pool
  2. orangepi@orangepi:~$ sudo cp -v /usr/local/test.mp4 /pool1/

    '/usr/local/test.mp4' -> '/pool1/test.mp4'

Test the data deduplication function of ZFS

  1. The data deduplication function of ZFS is disabled by default, we need to execute the following command to enable it

orangepi@orangepi:~$ sudo zfs set dedup=on pool1

  1. Then do a simple test, first enter pool1, and then execute the following command to generate a random file with a size of 1G
  2. orangepi@orangepi:~$ cd /pool1/

    root@orangepi:/pool1$ sudo dd if=/dev/urandom of=test.1g bs=1M count=1024

    1024+0 records in

    1024+0 records out

    1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.04367 s, 213 MB/s

  1. Then use the following command to copy 1000 random files of size 1G
  2. root@orangepi:/pool1$ for ((i=0; i<1000; i++)); do sudo cp test.1g $i.test.1g; done

  1. Then use du -lh to see that there are currently 1002G of data in the pool, but in fact the size of the ZFS pool is only 504GB (the total capacity of SSD+U disk), which cannot hold such a large amount of data
  2. root@orangepi:/pool1$ du -lh

    1002G

  1. Then use the zpool list command to see that only 1.01G is actually occupied, because these 1001 files are all duplicates, indicating that the data deduplication function is effective.
  2.  

Test the data compression function of ZFS

  1. Because the stored data is different, the disk space saved by compression will also be different, so we choose to compress relatively large plain text files for compression testing, and execute the following commands to pack the /var/log/ and /etc/ directories into a tarball

orangepi@orangepi:~$ cd /pool1/

root@orangepi:/pool1$ sudo tar -cf text.tar /var/log/ /etc/

  1. Then the file size that can be seen through the ls -lh command and the space occupied in the ZFS pool are both 27M
  2.  

  1. Then we enable compression in the ZFS pool pool1
  2. root@orangepi:/pool1$ sudo zfs set compression=lz4 pool1

  1. Then execute the following command again to package the /var/log/ and /etc/ directories into a tar package
  2. root@orangepi:/pool1$ sudo tar -cf text.tar /var/log/ /etc/

  1. At this time, you can see that the size of the text.tar file is still 27M, but it only occupies 9.47M in the ZFS pool, indicating that the file is compressed
  2.  

How to shut down and restart the development board

  1. During the running of the Linux system, if the Type-C power supply is directly unplugged, some data may be lost or damaged in the file system, so please use the poweroff command to shut down the Linux system of the development board before powering off. Then unplug the power again.

    orangepi@orangepi:~$ sudo poweroff

  2. The command to restart the Linux system is

    orangepi@orangepi:~$ sudo reboot

Linux SDK——orangepi-build instructions

Compilation system requirements

We can cross-compile the Linux image of the development board on the x64 computer, or compile the Linux image of the development board on the Ubuntu22.04 system of the development board, please choose one according to your preference.

If you use orangepi-build to compile the Linux image in the Ubuntu22.04 system of the development board, please do a good job of cooling (especially when the SSD starts). If the heat dissipation is not done well, it is prone to the error of file system runaway.

Compile with the Ubuntu22.04 system of the development board

  1. The Linux SDK, namely orangepi-build, supports running on the Ubuntu 22.04 of the development board (other systems have not been tested), so before downloading orangepi-build, please first ensure that the Ubuntu version installed on the development board is Ubuntu 22.04. The command to check the Ubuntu version installed on the development board is as follows. If the Release field does not display 22.04, it means that the current Ubuntu version does not meet the requirements. Please replace the system before performing the following operations.

    test@test:~$ lsb_release -a

    No LSB modules are available.

    Distributor ID: Ubuntu

    Description: Ubuntu 22.04 LTS

    Release: 22.04

    Codename: jammy

  1. If the computer is installed with Windows system and there is no computer with Ubuntu 22.04 installed, you can consider using VirtualBox or VMwar to install an Ubuntu 22.04 virtual machine in the Windows system. But please be careful not to compile orangepi-build on the WSL virtual machine, because orangepi-build has not been tested in the WSL virtual machine, so it cannot be guaranteed that orangepi-build can be used normally in WSL.

  2. The download address of the installation image of Ubuntu 22.04 amd64 version is:

    https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/ubuntu-22.04-desktop-amd64.iso

    or

    https://repo.huaweicloud.com/ubuntu-releases/22.04/ubuntu-22.04.1-desktop-amd64.iso

Get the source code of Linux sdk

Download orangepi-build from github

  1. The Linux sdk actually refers to the code of orangepi-build. orangepi-build is modified based on the armbian build system. Using orangepi-build, multiple versions of Linux images can be compiled. First download the code of orangepi-build, the command is as follows:

test@test:~$ sudo apt-get update

test@test:~$ sudo apt-get install -y git

test@test:~$ git clone https://github.com/orangepi-xunlong/orangepi-build.git -b next

Note that the Orange Pi 3B development board needs to download the source code of the next branch of orangepi-build. The above git clone command needs to specify the branch of the orangepi-build source code as next.

Downloading the orangepi-build code through the git clone command does not require entering the user name and password of the github account (the same is true for downloading other codes in this manual), if the Ubuntu PC prompts the user to enter the github account after entering the git clone command The name and password are usually entered incorrectly in the address of the orangepi-build warehouse behind the git clone. Please check the spelling of the command carefully, instead of thinking that we forgot to provide the username and password of the github account.

  1. The u-boot and Linux kernel versions currently used by the development board are as follows
  2. branch u-boot version Linux Kernel version
    legacy u-boot 2017.09 Linux5.10

    The branch mentioned here is not the same thing as the branch of the orangepi-build source code, please do not confuse it. This branch is mainly used to distinguish different kernel source code versions.

    Currently, the Linux5.10 bsp kernel provided by RK is defined as the legacy branch. If the mainline kernel is supported in the future, a current branch will be added.

  1. orangepi-build will contain the following files and folders after downloading

    1. build.sh: Compile the startup script

    2. external: Contains the configuration files needed to compile the image, specific scripts, and the source code of some programs, etc.

    3. LICENSE: GPL 2 license file

    4. README.md: orangepi-build documentation

    5. scripts: General script for compiling Linux images

    6. test@test:~/orangepi-build$ ls

      build.sh      external      LICENSE      README.md      scripts

      If you downloaded the code of orangepi-build from github, after downloading, you may find that orangepi-build does not contain the source code of u-boot and Linux kernel, nor does u-boot and Linux kernel need to use cross-compilation tools Chain, this is normal, because these things are stored in other separate github warehouses or some servers (the addresses will be detailed below). orangepi-build will specify the address of u-boot, Linux kernel and cross-compilation toolchain in the script and configuration file. When running orangepi-build, when it finds that there are no such things locally, it will automatically go to the corresponding place to download them.

Download the cross-compilation toolchain

The cross-compilation toolchain will only be downloaded when the orangepi-build compilation image is used on an x64 computer. Compiling the Linux image of the development board in the Ubuntu22.04 of the development board will not download the cross-compilation toolchain. At this time, orangepi-build/toolchains will be an empty folder.

  1. When orangepi-build runs for the first time, it will automatically download the cross-compilation toolchain and put it in the toolchains folder. Every time after running the build.sh script of orangepi-build, it will check whether the cross-compilation toolchain in toolchains exists , if it does not exist, the download will be restarted, if it exists, it will be used directly, and the download will not be repeated.
 
  1. The image URL of the cross-compilation toolchain in China is the open source software image site of Tsinghua University
  2. https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/

  1. After toolchains is downloaded, it will contain multiple versions of cross-compilation toolchains, and the development board will only use two of them
  2. test@test:~/orangepi-build$ ls toolchains/

    gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu

    gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf

    gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu

    gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf

    gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi

    gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf

    gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu

    gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi

    gcc-linaro-aarch64-none-elf-4.8-2013.11_linux

    gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux

    gcc-linaro-arm-none-eabi-4.8-2014.04_linux

  1. The cross-compilation toolchain used to compile the Linux kernel source code is

    1. Linux5.10
    2. gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu

  1. The cross-compilation tool chain used to compile the u-boot source code is

    1. v2017.09
    2. gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu

orangepi-build complete directory structure description

  1. The orangepi-build repository does not contain the source code of the Linux kernel, u-boot, and cross-compilation toolchain after downloading. The source code of the Linux kernel and u-boot is stored in an independent git repository

    1. The git repository where the Linux kernel source code is stored is as follows:
    2. root@orangepi:~# cd /sys/class/leds/status_led

      https://github.com/orangepi-xunlong/linux-orangepi/tree/orange-pi-5.10-rk35xx

    1. The git warehouse where the b.u-boot source code is stored is as follows:
    2. root@orangepi:~# cd /sys/class/leds/status_led

      https://github.com/orangepi-xunlong/u-boot-orangepi/tree/v2017.09-rk3588

  1. When orangepi-build runs for the first time, it will download the cross-compilation toolchain, u-boot and Linux kernel source code. After successfully compiling a Linux image, the files and folders that can be seen in orangepi-build are:

    a. build.sh: compile startup script

    b. external: Contains the configuration files needed to compile the image, scripts with specific functions, and the source code of some programs. The rootfs compressed package cached during the image compilation process is also stored in external

    c. kernel: stores the source code of the Linux kernel, and the folder named orange-pi-5.10-rk35xx stores the kernel source code of the legacy branch of the RK3588/RK3588S/RK3566 series development boards. Please do not manually name the folder name of the kernel source code Modify, if modified, the kernel source code will be re-downloaded when the compilation system is running

    d. LICENSE: GPL 2 license file

    e. README.md: orangepi-build documentation

    f. output: Store compiled deb packages such as u-boot and Linux, compilation logs, and compiled images and other files

    g. scripts: general scripts for compiling Linux images

    h. toolchains: store cross-compilation toolchain

    i. u-boot: stores the source code of u-boot, the folder named v2017.09-rk3588 stores the u-boot source code of the legacy branch of the RK3588/RK3588S/RK3566 series development boards, the name of the folder of the u-boot source code Please do not modify it manually, if it is modified, the u-boot source code will be re-downloaded when the compiling system is running

    j. userpatches: Store configuration files needed to compile scripts

  2. test@test:~/orangepi-build$ ls

    build.sh      external      kernel      LICENSE      output      README.md     scripts      toolchains      u-boot      userpatches

Compile u-boot

  1. Run the build.sh script, remember to add sudo permission

test@test:~/orangepi-build$ sudo ./build.sh

  1. Select U-boot package, then enter

     

  2. Then select the model of the development board

     

  3. Then it will start to compile u-boot, and some information prompted during compilation is explained as follows

    1. u-boot source code version
    2. [ o.k. ] Compiling u-boot [ v2017.09 ]

    1. The version of the cross-compilation toolchain
    2. [ o.k. ] Compiler version [ aarch64-linux-gnu-gcc 7.4.1 ]

    1. Path to the generated u-boot deb package
    2. [ o.k. ] Target directory [ orangepi-build/output/debs/u-boot ]

    1. The package name of the generated u-boot deb package
    2. [ o.k. ] File name [ linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb ]

    1. Compilation time
    2. [ o.k. ] Runtime [ 1 min ]

    1. Repeat the command to compile u-boot, use the following command to start compiling u-boot directly without selecting through the graphical interface
    2. [ o.k. ] Repeat Build Options [ sudo ./build.sh BOARD=orangepi3b BRANCH=legacy BUILD_OPT=u-boot KERNEL_CONFIGURE=no ]

  1. View the u-boot deb package generated by compilation
  2. test@test:~/orangepi-build$ ls output/debs/u-boot/

    linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb

  1. The files contained in the generated u-boot deb package are as follows

    1. Use the following command to decompress the deb package
    2. test@test:~/orangepi-build$ cd output/debs/u-boot

      test@test:~/orangepi_build/output/debs/u-boot$ $ dpkg -x \

      linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb . (Note that there is a "." at the end of the command)

      test@test:~/orangepi_build/output/debs/u-boot$ ls

      linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb usr

    1. The decompressed file is as follows
    2. test@test:~/orangepi-build/output/debs/u-boot$ tree usr

      usr

      └── lib

      ├── linux-u-boot-legacy-orangepi3b_1.0.0_arm64
      │   ├── idbloader.img
      │   ├── rkspi_loader.img
      │   └── u-boot.itb
      └── u-boot
      ├── LICENSE
      ├── orangepi-3b-rk3566_defconfig
      └── platform_install.sh


      3 directories, 6 files

  1. When the orangepi-bulid compilation system compiles the u-boot source code, it will first synchronize the u-boot source code with the u-boot source code of the github server, so if you want to modify the u-boot source code, you first need to turn off the download and update function of the source code (This function needs to be fully compiled once u-boot, otherwise it will prompt that the source code of u-boot cannot be found. If the source code package downloaded from Baidu cloud disk, there is no such problem, because the source code of u-boot is all cached), otherwise the changes made will be reverted, the method is as follows:
  2. Set the IGNORE_UPDATES variable in userpatches/config-default.conf to "yes"

    test@test:~/orangepi-build$ vim userpatches/config-default.conf

    IGNORE_UPDATES="yes"

  1. When debugging u-boot code, you can use the following method to update u-boot in the Linux image for testing

    1. Upload the compiled u-boot deb package to the Linux system of the development board
    2. test@test:~/orangepi-build$ cd output/debs/u-boot

      test@test:~/orangepi_build/output/debs/u-boot$ scp \

      linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb root@192.168.1.xxx:/root

    1. Then log in to the development board and uninstall the deb package of u-boot installed
    2. root@orangepi:~# apt purge -y linux-u-boot-orangepi3b-legacy

    1. Install the new u-boot deb package just uploaded
    2. root@orangepi:~# dpkg -i linux-u-boot-legacy-orangepi3b_1.0.0_arm64.deb

    1. Then run the nand-sata-install script
    2. root@orangepi:~# nand-sata-install

    1. Then select 5 Install/Update the bootloader on SD/eMMC to update the u-boot in the TF card or 7 Install/Update the bootloader on SPI Flash to update the u-boot in the SPI Flash
    2.  

    1. After pressing the Enter key, a Warning will pop up first
    2.  

    1. Press the Enter key again to start updating u-boot, and the following information will be displayed after the update is completed
    2.  

    1. Then you can restart the development board to test whether the modification of u-boot takes effect
  1. Other useful information

    1. In the u-boot 2017.09 source code, the defconfig configuration file used by the development board is
    2. orangepi-build/u-boot/v2017.09-rk3588/configs/orangepi-3b-rk3566_defconfig

    1. In the u-boot 2017.09 source code, the dts file used by the development board is
    2. orangepi-build/u-boot/v2017.09-rk3588/arch/arm/dts/rk3566-orangepi-3b.dts

Compile the Linux kernel

  1. Run the build.sh script, remember to add sudo permission

test@test:~/orangepi-build$ sudo ./build.sh

  1. Select Kernel package, then enter
  2.  

  1. Then select the model of the development board
  2.  

  1. Then it will prompt whether to display the kernel configuration interface. If you do not need to modify the kernel configuration, select the first one. If you need to modify the kernel configuration, select the second one.
  2.  

  1. If you choose to display the kernel configuration menu (the second option) in step 4, the kernel configuration interface opened by make menuconfig will pop up. At this time, you can directly modify the kernel configuration, save and exit after modification. Yes, after exiting, the kernel source code will be compiled
  2.  

    1. If you do not need to modify the configuration options of the kernel, when running the build.sh script, pass in KERNEL_CONFIGURE=no to temporarily block the pop-up kernel configuration interface
    2. test@test:~/orangepi-build$ sudo ./build.sh KERNEL_CONFIGURE=no

    1. You can also set KERNEL_CONFIGURE=no in the orangepi-build/userpatches/config-default.conf configuration file, which can permanently disable this function

    2. If the following error is displayed when compiling the kernel, it is because the terminal interface of the Ubuntu PC is too small to display the make menuconfig interface. Please maximize the terminal of the Ubuntu PC and run the build.sh script again

    3.  

  1. Part of the information prompted when compiling the kernel source code is as follows

    1. The version of the Linux kernel source code
    2. [ o.k. ] Compiling current kernel [ 5.10.160 ]

    1. The version of the cross-compilation toolchain used
    2. [ o.k. ] Compiler version [ aarch64-none-linux-gnu-gcc 11.2.1 ]

    1. The configuration file used by the kernel by default and the path where it is stored
    2. [ o.k. ] Using kernel config file [ config/kernel/linux-rockchip-rk356x-legacy.config ]

    1. The path of the deb package related to the kernel generated by compiling
    2. [ o.k. ] Target directory [ orangepi-build/output/debs/ ]

    1. The package name of the compiled kernel image deb package
    2. [ o.k. ] File name [ linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb ]

    1. The time used for compilation
    2. [ o.k. ] Runtime [ 5 min ]

    1. Finally, the compilation command to repeatedly compile the kernel selected last time will be displayed. Use the following command to start compiling the kernel source code directly without selecting through the graphical interface
    2. [ o.k. ] Repeat Build Options [ sudo ./build.sh BOARD=orangepi3b BRANCH=legacy BUILD_OPT=kernel KERNEL_CONFIGURE=no ]

  1. View the deb package related to the kernel generated by compilation

    1. linux-dtb-legacy-rockchip-rk356x_1.0.0_arm64.deb Contains dtb files used by the kernel

    2. linux-headers-legacy-rockchip-rk356x_1.0.0_arm64.deb Include kernel header files

    3. linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb Contains kernel images and kernel modules

    4. test@test:~/orangepi-build$ ls output/debs/linux-*

      output/debs/linux-dtb-legacy-rockchip-rk356x_1.0.0_arm64.deb output/debs/linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb

      output/debs/linux-headers-legacy-rockchip-rk356x_1.0.0_arm64.deb

  1. The files contained in the generated Linux-image deb package are as follows

    1. Use the following command to decompress the deb package
    2. test@test:~/orangepi-build$ cd output/debs

      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

    1. The decompressed file is as follows
    2. test@test:~/orangepi-build/output/debs/test$ tree -L 2

      .

      ├── boot

      │   ├── config-5.10.160-rockchip-rk356x

      │   ├── System.map-5.10.160-rockchip-rk356x

      │   └── vmlinuz-5.10.160-rockchip-rk356x

      ├── etc

      │   └── kernel

      ├── lib

      │   └── modules

      ├── linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb

      └── usr

      ├── lib
      └── share
  1. The orangepi-bulid compilation system will first synchronize the Linux kernel source code with the Linux kernel source code of the github server when compiling the Linux kernel source code, so if you want to modify the Linux kernel source code, you first need to turn off the update function of the source code (You need to fully compile the Linux kernel source code before turning off this function. Otherwise, you will be prompted that the source code of the Linux kernel cannot be found. If you download the source code package from Baidu cloud disk, there is no such problem, because the source code of Linux has been cached.), otherwise the The changes made will be reverted as follows:
  2. Set the IGNORE_UPDATES variable in userpatches/config-default.conf to "yes"

    test@test:~/orangepi-build$ vim userpatches/config-default.conf

    IGNORE_UPDATES="yes"

  1. If the kernel has been modified, the following method can be used to update the kernel and kernel modules of the development board Linux system

    1. Upload the deb package of the compiled Linux kernel to the Linux system of the development board
    2. test@test:~/orangepi-build$ cd output/debs

      test@test:~/orangepi-build/output/debs$ scp \

      linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb root@192.168.1.xxx:/root

    1. Then log in to the development board and uninstall the deb package of the installed Linux kernel
    2. root@orangepi:~# apt purge -y linux-image-legacy-rockchip-rk356x

    1. Install the deb package of the new Linux kernel just uploaded
    2. root@orangepi:~# dpkg -i linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb

    1. Then restart the development board, and then check whether the kernel-related modifications have taken effect
    2. root@orangepi:~# reboot

  1. Other useful information

    1. The storage location of the kernel configuration file is as follows, please do not go to the kernel source code to find the kernel configuration file used by the development board

    2. orangepi-build/external/config/kernel/linux-rockchip-rk356x-legacy.config

    3. The location of the dts file used by the development board is

    4. orangepi-build/kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-cm4.dts

Compile rootfs

  1. Run the build.sh script, remember to add sudo permission

test@test:~/orangepi-build$ sudo ./build.sh

  1. Select Rootfs and all deb packages, then enter
  2.  

  1. Then select the model of the development board
  2.  

  1. Then select the type of rootfs
  2.  

  1. Then select the type of image

    1. Image with console interface (server) Indicates the image of the server version, which is relatively small

    2. Image with desktop environment Indicates a image with a desktop, which is relatively large

    3.  

  1. If you are compiling the image of the server version, you can also choose to compile the Standard version or the Minimal version. The pre-installed software of the Minimal version will be much less than that of the Standard version (please do not choose the Minimal version if there is no special requirement, because many things are not pre-installed by default. Some functions may not be available)
  2.  

  1. If you are compiling the image of the desktop version, you also need to select the type of desktop environment. Currently, Ubuntu Jammy mainly maintains XFCE and Gnome desktops, Ubuntu Focal only maintains XFCE desktops, and Debian Bullseye mainly maintains XFCE and KDE desktops
  2.  

     

    You can then select additional packages that need to be installed. Please press the Enter key to skip directly here.

     

  1. Then it will start to compile rootfs, and some of the information prompted during compilation are as follows

    1. The type of rootfs
    2. [ o.k. ] local not found [ Creating new rootfs cache for jammy]

    1. The storage path of the compiled rootfs compressed package
    2. [ o.k. ] Target directory [ external/cache/rootfs ]

    1. The name of the rootfs compressed package generated by compilation
    2. [ o.k. ] File name [ jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4 ]

    1. The time used for compilation
    2. [ o.k. ] Runtime [ 13 min ]

  1. View the rootfs compressed package generated by compilation

    1. jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4 is the rootfs compressed package, the meaning of each field of the name is

      1. a) jammy indicates the type of Linux distribution of rootfs

      2. b) xfce means rootfs is the type of desktop version, if it is cli, it means the type of server version

      3. c) arm64 represents the architecture type of rootfs

      4. d) f930ff6ebbac1a72108a2e100762b18f is the MD5 hash value generated by the package names of all software packages installed by rootfs. As long as the list of software packages installed by rootfs is not modified, this value will not change. The compilation script will use this MD5 hash value to generate Determine whether rootfs needs to be recompiled

    2. jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.list lists the package names of all packages installed by rootfs

    3. test@test:~/orangepi-build$ ls external/cache/rootfs/

      jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4

      jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.current

      jammy-xfce-arm64.f930ff6ebbac1a72108a2e100762b18f.tar.lz4.list

  1. If the required rootfs already exists under external/cache/rootfs, then compiling rootfs again will directly skip the compilation process and will not restart the compilation. When compiling the image, it will also go to external/cache/rootfs to find out whether it has If there is rootfs available in the cache, use it directly, which can save a lot of download and compilation time.

Compile Linux image

  1. Run the build.sh script, remember to add sudo permission

test@test:~/orangepi-build$ sudo ./build.sh

  1. Select Full OS image for flashing, then enter
  2.  

  1. Then select the model of the development board
  2.  

  1. Then select the type of rootfs
  2.  

  1. Then select the type of image

    1. Image with console interface (server) Indicates the image of the server version, which is relatively small

    2. Image with desktop environment Indicates a image with a desktop, which is relatively large

    3.  

  1. If you are compiling the image of the server version, you can also choose to compile the Standard version or the Minimal version. The pre-installed software of the Minimal version will be much less than that of the Standard version (please do not choose the Minimal version if there is no special requirement, because many things are not pre-installed by default. Some functions may not be available)
  2.  

  1. If you are compiling the image of the desktop version, you also need to select the type of desktop environment. Currently, Ubuntu Jammy mainly maintains XFCE and Gnome desktops, Ubuntu Focal only maintains XFCE desktops, and Debian Bullseye mainly maintains XFCE and KDE desktops
  2.  

     

    You can then select additional packages that need to be installed. Please press the Enter key to skip directly here.

     

  1. Then it will start to compile the Linux image. The general process of compilation is as follows

    a. Initialize the compilation environment of Ubuntu PC and install the software packages required for the compilation process

    b. Download the source code of u-boot and Linux kernel (if cached, only update the code)

    c. Compile u-boot source code and generate u-boot deb package

    d. Compile the Linux source code and generate Linux-related deb packages

    e. Make the deb package of Linux firmware

    f. Make the deb package of the orangepi-config tool

    g. Create a deb package supported by the board

    h. If you are compiling the desktop image, you will also create desktop-related deb packages

    i. Check whether the rootfs has been cached, if not, recreate the rootfs, if it has been cached, directly decompress and use

    j. Install the previously generated deb package into rootfs

    k. Make some specific settings for different development boards and different types of images, such as pre-installing additional software packages, modifying system configuration, etc.

    l. Then make an image file and format the partition, the default type is ext4

    m. Then copy the configured rootfs to the mirrored partition

    n. Then update initramfs

    o. Finally, write the bin file of u-boot into the image through the dd command

  2. After compiling the image, the following information will be prompted

    1. The storage path of the compiled image
    2. [ 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 ]

    1. Compilation time
    2. [ o.k. ] Runtime [ 19 min ]

    1. Repeat the command to compile the image, and use the following command to start compiling the image directly without selecting through the graphical interface
    2. [ 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 ]

Instructions for using the Orange Pi OS Arch system

Orange Pi OS Arch system function adaptation

Function OPi OS Arch
USB2.0x3 OK
USB3.0x1 OK
SPIFlash+M.2 NVMe SSD Boot OK, It needs to be pasted with SPI Flash to work normally
WIFI OK
Bluetooth OK
GPIO(40pin) OK
UART(40pin) OK
SPI(40pin) OK
I2C(40pin) OK
PWM(40pin) OK
3pin debugging serial port OK
eMMC start OK
TF card start OK
HDMI video OK
HDMI audio OK
Raspberry Pi 5 inch screen display OK
Raspberry Pi 5-inch screen touch function OK
eDP display OK
OV5647 camera The kernel driver is OK, 3A is not adjusted
Gigabit Ethernet port OK
Network port status light OK
headphone playback OK
headphone recording OK
LED lights OK
GPU NO
NPU NO
VPU NO

Orange Pi OS Arch System User Guide Instructions

First of all, please note that the OPi OS Arch system does not have a default orangepi user and password, so after burning and starting the system, it is impossible to log in remotely through the serial port and ssh directly (not even the root user). This is different from Ubuntu and Debian systems.

When the OPi OS Arch system starts for the first time, it needs to be connected to an HDMI display, and then initialize the system settings through the user wizard (including creating a new user name and setting a password). The setup steps of the User Wizard are as follows:

  1. After burning the system, you will see the user wizard program shown in the figure below after starting the system for the first time and entering the desktop

     

  2. First you need to choose the desired language

     

  3. After selecting the language, the user guide will immediately switch to the corresponding language interface, such as the Chinese display as shown below

     

  4. Then select the area

     

  5. Then select the keyboard model

     

  6. Then create a new user name and set a password

     

  7. Then make sure that there is no problem with the selection, and then click the install button

     

  8. Then wait for the installation to complete

     

  9. After the installation is complete, you need to click the Finish button to restart the system

     

  10. After restarting, the Orange Pi Hello program will be started automatically. At this time, you need to remove the check status in the lower right corner when starting up. Otherwise, you need to manually close the Orange Pi Hello program every time you start it.

     

    At this point, you can use the newly created user name and password to log in to the OPi OS system through the serial port or ssh.

How to set DT overlays

LCD MIPI screen, eDP screen, and multiplexing functions such as I2C/SPI/UART/PWM in 40pin are disabled by default in the dts of the kernel, and the corresponding DT overlays need to be manually enabled to use.

The method of opening DT overlays in OPi OS Arch system is as follows:

  1. First open the /boot/extlinux/extlinux.conf configuration file

    [orangepi@orangepi-pc ~]$ sudo vim /boot/extlinux/extlinux.conf

  2. Then open the corresponding configuration by adding FDTOVERLAYS /dtbs/rockchip/overlay/xxx.dtbo in /boot/extlinux/extlinux.conf

  3. Note that xxx.dtbo in FDTOVERLAYS /dtbs/rockchip/overlay/xxx.dtbo needs to be replaced with the specific dtbo configuration, please do not copy it.

    [orangepi@orangepi-pc ~]$ sudo vim /boot/extlinux/extlinux.conf

    LABEL OPIOS ARM

    LINUX /Image

    FDT /dtbs/rockchip/rk3566-orangepi-3b.dtb

    FDTOVERLAYS /dtbs/rockchip/overlay/xxx.dtbo      #Configuration that needs to be added

  1. The storage path of xxx.dtbo in the OPi OS Arch image is as follows, please note that not all dtbos under this path can be used.

    /boot/dtbs/rockchip/overlay/

  2. The DT overlays configuration that can be used by the development board is as follows

  3. Features on the development board Corresponding DT overlays configuration
    EDP screen rk356x-edp.dtbo
    Raspberry Pi 5 inch screen rk356x-raspi-7inch-touchscreen.dtbo
    40pin expansion interface - I2C2 rk356x-i2c2-m1.dtbo
    40pin expansion interface - I2C3 rk356x-i2c3-m0.dtbo
    40pin expansion interface - I2C4 rk356x-i2c4-m0.dtbo
    40pin extension interface - PWM11 rk356x-pwm11-m1.dtbo
    40pin extension interface - PWM15 rk356x-pwm15-m1.dtbo
    40pin expansion interface - UART3 rk356x-uart3-m0.dtbo
    40pin expansion interface - UART7 rk356x-uart7-m2.dtbo
    40pin expansion interface - UART9 rk356x-uart9-m2.dtbo
    40pin expansion interface - SPI3 rk356x-spi3-m0-cs0-spidev.dtbo
  1. If you need to open multiple configurations at the same time, just add the paths of multiple configurations directly behind FDTOVERLAYS. For example, the configurations to open i2c2 and pwm11 at the same time are as follows

    [orangepi@orangepi-pc ~]$ sudo vim /boot/extlinux/extlinux.conf

    LABEL OPIOS ARM

    LINUX /Image

    FDT /dtbs/rockchip/rk3566-orangepi-3b.dtb

    FDTOVERLAYS /dtbs/rockchip/overlay/rk356x-i2c2-m1.dtbo /dtbs/rockchip/overlay/rk356x-pwm11-m1.dtbo

  2. After setting, you need to restart the system to make the configuration take effect

    [orangepi@orangepi-pc ~]$ sudo reboot

Use of Raspberry Pi 5-inch screen

How to assemble the Raspberry Pi 5-inch screen

Please refer to the assembly method of the Raspberry Pi 5-inch screen (click the text in the blue part to jump to the corresponding position).

How to open Raspberry Pi 5-inch screen configuration

By default, OPi OS Arch mirroring does not enable the configuration of the Raspberry Pi 5-inch screen. If you need to use the Raspberry Pi 5-inch screen, you need to manually open it. The method to open the configuration is as follows:

  1. First add the following configuration in /boot/extlinux/extlinux.conf

    [orangepi@orangepi-pc ~]$ sudo vim /boot/extlinux/extlinux.conf

    LABEL OPIOS ARM

    LINUX /Image

    FDT /dtbs/rockchip/rk3566-orangepi-3b.dtb

    FDTOVERLAYS /dtbs/rockchip/overlay/rk356x-raspi-7inch-touchscreen.dtbo        #Configuration that needs to be added

  2. Then restart the system

    [orangepi@orangepi-pc ~]$ sudo reboot

    After restarting, you can see the display on the LCD screen as follows:

  3.  

How to use the eDP screen

Assembly method of eDP screen

Please refer to how to use the eDP screen (click the text in the blue part to jump to the corresponding position).

How to open eDP screen configuration

The OPi OS Arch image does not enable the eDP screen configuration by default. If you want to use the eDP screen, you need to manually open it. The method to open the configuration is as follows:

  1. First add the following configuration in /boot/extlinux/extlinux.conf

    [orangepi@orangepi-pc ~]$ sudo vim /boot/extlinux/extlinux.conf

    LABEL OPIOS ARM

    LINUX /Image

    FDT /dtbs/rockchip/rk3566-orangepi-3b.dtb

    FDTOVERLAYS /dtbs/rockchip/overlay/rk356x-edp.dtbo        #Configuration that needs to be added

  2. Then restart the system

    [orangepi@orangepi-pc ~]$ sudo reboot

    After restarting, you can see that the display of the eDP screen is as follows:

  3.  

How to install the software

Use the pacman package management tool to install software that is not in OPi OS. For example, the command to install the vim editor is as follows. If you want to install other software, you only need to replace vim with the package name of the software you want to install.

[orangepi@orangepi-pc ~]$ sudo pacman -Syy vim

Android 11 operating system instructions

Supported Android versions

Android version Kernel version
Android 11 Linux4.19

Android Function Adaptation

Functions Android 11
USB2.0x3 OK
USB3.0x1 OK
M.2 NVMe SSD boot OK
WIFI OK
Bluetooth OK
GPIO(40pin) OK
UART(40pin) OK
SPI(40pin) OK
I2C(40pin) OK
PWM(40pin) OK
PWM fan interface OK
3pin Debugging serial port OK
EMMC OK
TF card boot OK
HDMI video OK
HDMI Audio OK
LCD OK
eDP display OK
OV5647 Camera The kernel driver is OK, 3A is not adjusted
Gigabit network port OK
Network port status indicator OK
Headphone playback OK
Headphone recording OK
LED Light OK
GPU OK
NPU OK
VPU OK
RTC OK

WIFI connection test method

  1. First click enter Setting
 
  1. Then select Network & internet
  2.  

  1. Then select Wi-Fi
  2.  

  1. Then turn on the Wi-Fi switch
  2.  

  1. After turning on Wi-Fi, if everything is normal, you can scan for nearby Wi-Fi hotspots
  2.  

  1. Then select the Wi-Fi you want to connect to, and the password input interface shown in the figure below will pop up
  2.  

  1. Then use the keyboard to enter the password corresponding to Wi-Fi, and then use the mouse to click the Enter button in the virtual keyboard to start connecting to Wi-Fi
  2.  

  1. After the Wi-Fi connection is successful, the display is as shown in the figure below:
  2.  

How to use Wi-Fi hotspot

  1. First, please make sure that the Ethernet port is connected to the network cable and can access the Internet normally
  2. Then select Settings
 
  1. Then select Network & internet
  2.  

  1. Then select Hotspot & tethering
  2.  

  1. Then select Wi-Fi hotspot
  2.  

  1. Then turn on the Wi-Fi hotspot, you can also see the name and password of the generated hotspot in the figure below, remember them, and use them when connecting to the hotspot (If you need to modify the name and password of the hotspot, you need to turn off the Wi-Fi hotspot first, and then you can modify it)
  2.  

  1. At this time, you can take out your mobile phone. If everything is normal, you can find the WIFI hotspot with the same name (here AndroidAP_6953) displayed under the Hotspot name in the above picture in the WI-FI list searched by the mobile phone. Then you can click AndroidAP_6953 to connect to the hotspot, and the password can be seen under the Hotspot password in the above picture
  2.  

  1. After the connection is successful, it will be displayed as shown in the figure below (the interface of different mobile phones will be different, the specific interface is subject to the display of your mobile phone). At this point, you can open a webpage on your mobile phone to see if you can access the Internet. If you can open the webpage normally, it means that the WI-FI Hotspot of the development board can be used normally.
  2.  

Bluetooth test method

  1. First click enter Setting
 
  1. Then select Connected devices
  2.  

  1. Then click Pair new device to turn on Bluetooth and start scanning the surrounding Bluetooth devices
  2.  

  1. The searched Bluetooth devices will be displayed under Available devices
  2.  

  1. Then click the Bluetooth device you want to connect to start pairing. When the following interface pops up, please use the mouse to select the Pair option
  2.  

  1. The test here is the configuration process of the development board and the Bluetooth of the Android mobile phone. At this time, the following confirmation interface will pop up on the mobile phone. After clicking the pairing button on the mobile phone, the pairing process will start
  2.  

  1. After the pairing is completed, you can see the paired Bluetooth device as shown in the figure below
  2.  

  1. At this time, you can use the Bluetooth of your mobile phone to send a picture to the development board. After sending, you can see the following confirmation interface in the Android system of the development board, and then click Accept to start receiving the picture sent by the mobile phone.
  2.  

  1. You can open the Download directory in the file manager to view the pictures received by the Android system Bluetooth of the development board
  2.  

How to use Raspberry Pi 5-inch screen

Please make sure that the image used is the following two versions of the image:

OrangePi3B_RK3566_Android11_lcd_v1.x.x.img

OrangePi3B_RK3566_Android11_spi-nvme_lcd_v1.x.x.img

  1. The screen needs to be assembled first, please refer to the assembly method of the Raspberry Pi 5-inch screen

  2. Connect the Type-C power supply to the board and power it on. After the system starts, you can see the screen display as shown in the figure below

    Both the display and touch of the Raspberry Pi 5-inch screen can be used. If you have problems with the screen test, please make sure that the screen you purchased is exactly the same as the screen that the Orange Pi is compatible with.

    The Orange Pi compatible screen is described in the assembly method of the Raspberry Pi 5-inch screen.

     

How to use the eDP screen

Please make sure that the image used is the following two versions of the image:

OrangePi3B_RK3566_Android11_lcd_v1.x.x.img

OrangePi3B_RK3566_Android11_spi-nvme_lcd_v1.x.x.img

The eDP screen has no touch function.

  1. Currently only one eDP screen is compatible, including the following accessories:

    1. 0.5 pitch 30pin single-head cable in the same direction

       

    2. 15.6-inch eDP display with a resolution of 1920x1080

       

  2. Connect the FPC end of the 30pin single-head codirectional cable to the eDP interface of the development board, and connect the other end to the eDP interface of the screen

  3.  

  1. Then connect the Type-C power supply to the board and power it on. After the system starts, you can see the screen display as shown in the figure below

     

40pin interface GPIO, UART, SPI and PWM test

40pin GPIO port test

  1. First click on the wiringOP icon to open the wiringOP APP
 
  1. The main interface of wiringOP APP is displayed as shown in the figure below, and then click the GPIO_TEST button to open the GPIO test interface
  2.  

  1. The GPIO test interface is shown in the figure below. The two rows of CheckBox buttons on the left are in one-to-one correspondence with the 40pin pins. When the CheckBox button is checked, the corresponding GPIO pin will be set to OUT mode, and the pin level will be set to high level; when the checkbox is unchecked, the GPIO pin level will be set to low level; When the GPIO READALL button is pressed, information such as wPi number, GPIO mode, and pin level can be obtained; when the BLINK ALL GPIO button is clicked, the program will control the 28 GPIO ports to continuously switch between high and low levels
  2.  

  1. Then click the GPIO READALL button, the output information is as shown in the figure below:
  2.  

  1. There are a total of 28 GPIO ports in the 40pins of the development board that can be used. The following uses pin 7—the corresponding GPIO is GPIO4_A4—the corresponding wPi serial number is 2—as an example to demonstrate how to set the high and low levels of the GPIO port. First click the CheckBox button corresponding to pin 7. When the button is selected, pin 7 will be set to high level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 3.3v, it means setting high level success
  2.  

  1. Then click the GPIO READALL button, you can see that the current pin 7 mode is OUT, and the pin level is high
  2.  

  1. Click the CheckBox button in the figure below again to cancel the check status. Pin 7 will be set to low level. After setting, you can use a multimeter to measure the voltage value of the pin. If it is 0v, it means that the low level is set successfully.
  2.  

  1. Then click the GPIO READALL button, you can see that the current pin 7 mode is OUT, and the pin level is low

     

40pin UART test

  1. UART7 and UART9 are enabled by default in Android. The position of the 40pin is shown in the figure below, and the corresponding device nodes are /dev/ttyS7 and /dev/ttyS9 respectively

     

  2. First click on the wiringOP icon to open the wiringOP APP

  3.  

  1. The main interface of wiringOP APP is displayed as shown in the figure below, and then click the UART_TEST button to open the UART test interface
  2.  

  1. The serial port test interface of the APP is shown in the figure below
  2.  

  1. Take the test of UART7 as an example below, select the /dev/ttyS7 node in the selection box, enter the baud rate you want to set in the edit box, and then click the OPEN button to open the /dev/ttyS7 node. After the opening is successful, the OPEN button becomes unselectable, and the CLOSE button and SEND button become selectable
  2.  

  1. Then use Dupont wire to short the RXD and TXD pins of uart7
  2.  

  1. Then you can enter a character in the send edit box below, and click the SEND button to start sending
  2.  

  1. If everything is normal, the received string will be displayed in the receiving box
  2.  

40pin SPI test

  1. According to the schematic diagram of the 40pin interface, the spi available for Orange Pi 3B is spi3
 
  1. Here, the SPI interface is tested through the w25q64 module. First, the w25q64 device is connected to the SPI3 interface
  2.  

  1. Then click the wiringOP icon to open the wiringOP APP
  2.  

  1. The main interface of wiringOP APP is displayed as shown in the figure below, click the SPI_TEST button to open the SPI test interface
  2.  

  1. Then click the OPEN button to initialize the SPI
  2.  

  1. Then fill in the bytes that need to be sent, such as reading the ID information of w25q64, fill in the address 0x9f in data[0], and then click the TRANSFER button
  2.  

  1. Finally, the APP will display the read ID information
  2.  

  1. The MANUFACTURER ID of the w25q64 module is EFh, and the Device ID is 4017h, corresponding to the value read above (h stands for hexadecimal)
  2.  

40pin PWM test

  1. Android enables PWM11 by default, and the corresponding pin is located at 40pin as shown in the figure below
 
  1. First click on the wiringOP icon to open the wiringOP APP
  2.  

  1. Then click the PWM_TEST button on the main interface of wiringOP to enter the PWM test interface
  2.  

  1. The base address corresponding to PWM11 is fe6f0030, here pwmchip0 shows fdd70020.pwm on the right, then you need to click the drop-down option to select other pwmchips until fe6f0030.pwm is displayed on the right
  2.  

  1. When the drop-down option selects pwmchip3, the corresponding base address of PWM11 is fe6f0030 on the right
  2.  

  1. Then confirm the PWM channel, the default is channel 0, and confirm the PWM cycle, the default configuration is 50000ns, converted to PWM frequency is 20KHz, you can modify it yourself, click the EXPORT button to export PWM11
  2.  

  1. Then drag the drag bar below to change the PWM duty cycle, and then check Enable to output the PWM waveform
  2.  

  1. Then use an oscilloscope to measure the No. 32 pin in the 40pin of the development board, and you can see the following waveform
  2.  

How to use ADB

The method of USB OTG mode switching

The development board has 4 USB interfaces, among which the USB interface marked in red box in the figure below can support both Host mode and Device mode, and the other 3 USB interfaces only support Host mode.

The USB OTG interface defaults to Host mode, which can be used to connect USB devices such as mouse and keyboard. If you want to use ADB, you need to manually switch to Device mode.

  1. First open Settings

     

  2. Then select About tablet

     

  3. Then click the Build number menu bar several times with the mouse until the prompt You are now a developer! appears

     

  4. Then click to return to the previous menu

     

  5. Then select System

     

  6. Then select Advanced

     

  7. Then select Developer options in the expanded column

     

  8. Finally find the USB OTG Mode Switch switch, turn on the switch to switch to Device mode, turn off the switch to switch to Host mode

  9.  

Use the data cable to connect to adb debugging

  1. First prepare a good quality USB2.0 male-to-male data cable

     

  2. Then refer to the method of USB OTG mode switching to switch USB OTG to Device mode

  3. Then connect the development board to the Ubuntu PC through the USB2.0 male-to-male data cable. The position of the USB OTG interface on the development board is shown in the figure below:

     

  4. Then install the adb tool on the Ubuntu PC

    test@test:~$ sudo apt update

    test@test:~$ sudo apt -y install adb

  5. You can view the identified ADB devices through the following command

    test@test:~$ adb devices

    List of devices attached

    S63QCF54CJ device

    test@test:~$ lsusb

    Bus 003 Device 006: ID 2207:0006

  6. Then you can log in to the android system through the adb shell on the Ubuntu PC

  7. test@test:~$ adb shell

    console:/ $

  1. Execute the following command to remount the Android system
  2. test@test:~$ adb root

    test@test:~$ adb remount

  1. Then you can transfer files to the Android system
  2. test@test:~$ adb push example.txt /system/

Use network connection adb debugging

Using the network adb does not require a data cable to connect the computer and the development board, but to communicate through the network, so first make sure that the wired or wireless network of the development board is connected, and then obtain the IP address of the development board, which will be used later.

  1. Make sure that the service.adb.tcp.port of the Android system is set to port number 5555

    console:/ # getprop | grep "adb.tcp"

    [service.adb.tcp.port]: [5555]

  2. If service.adb.tcp.port is not set, you can use the following command to set the port number of network adb

  3. console:/ # setprop service.adb.tcp.port 5555

    console:/ # stop adbd

    console:/ # start adbd

  1. Install adb tool on Ubuntu PC

    test@test:~$ sudo apt update

    test@test:~$ sudo apt install -y adb

  2. Then connect to the network adb on the Ubuntu PC

    test@test:~$ adb connect 192.168.1.xxx (IP地址需要修改为开发板的IP地址)

    * daemon not running; starting now at tcp:5037

    * daemon started successfully

    connected to 192.168.1.xxx:5555


    test@test:~$ adb devices

    List of devices attached

    192.168.1.xxx:5555 device

  3. Then you can log in to the android system through the adb shell on the Ubuntu PC

  4. test@test:~$ adb shell

    console:/ #

How to compile Android11 source code

Download the source code of Android 11

  1. First download the Android 11 source code sub-volume compressed package from the Google network disk

    1. Google Drive

       

  2. After downloading the sub-volume compression package of the Android 11 source code, please check whether the MD5 checksum is correct, if not, please download the source code again

    test@test:~$ md5sum -c RK356X_Android11.tar.gz.md5sum

    RK356X_Android11.tar.gz00: OK

    RK356X_Android11.tar.gz01: OK

    RK356X_Android11.tar.gz02: OK

    RK356X_Android11.tar.gz03: OK

    RK356X_Android11.tar.gz04: OK

    RK356X_Android11.tar.gz05: OK

    RK356X_Android11.tar.gz06: OK

  3. Then you need to merge multiple compressed files for decompression

  4. test@test:~$ cat RK356X_Android11.tar.gz0* | tar -xvzf -

Compile the source code of Android 11

  1. First install the software packages required to compile the Android11 source code

    test@test:~$ sudo apt-get update

    test@test:~$ sudo apt-get install -y git gnupg flex bison gperf build-essential \

    zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 \

    lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache \

    libgl1-mesa-dev libxml2-utils xsltproc unzip liblz4-tool

  2. There is a build.sh compilation script in the source code, and the compilation parameters are as follows

    1. -U: Compile uboot

    2. -K: Compile kernel

    3. -A: compile android

    4. -u: Package and generate update.img and update_spi_nvme.img

    5. -o: Compile OTA package

    6. -d: Specify kernel dts

  3. Compile uboot, kernel, android and package them into update.img

    1. The command to compile and support HDMI 4K display mirroring > (LCD is turned off by default) is as follows:

      test@test:~$ cd RK356X_Android11

      test@test:~/ RK356X_Android11$ export BOARD=orangepi3b

      test@test:~/ RK356X_Android11$ source build/envsetup.sh

      test@test:~/ RK356X_Android11$ lunch rk3566_r-userdebug

      test@test:~/ RK356X_Android11$ ./build.sh -AUKu

    2. The command to compile and support LCD display mirroring (HDMI > is disabled by default) is as follows:

      test@test:~$ cd RK356X_Android11

      test@test:~/ RK356X_Android11$ export BOARD=orangepi3b

      test@test:~/ RK356X_Android11$ export DUAL_LCD=true

      test@test:~/ RK356X_Android11$ source build/envsetup.sh

      test@test:~/ RK356X_Android11$ lunch rk3566_r-userdebug

      test@test:~/ RK356X_Android11$ ./build.sh -AUKu

  4. After the compilation is complete, the following information will be printed

    ********rkImageMaker ver 2.1********

    Generating new image, please wait...

    storage is spinor

    Writing head info...

    Writing boot file...

    Writing firmware...

    Generating MD5 data...

    MD5 data generated successfully!

    New image generated successfully!

    ********rkImageMaker ver 2.1********

    Merging storage firmware, please wait...

    storage count = 2

    adding spinor_update.img...ok

    adding pcie_update.img...ok

    Merging firmware success.

    Making update_spi_nvme.img OK.

    Make update image ok!

    /wspace3/RK3566/RK356X_Android11

  5. The final image file will be placed in the rockdev/Image-rk3566_r/ directory. Among them, update.img is the boot image that supports TF card and eMMC, and update_spi_nvme.img is the boot image of NVME SSD

    test@test:~/RK356X_Android11$ cd rockdev/Image-rk3566_r

    test@test:~/RK356X_Android11/rockdev/Image-rk3566_r $ ls update*

    update.img update_spi_nvme.img

Appendix

User Manual Update History

Version Date Update Notes
v1.0 2023-08-29 initial version
v1.1 2023-09-05 Instructions for using the Orange Pi OS Arch system

Image Update History

Date Update Notes
2023-08-29

Orangepicm4_1.0.0_ubuntu_focal_server_linux5.10.160.7z

Orangepicm4_1.0.0_ubuntu_jammy_server_linux5.10.160.7z

Orangepicm4_1.0.0_debian_bullseye_server_linux5.10.160.7z

Orangepicm4_1.0.0_debian_bookworm_server_linux5.10.160.7z

Orangepicm4_1.0.0_ubuntu_focal_desktop_xfce_linux5.10.160.7z

Orangepicm4_1.0.0_ubuntu_jammy_desktop_xfce_linux5.10.160.7z

Orangepicm4_1.0.0_debian_bullseye_desktop_xfce_linux5.10.160.7z

Orangepicm4_1.0.0_debian_bookworm_desktop_xfce_linux5.10.160.7z


OrangePiCM4_RK3566_Android11_v1.0.0.tar.gz

OrangePiCM4_RK3566_Android11_lcd_v1.0.0.tar.gz

OrangePiCM4_RK3566_Android11_spi-nvme_v1.0.0.tar.gz

OrangePiCM4_RK3566_Android11_lcd_spi-nvme_v1.0.0.tar.gz


  • initial version
2023-09-05

Opios-arch-aarch64-xfce-opicm4-23.09-linux5.10.160.img.xz


  • initial version