打开主菜单

Wiki-Orange Pi β

更改

Orange Pi Zero 2W

添加31,953字节, 2023年9月27日 (三) 16:38
40pin的I2C测试方法
<div class="figure">
[[File:media/image3zero2w-img3.png|800px]]
</div>
<div class="figure">
[[File:media/image4zero2w-img4.png|800px]]
</div>
== Orange Pi Zero 2w的接口详情图 ==
[[File:media/image5zero2w-img5.png|800px]]
<span id="orange-pi-zero-2w-24pin扩展板的接口详情图"></span>
 
== Orange Pi Zero 2w 24pin扩展板的接口详情图 ==
[[File:media/image6zero2w-img6.png|800px]]
[[File:media/image7zero2w-img7.png|800px]]
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<ol style="list-style-type: decimal;">
<li><p>TF卡,最小8GB容量的'''class10'''级或以上的高速闪迪卡</p>
<p>[[File:media/image8zero2w-img8.png]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''使用其他品牌的TF卡(非闪迪的TF卡),如下图所示(包含但不仅限这些卡),已经有朋友反馈系统启动过程中会出现问题,比如系统启动到一半卡住不动,或者reboot命令无法正常使用,最后都是换了闪迪牌的TF卡后才解决的。所以如果您使用的是非闪迪牌的TF卡发现系统启动或者使用过程有问题,请更换闪迪牌的TF卡后再测试。'''</p></big>
<p>[[File:media/image9zero2w-img9.png|200px]][[File:media/image10zero2w-img10.png|200px]][[File:media/image11zero2w-img11.png|200px]][[File:media/image12zero2w-img12.png|200px]]</p>
<p style="text-align: center;" >'''目前反馈在Orange Pi Zero 2w上启动有问题的部分TF卡'''</p>
<big><p>'''另外,在其他型号的开发板上能正常使用的TF卡并不能保证在Orange Pi Zero 2w上也一定能正常启动,这点请特别注意。'''</p></big>
</li>
<li><p>TF卡读卡器,用于读写TF卡</p>
<p>[[File:media/image13zero2w-img13.png]]</p></li>
<li><p>Mini HDMI转HDMI连接线,用于将开发板连接到HDMI显示器或者电视进行显示</p></li>
<div class="figure">
[[File:media/image14zero2w-img14.jpegpng]]
</div></ol>
<ol start="4" style="list-style-type: decimal;">
<li><p>电源,如果有5V/2A或5V/3A的电源头那就只需要准备一根下面左边图片所示的USB转Type C接口的数据线,另外也可以使用类似下面右边图片所示的线和电源头一体的5V/2A或者5V/3A的高品质USB Typc C接口电源适配器。</p>
<p>[[File:media/image15zero2w-img15.jpegpng|400px]] [[File:media/image16zero2w-img16.jpegpng|400px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''开发板上的两个Type-C接口都可以用来供电。'''</p></big>
<p>[[File:media/image17zero2w-img17.png|center]]</p>
|}
</li>
<li><p>24pin扩展板</p>
<p>[[File:media/image18zero2w-img18.png]]</p></li>
<li><p>USB接口的鼠标和键盘,只要是标准USB接口的鼠标和键盘都可以,鼠标和键盘可以用来控制Orange Pi开发板</p></li>
<li><p>红外遥控器,主要用于控制安卓TV系统</p>
<p>[[File:media/image19zero2w-img19.png]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<li><p>网线,用于将开发板连接到因特网</p></li>
<li><p>AV视频线,如果希望通过TV-OUT接口而不是HDMI接口来显示视频,那么就需要通过AV视频线将开发板连接到电视</p>
<p>[[File:media/image20zero2w-img20.png]]</p></li>
<li><p>散热片,如果担心开发板的温度过高,可以加些散热片,散热片贴在H618芯片和内存芯片上即可</p>
<p>[[File:media/image21zero2w-img21.png]] [[File:media/image22zero2w-img22.png]]</p></li>
<li><p>5V的散热风扇,如下图所示,开发板的40pin接口上有5V和GND引脚可以接散热风扇,40pin排针的间距为'''2.54mm''',散热风扇的电源接口参照这个规格去购买即可。</p>
<p>[[File:media/image23zero2w-img23.png]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
</li>
<li><p>Type-C转USB线,用于接USB设备</p>
<p>[[File:media/image24zero2w-img24.png]]</p></li>
<li><p>USB转TTL模块和杜邦线,使用串口调试功能时,需要USB转TTL模块和杜邦线来连接开发板和电脑</p>
<p>[[File:media/image25zero2w-img25.png|400px]] [[File:media/image26zero2w-img26.png|400px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<ol start="5" style="list-style-type: decimal;">
<li><p>进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方</p>
<p>[[File:media/image27zero2w-img27.png]]</p></li>
<li><p>然后可以选择下载balenaEtcher的Portable版本的软件,Portable版本无需安装,双击打开就可以使用</p>
<p>[[File:media/image28zero2w-img28.png]]</p></li>
<li><p>如果下载的是需要安装版本的balenaEtcher,请先安装再使用。如果下载的Portable版本balenaEtcher,直接双击打开即可,打开后的balenaEtcher界面如下图所示</p>
<p>[[File:media/image29zero2w-img29.png]]</p></li>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<big>'''打开balenaEtcher时如果提示下面的错误:'''</big>
[[File:media/image30zero2w-img30.png|center]]
<big>'''请选择balenaEtcher后点击右键,然后选择以管理员身份运行。'''</big>
[[File:media/image31zero2w-img31.png|center]]
|}
</ol>
<li><p>然后选择TF卡的盘符</p></li>
<li><p>最后点击Flash就会开始烧录Linux镜像到TF卡中</p>
<p>[[File:media/image32zero2w-img32.png]]</p></li></ol>
</li>
<li><p>balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中</p>
<p>[[File:media/image33zero2w-img33.png]]</p></li>
<li><p>Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验</p>
<p>[[File:media/image34zero2w-img34.png]]</p></li>
<li><p>成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了</p>
<p>[[File:media/image35zero2w-img35.png]]</p></li></ol>
<span id="使用win32diskimager烧录linux镜像的方法"></span>
<div class="figure">
[[File:media/image36zero2w-img36.png]]
</div></li>
<li><p>然后点击”'''Format'''”,格式化前会弹出一个警告框,选择”'''是(Y)'''”后就会开始格式化</p></li>
[[File:media/image37zero2w-img37.png]]
</ol>
<ol start="5" style="list-style-type: lower-alpha;">
<li><p>格式化完TF卡后会弹出下图所示的信息,点击确定即可</p>
<p>[[File:media/image38zero2w-img38.png]]</p></li></ol>
</li></ol>
<!-- -->
<li><p>b) 然后确认下TF卡的盘符和”'''设备'''”一栏中显示的一致</p></li>
<li><p>c) 最后点击”'''写入'''”即可开始烧录</p>
<p>[[File:media/image39zero2w-img39.png]]</p></li></ol>
</li>
<li><p>镜像写入完成后,点击”'''退出'''”按钮退出即可,然后就可以拔出TF卡插到开发板中启动</p></li></ol>
<ol start="4" style="list-style-type: decimal;">
<li><p>进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方</p>
<p>[[File:media/image27zero2w-img27.png]]</p></li>
<li><p>然后选择下载Linux版本的软件即可</p>
<p>[[File:media/image40zero2w-img40.png]]</p></li>
<li><p>从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-Zero-2W.html '''Orange Pi的资料下载页面''']下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”'''.img'''”结尾的文件就是操作系统的镜像文件,大小一般都在1GB以上。7z结尾的压缩包的解压命令如下所示:</p>
{| class="wikitable" style="width:800px;"
</li>
<li><p>然后在Ubuntu PC的图形界面双击'''balenaEtcher-1.14.3-x64.AppImage'''即可打开balenaEtcher('''无需安装'''),balenaEtcher打开后的界面显示如下图所示</p>
<p>[[File:media/image41zero2w-img41.png]]</p></li>
<li><p>使用balenaEtcher烧录Linux镜像的具体步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>然后选择TF卡的盘符</p></li>
<li><p>最后点击Flash就会开始烧录Linux镜像到TF卡中</p>
<p>[[File:media/image42zero2w-img42.png]]</p></li></ol>
</li>
<li><p>balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中</p>
<p>[[File:media/image43zero2w-img43.png]]</p></li>
<li><p>Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验</p>
<p>[[File:media/image44zero2w-img44.png]]</p></li>
<li><p>成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了</p>
<p>[[File:media/image45zero2w-img45.png]]</p></li></ol>
<span id="烧写android镜像到tf卡的方法"></span>
<ol style="list-style-type: decimal;">
<li><p>首先请确保Windows系统已经安装了'''Microsoft Visual C++ 2008 Redistrbutable - x86'''</p>
<p>[[File:media/image46zero2w-img46.png]]</p></li>
<li><p>如果没有安装'''Microsoft Visual C++ 2008 Redistrbutable - x86'''</p>
<p>,使用'''PhoenixCard'''格式化TF卡或者烧录Android镜像会提示下面的错误</p>
<div class="figure">
[[File:media/image47zero2w-img47.png]]
</div></li>
<li><p>'''Microsoft Visual C++ 2008 Redistrbutable - x86'''的安装包可以从Orange Pi Zero 2w的[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-Zero-2W.html '''官方工具''']中下载到,也可以去[https://www.microsoft.com/zh-cn/download/details.aspx?id=26368 '''微软官网''']下载</p>
<p>[[File:media/image48zero2w-img48.png]] [[File:media/image49zero2w-img49.png]]</p></li>
<li><p>然后准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡</p></li>
<li><p>然后使用读卡器把TF卡插入电脑</p></li>
<li><p>从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-Zero-2W.html '''Orange Pi的资料下载页面''']下载Android镜像和PhoenixCard烧写工具,请确保PhonenixCrad工具的版本为'''<span style="color:#FF0000">PhonixCard-4.2.8,请不要用低于4.2.8版本的PhonixCard软件来烧录Android镜像</span>,'''低于这个版本的PhonixCard工具烧写的Android镜像可能会有问题</p>
<p>[[File:media/image50zero2w-img50.png]]</p></li>
<li><p>然后使用解压软件解压下载的Android镜像的压缩包,解压后的文件中,以”'''.img'''” 结尾的文件就是Android镜像文件,大小在1GB以上。如果不知道怎么解压Android镜像的压缩包,可以安装一个[https://yasuo.360.cn/ '''360压缩软件''']来解压镜像。</p>
<p>[[File:media/image51zero2w-img51.png]]</p></li>
<li><p>然后使用解压软件解压'''PhonixCard4.2.8.zip''',此软件无需安装,在解压后的文件夹中找到PhoenixCard打开即可</p>
<p>[[File:media/image52zero2w-img52.png]]</p></li>
<li><p>打开PhoenixCard后,如果TF卡识别正常,会在中间的列表中显示TF卡的盘符和容量,'''<span style="color:#FF0000">请务必确认显示的盘符和你想烧录的TF卡的盘符是一致的</span>''',如果没有显示可以尝试拔插下TF卡,或者点击PhoenixCard中的”'''刷新盘符'''”按钮</p></li>
[[File:media/image53zero2w-img53.png]]
</ol>
<ol start="10" style="list-style-type: decimal;">
<li><p>确认完盘符后,先格式化TF卡,点击PhoenixCard中”'''恢复卡'''”按钮即可(如果”'''恢复卡'''”按钮为灰色的无法按下,可以先点击下”'''刷新盘符'''”按钮)</p>
<p>[[File:media/image54zero2w-img54.png]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<li><p>在”'''制作卡的种类'''”中选择”'''启动卡'''”</p></li>
<li><p>然后点击”'''烧卡'''”按钮就会开始烧录</p>
<p>[[File:media/image55zero2w-img55.png]]</p></li></ol>
</li>
<li><p>烧录完后PhoenixCard的显示如下图所示,此时点击”'''关闭'''”按钮即可退出PhoenixCard,然后就可以把TF卡从电脑中拔出来插到开发板中启动了</p>
<p>[[File:media/image56zero2w-img56.png]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''烧录完Android系统后在Windows中TF卡只能看到一个128 MB的分区,显示的分区如下图所示(有些电脑可能会弹出二十几个磁盘分区,但也只能打开128 MB的那个分区),请注意,这是正常的,请不要以为TF卡烧坏了。之所以这样,是因为安卓系统总共有二十几个分区,但大部分分区在Windows系统中是无法正常识别的。此时,请放心的拔下TF卡然后插入开发板中启动即可。'''</p></big>
<p>[[File:media/image57zero2w-img57.png|center]]</p>
<big><p>'''安卓系统启动后,使用下面的命令可以看到TF卡中的这二十几个分区:'''</p></big>
<p>[[File:media/image58zero2w-img58.png|center]]</p>
<big><p>'''使用df -h命令可以看到16GB的TF卡烧录完安卓系统后大概还有11 GB的空间可以用使用(二十几个分区并不会都挂载到安卓系统中,重点关注这些能看到的分区即可)。'''</p></big>
<p>[[File:media/image59zero2w-img59.png|center]]</p>
|}
</li></ol>
开发板上有一个16MB大小的SPI Flash,其所在位置如下图所示:
[[File:media/image60zero2w-img60.png]]
SPI Flash中默认烧录有一个微型的Linux系统,此系统主要用于证明开发板是能正常启动的。当拿到开发板后,不用烧录系统到TF卡中,只需要给开发板接上Type-C电源就能启动SPI Flash中的微型Linux系统。此系统的主要功能有:
<big>'''开发板上的两个Type-C接口都可以用来供电。'''</big>
[[File:media/image17zero2w-img17.png|center]]
|}
<ol style="list-style-type: decimal;">
<li><p>首先需要准备一个'''3.3v'''的USB转TTL模块,然后将USB转TTL模块的USB接口一端插入到电脑的USB接口中</p>
<p>[[File:media/image61zero2w-img61.png]]</p></li>
<li><p>开发板的调试串口GND、TX和RX引脚的对应关系如下图所示</p>
<p>[[File:media/image62zero2w-img62.png]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
</li>
<li><p>USB转TTL模块连接电脑和Orange Pi开发板的示意图如下所示</p>
<p>[[File:media/image63zero2w-img63.png]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
</li>
<li><p>执行putty命令后会弹出下面的界面</p>
<p>[[File:media/image64zero2w-img64.png]]</p></li>
<li><p>首先选择串口的设置界面</p>
<p>[[File:media/image65zero2w-img65.png]]</p></li>
<li><p>然后设置串口的参数</p>
<ol style="list-style-type: lower-alpha;">
<li><p>设置'''Speed(baud)'''为'''115200'''(串口的波特率)</p></li>
<li><p>设置'''Flow control'''为'''None'''</p>
<p>[[File:media/image66zero2w-img66.png]]</p></li></ol>
</li>
<li><p>在串口的设置界面设置完后,再回到Session界面</p>
<li><p>首先选择'''Connection type'''为'''Serial'''</p></li>
<li><p>然后点击'''Open'''按钮连接串口</p>
<p>[[File:media/image67zero2w-img67.png]]</p></li></ol>
</li>
<li><p>然后启动开发板,就能从打开的串口终端中看到系统输出的Log信息了</p>
<p>[[File:media/image68zero2w-img68.png]]</p></li></ol>
<span id="windows平台调试串口的使用方法"></span>
</li>
<li><p>进入MobaXterm下载网页后点击'''GET XOBATERM NOW!'''</p>
<p>[[File:media/image69zero2w-img69.png]]</p></li>
<li><p>然后选择下载Home版本</p>
<p>[[File:media/image70zero2w-img70.png]]</p></li>
<li><p>然后选择Portable便携式版本,下载完后无需安装,直接打开就可以使用</p>
<div class="figure">
[[File:media/image71zero2w-img71.png]]
</div></li></ol>
</li>
<li><p>下载完后使用解压缩软件解压下载的压缩包,即可得到MobaXterm的可执软件,然后双击打开</p>
<p>[[File:media/image72zero2w-img72.png]]</p></li>
<li><p>打开软件后,设置串口连接的步骤如下</p>
<ol style="list-style-type: lower-alpha;">
<li><p>最后点击”'''OK'''”按钮完成设置</p></li>
[[File:media/image73zero2w-img73.png]]
</ol>
</li></ol>
<ol start="4" style="list-style-type: decimal;">
<li><p>点击”'''OK'''”按钮后会进入下面的界面,此时启动开发板就能看到串口的输出信息了</p>
<p>[[File:media/image74zero2w-img74.png]]</p></li></ol>
== 使用开发板40pin接口中的5v引脚供电说明 ==
<div class="figure">
[[File:media/image75zero2w-img75.jpegpng]]
</div>
<li><p>黑色的杜邦线需要插到40pin接口的GND引脚上</p></li>
<li><p>40pin接口5V引脚和GND引脚在开发板中的位置如下图所示,'''<span style="color:#FF0000">切记不要接反了</span>'''</p>
<p>[[File:media/image23zero2w-img23.png]]</p></li></ol>
</li></ol>
<div class="figure">
[[File:media/image76zero2w-img76.png]]
</div>
<ol style="list-style-type: decimal;">
<li><p>linux系统默认就是自动登录终端的,默认登录的用户名是'''<span style="color:#FF0000">orangepi</span>'''</p>
<p>[[File:media/image77zero2w-img77.png]]</p></li>
<li><p>使用下面的命令可以设置root用户自动登录终端</p>
{| class="wikitable" style="width:800px;"
<div class="figure">
[[File:media/image78zero2w-img78.png]]
</div></li>
<div class="figure">
[[File:media/image79zero2w-img79.png]]
</div>
</li>
<li><p>然后重启系统,就会自动使用root用户登录桌面了</p>
<p>[[File:media/image80zero2w-img80.png]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
</li>
<li><p>然后选择'''System'''</p>
<p>[[File:media/image81zero2w-img81.png]]</p></li>
<li><p>然后选择'''Hardware'''</p>
<p>[[File:media/image82zero2w-img82.png]]</p></li>
<li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中'''disable-leds'''</p>
<p>[[File:media/image83zero2w-img83.png]]</p></li>
<li><p>然后选择'''&lt;Save&gt;'''保存</p>
<p>[[File:media/image84zero2w-img84.png]]</p></li>
<li><p>然后选择'''&lt;Back&gt;'''</p>
<p>[[File:media/image85zero2w-img85.png]]</p></li>
<li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p>
<p>[[File:media/image86zero2w-img86.png]]</p></li>
<li><p>重启后进入系统就可以看到开发板上的绿色LED灯都不会亮了</p></li></ol>
</li></ol>
</li>
<li><p>打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况</p>
<p>[[File:media/image87zero2w-img87.png]]</p></li>
<li><p>上图显示的是烧录完Linux桌面版系统后TF卡的情况,可以看到,虽然TF卡的总容量是16GB的(在GParted中显示为14.84GiB),但是rootfs分区(/dev/sdc1)实际只分配了4.05GiB,还剩下10.79GiB未分配</p></li></ol>
</li>
<ol start="4" style="list-style-type: decimal;">
<li><p>第一次启动完Linux系统后,我们还可以将TF卡从开发板中取下来重新插入'''<span style="color:#FF0000">Ubuntu电脑</span>''',然后再次使用gparted查看下TF卡的情况,如下图所示,rootfs分区(/dev/sdc1)的容量已经扩展到了14.69GiB了</p>
<p>[[File:media/image88zero2w-img88.png]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
</li>
<li><p>打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况。下图显示的是烧录完Linux桌面版系统后TF卡的情况,可以看到,虽然TF卡的总容量是16GB的(在GParted中显示为14.84GiB),但是rootfs分区(/dev/sdc1)实际只分配了4.05GiB,还剩下10.79GiB未分配</p>
<p>[[File:media/image87zero2w-img87.png]]</p></li>
<li><p>然后选中rootfs分区(/dev/sdc1)</p>
<p>[[File:media/image89zero2w-img89.png]]</p></li>
<li><p>再点击鼠标右键就可以看到下图所示的操作选项,如果TF卡已经挂载了,首先需要Umount掉TF卡的rootfs分区</p>
<p>[[File:media/image90zero2w-img90.png]]</p></li>
<li><p>然后再次选中rootfs分区,再点击鼠标右键,然后选择'''Resize/Move'''开始扩容rootfs分区的大小</p>
<p>[[File:media/image91zero2w-img91.png]]</p></li>
<li><p>'''Resize/Move'''选项打开后会弹出下面的设置界面</p>
<p>[[File:media/image92zero2w-img92.png]]</p></li>
<li><p>然后可以直接拖动下图所示的位置来设置容量的大小,也可以通过设置'''New size(MiB)'''中的数字来设置rootfs分区的大小</p>
<p>[[File:media/image93zero2w-img93.png]]</p></li>
<li><p>设置好容量后,再点击右下角的'''Resize/Move'''即可</p>
<p>[[File:media/image94zero2w-img94.png]]</p></li>
<li><p>最后确认无误后,再点击下图所示的'''绿色√'''</p>
<p>[[File:media/image95zero2w-img95.png]]</p></li>
<li><p>然后选择'''Apply''',就会正式开始扩容rootfs分区的容量</p>
<p>[[File:media/image96zero2w-img96.png]]</p></li>
<li><p>扩容完成后点击'''Close'''关闭即可</p>
<p>[[File:media/image97zero2w-img97.png]]</p></li>
<li><p>然后就可以把TF卡拔下来,再插到开发板中启动,进入开发板的Linux系统中后如果使用'''df -h'''命令可以看到rootfs分区的大小和前面设置的大小一致的话就说明手动扩容成功</p>
{| class="wikitable" style="width:800px;"
</li>
<li><p>打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况</p>
<p>[[File:media/image98zero2w-img98.png]]</p></li>
<li><p>然后选中rootfs分区(/dev/sdc1)</p>
<p>[[File:media/image99zero2w-img99.png]]</p></li>
<li><p>再点击鼠标右键就可以看到下图所示的操作选项,如果TF卡已经挂载了,首先需要Umount掉TF卡的rootfs分区</p>
<p>[[File:media/image100zero2w-img100.png]]</p></li>
<li><p>然后再次选中rootfs分区,再点击鼠标右键,然后选择'''Resize/Move'''开始设置rootfs分区的大小</p>
<p>[[File:media/image101zero2w-img101.png]]</p></li>
<li><p>'''Resize/Move'''选项打开后会弹出下面的设置界面</p>
<p>[[File:media/image102zero2w-img102.png]]</p></li>
<li><p>然后可以直接拖动下图所示的位置来设置容量的大小,也可以通过设置'''New sieze(MiB)'''中的数字来设置rootfs分区的大小</p>
<p>[[File:media/image93zero2w-img93.png]]</p></li>
<li><p>设置好容量后,再点击右下角的'''Resize/Move'''即可</p>
<p>[[File:media/image94zero2w-img94.png]]</p></li>
<li><p>最后确认无误后,再点击下图所示的'''绿色√'''</p>
<p>[[File:media/image95zero2w-img95.png]]</p></li>
<li><p>然后选择'''Apply''',就会正式开始扩容rootfs分区的容量</p>
<p>[[File:media/image96zero2w-img96.png]]</p></li>
<li><p>扩容完成后点击'''Close'''关闭即可</p>
<p>[[File:media/image97zero2w-img97.png]]</p></li>
<li><p>然后就可以把TF卡拔下来,再插到开发板中启动,进入开发板的Linux系统中后如果使用'''df -h'''命令可以看到rootfs分区的大小和前面设置的大小一致的话就说明缩小容量成功</p>
{| class="wikitable" style="width:800px;"
<ol style="list-style-type: decimal;">
<li><p>开发板24 pin扩展板接口引脚的顺序请参考下图</p>
<p>[[File:media/image103zero2w-img103.png]]</p></li>
<li><p>开发板24pin扩展板接口的原理图如下所示</p>
<p>[[File:media/image104zero2w-img104.png]]</p></li>
<li><p>扩展板接入开发板的方式如下所示,请注意排线的正反方向,不要插反了</p>
<div class="figure">
[[File:media/image105zero2w-img105.jpegpng]]
</div></li>
<li><p>扩展板可以扩展的功能有</p>
<p>[[File:media/image6zero2w-img6.png|800px]]</p></li>
{| class="wikitable" style="width:800px;text-align: center;"
<ol style="list-style-type: decimal;">
<li><p>24pin扩展板上有两个LRADC按键,位置如下图所示:</p>
<p>[[File:media/image106zero2w-img106.png]]</p></li>
<li><p>在Linux系统中,KEY1和KEY2默认设置的键值为</p></li>
<ol style="list-style-type: decimal;">
<li><p>开发板主板上是没有有线网络接口的,我们可以通过24pin扩展板来扩展百兆有线网络接口</p>
<p>[[File:media/image107zero2w-img107.png]]</p></li>
<li><p>然后将网线的一端插入扩展板的以太网接口,网线的另一端接入路由器,并确保网络是畅通的</p></li>
<li><p>系统启动后会通过'''DHCP'''自动给以太网卡分配IP地址,'''<span style="color:#FF0000">不需要其他任何配置</span>'''</p></li>
<div class="figure">
[[File:media/image108zero2w-img108.png]]
</div></li>
</li>
<li><p>输入nmtui命令打开的界面如下所示</p>
<p>[[File:media/image109zero2w-img109.png]]</p></li>
<li><p>选择'''Activate a connect'''后回车</p>
<p>[[File:media/image110zero2w-img110.png]]</p></li>
<li><p>然后就能看到所有搜索到的WIFI热点</p>
<p>[[File:media/image111zero2w-img111.png]]</p></li>
<li><p>选择想要连接的WIFI热点后再使用Tab键将光标定位到'''Activate'''后回车</p>
<p>[[File:media/image112zero2w-img112.png]]</p></li>
<li><p>然后会弹出输入密码的对话框,在'''Pssword'''内输入对应的密码然后回车就会开始连接WIFI</p>
<p>[[File:media/image113zero2w-img113.png]]</p></li>
<li><p>WIFI连接成功后会在已连接的WIFI名称前显示一个”*”</p>
<p>[[File:media/image114zero2w-img114.png]]</p></li>
<li><p>通过'''ip a s wlan0'''命令可以查看wifi的IP地址</p>
{| class="wikitable" style="width:800px;"
<ol style="list-style-type: decimal;">
<li><p>点击桌面右上角的网络配置图标(测试WIFI时请不要连接网线)</p>
<p>[[File:media/image115zero2w-img115.png]]</p></li>
<li><p>在弹出的下拉框中点击'''More networks'''可以看到所有扫描到的WIFI热点,然后选择想要连接的WIFI热点</p>
<p>[[File:media/image116zero2w-img116.png]]</p></li>
<li><p>然后输入WIFI热点的密码,再点击'''Connect'''就会开始连接WIFI</p>
<p>[[File:media/image117zero2w-img117.png]]</p></li>
<li><p>连接好WIFI后,可以打开浏览器查看是否能上网,浏览器的入口如下图所示</p>
<p>[[File:media/image118zero2w-img118.png]]</p></li>
<li><p>打开浏览器后如果能打开其他网页说明WIFI连接正常</p>
<div class="figure">
[[File:media/image119zero2w-img119.png]]
</div></li></ol>
</li>
<li><p>此时拿出手机,在搜索到的WIFI列表中就能找到开发板创建的名为'''orangepi'''的WIFI热点,然后可以点击 '''orangepi'''连接热点,密码就是上面设置的'''orangepi'''</p>
<p>[[File:media/image120zero2w-img120.png]]</p></li>
<li><p>连接成功后的显示如下图所示</p>
<p>[[File:media/image121zero2w-img121.png]]</p></li>
<li><p>在NAT模式下,连接到开发板热点的无线设备是向开发板的DHCP服务请求IP地址的,所以会有两个不同的网段,如这里开发板的IP是192.168.1.X</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|}
<p>而开发板的DHCP服务默认会给接入热点的设备分配'''192.168.12.0/24'''的IP地址,这时点击已经连接的WIFI热点'''orangepi''',然后就可以看到手机的IP地址是'''192.168.12.X'''。</p>
<p>[[File:media/image121zero2w-img121.png]]</p><p>[[File:media/image122zero2w-img122.png]]</p></li>
<li><p>如果想要为接入的设备指定不同的网段,可以通过-g参数指定,如通过-g参数指定接入点AP的网段为192.168.2.1</p></li>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
此时通过手机连接到热点后,点击已经连接的WIFI热点'''orangepi''',然后可以看到手机的IP地址是'''192.168.2.X'''。
[[File:media/image121zero2w-img121.png]]
[[File:media/image123zero2w-img123.png]]
</ol>
<ol start="7" style="list-style-type: decimal;">
此时手机是搜索不到WIFI热点的,需要手动指定WIFI热点名称,并输入密码来连接WIFI热点
[[File:media/image124zero2w-img124.png]]
</li></ol>
<span id="create_ap以bridge模式创建wifi热点的方法"></span>
</li>
<li><p>此时拿出手机,在搜索到的WIFI列表中就能找到开发板创建的名为'''orangepi'''的WIFI热点,然后可以点击'''orangepi'''连接热点,密码就是上面设置的'''orangepi'''</p>
<p>[[File:media/image120zero2w-img120.png]]</p></li>
<li><p>连接成功后的显示如下图所示</p>
<p>[[File:media/image121zero2w-img121.png]]</p></li>
<li><p>在bridge模式下,连接到开发板热点的无线设备也是向主路由(开发板连接的路由器)的DHCP服务请求IP地址的,如这里开发板的IP是'''192.168.1.X'''</p>
{| class="wikitable" style="width:800px;"
|}
<p>而接入WIFI热点的设备的IP也是由主路由分配的,所以连接WIFI热点的手机和开发板处于相同的网段,这时点击已经连接的WIFI热点'''orangepi''',然后就可以看到手机的IP地址也是'''192.168.1.X'''。</p>
<p>[[File:media/image121zero2w-img121.png]]</p><p>[[File:media/image125zero2w-img125.png]]</p></li>
<li><p>在不指定'''--freq-band'''参数的情况下,默认创建的热点是2.4G频段的,如果想要创建5G频段的热点可以通过'''--freq-band 5'''参数指定,具体命令如下</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
此时手机是搜索不到WIFI热点的,需要手动指定WIFI热点名称,并输入密码来连接WIFI热点
[[File:media/image124zero2w-img124.png]]
</li></ol>
</li>
<li><p>然后选择'''Edit a connection'''并按下回车键</p>
<p>[[File:media/image126zero2w-img126.png]]</p></li>
<li><p>然后选择需要设置静态IP地址的网络接口,比如设置'''Ethernet'''接口的静态IP地址选择'''Wired connection 1'''就可以了</p>
<p>[[File:media/image127zero2w-img127.png]]</p></li>
<li><p>然后通过'''Tab'''键选择'''Edit'''并按下回车键</p>
<p>[[File:media/image128zero2w-img128.png]]</p></li>
<li><p>然后通过Tab键将光标移动到下图所示的'''&lt;Automatic&gt;'''位置进行IPv4的配置</p>
<p>[[File:media/image129zero2w-img129.png]]</p></li>
<li><p>然后回车,通过上下方向键选择'''Manual''',然后回车确定</p>
<p>[[File:media/image130zero2w-img130.png]]</p></li>
<li><p>选择完后的显示如下图所示</p>
<p>[[File:media/image131zero2w-img131.png]]</p></li>
<li><p>然后通过Tab键将光标移动到'''&lt;Show&gt;'''</p>
<p>[[File:media/image132zero2w-img132.png]]</p></li>
<li><p>然后回车,回车后会弹出下面的设置界面</p>
<p>[[File:media/image133zero2w-img133.png]]</p></li>
<li><p>然后就可以在下图所示的位置设置IP地址(Addresses)、网关(Gateway)和DNS服务器的地址(里面还有很多其他设置选项,请自行探索),'''<span style="color:#FF0000">请根据自己的具体需求来设置,下图中设置的值只是一个示例</span>'''</p>
<p>[[File:media/image134zero2w-img134.png]]</p></li>
<li><p>设置完后将光标移动到右下角的'''&lt;OK&gt;''',然后回车确认</p>
<p>[[File:media/image135zero2w-img135.png]]</p></li>
<li><p>然后点击'''&lt;Back&gt;'''回退到上一级选择界面</p>
<p>[[File:media/image136zero2w-img136.png]]</p></li>
<li><p>然后选择'''Activate a connection''',再将光标移动到'''&lt;OK&gt;''',最后点击回车</p>
<p>[[File:media/image137zero2w-img137.png]]</p></li>
<li><p>然后选择需要设置的网络接口,比如'''Wired connection 1''',然后将光标移动到'''&lt;Deactivate&gt;''',再按下回车键禁用'''Wired connection 1'''</p>
<p>[[File:media/image138zero2w-img138.png]]</p></li>
<li><p>然后请不要移动光标,再按下回车键重新使能'''Wired connection 1''',这样前面设置的静态IP地址就会生效了</p>
<p>[[File:media/image139zero2w-img139.png]]</p></li>
<li><p>然后通过'''&lt;Back&gt;'''和'''Quit'''按钮就可以退出nmtui</p>
<p>[[File:media/image140zero2w-img140.png]] [[File:media/image141zero2w-img141.png]]</p></li>
<li><p>然后通过'''ip a s eth0'''就能看到网口的IP地址已经变成前面设置的静态IP地址了</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<ol start="3" style="list-style-type: decimal;">
<li><p>成功登录系统后的显示如下图所示</p>
<p>[[File:media/image142zero2w-img142.png]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<li><p>然后在'''Specify username'''中输入linux系统的用户名'''root'''或'''orangepi'''</p></li>
<li><p>最后点击'''OK'''即可</p>
<p>[[File:media/image143zero2w-img143.png]]</p></li></ol>
</li>
<li><p>然后会提示输入密码,默认root和orangepi用户的密码都为orangepi</p>
<big><p>'''注意,输入密码的时候,<span style="color:#FF0000">屏幕上是不会显示输入的密码的具体内容的</span>,请不要以为是有什么故障,输入完后直接回车即可。'''</p></big>
|}
<p>[[File:media/image144zero2w-img144.png]]</p></li>
<li><p>成功登录系统后的显示如下图所示</p>
<p>[[File:media/image145zero2w-img145.png]]</p></li></ol>
<span id="hdmi测试"></span>
<div class="figure">
[[File:media/image14zero2w-img14.jpegpng]]
</div></li>
<ol style="list-style-type: lower-alpha;">
<li><p>HDMI转VGA转换器</p>
<p>[[File:media/image146zero2w-img146.png]]</p></li>
<li><p>一根VGA线和一个Mini HDMI公转HDMI母的转接头</p>
<p>[[File:media/image147zero2w-img147.png]] [[File:media/image148zero2w-img148.png]]</p></li>
<li><p>一个支持VGA接口的显示器或者电视</p></li></ol>
</li>
<li><p>HDMI转VGA显示测试如下所示</p>
<p>[[File:media/image149zero2w-img149.png]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<p>orangepi@orangepi:~$ '''sudo cat /sys/class/disp/disp/attr/sys'''</p>
|}
<p>[[File:media/image150zero2w-img150.png]]</p></li></ol>
<span id="linux5.4系统framebuffer宽度和高度的修改方法"></span>
<ol style="list-style-type: decimal;">
<li><p>点击桌面右上角的蓝牙图标</p>
<p>[[File:media/image151zero2w-img151.png]]</p></li>
<li><p>然后选择适配器</p>
<p>[[File:media/image152zero2w-img152.png]]</p></li>
<li><p>如果有提示下面的界面,请选择'''Yes'''</p>
<p>[[File:media/image153zero2w-img153.png]]</p></li>
<li><p>然后在蓝牙的适配器设置界面中设置'''Visibility Setting'''为'''Always visible''',然后关闭即可</p>
<p>[[File:media/image154zero2w-img154.png]]</p></li>
<li><p>然后打开蓝牙设备的配置界面</p>
<p>[[File:media/image155zero2w-img155.png]]</p></li>
<li><p>点击'''Search'''即可开始扫描周围的蓝牙设备</p>
<p>[[File:media/image156zero2w-img156.png]]</p></li>
<li><p>然后选择想要连接的蓝牙设备,再点击鼠标右键就会弹出对此蓝牙设备的操作界面,选择'''Pair'''即可开始配对,这里演示的是和Android手机配对</p>
<p>[[File:media/image157zero2w-img157.png]]</p></li>
<li><p>配对时,桌面的右上角会弹出配对确认框,选择'''Confirm'''确认即可,此时手机上也同样需要进行确认</p>
<p>[[File:media/image158zero2w-img158.png]]</p></li>
<li><p>和手机配对完后,可以选择已配对的蓝牙设备,然后右键选择'''Send a File'''即可开始给手机发送一张图片</p>
<p>[[File:media/image159zero2w-img159.png]]</p></li>
<li><p>发送图片的界面如下所示</p>
<p>[[File:media/image160zero2w-img160.png]]</p></li></ol>
=== 服务器版镜像的使用方法 ===
</li>
<li><p>配对成功后,手机蓝牙界面的显示如下所示</p>
<p>[[File:media/image161zero2w-img161.png]]</p></li>
<li><p>连接蓝牙设备需要安装 '''pulseaudio-module-bluetooth'''软件包,然后再启动'''pulseaudio''' 服务</p>
{| class="wikitable" style="width:800px;"
<div class="figure">
[[File:media/image162zero2w-img162.jpegpng]]
</div></li></ol>
如下图所示,开发板的主板上只有两个Type-C类型的USB2.0接口,是无法直接接USB Type-A类型的鼠标、键盘等USB设备的。
[[File:media/image163zero2w-img163.png]]
如果只购买了主板,没有购买24pin扩展板,可以准备一根线下图所示的Type-C转USB线,将其Type-C接口的一端插入主板的Type-C接口中,然后另一端就可以接鼠标键盘等USB设备了,如果觉得一个 USB接口不够用,还可以通过USB Hub来扩展多个USB接口。
[[File:media/image24zero2w-img24.png]]
如果购买了24pin扩展板,就无需Type-C转USB线,因为24pin扩展板可以扩展出两个USB2.0 接口。
[[File:media/image107zero2w-img107.png]]
<span id="usb0设置为host模式的方法"></span>
如下图所示,开发板的主板上有两个Type-C类型的接口:USB0和USB1,这两个接口都可以用来给开发板供电,也都可以用来当做USB2.0 HOST接口。USB0和USB1的区别是:USB0除了可以设置为HOST模式外,还可以设置为Device模式,而USB1只有HOST模式。
[[File:media/image163zero2w-img163.png]]
Orange Pi发布的Linux系统USB0默认设置为Device模式,所以在不需要使用USB0 Device模式时,建议使用USB0来供电,这样USB1就可以直接用来接USB设备。
</li>
<li><p>然后选择'''System'''</p>
<p>[[File:media/image81zero2w-img81.png]]</p></li>
<li><p>然后选择'''Hardware'''</p>
<p>[[File:media/image82zero2w-img82.png]]</p></li>
<li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中'''usb0-host'''</p>
<p>[[File:media/image164zero2w-img164.png]]</p></li>
<li><p>然后选择'''&lt;Save&gt;'''保存</p>
<p>[[File:media/image84zero2w-img84.png]]</p></li>
<li><p>然后选择'''&lt;Back&gt;'''</p>
<p>[[File:media/image85zero2w-img85.png]]</p></li>
<li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p>
<p>[[File:media/image86zero2w-img86.png]]</p></li>
<li><p>重启后USB0就能正常使用鼠标键盘等USB设备了</p></li></ol>
<div class="figure">
[[File:media/image165zero2w-img165.png]]
</div></li></ol>
<ol style="list-style-type: decimal;">
<li><p>开发板主板上是没有耳机接口的,我们可以通过24pin扩展板来扩展</p>
<p>[[File:media/image107zero2w-img107.png]]</p></li>
<li><p>通过'''aplay -l'''命令可以查看linux系统支持的声卡设备</p>
<ol style="list-style-type: lower-alpha;">
<ol style="list-style-type: decimal;">
<li><p>首先打开文件管理器</p>
<p>[[File:media/image166zero2w-img166.png]]</p></li>
<li><p>然后找到下面这个文件(如果系统中没有这个音频文件,可以自己上传一个音频文件到系统中)</p>
<p>[[File:media/image167zero2w-img167.png]]</p></li>
<li><p>然后选中audio.wav文件,右键选择使用vlc打开就可以开始播放</p>
<p>[[File:media/image168zero2w-img168.png]]</p></li>
<li><p>切换HDMI播放和耳机播放等不同音频设备的方法</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先打开音量控制界面</p>
<p>[[File:media/image169zero2w-img169.png]]</p></li>
<li><p>播放音频的时候,在'''Playback'''中会显示播放软件可以使用的音频设备选项,如下图所示,在这里可以设置需要播放到哪个音频设备</p>
<div class="figure">
[[File:media/image170zero2w-img170.png]]
</div></li></ol>
<ol style="list-style-type: decimal;">
<li><p>开发板主板上是没有红外接收器的,我们可以通过24pin扩展板来扩展</p>
<p>[[File:media/image107zero2w-img107.png]]</p></li>
<li><p>安装ir-keytable 红外测试软件</p></li>
{| class="wikitable" style="width:800px;"
<div class="figure">
[[File:media/image171zero2w-img171.jpegpng]]
</div></li>
temp1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +'''<span style="color:#FF0000">47.4°C</span>''' (crit = +110.0°C)
 
gpu_thermal-virtual-0
temp1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +'''<span style="color:#FF0000">48.7°C</span>''' (crit = +110.0°C)
 
ddr_thermal-virtual-0
temp1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +'''<span style="color:#FF0000">47.8°C</span>''' (crit = +110.0°C)
 
ve_thermal-virtual-0
== 40 Pin接口引脚说明 ==
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。'''</big>|}
<ol style="list-style-type: decimal;">
<li><p>Orange Pi Zero 2w开发板40 Pin接口引脚的顺序请参开发板上的丝印图</p>
<p>[[File:media/image172zero2w-img172.png]]</p></li><li><p>开发板40 Pin接口引脚的功能如下表所示</p></li></ol>
<div style="display: flex;">{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"
|-
| '''GPIO序号'''
| '''功能'''
| '''引脚'''
|
| '''引脚'''
| '''功能'''
| '''GPIO'''
| '''GPIO序号'''
|-
| style="text-align: left;"|
| '''3.3V'''
| '''1'''
|
| '''2'''
| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''264'''
| '''TWI1-SDA'''
| '''3'''
|
| '''4'''
| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''263'''
| '''TWI1-SCL'''
| '''5'''
|
| '''6'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''269'''
| '''PWM3/UART4_TX'''
| '''7'''
|
| '''8'''
| '''UART0_TX'''
| '''PH0'''
| '''224'''
|-
| style="text-align: left;"|
| '''GND'''
| '''9'''
|
| '''10'''
| '''UART0_RX'''
| '''PH1'''
| '''225'''
|-
| '''226'''
| '''UART5_TX'''
| '''11'''
|
| '''12'''
| style="text-align: left;"|
| '''PI1'''
| '''257'''
|-
| '''227'''
| '''UART5_RX'''
| '''13'''
|
| '''14'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''261'''
| '''TWI0_SCL/UART2_TX'''
| '''15'''
|
| '''16'''
| '''PWM4/UART4_RX'''
| '''PI14'''
| '''270'''
|-
| style="text-align: left;"|
| '''3.3V'''
| '''17'''
|
| '''18'''
| style="text-align: left;"|
| '''PH4'''
| '''228'''
|-
| '''231'''
| '''SPI1_MOSI'''
| '''19'''
|| '''20'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-
| '''232'''
| '''PH8'''
| '''SPI1_MISO'''
| '''21'''
|
| '''22'''
| '''TWI0_SDA/UART2_RX'''
| '''PI6'''
| '''262'''
|-
| '''230'''
| '''SPI1_CLK'''
| '''23'''
|
| '''24'''
| '''SPI1_CS0'''
| '''PH5'''
| '''229'''
|-
| style="text-align: left;"|
| '''GND'''
| '''25'''
|
| '''26'''
| '''SPI1_CS1'''
| '''PH9'''
| '''233'''
|-
| '''266'''
| '''TWI2-SDA/UART3_RX'''
| '''27'''
|
| '''28'''
| '''TWI2-SCL/UART3_TX'''
| '''PI9'''
| '''265'''
|-
| '''256'''
| style="text-align: left;"|
| '''29'''
|
| '''30'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''271'''
| style="text-align: left;"|
| '''31'''
|
| '''32'''
| '''PWM1'''
| '''PI11'''
| '''267'''
|-
| '''268'''
| '''PWM2'''
| '''33'''
|
| '''34'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''258'''
| style="text-align: left;"|
| '''35'''
|
| '''36'''
| style="text-align: left;"|
| '''PC12'''
| '''76'''
|-
| '''272'''
| style="text-align: left;"|
| '''37'''
|
| '''38'''
| style="text-align: left;"|
| '''PI4'''
| '''260'''
|-
| style="text-align: left;"|
| '''GND'''
| '''39'''
|
| '''40'''
| style="text-align: left;"|
| '''PI3'''
| '''259'''
|}
 <ol start{| class="3" style="list-style-type: decimal;"><li>40pin接口中总共有'''28'''个GPIO口,所有GPIO口的高电平电压都是'''3.3v'''</li></ol> <span id=wikitable"安装wiringop的方法"></span>== 安装wiringOP的方法 == '''注意,Orange Pi发布的linux镜像中已经预装了wiringOP,除非wiringOP的代码有更新,否则无需重新下载编译安装,直接使用即可。''' '''编译好的wiringOP的deb包在orangepi-build中的存放路径为:''' '''orangepi-build/external/cache/debs/arm64/wiringpi_x.xx.deb''' '''进入系统后可以运行下gpio readall命令,如果能看到下面的输出,说明wiringOP已经预装并且能正常使用。''' [[File:media/image173.png]] '''wiringOP目前主要适配了设置GPIO口输入输出,设置GPIO口输出高低电平以及设置上下拉电阻的功能,像硬件PWM这样的功能是用不了的。''' <ol style="list-style-typewidth: decimal390px;"><li><p>下载wiringOP的代码</p><p>orangepi@orangepi:~$ '''sudo apt update'''</p><p>orangepi@orangepi:~$ '''sudo apt install -y git'''</p><p>orangepi@orangepi:~$ '''git clone https://github.com/orangepi-xunlong/wiringOP.git -b next'''</p><p>'''注意,源码需要下载wiringOP next分支的代码,请别漏了-b next这个参数。'''</p><p>'''如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP源码,存放位置为:/usr/src/wiringOP。'''</p></li><li><p>编译安装wiringOP</p><p>orangepi@orangepi:~$ '''cd wiringOP'''</p><p>orangepi@orangepi:~/wiringOP$ '''sudo ./build clean'''</p><p>orangepi@orangepi:~/wiringOP$ '''sudo ./build'''</p></li><li><p>测试gpio readall命令的输出如下</p><p>[[File:media/image173.png]]</p></li></ol> <span id="pin接口gpioi2cuartspi和pwm测试"></span>== 40pin接口GPIO、I2C、UART、SPI和PWM测试 == '''注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。''' <span id="pin-gpio口测试"></span>=== 40pin GPIO口测试 === <ol style="list-stylemargin-typeright: decimal20px;"><li><p>下面以7号引脚——对应GPIO为PI13——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p><p>[[File:media/image174.png]]</p></li><li><p>首先设置GPIO口为输出模式,其中第三个参数需要输入引脚对应的wPi的序号</p><p>root@orangepi:~/wiringOP# '''gpio mode 2 out'''</p></li><li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p><p>root@orangepi:~/wiringOP# '''gpio write 2 0'''</p></li><li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p><p>root@orangepi:~/wiringOP# '''gpio write 2 1'''</p></li><li><p>其他引脚的设置方法类似,只需修改wPi的序号为引脚对应的序号即可</p></li></ol> <span id="pin-gpio口上下拉电阻的设置方法"></span>=== 40 Pin GPIO口上下拉电阻的设置方法 === <ol style="list-styletext-typealign: decimalcenter;"><li><p>下面以7号引脚——对应GPIO为PI13——对应wPi序号为2——为例演示如何设置GPIO口的上下拉电阻</p><p>[[File:media/image174.png]]</p></li><li><p>首先需要设置GPIO口为输入模式,其中第三个参数需要输入引脚对应的wPi的序号</p><p>root@orangepi:~/wiringOP# '''gpio mode 2 in'''</p></li><li><p>设置为输入模式后,执行下面的命令可以设置GPIO口为上拉模式</p><p>root@orangepi:~/wiringOP# '''gpio mode 2 up'''</p></li><li><p>然后输入下面的命令读取GPIO口的电平,如果电平为1,说明上拉模式设置成功</p><p>root@orangepi:~/wiringOP# '''gpio read 2'''</p><p>'''1'''</p></li><li><p>然后执行下面的命令可以设置GPIO口为下拉模式</p><p>root@orangepi:~/wiringOP# '''gpio mode 2 down'''</p></li><li><p>然后输入下面的命令读取GPIO口的电平,如果电平为0,说明下拉模式设置成功</p><p>root@orangepi:~/wiringOP# '''gpio read 2'''</p><p>'''0'''</p></li></ol> <span id="pin-spi测试"></span>=== 40pin SPI测试 === # 由下表可知,40pin接口可用的spi为spi1,有两个片选引脚cs0和cs1 {| class="wikitable"|-| '''GPIO序号'''| '''GPIO'''| '''功能'''| '''引脚'''|| '''引脚'''
| '''功能'''
| '''GPIO'''
| '''GPIO序号'''
|-
| style="text-align: left;"|| style="text-align: left;"|| '''3.3V'''| '''1'''|| '''2'''| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''264'''
| '''PI8'''
| '''TWI1-SDA'''
| '''3'''
|
| '''4'''
| '''5V'''
| style="text-align: left;"|
|-
| '''263'''
| '''PI7'''
| '''TWI1-SCL'''
| '''5'''
|
| '''6'''
| '''GND'''
| style="text-align: left;"|
|-
| '''269'''
| '''PI13'''
| '''PWM3/UART4_TX'''
| '''7'''
|
| '''8'''
| '''UART0_TX'''
| '''224'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''GND'''
| '''9'''
|
| '''10'''
| '''UART0_RX'''
| '''225'''
|-
| '''226'''
| '''PH2'''
| '''UART5_TX'''
| '''11'''
|
| '''12'''
| style="text-align: left;"|
| '''257'''
|-
| '''227'''
| '''PH3'''
| '''UART5_RX'''
| '''13'''
|
| '''14'''
| '''GND'''
| style="text-align: left;"|
|-
| '''261'''
| '''PI5'''
| '''TWI0_SCL/UART2_TX'''
| '''15'''
|
| '''16'''
| '''PWM4/UART4_RX'''
| '''270'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''3.3V'''
| '''17'''
|
| '''18'''
| style="text-align: left;"|
| '''228'''
|-
| '''231'''
| '''PH7'''
| '''SPI1_MOSI'''
| '''19'''
|
| '''20'''
| '''GND'''
| style="text-align: left;"|
|-
| '''232'''
| '''PH8'''
| '''SPI1_MISO'''
| '''21'''
|
| '''22'''
| '''TWI0_SDA/UART2_RX'''
| '''262'''
|-
| '''230'''| '''PH6'''| '''SPI1_CLK'''| '''23'''|| '''24'''| '''SPI1_CS0'''
| '''PH5'''
| '''229'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''GND'''
| '''25'''
|
| '''26'''
| '''SPI1_CS1'''
| '''233'''
|-
| '''266'''
| '''PI10'''
| '''TWI2-SDA/UART3_RX'''
| '''27'''
|
| '''28'''
| '''TWI2-SCL/UART3_TX'''
| '''265'''
|-
| '''256'''
| '''PI0'''
| style="text-align: left;"|
| '''29'''
|
| '''30'''
| '''GND'''
| style="text-align: left;"|
|-
| '''271'''
| '''PI15'''
| style="text-align: left;"|
| '''31'''
|
| '''32'''
| '''PWM1'''
| '''267'''
|-
| '''268'''
| '''PI12'''
| '''PWM2'''
| '''33'''
|
| '''34'''
| '''GND'''
| style="text-align: left;"|
|-
| '''258'''
| '''PI2'''
| style="text-align: left;"|
| '''35'''
|
| '''36'''
| style="text-align: left;"|
| '''76'''
|-
| '''272'''
| '''PI16'''
| style="text-align: left;"|
| '''37'''
|
| '''38'''
| style="text-align: left;"|
| '''260'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''GND'''
| '''39'''
|
| '''40'''
| style="text-align: left;"|
| '''259'''
|}
</div>
</ol>
<ol start="3" style="list-style-type: decimal;">
<li>40pin接口中总共有'''28'''个GPIO口,所有GPIO口的高电平电压都是'''<span style="color:#FF0000">3.3v</span>'''</li></ol>
 
<span id="安装wiringop的方法"></span>
<ol style="list-style-type: decimal;"><li><p>Linux系统中spi1默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p><p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p></li><li><p>然后选择'''System'''</p><p>[[File:media/image81.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:media/image82.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中想要打开的SPI的dtbo配置</p></li></ol></li></ol>安装wiringOP的方法 ==
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| '''dtbo配置'''| '''说明'''|-| '''spi1-cs0-cs1-spidev'''| '''同时打开spi1的cs0和cs1'''|-| <big>'''spi1-cs0-spidev注意,Orange Pi发布的linux镜像中已经预装了wiringOP,除非wiringOP的代码有更新,否则无需重新下载编译安装,直接使用即可。'''| '''只打开spi1的cs0'''|-| '''spi1编译好的wiringOP的deb包在orangepi-cs1-spidevbuild中的存放路径为:'''| '''只打开spi1的cs1'''|}
[[File'''<span style="color:mediablue">orangepi-build/image175external/cache/debs/arm64/wiringpi_x.png]]xx.deb</span>'''
<ol start="5" style="list-style-type: lower-alpha;">
<li><p>然后选择'''&lt;Save&gt;'''保存</p>
<p>[[File:media/image84.png]]</p></li>
<li><p>然后选择'''&lt;Back&gt;'''</p>
<p>[[File:media/image85.png]]</p></li>
<li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p>
<p>[[File:media/image86.png]]</p></li></ol>
<!-- --><ol start="2" style="list-style-type: decimal;"><li><p>然后查看下linux系统中是否存在'''spidev1.x'''的设备节点,如果存在,说明SPI1的配置已经生效了</p><p>orangepi@orangepi:~$ '''ls /dev/spidev1*'''</p><p>/dev/spidev1.0 /dev/spidev1.1</p><p>'''注意,只有打开spi1-cs0-cs1-spidev时,才会看到两个spi的设备节点。'''</p></li><li><p>下面开始spi的回环测试,先不短接SPI1的mosi和miso两个引脚,运行spidev_test的输出结果如下所示,可以看到TX和RX的数据不一致</p><p>orangepi@orangepi:~$ ''进入系统后可以运行下gpio readall命令,如果能看到下面的输出,说明wiringOP已经预装并且能正常使用。'sudo spidev_test -v -D /dev/spidev1.0'''</p><p>spi mode: 0x0</p><p>bits per word: 8</p><p>max speed: 500000 Hz (500 KHz)</p><p>TX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.</p><p>RX | FF FF FF FF FF FF '''FF FF FF FF FF FF''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ............................….</p></li><li><p>然后短接SPI1的mosi(40pin接口中的第19号引脚)和miso(40pin接口中的第21号引脚)两个引脚再运行spidev_test的输出如下,可以看到发送和接收的数据一样,说明回环测试通过。</p><p>orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev1.0'''</p><p>spi mode: 0x0</p><p>bits per word: 8</p><p>max speed: 500000 Hz (500 KHz)</p><p>TX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.</p><p>RX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.</p></li></olbig>
<span id="pin[[File:zero2w-i2c测试"></span>=== 40pin I2C测试 ===img173.png|center|800px]]
# 由下表可知,40pin接口可用的i2c为i2c0、i2c1和i2c2<big>'''wiringOP目前主要适配了设置GPIO口输入输出,设置GPIO口输出高低电平以及设置上下拉电阻的功能,像硬件PWM这样的功能是用不了的。'''</big>|}
<ol style="list-style-type: decimal;"><li><p>下载wiringOP的代码</p>{| class="wikitable" style="width:800px;"
|-
| '''GPIO序号'''| <p>orangepi@orangepi:~$ '''GPIOsudo apt update'''</p>| <p>orangepi@orangepi:~$ '''功能sudo apt install -y git'''</p>| <p>orangepi@orangepi:~$ '''引脚git clone https://github.com/orangepi-xunlong/wiringOP.git -b next'''</p>|}{| '''引脚'''| '''功能'''| '''GPIO'''| '''GPIO序号'''class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| style="text-align: left;"|| style="text-align: left;"|| <big><p>'''3.3V注意,源码需要下载wiringOP next分支的代码,请别漏了-b next这个参数。'''</p>| <p>'''1如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP源码,存放位置为:/usr/src/wiringOP。'''</p></big>|}| '''2'''</li>| '''5V'''<li><p>编译安装wiringOP</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| <p>orangepi@orangepi:~$ '''264cd wiringOP'''</p>| <p>orangepi@orangepi:~/wiringOP$ '''PI8sudo ./build clean'''</p>| <p>orangepi@orangepi:~/wiringOP$ '''TWI1-SDAsudo ./build'''</p>| '''3'''}</li>|<li><p>测试gpio readall命令的输出如下</p>| '''4'''<p>[[File:zero2w-img173.png]]</p></li></ol>| '''5V'''| style<span id="text-align: left;pin接口gpioi2cuartspi和pwm测试"|></span> == 40pin接口GPIO、I2C、UART、SPI和PWM测试 == {| class="wikitable" style="textbackground-aligncolor:#ffffdc;width: left800px;"|
|-
| '''263'''| <big>'''PI7注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。'''</big>| '''TWI1-SCL'''}| '''5'''|<span id="pin-gpio口测试"></span>| '''6'''=== 40pin GPIO口测试 ===| '''GND'''| <ol style="textlist-style-aligntype: leftdecimal;"|><li><p>下面以7号引脚——对应GPIO为PI13——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p><p>[[File:zero2w-img174.png]]</p></li><li><p>首先设置GPIO口为输出模式,其中第三个参数需要输入引脚对应的wPi的序号</p>{| class="wikitable" style="text-alignwidth: left800px;"|
|-
| '''269'''| <p>root@orangepi:~/wiringOP# '''PI13'''| gpio mode <span style="color:#FF0000">2</span> out'''PWM3</UART4_TX'''p>| '''7'''}|</li>| '''8'''| '''UART0_TX'''<li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p>{| '''PH0'''| '''224'''class="wikitable" style="width:800px;"
|-
| style="text-align<p>root@orangepi: left;"|| ~/wiringOP# '''gpio write 2 <span style="text-aligncolor: left;#FF0000"|| '''GND'''| '''9>0</span>'''</p>|}| '''10'''| '''UART0_RX'''</li>| '''PH1'''<li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>{| '''225'''class="wikitable" style="width:800px;"
|-
| <p>root@orangepi:~/wiringOP# '''226gpio write 2 <span style="color:#FF0000">1</span>'''</p>| '''PH2'''}</li><li><p>其他引脚的设置方法类似,只需修改wPi的序号为引脚对应的序号即可</p></li></ol> | '''UART5_TX'''<span id="pin-gpio口上下拉电阻的设置方法"></span>| '''11'''|=== 40 Pin GPIO口上下拉电阻的设置方法 ===| '''12'''| <ol style="textlist-style-aligntype: leftdecimal;"|><li><p>下面以7号引脚——对应GPIO为PI13——对应wPi序号为2——为例演示如何设置GPIO口的上下拉电阻</p><p>[[File:zero2w-img174.png]]</p></li>| '''PI1'''<li><p>首先需要设置GPIO口为输入模式,其中第三个参数需要输入引脚对应的wPi的序号</p>{| '''257'''class="wikitable" style="width:800px;"
|-
| '''227'''| <p>root@orangepi:~/wiringOP# '''PH3'''| '''UART5_RX'''| '''13gpio mode <span style="color:#FF0000">2</span> in'''</p>|}| '''14'''</li>| '''GND'''<li><p>设置为输入模式后,执行下面的命令可以设置GPIO口为上拉模式</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| <p>root@orangepi:~/wiringOP# '''261gpio mode <span style="color:#FF0000">2</span> up'''</p>|}</li><li><p>然后输入下面的命令读取GPIO口的电平,如果电平为1,说明上拉模式设置成功</p>{| class="wikitable" style="width:800px;" | -| <p>root@orangepi:~/wiringOP# '''gpio read <span style="color:#FF0000">2</span>'''</p><p>'''PI5<span style="color:#FF0000">1</span>'''</p>|}</li><li><p>然后执行下面的命令可以设置GPIO口为下拉模式</p>{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~/wiringOP# '''TWI0_SCLgpio mode <span style="color:#FF0000">2</UART2_TXspan> down'''</p>|}</li><li><p>然后输入下面的命令读取GPIO口的电平,如果电平为0,说明下拉模式设置成功</p>{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~/wiringOP# '''gpio read <span style="color:#FF0000">2</span>'''</p><p>'''15<span style="color:#FF0000">0</span>'''</p>|}</li></ol> <span id="pin-spi测试"></span> === 40pin SPI测试 === # 由下表可知,40pin接口可用的spi为spi1,有两个片选引脚cs0和cs1 <div style="display: flex;">::{|class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"|-| '''16GPIO序号'''| '''PWM4/UART4_RXGPIO'''| '''PI14功能'''| '''270引脚'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''3.3V'''
| '''17'''|| '''18'''| style="text-align: left;"|| '''PH4'''| '''2281'''
|-
| '''231264'''| '''PH7PI8'''| '''SPI1_MOSI'''| '''19TWI1-SDA'''|| '''203'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"|
|-
| '''232263'''| '''PI7'''| '''TWI1-SCL'''| '''5'''|-| '''269'''| '''PI13'''| '''PWM3/UART4_TX'''| '''7'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''9'''|-| '''226'''| '''PH2'''| '''UART5_TX'''| '''11'''|-| '''227'''| '''PH3'''| '''UART5_RX'''| '''13'''|-| '''261'''| '''PI5'''| '''TWI0_SCL/UART2_TX'''| '''15'''|-| style="text-align: left;"|| style="text-align: left;"|| '''3.3V'''| '''17'''|-| '''<span style="color:#FF0000">231</span>'''| '''PH8<span style="color:#FF0000">PH7</span>'''| '''SPI1_MISO<span style="color:#FF0000">SPI1_MOSI</span>'''| '''21<span style="color:#FF0000">19</span>'''|-| '''22<span style="color:#FF0000">232</span>'''| '''TWI0_SDA<span style="color:#FF0000">PH8</UART2_RXspan>'''| '''PI6<span style="color:#FF0000">SPI1_MISO</span>'''| '''262<span style="color:#FF0000">21</span>'''
|-
| '''<span style="color:#FF0000">230</span>'''| '''<span style="color:#FF0000">PH6</span>'''| '''<span style="color:#FF0000">SPI1_CLK</span>'''| '''<span style="color:#FF0000">23'''|| '''24'''| '''SPI1_CS0'''| '''PH5'''| '''229</span>'''
|-
| style="text-align: left;"|
| '''GND'''
| '''25'''
|
| '''26'''
| '''SPI1_CS1'''
| '''PH9'''
| '''233'''
|-
| '''266'''
| '''TWI2-SDA/UART3_RX'''
| '''27'''
|| '''28'''| '''TWI2-SCL/UART3_TX'''| '''PI9'''| '''265'''|-| '''256'''
| '''PI0'''
| style="text-align: left;"|
| '''29'''
|
| '''30'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''271'''
| style="text-align: left;"|
| '''31'''
|
| '''32'''
| '''PWM1'''
| '''PI11'''
| '''267'''
|-
| '''268'''
| '''PWM2'''
| '''33'''
|
| '''34'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''258'''
| style="text-align: left;"|
| '''35'''
|
| '''36'''
| style="text-align: left;"|
| '''PC12'''
| '''76'''
|-
| '''272'''
| style="text-align: left;"|
| '''37'''
|
| '''38'''
| style="text-align: left;"|
| '''PI4'''
| '''260'''
|-
| style="text-align: left;"|
| '''GND'''
| '''39'''
|
| '''40'''
| style="text-align: left;"|
| '''PI3'''
| '''259'''
|}
 <ol start{| class="2wikitable" style="list-style-typewidth: decimal390px;"><li><p>Linux系统中i2c默认都是关闭的,需要手动打开才能使用。打开步骤如下所示:</p><ol style="listmargin-style-typeright: lower-alpha20px;"><li><p>首先运行下'''orangepitext-config''',普通用户记得加'''sudo'''权限</p><p>orangepi@orangepialign:~$ '''sudo orangepi-config'''</p></li><li><p>然后选择'''System'''</p><p>[[File:media/image81.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:media/image82.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中下图中对应的i2c的配置</p></li></ol></li></ol> {| class="wikitablecenter;"
|-
| '''40pin中的复用功能引脚'''| '''对应的dtbo配置功能'''| '''GPIO'''| '''GPIO序号'''
|-
| '''40pin - i2c02'''| '''pi-i2c05V'''| style="text-align: left;"|| style="text-align: left;"|
|-
| '''40pin - i2c1'''| '''pi-i2c1'''|-| '''40pin - i2c24'''| '''pi-i2c25V'''|} [[File:media/image176.png]] <ol start="5" style="list-styletext-typealign: lower-alphaleft;">|<li><p>然后选择'''&lt;Save&gt;'''保存</p><p>[[File:media/image84.png]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:media/image85.png]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:media/image86.png]]</p></li></ol> <!-- --><ol start="3" style="list-style-type: decimal;"><li><p>启动linux系统后,先确认下/dev下存在已打开的i2c的设备节点</p><p>orangepi@orangepi:~$ '''ls /dev/i2c-*'''</p><p>'''/dev/i2c-*'''</p><p>'''有时i2c的设备节点和i2c总线的序号不是一一对应的,比如i2c1总线的i2c设备节点可能是/dev/i2c-3。'''</p><p>'''准确确认i2c总线对应的/dev下设备节点方法为:'''</p></li></ol> <!-- --><ol style="list-style-type: lower-alpha;"><li><p>'''首先运行下面的命令,查看i2c的对应关系'''</p><p>orangepi@orangepizero2w:~$ '''ls /sys/devices/platform/soc*/*/i2c-* | grep &quot;i2c-[0-9]&quot;'''</p><p>/sys/devices/platform/soc/5002000.i2c/i2c-0:</p><p>/sys/devices/platform/soc/5002400.i2c/i2c-3:</p><p>/sys/devices/platform/soc/5002800.i2c/i2c-4:</p><p>/sys/devices/platform/soc/5002c00.i2c/i2c-5:</p><p>/sys/devices/platform/soc/6000000.hdmi/i2c-2:</p><p>/sys/devices/platform/soc/7081400.i2c/i2c-1:</p></li><li><p>'''上面的输出中'''</p></li></ol> <!-- --><ol style="list-style-type: lower-alpha;"><li><p>5002000为i2c0总线的寄存器基地址,其后面显示i2c-0就是其对应的i2c设备节点</p></li><li><p>5002400为i2c1总线的寄存器基地址,其后面显示i2c-3就是其对应的i2c设备节点</p></li><li><p>5002800为i2c2总线的寄存器基地址,其后面显示i2c-4就是其对应的i2c设备节点</p></li></ol> <!-- --><ol start="4" style="list-styletext-typealign: decimalleft;"><li><p>然后开始测试i2c,首先安装i2c-tools</p><p>orangepi@orangepi:~$ '''sudo apt-get update'''</p><p>orangepi@orangepi:~$ '''sudo apt-get install -y i2c-tools'''</p></li><li><p>然后在40pin接头的i2c引脚上接一个i2c设备</p></li><li><p>然后使用'''i2cdetect -y x'''命令如果能检测到连接的i2c设备的地址,就说明i2c能正常使用</p><p>'''注意,i2cdetect -y x命令中的x需要替换为i2c总线对应的设备节点的序号。'''</p><p>'''不同的i2c设备地址是不同的,下图0x50地址只是一个示例。请以实际看到的为准。'''</p><div class="figure"> [[File:media/image177.png]] </div></li></ol> <span id="pin的uart测试"></span>=== 40pin的UART测试 === # 由下表可知,可用的uart为uart2、uart3、uart4和uart5。请注意uart0默认设置为调试串口,请不要把uart0当成普通串口使用 {| class="wikitable"|-| '''GPIO序号'''| '''GPIO'''| '''功能'''| '''引脚'''|| '''引脚'''| '''功能'''| '''GPIO'''| '''GPIO序号'''
|-
| '''6'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
| '''3.3V'''| '''1'''|| '''2'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"||-| '''264'''| '''PI8'''| '''TWI1-SDA'''| '''3'''|| '''4'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"||-| '''263'''| '''PI7'''| '''TWI1-SCL'''| '''5'''|| '''6'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''269'''| '''PI13'''| '''PWM3/UART4_TX'''| '''7'''|
| '''8'''
| '''UART0_TX'''
| '''224'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''GND'''
| '''9'''
|
| '''10'''
| '''UART0_RX'''
| '''225'''
|-
| '''226'''
| '''PH2'''
| '''UART5_TX'''
| '''11'''
|
| '''12'''
| style="text-align: left;"|
| '''257'''
|-
| '''227'''
| '''PH3'''
| '''UART5_RX'''
| '''13'''
|
| '''14'''
| '''GND'''
| style="text-align: left;"|
|-
| '''261'''
| '''PI5'''
| '''TWI0_SCL/UART2_TX'''
| '''15'''
|
| '''16'''
| '''PWM4/UART4_RX'''
| '''270'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''3.3V'''
| '''17'''
|
| '''18'''
| style="text-align: left;"|
| '''228'''
|-
| '''231'''| '''PH7'''| '''SPI1_MOSI'''| '''19'''|| '''20'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''232'''
| '''PH8'''
| '''SPI1_MISO'''
| '''21'''
|
| '''22'''
| '''TWI0_SDA/UART2_RX'''
| '''262'''
|-
| '''230'''| '''PH6'''| '''SPI1_CLK'''| '''23'''|| '''<span style="color:#FF0000">24</span>'''| '''<span style="color:#FF0000">SPI1_CS0</span>'''| '''<span style="color:#FF0000">PH5</span>'''| '''<span style="color:#FF0000">229</span>'''
|-
| '''<span style="text-aligncolor: left;#FF0000"|| style="text-align: left;"|| '''GND'''| '''25'''|| '''>26</span>'''| '''<span style="color:#FF0000">SPI1_CS1</span>'''| '''<span style="color:#FF0000">PH9</span>'''| '''<span style="color:#FF0000">233</span>'''
|-
| '''266'''
| '''PI10'''
| '''TWI2-SDA/UART3_RX'''
| '''27'''
|
| '''28'''
| '''TWI2-SCL/UART3_TX'''
| '''265'''
|-
| '''256'''
| '''PI0'''
| style="text-align: left;"|
| '''29'''
|
| '''30'''
| '''GND'''
| style="text-align: left;"|
|-
| '''271'''
| '''PI15'''
| style="text-align: left;"|
| '''31'''
|
| '''32'''
| '''PWM1'''
| '''267'''
|-
| '''268'''
| '''PI12'''
| '''PWM2'''
| '''33'''
|
| '''34'''
| '''GND'''
| style="text-align: left;"|
|-
| '''258'''
| '''PI2'''
| style="text-align: left;"|
| '''35'''
|
| '''36'''
| style="text-align: left;"|
| '''76'''
|-
| '''272'''
| '''PI16'''
| style="text-align: left;"|
| '''37'''
|
| '''38'''
| style="text-align: left;"|
| '''260'''
|-
| '''40'''
| style="text-align: left;"|
| style="text-align: left;"|| '''GND'''| '''39'''|| '''40'''| style="text-align: left;"|| '''PI3'''
| '''259'''
|}
</div>
<ol start="2" style="list-style-type: decimal;">
<li><p>Linux系统中uart默认都是关闭的,需要手动打开才能使用。打开步骤如下所示:Linux系统中spi1默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>
{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p>|}</li>
<li><p>然后选择'''System'''</p>
<p>[[File:media/image81zero2w-img81.png]]</p></li>
<li><p>然后选择'''Hardware'''</p>
<p>[[File:media/image82zero2w-img82.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中想要打开的串口选中想要打开的SPI的dtbo配置</p></li></ol></li></ol>
{| class="wikitable" style="width:800px;text-align: center;"
|-
| '''40pin中的复用功能dtbo配置'''| '''对应的dtbo配置说明'''
|-
| '''40pin spi1- uart2cs0-cs1-spidev'''| '''pi-uart2同时打开spi1的cs0和cs1'''
|-
| '''40pin spi1- uart3cs0-spidev'''| '''pi-uart3只打开spi1的cs0'''
|-
| '''40pin spi1- uart4'''| '''pics1-uart4spidev'''|-| '''40pin - uart5'''| '''ph-uart5只打开spi1的cs1'''
|}
 [[File:media/image178zero2w-img175.png]]</ol>
<ol start="5" style="list-style-type: lower-alpha;">
<li><p>然后选择'''&lt;Save&gt;'''保存</p>
<p>[[File:media/image84zero2w-img84.png]]</p></li>
<li><p>然后选择'''&lt;Back&gt;'''</p>
<p>[[File:media/image85zero2w-img85.png]]</p></li>
<li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p>
<p>[[File:media/image86zero2w-img86.png]]</p></li></ol> <!-- --/li></ol><ol start="32" style="list-style-type: decimal;"><li><p>进入linux系统后,先确认下然后查看下linux系统中是否存在'''/devspidev1.x'''下是否存在uart5的设备节点的设备节点,如果存在,说明SPI1的配置已经生效了</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''注意,linux5ls /dev/spidev1*'''</p><p>/dev/spidev1.4系统为0 /dev/ttyASx。spidev1.1</p>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''注意,只有打开spi1-cs0-cs1-spidev时,才会看到两个spi的设备节点。'''</p></big>|}</li><li><p>下面开始spi的回环测试,先不短接SPI1的mosi和miso两个引脚,运行spidev_test的输出结果如下所示,可以看到TX和RX的数据不一致</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''ls sudo spidev_test -v -D /dev/ttyS*spidev1.0'''</p><p>/dev/ttySxspi mode: 0x0</p></li><lip>bits per word: 8</p>然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx引脚</p>max speed: 500000 Hz (500 KHz)</lip><li><p>使用wiringOP中的TX | FF FF FF FF FF FF '''gpio<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 | ......@.…▒..................▒.</p><p>RX | FF FF FF FF FF FF '''注意,gpio serial <span style="color:#FF0000">FF FF FF FF FF FF</dev/ttySx命令中最后的x需要替换为对应的uart设备节点的序号。span>'''FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ............................….</p>|}</li><li><p>然后短接SPI1的mosi(40pin接口中的第19号引脚)和miso(40pin接口中的第21号引脚)两个引脚再运行spidev_test的输出如下,可以看到发送和接收的数据一样,说明回环测试通过。</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''gpio serial sudo spidev_test -v -D /dev/ttySx # linux-6spidev1.1测试命令0'''</p><p>orangepi@orangepispi mode:~$ '''gpio serial /dev/ttyASx # linux-5.4测试命令'''0x0</p><p>Outbits per word: 0: -&gt; 08</p><p>Outmax speed: 1: -&gt; 1500000 Hz (500 KHz)</p><p>OutTX | FF FF FF FF FF FF '''<span style="color: 2: -&gt; 2#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 | ......@.…▒..................▒.</p><p>OutRX | FF FF FF FF FF FF '''<span style="color: 3: -&gt; 3^C#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 | ......@.…▒..................▒.</p>|}</li></ol> <span id="pin-i2c测试"></span>
<span id="pwm的测试方法"></span>=== PWM的测试方法 40pin I2C测试 ===
# 由下表可知,可用的pwm为pwm1、pwm2、pwm3和pwm4。由下表可知,40pin接口可用的i2c为i2c0、i2c1和i2c2
<div style="display: flex;">::{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"
|-
| '''GPIO序号'''
| '''功能'''
| '''引脚'''
|
| '''引脚'''
| '''功能'''
| '''GPIO'''
| '''GPIO序号'''
|-
| style="text-align: left;"|
| '''3.3V'''
| '''1'''
|
| '''2'''
| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''<span style="color:#FF0000">264</span>'''| '''<span style="color:#FF0000">PI8</span>'''| '''<span style="color:#FF0000">TWI1-SDA</span>'''| '''<span style="color:#FF0000">3</span>'''|-| '''4<span style="color:#FF0000">263</span>'''| '''5V<span style="color:#FF0000">v</span>'''| '''<span style="color:#FF0000">TWI1-SCL</span>'''| '''<span style="color:#FF0000">5</span>'''|-| '''269'''| '''PI13'''| '''PWM3/UART4_TX'''| '''7'''|-
| style="text-align: left;"|
| style="text-align: left;"|
|-| '''263'''| '''PI7'''| '''TWI1-SCL'''| '''5'''|| '''6'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''269'''| '''PI13'''| '''PWM3/UART4_TX'''| '''7'''|| '''8'''| '''UART0_TX'''| '''PH0'''| '''224'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''9'''|| '''10'''| '''UART0_RX'''| '''PH1'''| '''225'''
|-
| '''226'''
| '''UART5_TX'''
| '''11'''
|
| '''12'''
| style="text-align: left;"|
| '''PI1'''
| '''257'''
|-
| '''227'''
| '''UART5_RX'''
| '''13'''
|
| '''14'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''<span style="color:#FF0000">261</span>'''| '''<span style="color:#FF0000">PI5</span>'''| '''<span style="color:#FF0000">TWI0_SCL</span>/UART2_TX'''| '''<span style="color:#FF0000">15'''|| '''16'''| '''PWM4</UART4_RX'''| '''PI14'''| '''270span>'''
|-
| style="text-align: left;"|
| '''3.3V'''
| '''17'''
|
| '''18'''
| style="text-align: left;"|
| '''PH4'''
| '''228'''
|-
| '''231'''
| '''SPI1_MOSI'''
| '''19'''
|
| '''20'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''232'''
| '''SPI1_MISO'''
| '''21'''
|| '''22'''| '''TWI0_SDA/UART2_RX'''| '''PI6'''| '''262'''|-
| '''230'''
| '''PH6'''
| '''SPI1_CLK'''
| '''23'''
|
| '''24'''
| '''SPI1_CS0'''
| '''PH5'''
| '''229'''
|-
| style="text-align: left;"|
| '''GND'''
| '''25'''
|
| '''26'''
| '''SPI1_CS1'''
| '''PH9'''
| '''233'''
|-
| '''<span style="color:#FF0000">266</span>'''| '''<span style="color:#FF0000">PI10</span>'''| '''<span style="color:#FF0000">TWI2-SDA</span>/UART3_RX'''| '''<span style="color:#FF0000">27'''|| '''28'''| '''TWI2-SCL</UART3_TX'''| '''PI9'''| '''265span>'''
|-
| '''256'''
| style="text-align: left;"|
| '''29'''
|
| '''30'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''271'''
| style="text-align: left;"|
| '''31'''
|
| '''32'''
| '''PWM1'''
| '''PI11'''
| '''267'''
|-
| '''268'''
| '''PWM2'''
| '''33'''
|
| '''34'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''258'''
| style="text-align: left;"|
| '''35'''
|
| '''36'''
| style="text-align: left;"|
| '''PC12'''
| '''76'''
|-
| '''272'''
| style="text-align: left;"|
| '''37'''
|
| '''38'''
| style="text-align: left;"|
| '''PI4'''
| '''260'''
|-
| style="text-align: left;"|
| '''GND'''
| '''39'''
|
| '''40'''
| style="text-align: left;"|
| '''PI3'''
| '''259'''
|}
{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"
|-
| '''引脚'''
| '''功能'''
| '''GPIO'''
| '''GPIO序号'''
|-
| '''2'''
| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''4'''
| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''6'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''8'''
| '''UART0_TX'''
| '''PH0'''
| '''224'''
|-
| '''10'''
| '''UART0_RX'''
| '''PH1'''
| '''225'''
|-
| '''12'''
| style="text-align: left;"|
| '''PI1'''
| '''257'''
|-
| '''14'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''16'''
| '''PWM4/UART4_RX'''
| '''PI14'''
| '''270'''
|-
| '''18'''
| style="text-align: left;"|
| '''PH4'''
| '''228'''
|-
| '''20'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''<span style="color:#FF0000">22</span>'''
| '''<span style="color:#FF0000">TWI0_SDA</span>/UART2_RX'''
| '''<span style="color:#FF0000">PI6</span>'''
| '''<span style="color:#FF0000">262</span>'''
|-
| '''24'''
| '''SPI1_CS0'''
| '''PH5'''
| '''229'''
|-
| '''26'''
| '''SPI1_CS1'''
| '''PH9'''
| '''233'''
|-
| '''<span style="color:#FF0000">28</span>'''
| '''<span style="color:#FF0000">TWI2-SCL</span>/UART3_TX'''
| '''<span style="color:#FF0000">PI9</span>'''
| '''<span style="color:#FF0000">265</span>'''
|-
| '''30'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''32'''
| '''PWM1'''
| '''PI11'''
| '''267'''
|-
| '''34'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''36'''
| style="text-align: left;"|
| '''PC12'''
| '''76'''
|-
| '''38'''
| style="text-align: left;"|
| '''PI4'''
| '''260'''
|-
| '''40'''
| style="text-align: left;"|
| '''PI3'''
| '''259'''
|}
</div>
<ol start="2" style="list-style-type: decimal;">
<li><p>Linux系统中i2c默认都是关闭的,需要手动打开才能使用。打开步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p>
|}
</li>
<li><p>然后选择'''System'''</p>
<p>[[File:zero2w-img81.png]]</p></li>
<li><p>然后选择'''Hardware'''</p>
<p>[[File:zero2w-img82.png]]</p></li>
<li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中下图中对应的i2c的配置</p></li>
<ol start{| class="2wikitable" style="list-style-type: decimal;"><li><p>Linux系统中pwm默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p><p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p></li><li><p>然后选择'''System'''</p><p>[[File:media/image81.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:media/image82.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中想要打开的pwm对应的配置</p><p>[[Filewidth:media/image179.png]]</p></li><li><p>然后选择'''&lt800px;Save&gt;'''保存</p><p>[[File:media/image84.png]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:media/image85.png]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:media/image86.png]]</p></li></ol></li><li><p>重启后就可以开始PWM的测试</p><p>'''下面的命令请在root用户下执行。'''</p><ol style="list-styletext-typealign: lower-alphacenter;"><li><p>在命令行中输入下面的命令可以让pwm1输出一个50Hz的方波</p><p>root@orangepi:~# '''echo 1 &gt; /sys/class/pwm/pwmchip0/export'''</p><p>root@orangepi:~# '''echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm1/period'''</p><p>root@orangepi:~# '''echo 1000000 &gt; /sys/class/pwm/pwmchip0/pwm1/duty_cycle'''</p><p>root@orangepi:~# '''echo 1 &gt; /sys/class/pwm/pwmchip0/pwm1/enable'''</p></li><li><p>在命令行中输入下面的命令可以让pwm2输出一个50Hz的方波</p></li></ol></li></ol> root@orangepi:~# '''echo 2 &gt; /sys/class/pwm/pwmchip0/export''' root@orangepi:~# '''echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm2/period''' root@orangepi:~# '''echo 1000000 &gt; /sys/class/pwm/pwmchip0/pwm2/duty_cycle''' root@orangepi:~# '''echo 1 &gt; /sys/class/pwm/pwmchip0/pwm2/enable''' <ol start="3" style="list|-style-type: lower-alpha;"><li>在命令行中输入下面的命令可以让pwm3输出一个50Hz的方波</li></ol> root@orangepi:~# | '''echo 3 &gt; /sys/class/pwm/pwmchip0/export40pin中的复用功能''' root@orangepi:~# | '''echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm3/period对应的dtbo配置''' root@orangepi:~# '''echo 1000000 &gt; /sys/class/pwm/pwmchip0/pwm3/duty_cycle''' root@orangepi:~# '''echo 1 &gt; /sys/class/pwm/pwmchip0/pwm3/enable''' <ol start="4" style="list-style-type: lower|-alpha;"><li>在命令行中输入下面的命令可以让pwm4输出一个50Hz的方波</li></ol> root@orangepi:~# '''echo 4 &gt; /sys/class/pwm/pwmchip0/export''' root@orangepi:~# | '''echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm4/period''' root@orangepi:~# '''echo 1000000 &gt; /sys/class/pwm/pwmchip0/pwm4/duty_cycle''' root@orangepi:~# '''echo 1 &gt; /sys/class/pwm/pwmchip0/pwm4/enable''' <div class="figure"> [[File:media/image180.jpeg]] </div><span id="wiringop-python的安装使用方法"></span>== wiringOP40pin -Python的安装使用方法 == '''注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。i2c0''' | '''wiringOPpi-Python是wiringOP的Python语言版本的库,用于在Python程序中操作开发板的GPIO、I2C、SPI和UART等硬件资源。'i2c0'' '''另外请注意下面所有的命令都是在root用户下操作的。''' <span id="wiringop-python的安装方法"></span>=== wiringOP-Python的安装方法 === <ol style="list-style-type: decimal;"><li><p>首先安装依赖包</p><p>root@orangepi:~# '''sudo apt|-get update'''</p><p>root@orangepi:~# | '''sudo apt-get -y install git swig python3-dev python340pin -setuptoolsi2c1'''</p></li><li><p>然后使用下面的命令下载wiringOP-Python的源码</p></li></ol> | '''注意,下面的git clonepi--recursive命令会自动下载wiringOP的源码,因为wiringOP-Python是依赖wiringOP的。请确保下载过程没有因为网络问题而报错。i2c1''' '''如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP|-Python源码,存放位置为:/usr/src/wiringOP-Python'''。 root@orangepi:~# | '''git clone 40pin --recursive https://github.com/orangepi-xunlong/wiringOP-Python -b nexti2c2''' root@orangepi:~# | '''cd wiringOPpi-Pythoni2c2''' root@orangepi:~/wiringOP-Python# '''git submodule update --init --remote'''|}
[[File:zero2w-img176.png]]
</ol>
<ol start="5" style="list-style-type: lower-alpha;">
<li><p>然后选择'''&lt;Save&gt;'''保存</p>
<p>[[File:zero2w-img84.png]]</p></li>
<li><p>然后选择'''&lt;Back&gt;'''</p>
<p>[[File:zero2w-img85.png]]</p></li>
<li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p>
<p>[[File:zero2w-img86.png]]</p></li></ol>
</li></ol>
<ol start="3" style="list-style-type: decimal;">
<li><p>然后使用下面的命令编译wiringOP-Python并将其安装到开发板的Linux系统中启动linux系统后,先确认下/dev下存在已打开的i2c的设备节点</p>{| class="wikitable" style="width:800px;" |-| <p>rootorangepi@orangepi:~# $ '''cd wiringOPls /dev/i2c-Python*'''</p><p>root@orangepi:~/wiringOP-Python# '''python3 generate/dev/i2c-bindings.py &gt; bindings.i*'''</p>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>root@orangepi:~/wiringOP-Python# '''sudo python3 setup.py install有时i2c的设备节点和i2c总线的序号不是一一对应的,比如i2c1总线的i2c设备节点可能是/dev/i2c-3。'''</p></li><li><p>然后输入下面的命令,如果有帮助信息输出,说明wiringOP-Python安装成功,按下'''q准确确认i2c总线对应的/dev下设备节点方法为:'''键可以退出帮助信息的界面</p></li></olbig>
root<ol style="list-style-type: lower-alpha;"><li><p>'''首先运行下面的命令,查看i2c的对应关系'''</p><p>orangepi@orangepiorangepizero2w:~/wiringOP-Python# $ '''python3 ls /sys/devices/platform/soc*/*/i2c-c * | grep &quot;import wiringpi; help(wiringpi)i2c-[0-9]&quot;'''</p><p>/sys/devices/platform/soc/<span style="color:#FF0000">5002000</span>.i2c/<span style="color:#FF0000">i2c-0</span>:</p><p>/sys/devices/platform/soc/<span style="color:#FF0000">5002400</span>.i2c/<span style="color:#FF0000">i2c-3</span>:</p><p>/sys/devices/platform/soc/<span style="color:#FF0000">5002800</span>.i2c/<span style="color:#FF0000">i2c-4</span>:</p><p>/sys/devices/platform/soc/5002c00.i2c/i2c-5:</p><p>/sys/devices/platform/soc/6000000.hdmi/i2c-2:</p><p>/sys/devices/platform/soc/7081400.i2c/i2c-1:</p></li>
Help on module wiringpi<li><p>'''上面的输出中'''</p></li><ol style="list-style-type:none;"><li><p>a) 5002000为i2c0总线的寄存器基地址,其后面显示i2c-0就是其对应的i2c设备节点</p></li><li><p>b) 5002400为i2c1总线的寄存器基地址,其后面显示i2c-3就是其对应的i2c设备节点</p></li><li><p>c) 5002800为i2c2总线的寄存器基地址,其后面显示i2c-4就是其对应的i2c设备节点</p></li></ol></ol>|}</li></ol>
NAME<ol start="4" style="list-style-type: decimal;"><li><p>然后开始测试i2c,首先安装i2c-tools</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo apt-get update'''</p><p>orangepi@orangepi:~$ '''sudo apt-get install -y i2c-tools'''</p>|}</li><li><p>然后在40pin接头的i2c引脚上接一个i2c设备</p></li><li><p>然后使用'''i2cdetect -y x'''命令如果能检测到连接的i2c设备的地址,就说明i2c能正常使用</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''注意,i2cdetect -y x命令中的x需要替换为i2c总线对应的设备节点的序号。'''</p><p>'''不同的i2c设备地址是不同的,下图0x50地址只是一个示例。请以实际看到的为准。'''</p></big>|}<div class="figure">
wiringpi[[File:zero2w-img177.png]]
DESCRIPTION</div></li></ol>
# This file was automatically generated by SWIG (http:<span id="pin的uart测试"><//www.swig.org).span>
# Version 4.0.2=== 40pin的UART测试 ===
#由下表可知,可用的uart为uart2、uart3、uart4和uart5。请注意uart0默认设置为调试串口,请不要把uart0当成普通串口使用
# Do not make changes to this file unless you know what you are doing--modify # the SWIG interface file instead. <ol start="5" div style="list-style-typedisplay: decimalflex;"><li><p>在python命令行下测试wiringOP-Python是否安装成功的步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li>首先使用python3命令进入python3的命令行模式</li></ol></li></ol> root@orangepi:~# '''python3''' <ol start{| class="2wikitable" style="listwidth:390px;margin-styleright: 20px;text-typealign: lower-alphacenter;"><li>然后导入wiringpi的python模块</li></ol>|- &gt;&gt;&gt; | '''import wiringpi;GPIO序号''' <ol start="3" style="list-style-type: lower-alpha;"><li>最后输入下面的命令可以查看下wiringOP-Python的帮助信息,按下| '''qGPIO'''键可以退出帮助信息的界面</li></ol> &gt;&gt;&gt; | '''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) | &gt;&gt;&gt; <span id="pin-gpio口测试-1"></span>=== 40pin GPIO口测试 === '''wiringOP-Python跟wiringOP一样,也是可以通过指定wPi号来确定操作哪一个GPIO引脚,因为wiringOP-Python中没有查看wPi号的命令,所以只能通过wiringOP中的gpio命令来查看板子wPi号与物理引脚的对应关系。引脚'''|-[[File:media/image173.png]] <ol | style="listtext-style-typealign: decimalleft;">|<li><p>下面以7号引脚——对应GPIO为PI13 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p><p>[[File:media/image174.png]]</p></li><li><p>直接用命令测试的步骤如下所示:</p><ol | style="listtext-style-typealign: lower-alphaleft;">|<li><p>首先设置GPIO口为输出模式,其中| '''pinMode'''函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式</p><p>root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; \'''</p><p>'''from wiringpi import GPIO; wiringpi3.wiringPiSetup() ; \3V'''</p><p>| '''wiringpi.pinMode(2, GPIO.OUTPUT) ; &quot;1'''</p></li><li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p><p>root@orangepi:~/wiringOP|-Python# '''python3 -c &quot;import wiringpi; \'''</p><p>| '''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\264'''</p><p>| '''wiringpi.digitalWrite(2, GPIO.LOW)&quot;PI8'''</p></li><li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p><p>root@orangepi:~/wiringOP-Python# | '''python3 TWI1-c &quot;import wiringpi; \SDA'''</p><p>| '''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\3'''</p><p>'''wiringpi.digitalWrite(2, GPIO.HIGH)&quot;'''</p></li></ol></li><li><p>在python3的命令行中测试的步骤如下所示:</p><ol style="list-style-type: lower|-alpha;"><li><p>首先使用python3命令进入python3的命令行模式</p><p>root@orangepi:~# | '''python3263'''</p></li><li><p>然后导入wiringpi的python模块</p><p>&gt;&gt;&gt; | '''import wiringpiPI7'''</p><p>&gt;&gt;&gt; | '''from wiringpi import GPIOTWI1-SCL'''</p></li><li><p>然后设置GPIO口为输出模式,其中| '''pinMode5'''函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式</p><p>&gt;&gt;&gt; |-| '''wiringpi.wiringPiSetup()269'''</p><p>0</p><p>&gt;&gt;&gt; | '''wiringpi.pinMode(2, GPIO.OUTPUT)PI13'''</p></li><li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p><p>&gt;&gt;&gt; | '''wiringpi.digitalWrite(2, GPIO.LOW)PWM3/UART4_TX'''</p></li><li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p><p>&gt;&gt;&gt; | '''wiringpi.digitalWrite(2, GPIO.HIGH)7'''</p></li></ol></li>|-<li><p>wiringOP| style="text-Python在python代码中设置GPIO高低电平的方法可以参考下examples中的'''blink.py'''测试程序,'''blink.py'''测试程序会设置开发板40 Pin中所有的GPIO口的电压不断的高低变化</p>align: left;"|<p>root@orangepi:~/wiringOP| style="text-Python# '''cd examples'''</p><p>root@orangepialign:~/wiringOP-Python/examples# '''ls blink.py'''</p>left;"|<p>| '''blink.pyGND'''</p><p>root@orangepi:~/wiringOP-Python/examples| '''# python3 blink.py9'''</p></li></ol> <span id="pin-spi测试-1"></span>=== 40pin SPI测试 === # 由下表可知,40pin接口可用的spi为spi1,有两个片选引脚cs0和cs1 {| class="wikitable"
|-
| '''GPIO序号226'''| '''GPIOPH2'''| '''功能UART5_TX'''| '''引脚11'''|-| '''引脚227'''| '''功能PH3'''| '''GPIOUART5_RX'''| '''GPIO序号13'''|-| '''261'''| '''PI5'''| '''TWI0_SCL/UART2_TX'''| '''15'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''3.3V'''
| '''117'''|-| '''2231'''| '''5VPH7'''| '''SPI1_MOSI'''| '''19'''|-| '''232'''| '''PH8'''| '''SPI1_MISO'''| '''21'''|-| '''230'''| '''PH6'''| '''SPI1_CLK'''| '''23'''|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''GND'''
| '''25'''
|-
| '''266'''
| '''PI10'''
| '''TWI2-SDA/UART3_RX'''
| '''27'''
|-
| '''264256'''| '''PI8PI0'''| style="text-align: left;"|| '''29'''|-| '''271'''| '''PI15'''| style="text-align: left;"|| '''31'''|-| '''268'''| '''PI12'''| '''PWM2'''| '''33''TWI1'|-SDA| '''258'''| '''3PI2'''|style="text-align: left;"|| '''35'''|-| '''272'''| '''PI16'''| style="text-align: left;"|| '''37'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''39'''|}{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"|-| '''引脚'''| '''功能'''| '''GPIO'''| '''GPIO序号'''|-| '''2'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"||-| '''4'''| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''263'''
| '''PI7'''
| '''TWI1-SCL'''
| '''5'''
|
| '''6'''
| '''GND'''
| style="text-align: left;"|
|-
| '''269'''
| '''PI13'''
| '''PWM3/UART4_TX'''
| '''7'''
|
| '''8'''
| '''UART0_TX'''
| '''224'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''GND'''
| '''9'''
|
| '''10'''
| '''UART0_RX'''
| '''225'''
|-
| '''226'''
| '''PH2'''
| '''UART5_TX'''
| '''11'''
|
| '''12'''
| style="text-align: left;"|
| '''257'''
|-
| '''227'''| '''PH3'''| '''UART5_RX'''| '''13'''|| '''14'''| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''261'''
| '''PI5'''
| '''TWI0_SCL/UART2_TX'''
| '''15'''
|
| '''16'''
| '''PWM4/UART4_RX'''
| '''270'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''3.3V'''
| '''17'''
|
| '''18'''
| style="text-align: left;"|
| '''228'''
|-
| '''231'''
| '''PH7'''
| '''SPI1_MOSI'''
| '''19'''
|
| '''20'''
| '''GND'''
| style="text-align: left;"|
|-
| '''232'''
| '''PH8'''
| '''SPI1_MISO'''
| '''21'''
|
| '''22'''
| '''TWI0_SDA/UART2_RX'''
| '''262'''
|-
| '''230'''
| '''PH6'''
| '''SPI1_CLK'''
| '''23'''
|
| '''24'''
| '''SPI1_CS0'''
| '''229'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''GND'''
| '''25'''
|
| '''26'''
| '''SPI1_CS1'''
| '''233'''
|-
| '''266'''
| '''PI10'''
| '''TWI2-SDA/UART3_RX'''
| '''27'''
|
| '''28'''
| '''TWI2-SCL/UART3_TX'''
| '''265'''
|-
| '''256'''
| '''PI0'''
| style="text-align: left;"|
| '''29'''
|
| '''30'''
| '''GND'''
| style="text-align: left;"|
|-
| '''271'''
| '''PI15'''
| style="text-align: left;"|
| '''31'''
|
| '''32'''
| '''PWM1'''
| '''267'''
|-
| '''268'''
| '''PI12'''
| '''PWM2'''
| '''33'''
|
| '''34'''
| '''GND'''
| style="text-align: left;"|
|-
| '''258'''
| '''PI2'''
| style="text-align: left;"|
| '''35'''
|
| '''36'''
| style="text-align: left;"|
| '''76'''
|-
| '''272'''
| '''PI16'''
| style="text-align: left;"|
| '''37'''
|
| '''38'''
| style="text-align: left;"|
| '''260'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''GND'''
| '''39'''
|
| '''40'''
| style="text-align: left;"|
| '''259'''
|}
</div>
<ol start="2" style="list-style-type: decimal;">
<li><p>Linux系统中spi1默认是关闭的,需要手动打开才能使用。打开步骤如下所示:Linux系统中uart默认都是关闭的,需要手动打开才能使用。打开步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>
{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p>|}</li>
<li><p>然后选择'''System'''</p>
<p>[[File:media/image81zero2w-img81.png]]</p></li>
<li><p>然后选择'''Hardware'''</p>
<p>[[File:media/image82zero2w-img82.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中想要打开的SPI的dtbo配置选中想要打开的串口</p></li></ol></li></ol>
{| class="wikitable" style="width:800px;text-align: center;"
|-
| '''dtbo配置40pin中的复用功能'''| '''说明对应的dtbo配置'''|-| '''40pin - uart2'''| '''pi-uart2'''
|-
| '''spi140pin -cs0-cs1-spidevuart3'''| '''同时打开spi1的cs0和cs1pi-uart3'''
|-
| '''spi140pin -cs0-spidevuart4'''| '''只打开spi1的cs0pi-uart4'''
|-
| '''spi140pin -cs1-spidevuart5'''| '''只打开spi1的cs1ph-uart5'''
|}
[[File:zero2w-img178.png]]
</ol>
<ol start="5" style="list-style-type: lower-alpha;">
<li><p>然后选择'''&lt;Save&gt;'''保存</p>
<p>[[File:media/image84zero2w-img84.png]]</p></li>
<li><p>然后选择'''&lt;Back&gt;'''</p>
<p>[[File:media/image85zero2w-img85.png]]</p></li>
<li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p>
<p>[[File:media/image86zero2w-img86.png]]</p></li></ol> <!-- --/li></ol>
<ol start="3" style="list-style-type: decimal;">
<li><p>然后查看下linux系统中是否存在进入linux系统后,先确认下'''spidev1.x/dev'''的设备节点,如果存在,说明SPI1的配置已经生效了下是否存在uart5的设备节点</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>orangepi@orangepi:~$ '''ls /dev/spidev1*'''</p><p>/dev/spidev1注意,linux5.0 4系统为/dev/spidev1.1</p><p>'''注意,只有打开spi1-cs0-cs1-spidev时,才会看到两个spi的设备节点。ttyASx。'''</p></libig><li><p>然后可以使用examples中的'''spidev_test.py'''程序测试下SPI的回环功能,'''spidev_test.py'''程序需要指定下面的两个参数:</p>|}<ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li>|-| <p>orangepi@orangepi:~$ '''--channells /dev/ttyS*''':指定SPI的通道号</p></li><li><p>'''--port''':指定SPI的端口号</p><dev/li>ttySx</olp>|}
</li>
<li><p>先不短接 SPI1 的 mosi 和 miso 两个引脚,运行spidev_test.py的输出结果如下所示,可以看到 TX 和 RX 的数据不一致然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx引脚</p></li><li><p>root@orangepi:~使用wiringOP中的'''gpio'''命令测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常</wiringOPp>{| class="wikitable" style="background-Pythoncolor:# ffffdc;width:800px;" |-| <big><p>'''cd examples注意,gpio serial /dev/ttySx命令中最后的x需要替换为对应的uart设备节点的序号。'''</p></libig>|}{| class="wikitable" style="width:800px;" |-| </olprootorangepi@orangepi:~$ '''gpio serial /wiringOPdev/ttySx # linux-Python6.1测试命令'''</examples# p><p>orangepi@orangepi:~$ '''python3 spidev_testgpio serial /dev/ttyASx # linux-5.py \4测试命令'''</p>
'''--channel 1 --port 0'''
spi mode<p>Out: 0x00: -&gt; 0</p><p>Out: 1: -&gt; 1</p><p>Out: 2: -&gt; 2</p><p>Out: 3: -&gt; 3^C</p>|}</li></ol>
max speed: 500000 Hz (500 KHz)<span id="pwm的测试方法"></span>
Opening device /dev/spidev1.1=== PWM的测试方法 ===
TX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…| RX | FF FF FF FF FF FF '''FF FF FF FF FF FF''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |.............….| <ol start="6" style="list-style-type: decimal;"><li><p>然后使用杜邦线短接SPI1的txd(40pin接口中的第19号引脚)和rxd(40pin接口中的第21号引脚)两个引脚再运行spidev_test.py的输出如下,可以看到发送和接收的数据一样,说明SPI1回环测试正常</p><p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p></li></ol> root@orangepi:~/wiringOP-Python/examples# '''python3 spidev_test.py \''' '''--channel 1 --port 0''' spi mode: 0x0 max speed: 500000 Hz (500 KHz) Opening device /dev/spidev1.1 TX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…| RX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…| <span id="pin-i2c测试-1"></span>=== 40pin I2C测试 === # 由下表可知,40pin接口可用的i2c为i2c0、i2c1和i2c2由下表可知,可用的pwm为pwm1、pwm2、pwm3和pwm4。
<div style="display: flex;">::{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"
|-
| '''GPIO序号'''
| '''功能'''
| '''引脚'''
|
| '''引脚'''
| '''功能'''
| '''GPIO'''
| '''GPIO序号'''
|-
| style="text-align: left;"|
| '''3.3V'''
| '''1'''
|
| '''2'''
| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''264'''
| '''TWI1-SDA'''
| '''3'''
|| '''4'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"||-
| '''263'''
| '''PI7'''
| '''TWI1-SCL'''
| '''5'''
|
| '''6'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''<span style="color:#FF0000">269</span>'''| '''<span style="color:#FF0000">PI13</span>'''| '''<span style="color:#FF0000">PWM3</span>/UART4_TX'''| '''<span style="color:#FF0000">7'''|| '''8'''| '''UART0_TX'''| '''PH0'''| '''224</span>'''
|-
| style="text-align: left;"|
| '''GND'''
| '''9'''
|
| '''10'''
| '''UART0_RX'''
| '''PH1'''
| '''225'''
|-
| '''226'''
| '''UART5_TX'''
| '''11'''
|
| '''12'''
| style="text-align: left;"|
| '''PI1'''
| '''257'''
|-
| '''227'''
| '''UART5_RX'''
| '''13'''
|
| '''14'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''261'''
| '''TWI0_SCL/UART2_TX'''
| '''15'''
|
| '''16'''
| '''PWM4/UART4_RX'''
| '''PI14'''
| '''270'''
|-
| style="text-align: left;"|
| '''3.3V'''
| '''17'''
|
| '''18'''
| style="text-align: left;"|
| '''PH4'''
| '''228'''
|-
| '''231'''
| '''SPI1_MOSI'''
| '''19'''
|
| '''20'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''232'''
| '''SPI1_MISO'''
| '''21'''
|
| '''22'''
| '''TWI0_SDA/UART2_RX'''
| '''PI6'''
| '''262'''
|-
| '''230'''
| '''SPI1_CLK'''
| '''23'''
|
| '''24'''
| '''SPI1_CS0'''
| '''PH5'''
| '''229'''
|-
| style="text-align: left;"|
| '''GND'''
| '''25'''
|
| '''26'''
| '''SPI1_CS1'''
| '''PH9'''
| '''233'''
|-
| '''266'''
| '''TWI2-SDA/UART3_RX'''
| '''27'''
|
| '''28'''
| '''TWI2-SCL/UART3_TX'''
| '''PI9'''
| '''265'''
|-
| '''256'''
| style="text-align: left;"|
| '''29'''
|
| '''30'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''271'''
| style="text-align: left;"|
| '''31'''
|
| '''32'''
| '''PWM1'''
| '''PI11'''
| '''267'''
|-
| '''<span style="color:#FF0000">268</span>'''| '''<span style="color:#FF0000">PI12</span>'''| '''<span style="color:#FF0000">PWM2</span>'''| '''33'''|| '''34'''| '''GND'''| <span style="text-aligncolor: left;#FF0000"|| style="text-align: left;"|>33</span>'''
|-
| '''258'''
| style="text-align: left;"|
| '''35'''
|
| '''36'''
| style="text-align: left;"|
| '''PC12'''
| '''76'''
|-
| '''272'''
| style="text-align: left;"|
| '''37'''
|
| '''38'''
| style="text-align: left;"|
| '''PI4'''
| '''260'''
|-
| style="text-align: left;"|
| '''GND'''
| '''39'''
|
| '''40'''
| style="text-align: left;"|
| '''PI3'''
| '''259'''
|}
 <ol start{| class="2wikitable" style="list-style-typewidth: decimal390px;"><li><p>Linux系统中i2c默认都是关闭的,需要手动打开才能使用。打开步骤如下所示:</p><ol style="listmargin-style-typeright: lower-alpha20px;"><li><p>首先运行下'''orangepitext-config''',普通用户记得加'''sudo'''权限</p><p>orangepi@orangepialign:~$ '''sudo orangepi-config'''</p></li><li><p>然后选择'''System'''</p><p>[[File:media/image81.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:media/image82.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中下图中对应的i2c的配置</p></li></ol></li></ol> {| class="wikitablecenter;"
|-
| '''40pin中的复用功能引脚'''| '''对应的dtbo配置功能'''| '''GPIO'''| '''GPIO序号'''
|-
| '''40pin 2'''| '''5V'''| style="text-align: left;"|| style="text- i2c0align: left;"||-| '''4'''| '''pi5V'''| style="text-align: left;"|| style="text-align: left;"||-i2c0| '''6'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''8'''| '''UART0_TX'''| '''PH0'''| '''224'''|-| '''10'''| '''UART0_RX'''| '''PH1'''| '''225'''|-| '''12'''| style="text-align: left;"|| '''PI1'''| '''257'''
|-
| '''40pin - i2c114'''| '''pi-i2c1GND'''| style="text-align: left;"|| style="text-align: left;"|
|-
| '''40pin - i2c2'''| '''pi-i2c2'''|} [[File:media/image176.png]] <ol start="5" span style="list-style-typecolor: lower-alpha;#FF0000"><li><p>然后选择'''&lt;Save&gt;'''保存16</p><p>[[File:media/image84.png]]</p></li><li><pspan>然后选择'''&lt;Back&gt;'''</p><p>[[File:media/image85.png]]</p></li><li><p>然后选择| '''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:media/image86.png]]</p></li></ol> <!-- --><ol start="3" span style="list-style-typecolor: decimal;#FF0000">PWM4<li><p>启动linux系统后,先确认下/dev下存在已打开的i2c的设备节点</p><p>orangepi@orangepi:~$ '''ls /dev/i2c-*'''</p><p>'''/dev/i2c-*'''</p><p>'''有时i2c的设备节点和i2c总线的序号不是一一对应的,比如i2c1总线的i2c设备节点可能是/dev/i2c-3。'''</p><p>'''准确确认i2c总线对应的/dev下设备节点方法为:'''</p></lispan></ol> <!-- --><ol start="3" style="list-style-type: lower-alpha;"><li><p>''UART4_RX'首先运行下面的命令,查看i2c的对应关系'''</p><p>orangepi@orangepizero2w:~$ '''ls /sys/devices/platform/soc*/*/i2c-* | grep &quot;i2c-[0-9]&quot;'''</p><p>/sys/devices/platform/soc/5002000.i2c/i2c-0:</p><p>/sys/devices/platform/soc/5002400.i2c/i2c-3:</p><p>/sys/devices/platform/soc/5002800.i2c/i2c-4:</p><p>/sys/devices/platform/soc/5002c00.i2c/i2c-5:</p><p>/sys/devices/platform/soc/6000000.hdmi/i2c-2:</p><p>/sys/devices/platform/soc/7081400.i2c/i2c-1:</p></li><li><p>'''上面的输出中'''</p></li></ol> <!-- --><ol start="4" span style="list-style-typecolor: lower-alpha;#FF0000"><li><p>5002000为i2c0总线的寄存器基地址,其后面显示i2c-0就是其对应的i2c设备节点PI14</p></li><li><p>5002400为i2c1总线的寄存器基地址,其后面显示i2c-3就是其对应的i2c设备节点</p></li><li><p>5002800为i2c2总线的寄存器基地址,其后面显示i2c-4就是其对应的i2c设备节点</p></li></ol> <!-- --><ol start="4" style="list-style-type: decimal;"><li><p>然后开始测试i2c,首先安装下i2c-tools</p><pspan>orangepi@orangepi:~$ '''sudo apt-get update'''</p><p>orangepi@orangepi:~$ '''sudo''' '''apt-get install -y i2c-tools| '''</p></li><li><p>然后在40pin接头的i2c引脚上接一个i2c设备,这里以DS1307 RTC模块为例</p><p>[[File:media/image181.png]]</p></li><li><p>然后使用'''i2cdetect -y x'''命令如果能检测到连接的i2c设备的地址,就说明i2c设备连接正确</p><p>'''注意,i2cdetect -y x命令中的x需要替换为i2c总线对应的设备节点的序号。'''</p></li></ol> [[File:media/image182.png]] <ol start="7" span style="list-style-type: decimal;"><li><p>然后可以运行'''examples'''中的'''ds1307.py'''测试程序读取RTC的时间</p><p>'''注意,下面命令中i2c-x中的x需要替换为i2c总线对应的设备节点的序号。'''</p><p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p><p>root@orangepicolor:~/wiringOP-Python/examples# '''python3 ds1307.py --device \'''</p><p>'''&quot;/dev/i2c-x&quot;'''</p><p>Thu 2022-06-16 04:35:46</p><p>Thu 2022-06-16 04:35:47</p><p>Thu 2022-06-16 04:35:48</p><p>^C</p><p>exit</p></li></ol> <span id="pin的uart测试-1FF0000">270</span>=== 40pin的UART测试 === # 由下表可知,可用的uart为uart2、uart3、uart4和uart5。请注意uart0默认设置为调试串口,请不要把uart0当成普通串口使用 {| class="wikitable"|-| '''GPIO序号'''| '''GPIO'''| '''功能'''| '''引脚'''|| '''引脚'''| '''功能'''| '''GPIO'''| '''GPIO序号'''
|-
| '''18'''
| style="text-align: left;"|
| style="text-align: left;"|| '''3.3V'''| '''1PH4'''|| '''2228'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"|
|-
| '''26420'''| '''PI8'''| '''TWI1-SDA'''| '''3'''|| '''4'''| '''5VGND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''26322'''| '''PI7TWI0_SDA/UART2_RX'''| '''TWI1PI6'''| '''262'''|-| '''24'''| '''SPI1_CS0'''| '''PH5'''| '''229'''|-| '''26'''| '''SPI1_CS1'''| '''PH9'''| '''233'''|-| '''28'''| '''TWI2-SCL/UART3_TX'''| '''5PI9'''|'''265'''|-| '''630'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''269<span style="color:#FF0000">32</span>'''| '''PI13<span style="color:#FF0000">PWM1</span>'''| '''PWM3<span style="color:#FF0000">PI11</UART4_TXspan>'''| '''7'''|| '''8'''| '''UART0_TX'''| '''PH0'''| '''224<span style="color:#FF0000">267</span>'''
|-
| '''34'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
| '''GND'''
| '''9'''
|
| '''10'''
| '''UART0_RX'''
| '''PH1'''
| '''225'''
|-
| '''226'''| '''PH2'''| '''UART5_TX'''| '''11'''|| '''1236'''
| style="text-align: left;"|
| '''PI1PC12'''| '''25776'''
|-
| '''227'''| '''PH3'''| '''UART5_RX'''| '''13'''|| '''14'''| '''GND38'''
| style="text-align: left;"|
| '''PI4'''
| '''260'''
|-
| '''40'''
| style="text-align: left;"|
| '''PI3'''
| '''259'''
|}
</div>
<ol start="2" style="list-style-type: decimal;">
<li><p>Linux系统中pwm默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>
{| class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''261sudo orangepi-config'''</p>| }</li><li><p>然后选择'''PI5System'''</p><p>[[File:zero2w-img81.png]]</p></li>| <li><p>然后选择'''TWI0_SCL/UART2_TXHardware'''</p><p>[[File:zero2w-img82.png]]</p></li>| <li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''15空格'''选中想要打开的pwm对应的配置</p>|<p>[[File:zero2w-img179.png]]</p></li>| <li><p>然后选择'''16&lt;Save&gt;'''保存</p>| <p>[[File:zero2w-img84.png]]</p></li><li><p>然后选择'''PWM4/UART4_RX&lt;Back&gt;'''</p><p>[[File:zero2w-img85.png]]</p></li>| <li><p>然后选择'''PI14&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:zero2w-img86.png]]</p></li></ol></li><li><p>重启后就可以开始PWM的测试</p>{| '''270'''class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| style="text-align: left;"|| style="text-align: left;"|| <big><p>'''3.3V下面的命令请在root用户下执行。'''</p></big>| '''17'''|| '''18'''}| <ol style="textlist-style-aligntype: leftlower-alpha;"|>| '''PH4'''<li><p>在命令行中输入下面的命令可以让pwm1输出一个50Hz的方波</p>{| '''228'''class="wikitable" style="width:800px;"
|-
| <p>root@orangepi:~# '''231echo 1 &gt; /sys/class/pwm/pwmchip0/export'''</p>| <p>root@orangepi:~# '''PH7echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm1/period'''</p>| <p>root@orangepi:~# '''SPI1_MOSIecho 1000000 &gt; /sys/class/pwm/pwmchip0/pwm1/duty_cycle'''</p>| <p>root@orangepi:~# '''19echo 1 &gt; /sys/class/pwm/pwmchip0/pwm1/enable'''</p>|}| '''20'''</li>| '''GND'''<li><p>在命令行中输入下面的命令可以让pwm2输出一个50Hz的方波</p></li>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| root@orangepi:~# '''232echo 2 &gt; /sys/class/pwm/pwmchip0/export'''| root@orangepi:~# '''PH8echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm2/period'''| '''SPI1_MISO'''| root@orangepi:~# '''21echo 1000000 &gt; /sys/class/pwm/pwmchip0/pwm2/duty_cycle'''|| root@orangepi:~# '''22echo 1 &gt; /sys/class/pwm/pwmchip0/pwm2/enable'''| '''TWI0_SDA}</UART2_RX'''ol><ol start="3" style="list-style-type: lower-alpha;">| '''PI6'''<li>在命令行中输入下面的命令可以让pwm3输出一个50Hz的方波</li>{| '''262'''class="wikitable" style="width:800px;"
|-
| root@orangepi:~# '''230echo 3 &gt; /sys/class/pwm/pwmchip0/export'''| root@orangepi:~# '''PH6echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm3/period'''| root@orangepi:~# '''SPI1_CLKecho 1000000 &gt; /sys/class/pwm/pwmchip0/pwm3/duty_cycle'''| root@orangepi:~# '''23echo 1 &gt; /sys/class/pwm/pwmchip0/pwm3/enable'''|}| '''24'''</ol>| '''SPI1_CS0'''<ol start="4" style="list-style-type: lower-alpha;">| '''PH5'''<li>在命令行中输入下面的命令可以让pwm4输出一个50Hz的方波</li>{| '''229'''class="wikitable" style="width:800px;"
|-
| style="text-align: left;"|| style="text-alignroot@orangepi: left;"|| ~# '''GNDecho 4 &gt; /sys/class/pwm/pwmchip0/export'''| root@orangepi:~# '''25echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm4/period'''|| root@orangepi:~# '''26echo 1000000 &gt; /sys/class/pwm/pwmchip0/pwm4/duty_cycle'''| root@orangepi:~# '''SPI1_CS1echo 1 &gt; /sys/class/pwm/pwmchip0/pwm4/enable'''| } <div class="figure"> [[File:zero2w-img180.png]] </div></ol></li></ol><span id="wiringop-python的安装使用方法"></span> == wiringOP-Python的安装使用方法 == {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''PH9注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。'''</big>|}{| '''233'''class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big>'''266wiringOP-Python是wiringOP的Python语言版本的库,用于在Python程序中操作开发板的GPIO、I2C、SPI和UART等硬件资源。'''| '''PI10另外请注意下面所有的命令都是在<span style="color:#FF0000">root</span>用户下操作的。'''</big>| '''TWI2} <span id="wiringop-SDApython的安装方法"></UART3_RX'''span>| '''27'''=== wiringOP-Python的安装方法 ===|| '''28'''<ol style="list-style-type: decimal;">| '''TWI2-SCL<li><p>首先安装依赖包</UART3_TX'''p>{| '''PI9'''| '''265'''class="wikitable" style="width:800px;"
|-
| '''256'''| <p>root@orangepi:~# '''PI0sudo apt-get update'''</p>| style="text-align<p>root@orangepi: left;"|| ~# '''29sudo apt-get -y install git swig python3-dev python3-setuptools'''</p>|}| '''30'''</li>| '''GND'''<li><p>然后使用下面的命令下载wiringOP-Python的源码</p></li>{| styleclass="text-align: left;wikitable"|| style="textbackground-aligncolor:#ffffdc;width: left800px;"|
|-
| <big>'''271注意,下面的git clone--recursive命令会自动下载wiringOP的源码,因为wiringOP-Python是依赖wiringOP的。请确保下载过程没有因为网络问题而报错。'''| '''PI15如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP-Python源码,存放位置为:/usr/src/wiringOP-Python'''。</big>| }{| class="wikitable" style="text-alignwidth: left800px;"|| '''31'''|| '''32'''| '''PWM1'''| '''PI11'''| '''267'''
|-
| '''268'''| root@orangepi:~# '''PI12git clone --recursive https://github.com/orangepi-xunlong/wiringOP-Python -b next'''| '''PWM2'''| root@orangepi:~# '''33cd wiringOP-Python'''|| root@orangepi:~/wiringOP-Python# '''34git submodule update --init --remote'''| '''GND'''}</ol>| <ol start="3" style="textlist-alignstyle-type: leftdecimal;"|><li><p>然后使用下面的命令编译wiringOP-Python并将其安装到开发板的Linux系统中</p>{| class="wikitable" style="text-alignwidth: left800px;"|
|-
| <p>root@orangepi:~# '''258cd wiringOP-Python'''</p>| <p>root@orangepi:~/wiringOP-Python# '''PI2python3 generate-bindings.py &gt; bindings.i'''</p>| style="text<p>root@orangepi:~/wiringOP-align: left;"|| Python# '''35sudo python3 setup.py install'''</p>|}| </li><li><p>然后输入下面的命令,如果有帮助信息输出,说明wiringOP-Python安装成功,按下'''36q'''键可以退出帮助信息的界面</p></li>{| class="wikitable" style="text-alignwidth: left800px;"|| '''PC12'''| '''76'''
|-
| '''272'''| '''PI16'''| style="textroot@orangepi:~/wiringOP-align: left;"|| '''37'''|| Python# '''38'''| style="textpython3 -align: leftc &quot;"|| '''PI4'''| '''260'''|-| style="text-align: leftimport wiringpi;"|| style="text-align: lefthelp(wiringpi)&quot;"|| '''GND'''| '''39'''|| '''40'''| style="text-alignHelp on module wiringpi: left;"|| '''PI3'''| '''259'''|}NAME
<ol start="2" style="list-style-type: decimal;"><li><p>Linux系统中uart默认都是关闭的,需要手动打开才能使用。打开步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p><p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p></li><li><p>然后选择'''System'''</p><p>[[File:media/image81.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:media/image82.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中想要打开的串口</p></li></ol></li></ol>wiringpi
{| class="wikitable"
|-
| '''40pin中的复用功能'''
| '''对应的dtbo配置'''
|-
| '''40pin - uart2'''
| '''pi-uart2'''
|-
| '''40pin - uart3'''
| '''pi-uart3'''
|-
| '''40pin - uart4'''
| '''pi-uart4'''
|-
| '''40pin - uart5'''
| '''ph-uart5'''
|}
[[File:media/image178.png]]DESCRIPTION
<ol start="5" style="list-style-type: lower-alpha;"><li><p>然后选择'''&lt;Save&gt;'''保存<# This file was automatically generated by SWIG (http:/p><p>[[File:media/image84www.png]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:media/image85swig.png]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:media/image86org).png]]</p></li></ol>
<!-- --><ol start="3" style="list-style-type: decimal;"><li><p>进入linux系统后,先确认下'''/dev'''下是否存在uart5的设备节点</p><p>'''注意,linux5.4系统为/dev/ttyASx。'''</p><p>orangepi@orangepi:~$ '''ls /dev/ttyS*'''</p><p>/dev/ttySx</p></li><li><p>然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx引脚</p></li><li><p>使用wiringOP中的'''gpio'''命令测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常</p><p>'''注意,gpio serial /dev/ttySx命令中最后的x需要替换为对应的uart设备节点的序号。'''</p><p>orangepi@orangepi:~$ '''gpio serial /dev/ttySx # linux-6Version 4.1测试命令'''</p><p>orangepi@orangepi:~$ '''gpio serial /dev/ttyASx # linux-5.4测试命令'''</p><p>Out: 0: -&gt; 0</p><p>Out: 1: -&gt; 1</p><p>Out: 2: -&gt; 2</p><p>Out: 3: -&gt; 3^C</p></li><li><p>最后可以运行examples中的'''serialTest.py'''程序来测试下串口的回环功能,如果能看到下面的打印,说明串口回环测试正常</p><p>'''注意,命令中/dev/ttySx或/dev/ttyASx中的x需要替换为对应的uart设备节点的序号。'''</p><p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p><p>root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device &quot;/dev/ttySx&quot; # linux6.1使用'''</p><p>root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device &quot;/dev/ttyASx&quot; # linux5.4使用'''</p><p>Out: 0: -&gt; 0</p><p>Out: 1: -&gt; 1</p><p>Out: 2: -&gt; 2</p><p>Out: 3: -&gt; 3</p><p>Out: 4:^C</p><p>exit</p></li></ol>
== 硬件看门狗测试 ==: #
Orange Pi发布的linux系统中预装了watchdog_test程序,可以直接测试。: # Do not make changes to this file unless you know what you are doing--modify
运行watchdog_test程序的方法如下所示:: # the SWIG interface file instead.|}</ol><ol start="5" style="list-style-type: decimal;"><li><p>在python命令行下测试wiringOP-Python是否安装成功的步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li>首先使用python3命令进入python3的命令行模式</li>{| class="wikitable" style="width:800px;" |-| root@orangepi:~# '''python3'''|}</ol><ol start="2" style="list-style-type: lower-alpha;"><li>然后导入wiringpi的python模块</li>{| class="wikitable" style="width:800px;" |-| &gt;&gt;&gt; '''import wiringpi;'''|}</ol><ol start="3" style="list-style-type: lower-alpha;"><li>最后输入下面的命令可以查看下wiringOP-Python的帮助信息,按下'''q'''键可以退出帮助信息的界面</li>{| class="wikitable" style="width:800px;" |-| &gt;&gt;&gt; '''help(wiringpi)''' Help on module wiringpi:  NAME :wiringpi
<ol style="list-style-type: lower-alpha;">
<li><p>第二个参数10表示看门狗的计数时间,如果这个时间内没有喂狗,系统会重启</p></li>
<li><p>我们可以通过按下键盘上的任意键(ESC除外)来喂狗,喂狗后,程序会打印一行keep alive表示喂狗成功</p>
<p>orangepi@orangepi:~$ '''sudo watchdog_test 10'''</p>
<p>open success</p>
<p>options is 33152,identity is sunxi-wdt</p>
<p>put_usr return,if 0,success:0</p>
<p>The old reset time is: 16</p>
<p>return ENOTTY,if -1,success:0</p>
<p>return ENOTTY,if -1,success:0</p>
<p>put_user return,if 0,success:0</p>
<p>put_usr return,if 0,success:0</p>
<p>keep alive</p>
<p>keep alive</p>
<p>keep alive</p></li></ol>
<span id="查看h618芯片的chipid"></span>== 查看H618芯片的chipid ==DESCRIPTION
查看H618芯片chipid的命令如下所示,每个芯片的chipid都是不同的,所以可以使用chipid来区分多个开发板。: # This file was automatically generated by SWIG (http://www.swig.org).
orangepi@orangepi:~$ '''cat /sys/class/sunxi_info/sys_info | grep &quot;chipid&quot;'''# Version 4.0.2
sunxi_chipid : 338020004c0048080147478824681ed1#
<span id="python相关说明"></span>== Python相关说明 ==: # Do not make changes to this file unless you know what you are doing--modify
<span id="python源码编译安装的方法"></span>=== Python源码编译安装的方法 ===: # the SWIG interface file instead.
'''如果使用的Ubuntu或者Debian系统软件仓库中的Python版本不符合开发的要求,想要使用最新版本的Python,可以使用下面的方法下载Python的源码包来编译安装最新版本的Python。'''
'''下面演示的是编译安装Python3.9的最新版本,如果要编译安装其他的版本的Python,方法也是一样的(需要下载想要安装的Python对应的源码)。'''CLASSES
<ol style="list-style-type: decimal;"><li><p>首先安装编译Python需要的依赖包</p><p>orangepi@orangepi:~$ '''sudo apt-get update'''</p><p>orangepi@orangepi:~$ '''sudo apt-get install -y build-essential zlib1g-dev \'''</p><p>'''libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev \'''</p><p>'''libreadline-dev libffi-dev curl libbz2-dev'''</p></li><li><p>然后下载最新版本的Python3.9源码并解压</p><p>orangepi@orangepi:~$ '''wget \'''</p><p>[https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz '''https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz''']</p><p>orangepi@orangepi:~$ '''tar xvf Python-3.9.10.tgz'''</p></li><li><p>然后运行配置命令</p><p>orangepi@orangepi:~$ '''cd Python-3.9.10'''</p><p>orangepi@orangepi:~$ '''./configure --enable-optimizations'''</p></li><li><p>然后编译安装Python3.9,编译时间大概需要半个小时左右</p><p>orangepi@orangepi:~$ '''make -j4'''</p><p>orangepi@orangepi:~$ '''sudo make altinstall'''</p></li><li><p>安装完后可以使用下面的命令查看下刚安装的Python的版本号</p><p>orangepi@orangepi:~$ '''python3.9 --version'''</p><p>'''Python 3.9.10'''</p></li><li><p>然后更新下pip</p><p>orangepi@orangepi:~$ '''/usr/local/bin/python3.9 -m pip install --upgrade pip'''</p></li></ol> <span id="python更换pip源的方法"></span>=== Python更换pip源的方法 === '''Linux系统pip默认使用的源为Python官方的源,但是国内访问Python官方的源速度是很慢的,并且经常会由于网络原因导致Python软件包安装失败。所以在使用pip安装Python库时,请记得更换下pip源。''' <ol style="list-style-type: decimal;"><li><p>首先安装下'''python3-pip'''</p><p>orangepi@orangepi:~$ '''sudo apt-get update'''</p><p>orangepi@orangepi:~$ '''sudo apt-get install -y python3-pip'''</p></li><li><p>Linux下永久更换pip源的方法</p><ol style="list-style-type: lower-alpha;"><li><p>先新建'''~/.pip'''目录,然后添加'''pip.conf'''配置文件,并在其中设置pip的源为清华源</p><p>orangepi@orangepi:~$ '''mkdir -p ~/.pip'''</p><p>orangepi@orangepi:~$ '''cat &lt;&lt;EOF &gt; ~/.pip/pip.conf'''</p><p>'''[global]'''</p><p>'''timeout = 6000'''</p><p>'''index-url = https://pypi.tuna.tsinghua.edu.cn/simple'''</p><p>'''trusted-host = pypi.tuna.tsinghua.edu.cn'''</p><p>'''EOF'''</p></li><li><p>然后使用pip3安装Python库速度就会很快了</p></li></ol></li><li><p>Linux下临时更换pip源的方法,其中的'''&lt;packagename&gt;'''需要替换为具体的包名</p><p>orangepi@orangepi:~$ '''pip3 install &lt;packagename&gt; -i \'''</p><p>'''https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edubuiltins.cn'''</p></li></ol>object
<span id="安装docker的方法"></span>== 安装Docker的方法 ==::GPIO
Orange Pi提供的linux镜像已经预装了Docker,只是Docker服务默认没有打开。使用'''enable_docker.sh'''脚本可以使能docker服务,然后就可以开始使用docker命令了,并且在下次启动系统时也会自动启动docker服务。::I2C
orangepi@orangepi:~$ '''enable_docker.sh''':Serial
可以使用下面的命令测试下docker,如果能运行'''hello-world'''说明docker能正常使用了。::nes
orangepi@orangepi:~$ '''docker run hello-world'''
Unable to find image 'hello-world:latest' locallyclass GPIO(builtins.object)
latest: Pulling from library/hello-world| GPIO(pinmode=0)
256ab8fe8778: Pull complete|
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449ef11e0941a1fd0bf4a8e6c9408b2600777c5
Status: Downloaded newer image for hello&gt;&gt;&gt;|}</ol></li></ol><span id="pin-world:latestgpio口测试-1"></span>
'''Hello from Docker!'''=== 40pin GPIO口测试 ===
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''This message shows that your installation appears to be working correctly.wiringOP-Python跟wiringOP一样,也是可以通过指定wPi号来确定操作哪一个GPIO引脚,因为wiringOP-Python中没有查看wPi号的命令,所以只能通过wiringOP中的gpio命令来查看板子wPi号与物理引脚的对应关系。'''</big>
'''[[File:zero2w-img173.….'''png|center]]|}
使用docker命令时,如果提示'''permission denied''',请将当前用户加入到docker用户组,这样不需要sudo就能运行docker命令了。 orangepi@orangepi:~$ '''sudo usermod -aG docker $USER''' '''注意:需要退出重新登录系统才能生效,重启系统也可以。''' <span id="home-assistant的安装方法"></span>== Home Assistant的安装方法 == '''注意,这里只会提供在Ubuntu或者Debian系统中安装Home Assistant的方法,Home Assistant详细的使用方法请参考官方文档或者相应的书籍。''' === 通过docker安装 === <ol style="list-style-type: decimal;"><li><p>首先请安装好docker,并确保docker能正常运行。docker的安装步骤请参考[[\l|'''安装Docker的方法''']]一节的说明。</p></li><li><p>然后可以搜索下Home Assistant的docker镜像下面以7号引脚——对应GPIO为PI13 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p><p>orangepi@orangepi[[File:~$ '''docker search homeassistant'''zero2w-img174.png]]</p></li><li><p>然后使用下面的命令下载Home Assistant的docker镜像到本地,镜像大小大概有1GB多,下载时间会比较长,请耐心等待下载完成直接用命令测试的步骤如下所示:</p><p>orangepi@orangepi:~$ '''docker pull homeassistant/homeol style="list-style-assistant'''</p><p>Using default tag: latest</p><p>latesttype: Pulling from homeassistant/homelower-assistant</palpha;"><p>be307f383ecc: Downloading</p><p>5fbc4c07ac88: Download complete</pli><p>首先设置GPIO口为输出模式,其中'''...... (省略部分输出)pinMode'''函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式</p><p>3cc6a1510c9f{| class="wikitable" style="width: Pull complete</p>800px;" <p>7a4e4d5b979f: Pull complete</p><p>Digest: sha256:81d381f5008c082a37da97d8b08dd8b358dae7ecf49e62ce3ef1eeaefc4381bb</p><p>Status: Downloaded newer image for homeassistant/home|-assistant:latest</p><p>docker.io/homeassistant/home-assistant:latest</p></li><li><p>然后可以使用下面的命令查看下刚下载的Home Assistant的docker镜像</p>| <p>orangepiroot@orangepi:~$ /wiringOP-Python# '''docker images homeassistant/homepython3 -assistantc &quot;import wiringpi; \'''</p><p>REPOSITORY TAG IMAGE ID CREATED SIZE'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ; \'''</p><p>homeassistant/home-assistant latest bfa0ab9e1cf5 2 months ago '''1wiringpi.pinMode(<span style="color:#FF0000">2, GPIO.17GBOUTPUT</span>) ; &quot;'''</p>|}</li><li><p>此时就可以运行Home Assistant的docker容器了然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p>{| class="wikitable" style="width:800px;" |-| <p>orangepiroot@orangepi:~$ /wiringOP-Python# '''docker run python3 -d c &quot;import wiringpi; \'''</p><p>'''--name homeassistant from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''</p><p>'''--privileged \'''wiringpi.digitalWrite(2, </pspan style="color:#FF0000">GPIO.LOW<p/span>'''--restart=unless-stopped \)&quot;'''</p>|}<p/li>'''-e TZ=Asia/Shanghai \'''</pli><p>'''-v /home/orangepi/home-assistant:/config \'''然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~/wiringOP-Python# '''python3 --network=host c &quot;import wiringpi; \'''</p><p>'''homeassistant/home-assistant:latestfrom wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''</p></li><li><p>然后在浏览器中输入【开发板的IP地址:8123】就能看到Home Assistant的界面</p><p>'''Home Assistant容器的启动需要一段时间,如果下面的界面没有正常显示,请等待几秒钟再刷新。如果等待一分钟以上还没有正常显示下面的界面说明Home Assistant安装有问题,此时需要去检查前面的安装设置过程是否有问题了。'''wiringpi.digitalWrite(2, </p><pspan style="color:#FF0000">[[File:media/image183GPIO.png]]HIGH</pspan></li><li><p>然后输入'''姓名、用户名'''和'''密码'''再点击'''创建账号)&quot;'''</p><p>[[File:media/image184.png]]</p></li><li><p>然后按照界面提示根据自己的喜好设置,再点击下一步</p>|}<p>[[File:media/image185.png]]</p></li><li><p>然后点击下一步</p><p>[[File:media/image186.png]]</p></li><li><p>然后点击完成</p><p>[[File:media/image187.png]]</p></li><li><p>Home Assistant最终显示的主界面如下图所示</pol><p>[[File:media/image188.png]]</p></li><li><p>停止Home Assistant容器的方法在python3的命令行中测试的步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>查看docker容器的命令如下所示首先使用python3命令进入python3的命令行模式</p>{| class="wikitable" style="width:800px;" |-| <p>orangepiroot@orangepi:~$ # '''python3''docker ps '</p>|}</li><li><p>然后导入wiringpi的python模块</p>{| class="wikitable" style="width:800px;" |-a| <p>&gt;&gt;&gt; '''import wiringpi'''</p><p>&gt;&gt;&gt; '''from wiringpi import GPIO'''</p>|}</li><li><p>停止Home Assistant容器的命令如下所示然后设置GPIO口为输出模式,其中'''pinMode'''函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式</p>{| class="wikitable" style="width:800px;" |-| <p>&gt;&gt;&gt; '''wiringpi.wiringPiSetup()'''</p><p>0</p><p>&gt;&gt;&gt; '''wiringpi.pinMode(<span style="color:#FF0000">2, GPIO.OUTPUT</span>)'''</p>|}</li><li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p>{| class="wikitable" style="width:800px;" |-| <p>&gt;&gt;&gt; '''wiringpi.digitalWrite(2, <span style="color:#FF0000">GPIO.LOW</span>)'''</p>|}</li><li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>orangepi@orangepi{| class="wikitable" style="width:~$ 800px;" |-| <p>&gt;&gt;&gt; '''docker stop homeassistantwiringpi.digitalWrite(2, <span style="color:#FF0000">GPIO.HIGH</span>)'''</p>|}</li></ol></li><li><p>删除Home Assistant容器的命令如下所示wiringOP-Python在python代码中设置GPIO高低电平的方法可以参考下examples中的'''blink.py'''测试程序,'''blink.py'''测试程序会设置开发板40 Pin中所有的GPIO口的电压不断的高低变化</p>{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p><p>root@orangepi:~$ /wiringOP-Python/examples# '''docker rm homeassistantls blink.py'''</p><p>'''blink.py'''</lip><p>root@orangepi:~/wiringOP-Python/examples'''# python3 blink.py'''</olp>|}
</li></ol>
<span id="pin-spi测试-1"></span> == 通过python安装 = 40pin SPI测试 ===
'''安装前请先更换下pip的源为国内源,加快Python包的安装速度,配置方法见[[\l|Python更换pip源的方法]]一节的说明。'''# 由下表可知,40pin接口可用的spi为spi1,有两个片选引脚cs0和cs1
<ol div style="list-style-typedisplay: decimalflex;"><li><p>首先安装依赖包</p><p>orangepi@orangepi:~$ '''sudo apt:{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"|-get update'''</p><p>orangepi@orangepi:~$ | '''sudo apt-get install -y python3 python3-dev python3-venv \GPIO序号'''</p><p>| '''python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \GPIO'''</p><p>| '''libopenjp2-7 libtiff5 libturbojpeg0-dev tzdata功能'''</p><p>| '''如果是debian12请使用下面的命令:引脚'''</p><p>orangepi@orangepi:~$ '''sudo apt|-get update'''</p><p>orangepi@orangepi| style="text-align: left;"|| style="text-align:~$ left;"|| '''sudo apt-get install -y python3 python3-dev python3-venv \3.3V'''</p><p>| '''python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \1'''</p><p>|-| '''libopenjp2-7 libturbojpeg0-dev tzdata264'''</p></li><li><p>然后需要编译安装Python3.9,方法请参考[[\l|'''Python源码编译安装的方法PI8''']]一节</p><p>| '''Debian Bullseye默认的Python版本就是Python3.9,所以无需编译安装。TWI1-SDA'''</p><p>| '''Ubuntu Jammy默认的Python版本就是Python3.10,所以也无需编译安装。3'''</p><p>|-| '''Debian Bookworm默认的Python版本就是Python3.11,所以也无需编译安装。263'''</p></li><li><p>然后创建Python虚拟环境</p><p>'| '''Debian Bookworm中是python3.11,请记得替换对应的命令。PI7'''</p><p>orangepi@orangepi:~$ | '''sudo mkdir /srv/homeassistantTWI1-SCL'''</p><p>orangepi@orangepi:~$ | '''sudo chown orangepi:orangepi /srv/homeassistant5'''</p><p>orangepi@orangepi:~$ |-| '''cd /srv/homeassistant269'''</p><p>orangepi@orangepi:~$ | '''python3.9 -m venv .PI13'''</p><p>orangepi@orangepi:~$ | '''source binPWM3/activateUART4_TX'''</p><p>(homeassistant) orangepi@orangepi:/srv/homeassistant$</p></li><li><p>然后安装需要的Python包</p><p>(homeassistant) orangepi@orangepi:/srv/homeassistant$ | '''python3 -m pip install wheel7'''</p></li><li><p>然后就可以安装Home Assistant Core</p>|-| style="text-align: left;"|<p>(homeassistant) orangepi@orangepi| style="text-align:/srv/homeassistant$ left;"|| '''pip3 install homeassistantGND'''</p></li><li><p>然后输入下面的命令就可以运行Home Assistant Core</p><p>(homeassistant) orangepi@orangepi:/srv/homeassistant$ | '''hass9'''</p></li><li><p>然后在浏览器中输入【|-| '''226'''| '''开发板的IP地址:8123PH2'''】就能看到Home Assistant的界面</p><p>| '''第一次运行hass命令时,会下载安装和缓存一些运行必须的库和依赖包。这个过程可能会花费几分钟的时间。注意,此时在浏览器中是无法看到Home Assistant的界面的,请等待一段时间后再刷新下。UART5_TX'''</p><p>[[File:media/image189.png]]</p></li></ol>| '''11'''|-<span id="opencv的安装方法"></span>| '''227'''== OpenCV的安装方法 ==| '''PH3'''| '''UART5_RX'''<span id="使用apt来安装opencv"></span>| '''13'''=== 使用apt来安装OpenCV ===|-| '''261'''<ol style="list-style-type: decimal;">| '''PI5'''<li><p>安装命令如下所示</p><p>orangepi@orangepi:~$ | '''sudo apt-get updateTWI0_SCL/UART2_TX'''</p><p>orangepi@orangepi:~$ | '''sudo apt-get install -y libopencv-dev python3-opencv15'''</p></li><li><p>然后使用下面的命令打印OpenCV的版本号输出正常,说明OpenCV安装成功</p><ol |-| style="listtext-align: left;"|| style="text-typealign: lower-alphaleft;">|<li><p>Ubuntu22| '''3.04中OpenCV的版本如下所示:</p>3V'''<p>orangepi@orangepi:~$ | '''python3 -c &quot;import cv2; print(cv2.__version__)&quot;17'''</p><p>'''4.5.4|-| '''</pspan style="color:#FF0000">231</lispan>'''| '''<li><pspan style="color:#FF0000">Ubuntu20.04中OpenCV的版本如下所示:PH7</pspan><p>orangepi@orangepi:~$ '''python3 -c &quot;import cv2; print(cv2.__version__)&quot;'| '''</pspan style="color:#FF0000">SPI1_MOSI<p/span>'''4.2.0| '''</pspan style="color:#FF0000">19</lispan>'''|-| '''<li><pspan style="color:#FF0000">Debian11中OpenCV的版本如下所示:232</p><pspan>orangepi@orangepi:~$ '''python3 -c &quot;import cv2; print(cv2.__version__)&quot;| '''</pspan style="color:#FF0000">PH8<p/span>'''4.5.1| '''</pspan style="color:#FF0000">SPI1_MISO</lispan>'''| '''<li><pspan style="color:#FF0000">Debian12中OpenCV的版本如下所示:21</p><pspan>orangepi@orangepi:~$ '''python3 |-c &quot;import cv2; print(cv2.__version__)&quot;| '''</pspan style="color:#FF0000">230<p/span>'''4.6.0| '''</pspan style="color:#FF0000">PH6</li></olspan>'''| '''</lispan style="color:#FF0000">SPI1_CLK</olspan== 设置中文环境以及安装中文输入法 == '''注意,安装中文输入法前请确保开发板使用的Linux系统为桌面版系统。| ''' <span idstyle="debian-系统的安装方法color:#FF0000">23</span>'''=== Debian 系统的安装方法 ===|- <ol | style="listtext-align: left;"|| style="text-typealign: decimalleft;">|<li><p>首先设置默认| '''localeGND'''为中文</p><ol style="list-style-type: lower| '''25'''|-alpha;"><li><p>输入下面的命令可以开始配置| '''locale266'''</p><p>orangepi@orangepi:~$ | '''PI10'sudo dpkg-reconfigure locales''| '</p><''TWI2-SDA/li>UART3_RX'''<li><p>然后在弹出的界面中选择| '''27'''zh_CN.UTF|-8 &gt; UTF-8| '''(通过键盘上的上下方向按键来上下移动,通过空格键来选择,最后通过Tab键可以将光标移动到256'''&lt;OK&gt;| '''PI0''',然后回车即可)</p><p>[[File| style="text-align:media/image190.png]]</p></li>left;"|<li><p>然后设置默认| '''locale29'''|-| '''zh_CN.UTF-8271'''</p><p>[[File:media/image191.png]]</p></li><li><p>退出界面后就会开始| '''localePI15'''的设置,命令行显示的输出如下所示</p><p>orangepi@orangepi:~$ | style="text-align: left;"|| '''sudo dpkg-reconfigure locales31'''</p><p>Generating locales (this might take a while)...</p><p>en_US.UTF|-8... done</p><p>zh_CN.UTF-8... done</p>| '''268'''<p>Generation complete.</p></li></ol>| '''PI12'''</li>| '''PWM2'''<li><p>然后打开| '''Input Method33'''</p><p>[[File:media/image192.png]]</p></li>|-| '''258'''<li><p>然后选择| '''OKPI2'''</p><p>[[File| style="text-align:media/image193.png]]</p></li>left;"|<li><p>然后选择| '''Yes35'''</p><p>[[File:media/image194.png]]</p></li>|-<li><p>然后选择| '''fcitx272'''</p><p>[[File:media/image195.png]]</p></li><li><p>然后选择| '''OKPI16'''</p><p>[[File| style="text-align:media/image196.png]]</p></li>left;"|<li><p>| '''然后重启Linux系统才能使配置生效37'''</p></li><li><p>然后打开''|-| style="text-align: left;"|| style="text-align: left;"|| '''Fcitx configurationGND'''</p><p>[[File:media/image197.png]]</p></li><li><p>然后点击下图所示位置的| '''39''''+'''号</p><p>[[File|}{| class="wikitable" style="width:media/image198.png]]</p></li>390px;margin-right: 20px;text-align: center;"|-<li><p>然后搜索| '''Google Pinyin引脚'''再点击| '''OK功能'''</p><p>[[File:media/image199.png]]</p></li>| '''GPIO'''<li><p>然后将| '''Google PinyinGPIO序号'''放到最前面</p><p>[[File:media/image200.png]]</p>|-<p>[[File:media/image201.png]]</p></li>| '''2'''<li><p>然后打开| '''Geany5V'''这个编辑器测试下中文输入法</p><p>[[File:media/image202.png]]</p></li>| style="text-align: left;"|<li><p>中文输入法测试如下所示</p><p>[[File| style="text-align:media/image203.png]]</p></li>left;"||-<li><p>通过| '''Ctrl+Space4'''快捷键可以切换中英文输入法</p></li><li><p>如果需要整个系统都显示为中文,可以将| '''/etc/default/locale5V'''中的变量都设置为| style="text-align: left;"|| style="text-align: left;"||-| '''zh_CN.UTF-86'''</p><p>orangepi@orangepi:~$ | '''sudo vim /etc/default/localeGND'''</p><p># File generated by update| style="text-locale</p>align: left;"|<p>LC_MESSAGES| style='''zh_CN.UTF"text-align: left;"||-| '''8'''</p><p>LANG=| '''zh_CN.UTF-8UART0_TX'''</p><p>LANGUAGE=| '''zh_CN.UTF-8PH0'''</p></li><li><p>然后| '''重启系统224'''就能看到系统显示为中文了</p><p>[[File:media/image204.png]]</p></li></ol>|-| '''10'''<span id="ubuntu-20.04系统的安装方法"></span>=== Ubuntu 20.04系统的安装方法 ===| '''UART0_RX'''| '''PH1'''<ol style="list-style-type: decimal;"><li><p>首先打开| '''Language Support225'''</p><p>[[File:media/image205.png]]</p></li>|-<li><p>然后找到| '''汉语(中国)12'''选项</p><p>[[File| style="text-align:media/image206.png]]</p></li><li><p>然后请使用鼠标左键选中left;"|| '''汉语(中国)PI1'''并按住不动,然后往上将其拖到最开始的位置,拖完后的显示如下图所示:</p><p>[[File:media/image207.png]]</p></li></ol> | '''注意,这一步不是很好拖动的,请耐心多试几次。257'''|-| '''14'''| '''GND'''<ol start| style="4text-align: left;" || style="list-styletext-typealign: decimalleft;">|<li><p>然后选择|-| '''Apply System-Wide16'''将中文设置应用到整个系统</p><p>[[File:media/image208.png]]</p></li><li><p>然后设置| '''Keyboard input method systemPWM4/UART4_RX'''| '''fcitxPI14'''| '''270'''</p><p>[[File:media/image209.png]]</p></li>|-<li><p>| '''然后重启Linux系统使配置生效18'''</p></li><li><p>重新进入系统后,在下面的界面请选择| style="text-align: left;"|| '''不要再次询问我PH4''',然后请根据自己的喜好决定标准文件夹是否也要更新为中文</p><p>[[File:media/image210.png]]</p></li>| '''228'''<li><p>然后可以看到桌面都显示为中文了</p>|-<p>[[File:media/image211.png]]</p></li><li><p>然后我们可以打开| '''Geany20'''测试下中文输入法,打开方式如下图所示</p><p>[[File:media/image212.png]]</p></li><li><p>打开'''Geany'''后,默认还是英文输入法,我们可以通过| '''Ctrl+SpaceGND'''快捷键来切换成中文输入法,然后就能输入中文了</p><p>[[File| style="text-align:media/image213.png]]</p></li></ol>left;"| <span id| style="ubuntutext-22.04系统的安装方法align: left;"></span>|=== Ubuntu 22.04系统的安装方法 === <ol style="list-style|-type: decimal;"><li><p>首先打开| '''Language Support22'''</p><p>[[File:media| '''TWI0_SDA/image205.png]]</p></li>UART2_RX'''<li><p>然后找到| '''汉语(中国)PI6'''选项</p>| '''262'''|-| '''<p>[[File:media/image214.png]]</pspan style="color:#FF0000">24</li><li><pspan>然后请使用鼠标左键选中'''汉语(中国)| '''并按住不动,然后往上将其拖到最开始的位置,拖完后的显示如下图所示:</p><p>[[Filespan style="color:media/image215.png]]</p#FF0000">SPI1_CS0</li></olspan> '''注意,这一步不是很好拖动的,请耐心多试几次。| ''' <ol start="4" span style="list-style-typecolor: decimal;#FF0000">PH5<li><p/span>然后选择'''Apply System-Wide| '''将中文设置应用到整个系统</p><p>[[Filespan style="color:media/image216.png]]</p#FF0000">229</li><li><pspan>'''然后重启Linux系统使配置生效'|-| '''</pspan style="color:#FF0000">26</lispan>'''| '''<lispan style="color:#FF0000">SPI1_CS1<p/span>重新进入系统后,在下面的界面请选择'''不要再次询问我| ''',然后请根据自己的喜好决定标准文件夹是否也要更新为中文</p><p>[[Filespan style="color:media/image210.png]]</p#FF0000">PH9</lispan>'''| '''<li><pspan style="color:#FF0000">然后可以看到桌面都显示为中文了233</pspan>'''<p>[[File:media/image211.png]]</p></li>|-<li><p>然后打开Fcitx5配置程序</p>| '''28'''<p>[[File:media| '''TWI2-SCL/image217.png]]</p></li>UART3_TX'''<li><p>然后选择使用拼音输入法</p>| '''PI9'''<p>[[File:media/image218.png]]</p></li>| '''265'''<li><p>选择后的界面如下所示,再点击确定即可</p>|-<p>[[File:media/image219.png]]</p></li>| '''30'''<li><p>然后我们可以打开| '''GeanyGND'''测试下中文输入法,打开方式如下图所示</p><p>[[File| style="text-align:media/image212.png]]</p></li>left;"|| style="text-align: left;"||-<li><p>打开| '''Geany32'''后,默认还是英文输入法,我们可以通过| '''Ctrl+SpacePWM1'''快捷键来切换成中文输入法,然后就能输入中文了</p><p>[[File:media/image220.png]]</p></li></ol> <span id="远程登录linux系统桌面的方法"></span>== 远程登录Linux系统桌面的方法 == <span id="使用nomachine远程登录"></span>=== 使用NoMachine远程登录 ===| '''PI11'''| '''267'''|-| '''请确保开发板安装的Ubuntu或者Debian系统为桌面版本的系统。另外NoMachine也提供了详细的使用文档,强烈建议通读此文档来熟悉NoMachine的使用,文档链接如下所示:34''' | '''https://knowledgebase.nomachine.com/DT10R00166GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''NoMachine支持Windows、Mac、Linux、iOS和安卓平台,所以我们可以在多种设备上通过NoMachine来远程登录控制Orange Pi开发板。下面演示下在Windows中通过NoMachine来远程登录Orange Pi开发板的Linux系统桌面。其他平台的安装方法请参考下NoMachine的官方文档。36''' '''操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。''' <ol | style="list-styletext-typealign: decimalleft;">|<li><p>首先下载NoMachine软件Linux | '''arm64PC12''' deb版本的安装包,然后安装到开发板的Linux系统中</p><ol style="list-| '''76'''|-| '''38'''| style="text-typealign: lower-alphaleft;">|<li>由于H618是ARMv8架构的SOC,我们使用的系统为Ubuntu或者Debian,所以这里需要下载| '''NoMachine &gt; for ARM ARMv8 DEBPI4'''安装包,下载链接如下所示:</li></ol></li></ol> | '''注意,这个下载链接可能会变,请认准Armv8/Arm64版本的deb包。260'''|-[https://www.nomachine.com/download/download&id=112&s=ARM | '''https://downloads.nomachine.com/download/?id=118&amp;distro=ARM40'''] [[File:media/image221.png]] <ol start="2" | style="list-styletext-typealign: lower-alphaleft;">|<li><p>另外在| '''官方工具PI3'''中也可以下载到| '''NoMachine259'''的安装包</p><p>[[File:media/image222.png]]</p><p>先进入'''远程登录软件-NoMachine'''文件夹</p><p>[[File:media/image223.png]]</p><p>然后下载arm64版本的deb安装包</p><p>[[File:media/image224.png]]</p></li><li><p>然后将下载的'''nomachine_x.x.x_x_arm64.deb'''上传到开发板的Linux系统中</p></li><li><p>然后使用下面的命令在开发板的Linux系统中安装'''NoMachine'''</p><p>orangepi@orangepi:~$ '''sudo dpkg -i nomachine_x.x.x_x_arm64_arm64.deb'''</p></li></ol> <!-- --><ol start="2" style="list-style-type: decimal;"><li>然后下载NoMachine软件Windows版本的安装包,下载地址如下所示</li></ol> '''注意,这个下载链接可能会变。''' '''https://downloads.nomachine.com/download/?id=9''' [[File:media/image225.png]] <ol start="3" style="list-style-type: decimal;"><li><p>然后在Windows中安装NoMachine,'''安装完后请重启下电脑'''</p></li><li><p>然后在Window中打开'''NoMachine'''</p><p>[[File:media/image226.png]]</p></li><li><p>NoMachine启动后会自动扫描局域网内其他安装有NoMachine的设备,进入NoMachine的主界面后就可以看到开发板已经在可连接的设备列表里了,然后点击下图红色方框所示的位置即可开始登录开发板的Linux系统桌面</p><p>[[File:media/image227.png]]</p></li><li><p>然后点击'''OK'''</p><p>[[File:media/image228.png]]</p></li><li><p>然后在下图对应的位置输入开发板Linux系统的用户名和密码,再点击'''OK'''开始登陆</p><p>[[File:media/image229.png]]</p></li><li><p>然后在接下来的界面中都点击OK</p></li><li><p>最后就能看到开发板Linux系统的桌面了</p><p>[[File:media/image230.png]]</p></li></ol>|}<span id="使用vnc远程登录"></spandiv>=== 使用VNC远程登录 === '''操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。''' '''Ubuntu20.04测试VNC很多问题,请不要使用这种方法。'''
<ol start="2" style="list-style-type: decimal;"><li><p>首先运行'''set_vnc.sh'''脚本设置下vnc,'''记得加sudo权限'''</p><p>orangepi@orangepi:~$ '''sudo set_vnc.sh'''</p><p>You will require a password to access your desktops.</p><p>Password: '''#在这里设置vnc的密码,8位字符'''</p><p>Verify: '''#在这里设置vnc的密码,8位字符'''</p><p>Would you like to enter a view-only password (y/n)? '''n'''</p><p>xauth: file /root/.Xauthority does not exist</p><p>New 'X' desktop is orangepi:1</p><p>Creating default startup script /root/.vnc/xstartup</p><p>Starting applications specified in /root/.vnc/xstartup</p><p>Log file is /root/.vnc/orangepi:1.log</p><p>Killing Xtightvnc process ID 3047</p><p>New 'X' desktop is orangepi:1</p><p>Starting applications specified in /root/.vnc/xstartup</p><p>Log file is /root/.vnc/orangepi:1.log</p></li><li><p>使用MobaXterm软件连接开发板linux系统桌面的步骤如下所示:Linux系统中spi1默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li>首先点击Session,然后选择VNC,再填写开发板的IP地址和端口,最后点击OK确认<p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p>|}</li><li><p>然后选择'''System'''</olp><p>[[File:zero2w-img81.png]]</p></li><li><p>然后选择'''Hardware'''</olp<p>[[File:media/image231zero2w-img82.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中想要打开的SPI的dtbo配置</p></li> {| class="wikitable" style="width:800px;text-align: center;" |-| '''dtbo配置'''| '''说明'''|-| '''spi1-cs0-cs1-spidev'''| '''同时打开spi1的cs0和cs1'''|-| '''spi1-cs0-spidev'''| '''只打开spi1的cs0'''|-| '''spi1-cs1-spidev'''| '''只打开spi1的cs1'''|}</ol><ol start="25" style="list-style-type: lower-alpha;"><li><p>然后输入前面设置的VNC的密码然后选择'''&lt;Save&gt;'''保存</p><p>[[File:mediazero2w-img84.png]]</image232p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:zero2w-img85.png]]</p></li><li><p>登录成功后的界面显示如下图所示,然后就可以远程操作开发板linux系统的桌面了然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:zero2w-img86.png]]</p></li></ol></li></ol><ol start="3" style="list-style-type: decimal;"><li><p>然后查看下linux系统中是否存在'''spidev1.x'''的设备节点,如果存在,说明SPI1的配置已经生效了</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''ls /dev/spidev1*'''</p><p>/dev/spidev1.0 /dev/spidev1.1</p>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''注意,只有打开spi1-cs0-cs1-spidev时,才会看到两个spi的设备节点。'''</p></big>|}</li><li><p>然后可以使用examples中的'''spidev_test.py'''程序测试下SPI的回环功能,'''spidev_test.py'''程序需要指定下面的两个参数:</p><ol style="list-style-type: lower-alpha;"><li><p>'''--channel''':指定SPI的通道号</p></li><li><p>'''--port''':指定SPI的端口号</p></li></ol></li><li><p>先不短接 SPI1 的 mosi 和 miso 两个引脚,运行spidev_test.py的输出结果如下所示,可以看到 TX 和 RX 的数据不一致</p>{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p> root@orangepi:~/wiringOP-Python/examples# '''python3 spidev_test.py \'''
[[File:media/image233.png]]'''--channel 1 --port 0'''
<span id="qt的安装方法"></span>== QT的安装方法 ==spi mode: 0x0
<ol style="list-style-typemax speed: decimal;"><li><p>使用下面的脚本可以安装QT5和QT Creator</p><p>orangepi@orangepi:~$ '''install_qt.sh'''</p></li><li><p>安装完后会自动打印QT的版本号</p><ol style="list-style-type: lower-alpha;"><li><p>Ubuntu20.04自带的qt版本为'''5.12.8'''</p><p>orangepi@orangepi:~$ '''install_qt.sh'''</p><p>......</p><p>QMake version 3.1</p><p>Using Qt version '''5.12.8''' in /usr/lib/aarch64-linux-gnu</p></li><li><p>Ubuntu22.04自带的QT版本为'''5.15.3'''</p><p>orangepi@orangepi:~$ '''install_qt.sh'''</p><p>......</p><p>QMake version 3.1</p><p>Using Qt version '''5.15.3''' in /usr/lib/aarch64-linux-gnu</p></li><li><p>Debian11自带的QT版本为'''5.15.2'''</p><p>orangepi@orangepi:~$ '''install_qt.sh'''</p><p>......</p><p>QMake version 3.1</p><p>Using Qt version '''5.15.2''' in /usr/lib/aarch64-linux-gnu</p></li><li><p>Debian12自带的QT版本为'''5.15.8'''</p><p>orangepi@orangepi:~$ '''install_qt.sh'''</p><p>......</p><p>QMake version 3.1</p><p>Using Qt version '''5.15.8''' in /usr/lib/aarch64-linux-gnu</p></li></ol></li><li><p>然后在'''Applications'''中就可以看到QT Creator的启动图标</p><p>[[File:media/image234.png]]</p><p>也可以使用下面的命令打开QT Creator</p><p>orangepi@orangepi:~$ '''qtcreator'''</p></li><li><p>QT Creator打开后的界面如下所示</p><p>[[File:media/image235.png]]</p></li><li><p>QT Creator的版本如下所示</p><ol style="list-style-type: lower-alpha;"><li><p>QT Creator在'''Ubuntu20.04'''中的默认版本如下所示</p><p>[[File:media/image236.png]]</p></li><li><p>QT Creator在'''Ubuntu22.04'''中的默认版本如下所示</p><p>[[File:media/image237.png]]</p></li><li><p>QT Creator在'''Debian11'''中的默认版本如下所示</p><p>[[File:media/image238.png]]</p></li><li><p>QT Creator在'''Debian12'''中的默认版本如下所示</p><p>[[File:media/image239.png]]</p></li></ol></li><li><p>然后设置下QT</p><ol style="list-style-type: lower-alpha;"><li><p>首先打开'''Help'''-&gt;'''About Plugins...'''</p><p>[[File:media/image240.png]]</p></li><li><p>然后去掉'''ClangCodeModel'''的那个勾</p><p>[[File:media/image241.png]]</p></li><li><p>'''设置完后需要重启下QT Creator'''</p></li><li><p>然后确保QT Creator使用的GCC编译器,如果默认为Clang,请修改为GCC</p><p>'''Debian12请跳过这步。'''</p><p>[[File:media/image242.png]]</p><p>[[File:media/image243.png]]</p></li></ol></li><li><p>然后就可以打开一个示例代码</p><p>[[File:media/image244.png]]</p></li><li><p>点击示例代码后会自动打开对应的说明文档,可以仔细看下其中的使用说明</p><p>[[File:media/image245.png]]</p></li><li><p>然后点击下'''Configure Project'''</p><p>[[File:media/image246.png]]</p></li><li><p>然后点击左下角的绿色三角形编译运行下示例代码</p><p>[[File:media/image247.png]]</p></li><li><p>等待一段时间后,会弹出下图所示的界面,此时就说明QT能正常编译运行</p><p>[[File:media/image248.png]]</p></li><li><p>参考资料</p><p>[https://wiki.qt.io/Install_Qt_5_on_Ubuntu '''https://wiki.qt.io/Install_Qt_5_on_Ubuntu''']</p><p>[https://download.qt.io/archive/qtcreator '''https://download.qt.io/archive/qtcreator''']</p><p>[https://download.qt.io/archive/qt '''https://download.qt.io/archive/qt''']</p></li></ol>500000 Hz (500 KHz)
<span id="ros安装方法"><Opening device /span>== ROS安装方法 ==dev/spidev1.1
TX | FF FF FF FF FF FF '''<span idstyle="ubuntu20.04安装ros-1-noetic的方法color:#FF0000">40 00 00 00 00 95</span>=== Ubuntu20''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......04安装ROS 1 Noetic的方法 ===…|
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 |.............….||}</li></ol><ol start="6" style="list-style-type: decimal;"><li><p>然后使用杜邦线短接SPI1的txd(40pin接口中的第19号引脚)和rxd(40pin接口中的第21号引脚)两个引脚再运行spidev_test.py的输出如下,可以看到发送和接收的数据一样,说明SPI1回环测试正常</p>{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~/wiringOP-Python# ROS 1当前活跃的版本如下所示,推荐版本为'''Noetic Ninjemyscd examples'''</p>
[[Fileroot@orangepi:media~/image249wiringOP-Python/examples# '''python3 spidev_test.png]]py \'''
[[File:media/image250.png]]'''--channel 1 --port 0'''
[httpspi mode://docs.ros.org/ '''http://docs.ros.org''']0x0
'''httpsmax speed://wiki.ros.org/Distributions'''500000 Hz (500 KHz)
<ol start="2" style="list-style-type: decimal;"><li><p>ROS 1 '''Noetic Ninjemys'''官方安装文档链接如下所示:<Opening device /p><p>[http:dev//wikispidev1.ros.org/noetic/Installation/Ubuntu '''http://wiki.ros.org/noetic/Installation/Ubuntu''']</p></li><li><p>ROS '''Noetic Ninjemys'''官方安装文档中Ubuntu推荐使用Ubuntu20.04,所以请确保开发板使用的系统为'''Ubuntu20.04桌面版系统'''</p><p>[http://wiki.ros.org/noetic/Installation '''http://wiki.ros.org/noetic/Installation''']</p><p>[[File:media/image251.png]]</p></li><li><p>然后使用下面的脚本安装ros1</p><p>orangepi@orangepi:~$ '''install_ros.sh ros1'''</p></li><li><p>使用ROS工具前,首先需要初始化下rosdep,然后编译源码时就能快速的安装一些系统依赖和一些ROS中的核心组件</p></li></ol>1
TX | FF FF FF FF FF FF '''注意,运行下面的命令需要确保开发板能正常访问github,否则会由于网络问题而报错。<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 '''install_ros.sh脚本会尝试修改<span style="color:#FF0000">40 00 00 00 00 95</etc/hosts并自动运行下面的命令。但是这种方法无法保证每次都能正常访问github,如果install_ros.sh安装完ros1后有提示下面的错误,请自己想其它办法让开发板的linux系统能正常访问github,然后再手动运行下面的命令。span>'''FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…||}</li></ol><span id="pin-i2c测试-1"></span>
'''https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml'''=== 40pin I2C测试 ===
'''Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml'''# 由下表可知,40pin接口可用的i2c为i2c0、i2c1和i2c2
'''ERROR<div style="display: error loading sources listflex;">:''' '''The read operation timed out''' orangepi@orangepi:~$ '''source /opt/ros/noetic/setup.bash{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"|-| '''GPIO序号''' orangepi@orangepi:~$ | '''sudo rosdep initGPIO'''| '''功能'''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| style="text-align: left;"|| style="text-align: left;"|Hit https://raw| '''3.githubusercontent.com/ros/rosdistro/master/rosdep/osx3V'''| '''1'''|-homebrew.yaml Hit https| '''<span style="color:#FF0000">264<//raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yamlspan>''' Hit https| '''<span style="color:#FF0000">PI8<//raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yamlspan>''' Hit https| '''<span style="color:#FF0000">TWI1-SDA<//raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yamlspan>''' Hit https| '''<span style="color:#FF0000">3<//raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yamlspan>'''|-Query rosdistro index https| '''<span style="color:#FF0000">263</span>'''| '''<span style="color:#FF0000">v</raw.githubusercontent.com/ros/rosdistro/master/index-v4.yamlspan>''' Skip end-of| '''<span style="color:#FF0000">TWI1-life distro &quot;ardent&quot;SCL</span>'''| '''<span style="color:#FF0000">5</span>'''Skip end-of-life distro &quot;bouncy&quot; Skip end-of|-life distro &quot;crystal&quot;| '''269'''Skip end-of-life distro &quot;dashing&quot;| '''PI13'''| '''PWM3/UART4_TX'''| '''7'''Skip end|-of| style="text-life distro &quot;eloquent&quotalign: left;"| Add distro &quot;foxy&quot; Add distro &quot;galactic&quot; Skip end| style="text-of-life distro &quot;groovy&quotalign: left;"|| '''GND'''Add distro &quot;humble&quot;| '''9''' Skip end-of|-life distro &quot;hydro&quot;| '''226'''Skip end-of-life distro &quot;indigo&quot;| '''PH2'''Skip end-of-life distro &quot;jade&quot;| '''UART5_TX'''| '''11'''Skip end-of|-life distro &quot;kinetic&quot;| '''227'''Skip end-of-life distro &quot;lunar&quot;| '''PH3'''Add distro &quot;melodic&quot;| '''UART5_RX'''| '''13'''Add distro &quot;noetic&quot; Add distro &quot;rolling&quot; updated cache in /home/orangepi/.ros/rosdep/sources.cache|-| '''<ol start="6" span style="list-style-typecolor: decimal;#FF0000">261<li><p/span>然后在'''桌面| '''中打开一个命令行终端窗口,再使用'''test_ros.sh'''脚本可以启动一个小海龟的例程来测试下ROS是否能正常使用</pspan style="color:#FF0000">PI5<p/span>orangepi@orangepi:~$ '''test_ros.sh| '''</pspan style="color:#FF0000">TWI0_SCL</lispan><li><p>运行完/UART2_TX'''test_ros.sh| '''脚本后,会弹出下图所示的一个小海龟</p><p>[[Filespan style="color:media/image252.png]]</p#FF0000">15</lispan>'''<li><p>然后请保持刚才打开终端窗口在最上面</p></li></ol>|- [[File:media/image253.png]] <ol start="9" | style="listtext-align: left;"|| style="text-typealign: decimalleft;">|<li><p>此时按下键盘上的方向按键就可以控制小海龟上下左右移动了</p>| '''3.3V'''<p>[[File:media/image254.png]]</p></li></ol>| '''17'''|-<span id="ubuntu20.04安装ros-2-galactic的方法"></span>| '''231'''=== Ubuntu20.04安装ROS 2 Galactic的方法 ===| '''PH7'''| '''SPI1_MOSI'''<ol style="list-style-type: decimal;"><li><p>ROS 2当前活跃的版本如下所示,推荐版本为| '''Galactic Geochelone19'''</p><p>[[File:media/image255.png]]</p>|-| '''232'''<p>[[File:media/image256.png]]</p><p>[http://docs.ros.org/ | '''http://docs.ros.orgPH8''']</p><p>| '''http://docs.ros.org/en/galactic/Releases.htmlSPI1_MISO'''</p></li><li><p>ROS 2 | '''Galactic Geochelone21'''官方安装文档链接如下所示:</p><p>|-| '''docs.ros.org/en/galactic/Installation.html230'''</p><p>| '''PH6'''http://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.html| '''</p></li><li><p>ROS 2 ''SPI1_CLK'Galactic Geochelone''| '官方安装文档中Ubuntu Linux推荐使用Ubuntu20.04,所以请确保开发板使用的系统为''23'Ubuntu20.04桌面版系统''|-| style="text-align: left;"|| style="text-align: left;"|| '。安装ROS 2有几种方法,下面演示下通过''GND'Debian packages''| '的方式来安装ROS 2 ''25'Galactic Geochelone''|-| '''</pspan style="color:#FF0000">266</li><lispan><p>使用'''install_ros.sh| '''脚本可以安装ros2</pspan style="color:#FF0000">PI10<p/span>orangepi@orangepi:~$ '''install_ros.sh ros2| '''</pspan style="color:#FF0000">TWI2-SDA</lispan>/UART3_RX'''| '''<lispan style="color:#FF0000">27<p/span>'''install_ros.sh'|-| '''256''脚本安装完ros2后会自动运行下'| ''ros2 -h'PI0'''命令,如果能看到下面的打印,说明ros2安装完成</p><p>usage| style="text-align: ros2 [-h] Call `ros2 &ltleft;command&gt; -h` for more detailed usage. ...</p>"|| '''29'''<p>ros2 is an extensible command|-line tool for ROS 2.</p><p>optional arguments:</p>| '''271'''<p>-h, -| '''PI15'''| style="text-help show this help message and exit</p><p>Commandsalign:</p>left;"|<p>action Various action related sub-commands</p>| '''31'''<p>bag Various rosbag related sub|-commands</p><p>component Various component related sub-commands</p>| '''268'''<p>daemon Various daemon related sub-commands</p>| '''PI12'''<p>doctor Check ROS setup and other potential issues</p>| '''PWM2'''<p>interface Show information about ROS interfaces</p>| '''33'''<p>launch Run a launch file</p><p>lifecycle Various lifecycle related sub|-commands</p><p>multicast Various multicast related sub-commands</p>| '''258'''<p>node Various node related sub-commands</p>| '''PI2'''<p>param Various param related sub| style="text-commands</p>align: left;"|<p>pkg Various package related sub-commands</p>| '''35'''<p>run Run a package specific executable</p><p>security Various security related sub|-commands</p><p>service Various service related sub-commands</p>| '''272'''| '''PI16'''<p>topic Various topic related sub| style="text-commands</p>align: left;"|<p>wtf Use `wtf` as alias to `doctor`</p><p>Call `ros2 &lt;command&gt; -h` for more detailed usage.</p></li><li><p>然后可以使用 | '''test_ros.sh37'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行</p><p>orangepi@orangepi|-| style="text-align: left;"|| style="text-align:~$ left;"|| '''test_ros.shGND'''</p><p>[INFO] [1671174101.200091527] [talker]: Publishing: | '''39''Hello World: 1'</p><p>[INFO] [1671174101.235661048] [listener]|}{| class="wikitable" style="width: I heard390px;margin-right: [Hello World20px;text-align: 1]</p>center;"|-<p>[INFO] [1671174102.199572327] [talker]: Publishing: | '''引脚''Hello World: 2'</p><p>[INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]</p>| '''功能'''<p>[INFO] [1671174103.199580322] [talker]: Publishing: | '''GPIO''Hello World: 3'</p><p>[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]</p></li>| '''GPIO序号'''<li><p>运行下面的命令可以打开rviz2</p>|-<p>orangepi@orangepi:~$ | '''2''source /opt/ros/galactic/setup.bash'''</p><p>orangepi@orangepi:~$ | '''ros2 run rviz2 rviz25V'''</p><p>[[File| style="text-align:media/image257.png]]</p></li>left;"|| style="text-align: left;"|<li><p>ROS的使用方法请参考下ROS 2的文档</p>|-<p>[http://docs.ros.org/en/galactic/Tutorials.html | '''4'''| '''http://docs.ros.org/en/galactic/Tutorials.html5V''']</p></li></ol> <span id| style="ubuntu22.04安装rostext-2-humble的方法align: left;"></span>|| style=== Ubuntu22.04安装ROS 2 Humble的方法 ==="text-align: left;"| <ol style="list-style|-type: decimal;"><li><p>使用| '''install_ros.sh6'''脚本可以安装ros2</p><p>orangepi@orangepi:~$ | '''install_ros.sh ros2GND'''</p></li><li><p>'''install_ros.sh'''脚本安装完ros2后会自动运行下'''ros2 | style="text-h'''命令,如果能看到下面的打印,说明ros2安装完成</p>align: left;"|<p>usage| style="text-align: ros2 [-h] Call `ros2 &lt;command&gtleft; "||-h` for more detailed usage. ...</p><p>ros2 is an extensible command-line tool for ROS 2.</p>| '''8'''<p>optional arguments:</p>| '''UART0_TX'''<p>-h, --help show this help message and exit</p>| '''PH0'''<p>Commands:</p>| '''224'''<p>action Various action related sub|-commands</p><p>bag Various rosbag related sub-commands</p>| '''10'''<p>component Various component related sub-commands</p>| '''UART0_RX'''<p>daemon Various daemon related sub-commands</p>| '''PH1'''<p>doctor Check ROS setup and other potential issues</p>| '''225'''<p>interface Show information about ROS interfaces</p>|-<p>launch Run a launch file</p>| '''12'''<p>lifecycle Various lifecycle related sub| style="text-commands</p>align: left;"|<p>multicast Various multicast related sub-commands</p>| '''PI1'''<p>node Various node related sub-commands</p>| '''257'''<p>param Various param related sub|-commands</p><p>pkg Various package related sub-commands</p>| '''14'''<p>run Run a package specific executable</p>| '''GND'''<p>security Various security related sub| style="text-commands</p>align: left;"|<p>service Various service related sub| style="text-commands</p>align: left;"|<p>topic Various topic related sub|-commands</p><p>wtf Use `wtf` as alias to `doctor`</p>| '''16'''<p>Call `ros2 &lt;command&gt; -h` for more detailed usage.</p></li><li><p>然后可以使用 | '''test_ros.shPWM4/UART4_RX'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行</p><p>orangepi@orangepi:~$ | '''test_ros.shPI14'''</p><p>[INFO] [1671174101.200091527] [talker]: Publishing: | '''270'''|-| '''18''Hello World: 1'</p><p>[INFO] [1671174101.235661048] [listener]| style="text-align: I heard: [Hello World: 1]</p>left;"|<p>[INFO] [1671174102.199572327] [talker]: Publishing: | '''PH4''Hello World: 2'</p><p>[INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]</p><p>[INFO] [1671174103.199580322] [talker]: Publishing: | '''228''Hello World: 3'</p><p>[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]</p></li><li><p>运行下面的命令可以打开rviz2</p><p>orangepi@orangepi:~$ |-| '''''source /opt/ros/humble/setup.bash20'''</p><p>orangepi@orangepi:~$ | '''ros2 run rviz2 rviz2GND'''</p><p>[[File| style="text-align:media/image258.png]]</p></li>left;"|| style="text-align: left;"||-| '''<lispan style="color:#FF0000"><p>参考文档22</p><pspan>'''http://docs.ros.org/en/humble/index.html| '''</pspan style="color:#FF0000">TWI0_SDA<p/span>[http://docs.ros.org/en/galactic/Tutorials.html UART2_RX'''| '''http<span style="color:#FF0000">PI6<//docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.htmlspan>'''| ''']</p></lispan style="color:#FF0000">262</olspan>'''|-== 安装内核头文件的方法 == | '''Linux6.1内核的Debian11系统编译内核模块时会报GCC的错误。所以如果要编译内核模块请使用Debian12或者Ubuntu22.04。24''' <ol style="list-style-type: decimal;"><li><p>OPi发布的Linux镜像默认自带了内核头文件的deb包,存放的位置为'| '''/opt/SPI1_CS0'''</p><p>orangepi@orangepi:~$ | '''ls /opt/linux-headers*PH5'''| '''229'''</p><p>/opt/linux-headers-xxx|-sun50iw9_x.x.x_arm64.deb</p></li><li><p>使用下面的命令可以安装内核头文件的deb包</p>| '''26'''<p>orangepi@orangepi:~$ | '''sudo dpkg -i /opt/linux-headers*.debSPI1_CS1'''</p></li><li><p>安装完后在| '''/usr/srcPH9'''下就能看到内核头文件所在的文件夹</p><p>orangepi@orangepi:~$ | '''ls /usr/src233'''</p><p>linux-headers|-x.x.x</p></li><li><p>然后可以编译下Linux镜像中自带的hello内核模块的源码,hello模块的源码在| '''/usr/src/hello'''中,进入此目录后,然后使用make命令编译即可。</pspan style="color:#FF0000">28<p/span>orangepi@orangepi:~$ '''cd /usr/src/hello/| '''</pspan style="color:#FF0000">TWI2-SCL<p/span>orangepi@orangepi:/usr/src/hello$ UART3_TX'''sudo make| '''<span style="color:#FF0000">PI9</pspan>'''| '''<p>make -C /lib/modules/5.4.125/build M=/usr/src/hello modulesspan style="color:#FF0000">265</pspan>'''|-<p>make[1]: Entering directory | '''30'''| '''GND''/usr/src/linux-headers-5.4.125'</p><p>CC [M] /usr/src/hello/hello.o</p>| style="text-align: left;"|<p>Building modules, stage 2.</p>| style="text-align: left;"|<p>MODPOST 1 modules</p>|-<p>CC [M] /usr/src/hello/hello.mod.o</p>| '''32'''<p>LD [M] /usr/src/hello/hello.ko</p>| '''PWM1'''<p>make[1]: Leaving directory | '''PI11''/usr/src/linux-headers-5.4.125'</p></li><li><p>编译完后会生成| '''hello.ko267'''内核模块</p><p>orangepi@orangepi:/usr/src/hello$ |-| '''ls *.ko34'''</p><p>hello.ko</p></li><li><p>使用'''insmod'''命令可以将'| '''hello.koGND'''内核模块插入内核中</p><p>orangepi@orangepi:/usr/src/hello$ | style="text-align: left;"|| style="text-align: left;"||-| '''sudo insmod hello.ko36'''</p></li><li><p>然后使用| style="text-align: left;"|| '''demsgPC12'''命令可以查看下| '''hello.ko76'''内核模块的输出,如果能看到下面的输出说明|-| '''hello.ko38'''内核模块加载正确</p><p>orangepi@orangepi| style="text-align:/usr/src/hello$ left;"|| '''dmesg | grep &quot;Hello&quot;PI4'''</p><p>[ 2871.893988] | '''Hello Orange Pi -- init260'''</p></li><li><p>使用|-| '''rmmod40'''命令可以卸载| style="text-align: left;"|| '''hello.koPI3'''内核模块</p><p>orangepi@orangepi:/usr/src/hello$ | '''259''sudo rmmod hello'''</p><p>orangepi@orangepi:/usr/src/hello$ '''dmesg | grep &quot;Hello&quot;'''</p>}<p>[ 2871.893988] Hello Orange Pi -- init</p><p>[ 3173.800892] '''Hello Orange Pi -- exit'''</p></li></oldiv>
<span id="linux系统支持的部分编程语言测试"></span>== Linux系统支持的部分编程语言测试 == <span idol start="debian-bullseye系统2"></span>=== Debian Bullseye系统 === <ol style="list-style-type: decimal;"><li><p>Debian Bullseye默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序Linux系统中i2c默认都是关闭的,需要手动打开才能使用。打开步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>gcc的版本如下所示</p><p>orangepi@orangepi:~$ 首先运行下'''gcc -orangepi-versionconfig'''</p><p>gcc (Debian 10.2.1-6) 10.2.1 20210110</p><p>Copyright (C) 2020 Free Software Foundation, Inc.</p><p>This is free software; see the source for copying conditions. There is NO</p><p>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p></li><li><p>编写C语言的,普通用户记得加'''hello_world.csudo'''程序权限</p><p>orangepi@orangepi{| class="wikitable" style="width:~$ '''vim hello_world.c'''</p><p>#include &lt;stdio.h&gt800px;</p>" <p>int main(void)</p><p>{</p><p>printf(&quot;Hello World!\n&quot;);</p><p>return 0;</p><p>}</p></li>|-<li><p>然后编译运行'''hello_world.c'''</p>| <p>orangepi@orangepi:~$ '''gcc sudo orangepi-o hello_world hello_world.cconfig'''</p><p>orangepi@orangepi:~$ '''./hello_world'''</p><p>Hello World!</p></li></ol>|}
</li>
<li><p>Debian Bullseye默认安装有Python3</p><ol style="list-style-type: lower-alpha;"><li><p>Python具体版本如下所示</p><p>orangepi@orangepi:~$ 然后选择'''python3System'''</p><p>'''Python 3.9.2''' (default, Feb 28 2021, 17[[File:03:44)</p><p>[GCC 10zero2w-img81.2.1 20210110png]] on linux</p><p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p><p>&gt;&gt;&gt;</p><p>'''使用Ctrl+D快捷键可退出python的交互模式。'''</p></li><li><p>编写Python语言的然后选择'''hello_world.pyHardware'''程序</p><p>orangepi@orangepi:~$ '''vim hello_world.py'''</p><p>print('Hello World!')</p></li><li><p>运行'''hello_world.py'''的结果如下所示</p><p>orangepi@orangepi:~$ '''python3 hello_world.py'''</p><p>Hello World!</p></li></ol></li><li><p>Debian Bullseye默认没有安装Java的编译工具和运行环境</p><ol style="list-style-type: lower-alpha;"><li><p>可以使用下面的命令安装openjdk,Debian &gt; Bullseye中最新版本为openjdk-17</p><p>orangepi@orangepi[[File:~$ '''sudo apt install -y openjdk-17zero2w-jdk'''</p></li><li><p>安装完后可以查看下Java的版本</p><p>orangepi@orangepi:~$ '''java --version'''</p></li><li><p>编写Java版本的'''hello_worldimg82.java'''</p><p>orangepi@orangepi:~$ '''vim hello_world.java'''</p><p>public class hello_world</p><p>{</p><p>public static void main(String[png]] args)</p><p>{</p><p>System.out.println(&quot;Hello World!&quot;);</p><p>}</p><p>}</p></li><li><p>然后编译运行然后使用键盘的方向键定位到下图所示的位置,再使用'''hello_world.java空格'''选中下图中对应的i2c的配置</p><p>orangepi@orangepi:~$ '''javac hello_world.java'''</p><p>orangepi@orangepi:~$ '''java hello_world'''</p><p>Hello World!</p></li></ol></li></ol>
{| class="wikitable" style="width:800px;text-align: center;" |-| '''40pin中的复用功能'''| '''对应的dtbo配置'''|-| '''40pin - i2c0'''| '''pi-i2c0'''|-| '''40pin - i2c1'''| '''pi-i2c1'''|-| '''40pin - i2c2'''| '''pi-i2c2'''|} [[File:zero2w-img176.png]]</ol><span idol start="debian5" style="list-bookworm系统style-type: lower-alpha;"><li><p>然后选择'''&lt;Save&gt;'''保存</p><p>[[File:zero2w-img84.png]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:zero2w-img85.png]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:zero2w-img86.png]]</p></li></spanol></li></ol><ol start="3" style="list-style-type: decimal;"><li><p>启动linux系统后,先确认下/dev下存在已打开的i2c的设备节点</p>{| class= Debian Bookworm系统 "wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''ls /dev/i2c-*'''</p><p>'''/dev/i2c-*'''</p>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''有时i2c的设备节点和i2c总线的序号不是一一对应的,比如i2c1总线的i2c设备节点可能是/dev/i2c-3。'''</p><p>'''准确确认i2c总线对应的/dev下设备节点方法为:'''</p></big>
<ol style="list-style-type: decimal;">
<li><p>Debian Bookworm默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p>
<ol style="list-style-type: lower-alpha;">
<li><p>gcc的版本如下所示'''首先运行下面的命令,查看i2c的对应关系'''</p><p>orangepi@orangepiorangepizero2w:~$ '''gcc ls /sys/devices/platform/soc*/*/i2c-* | grep &quot;i2c-[0-version9]&quot;'''</p><p>gcc (Debian 12/sys/devices/platform/soc/<span style="color:#FF0000">5002000</span>.2.0i2c/<span style="color:#FF0000">i2c-14) 12.2.0</span>:</p><p>Copyright (C) 2022 Free Software Foundation, Inc/sys/devices/platform/soc/<span style="color:#FF0000">5002400</span>.i2c/<span style="color:#FF0000">i2c-3</span>:</p><p>This is free software; see the source for copying conditions/sys/devices/platform/soc/<span style="color:#FF0000">5002800</span>. There is NOi2c/<span style="color:#FF0000">i2c-4</span>:</p><p>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE/sys/devices/platform/soc/5002c00.i2c/i2c-5:</p><p>/sys/devices/platform/soc/6000000.hdmi/i2c-2:</lip><lip>/sys/devices/platform/soc/7081400.i2c/i2c-1:</p>编写C语言的'''hello_world.c'''程序</pli<li><p>orangepi@orangepi:~$ '''vim hello_world.c上面的输出中'''</p></li><pol style="list-style-type: none;">#include &lt;stdio.h&gt;</pli><p>int main(voida)5002000为i2c0总线的寄存器基地址,其后面显示i2c-0就是其对应的i2c设备节点</p></li><li><p>{b) 5002400为i2c1总线的寄存器基地址,其后面显示i2c-3就是其对应的i2c设备节点</p></li><li><p>printf(&quot;Hello World!\n&quot;c);5002800为i2c2总线的寄存器基地址,其后面显示i2c-4就是其对应的i2c设备节点</p><p/li>return 0;</pol><p/ol>|}</pli></liol><!-- --><ol start="4" style="list-style-type: decimal;"><li><p>然后编译运行'''hello_world.c'''然后开始测试i2c,首先安装下i2c-tools</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''gcc sudo apt-o hello_world hello_world.cget update'''</p><p>orangepi@orangepi:~$ '''./hello_worldsudo''' '''apt-get install -y i2c-tools'''</p><p>Hello World!</p></li></ol>|}
</li>
<li><p>Debian Bookworm默认安装有Python3然后在40pin接头的i2c引脚上接一个i2c设备,这里以DS1307 RTC模块为例</p><ol style="list-style-typep>[[File: lowerzero2w-alpha;"><li>img181.png]]</p>Python具体版本如下所示</pli><li><p>orangepi@orangepi:~$ 然后使用'''python3i2cdetect -y x'''命令如果能检测到连接的i2c设备的地址,就说明i2c设备连接正确</p><p>Python 3.11.2 (main, Mar 13 2023, 12{| class="wikitable" style="background-color:18#ffffdc;width:29) [GCC 12.2.0] on linux</p>800px;" |-<p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p>| <pbig>&gt;&gt;&gt;</p><p>'''使用Ctrl+D快捷键可退出python的交互模式。注意,i2cdetect -y x命令中的x需要替换为i2c总线对应的设备节点的序号。'''</p></libig><li><p>编写Python语言的'''hello_world.py'''程序</p>|} <p>orangepi@orangepi[[File:~$ '''vim hello_worldzero2w-img182.py'''png]]</pli><p>print('Hello World!')</pol></liol start="7" style="list-style-type: decimal;"><li><p>运行然后可以运行'''hello_world.pyexamples'''的结果如下所示</p><p>orangepi@orangepi:~$ 中的'''python3 hello_worldds1307.py'''测试程序读取RTC的时间</p><p>Hello World!</p></li></ol></li><li><p>Debian Bookworm默认没有安装Java的编译工具和运行环境</p><ol {| class="wikitable" style="listbackground-style-typecolor:#ffffdc;width: lower-alpha800px;"><li><p>可以使用下面的命令安装openjdk,Debian &gt; Bookworm中最新版本为openjdk|-17| </pbig><p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-17注意,下面命令中i2c-jdkx中的x需要替换为i2c总线对应的设备节点的序号。'''</p></libig><li><p>安装完后可以查看下Java的版本</p>|}{| class="wikitable" style="width:800px;" |-| <p>orangepiroot@orangepi:~$ '''java /wiringOP--versionPython# '''</p></li><li><p>编写Java版本的'''hello_world.javacd examples'''</p><p>orangepiroot@orangepi:~$ /wiringOP-Python/examples# '''vim hello_worldpython3 ds1307.javapy --device \'''</p><p>public class hello_world</p><p>{</p><p>public static void main(String[] args)</p><p>{</p><p>System.out.println('''&quot;Hello World!/dev/i2c-x&quot;);'''</p><p>}Thu 2022-06-16 04:35:46</p><p>}</p></li><li><p>然后编译运行'''hello_world.java'''Thu 2022-06-16 04:35:47</p><p>orangepi@orangepiThu 2022-06-16 04:35:~$ '''javac hello_world.java'''48</p><p>orangepi@orangepi:~$ '''java hello_world'''^C</p><p>Hello World!exit</p></li></ol>|}
</li></ol>
<span id="ubuntupin的uart测试-focal系统"></span>=== Ubuntu Focal系统 === <ol style="list-style-type: decimal;"><li><p>Ubuntu Focal默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p><ol style="list-style-type: lower-alpha;"><li><p>gcc的版本如下所示</p><p>orangepi@orangepi:~$ '''gcc --version'''</p><p>gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0</p><p>Copyright (C) 2019 Free Software Foundation, Inc.</p><p>This is free software; see the source for copying conditions. There is NO</p><p>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p></li><li><p>编写C语言的'''hello_world.c'''程序</p><p>orangepi@orangepi:~$ '''vim hello_world.c'''</p><p>#include &lt;stdio.h&gt;</p><p>int main(void)</p><p>{</p><p>printf(&quot;Hello World!\n&quot;);</p><p>return 0;</p><p>}</p></li><li><p>然后编译运行'''hello_world.c'''</p><p>orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''</p><p>orangepi@orangepi:~$ '''./hello_world'''</p><p>Hello World!</p></li></ol></li><li><p>Ubuntu Focal默认安装有Python3</p><ol style="list-style-type: lower-alpha;"><li><p>Python3具体版本如下所示</p><p>orangepi@orangepi:~$ '''python3'''</p><p>Python 3.8.10 (default, Nov 14 2022, 12:59:47)</p><p>[GCC 9.4.0] on linux</p><p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p><p>&gt;&gt;&gt;</p><p>'''使用Ctrl+D快捷键可退出python的交互模式。'''</p></li><li><p>编写Python语言的'''hello_world.py'''程序</p><p>orangepi@orangepi:~$ '''vim hello_world.py'''</p><p>print('Hello World!')</p></li><li><p>运行'''hello_world.py'''的结果如下所示</p><p>orangepi@orangepi:~$ '''python3 hello_world.py'''</p><p>Hello World!</p></li></ol></li><li><p>Ubuntu Focal默认没有安装Java的编译工具和运行环境</p><ol style="list-style-type: lower-alpha;"><li><p>可以使用下面的命令安装openjdk-17</p><p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''</p></li><li><p>安装完后可以查看下Java的版本</p><p>orangepi@orangepi:~$ '''java --version'''</p><p>openjdk 17.0.2 2022-01-18</p><p>OpenJDK Runtime Environment (build 17.0.2+8-Ubuntu-120.04)</p><p>OpenJDK 64-Bit Server VM (build 17.0.2+8-Ubuntu-120.04, mixed mode, sharing)</p></li><li><p>编写Java版本的'''hello_world.java'''</p><p>orangepi@orangepi:~$ '''vim hello_world.java'''</p><p>public class hello_world</p><p>{</p><p>public static void main(String[] args)</p><p>{</p><p>System.out.println(&quot;Hello World!&quot;);</p><p>}</p><p>}</p></li><li><p>然后编译运行'''hello_world.java'''</p><p>orangepi@orangepi:~$ '''javac hello_world.java'''</p><p>orangepi@orangepi:~$ '''java hello_world'''</p><p>Hello World!</p></li></ol></li></ol> <span id="ubuntu-jammy系统"></span>=== Ubuntu Jammy系统 === <ol style="list-style-type: decimal;"><li><p>Ubuntu Jammy默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p><ol style="list-style-type: lower-alpha;"><li><p>gcc的版本如下所示</p><p>orangepi@orangepi:~$ '''gcc --version'''</p><p>gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) '''11.3.0'''</p><p>Copyright (C) 2021 Free Software Foundation, Inc.</p><p>This is free software; see the source for copying conditions. There is NO</p><p>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p></li><li><p>编写C语言的'''hello_world.c'''程序</p><p>orangepi@orangepi:~$ '''vim hello_world.c'''</p><p>#include &lt;stdio.h&gt;</p><p>int main(void)</p><p>{</p><p>printf(&quot;Hello World!\n&quot;);</p><p>return 0;</p><p>}</p></li><li><p>然后编译运行'''hello_world.c'''</p><p>orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''</p><p>orangepi@orangepi:~$ '''./hello_world'''</p><p>Hello World!</p></li></ol></li><li><p>Ubuntu Jammy默认安装有Python3</p><ol style="list-style-type: lower-alpha;"><li><p>Python3具体版本如下所示</p><p>orangepi@orangepi:~$ '''python3'''</p><p>Python 3.10.6 (main, May 29 2023, 11:10:38) [GCC 11.3.0] on linux</p><p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p><p>&gt;&gt;&gt;</p><p>'''使用Ctrl+D快捷键可退出python的交互模式。'''</p></li><li><p>编写Python语言的'''hello_world.py'''程序</p><p>orangepi@orangepi:~$ '''vim hello_world.py'''</p><p>print('Hello World!')</p></li><li><p>运行'''hello_world.py'''的结果如下所示</p><p>orangepi@orangepi:~$ '''python3 hello_world.py'''</p><p>Hello World!</p></li></ol></li><li><p>Ubuntu Jammy默认没有安装Java的编译工具和运行环境</p><ol style="list-style-type: lower-alpha;"><li><p>可以使用下面的命令安装openjdk-18</p><p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-18-jdk'''</p></li><li><p>安装完后可以查看下Java的版本</p><p>orangepi@orangepi:~$ '''java --version'''</p><p>openjdk 18.0.2-ea 2022-07-19</p><p>OpenJDK Runtime Environment (build 18.0.2-ea+9-Ubuntu-222.04)</p><p>OpenJDK 64-Bit Server VM (build 18.0.2-ea+9-Ubuntu-222.04, mixed mode, sharing)</p></li><li><p>编写Java版本的'''hello_world.java'''</p><p>orangepi@orangepi:~$ '''vim hello_world.java'''</p><p>public class hello_world</p><p>{</p><p>public static void main(String[] args)</p><p>{</p><p>System.out.println(&quot;Hello World!&quot;);</p><p>}</p><p>}</p></li><li><p>然后编译运行'''hello_world.java'''</p><p>orangepi@orangepi:~$ '''javac hello_world.java'''</p><p>orangepi@orangepi:~$ '''java hello_world'''</p><p>Hello World!</p></li></ol></li></ol> <span id="上传文件到开发板linux系统中的方法"></span>== 上传文件到开发板Linux系统中的方法 == <span id="在ubuntu-pc中上传文件到开发板linux系统中的方法"></span>=== 在Ubuntu PC中上传文件到开发板Linux系统中的方法 === ==== 使用scp命令上传文件的方法 ==== <ol style="list-style-type: decimal;"><li><p>使用scp命令可以在Ubuntu PC中上传文件到开发板的Linux系统中,具体命令如下所示</p><ol style="list-style-type: lower-alpha;"><li><p>'''file_path:'''需要替换为要上传文件的路径</p></li><li><p>'''orangepi:'''为开发板linux系统的用户名,也可以替换成其它的,比如root</p></li><li><p>'''192.168.xx.xx:''' 为开发板的IP地址,请根据实际情况进行修改</p></li><li><p>'''/home/orangepi:''' &gt; 开发板linux系统中的路径,也可以修改为其它的路径</p><p>test@test:~$ '''scp file_path orangepi@192.168.xx.xx:/home/orangepi/'''</p></li></ol></li><li><p>如果要上传文件夹,需要加上-r参数</p><p>test@test:~$ '''scp -r dir_path orangepi@192.168.xx.xx:/home/orangepi/'''</p></li><li><p>scp还有更多的用法,请使用下面的命令查看man手册</p></li></ol> test@test:~$ '''man scp''' ==== 使用filezilla上传文件的方法 ==== <ol style="list-style-type: decimal;"><li><p>首先在Ubuntu PC中安装filezilla</p><p>test@test:~$ '''sudo apt install -y filezilla'''</p></li><li><p>然后使用下面的命令打开filezilla</p><p>test@test:~$ '''filezilla'''</p></li><li><p>filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的</p><div class="figure"> [[File:media/image259.png]] </div></li><li><p>连接开发板的方法如下图所示</p></li></ol> <div class="figure"> [[File:media/image260.png]] </div><ol start="5" style="list-style-type: decimal;"><li><p>然后选择'''保存密码''',再点击'''确定'''</p><p>[[File:media/image261.png]]</p></li><li><p>然后选择'''总是信任该主机''',再点击'''确定'''</p></li></ol> <div class="figure"> [[File:media/image262.png]] </div><ol start="7" style="list-style-type: decimal;"><li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了</li></ol> <div class="figure"> [[File:media/image263.png]] </div><ol start="8" style="list-style-type: decimal;"><li>然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Ubuntu PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了。</li></ol> <div class="figure"> [[File:media/image264.png]] </div><ol start="9" style="list-style-type: decimal;"><li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了</p></li><li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol> <span id="在windows-pc中上传文件到开发板linux系统中的方法"></span>=== 在Windows PC中上传文件到开发板Linux系统中的方法 === <span id="使用filezilla上传文件的方法-1"></span>==== 使用filezilla上传文件的方法 =40pin的UART测试 === # 首先下载filezilla软件Windows版本的安装文件,下载链接如下所示 [https://filezilla-project.org/download.php?type=client '''https://filezilla-project.org/download.php?type=client'''] [[File:media/image265.png]] [[File:media/image266.png]] <ol start="2" style="list-style-type: decimal;"><li><p>下载的安装包如下所示,然后双击直接安装即可</p><p>'''FileZilla_Server_1.5.1_win64-setup.exe'''</p></li></ol> 安装过程中,下面的安装界面请选择'''Decline''',然后再选择'''Next&gt;''' <div class="figure"> [[File:media/image267.png]] </div><ol start="3" style="list-style-type: decimal;"><li>filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的</li></ol> <div class="figure"> [[File:media/image268.png]] </div><ol start="4" style="list-style-type: decimal;"><li>连接开发板的方法如下图所示:</li></ol> <div class="figure"> [[File:media/image269.png]] </div><ol start="5" style="list-style-type: decimal;"><li>然后选择'''保存密码''',再点击'''确定'''</li></ol> <div class="figure"> [[File:media/image270.png]]由下表可知,可用的uart为uart2、uart3、uart4和uart5。请注意uart0默认设置为调试串口,请不要把uart0当成普通串口使用
<div style="display: flex;">
::{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"
|-
| '''GPIO序号'''
| '''GPIO'''
| '''功能'''
| '''引脚'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''3.3V'''
| '''1'''
|-
| '''264'''
| '''PI8'''
| '''TWI1-SDA'''
| '''3'''
|-
| '''263'''
| '''PI7'''
| '''TWI1-SCL'''
| '''5'''
|-
| '''269'''
| '''PI13'''
| '''PWM3/UART4_TX'''
| '''7'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''GND'''
| '''9'''
|-
| '''226'''
| '''PH2'''
| '''UART5_TX'''
| '''11'''
|-
| '''227'''
| '''PH3'''
| '''UART5_RX'''
| '''13'''
|-
| '''261'''
| '''PI5'''
| '''TWI0_SCL/UART2_TX'''
| '''15'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''3.3V'''
| '''17'''
|-
| '''231'''
| '''PH7'''
| '''SPI1_MOSI'''
| '''19'''
|-
| '''232'''
| '''PH8'''
| '''SPI1_MISO'''
| '''21'''
|-
| '''230'''
| '''PH6'''
| '''SPI1_CLK'''
| '''23'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''GND'''
| '''25'''
|-
| '''266'''
| '''PI10'''
| '''TWI2-SDA/UART3_RX'''
| '''27'''
|-
| '''256'''
| '''PI0'''
| style="text-align: left;"|
| '''29'''
|-
| '''271'''
| '''PI15'''
| style="text-align: left;"|
| '''31'''
|-
| '''268'''
| '''PI12'''
| '''PWM2'''
| '''33'''
|-
| '''258'''
| '''PI2'''
| style="text-align: left;"|
| '''35'''
|-
| '''272'''
| '''PI16'''
| style="text-align: left;"|
| '''37'''
|-
| style="text-align: left;"|
| style="text-align: left;"|
| '''GND'''
| '''39'''
|}
{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"
|-
| '''引脚'''
| '''功能'''
| '''GPIO'''
| '''GPIO序号'''
|-
| '''2'''
| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''4'''
| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''6'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''8'''
| '''UART0_TX'''
| '''PH0'''
| '''224'''
|-
| '''10'''
| '''UART0_RX'''
| '''PH1'''
| '''225'''
|-
| '''12'''
| style="text-align: left;"|
| '''PI1'''
| '''257'''
|-
| '''14'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''16'''
| '''PWM4/UART4_RX'''
| '''PI14'''
| '''270'''
|-
| '''18'''
| style="text-align: left;"|
| '''PH4'''
| '''228'''
|-
| '''20'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''22'''
| '''TWI0_SDA/UART2_RX'''
| '''PI6'''
| '''262'''
|-
| '''24'''
| '''SPI1_CS0'''
| '''PH5'''
| '''229'''
|-
| '''26'''
| '''SPI1_CS1'''
| '''PH9'''
| '''233'''
|-
| '''28'''
| '''TWI2-SCL/UART3_TX'''
| '''PI9'''
| '''265'''
|-
| '''30'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''32'''
| '''PWM1'''
| '''PI11'''
| '''267'''
|-
| '''34'''
| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| '''36'''
| style="text-align: left;"|
| '''PC12'''
| '''76'''
|-
| '''38'''
| style="text-align: left;"|
| '''PI4'''
| '''260'''
|-
| '''40'''
| style="text-align: left;"|
| '''PI3'''
| '''259'''
|}
</div>
<ol start="62" style="list-style-type: decimal;"><li><p>Linux系统中uart默认都是关闭的,需要手动打开才能使用。打开步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p>|}</li><li><p>然后选择'''总是信任该主机System''',再点击</p><p>[[File:zero2w-img81.png]]</p></li><li><p>然后选择'''确定Hardware'''</p><p>[[File:zero2w-img82.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中想要打开的串口</p></olli>
<div {| class="figurewikitable">style="width:800px;text-align: center;" |-| '''40pin中的复用功能'''| '''对应的dtbo配置'''|-| '''40pin - uart2'''[[File:media/image271.png]]| '''pi-uart2'''|-| '''40pin - uart3'''| '''pi-uart3'''|-</div>| '''40pin - uart4'''<ol start="7" style="list| '''pi-styleuart4'''|-type: decimal;"><li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了</li></ol>| '''40pin - uart5'''| '''ph-uart5'''<div class="figure">|}
[[File:mediazero2w-img178.png]]</ol><ol start="5" style="list-style-type: lower-alpha;"><li><p>然后选择'''&lt;Save&gt;'''保存</p><p>[[File:zero2w-img84.png]]</image272p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:zero2w-img85.png]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:zero2w-img86.png]]</p></li></ol></li></ol><!-- --><ol start="3" style="list-style-type: decimal;"><li><p>进入linux系统后,先确认下'''/dev'''下是否存在uart5的设备节点</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''注意,linux5.4系统为/dev/ttyASx。'''</p></big>|}{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''ls /dev/ttyS*'''</p><p>/dev/ttySx</p>|}</li><li><p>然后开始测试uart接口,先使用杜邦线短接要测试的uart接口的rx和tx引脚</p></li><li><p>使用wiringOP中的'''gpio'''命令测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''注意,gpio serial /dev/ttySx命令中最后的x需要替换为对应的uart设备节点的序号。'''</p></big>|}{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''gpio serial /dev/ttySx # linux-6.1测试命令'''</p><p>orangepi@orangepi:~$ '''gpio serial /dev/ttyASx # linux-5.4测试命令'''</p>
</div>
<ol start="8" style="list-style-type: decimal;">
<li>然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Windows PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了</li></ol>
<div p>Out: 0: -&gt; 0</p><p>Out: 1: -&gt; 1</p><p>Out: 2: -&gt; 2</p><p>Out: 3: -&gt; 3^C</p>|}</li><li><p>最后可以运行examples中的'''serialTest.py'''程序来测试下串口的回环功能,如果能看到下面的打印,说明串口回环测试正常</p>{| class="figurewikitable"style="background-color:#ffffdc;width:800px;" |-| <big><p>'''注意,命令中/dev/ttySx或/dev/ttyASx中的x需要替换为对应的uart设备节点的序号。'''</p></big>|}{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p><p>root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device &quot;/dev/ttySx&quot; # linux6.1使用'''</p><p>root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device &quot;/dev/ttyASx&quot; # linux5.4使用'''</p>
[[File:media/image273.png]]
<p>Out: 0: -&gt; 0</divp><ol start="9" style="listp>Out: 1: -style-type: decimal&gt;"1</p><lip>Out: 2: -&gt; 2</p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了</p>Out: 3: -&gt; 3</lip><lip>Out: 4:^C</p><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了exit</p>|}</li></ol>
== 开关机logo使用说明 硬件看门狗测试 ==
<ol style="list-style-type: decimal;"><li><p>开关机logo默认只在桌面版的系统中才会显示</p></li><li><p>在'''/boot/orangepiEnv.txt'''中设置'''bootlogo'''变量为'''false'''可以关闭开关机logo</p><p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>verbosity=1</p><p>'''bootlogo=false'''</p></li><li><p>在'''/boot/orangepiEnv.txt'''中设置'''bootlogo'''变量为'''true'''可以开启开关机logo</p><p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>verbosity=1</p><p>'''bootlogo=true'''</p></li><li><p>开机logo图片在linux系统中的位置为</p><p>'''/usr/share/plymouth/themes/orangepi/watermark.png'''</p></li><li><p>替换开机logo图片后需要运行下命令才能生效</p><p>orangepi@orangepi:~$ '''sudo update-initramfs -u'''</p></li></ol>Orange Pi发布的linux系统中预装了watchdog_test程序,可以直接测试。
<span id="linux5.4打开开关机按键的方法"></span>== Linux5.4打开开关机按键的方法 ==运行watchdog_test程序的方法如下所示:
开发板主板上没有开关机按键,我们可以通过24pin扩展板来扩展。开关机按键在扩展板上的位置如下所示:<ol style="list-style-type: lower-alpha;"><li><p>第二个参数10表示看门狗的计数时间,如果这个时间内没有喂狗,系统会重启</p></li><li><p>我们可以通过按下键盘上的任意键(ESC除外)来喂狗,喂狗后,程序会打印一行keep alive表示喂狗成功</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo watchdog_test 10'''</p><p>open success</p><p>options is 33152,identity is sunxi-wdt</p><p>put_usr return,if 0,success:0</p><p>The old reset time is: 16</p><p>return ENOTTY,if -1,success:0</p><p>return ENOTTY,if -1,success:0</p><p>put_user return,if 0,success:0</p><p>put_usr return,if 0,success:0</p><p>keep alive</p><p>keep alive</p><p>keep alive</p>|}</li></ol>
[[File:media<span id="查看h618芯片的chipid"></image274.png]]span>
Linux6.1镜像开关机按键默认是打开的,但Linux5.4内核镜像的开关机按键默认是关闭的,需要手动打开才能正常使用。步骤如下所示:== 查看H618芯片的chipid ==
<ol style="list-style-type: decimal;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p><p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p></li><li><p>然后选择'''System'''</p><p>[[File:media/image81.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:media/image82.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中想要打开的SPI的dtbo配置</p><p>[[File:media/image275.png]]</p></li><li><p>然后选择'''&lt;Save&gt;'''保存</p><p>[[File:media/image84.png]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:media/image85.png]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:media/image86.png]]</p></li></ol>查看H618芯片chipid的命令如下所示,每个芯片的chipid都是不同的,所以可以使用chipid来区分多个开发板。
{| class="wikitable" style= 关机和重启开发板的方法 =="width:800px;" |-| orangepi@orangepi:~$ '''cat /sys/class/sunxi_info/sys_info | grep &quot;chipid&quot;'''
<ol style="list-style-typesunxi_chipid : decimal;">338020004c0048080147478824681ed1<li><p>在Linux系统运行的过程中,如果直接拔掉电源断电,可能会导致文件系统丢失某些数据,建议断电前先使用'''poweroff'''命令关闭开发板的Linux系统,然后再拔掉电源</p><p>orangepi@orangepi:~$ '''sudo poweroff'''</p><p>'''注意,关闭开发板后需要重新拔插电源才能开机。'''</p></li><li><p>除了使用poweroff命令关机外,还可以使用扩展板上的开关机按键来关机</p><p>[[File:media/image274.png]]</p><p>'''注意,Linux5.4需要手动打开开关机按键的配置才能使用。打开方法请参考[[\l|Linux5.4打开开关机按键的方法]]。'''</p></li><li><p>使用'''reboot'''命令即可重启开发板中的Linux系统</p><p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p></li></ol>}
<span id="linux-sdkorangepi-build使用说明python相关说明"></span>
= '''Linux SDK——orangepi-build使用说明''' = Python相关说明 ==
<span id="python源码编译安装的方法"></span>=== Python源码编译安装的方法 = 编译系统需求 ==
Linux SDK,即'''orangepi{| class="wikitable" style="background-build''',只支持在安装有'''Ubuntu 22.04'''的X64电脑上运行,所以下载orangepicolor:#ffffdc;width:800px;" |-build前,请首先确保自己电脑已安装的Ubuntu版本是Ubuntu 22.04。查看电脑已安装的Ubuntu版本的命令如下所示,如果Release字段显示的不是| <big>'''22.04如果使用的Ubuntu或者Debian系统软件仓库中的Python版本不符合开发的要求,想要使用最新版本的Python,可以使用下面的方法下载Python的源码包来编译安装最新版本的Python。''',说明当前使用的Ubuntu版本不符合要求,请更换系统后再进行下面的操作。
test@test:~$ '''lsb_release -a下面演示的是编译安装Python3.9的最新版本,如果要编译安装其他的版本的Python,方法也是一样的(需要下载想要安装的Python对应的源码)。'''</big>|}
No LSB modules are available.<ol style="list-style-type: decimal;"><li><p>首先安装编译Python需要的依赖包</p>Distributor ID{| class="wikitable" style="width: Ubuntu800px;" |-Description: Ubuntu 22.04 LTS|  Release<p>orangepi@orangepi: ~$ '''22.04sudo apt-get update'''</p> Codename<p>orangepi@orangepi: ~$ '''jammysudo apt-get install -y build-essential zlib1g-dev \'''</p> 如果电脑安装的是Windows系统,没有安装有Ubuntu 22.04的电脑,可以考虑使用<p>'''VirtualBox'''或者'''VMware'''来在Windows系统中安装一个Ubuntu 22.04虚拟机。但是请注意,不要在WSL虚拟机上编译orangepilibncurses5-dev libgdbm-build,因为orangepidev libnss3-build没有在WSL虚拟机中测试过,所以无法确保能正常在WSL中使用orangepidev libssl-build,另外请不要在'''开发板'''的Linux系统中使用orangepidev libsqlite3-build。Ubuntu 22.04 dev \'''amd64</p><p>'''版本的安装镜像下载地址为: [https://repo.huaweicloud.com/ubuntulibreadline-releases/21.04/ubuntu-21.04dev libffi-desktopdev curl libbz2-amd64.iso dev'''https:</p>|}</mirrorsli><li><p>然后下载最新版本的Python3.tuna.tsinghua.edu.cn9源码并解压</ubuntu-releases/22.04/ubuntu-22.04-desktop-amd64.iso''']p> 在电脑中或者虚拟机中安装完Ubuntu 22.04后,请先设置Ubuntu 22.04的软件源为清华源(或者其它你觉得速度快的国内源),不然后面安装软件的时候很容易由于网络原因而出错。替换清华源的步骤如下所示: <ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;">|-| <lip>替换清华源的方法参考这个网页的说明即可。orangepi@orangepi:~$ '''wget \'''</lip></olp> [https://mirrorswww.tunapython.tsinghuaorg/ftp/python/3.edu9.cn/help/ubuntu10/ Python-3.9.10.tgz '''https://mirrorswww.tunapython.tsinghuaorg/ftp/python/3.edu9.cn/help/ubuntu10/Python-3.9.10.tgz'''] <ol start="2" style="list-style-type: lower-alpha;"><li><p>注意Ubuntu版本需要切换到22.04。</p><p>[[Fileorangepi@orangepi:media/image276~$ '''tar xvf Python-3.9.10.png]]tgz'''</p>|}</li><li><p>需要替换的'''/etc/apt/sources.list'''文件的内容为:然后运行配置命令</p>{| class="wikitable" style="width:800px;" |-| <p>testorangepi@testorangepi:~$ '''sudo mv /etc/apt/sourcescd Python-3.list cat /etc/apt/sources9.list.bak10'''</p><p>testorangepi@testorangepi:~$ '''sudo vim ./etc/apt/sources.listconfigure --enable-optimizations'''</p><p># 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释|}</pli><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse</pli><p># deb-src https://mirrors然后编译安装Python3.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse9,编译时间大概需要半个小时左右</p><p>deb https{| class="wikitable" style="width://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy800px;" |-updates main restricted universe multiverse</p>| <p># deb-src httpsorangepi@orangepi://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy~$ '''make -updates main restricted universe multiversej4'''</p><p>deb httpsorangepi@orangepi://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse~$ '''sudo make altinstall'''</p>|}<p/li># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</pli><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse安装完后可以使用下面的命令查看下刚安装的Python的版本号</p><p># deb-src https{| class="wikitable" style="width://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy800px;" |-security main restricted universe multiverse</p><p># 预发布软件源,不建议启用</p>| <p># deb httpsorangepi@orangepi://mirrors~$ '''python3.tuna.tsinghua.edu.cn/ubuntu/ jammy9 --proposed main restricted universe multiverseversion'''</p><p># deb-src https://mirrors'''Python 3.tuna9.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse10'''</p>|}</li><li><p>替换完后需要更新下包信息,并确保没有报错。然后更新下pip</p>{| class="wikitable" style="width:800px;" |-| <p>testorangepi@testorangepi:~$ '''sudo apt-get update'''</p><usr/local/bin/li><li><p>'''另外,由于内核和Upython3.9 -m pip install --boot等源码都是存放在GitHub上的,所以编译镜像的时候请确保电脑能正常从GitHub下载代码,这点是非常重要的。upgrade pip'''</p>|}</li></ol>
<span id="获取linux-sdk的源码python更换pip源的方法"></span>== 获取linux sdk的源码 ==
=== 从github下载orangepi-build Python更换pip源的方法 ===
linux sdk指的是orangepi{| class="wikitable" style="background-build这套代码,orangepicolor:#ffffdc;width:800px;" |-build是基于armbian build编译系统修改而来的,使用orangepi-build可以编译出多个版本的linux镜像。使用下面的命令可以下载orangepi-build的代码:| <big>'''Linux系统pip默认使用的源为Python官方的源,但是国内访问Python官方的源速度是很慢的,并且经常会由于网络原因导致Python软件包安装失败。所以在使用pip安装Python库时,请记得更换下pip源。'''</big>|}
test<ol style="list-style-type: decimal;"><li><p>首先安装下'''python3-pip'''</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@testorangepi:~$ '''sudo apt-get update'''</p> test<p>orangepi@testorangepi:~$ '''sudo apt-get install -y gitpython3-pip'''</p>|}</li><li><p>Linux下永久更换pip源的方法</p><ol style="list-style-type: lower-alpha;">test<li><p>先新建'''~/.pip'''目录,然后添加'''pip.conf'''配置文件,并在其中设置pip的源为清华源</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@testorangepi:~$ '''git clone mkdir -p ~/.pip'''</p><p>orangepi@orangepi:~$ '''cat &lt;&lt;EOF &gt; ~/.pip/pip.conf'''</p><p>'''[global]'''</p><p>'''timeout = 6000'''</p><p>'''index-url = https://githubpypi.tuna.tsinghua.edu.comcn/simple'''</orangepip><p>'''trusted-xunlonghost = pypi.tuna.tsinghua.edu.cn'''</p><p>'''EOF'''</p>|}</li><li><p>然后使用pip3安装Python库速度就会很快了</p></li></ol></li><li><p>Linux下临时更换pip源的方法,其中的'''&lt;packagename&gt;'''需要替换为具体的包名</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''pip3 install &lt;packagename&gt; -build.git -b nexti \'''</p> <p>'''注意,使用H618 Soc的开发板是需要下载orangepihttps://pypi.tuna.tsinghua.edu.cn/simple -build的next分支源码的,上面的git clone命令需要指定orangepi-build源码的分支为next。trusted-host pypi.tuna.tsinghua.edu.cn'''</p>|}</li></ol>
[[File:media<span id="安装docker的方法"></image277.png]]span>
'''通过git clone命令下载orangepi-build的代码是不需要输入github账号的用户名和密码的(下载本手册中的其他代码也是一样的),如果如输入git clone命令后Ubuntu PC提示需要输入github账号的用户名和密码,一般都是git clone后面的orangepi-build仓库的地址输入错误了,请仔细检查命令拼写是否有错误,而不是以为我们这里忘了提供github账号的用户名和密码。'''== 安装Docker的方法 ==
H618系列开发板当前使用的u-boot和linux内核版本如下所示:Orange Pi提供的linux镜像已经预装了Docker,只是Docker服务默认没有打开。使用'''enable_docker.sh'''脚本可以使能docker服务,然后就可以开始使用docker命令了,并且在下次启动系统时也会自动启动docker服务。
{| class="wikitable" style="width:800px;"
|-
| '''分支'''| '''u-boot版本'''| '''linux内核版本'''|-| '''current'''| '''u-boot v2018.05'''| '''linux5.4'''|-| '''next'''| '''u-boot v2021.07'''| orangepi@orangepi:~$ '''linux6enable_docker.1sh'''
|}
可以使用下面的命令测试下docker,如果能运行'''这里所说的分支和orangepihello-build源代码的分支不是同一个东西,请不要搞混了。此分支主要是用来区分不同内核源码版本的。world'''说明docker能正常使用了。
{| class="wikitable" style="width:800px;" |-| orangepi@orangepi:~$ '''目前全志提供的linux5.4 bsp内核我们定义为current分支。最新的linux6.1 LTS内核定义为next分支。docker run hello-world'''
orangepiUnable to find image 'hello-build下载完后会包含下面的文件和文件夹:world:latest' locally
<ol style="list-style-type: lower-alpha;"><li><p>'''build.sh''': 编译启动脚本</p></li><li><p>'''external''': &gt; 包含编译镜像需要用的配置文件、特定的脚本以及部分程序的源码等</p></li><li><p>'''LICENSE'''latest: GPL 2许可证文件</p><Pulling from library/li><li><p>'''README.md''': orangepihello-build说明文件</p></li><li><p>'''scripts''': 编译linux镜像的通用脚本</p><p>test@test:~/orangepi-build$ '''ls'''</p><p>'''build.sh external LICENSE README.md scripts'''</p><p>'''如果是从github下载的orangepi-build的代码,下载完后你可能会发现orangepi-build中并没有包含u-boot和linux内核的源码,也没有编译u-boot和linux内核需要用到交叉编译工具链,这是正常的,因为这些东西都存放在其它单独的github仓库或者某些服务器上了(下文会详述其地址)。orangepi-build在脚本和配置文件中会指定u-boot、linux内核和交叉编译工具链的地址,运行orangepi-build时,当其发现本地没有这些东西,会自动去相应的地方下载的。'''</p></li></ol>world
=== 下载交叉编译工具链 ===256ab8fe8778: Pull complete
orangepi-build第一次运行的时候会自动下载交叉编译工具链放在'''toolchains'''文件夹中,每次运行orangepi-build的build.sh脚本后,都会检查'''toolchains'''中的交叉编译工具链是否都存在,如果不存在则会重新开始下载,如果存在则直接使用,不会重复下载。Digest: sha256:7f0a9f93b4aa3022c3a4c147a449ef11e0941a1fd0bf4a8e6c9408b2600777c5
<div class="figure">Status: Downloaded newer image for hello-world:latest
[[File:media/image278.png]]
'''<span style="color:#FF0000">Hello from Docker!</divspan>交叉编译工具链在中国境内的镜像网址为清华大学的开源软件镜像站:'''
[https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/ '''https<span style="color://mirrors.tuna.tsinghua.edu#FF0000">This message shows that your installation appears to be working correctly.cn/armbian-releases/_toolchain</span>''']
'''toolchains.….'''下载完后会包含多个版本的交叉编译工具链:|}
test@test:~/orangepi-build$ 使用docker命令时,如果提示'''ls toolchains/permission denied''',请将当前用户加入到docker用户组,这样不需要sudo就能运行docker命令了。
gcc{| class="wikitable" style="width:800px;" |-arm| orangepi@orangepi:~$ '''sudo usermod -11.2-2022.02-x86_64-aarch64-none-linux-gnu gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabiaG docker $USER'''|}
gcc{| class="wikitable" style="background-armcolor:#ffffdc;width:800px;" |-11.2-2022.02-x86_64-arm-none-linux-gnueabihf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi gcc-linaro-aarch64-none-elf-4.8-2013.11_linux| <big>'''注意:需要退出重新登录系统才能生效,重启系统也可以。'''</big>|}
gcc<span id="home-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linuxassistant的安装方法"></span>
gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu gcc-linaro-arm-none-eabi-4.8-2014.04_linux== Home Assistant的安装方法 ==
编译H618 Linux内核源码使用的交叉编译工具链为:{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''注意,这里只会提供在Ubuntu或者Debian系统中安装Home Assistant的方法,Home Assistant详细的使用方法请参考官方文档或者相应的书籍。'''</big>|}
<ol style="list-style-type: lower-alpha;"><li><p>linux5.4</p><p>'''gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''</p></li><li><p>linux6.1</p><p>'''gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''</p><p>编译H618 u-boot源码使用的交叉编译工具链为:</p></li></ol> <!-- --><ol style="list-style-type: lower-alpha;"><li><p>v2018.05</p><p>'''gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi'''</p></li><li><p>v2021.07</p><p>'''gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''</p></li></ol> === orangepi-build完整目录结构说明 通过docker安装 ===
<ol style="list-style-type: decimal;">
<li><p>orangepi-build仓库下载完后并不包含linux内核、u-boot的源码以及交叉编译工具链,linux内核和u-boot的源码存放在独立的git仓库中首先请安装好docker,并确保docker能正常运行。docker的安装步骤请参考[[Orange Pi Zero 2W#安装Docker的方法|'''安装Docker的方法''']]一节的说明。</p><ol style="list-style-type: lower-alpha;"/li><li><p>linux内核源码存放的git仓库如下,注意切换linux-orangepi仓库的分支为然后可以搜索下Home Assistant的docker镜像</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>Linux5.4</p><p>https://github.com/orangepi|-xunlong/linux-orangepi/tree/'''orange-pi-5.4-sun50iw9'''</p></li><li><p>Linux6.1</p>| <p>https://github.com/orangepi-xunlong/linux-@orangepi/tree/:~$ '''orange-pi-6.1-sun50iw9docker search homeassistant'''</p></li></ol>|}
</li>
<li><p>u然后使用下面的命令下载Home Assistant的docker镜像到本地,镜像大小大概有1GB多,下载时间会比较长,请耐心等待下载完成</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''docker pull homeassistant/home-assistant'''</p><p>Using default tag: latest</p><p>latest: Pulling from homeassistant/home-boot源码存放的git仓库如下,注意切换uassistant</p><p>be307f383ecc: Downloading</p><p>5fbc4c07ac88: Download complete</p><p>'''...... (省略部分输出)'''</p><p>3cc6a1510c9f: Pull complete</p><p>7a4e4d5b979f: Pull complete</p><p>Digest: sha256:81d381f5008c082a37da97d8b08dd8b358dae7ecf49e62ce3ef1eeaefc4381bb</p><p>Status: Downloaded newer image for homeassistant/home-bootassistant:latest</p><p>docker.io/homeassistant/home-orangepi仓库的分支为assistant:latest</p>|}</li><li><p>然后可以使用下面的命令查看下刚下载的Home Assistant的docker镜像<ol /p>{| class="wikitable" style="listwidth:800px;" |-| <p>orangepi@orangepi:~$ '''docker images homeassistant/home-assistant'''</p><p>REPOSITORY &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TAG &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMAGE &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CREATED &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SIZE</p><p>homeassistant/home-assistant &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; latest &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bfa0ab9e1cf5 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 months ago &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''<span style="color:#FF0000">1.17GB</span>'''</p>|}</li><li><p>此时就可以运行Home Assistant的docker容器了</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''docker run -d \'''</p>:<p>'''--name homeassistant \'''</p>:<p>'''--privileged \'''</p>:<p>'''--restart=unless-stopped \'''</p>:<p>'''-e TZ=Asia/Shanghai \'''</p>:<p>'''-v /home/orangepi/home-assistant:/config \'''</p>:<p>'''--network=host \'''</p>:<p>'''homeassistant/home-typeassistant:latest'''</p>|}</li><li><p>然后在浏览器中输入【开发板的IP地址: lower8123】就能看到Home Assistant的界面</p>{| class="wikitable" style="background-alphacolor:#ffffdc;width:800px;"|-| <big><p>'''Home Assistant容器的启动需要一段时间,如果下面的界面没有正常显示,请等待几秒钟再刷新。如果等待一分钟以上还没有正常显示下面的界面说明Home Assistant安装有问题,此时需要去检查前面的安装设置过程是否有问题了。'''</p></big>|}<p>[[File:zero2w-img183.png]]</p></li><li><p>v2018然后输入'''姓名、用户名'''和'''密码'''再点击'''创建账号'''</p><p>[[File:zero2w-img184.05png]]</p></li><li><p>然后按照界面提示根据自己的喜好设置,再点击下一步</p><p>https[[File:zero2w-img185.png]]</p></githubli><li><p>然后点击下一步</p><p>[[File:zero2w-img186.png]]</p></li><li><p>然后点击完成</p><p>[[File:zero2w-img187.compng]]</p></orangepili><li><p>Home Assistant最终显示的主界面如下图所示</p><p>[[File:zero2w-xunlongimg188.png]]</p></uli><li><p>停止Home Assistant容器的方法</p><ol style="list-bootstyle-type: lower-alpha;"><li><p>查看docker容器的命令如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi/tree/:~$ '''v2018.05docker ps -h618a'''</p>|}</li><li><p>v2021.07停止Home Assistant容器的命令如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''docker stop homeassistant'''</p>|}</li><li><p>删除Home Assistant容器的命令如下所示</olp>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''docker rm homeassistant'''</p>|}</li></ol>
</li></ol>
https://github.com/orangepi-xunlong/u-boot-orangepi/tree/'''v2021.07-sunxi'''=== 通过python安装 ===
<ol start{| class="2wikitable" style="list-stylebackground-typecolor: decimal#ffffdc;"><li><p>orangepi-build第一次运行的时候会去下载交叉编译工具链、u-boot和linux内核源码,成功编译完一次linux镜像后在orangepi-build中可以看到的文件和文件夹有</p><ol style="list-style-typewidth: lower-alpha800px;"><li><p>'''build.sh''': 编译启动脚本</p></li><li><p>'''external''': &gt; 包含编译镜像需要用的配置文件、特定功能的脚本以及部分程序的源码,编译镜像过程中缓存的rootfs压缩包也存放在external中</p></li><li><p>'''kernel''': 存放linux内核的源码</p></li><li><p>'''LICENSE''': GPL 2许可证文件</p></li><li><p>'''README.md''': orangepi|-build说明文件</p></li><li><p>'''output''': &gt; 存放编译生成的u-boot、linux等deb包、编译日志以及编译生成的镜像等文件</p></li><li><p>'''scripts''': 编译linux镜像的通用脚本</p></li><li><p>'''toolchains''': 存放交叉编译工具链</p></li><li><p>'''u-boot''': 存放u-boot的源码</p></li><li><p>'''userpatches''': 存放编译脚本需要用到的配置文件</p><p>test@test:~/orangepi-build$ '''ls'''</p>| <pbig>'''build.sh external kernel LICENSE output README.md scripts toolchains u-boot userpatches安装前请先更换下pip的源为国内源,加快Python包的安装速度,配置方法见[[Orange Pi Zero 2W#Python更换pip源的方法|Python更换pip源的方法]]一节的说明。'''</p></li></olbig></li></ol> == 编译u-boot ==|}
<ol style="list-style-type: decimal;">
<li><p>运行build.sh脚本,记得加sudo权限首先安装依赖包</p>{| class="wikitable" style="width:800px;" |-| <p>testorangepi@testorangepi:~$ '''sudo apt-get update'''</p><p>orangepi@orangepi-build:~$ '''sudo ./build.shapt-get install -y python3 python3-dev python3-venv \'''</p><p>'''python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \'''</lip><li><p>选择'''Ulibopenjp2-boot package7 libtiff5 libturbojpeg0-dev tzdata''',然后回车</p><div |}{| class="figurewikitable"> [[Filestyle="background-color:#ffffdc;width:media/image279.png]]800px;" |-</div></li>| <libig><p>接着选择开发板的型号</p><p>[[File:media/image280.png]]'''如果是debian12请使用下面的命令:'''</p></libig><li><p>然后选择uorangepi@orangepi:~$ '''sudo apt-boot的分支类型get update'''</p><ol style="listp>orangepi@orangepi:~$ '''sudo apt-styleget install -type: lowery python3 python3-alpha;"><li><p>current分支会编译linux5.4镜像需要使用的udev python3-boot v2018.05版本的代码venv \'''</p></li><li><p>next分支会编译linux6.1镜像需要使用的u'''python3-boot v2021.07版本的代码pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \'''</p><p>[[File:media/image281.png]]'''libopenjp2-7 libturbojpeg0-dev tzdata'''</p></li></ol>|}
</li>
<li><p>如果选择的next分支还会提示需要选择内存的大小,current分支不需要选择然后需要编译安装Python3.9,方法请参考[[Orange Pi Zero 2W#Python相关说明|'''Python源码编译安装的方法''']]一节</p><ol {| class="wikitable" style="listbackground-style-typecolor:#ffffdc;width: lower-alpha800px;">|-| <libig><p>如果购买的开发板为1'''Debian Bullseye默认的Python版本就是Python3.5GB内存大小的,请选择第一项9,所以无需编译安装。'''</p></li><li><p>如果购买的开发板为1GB或2GB或4GB内存大小的,请选择第二项'''Ubuntu Jammy默认的Python版本就是Python3.10,所以也无需编译安装。'''</p><p>[[File:media/image282'''Debian Bookworm默认的Python版本就是Python3.png]]11,所以也无需编译安装。'''</p></li></olbig>|}
</li>
<li><p>然后就会开始编译u-boot,编译next分支时提示的部分信息说明如下所示:然后创建Python虚拟环境</p><ol {| class="wikitable" style="listbackground-style-typecolor:#ffffdc;width: lower-alpha800px;">|-| <libig><p>u-boot源码的版本'''Debian Bookworm中是python3.11,请记得替换对应的命令。'''</p></big>|}{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Compiling u-boot [ orangepi@orangepi:~$ '''v2021.07sudo mkdir /srv/homeassistant''' ]</p></li><li><p>交叉编译工具链的版本orangepi@orangepi:~$ '''sudo chown orangepi:orangepi /srv/homeassistant'''</p><p>[ o.k. ] Compiler version [ orangepi@orangepi:~$ '''aarch64-linux-gnu-gcc 11cd /srv/homeassistant''' ]</p></li><li><p>编译生成的uorangepi@orangepi:~$ '''python3.9 -boot deb包的路径m venv .'''</p><p>[ o.k. ] Target directory [ orangepi@orangepi:~$ '''orangepi-build/output/debssource bin/u-bootactivate''' ]</p><p>(homeassistant) orangepi@orangepi:/srv/homeassistant$</p>|}</li><li><p>编译生成的u-boot deb包的包名然后安装需要的Python包</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] File name [ (homeassistant) orangepi@orangepi:/srv/homeassistant$ '''linuxpython3 -u-boot-next-orangepizero2w_x.x.x_arm64.debm pip install wheel''' ]</p>|}</li><li><p>编译使用的时间然后就可以安装Home Assistant Core</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Runtime [ (homeassistant) orangepi@orangepi:/srv/homeassistant$ '''1 minpip3 install homeassistant''' ]</p>|}</li><li><p>重复编译u-boot的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译u-boot然后输入下面的命令就可以运行Home Assistant Core</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Repeat Build Options [ (homeassistant) orangepi@orangepi:/srv/homeassistant$ '''sudo ./build.sh BOARD=orangepizero2w BRANCH=next BUILD_OPT=u-boothass''' ]</p></li></ol>|}
</li>
<li><p>查看编译生成的u-boot deb包</p><p>test@test:~/orangepi-build$ '''ls output/debs/u-boot/'''</p><p>'''linux-u-boot-next-orangepizero2w_x.x.x_arm64.deb'''</p></li><li><p>orangepi-bulid编译系统编译u-boot源码时首先会将u-boot的源码和github服务器的u-boot源码进行同步,所以如果想修改u-boot的源码,首先需要关闭源码的下载更新功能('''需要完整编译过一次u-boot后才能关闭这个功能,否则会提示找不到u-boot的源码然后在浏览器中输入【'''),否则所作的修改都会被还原,方法如下:</p><p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p><p>test@test开发板的IP地址:~/orangepi-build$ '''vim userpatches/config-default.conf8123'''】就能看到Home Assistant的界面</p><p>......</p><p>IGNORE_UPDATES{| class=&quot;'''yes'''&quot;</p><p>......</p></li><li><p>调试u-boot代码时,可以使用下面的方法来更新linux镜像中的u-boot进行测试</p><ol "wikitable" style="listbackground-style-typecolor:#ffffdc;width: lower-alpha800px;"><li><p>首先将编译好的u|-boot的deb包上传到开发板的linux系统中</p><p>test@test:~/orangepi-build$ '''cd output/debs/u-boot'''</p>| <pbig>test@test:~/orangepi_build/output/debs/u-boot$ '''scp \'''</p><p>'''linux-u-boot-next-orangepizero2w_x.x.x_arm64.deb [mailto:root@192.168.1.xxx:/root root@192.168.1.xxx:/root]'''</p></li><li><p>再安装刚才上传的新的u-boot的deb包</p><p>orangepi@orangepi:~$ '''sudo dpkg -i''' '''linux-u-boot-next-orangepizero2w_x.x.x_arm64.deb第一次运行hass命令时,会下载安装和缓存一些运行必须的库和依赖包。这个过程可能会花费几分钟的时间。注意,此时在浏览器中是无法看到Home Assistant的界面的,请等待一段时间后再刷新下。'''</p></libig><li><p>然后运行 nand-sata-install脚本</p><p>orangepi@orangepi:~$ '''sudo nand-sata-install'''</p></li><li><p>然后选择'''5 Install/Update the bootloader on SD/eMMC'''</p>|}<p>[[File:media/image283.png]]</p></li><li><p>按下回车键后首先会弹出一个Warning</p><p>[[File:media/image284.png]]</p></li><li><p>再按下回车键就会开始更新uzero2w-boot,更新完后会显示下面的信息</p><p>[[File:media/image285img189.png]]</p></li><li><p>然后就可以重启开发板来测试u-boot的修改是否生效了</p></li></ol></li></ol>
<span id== 编译linux内核 =="opencv的安装方法"></span>
<ol style="list-style-type: decimal;"><li><p>运行'''build.sh'''脚本,记得加sudo权限</p><p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p></li><li><p>选择'''Kernel package''',然后回车</p><div class="figure">OpenCV的安装方法 ==
[[File:media<span id="使用apt来安装opencv"></image286.png]]span>=== 使用apt来安装OpenCV ===
</div></liol style="list-style-type: decimal;"><li><p>然后会提示是否需要显示内核配置界面,如果不需要修改内核配置,则选择第一个即可,如果需要修改内核配置,则选择第二个安装命令如下所示</p><p>[[File{| class="wikitable" style="width:media/image287.png]]</p></li>800px;" |-| <li><p>接着选择开发板的型号orangepi@orangepi:~$ '''sudo apt-get update'''</p><p>[[Fileorangepi@orangepi:media/image280.png]]~$ '''sudo apt-get install -y libopencv-dev python3-opencv'''</p>|}</li><li><p>然后选择内核源码的分支类型然后使用下面的命令打印OpenCV的版本号输出正常,说明OpenCV安装成功</p>
<ol style="list-style-type: lower-alpha;">
<li><p>current分支会编译linux5Ubuntu22.4内核源码04中OpenCV的版本如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''python3 -c &quot;import cv2; print(cv2.__version__)&quot;'''</p><p>'''4.5.4'''</p>|}</li><li><p>next分支会编译linux6Ubuntu20.1内核源码04中OpenCV的版本如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>[[Fileorangepi@orangepi:media~$ '''python3 -c &quot;import cv2; print(cv2.__version__)&quot;'''</image281p><p>'''4.png]]2.0'''</p>|}</li><li><p>Debian11中OpenCV的版本如下所示:</olp>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''python3 -c &quot;import cv2; print(cv2.__version__)&quot;'''</p><p>'''4.5.1'''</p>|}
</li>
<li><p>如果第3)步选择了需要显示内核配置菜单(第二个选项),则会弹出通过Debian12中OpenCV的版本如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''make menuconfigpython3 -c &quot;import cv2; print(cv2.__version__)&quot;'''打开的内核配置的界面,此时可以直接修改内核的配置,修改完后再保存退出即可,退出后会开始编译内核源码。</p><p>[[File:media/image288'''4.6.png]]0'''</p>|}</li></ol></li></ol>
<!-- --><ol style="list-style-type: lower-alpha;"><li><p>如果不需要修改内核的配置选项,在运行build.sh脚本时,传入'''KERNEL_CONFIGURE=no'''就可临时屏蔽弹出内核的配置界面了</p><p>test@test:~/orangepi-build$ '''sudo ./build.sh KERNEL_CONFIGURE设置中文环境以及安装中文输入法 =no'''</p></li><li><p>也可以设置orangepi-build/userpatches/config-default.conf配置文件中的'''KERNEL_CONFIGURE=no''',这样可以永久禁用这个功能</p></li><li><p>编译内核的时候如果提示下面的错误,这是由于Ubuntu &gt; PC的终端界面太小,导致make menuconfig的界面无法显示,请把Ubuntu &gt; PC的终端调到最大,然后重新运行build.sh脚本</p><p>[[File:media/image289.png]]</p></li></ol>
<!-- --><ol start="7" style{| class="list-style-type: decimal;"><li><p>编译next分支内核源码时提示的部分信息说明如下:</p><ol style="list-style-type: lower-alpha;wikitable"><li><p>linux内核源码的版本</p><p>[ o.k. ] Compiling current kernel [ '''6.1.31''' ]</p></li><li><p>使用的交叉编译工具链的版本</p><p>[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 11''' ]</p></li><li><p>内核默认使用的配置文件以及它存放的路径如下所示</p><p>[ o.k. ] Using kernel config file [ '''orangepi-build/external/config/kernel/linux-6.1-sun50iw9-next.config''' ]</p></li><li><p>编译生成的内核相关的deb包的路径</p><p>[ o.k. ] Target directory [ '''output/debs/''' ]</p></li><li><p>编译生成的内核镜像deb包的包名</p><p>[ o.k. ] File name [ '''linux-image-next-sun50iw9_x.x.x_arm64.deb''' ]</p></li><li><p>编译使用的时间</p><p>[ o.k. ] Runtime [ '''10 min''' ]</p></li><li><p>最后会显示重复编译上一次选择的内核的编译命令,使用下面的命令无需通过图形界面选择,可以直接开始编译内核源码</p><p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepizero2w BRANCH=next BUILD_OPT=kernel KERNEL_CONFIGURE=no''' ]</p></li></ol></li><li><p>查看编译生成的内核相关的deb包</p><ol style="list-style-type: lower-alpha;"><li><p>'''linux-dtb-next-sun50iw9_x.x.x_arm64.deb'''包含有内核使用的dtb文件</p></li><li><p>'''linux-headers-next-sun50iw9_x.x.x_arm64.deb'''包含内核头文件</p></li><li><p>'''linux-imagebackground-next-sun50iw9_x.x.x_arm64.deb'''包含内核镜像和内核模块</p><p>test@testcolor:~/orangepi-build$ '''ls output/debs/linux-*'''</p><p>output/debs/linux-dtb-next-sun50iw9_x.x.x_arm64.deb</p><p>output/debs/linux-headers-next-sun50iw9_x.x.x_arm64.deb</p><p>output/debs/linux-image-next-sun50iw9_x.x.x_arm64.deb</p></li></ol></li><li><p>orangepi-bulid编译系统编译linux内核源码时首先会将linux内核源码和github服务器的linux内核源码进行同步,所以如果想修改linux内核的源码,首先需要关闭源码的更新功能('''需要完整编译过一次linux内核源码后才能关闭这个功能,否则会提示找不到linux内核的源码'''),否则所作的修改都会被还原,方法如下:</p><p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p><p>test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</p><p>IGNORE_UPDATES=&quot;'''yes'''&quot#ffffdc;</p></li><li><p>如果对内核做了修改,可以使用下面的方法来更新开发板linux系统的内核和内核模块</p><ol style="list-style-typewidth: lower-alpha800px;"><li><p>将编译好的linux内核的deb包上传到开发板的linux系统中</p><p>test@test:~/orangepi|-build$ '''cd output/debs'''</p><p>test@test:~/orangepi-build/output/debs$ '''scp \'''</p>| <pbig>'''linux-image-next-sun50iw9_x.x.x_arm64.deb root@192.168.1.xxx:/root注意,安装中文输入法前请确保开发板使用的Linux系统为桌面版系统。'''</p></li><li><p>再安装刚才上传的新的linux内核的deb包</pbig><p>orangepi@orangepi:~$ '''sudo dpkg -i linux-image-next-sun50iw9_x.x.x_arm64.deb'''</p></li><li><p>然后重启开发板,再查看内核相关的修改是否已生效</p><p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p></li></ol></li></ol>|}
<span id="debian-系统的安装方法"></span>=== Debian 系统的安装方法 = 编译rootfs ==
<ol style="list-style-type: decimal;">
<li><p>运行build.sh脚本,记得加sudo权限</p><p>test@test:~/orangepi-build$ 首先设置默认'''sudo ./build.shlocale'''</p></li><li><p>选择'''Rootfs and all deb packages''',然后回车</p></li></ol> <div class="figure"> [[File:media/image290.png]] </div><ol start="3" style="list-style-type: decimal;"><li><p>接着选择开发板的型号</p><p>[[File:media/image280.png]]</p></li><li><p>然后选择内核源码的分支类型,不同版本的内核源码维护的rootfs类型有区别为中文</p>
<ol style="list-style-type: lower-alpha;">
<li><p>current分支可以看到debian11、ubuntu20.04、ubuntu22.04三个选项输入下面的命令可以开始配置'''locale'''</p></li><li><p>next分支可以看到debian11、debian12、ubuntu22.04三个选项</p>{| class="wikitable" style="width:800px;" |-| <p>[[Fileorangepi@orangepi:media/image281.png]]~$ '''sudo dpkg-reconfigure locales'''</p></li></ol>|}
</li>
<li><p>然后选择rootfs的类型然后在弹出的界面中选择'''zh_CN.UTF-8 &gt; UTF-8'''(通过键盘上的上下方向按键来上下移动,通过空格键来选择,最后通过Tab键可以将光标移动到'''&lt;OK&gt;''',然后回车即可)</p><p>[[File:mediazero2w-img190.png]]</p></image291li><li><p>然后设置默认'''locale'''为'''zh_CN.UTF-8'''</p><p>[[File:zero2w-img191.png]]</p></li><li><p>然后选择镜像的类型退出界面后就会开始'''locale'''的设置,命令行显示的输出如下所示</p><ol {| class="wikitable" style="listwidth:800px;" |-| <p>orangepi@orangepi:~$ '''sudo dpkg-reconfigure locales'''</p><p>Generating locales (this might take a while)...</p><p>en_US.UTF-8... done</p><p>zh_CN.UTF-8... done</p><p>Generation complete.</p>|}</li></ol></li><li><p>然后打开'''Input Method'''</p><p>[[File:zero2w-styleimg192.png]]</p></li><li><p>然后选择'''OK'''</p><p>[[File:zero2w-typeimg193.png]]</p></li><li><p>然后选择'''Yes'''</p><p>[[File: lowerzero2w-alpha;"img194.png]]</p></li><li><p>然后选择'''Image with console interface &gt; (server)fcitx'''表示服务器版的镜像,体积比较小</p><p>[[File:zero2w-img195.png]]</p></li><li><p>然后选择'''Image with desktop environmentOK'''表示带桌面的镜像,体积比较大</p><div classp>[[File:zero2w-img196.png]]</p></li><li><p>'''<span style="figurecolor:#FF0000">然后重启Linux系统才能使配置生效</span>'''</p></li><li><p>然后打开'''Fcitx configuration'''</p><p>[[File:mediazero2w-img197.png]]</image292p></li><li><p>然后点击下图所示位置的'''+'''号</p><p>[[File:zero2w-img198.png]]</p></li><li><p>然后搜索'''Google Pinyin'''再点击'''OK'''</p><p>[[File:zero2w-img199.png]]</p></li><li><p>然后将'''Google Pinyin'''放到最前面</p><p>[[File:zero2w-img200.png]]</p><p>[[File:zero2w-img201.png]]</p></li><li><p>然后打开'''Geany'''这个编辑器测试下中文输入法</p><p>[[File:zero2w-img202.png]]</divp></li><li><p>中文输入法测试如下所示</olp><p>[[File:zero2w-img203.png]]</p></li><li><p>通过'''Ctrl+Space'''快捷键可以切换中英文输入法</p></li><li><p>如果需要整个系统都显示为中文,可以将'''/etc/default/locale'''中的变量都设置为'''zh_CN.UTF-8'''</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo vim /etc/default/locale'''</p><p># File generated by update-locale</p><p>LC_MESSAGES='''<span style="color:#FF0000">zh_CN.UTF-8</span>'''</p><p>LANG='''<span style="color:#FF0000">zh_CN.UTF-8</span>'''</p><p>LANGUAGE='''<span style="color:#FF0000">zh_CN.UTF-8</span>'''</p>|}
</li>
<li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多(然后'''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了<span style="color:#FF0000">重启系统</span>'''就能看到系统显示为中文了</p><div class="figure"p>[[File:zero2w-img204.png]]</p></li></ol>
[[File:media<span id="ubuntu-20.04系统的安装方法"></image293.png]]span>
</div></li><li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护XFCE,所以请选择XFCE类型的桌面</p><p>[[File:media/image294.png]]</p><p>[[File:media/image295.png]]</p><p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p><p>[[File:media/image296.png]]</p></li><li><p>然后就会开始编译rootfs,编译时提示的部分信息说明如下</p><ol style="list-style-type: lower-alpha;"><li><p>rootfs的类型</p><p>[ o.k. ] local not found [ Creating new rootfs cache for '''bullseye''' ]</p></li><li><p>编译生成的rootfs压缩包的存放路径</p><p>[ o.k. ] Target directory [ '''orangepi-build/external/cache/rootfs''' ]</p></li><li><p>编译生成的rootfs压缩包的名字</p><p>[ o.k. ] File name [ '''bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4''' ]</p></li></ol></li><li><p>查看编译生成的rootfs压缩包</p><ol style="list-style-type: lower-alpha;"><li><p>'''bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4'''是rootfs的压缩包,名字各字段的含义为</p><ol style="list-style-type: lower-alpha;"><li><p>'''bullseye'''表示rootfs的linux发行版的类型</p></li><li><p>'''xfce'''表示rootfs为桌面版的类型,如果为'''cli'''则表示服务器版类型</p></li><li><p>'''arm64'''表示rootfs的架构类型</p></li><li><p>'''25250ec7002de9e81a41de169f1f89721'''是由rootfs安装的所有软件包的包名生成的MD5哈希值,只要没有修改rootfs安装的软件包的列表,那么这个值就不会变,编译脚本会通过这个MD5哈希值来判断是否需要重新编译rootfs</p></li></ol></li><li><p>'''bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list'''列出了rootfs安装的所有软件包的包名</p><p>test@test:~/orangepi-build$ '''ls external/cache/rootfs/'''</p><p>bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4</p><p>bullseye-xfce-arm64Ubuntu 20.5250ec7002de9e81a41de169f1f89721.tar.lz4.current</p><p>bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list</p></li></ol></li><li><p>如果需要的rootfs在'''external/cache/rootfs'''下已经存在,那么再次编译rootfs就会直接跳过编译过程,不会重新开始编译,编译镜像的时候也会去'''external/cache/rootfs'''下查找是否已经有缓存可用的rootfs,如果有就直接使用,这样可以节省大量的下载编译时间</p></li></ol> =04系统的安装方法 = 编译linux镜像 ==
<ol style="list-style-type: decimal;">
<li><p>运行首先打开'''buildLanguage Support'''</p><p>[[File:zero2w-img205.shpng]]</p></li><li><p>然后找到'''脚本,记得加sudo权限汉语(中国)'''选项</p><p>test@test[[File:~zero2w-img206.png]]</p></li><li><p>然后请使用鼠标左键选中'''汉语(中国)'''并按住不动,然后往上将其拖到最开始的位置,拖完后的显示如下图所示:</orangepip><p>[[File:zero2w-build$ img207.png]]</p></li>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''注意,这一步不是很好拖动的,请耐心多试几次。'sudo ''</big>|}</ol><ol start="4" style="list-style-type: decimal;"><li><p>然后选择'''Apply System-Wide'''将中文设置应用到整个系统</p><p>[[File:zero2w-img208.png]]</p></buildli><li><p>然后设置'''Keyboard input method system'''为'''fcitx'''</p><p>[[File:zero2w-img209.shpng]]</p></li><li><p>'''<span style="color:#FF0000">然后重启Linux系统使配置生效</span>'''</p></li><li><p>选择重新进入系统后,在下面的界面请选择'''Full OS image for flashing不要再次询问我''',然后回车,然后请根据自己的喜好决定标准文件夹是否也要更新为中文</p><p>[[File:zero2w-img210.png]]</p></li><li><p>然后可以看到桌面都显示为中文了</p><p>[[File:zero2w-img211.png]]</p></li><li><p>然后我们可以打开'''Geany'''测试下中文输入法,打开方式如下图所示</olp><p>[[File:zero2w-img212.png]]</p></li><div class="figure"li><p>打开'''Geany'''后,默认还是英文输入法,我们可以通过'''Ctrl+Space'''快捷键来切换成中文输入法,然后就能输入中文了</p><p>[[File:zero2w-img213.png]]</p></li></ol>
[[File:media<span id="ubuntu-22.04系统的安装方法"></image297.png]]span>
</div><ol start="3" style="list-style-type: decimal;"><li><p>然后选择开发板的型号</p><p>[[File:media/image280.png]]</p></li><li><p>然后选择内核源码的分支类型,不同版本的内核源码维护的rootfs类型有区别</p><ol style="list-style-type: lower-alpha;"><li><p>current分支可以看到debian11、ubuntu20.04、ubuntu22.04三个选项</p></li><li><p>next分支可以看到debian11、debian12、ubuntu22Ubuntu 22.04三个选项</p><p>[[File:media/image281.png]]</p></li></ol></li><li><p>如果选择的next分支还会提示需要选择内存的大小,current分支不需要选择</p><ol style04系统的安装方法 ="list-style-type: lower-alpha;"><li><p>如果购买的开发板为1.5GB内存大小的,请选择第一项</p></li><li><p>如果购买的开发板为1GB或2GB或4GB内存大小的,请选择第二项</p><p>[[File:media/image282.png]]</p></li></ol></li><li><p>然后选择rootfs的类型</p><p>[[File:media/image291.png]]</p></li><li><p>然后选择镜像的类型</p><ol style="list-style-type: lower-alpha;"><li><p>'''Image with console interface &gt; (server)'''表示服务器版的镜像,体积比较小</p></li><li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p><div class="figure">
<ol style="list-style-type: decimal;"><li><p>首先打开'''Language Support'''</p><p>[[File:zero2w-img205.png]]</p></li><li><p>然后找到'''汉语(中国)'''选项</p><p>[[File:zero2w-img214.png]]</p></li><li><p>然后请使用鼠标左键选中'''汉语(中国)'''并按住不动,然后往上将其拖到最开始的位置,拖完后的显示如下图所示:</p><p>[[File:zero2w-img215.png]]</p></li>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''注意,这一步不是很好拖动的,请耐心多试几次。'''</big>|}</ol><ol start="4" style="list-style-type: decimal;"><li><p>然后选择'''Apply System-Wide'''将中文设置应用到整个系统</p><p>[[File:mediazero2w-img216.png]]</p></li><li><p>'''<span style="color:#FF0000">然后重启Linux系统使配置生效</image292span>'''</p></li><li><p>重新进入系统后,在下面的界面请选择'''不要再次询问我''',然后请根据自己的喜好决定标准文件夹是否也要更新为中文</p><p>[[File:zero2w-img210.png]]</p></li><li><p>然后可以看到桌面都显示为中文了</p><p>[[File:zero2w-img211.png]]</p></li><li><p>然后打开Fcitx5配置程序</p><p>[[File:zero2w-img217.png]]</p></li><li><p>然后选择使用拼音输入法</p><p>[[File:zero2w-img218.png]]</p></li><li><p>选择后的界面如下所示,再点击确定即可</p><p>[[File:zero2w-img219.png]]</p></li><li><p>然后我们可以打开'''Geany'''测试下中文输入法,打开方式如下图所示</p><p>[[File:zero2w-img212.png]]</p></li><li><p>打开'''Geany'''后,默认还是英文输入法,我们可以通过'''Ctrl+Space'''快捷键来切换成中文输入法,然后就能输入中文了</p><p>[[File:zero2w-img220.png]]</p></li></ol>
</div></li></ol></li><lispan id="远程登录linux系统桌面的方法"><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p><div class="figure"span>
[[File:media/image293.png]]== 远程登录Linux系统桌面的方法 ==
</div></li><li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护XFCE,所以请选择XFCE类型的桌面</p><p>[[File:media/image294.png]]</p><p>[[File:media/image295.png]]</p><p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p><p>[[File:media/image296.png]]</p></li><li><p>然后就会开始编译linux镜像,编译的大致流程如下</p><ol stylespan id="list-style-type: lower-alpha;使用nomachine远程登录"><li><p>初始化Ubuntu PC的编译环境,安装编译过程需要的软件包</p></lispan><li><p>下载u-boot和linux内核的源码(如果已经缓存,则只更新代码)</p></li><li><p>编译u-boot源码,生成u-boot的deb包</p></li><li><p>编译linux源码,生成linux相关的deb包</p></li><li><p>制作linux firmware的deb包</p></li><li><p>制作orangepi-config工具的deb包</p></li><li><p>制作板级支持的deb包</p></li><li><p>如果是编译desktop版镜像,还会制作desktop相关的deb包</p></li><li><p>检查rootfs是否已经缓存,如果没有缓存,则重新制作rootfs,如果已经缓存,则直接解压使用</p></li><li><p>安装前面生成的deb包到rootfs中</p></li><li><p>对不同的开发板和不同类型镜像做一些特定的设置,如预装额外的软件包,修改系统配置等</p></li><li><p>然后制作镜像文件,并格式化分区,默认类型为ext4</p></li><li><p>再将配置好的rootfs拷贝到镜像的分区中</p></li><li><p>然后更新initramfs</p></li><li><p>最后将u-boot的bin文件通过dd命令写入到镜像中</p></li></ol></li><li><p>编译完镜像后会提示下面的信息</p><ol style="list-style-type: lower-alpha;"><li><p>编译生成的镜像的存放路径</p><p>[ o.k. ] Done building [ '''output/images/orangepizero2w_x.x.x_debian_bullseye_linux6.1.xx_xfce_desktop/orangepizero2w_x.x.x_debian_bullseye_linux6.1.xx_xfce_desktop.img''' ]</p></li><li><p>编译使用的时间</p></li></ol></li></ol>== 使用NoMachine远程登录 ===
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''[ o.k. ] Runtime [ 19 min ]请确保开发板安装的Ubuntu或者Debian系统为桌面版本的系统。另外NoMachine也提供了详细的使用文档,强烈建议通读此文档来熟悉NoMachine的使用,文档链接如下所示:'''
<ol start="3" style="list-style-type: lower-alpha;"><li><p>重复编译镜像的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译镜像</p><p>[ o.k. ] Repeat Build Options [ '''sudo https://knowledgebase./buildnomachine.sh BOARD=orangepizero2w BRANCH=next BUILD_OPT=image RELEASE=bullseye BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=yes''' ]</p><com/li></ol> <span id="orange-pi-os-arch系统的使用说明"></span> = '''Orange Pi OS Arch系统的使用说明DT10R00166''' = <span id="orange-pi-os-arch系统功能适配情况"></spanbig>== Orange Pi OS Arch系统功能适配情况 ==|}{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big>'''主板功能NoMachine支持Windows、Mac、Linux、iOS和安卓平台,所以我们可以在多种设备上通过NoMachine来远程登录控制Orange Pi开发板。下面演示下在Windows中通过NoMachine来远程登录Orange Pi开发板的Linux系统桌面。其他平台的安装方法请参考下NoMachine的官方文档。'''</big>| '''OPi OS Arch'''}{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big>'''HDMI视频操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。'''</big>| } <ol style="list-style-type: decimal;"><li><p>首先下载NoMachine软件Linux '''<span style="color:#FF0000">arm64</span>'''deb版本的安装包,然后安装到开发板的Linux系统中</p><ol style="list-style-type: lower-alpha;"><li>由于H618是ARMv8架构的SOC,我们使用的系统为Ubuntu或者Debian,所以这里需要下载''OK'NoMachine &gt; for ARM ARMv8 DEB'''安装包,下载链接如下所示:</li>{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big>'''HDMI音频注意,这个下载链接可能会变,请认准Armv8/Arm64版本的deb包。'''</big>| '''OK'''}{| class="wikitable" style="width:800px;"
|-
| [https://www.nomachine.com/download/download&id=112&s=ARM '''https://downloads.nomachine.com/download/?id=118&amp;distro=ARM''']|} [[File:zero2w-img221.png]]</ol><ol start="2" style="list-style-type: lower-alpha;"><li><p>另外在'''官方工具'''中也可以下载到'''NoMachine'''的安装包</p><p>[[File:zero2w-img222.png]]</p><p>先进入'Type''远程登录软件-NoMachine'''文件夹</p><p>[[File:zero2w-img223.png]]</p><p>然后下载arm64版本的deb安装包</p><p>[[File:zero2w-C USB2img224.png]]</p></li><li><p>然后将下载的'''nomachine_x.0 x 2.x_x_arm64.deb'''上传到开发板的Linux系统中</p></li>| <li><p>然后使用下面的命令在开发板的Linux系统中安装'''OKNoMachine'''</p>{| class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''TF卡启动sudo dpkg -i nomachine_x.x.x_x_arm64_arm64.deb'''</p>| '''OK'''}</li></ol></li></ol><ol start="2" style="list-style-type: decimal;"><li>然后下载NoMachine软件Windows版本的安装包,下载地址如下所示</li>{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big>'''WIFI注意,这个下载链接可能会变。'''</big>| '''OK'''}{| class="wikitable" style="width:800px;"
|-
| '''蓝牙https://downloads.nomachine.com/download/?id=9'''| } [[File:zero2w-img225.png]]</ol><ol start="3" style="list-style-type: decimal;"><li><p>然后在Windows中安装NoMachine,'''安装完后请重启下电脑'''</p></li><li><p>然后在Window中打开'''NoMachine'''</p><p>[[File:zero2w-img226.png]]</p></li><li><p>NoMachine启动后会自动扫描局域网内其他安装有NoMachine的设备,进入NoMachine的主界面后就可以看到开发板已经在可连接的设备列表里了,然后点击下图红色方框所示的位置即可开始登录开发板的Linux系统桌面</p><p>[[File:zero2w-img227.png]]</p></li><li><p>然后点击'''OK'''</p><p>[[File:zero2w-img228.png]]</p></li><li><p>然后在下图对应的位置输入开发板Linux系统的用户名和密码,再点击'''OK'''开始登陆</p><p>[[File:zero2w-img229.png]]</p></li><li><p>然后在接下来的界面中都点击OK</p></li><li><p>最后就能看到开发板Linux系统的桌面了</p><p>[[File:zero2w-img230.png]]</p></li></ol> <span id="使用vnc远程登录"></span> === 使用VNC远程登录 === {| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big>'''操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。''' 'LED灯''<span style="color:#FF0000">Ubuntu20.04测试VNC很多问题,请不要使用这种方法。</span>'''</big>| } <ol style="list-style-type: decimal;"><li><p>首先运行'''set_vnc.sh'''脚本设置下vnc,'OK''<span style="color:#FF0000">记得加sudo权限</span>'''</p>{| class="wikitable" style="width:800px;"
|-
| '''40pin GPIO'''| '''OK'''|-| '''40pin I2C'''| '''OK'''|-| '''40pin SPI'''| '''OK'''|-| '''40pin UART'''| '''OK'''|-| '''40pin PWM'''| '''OK'''|-| '''温度传感器'''| '''OK'''|-| '''硬件看门狗'''| '''OK'''|-| '''Mali GPU'''| '''NO'''|-| '''视频编解码'''| <p>orangepi@orangepi:~$ '''NOsudo set_vnc.sh'''</p>|}<p>You will require a password to access your desktops.</p>
{| class="wikitable"
|-
| '''24pin扩展板功能'''
| '''OPi OS Arch'''
|-
| '''百兆网口'''
| '''OK'''
|-
| '''百兆网口灯'''
| '''OK'''
|-
| '''USB2.0 HOST x 2'''
| '''OK'''
|-
| '''红外接收'''
| '''OK'''
|-
| '''耳机音频播放'''
| '''OK'''
|-
| '''开关机按键'''
| '''OK'''
|-
| '''LRADC自定义按键 x 2'''
| '''OK'''
|-
| '''TV-OUT'''
| '''NO'''
|}
<p>Password: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''<span idstyle="orange-pi-os-arch系统用户向导使用说明color:#FF0000">#在这里设置vnc的密码,8位字符</span>'''</p><p>Verify: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''<span style="color:#FF0000">#在这里设置vnc的密码,8位字符</span>'''</p><p>Would you like to enter a view-only password (y/n)? '''<span style= Orange Pi OS Arch系统用户向导使用说明 =="color:#FF0000">n</span>'''</p><p>xauth: file /root/.Xauthority does not exist</p>
首先请注意,OPi OS Arch系统是没有设置默认的orangepi用户和密码的,所以烧录完系统启动后是无法直接通过串口和ssh远程登录的(root用户也不行)。这一点和Ubuntu、Debian系统是有区别的。
OPi OS Arch系统第一次启动时需要接上HDMI显示器,然后通过用户向导来初始化系统设置(其中包括新建用户名和设置密码)。用户向导的设置步骤如下所示:<p>New 'X' desktop is orangepi:1</p>
<ol style="list-style-type: lower-alpha;">
<li><p>烧录完系统第一次启动进入桌面后会看到下图所示的用户向导程序</p>
<div class="figure">
[[File<p>Creating default startup script /root/.vnc/xstartup</p><p>Starting applications specified in /root/.vnc/xstartup</p><p>Log file is /root/.vnc/orangepi:media1.log</image298.png]]p>
</div></li>
<li><p>首先需要选择想要语言</p>
<div class="figure">
[[File:media<p>Killing Xtightvnc process ID 3047</image299.png]]p>
</div></li>
<li><p>在选择完语言后,用户向导会立即切换为对应的语言界面,如中文显示如下所示</p>
<div class="figure">
[[File<p>New 'X' desktop is orangepi:media1</image300.png]]p>
</div></li>
<li><p>然后选择区域</p>
<div class="figure">
[[File<p>Starting applications specified in /root/.vnc/xstartup</p><p>Log file is /root/.vnc/orangepi:media1.log</p>|}</image301.png]]li><li><p>使用MobaXterm软件连接开发板linux系统桌面的步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li>首先点击Session,然后选择VNC,再填写开发板的IP地址和端口,最后点击OK确认</li>
[[File:zero2w-img231.png]]</divol><ol start="2" style="list-style-type: lower-alpha;"><li><p>然后输入前面设置的VNC的密码</p><p>[[File:zero2w-img232.png]]</p></li><li><p>然后选择键盘型号登录成功后的界面显示如下图所示,然后就可以远程操作开发板linux系统的桌面了</p><div class="figure"/li>
[[File:media/image302zero2w-img233.png]]</ol></li></ol><span id="qt的安装方法"></span>
</div></li><li><p>然后新建用户名和设置密码</p><div class="figure">= QT的安装方法 ==
[[File:media/image303.png]] </div></li><li><p>然后确保选择没问题后,再点击'''安装'''按钮</p><div classol style="figurelist-style-type: decimal;"> [[File:media/image304.png]] </div></li><li><p>然后等待安装完成使用下面的脚本可以安装QT5和QT Creator</p><div {| class="figurewikitable" style="> [[Filewidth:media/image305.png]]800px;" |-</div></li>| <li><p>安装完成需要点击orangepi@orangepi:~$ '''完成install_qt.sh'''按钮重启系统</p><div class="figure"> [[File:media/image306.png]]|}</div></li><li><p>重启后会自动启动Orange Pi Hello程序,此时需要去掉右下角'''开机时启动'''的勾选状态,不然每次启动都需要手动关闭Orange Pi Hello程序安装完后会自动打印QT的版本号</p><div class="figure"> [[File:media/image307.png]] </div><p>此时就可以使用刚才新建的用户名和密码通过串口或者ssh登录OPi OS系统了。</p></li></ol> <span id="设置dt-overlays的方法"></span>== 设置DT overlays的方法 == 开发板40pin中的I2C/SPI/UART/PWM等复用功能默认在内核的dts中都是关闭的,需要手动打开对应的DT overlays才能使用。 在OPi OS Arch系统中打开DT overlays的方法如下所示: <ol style="list-style-type: decimallower-alpha;"><li><p>首先打开Ubuntu20.04自带的qt版本为'''/boot/extlinux/extlinux5.12.conf8'''配置文件</p>{| class="wikitable" style="width:800px;" |-| <p>[orangepi@orangepi-pc :~]$ '''sudo vim /boot/extlinux/extlinuxinstall_qt.confsh'''</p></li><li><p>然后在'''/boot/extlinux/extlinux.conf'''中通过添加'''FDTOVERLAYS /dtbs/allwinner/overlay/xxx.dtbo'''来打开对应的配置....</p></lip>QMake version 3.1</olp'''注意FDTOVERLAYS /dtbs/allwinner/overlay/xxx.dtbo中的xxx.dtbo需要替换为具体的dtbo配置,请不要照抄。''' [orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf''' LABEL Orange Pi KERNEL /Image FDT /dtbs/allwinner/sun50i-h616-orangepi-zero2w.dtb '''FDTOVERLAYS /dtbs/allwinner/overlay/xxx.dtbo<p>Using Qt version ''' #需要添加的配置 <ol start="3" span style="list-style-typecolor: decimal;#FF0000"><li><p>xxx5.12.dtbo在OPi OS Arch镜像中的存放路径如下所示,请注意,此路径下面不是所有的dtbo都可以使用的。8</p><pspan>'''in /bootusr/dtbslib/allwinner/overlay/'''aarch64-linux-gnu</p>|}</li><li><p>开发板可以使用的DT overlays配置如下所示Ubuntu22.04自带的QT版本为'''5.15.3'''</p></li></ol> {| class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''install_qt.sh'''</p><p>......</p><p>QMake version 3.1</p><p>Using Qt version '''开发板上的功能<span style="color:#FF0000">5.15.3</span>'''in /usr/lib/aarch64-linux-gnu</p>| }</li><li><p>Debian11自带的QT版本为'''对应的DT overlays配置5.15.2'''</p>{| class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''40pin - i2c0install_qt.sh'''</p><p>......</p>| <p>QMake version 3.1</p><p>Using Qt version '''sun50i-h616-pi-i2c0<span style="color:#FF0000">5.15.dtbo2</span>'''in /usr/lib/aarch64-linux-gnu</p>|-}</li>| <li><p>Debian12自带的QT版本为'''40pin - i2c15.15.8'''</p>{| '''sun50i-h616-pi-i2c1.dtbo'''class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''40pin - i2c2install_qt.sh'''</p>| <p>......</p><p>QMake version 3.1</p><p>Using Qt version '''<span style="color:#FF0000">5.15.8</span>'''sun50iin /usr/lib/aarch64-h616linux-pi-i2c2.dtbognu</p></li>|}</ol></li><li><p>然后在'''Applications'''中就可以看到QT Creator的启动图标</p><p>[[File:zero2w-img234.png]]</p><p>也可以使用下面的命令打开QT Creator</p>{| class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''qtcreator'''</p>|}</li><li><p>QT Creator打开后的界面如下所示</p><p>[[File:zero2w-img235.png]]</p></li><li><p>QT Creator的版本如下所示</p><ol style="list-style-type: lower-alpha;"><li><p>QT Creator在'''Ubuntu20.04'''40pin 中的默认版本如下所示</p><p>[[File:zero2w- uart2img236.png]]</p></li><li><p>QT Creator在'''Ubuntu22.04'''中的默认版本如下所示</p><p>[[File:zero2w-img237.png]]</p></li>| <li><p>QT Creator在'''Debian11'''中的默认版本如下所示</p><p>[[File:zero2w-img238.png]]</p></li><li><p>QT Creator在'''Debian12'''sun50i中的默认版本如下所示</p><p>[[File:zero2w-img239.png]]</p></li></ol></li><li><p>然后设置下QT</p><ol style="list-h616style-pitype: lower-uart2alpha;"><li><p>首先打开'''Help'''-&gt;'''About Plugins...dtbo'''</p><p>[[File:zero2w-img240.png]]</p></li><li><p>然后去掉'''ClangCodeModel'''的那个勾</p><p>[[File:zero2w-img241.png]]</p></li><li><p>'''<span style="color:#FF0000">设置完后需要重启下QT Creator</span>'''</p></li><li><p>然后确保QT Creator使用的GCC编译器,如果默认为Clang,请修改为GCC</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| <big><p>'''40pin - uart3Debian12请跳过这步。'''</p></big>| }<p>[[File:zero2w-img242.png]]</p><p>[[File:zero2w-img243.png]]</p></li></ol></li><li><p>然后就可以打开一个示例代码</p><p>[[File:zero2w-img244.png]]</p></li><li><p>点击示例代码后会自动打开对应的说明文档,可以仔细看下其中的使用说明</p><p>[[File:zero2w-img245.png]]</p></li><li><p>然后点击下'''sun50iConfigure Project'''</p><p>[[File:zero2w-h616img246.png]]</p></li><li><p>然后点击左下角的绿色三角形编译运行下示例代码</p><p>[[File:zero2w-piimg247.png]]</p></li><li><p>等待一段时间后,会弹出下图所示的界面,此时就说明QT能正常编译运行</p><p>[[File:zero2w-uart3img248.dtbo'''png]]</p></li><li><p>参考资料</p>{| class="wikitable" style="width:800px;"
|-
| '''40pin - uart4'''| '''sun50i-h616-pi-uart4<p>[https://wiki.qt.dtbo'''|-| '''40pin - uart5'''| io/Install_Qt_5_on_Ubuntu '''sun50i-h616-ph-uart5https://wiki.dtbo'''|-| '''40pin - pwm1'''| '''sun50i-h616-pi-pwm1qt.dtbo'''|-| '''40pin - pwm2io/Install_Qt_5_on_Ubuntu''']</p>| '''sun50i-h616-pi-pwm2<p>[https://download.dtbo'''|-| '''40pin - pwm3'''| '''sun50i-h616-pi-pwm3qt.dtbo'''|-| '''40pin - pwm4'''| io/archive/qtcreator '''sun50i-h616-pi-pwm4https://download.dtbo'''|-| '''40pin - spi1 cs0'''| '''sun50i-h616-spi1-cs0-spidevqt.dtbo'''|-| '''40pin - spi1 cs1io/archive/qtcreator''']</p>| '''sun50i-h616-spi1-cs1-spidev<p>[https://download.dtbo'''|-| '''40pin - spi1 cs0 cs1'''| '''sun50i-h616-spi1-cs0-cs1-spidevqt.dtbo'''|-| '''设置USB0为Host模式'''| io/archive/qt '''sun50i-h616-usb0-hosthttps://download.dtbo'''|-| '''关闭绿色的LED灯'''| '''sun50i-h616-zero2w-disable-ledqt.dtboio/archive/qt''']</p>|-}| '''关闭UART0调试串口的方法'''</li></ol>| '''sun50i-h616-disable-uart0.dtbo'''|}<span id="ros安装方法"></span>
<ol start="5" style="list-style-type: decimal;"><li><p>如果需要同时打开多个配置,直接在'''FDTOVERLAYS'''后面将多个配置的路径加上即可,比如同时打开i2c1和uart5的配置如下所示</p><p>[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''</p><p>LABEL Orange Pi</p><p>KERNEL /Image</p><p>FDT /dtbs/allwinner/sun50i-h616-orangepi-zero2w.dtb</p><p>'''FDTOVERLAYS /dtbs/allwinner/overlay/sun50i-h616-pi-i2c1.dtbo /dtbs/allwinner/overlay/sun50i-h616-ph-uart5.dtbo'''</p></li><li><p>设置好后需要重启系统才能让配置生效</p><p>[orangepi@orangepi-pc ~]$ '''sudo reboot'''</p></li></ol>ROS安装方法 ==
<span id="ubuntu20.04安装ros-1-noetic的方法"></span>=== Ubuntu20.04安装ROS 1 Noetic的方法 = 安装软件的方法 ==
使用pacman包管理工具可以安装OPi OS中没有的软件,比如安装vim编辑器的命令如下所示,如果想安装其他软件,只需要把vim替换想要安装的软件的包名即可。# ROS 1当前活跃的版本如下所示,推荐版本为'''Noetic Ninjemys'''
::[orangepi@orangepi[File:zero2w-pc ~img249.png]]$ '''sudo pacman -Syy vim'''
<span id="android::[[File:zero2w-12-tv系统使用说明"></span>img250.png]]
::{| class= "wikitable" style="width:800px;" |-| [http://docs.ros.org/ '''Android 12 TV系统使用说明http://docs.ros.org''' =]
<span id="已支持的android版本"><'''https:/span>/wiki.ros.org/Distributions'''== 已支持的Android版本 ==|}
<ol start="2" style="list-style-type: decimal;"><li><p>ROS 1 '''Noetic Ninjemys'''官方安装文档链接如下所示:</p>{| class="wikitable" style="width:800px;"
|-
| Android版本<p>[http://wiki.ros.org/noetic/Installation/Ubuntu '''http://wiki.ros.org/noetic/Installation/Ubuntu''']</p>|}</li><li><p>ROS '''Noetic Ninjemys'''官方安装文档中Ubuntu推荐使用Ubuntu20.04,所以请确保开发板使用的系统为'''<span style="color:#FF0000">Ubuntu20.04桌面版系统</span>'''</p>{| class="wikitable" style="width:800px;" |-| <p>[http://wiki.ros.org/noetic/Installation '''http://wiki.ros.org/noetic/Installation''']</p>|}<p>[[File:zero2w-img251.png]]</p></li><li><p>然后使用下面的脚本安装ros1</p>{| 内核版本class="wikitable" style="width:800px;"
|-
| '''Android 12 TV版'''| <p>orangepi@orangepi:~$ '''linux5install_ros.4sh ros1'''</p>
|}
</li>
<li><p>使用ROS工具前,首先需要初始化下rosdep,然后编译源码时就能快速的安装一些系统依赖和一些ROS中的核心组件</p></li>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big>'''<span style="color:#FF0000">注意,运行下面的命令需要确保开发板能正常访问github,否则会由于网络问题而报错。</span>'''
 
 
'''install_ros.sh脚本会尝试修改/etc/hosts并自动运行下面的命令。但是这种方法无法保证每次都能正常访问github,如果install_ros.sh安装完ros1后有提示下面的错误,请自己想其它办法让开发板的linux系统能正常访问github,然后再手动运行下面的命令。'''
 
 
'''https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml'''
'''Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml''' '''<span idstyle="android-12-tv功能适配情况color:#FF0000">ERROR: error loading sources list:</span>== Android 12 TV功能适配情况 =='''
::'''<span style="color:#FF0000">The read operation timed out</span>'''</big>|}{| class="wikitable" style="width:800px;"
|-
| '''主板功能'''| orangepi@orangepi:~$ '''Android12 TVsource /opt/ros/noetic/setup.bash'''|-| orangepi@orangepi:~$ '''HDMI视频sudo rosdep init'''| '''OK'''|-| '''HDMI音频'''| '''OK'''|-| '''TypeWrote /etc/ros/rosdep/sources.list.d/20-C USB2default.0 x 2'''list| '''OK'''|-Recommended: please run| '''TF卡启动'''| '''OK'''|-::rosdep update| '''WIFI'''| orangepi@orangepi:~$ '''OKrosdep update'''|-| '''蓝牙'''reading in sources list data from /etc/ros/rosdep/sources.list.d| '''OK'''|Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml| '''USB摄像头'''| '''OK'''Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml|-| '''LED灯'''Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml| '''OK'''|-Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml| '''40pin GPIO'''| '''OK'''Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml|-| '''40pin I2C'''| '''OK'''|Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml| '''40pin SPI1'''| '''OK'''|Skip end-| '''40pin UART'''| '''OK'''|of-life distro &quot;ardent&quot;| '''40pin PWM'''| '''OK'''|-| '''温度传感器'''| '''OK'''|Skip end-| '''硬件看门狗'''| '''OK'''|of-| '''Mali GPU'''| '''OK'''|-| '''视频编解码'''| '''OK'''|}life distro &quot;bouncy&quot;
{| class="wikitable"|Skip end-| '''24pin扩展板功能'''| '''Android12 TV'''|of-| '''百兆网口'''| '''OK'''|-| '''百兆网口灯'''| '''OK'''|-| '''USB2.0 HOST x 2'''| '''OK'''|-| '''红外接收'''| '''OK'''|-| '''耳机音频播放'''| '''OK'''|-| '''开关机按键'''| '''OK'''|-| '''LRADC自定义按键 x 2'''| '''OK,默认设置为音量加减按键'''|-| '''TV-OUT'''| '''OK'''|}life distro &quot;crystal&quot;
<span id="板载led灯显示说明"></span>== 板载LED灯显示说明 ==Skip end-of-life distro &quot;dashing&quot;
{| class="wikitable"|Skip end-|| '''绿灯'''| '''红灯'''|of-| '''u-boot启动阶段'''| '''灭'''| '''亮'''|-| '''内核启动到进入系统'''| '''亮'''| '''亮'''|}life distro &quot;eloquent&quot;
<span id="android返回上一级界面的方法"></span>== Android返回上一级界面的方法 ==Add distro &quot;foxy&quot;
我们一般都是使用鼠标和键盘来控制开发板的安卓系统,当进入某些界面,需要返回上一级界面或者桌面时,只能通过'''鼠标右键'''来返回,键盘是无法返回的。Add distro &quot;galactic&quot;
如果有购买开发板配套的红外遥控(其他遥控不行)和24pin扩展板,将24pin扩展板接入开发板后,还可以通过遥控中的返回键来返回上一级菜单,返回键的位置如下图所示:Skip end-of-life distro &quot;groovy&quot;
[[File:media/image308.png]]Add distro &quot;humble&quot;
<span id="adb的使用方法"></span>== ADB的使用方法 ==Skip end-of-life distro &quot;hydro&quot;
=== 使用网络连接adb调试 ===Skip end-of-life distro &quot;indigo&quot;
'''使用网络adb无需USB Typc C接口的数据线来连接电脑和开发板,而是通过网络来通信,所以首先请确保开发板的有线或者无线网络已经连接好了,然后获取开发板的IP地址,后面要用到。'''Skip end-of-life distro &quot;jade&quot;
<ol style="listSkip end-styleof-type: decimal;"><li><p>确保Android系统的'''service.adb.tcp.port'''设置为5555端口号</p><p>apollo-p2:/ # '''getprop | grep life distro &quot;adb.tcpkinetic&quot;'''</p><p>[service.adb.tcp.port]: [5555]</p></li><li><p>如果'''service.adb.tcp.port'''没有设置,可以在串口中使用下面的命令设置网络adb的端口号</p></li></ol>
apolloSkip end-p2:/ # '''setprop service.adb.tcp.port 5555'''<br />apolloof-p2:/ # '''stop adbd'''life distro &quot;lunar&quot;
apollo-p2:/ # '''start adbd'''Add distro &quot;melodic&quot;
<ol start="3" style="list-style-type: decimalAdd distro &quot;"><li><p>在Ubuntu PC上安装adb工具</p><p>test@test:~$ '''sudo apt-get update'''</p><p>test@test:~$ '''sudo apt-get install -y adb'''</p></li><li><p>然后在Ubuntu PC上连接网络adb</p><p>test@test:~$ '''adb connect 192.168.1.xxx:5555''' '''(需要修改为开发板的IP地址)'''</p><p>* daemon not runningnoetic&quot; starting now at tcp:5037</p><p>* daemon started successfully</p><p>connected to 192.168.1.xxx:5555</p><p>test@test:~$ '''adb devices'''</p><p>List of devices attached</p><p>192.168.1.xxx:5555 device</p></li><li><p>然后在Ubuntu PC上通过adb shell就可以登录android系统</p></li></ol>
test@test:~$ '''adb shell'''Add distro &quot;rolling&quot;
apolloupdated cache in /home/orangepi/.ros/rosdep/sources.cache|}</ol><ol start="6" style="list-p2style-type:decimal;"><li><p>然后在'''桌面'''中打开一个命令行终端窗口,再使用'''test_ros.sh'''脚本可以启动一个小海龟的例程来测试下ROS是否能正常使用</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''test_ros.sh'''</p>|}</li><li><p>运行完'''test_ros.sh'''脚本后,会弹出下图所示的一个小海龟</p><p>[[File:zero2w-img252.png]]</p></li><li><p>然后请保持刚才打开终端窗口在最上面</p></ #li>
[[File:zero2w-img253.png]]</ol><ol start="9" style== 使用数据线连接adb调试 ==="list-style-type: decimal;"><li><p>此时按下键盘上的方向按键就可以控制小海龟上下左右移动了</p><p>[[File:zero2w-img254.png]]</p></li></ol>
<ol stylespan id="listubuntu20.04安装ros-style2-type: decimal;galactic的方法"><li><p>准备一根USB Typc C接口的数据线, USB接口一端插入电脑的USB接口中,USB Type C接口一端插入开发板的USB0接口中(USB0的位置请见下面右边图片的说明)。在这种情况下是由电脑的USB接口给开发板供电,所以请确保电脑的USB接口能提供最够的功率驱动开发板。</p><p>[[File:media/image15.jpeg]] [[File:media/image309.png]]</p></li><li><p>在Ubuntu PC上安装adb工具</p><p>test@test:~$ '''sudo apt-get update'''</p><p>test@test:~$ '''sudo apt-get install -y adb'''</p></li><li><p>查看识别到ADB设备</p><p>test@test:~$ '''adb devices'''</p><p>List of devices attached</p><p>4c00146473c28651dd0 device</p></li><li><p>然后在Ubuntu PC上通过adb shell就可以登录android系统</p></li></olspan>
test@test:~$ '''adb shell''' apollo-p2:/ $ <span id="查看设置hdmi显示分辨率的方法"></span>== 查看设置HDMI显示分辨率的方法 Ubuntu20.04安装ROS 2 Galactic的方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先进入ROS 2当前活跃的版本如下所示,推荐版本为'''SettingsGalactic Geochelone'''</p><p>[[File:media/image310zero2w-img255.png]]</p></li><li><p>然后选择'''Device Preferences'''</p><p>[[File:media/image311zero2w-img256.png]]</p></li><li>{| class="wikitable" style="width:800px;" |-| <p>然后选择[http://docs.ros.org/ '''Display &amp; Soundhttp://docs.ros.org''']</p><p>[[File'''http:media/image312/docs.png]]ros.org/en/galactic/Releases.html'''</p>|}</li><li><p>然后选择ROS 2 '''Advanced display settingsGalactic Geochelone'''官方安装文档链接如下所示:</p><p>[[File{| class="wikitable" style="width:media/image313.png]]</p></li>800px;" |-| <li><p>然后选择'''HDMI output modedocs.ros.org/en/galactic/Installation.html'''</p><p>[[File'''http:media/image314/docs.ros.png]]<org/p><en/li><li><p>然后就能看到显示器支持的分辨率列表了。此时点击对应的选项就会切换到对应的分辨率。请注意,不同显示器支持的分辨率可能是不同的,如果接到电视上,一般会看到比下图更多的分辨率选项。<galactic/p><p>[[File:mediaInstallation/image315Ubuntu-Install-Debians.png]]html'''</p>|}</li><li><p>开发板的HDMI输出是支持4K显示的,当接到4K电视时就可以看到4K分辨率的选项</p><p>[[File:media/image316ROS 2 '''Galactic Geochelone'''官方安装文档中Ubuntu Linux推荐使用Ubuntu20.png]]</p></li></ol> 04,所以请确保开发板使用的系统为'''<span idstyle="hdmi转vga显示测试-1color:#FF0000">Ubuntu20.04桌面版系统</span>=== HDMI转VGA显示测试 === '''。安装ROS 2有几种方法,下面演示下通过'''Debian packages'''的方式来安装ROS 2 '''Galactic Geochelone'''</p><ol style="list-style-type: decimal;"/li><li><p>首先需要准备下面的配件使用'''install_ros.sh'''脚本可以安装ros2</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>HDMI转VGA转换器</p>|-<p>[[File:media/image146.png]]</p></li><li><p>一根VGA线和一个Mini HDMI公转HDMI母的转接头</p>| <p>[[Fileorangepi@orangepi:media/image147~$ '''install_ros.png]] [[File:media/image148.png]]sh ros2'''</p></li><li><p>一个支持VGA接口的显示器或者电视</p></li></ol>|}
</li>
<li><p>HDMI转VGA显示测试如下所示</p><p>[[File:media/image317'''install_ros.png]]</p><p>sh'''脚本安装完ros2后会自动运行下'''使用HDMI转VGA显示时,开发板以及开发板的Android系统是不需要做任何设置的,只需要开发板Mini HDMI接口能正常显示就可以了。所以如果测试有问题,请检查HDMI转VGA转换器、VGA线以及显示器是否有问题。ros2 -h'''命令,如果能看到下面的打印,说明ros2安装完成</p>{| class="wikitable" style="width:800px;" |-| </lip>usage: ros2 [-h] Call `ros2 &lt;command&gt; -h` for more detailed usage. ...</olp>
<span id="wi-fi的连接方法"></span>
== WI-FI的连接方法 ==
<ol style="list-style-type: decimal;"><li><p>首先选择'''Settings'''</p><p>[[File:media/image310.png]]</p></li><li><p>然后选择'''Network &amp; Internet'''</p><p>[[File:media/image318.png]]</p></li><li><p>然后打开WI-FI</p><p>[[File:media/image319.png]]</p></li><li><p>打开WIros2 is an extensible command-FI后在'''Available networks'''下面就可以看到搜索到的信号</p><p>[[File:media/image320line tool for ROS 2.png]]</p></li><li><p>选择想连接的WI-FI后会弹出下图所示的密码输入界面</p><div class="figure">
[[File:media/image321.png]]
</div></li><li><p>然后使用键盘输入WI-FI对应的密码,再使用'''鼠标'''点击虚拟键盘中的回车按钮就会开始连接WI-FI了optional arguments:</p><p>[[File:media/image322.png]]</p></li><li><p>WI-FI连接成功后的显示如下图所示</p><p>[[File:media/image323.png]]h, --help show this help message and exit</p></li></ol>
<span id="wi-fi-hotspot的使用方法"></span>
== WI-FI hotspot的使用方法 ==
<ol style="list-style-typep>Commands: decimal;"</p>:<lip>action Various action related sub-commands</p>首先请确保以太网口已连接网线,并且能正常上网:</p>bag Various rosbag related sub-commands</lip>:<lip>component Various component related sub-commands</p>然后选择'''Settings''':</p>daemon Various daemon related sub-commands</p>[[File:media/image310.png]]</p>doctor Check ROS setup and other potential issues</lip><li>:<p>然后选择'''Network &amp; Internet'''interface Show information about ROS interfaces</p>:<p>[[File:media/image318.png]]launch Run a launch file</p></li><li>:<p>然后选择'''WIFI hotspot'''lifecycle Various lifecycle related sub-commands</p>:<p>[[File:media/image324.png]]multicast Various multicast related sub-commands</p></li><li>:<p>然后打开'''Hotspot Enable''',下图中还可以看到生成的热点的名字和密码,记住它们,在连接热点的时候要用到(如果需要修改热点的名字和密码,需要先关闭'''Hotspot Enable''',然后才能修改)node Various node related sub-commands</p>:<p>[[File:media/image325.png]]param Various param related sub-commands</p></li><li>:<p>此时可以拿出你的手机,如果一切正常,在手机搜索到的WIpkg Various package related sub-FI列表中就能找到上图'''Hotspot name'''下面显示的同名('''这里为AndroidAP_7132''')的WIFI热点了。然后可以点击'''AndroidAP_7132'''连接热点,密码在上图的'''Hotspot password'''下面可以看到commands</p>:<p>[[Filerun Run a package specific executable</p>:media/image326.png]]</p>security Various security related sub-commands</lip><li>:<p>连接成功后显示如下图所示(不同手机界面会有区别,具体界面以你手机显示的为准)。此时就可以在手机上打开一个网页看下能否上网了,如果能正常打开网页,说明开发板的'''WIservice Various service related sub-FI Hotspot'''能正常使用commands</p>:<p>[[File:media/image327.png]]topic Various topic related sub-commands</p>:</lip>wtf Use `wtf` as alias to `doctor`</olp>
<span id="查看以太网口ip地址的方法"></span>
== 查看以太网口IP地址的方法 ==
:<p>Call `ros2 &lt;command&gt; -h` for more detailed usage.</p>|}</li><li><ol p>然后可以使用 '''test_ros.sh'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行</p>{| class="wikitable" style="list-style-typewidth: decimal800px;"><li>|-| <p>开发板主板上是没有有线网络接口的,我们可以通过24pin扩展板来扩展百兆以太网orangepi@orangepi:~$ '''test_ros.sh'''</p><p>[INFO] [File:media/image1071671174101.png200091527][talker]: Publishing: 'Hello World: 1'</p><p>[INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]</lip><lip>[INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2'</p>然后请确保扩展板的网口连接到了路由器或者交换机</p>[INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]</lip><li><p>然后打开'''Settings'[INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'</p><p>[INFO] [File:media/image3281671174103.png204019965] [listener]: I heard: [Hello World: 3]</p>|}</li><li><p>然后选择运行下面的命令可以打开rviz2</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''Network &amp; Internetsource /opt/ros/galactic/setup.bash'''</p><p>orangepi@orangepi:~$ '''ros2 run rviz2 rviz2'''</p><p>[[File:media/image329zero2w-img257.png]]</p>|}</li><li><p>然后在下图所示的位置就能看到开发板有线网口的IP地址了ROS的使用方法请参考下ROS 2的文档</p>{| class="wikitable" style="width:800px;" |-| <p>[[Filehttp://docs.ros.org/en/galactic/Tutorials.html '''http:media/image330/docs.ros.org/en/galactic/Tutorials.png]html''']</p>|}</li></ol> <span id="ubuntu22.04安装ros-2-humble的方法"></span>
== 蓝牙的连接方法 = Ubuntu22.04安装ROS 2 Humble的方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先选择使用'''Settingsinstall_ros.sh'''脚本可以安装ros2</p><p>[[File{| class="wikitable" style="width:media/image310.png]]</p></li>800px;" |-<li><p>然后选择'''Bluetooth'''</p>| <p>[[Fileorangepi@orangepi:media/image331.png]]</p></li><li><p>然后打开~$ '''Bluetooth Enableinstall_ros.sh ros2'''</p><p>[[File:media/image332.png]]</p>|}</li><li><p>然后点击'''Pair new deviceinstall_ros.sh'''开始扫描周围的蓝牙设备</p><p>[[File:media/image333.png]]</p></li><li><p>搜索到的蓝牙设备会在脚本安装完ros2后会自动运行下'''Available devicesros2 -h'''下面显示出来命令,如果能看到下面的打印,说明ros2安装完成</p><p>[[File{| class="wikitable" style="width:media/image334.png]]</p></li>800px;" |-<li><p>然后点击想要连接的蓝牙设备就可以开始配对了,当弹出下面的界面时,请使用鼠标选择'''Pair'''选项</p>| <p>usage: ros2 [[File:media/image335.png]-h]</p></li><li><p>这里测试的是开发板和'''安卓手机'''蓝牙的配置过程,此时在手机上会弹出下面的确认界面,在手机上也点击配对按钮后就会开始配对过程</p><p>[[File:media/image336Call `ros2 &lt;command&gt; -h` for more detailed usage.png]]</p></li><li><p>配对完成后,再打开'''Paired devices'''下面就可以看到已配对的蓝牙设备</p><p>[[File:media/image337.png]]</p></li><li><p>此时可以使用手机蓝牙给开发板发送一张图片,发送后,在开发板的安卓系统中可以看到下面的确认界面,然后点击'''Accept'''就可以开始接收手机发过来的图片了</p><p>[[File:media/image338.png]]</p></li><li><p>开发板Android系统蓝牙接收到的图片可以打开'''Received files'''中查看</p><p>[[File:media/image339.png]]</p></li></ol>
<span id="usb0设置为host模式的方法-1"></span>
== USB0设置为HOST模式的方法 ==
如下图所示,开发板的主板上有两个Type<p>ros2 is an extensible command-C类型的接口:USB0和USB1,这两个接口都可以用来给开发板供电,也都可以用来当做USB2line tool for ROS 2.0 HOST接口。USB0和USB1的区别是:USB0除了可以设置为HOST模式外,还可以设置为Device模式,而USB1只有HOST模式。</p>
[[File:media/image163.png]]
Orange Pi发布的Android12 TV系统USB0默认设置为Device模式,所以在不需要使用USB0 Device模式时(ADB功能需要确保USB0为Device模式),建议使用USB0来供电,这样USB1就可以直接用来接USB设备。<p>optional arguments:</p>:<p>-h, --help show this help message and exit</p>
如果想使用USB0来接USB设备,需要把USB0设置为HOST模式,方法如下所示:
<ol style="list-style-typep>Commands: lower-alpha;"</p><li>:<p>运行下面的命令可以将USB0设置为HOST模式:action Various action related sub-commands</p>:<p>apollobag Various rosbag related sub-p2:/ # '''cat /sys/devices/platform/soc@3000000/soc@3000000\:usbc0@0/usb_host'''commands</p>:<p>host_chose finished!component Various component related sub-commands</p>:<p>apollodaemon Various daemon related sub-p2commands</p>:/ #</p>doctor Check ROS setup and other potential issues</lip>:<p>interface Show information about ROS interfaces<li/p>:<p>运行下面的命令可以切回Device模式launch Run a launch file</p>:<p>apollolifecycle Various lifecycle related sub-p2:commands</ # '''cat /sys/devices/platform/soc@3000000/soc@3000000\p>:usbc0@0/usb_device'''<p>multicast Various multicast related sub-commands</p>:<p>device_chose finished!node Various node related sub-commands</p>:<p>apolloparam Various param related sub-p2commands</p>:/ #</p>pkg Various package related sub-commands</lip>:<lip>run Run a package specific executable</p>查看USB0当前模式的命令为:<p>security Various security related sub-commands</p>:<p>apolloservice Various service related sub-p2:/ # '''cat /sys/devices/platform/soc@3000000/soc@3000000\:usbc0@0/otg_role'''commands</p>:<p>usb_hosttopic Various topic related sub-commands</p>:</lip>wtf Use `wtf` as alias to `doctor`</olp>
<span id="usb摄像头使用方法"></span>
== USB摄像头使用方法 ==
<ol style="list-style-type: decimal;"><li><p>首先在开发板的USB接口中插入USB(UVC协议)摄像头Call `ros2 &lt;command&gt; -h` for more detailed usage.</p>|}</li><li><p>USB摄像头如果识别正常,在/dev下会生成相应的video设备节点然后可以使用 '''test_ros.sh'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行</p>{| class="wikitable" style="width:800px;" |-| <p>consoleorangepi@orangepi:/ # ~$ '''ls /dev/video0test_ros.sh'''</p><p>/dev/video0[INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1'</p></li><li><p>然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考[INFO] [1671174101.235661048] [\l|'''ADB的使用方法'''listener]: I heard: [Hello World: 1]一小节的说明</p></li><li><p>在开发板资料下载页面的[INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2''官方工具'''中下载USB摄像头测试APP</p><p>[INFO] [File1671174102.204196299] [listener]: I heard: [Hello World:media2]</image340p><p>[INFO] [1671174103.png199580322][talker]: Publishing: 'Hello World: 3'</p><p>[INFO] [File:media/image3411671174103.png204019965][listener]: I heard: [Hello World: 3]</p>|}</li><li><p>然后使用adb命令安装USB摄像头测试APP到Android系统中,当然也可以使用U盘拷贝的方式进行安装运行下面的命令可以打开rviz2</p>{| class="wikitable" style="width:800px;" |-| <p>testorangepi@testorangepi:~$ '''adb install usbcamerasource /opt/ros/humble/setup.apkbash'''</p></li><li><p>安装完后在Android的桌面可以看到USB摄像头的启动图标orangepi@orangepi:~$ '''ros2 run rviz2 rviz2'''</p>|}<p>[[File:media/image342zero2w-img258.png]]</p></li><li><p>然后双击打开USB摄像头APP就可以看到USB摄像头的输出视频了参考文档</p>{| class="wikitable" style="width:800px;" |-| <p>'''http://docs.ros.org/en/humble/index.html'''</p><p>[http://docs.ros.org/en/galactic/Tutorials.html '''http://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html''']</p>|}</li></ol>
<span id="android系统root说明"></span>== Android系统ROOT说明 安装内核头文件的方法 ==
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''<span classstyle="markcolor:#FF0000">Orange Pi发布的Android系统已经ROOT,可以使用下面的方法来测试。Linux6.1</span>内核的Debian11系统编译内核模块时会报GCC的错误。所以如果要编译内核模块请使用Debian12或者Ubuntu22.04。'''</big>|}
<ol style="list-style-type: decimal;">
<li><p>在开发板资料下载页面的OPi发布的Linux镜像默认自带了内核头文件的deb包,存放的位置为'''官方工具/opt/'''中下载</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''rootcheck.apkls /opt/linux-headers*'''</p><p>[[File/opt/linux-headers-xxx-sun50iw9_x.x.x_arm64.deb</p>|}</li><li><p>使用下面的命令可以安装内核头文件的deb包</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:media~$ '''sudo dpkg -i /opt/image340linux-headers*.png]]deb'''</p>|}</li><li><p>安装完后在'''/usr/src'''下就能看到内核头文件所在的文件夹</p>{| class="wikitable" style="width:800px;" |-| <p>[[Fileorangepi@orangepi:media~$ '''ls /usr/image343src'''</p><p>linux-headers-x.x.png]]x</p>|}</li><li><p>然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考[[\l然后可以编译下Linux镜像中自带的hello内核模块的源码,hello模块的源码在'''/usr/src/hello'''中,进入此目录后,然后使用make命令编译即可。</p>{| class="wikitable" style="width:800px;" |-|<p>orangepi@orangepi:~$ '''cd /usr/src/hello/'''</p><p>orangepi@orangepi:/usr/src/hello$ '''sudo make'ADB的使用方法''</p><p>make -C /lib/modules/5.4.125/build M=/usr/src/hello modules</p><p>make[1]: Entering directory '/usr/src/linux-headers-5.4.125'</p>:<p>CC [M] /usr/src/hello/hello.o</p>:<p>Building modules, stage 2.</p>:<p>MODPOST 1 modules</p>:<p>CC [M]/usr/src/hello/hello.mod.o</p>:<p>LD [M]一小节的说明/usr/src/hello/hello.ko</p><p>make[1]: Leaving directory '/usr/src/linux-headers-5.4.125'</p>|}</li><li><p>然后使用adb命令安装rootcheck编译完后会生成'''hello.apk到Android系统中,当然也可以使用U盘拷贝的方式进行安装ko'''内核模块</p>{| class="wikitable" style="width:800px;" |-| <p>testorangepi@testorangepi:~/usr/src/hello$ '''adb install rootcheckls *.apkko'''</p><p>hello.ko</p>|}</li><li><p>安装完后在Android的桌面可以看到ROOT测试工具的启动图标使用'''insmod'''命令可以将'''hello.ko'''内核模块插入内核中</p>{| class="wikitable" style="width:800px;" |-| <p>[[Fileorangepi@orangepi:media/image344usr/src/hello$ '''sudo insmod hello.png]]ko'''</p>|}</li><li><p>第一次打开然后使用'''demsg'''命令可以查看下'''hello.ko'''内核模块的输出,如果能看到下面的输出说明'''ROOT测试工具hello.ko'''后的显示界面如下图所示内核模块加载正确</p>{| class="wikitable" style="width:800px;" |-| <p>[[Fileorangepi@orangepi:media/image345usr/src/hello$ '''dmesg | grep &quot;Hello&quot;'''</p><p>[ 2871.png]893988]'''Hello Orange Pi -- init'''</p>|}</li><li><p>然后就可以点击使用'''rmmod'''命令可以卸载'''hello.ko'''内核模块</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:/usr/src/hello$ '''CHECK NOWsudo rmmod hello'''开始Android系统的ROOT状态的检查,检查完后的显示如下所示,可以看到Android系统已取得ROOT权限</p><p>[[Fileorangepi@orangepi:media/image346usr/src/hello$ '''dmesg | grep &quot;Hello&quot;'''</p><p>[ 2871.png893988]Hello Orange Pi -- init</p><p>[ 3173.800892]'''Hello Orange Pi -- exit'''</p>|}</li></ol>
<span id="使用miracastreceiver将手机屏幕投屏到开发板的方法linux系统支持的部分编程语言测试"></span>== 使用MiracastReceiver将手机屏幕投屏到开发板的方法 ==
<ol style="list-style-type: decimal;"><li><p>首先请确保开发板和手机都连接了同一个WIFI热点,开发板连接WIFI的方法请参考[[\l|'''WI-FI的连接方法''']]一小节的说明</p></li><li><p>然后打开开发板安卓系统中的'''MiracastReceiver'''应用</p><p>[[File:media/image347.png]]</p></li><li><p>'''MiracastReceiver'''打开后的界面如下所示</p><div class="figure">Linux系统支持的部分编程语言测试 ==
[[File:media<span id="debian-bullseye系统"></image348.png]]span>=== Debian Bullseye系统 ===
<ol style="list-style-type: decimal;"><li><p>Debian Bullseye默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</divp></liol style="list-style-type: lower-alpha;"><li><p>然后在手机设置中找到投屏功能,gcc的版本如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''这里以小米12S Pro手机为例gcc --version''',其他品牌的手机请自行研究下,如下图所示,点击红色方框位置的按钮即可打开手机的投屏功能</p><p>[[File:media/image349gcc (Debian 10.2.1-6) 10.2.png]]1 20210110</p><p>Copyright (C) 2020 Free Software Foundation, Inc.</lip><li><p>等待一段时间后在手机上就能看到搜索到的可连接的设备,然后我们选择开发板对应的设备连接即可This is free software; see the source for copying conditions. There is NO</p><p>[[File:media/image350warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.png]]</p>|}</li><li><p>然后在开发板的编写C语言的'''MiracastReceiver'''应用界面会弹出下图所示的选择框,这里我们选择'''Accepthello_world.c'''即可程序</p>{| class="wikitable" style="width:800px;" |-| <p>[[Fileorangepi@orangepi:media/image351~$ '''vim hello_world.png]]</p></li><li><p>然后就能在开发板连接的HDMI屏幕上看到手机屏幕的内容了c'''</p><p>[[File:media/image352#include &lt;stdio.png]]h&gt;</p></li></ol>
== 通过按键或红外遥控开关机的方法 ==
我们可以通过开关机按键或者红外遥控来关闭或开启开发板的安卓系统。但是需要注意的是,开发板主板上是没有开关机按键和红外接收器的,需要通过24pin扩展板来扩展。<p>int main(void)</p><p>{</p>::<p>printf(&quot;Hello World!\n&quot;);</p>
[[File:media/image107.png]]
24pin扩展板上的开关机按键所在位置如下图所示: [[File:media/image274.png]] 红外遥控电源按键所在位置如下所示: [[File:media/image353.png]] 关机时,我们需要长按开关机按键或者红外遥控上的电源按键,然后安卓系统会弹出下图所示的确认对话框,然后选择'''OK'''就会关闭安卓系统了。 [[File:media/image354.png]] 关机后,再次长按开关机按键或者红外遥控上的电源按键就会开机了。 <span id="pin-接口-gpiouartspi-测试"></spanp>== 40pin 接口 GPIO、UART、SPI 测试 == '''注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。''' <span id="pin的gpio口测试方法"></span>=== 40pin的GPIO口测试方法 === <ol style="list-style-type: decimalreturn 0;"><li><p>首先在桌面中打开wiringOP APP</p><p>[[File:media/image355.png]]}</p></li><li><p>然后点击'''GPIO_TEST'''按钮打开GPIO测试界面</p>|}<p>[[File:media/image356.png]]</p></li><li><p>GPIO测试界面如下图所示,左边的两排'''CheckBox''然后编译运行'按钮和40pin引脚是一一对应的关系。当勾选'''CheckBox'''按钮时,对应的GPIO引脚会被设置为'''OUT'''模式,引脚电平设置为高电平;当取消勾选时,GPIO引脚电平会设置为低电平;当点击'''GPIO READALL'''按钮时,可以获取到wPi号、GPIO模式、引脚电平等信息;当点击'''BLINK ALL GPIO'''按钮时,会让所有的GPIO口循环输出高低电平,使用这个功能可以用来测试40pin中所有的GPIO口。</p><p>[[File:media/image357hello_world.png]]</p></li><li><p>然后点击c'''GPIO READALL'''按钮,输出信息如下图所示:</p><div {| class="figurewikitable"> [[Filestyle="width:media/image358.png]]800px;" |-</div></li>| <li><p>开发板40pin中总共有28个GPIO口可以使用,下面以12号引脚——对应GPIO为PI01——对应wPi序号为6——为例演示如何设置GPIO口的高低电平。首先点击12号引脚对应的orangepi@orangepi:~$ '''CheckBox'''按钮,当按钮为选中状态时,12号引脚会设置为高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''3gcc -o hello_world hello_world.3vc''',说明设置高电平成功。</p><p>[[Fileorangepi@orangepi:media/image359.png]]</p></li><li><p>然后点击~$ '''GPIO READALL'''按钮,可以看到当前的12号引脚模式为'''OUT./hello_world''',引脚电平为高电平</p><p>[[File:media/image360.png]]Hello World!</p>|}</li><li><p>再次点击下图的'''CheckBox'''按钮取消勾选状态,12号引脚就会设置为低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''0v''',说明设置低电平成功</pol><p>[[File:media/image361.png]]</p></li><li><p>然后点击'''GPIO READALL'''按钮,可以看到当前的12号引脚模式为OUT,引脚电平为低电平Debian Bullseye默认安装有Python3</p><p>[[Fileol style="list-style-type:media/image362.png]]</plower-alpha;"></li></ol> <span id="pin的uart测试方法"p>Python具体版本如下所示</spanp>=== 40pin的UART测试方法 === # 由下表可知,Android12 TV系统默认可用的uart有uart2和uart5。请注意uart0默认设置为调试串口,请不要把uart0当成普通串口使用。 {| class="wikitable" style="width:800px;"
|-
| '''GPIO序号'''| <p>orangepi@orangepi:~$ '''GPIOpython3'''</p>| <p>'''功能Python 3.9.2'''(default, Feb 28 2021, 17:03:44)</p>| '''引脚'''<p>[GCC 10.2.1 20210110] on linux</p>|<p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p>| '''引脚'''<p>&gt;&gt;&gt;</p>| '''功能'''}{| '''GPIO'''| '''GPIO序号'''class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| style="text-align: left;"|| style="text-align: left;"|| '''3.3V'''| <big><p>'''1使用Ctrl+D快捷键可退出python的交互模式。'''</p></big>|}| '''2'''</li>| <li><p>编写Python语言的'''5Vhello_world.py'''程序</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| <p>orangepi@orangepi:~$ '''264vim hello_world.py'''</p>| '''PI8'<p>print('Hello World!')</p>| }</li><li><p>运行'''TWI1-SDAhello_world.py'''的结果如下所示</p>{| '''3'''class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''4python3 hello_world.py'''</p><p>Hello World!</p>| '''5V'''}</li></ol></li><li><p>Debian Bullseye默认没有安装Java的编译工具和运行环境</p>| <ol style="textlist-style-aligntype: leftlower-alpha;"|><li><p>可以使用下面的命令安装openjdk,Debian Bullseye中最新版本为openjdk-17</p>{| class="wikitable" style="text-alignwidth: left800px;"|
|-
| '''263'''| <p>orangepi@orangepi:~$ '''PI7'''| '''TWI1sudo apt install -y openjdk-17-SCLjdk'''</p>| '''5'''}|</li>| '''6'''| '''GND'''<li><p>安装完后可以查看下Java的版本</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| '''269'''| <p>orangepi@orangepi:~$ '''PI13java --version'''</p>| '''PWM3'''}| '''7'''</li>|| <li><p>编写Java版本的'''8hello_world.java'''</p>{| '''UART0_TX'''| '''PH0'''| '''224'''class="wikitable" style="width:800px;"
|-
| style="text-align: left;"|| style="text-align<p>orangepi@orangepi: left;"|| ~$ '''GNDvim hello_world.java'''</p>| '''9'''<p>public class hello_world</p><p>{</p>:<p>public static void main(String[] args)</p>:<p>{</p>::<p>System.out.println(&quot;Hello World!&quot;);</p>:<p>}</p>|<p>}</p>| '''10'''}| '''UART0_RX'''</li>| <li><p>然后编译运行'''PH1hello_world.java'''</p>{| '''225'''class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''226javac hello_world.java'''</p>| <p>orangepi@orangepi:~$ '''PH2java hello_world'''</p><p>Hello World!</p>| '''UART5_TX'''}</li></ol></li></ol> <span id="debian-bookworm系统"></span> === Debian Bookworm系统 ===| '''11'''|<ol style="list-style-type: decimal;">| '''12'''<li><p>Debian Bookworm默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p>| <ol style="textlist-style-aligntype: leftlower-alpha;"|>| '''PI1'''<li><p>gcc的版本如下所示</p>{| '''257'''class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''227gcc --version'''</p><p>gcc (Debian 12.2.0-14) 12.2.0</p>| '''PH3'''<p>Copyright (C) 2022 Free Software Foundation, Inc.</p>| '''UART5_RX'''<p>This is free software; see the source for copying conditions. There is NO</p>| '''13'''<p>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p>|}| '''14'''</li>| <li><p>编写C语言的'''GNDhello_world.c'''程序</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| <p>orangepi@orangepi:~$ '''261vim hello_world.c'''</p><p>#include &lt;stdio.h&gt;</p>  <p>int main(void)</p><p>{</p>:<p>printf(&quot;Hello World!\n&quot;);</p>| '''PI5'''| '''UART2_TX'''| '''15''':<p>return 0;</p>|<p>}</p>| '''16'''}| '''PWM4'''</li>| <li><p>然后编译运行'''PI14hello_world.c'''</p>{| '''270'''class="wikitable" style="width:800px;"
|-
| style="text-align: left;"|| style="text-align<p>orangepi@orangepi: left;"|| ~$ '''3gcc -o hello_world hello_world.3Vc'''</p>| <p>orangepi@orangepi:~$ '''17./hello_world'''</p><p>Hello World!</p>|}| '''18'''</li></ol></li><li><p>Debian Bookworm默认安装有Python3</p>| <ol style="textlist-style-aligntype: leftlower-alpha;"|>| '''PH4'''<li><p>Python具体版本如下所示</p>{| '''228'''class="wikitable" style="width:800px;"
|-
| '''231'''| <p>orangepi@orangepi:~$ '''PH7python3'''</p>| '''SPI1_MOSI'''<p>Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux</p>| '''19'''<p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p>|<p>&gt;&gt;&gt;</p>| '''20'''| '''GND'''}{| styleclass="text-align: left;wikitable"|| style="textbackground-aligncolor: left#ffffdc;width:800px;"|
|-
| '''232'''| <big><p>'''PH8使用Ctrl+D快捷键可退出python的交互模式。'''</p></big>| '''SPI1_MISO'''}| '''21'''</li>|| <li><p>编写Python语言的'''22hello_world.py'''程序</p>{| '''UART2_RX'''| '''PI6'''| '''262'''class="wikitable" style="width:800px;"
|-
| '''230'''| <p>orangepi@orangepi:~$ '''PH6vim hello_world.py'''</p>| <p>print('Hello World!''SPI1_CLK'''| '''23'''|)</p>| '''24'''}| '''SPI1_CS0'''</li>| <li><p>运行'''PH5hello_world.py'''的结果如下所示</p>{| '''229'''class="wikitable" style="width:800px;"
|-
| style="text-align: left;"|| style="text-align<p>orangepi@orangepi: left;"|| ~$ '''GNDpython3 hello_world.py'''</p><p>Hello World!</p>| '''25'''}</li></ol>|</li>| '''26'''<li><p>Debian Bookworm默认没有安装Java的编译工具和运行环境</p>| '''SPI1_CS1'''<ol style="list-style-type: lower-alpha;">| '''PH9'''<li><p>可以使用下面的命令安装openjdk,Debian Bookworm中最新版本为openjdk-17</p>{| '''233'''class="wikitable" style="width:800px;"
|-
| '''266'''| <p>orangepi@orangepi:~$ '''PI10'''| '''TWI2sudo apt install -y openjdk-17-SDAjdk'''</p>| '''27'''|| '''28'''}| '''TWI2-SCL'''</li>| '''PI9'''<li><p>安装完后可以查看下Java的版本</p>{| '''265'''class="wikitable" style="width:800px;"
|-
| '''256'''| <p>orangepi@orangepi:~$ '''PI0'''| style="textjava --align: left;"|| '''29version'''</p>|}| '''30'''</li>| <li><p>编写Java版本的'''GNDhello_world.java'''</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| <p>orangepi@orangepi:~$ '''271vim hello_world.java'''</p><p>public class hello_world</p><p>{</p>:<p>public static void main(String[] args)</p>| '''PI15''':<p>{</p>| style="text-align: left:<p>System.out.println(&quot;Hello World!&quot;);"|</p>| '''31''':<p>}</p>|<p>}</p>| '''32'''}| '''PWM1'''</li>| <li><p>然后编译运行'''PI11hello_world.java'''</p>{| '''267'''class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''268javac hello_world.java'''</p>| <p>orangepi@orangepi:~$ '''PI12java hello_world'''</p><p>Hello World!</p>| '''PWM2'''}</li></ol></li></ol> | '''33'''<span id="ubuntu-focal系统"></span>|| '''34'''=== Ubuntu Focal系统 ===| '''GND'''| <ol style="textlist-style-aligntype: leftdecimal;"|><li><p>Ubuntu Focal默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p>| <ol style="textlist-style-aligntype: leftlower-alpha;"><li><p>gcc的版本如下所示</p>{|class="wikitable" style="width:800px;"
|-
| '''258'''| <p>orangepi@orangepi:~$ '''PI2gcc --version'''</p>| style="text<p>gcc (Ubuntu 9.4.0-align: left1ubuntu1~20.04.1) 9.4.0</p><p>Copyright (C) 2019 Free Software Foundation, Inc.</p><p>This is free software; see the source for copying conditions. There is NO</p><p>warranty;"|not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p>| '''35'''}|</li>| <li><p>编写C语言的'''36hello_world.c'''程序</p>{| class="wikitable" style="text-alignwidth: left800px;"|| '''PC12'''| '''76'''
|-
| '''272'''| '''PI16'''| style="text-align: left;"|| '''37'''|| '''38'''| style="text-align<p>orangepi@orangepi: left;"|| '''PI4''~$ '| ''vim hello_world.c'260'''|-| style="text-align: left;"|</p>| style="text-align: left<p>#include &lt;"|| '''GND'''| '''39'''|| '''40'''| style="text-align: leftstdio.h&gt;"|| '''PI3'''| '''259'''|}</p>
<ol start="2" style="list-style-type: decimal;">
<li><p>uart2对应的设备节点为'''/dev/ttyAS2''',uart5对应的设备节点为'''/dev/ttyAS5'''</p>
<p>apollo-p2:/ # ls /dev/ttyAS*</p>
<p>/dev/ttyAS0 /dev/ttyAS1 '''/dev/ttyAS2 /dev/ttyAS5'''</p></li>
<li><p>首先在桌面中打开wiringOP APP</p>
<p>[[File:media/image355.png]]</p></li>
<li><p>然后点击'''UART_TEST'''按钮打开UART测试界面</p>
<p>[[File:media/image363.png]]</p></li>
<li><p>wiringOP的串口测试界面如下图所示</p></li></ol>
[[File<p>int main(void)</p><p>{</p>:media<p>printf(&quot;Hello World!\n&quot;);</image364.png]]p>
<ol start="6" style="list-style-type: decimal;">
<li><p>然后在选择框中选择'''/dev/ttyAS2'''或者'''/dev/ttyAS5'''节点</p>
<p>[[File:media/image365.png]]</p></li>
<li><p>再在编辑框中输入想要设置的波特率,然后点击'''OPEN'''按钮打开uart节点,打开成功后,'''OPEN'''按钮变为不可选中状态,'''CLOSE'''按钮和'''SEND'''按钮变为可选中状态</p></li></ol>
[[File:media/image366.png]] <ol start="8" style="list-style-type: decimalp>return 0;"</p><li><p>然后使用杜邦线短接uart的rx和tx引脚}</p>|}</li><li><p>然后可以在下面的发送编辑框中输入一段字符,点击然后编译运行'''SENDhello_world.c'''按钮开始发送</p></li></ol[[File:media/image367.png]] <ol start{| class="10wikitable" style="list-style-typewidth: decimal800px;"><li>如果一切正常,接收框内会显示已接收到的字符串</li></ol> [[File:media/image368.png]] <span id="pin的spi测试方法"></span>=== 40pin的SPI测试方法 === # 由下表可知,40pin接口可用的spi为spi1,有两个片选引脚cs0和cs1 {| class="wikitable"
|-
| <p>orangepi@orangepi:~$ '''GPIO序号gcc -o hello_world hello_world.c'''</p>| <p>orangepi@orangepi:~$ '''GPIO./hello_world'''</p><p>Hello World!</p>| '''功能'''}| '''引脚'''</li></ol>|</li>| '''引脚'''<li><p>Ubuntu Focal默认安装有Python3</p>| '''功能'''<ol style="list-style-type: lower-alpha;">| '''GPIO'''<li><p>Python3具体版本如下所示</p>{| '''GPIO序号'''class="wikitable" style="width:800px;"
|-
| style="text-align: left;"|| style="text-align<p>orangepi@orangepi: left;"|| ~$ '''3.3Vpython3'''</p>| '''1'''<p>Python 3.8.10 (default, Nov 14 2022, 12:59:47)</p><p>[GCC 9.4.0] on linux</p>|<p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p>| '''2'''<p>&gt;&gt;&gt;</p>| '''5V'''}{| styleclass="text-align: left;wikitable"|| style="textbackground-aligncolor:#ffffdc;width: left800px;"|
|-
| '''264'''| '''PI8'''| '''TWI1-SDA'''| <big><p>'''3使用Ctrl+D快捷键可退出python的交互模式。'''</p></big>|}| '''4'''</li>| <li><p>编写Python语言的'''5Vhello_world.py'''程序</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| '''263'''| '<p>orangepi@orangepi:~$ ''PI7'''| '''TWI1-SCLvim hello_world.py'''</p>| '''5'<p>print('Hello World!')</p>|}| '''6'''</li>| <li><p>运行'''GNDhello_world.py'''的结果如下所示</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| <p>orangepi@orangepi:~$ '''269python3 hello_world.py'''</p>| '''PI13'''<p>Hello World!</p>| '''PWM3'''}| '''7'''</li></ol>|</li>| '''8'''<li><p>Ubuntu Focal默认没有安装Java的编译工具和运行环境</p>| '''UART0_TX'''<ol style="list-style-type: lower-alpha;">| '''PH0'''<li><p>可以使用下面的命令安装openjdk-17</p>{| '''224'''class="wikitable" style="width:800px;"
|-
| style="text-align: left;"|| style="text-align<p>orangepi@orangepi: left;"|| ~$ '''GND'''| '''9sudo apt install -y openjdk-17-jdk'''</p>|}| '''10'''| '''UART0_RX'''</li>| '''PH1'''<li><p>安装完后可以查看下Java的版本</p>{| '''225'''class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''226java --version'''</p><p>openjdk 17.0.2 2022-01-18</p>| '''PH2'''<p>OpenJDK Runtime Environment (build 17.0.2+8-Ubuntu-120.04)</p>| '''UART5_TX'''<p>OpenJDK 64-Bit Server VM (build 17.0.2+8-Ubuntu-120.04, mixed mode, sharing)</p>| '''11'''}|</li>| <li><p>编写Java版本的'''12hello_world.java'''</p>{| class="wikitable" style="text-alignwidth: left800px;"|| '''PI1'''| '''257'''
|-
| <p>orangepi@orangepi:~$ '''227vim hello_world.java'''</p><p>public class hello_world</p>| '''PH3'''<p>{</p>:<p>public static void main(String[] args)</p>:<p>{</p>::<p>System.out.println(&quot;Hello World!&quot;);</p>| '''UART5_RX''':<p>}</p>| '''13'''<p>}</p>|}| '''14'''</li>| <li><p>然后编译运行'''GNDhello_world.java'''</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| <p>orangepi@orangepi:~$ '''261javac hello_world.java'''</p>| <p>orangepi@orangepi:~$ '''PI5java hello_world'''</p><p>Hello World!</p>| '''UART2_TX'''}</li></ol></li></ol> <span id="ubuntu-jammy系统"></span> === Ubuntu Jammy系统 ===| '''15'''|<ol style="list-style-type: decimal;">| '''16'''<li><p>Ubuntu Jammy默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p>| '''PWM4'''<ol style="list-style-type: lower-alpha;">| '''PI14'''<li><p>gcc的版本如下所示</p>{| '''270'''class="wikitable" style="width:800px;"
|-
| style="text-align: left;"|| style="text-align<p>orangepi@orangepi: left;"|| ~$ '''3.3Vgcc --version'''</p>| <p>gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) '''1711.3.0'''</p><p>Copyright (C) 2021 Free Software Foundation, Inc.</p><p>This is free software; see the source for copying conditions. There is NO</p><p>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p>|}</li>| <li><p>编写C语言的'''18hello_world.c'''程序</p>{| class="wikitable" style="text-alignwidth: left800px;"|| '''PH4'''| '''228'''
|-
| <p>orangepi@orangepi:~$ '''231vim hello_world.c'''</p><p>#include &lt;stdio.h&gt;</p>  <p>int main(void)</p><p>{</p>:<p>printf(&quot;Hello World!\n&quot;);</p> | '''PH7'''| '''SPI1_MOSI''':<p>return 0;</p>| '''19'''<p>}</p>|}| '''20'''</li>| <li><p>然后编译运行'''GNDhello_world.c'''</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| <p>orangepi@orangepi:~$ '''232gcc -o hello_world hello_world.c'''</p>| <p>orangepi@orangepi:~$ '''PH8./hello_world'''</p><p>Hello World!</p>| '''SPI1_MISO'''}| '''21'''</li></ol>|</li>| '''22'''<li><p>Ubuntu Jammy默认安装有Python3</p>| '''UART2_RX'''<ol style="list-style-type: lower-alpha;">| '''PI6'''<li><p>Python3具体版本如下所示</p>{| '''262'''class="wikitable" style="width:800px;"
|-
| '''230'''| <p>orangepi@orangepi:~$ '''PH6python3'''</p>| '''SPI1_CLK'''| '''23'''|<p>Python 3.10.6 (main, May 29 2023, 11:10:38) [GCC 11.3.0] on linux</p>| '''24'''<p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p>| '''SPI1_CS0'''<p>&gt;&gt;&gt;</p>| '''PH5'''}{| '''229'''class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| style="text-align: left;"|| style="text-align: left;"|| <big><p>'''GND使用Ctrl+D快捷键可退出python的交互模式。'''</p></big>| '''25'''}|</li>| <li><p>编写Python语言的'''26hello_world.py'''程序</p>{| '''SPI1_CS1'''| '''PH9'''| '''233'''class="wikitable" style="width:800px;"
|-
| '''266'''| <p>orangepi@orangepi:~$ '''PI10vim hello_world.py'''</p>| <p>print('Hello World!''TWI2-SDA'''| '''27'''|)</p>| '''28'''}| '''TWI2-SCL'''</li>| <li><p>运行'''PI9hello_world.py'''的结果如下所示</p>{| '''265'''class="wikitable" style="width:800px;"
|-
| '''256'''| <p>orangepi@orangepi:~$ '''PI0python3 hello_world.py'''</p>| style="text-align: left;"|<p>Hello World!</p>| '''29'''}|</li></ol>| '''30'''</li>| '''GND'''<li><p>Ubuntu Jammy默认没有安装Java的编译工具和运行环境</p>| <ol style="textlist-style-aligntype: leftlower-alpha;"|><li><p>可以使用下面的命令安装openjdk-18</p>{| class="wikitable" style="text-alignwidth: left800px;"|
|-
| <p>orangepi@orangepi:~$ '''271sudo apt install -y openjdk-18-jdk'''</p>| '''PI15'''}</li><li><p>安装完后可以查看下Java的版本</p>{| class="wikitable" style="text-alignwidth: left800px;"|| '''31'''|| '''32'''| '''PWM1'''| '''PI11'''| '''267'''
|-
| <p>orangepi@orangepi:~$ '''268java --version'''</p><p>openjdk 18.0.2-ea 2022-07-19</p><p>OpenJDK Runtime Environment (build 18.0.2-ea+9-Ubuntu-222.04)</p><p>OpenJDK 64-Bit Server VM (build 18.0.2-ea+9-Ubuntu-222.04, mixed mode, sharing)</p>| }</li><li><p>编写Java版本的'''PI12hello_world.java'''</p>{| '''PWM2'''class="wikitable" style="width:800px;" | '''33'''-|| <p>orangepi@orangepi:~$ '''34vim hello_world.java'''</p><p>public class hello_world</p><p>{</p>:<p>public static void main(String[] args)</p>:<p>{</p>::<p>System.out.println(&quot;Hello World!&quot;);</p>:<p>}</p><p>}</p>| }</li><li><p>然后编译运行'''GNDhello_world.java'''</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| '''258'''| '''PI2'''| style="text-align<p>orangepi@orangepi: left;"|| ~$ '''35javac hello_world.java'''</p>|| '''36'''| style="text-align<p>orangepi@orangepi: left;"|| ~$ '''PC12java hello_world'''</p>| '''76'''<p>Hello World!</p>
|}
</li></ol>
</li></ol>
<ol startspan id="2上传文件到开发板linux系统中的方法" style="list-style-type: decimal;"><li>SPI1 CS0对应的设备节点为'''/dev/spidev1.0''',SPI1 CS1对应的设备节点为'''/dev/spidev1.1'''</li></olspan>
apollo-p2:/ # '''ls /dev/spidev1.*'''== 上传文件到开发板Linux系统中的方法 ==
'''<span id="在ubuntu-pc中上传文件到开发板linux系统中的方法"></dev/spidev1.0 /dev/spidev1.1'''span>=== 在Ubuntu PC中上传文件到开发板Linux系统中的方法 ===
<ol start="3" style="list-style-type: decimal;"><li>这里演示下通过'''w25qxx'''模块来测试SPI1接口,首先在SPI1接口接入w25qxx模块</li></ol>== 使用scp命令上传文件的方法 ====
'''<span classol style="marklist-style-type: decimal;">如果没有<li><p>使用scp命令可以在Ubuntu PC中上传文件到开发板的Linux系统中,具体命令如下所示</spanp>w25qxx模块也没关系,因为开发板上有一个SPIFlash接在了SPI0上,在安卓中SPI0的配置默认也打开了,所以我们也可以直接使用板载的SPIFlash测试。''' <ol start="4" style="list-style-type: decimallower-alpha;"><li><p>然后在桌面中打开wiringOP APP</p><p>[[File:media/image355.png]]'''file_path:'''需要替换为要上传文件的路径</p></li><li><p>然后点击'''SPI_TESTorangepi:'''按钮打开SPI的测试界面为开发板linux系统的用户名,也可以替换成其它的,比如root</p></li><li><p>[[File'''192.168.xx.xx:media/image369.png]]''' 为开发板的IP地址,请根据实际情况进行修改</p></li><li><p>然后在左上角选择spi的设备节点,如果直接测试板载的SPIFlash,那么保持默认的'''/devhome/spidev0.0orangepi:'''即可,如果在40pin的spi1 cs0上接了开发板linux系统中的路径,也可以修改为其它的路径</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''w25qxx'''模块,那么就请选择'''/devscp file_path orangepi@192.168.xx.xx:/spidev1.0''',如果在40pin的spi1 cs1上接了'''w25qxx'''模块,那么就请选择'''home/devorangepi/spidev1.1'''</p>|}<p/li>[[File:media/image370.png]]</pol></li><li><p>然后点击如果要上传文件夹,需要加上-r参数</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''OPENscp <span style="color:#FF0000">-r</span> dir_path orangepi@192.168.xx.xx:/home/orangepi/'''按钮初始化SPI</p>|}</li><li><p>scp还有更多的用法,请使用下面的命令查看man手册</olp></li>{| class="wikitable" style="width:800px;" |-[[File| test@test:media~$ '''man scp'''|}</image371.png]]ol> ==== 使用filezilla上传文件的方法 ==== <ol start="8" style="list-style-type: decimal;"><li><p>然后填充需要发送的字节,比如读取板载SPIFlash的ID信息,在data[0]中填入地址0x9f,然后点击首先在Ubuntu PC中安装filezilla</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''sudo apt install -y filezilla'''</p>|}</li><li><p>然后使用下面的命令打开filezilla</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''TRANSFERfilezilla'''按钮</p>|}</li><li><p>filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的</p><div class="figure"> [[File:media/image372zero2w-img259.png]] </pdiv></li><li><p>最后APP会显示读取到的板载SPI Flash的ID信息连接开发板的方法如下图所示</p></li> </oldiv class="figure">
[[File:media/image373zero2w-img260.png]]
</div></ol><ol start="105" style="list-style-type: decimal;"><li>如果是读取接在40pin SPI1上的w25qxx模块,和板载SPI Flash的ID信息也是类似的<p>然后选择'''保存密码''',再点击'''确定'''</p><p>[[File:zero2w-img261.png]]</p></li><li><p>然后选择'''总是信任该主机''',再点击'''确定'''</p></olli>
<span iddiv class="pin的i2c测试方法figure"></span>=== 40pin的I2C测试方法 ===
# 由下表可知,Android12 TV系统默认打开了i2c1和i2c2[[File:zero2w-img262.png]]
{| </div></ol><ol start="7" style="list-style-type: decimal;"><li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了</li> <div class="wikitablefigure">|[[File:zero2w-img263.png]]| '''GPIO序号'''| '''GPIO'''</div></ol>| '''功能'''<ol start="8" style="list-style-type: decimal;">| '''引脚'''<li>然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Ubuntu PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了。</li>|| '''引脚'''<div class="figure">| '''功能'''| '''GPIO'''[[File:zero2w-img264.png]]| '''GPIO序号'''|-</div></ol>| <ol start="9" style="textlist-style-aligntype: leftdecimal;"|><li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了</p></li><li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol> | style<span id="text在windows-align: left;pc中上传文件到开发板linux系统中的方法"|></span> === 在Windows PC中上传文件到开发板Linux系统中的方法 ===| '''3.3V'''| '''<span id="使用filezilla上传文件的方法-1'''"></span>==== 使用filezilla上传文件的方法 ====|| '''2'''# 首先下载filezilla软件Windows版本的安装文件,下载链接如下所示| '''5V'''::{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| [https://filezilla-project.org/download.php?type=client '''264https://filezilla-project.org/download.php?type=client''']| '''PI8'''} | '''TWI1::[[File:zero2w-SDA'''img265.png]]| '''3'''|::[[File:zero2w-img266.png]]| '''4'''| '''5V'''| <ol start="2" style="textlist-style-aligntype: leftdecimal;"|><li><p>下载的安装包如下所示,然后双击直接安装即可</p>{| class="wikitable" style="text-alignwidth: left800px;"|
|-
| <p>'''263FileZilla_Server_1.5.1_win64-setup.exe'''</p>| } 安装过程中,下面的安装界面请选择'''Decline''PI7',然后再选择'''Next&gt;''' <div class="figure"> [[File:zero2w-img267.png]] </div></li></ol><ol start="3" style="list-style-type: decimal;"><li>filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的</li> <div class="figure"> [[File:zero2w-img268.png]] </div></ol><ol start="4" style="list-style-type: decimal;"><li>连接开发板的方法如下图所示:</li> <div class="figure"> [[File:zero2w-img269.png]] </div></ol><ol start="5" style="list-style-type: decimal;">| <li>然后选择'''TWI1-SCL保存密码'''| ,再点击'''5确定'''</li> |<div class="figure"> [[File:zero2w-img270.png]] </div></ol><ol start="6" style="list-style-type: decimal;">| <li>然后选择'''6总是信任该主机'''| ,再点击'''GND确定'''</li> <div class="figure"> [[File:zero2w-img271.png]] </div></ol><ol start="7" style="list-style-type: decimal;"><li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了</li> <div class="figure"> | [[File:zero2w-img272.png]] </div></ol><ol start="8" style="list-style-type: decimal;"><li>然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Windows PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了</li> <div class="figure"> [[File:zero2w-img273.png]] </div></ol><ol start="9" style="textlist-alignstyle-type: leftdecimal;"|><li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了</p></li><li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol> == 开关机logo使用说明 == | <ol style="textlist-alignstyle-type: leftdecimal;"><li><p>开关机logo默认只在桌面版的系统中才会显示</p></li><li><p>在'''/boot/orangepiEnv.txt'''中设置'''bootlogo'''变量为'''false'''可以关闭开关机logo</p>{|class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''269sudo vim /boot/orangepiEnv.txt'''</p>| '''PI13'''<p>verbosity=1</p>| <p>'''PWM3<span style="color:#FF0000">bootlogo=false</span>'''</p>| '''7'''}|</li>| <li><p>在'''8/boot/orangepiEnv.txt'''| 中设置'''UART0_TXbootlogo'''| 变量为'''PH0true'''可以开启开关机logo</p>{| '''224'''class="wikitable" style="width:800px;"
|-
| style="text-align: left;"|| style="text-align<p>orangepi@orangepi: left;"|| ~$ '''GNDsudo vim /boot/orangepiEnv.txt'''</p>| <p>verbosity=1</p><p>'''9<span style="color:#FF0000">bootlogo=true</span>'''</p>|}| '''10'''| '''UART0_RX'''</li>| '''PH1'''<li><p>开机logo图片在linux系统中的位置为</p>{| '''225'''class="wikitable" style="width:800px;"
|-
| '''226'''| <p>'''PH2/usr/share/plymouth/themes/orangepi/watermark.png'''</p>| '''UART5_TX'''}| '''11'''</li>|| '''12'''<li><p>替换开机logo图片后需要运行下命令才能生效</p>{| class="wikitable" style="text-alignwidth: left800px;"|| '''PI1'''| '''257'''
|-
| <p>orangepi@orangepi:~$ '''227sudo update-initramfs -u'''</p>| '''PH3'''}</li></ol> <span id="linux5.4打开开关机按键的方法"></span> == Linux5.4打开开关机按键的方法 == 开发板主板上没有开关机按键,我们可以通过24pin扩展板来扩展。开关机按键在扩展板上的位置如下所示: [[File:zero2w-img274.png]] | '''UART5_RX'''Linux6.1镜像开关机按键默认是打开的,但Linux5.4内核镜像的开关机按键默认是关闭的,需要手动打开才能正常使用。步骤如下所示:| '''13'''|<ol style="list-style-type: decimal;">| <li><p>首先运行下'''14orangepi-config'''| ,普通用户记得加'''GNDsudo'''权限</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| <p>orangepi@orangepi:~$ '''261sudo orangepi-config'''</p>| }</li><li><p>然后选择'''PI5System'''</p><p>[[File:zero2w-img81.png]]</p></li>| <li><p>然后选择'''UART2_TXHardware'''</p>| <p>[[File:zero2w-img82.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''15空格'''选中想要打开的SPI的dtbo配置</p>|<p>[[File:zero2w-img275.png]]</p></li>| <li><p>然后选择'''16&lt;Save&gt;'''保存</p>| <p>[[File:zero2w-img84.png]]</p></li><li><p>然后选择'''PWM4&lt;Back&gt;'''</p>| <p>[[File:zero2w-img85.png]]</p></li><li><p>然后选择'''PI14&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:zero2w-img86.png]]</p></li></ol> == 关机和重启开发板的方法 == | <ol style="list-style-type: decimal;"><li><p>在Linux系统运行的过程中,如果直接拔掉电源断电,可能会导致文件系统丢失某些数据,建议断电前先使用'''270poweroff'''命令关闭开发板的Linux系统,然后再拔掉电源</p>{| class="wikitable" style="width:800px;"
|-
| style="text-align: left;"|| style="text-align<p>orangepi@orangepi: left;"|| ~$ '''3.3Vsudo poweroff'''</p>| '''17'''|| '''18'''}{| class="wikitable" style="textbackground-aligncolor:#ffffdc;width: left800px;"|| '''PH4'''| '''228'''
|-
| '''231'''| <big><p>'''PH7注意,关闭开发板后需要重新拔插电源才能开机。'''</p></big>| '''SPI1_MOSI'''}| '''19'''</li>|<li><p>除了使用poweroff命令关机外,还可以使用扩展板上的开关机按键来关机</p>| '''20'''| '''GND'''<p>[[File:zero2w-img274.png]]</p>{| styleclass="text-align: left;wikitable"|| style="textbackground-aligncolor:#ffffdc;width: left800px;"|
|-
| '''232'''| '''PH8'''| <big><p>'''SPI1_MISO'''注意,Linux5.4需要手动打开开关机按键的配置才能使用。打开方法请参考[[Orange Pi Zero 2W#Linux5.4打开开关机按键的方法| Linux5.4打开开关机按键的方法]]。'''21'''</p></big>|}| '''22'''| '''UART2_RX'''</li>| <li><p>使用'''PI6reboot'''命令即可重启开发板中的Linux系统</p>{| '''262'''class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''230sudo'''| '''PH6reboot'''</p>| }</li></ol> <span id="linux-sdkorangepi-build使用说明"></span> = '''SPI1_CLKLinux SDK——orangepi-build使用说明'''=| '''23'''|== 编译系统需求 == | Linux SDK,即'''24orangepi-build'''| ,只支持在安装有'''SPI1_CS0<span style="color:#FF0000">Ubuntu 22.04</span>'''| 的X64电脑上运行,所以下载orangepi-build前,请首先确保自己电脑已安装的Ubuntu版本是Ubuntu 22.04。查看电脑已安装的Ubuntu版本的命令如下所示,如果Release字段显示的不是'''PH5<span style="color:#FF0000">22.04</span>''',说明当前使用的Ubuntu版本不符合要求,请更换系统后再进行下面的操作。 {| '''229'''class="wikitable" style="width:800px;"
|-
| style="texttest@test:~$ '''lsb_release -aligna''' No LSB modules are available. Distributor ID: Ubuntu Description: left;"|Ubuntu 22.04 LTS | Release: '''<span style="text-aligncolor: left;#FF0000"|| '''GND>22.04</span>'''| Codename: '''25jammy'''|}| 如果电脑安装的是Windows系统,没有安装有Ubuntu 22.04的电脑,可以考虑使用'''26VirtualBox'''| 或者'''SPI1_CS1VMware'''| 来在Windows系统中安装一个Ubuntu 22.04虚拟机。但是请注意,不要在WSL虚拟机上编译orangepi-build,因为orangepi-build没有在WSL虚拟机中测试过,所以无法确保能正常在WSL中使用orangepi-build,另外请不要在'''PH9开发板'''| 的Linux系统中使用orangepi-build。Ubuntu 22.04 '''233<span style="color:#FF0000">amd64</span>'''版本的安装镜像下载地址为: {| class="wikitable" style="width:800px;"
|-
| '''266'''| [https://repo.huaweicloud.com/ubuntu-releases/21.04/ubuntu-21.04-desktop-amd64.iso '''PI10https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/ubuntu-22.04-desktop-amd64.iso''']| '''TWI2-SDA'''}| '''27'''|在电脑中或者虚拟机中安装完Ubuntu 22.04后,请先设置Ubuntu 22.04的软件源为清华源(或者其它你觉得速度快的国内源),不然后面安装软件的时候很容易由于网络原因而出错。替换清华源的步骤如下所示:| '''28'''| '''TWI2<ol style="list-style-type: lower-SCL'''alpha;">| '''PI9'''<li>替换清华源的方法参考这个网页的说明即可。</li>{| '''265'''class="wikitable" style="width:800px;"
|-
| [https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ '''256https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/''']| '''PI0'''}</ol>| <ol start="2" style="textlist-style-aligntype: leftlower-alpha;"|| '''29'''>|<li><p>注意Ubuntu版本需要切换到22.04。</p>| '''30'''<p>[[File:zero2w-img276.png]]</p></li>| <li><p>需要替换的'''GND/etc/apt/sources.list'''文件的内容为:</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| <p>test@test:~$ '''271sudo mv /etc/apt/sources.list cat /etc/apt/sources.list.bak'''</p>| <p>test@test:~$ '''PI15sudo vim /etc/apt/sources.list'''</p><p># 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释</p><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse</p><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse</p><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse</p><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse</p>| style="text<p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</p><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</p><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse</p><p># deb-alignsrc https: left;"|//mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse</p>  <p># 预发布软件源,不建议启用</p>| '''31'''<p># deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse</p>|<p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse</p>| '''32'''}| '''PWM1'''</li>| '''PI11'''<li><p>替换完后需要更新下包信息,并确保没有报错。</p>{| '''267'''class="wikitable" style="width:800px;"
|-
| '''268'''| '''PI12'''| '''PWM2'''| '''33'''|| '''34'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''258'''| '''PI2'''| style="text-align: left;"|| '''35'''|| '''36'''| style="text-align: left;"|| '''PC12'''| '''76'''|-| '''272'''| '''PI16'''| style="text-align: left;"|| '''37'''|| '''38'''| style="text-align: left;"|| '''PI4'''| '''260'''|-| style="text-align: left;"|| style="text-align<p>test@test: left;"|| '''GND'''| ~$ '''39'''|| '''40'''| style="textsudo apt-align: left;"|| '''PI3'''| '''259get update'''</p>
|}
</li>
<li><p>'''<span style="color:#FF0000">另外,由于内核和U-boot等源码都是存放在GitHub上的,所以编译镜像的时候请确保电脑能正常从GitHub下载代码,这点是非常重要的。</span>'''</p></li></ol>
 
<span id="获取linux-sdk的源码"></span>
 
== 获取linux sdk的源码 ==
<ol start="2" style="list= 从github下载orangepi-style-type: decimal;"><li><p>i2c1对应的设备节点为'''/dev/i2c-1''',i2c2对应的设备节点为'''/dev/i2c-2'''</p><p>apollo-p2:/ # '''ls /dev/i2c-*'''</p><p>'''/dev/i2c-1 /dev/i2c-2''' /dev/i2c-5</p></li><li><p>首先在桌面中打开wiringOP APP</p><p>[[File:media/image355.png]]</p></li><li><p>然后点击'''I2C_TEST'''按钮打开i2c的测试界面</p><p>[[File:media/image374.png]]</p></li><li><p>wiringOP的i2c测试界面如下图所示</p></li></ol>build ===
[[File:media/image375.png]]linux sdk指的是orangepi-build这套代码,orangepi-build是基于armbian build编译系统修改而来的,使用orangepi-build可以编译出多个版本的linux镜像。使用下面的命令可以下载orangepi-build的代码:
<ol start{| class="6wikitable" style="list-style-typewidth: decimal800px;"><li><p>然后点击左上角的设备节点选择框选择想要测试的i2c</p>|-<p>[[File:media/image376.png]]</p></li><li><p>然后在40pin的i2c引脚上接一个i2c设备,这里以ds1307 rtc模块为例</p>| <p>[[Filetest@test:media/image181.png]]</p></li><li><p>ds1307 rtc模块的i2c地址为0x68,接好线后,我们可以在串口命令行中使用~$ '''i2cdetect sudo apt-y 1get update'''或'''i2cdetect -y 2'''命令查看下是否能扫描到ds1307 rtc模块的i2c地址。如果能看到0x68这个地址,说明ds1307 rtc模块接线正确。</p><p>apollo-p2test@test:/ # ~$ '''i2cdetect sudo apt-get install -y 1git'''</p><p>'''或'''</p><p>apollo-p2test@test:/ # ~$ '''i2cdetect -y 2'''<git clone https:/p><p>[[File:media/image377github.png]]<com/p><orangepi-xunlong/li><li><p>然后在wiringOP中设置i2c的地址为0x68,再点击'''OPEN'''按钮打开i2c</p><p>[[File:media/image378orangepi-build.png]]</p></li><li><p>点击git -b next'''OPEN'''按钮打开i2c后的显示如下所示</p><p>[[File:media/image379.png]]</p></li>|}<li><p>然后我们测试下往rtc模块的寄存器中写入一个值,比如往0x1c地址写入0x55</p><ol {| class="wikitable" style="listbackground-style-typecolor:#ffffdc;width: lower-alpha800px;"><li><p>我们首先设置需要写入的寄存器的地址为0x1c</p><p>[[File:media/image380.png]]</p></li><li><p>然后设置需要写入的值为0x55</p>|-<p>[[File:media/image381.png]]</p></li>| <li><pbig>然后点击'''WRITE BYTE'''按钮执行写入的动作</p><p>[[File:media/image382.png]]</p></li></ol></li><li><p>然后点击'''READ BYTE注意,使用H618 Soc的开发板是需要下载orangepi-build的next分支源码的,上面的git clone命令需要指定orangepi-build源码的分支为next。'''按钮读取下0x1c寄存器的值,如果显示为0x55,就说明i2c读写测试通过</p><p>[[File:media/image383.png]]</p></li></ol>
[[File:zero2w-img277.png|center|795px]]<span id/big>|}{| class="pin的pwm测试wikitable"style="background-color:#ffffdc;width:800px;" |-| <big>'''通过git clone命令下载orangepi-build的代码是不需要输入github账号的用户名和密码的(下载本手册中的其他代码也是一样的),如果如输入git clone命令后Ubuntu PC提示需要输入github账号的用户名和密码,一般都是git clone后面的orangepi-build仓库的地址输入错误了,请仔细检查命令拼写是否有错误,而不是以为我们这里忘了提供github账号的用户名和密码。'''</spanbig>=== 40pin的PWM测试 ===|}
# 由下表可知,可用的pwm为pwm1、pwm2、pwm3和pwm4。H618系列开发板当前使用的u-boot和linux内核版本如下所示:
{| class="wikitable" style="width:800px;text-align: center;"
|-
| '''GPIO序号分支'''| '''GPIOu-boot版本'''| '''功能'''| '''引脚'''|| '''引脚'''| '''功能'''| '''GPIO'''| '''GPIO序号linux内核版本'''
|-
| style="text-align: left;"|| style="text-align: left;"|| '''3.3Vcurrent'''| '''1u-boot v2018.05'''|| '''2'''| '''5Vlinux5.4'''| style="text-align: left;"|| style="text-align: left;"|
|-
| '''264next'''| '''PI8'''| '''TWI1u-SDAboot v2021.07'''| '''3linux6.1'''|}| '''4'''{| '''5V'''| styleclass="text-align: left;wikitable"|| style="textbackground-aligncolor:#ffffdc;width: left800px;"|
|-
| <big>'''263这里所说的分支和orangepi-build源代码的分支不是同一个东西,请不要搞混了。此分支主要是用来区分不同内核源码版本的。'''| '''PI7目前全志提供的linux5.4 bsp内核我们定义为current分支。最新的linux6.1 LTS内核定义为next分支。'''</big>| } orangepi-build下载完后会包含下面的文件和文件夹: <ol style="list-style-type: lower-alpha;"><li><p>'''TWI1-SCLbuild.sh''': 编译启动脚本</p></li>| <li><p>'''5external''': 包含编译镜像需要用的配置文件、特定的脚本以及部分程序的源码等</p></li>|<li><p>'''LICENSE''': GPL 2许可证文件</p></li>| <li><p>'''6README.md''': orangepi-build说明文件</p></li>| <li><p>'''GNDscripts''': 编译linux镜像的通用脚本</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| '''269'''| '''PI13'''| '''PWM3'''| '''7'''|| <p>test@test:~/orangepi-build$ '''8ls'''</p>| <p>'''UART0_TXbuild.sh external LICENSE README.md scripts'''</p>| '''PH0'''}{| '''224'''class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
| style="text-align: left;"|| style="text-align: left;"|| <big><p>'''GND如果是从github下载的orangepi-build的代码,下载完后你可能会发现orangepi-build中并没有包含u-boot和linux内核的源码,也没有编译u-boot和linux内核需要用到交叉编译工具链,这是正常的,因为这些东西都存放在其它单独的github仓库或者某些服务器上了(下文会详述其地址)。orangepi-build在脚本和配置文件中会指定u-boot、linux内核和交叉编译工具链的地址,运行orangepi-build时,当其发现本地没有这些东西,会自动去相应的地方下载的。'''</p></big>| '''9'''}</li></ol> === 下载交叉编译工具链 ===|| orangepi-build第一次运行的时候会自动下载交叉编译工具链放在'''10toolchains'''| 文件夹中,每次运行orangepi-build的build.sh脚本后,都会检查'''UART0_RXtoolchains'''中的交叉编译工具链是否都存在,如果不存在则会重新开始下载,如果存在则直接使用,不会重复下载。 <div class="figure"> [[File:zero2w-img278.png]] </div>交叉编译工具链在中国境内的镜像网址为清华大学的开源软件镜像站:| '''PH1'''{| '''225'''class="wikitable" style="width:800px;"
|-
| [https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/ '''226https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/''']| '''PH2'''}| '''UART5_TX'''| '''11toolchains'''下载完后会包含多个版本的交叉编译工具链:|| '''12'''{| class="wikitable" style="text-alignwidth: left800px;"|| '''PI1'''| '''257'''
|-
| test@test:~/orangepi-build$ '''227ls toolchains/'''| '''PH3'''| '''UART5_RX'''gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu  gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu  gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf  gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi  gcc-linaro-aarch64-none-elf-4.8-2013.11_linux gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu  gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf  gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf  gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu  gcc-linaro-arm-none-eabi-4.8-2014.04_linux| '''13'''}|| '''14'''编译H618 Linux内核源码使用的交叉编译工具链为:| '''GND'''| <ol style="textlist-style-aligntype: leftlower-alpha;"|><li><p>linux5.4</p>{| class="wikitable" style="text-alignwidth: left800px;"|
|-
| '''261'''| <p>'''PI5gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''</p>| '''UART2_TX'''}| '''15'''</li>|<li><p>linux6.1</p>{| '''16'''| '''PWM4'''| '''PI14'''| '''270'''class="wikitable" style="width:800px;"
|-
| style="text-align: left;"|| style="text-align: left;"|| <p>'''3gcc-arm-11.3V2-2022.02-x86_64-aarch64-none-linux-gnu'''</p>| '''17'''}</li></ol>|<p>编译H618 u-boot源码使用的交叉编译工具链为:</p>| '''18'''| <ol style="textlist-style-aligntype: leftlower-alpha;"|>| '''PH4'''<li><p>v2018.05</p>{| '''228'''class="wikitable" style="width:800px;"
|-
| '''231'''| <p>'''PH7'''| '''SPI1_MOSI'''| '''19gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi'''</p>|}| '''20'''</li>| '''GND'''<li><p>v2021.07</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| <p>'''232gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''</p>| '''PH8'''}</li></ol> === orangepi-build完整目录结构说明 === | '''SPI1_MISO'''<ol style="list-style-type: decimal;">| '''21'''<li><p>orangepi-build仓库下载完后并不包含linux内核、u-boot的源码以及交叉编译工具链,linux内核和u-boot的源码存放在独立的git仓库中</p>|<ol style="list-style-type: lower-alpha;">| '''22'''<li><p>linux内核源码存放的git仓库如下,注意切换linux-orangepi仓库的分支为</p>| '''UART2_RX'''<ol style="list-style-type: none;">| '''PI6'''<li><p>a) Linux5.4</p>{| '''262'''class="wikitable" style="width:800px;"
|-
| '''230'''| <p>https://github.com/orangepi-xunlong/linux-orangepi/tree/'''PH6orange-pi-5.4-sun50iw9'''</p>| '''SPI1_CLK'''}| '''23'''</li>|<li><p>b) Linux6.1</p>{| '''24'''| '''SPI1_CS0'''| '''PH5'''| '''229'''class="wikitable" style="width:800px;"
|-
| style="text<p>https://github.com/orangepi-align: left;"|| style="textxunlong/linux-align: left;"|| orangepi/tree/'''GNDorange-pi-6.1-sun50iw9'''</p>| '''25'''}</li></ol>|</li>| '''26'''<li><p>u-boot源码存放的git仓库如下,注意切换u-boot-orangepi仓库的分支为</p>| '''SPI1_CS1'''<ol style="list-style-type: none;">| '''PH9'''<li><p>a) v2018.05</p>{| '''233'''class="wikitable" style="width:800px;"
|-
| '''266'''| '''PI10'''| <p>https://github.com/orangepi-xunlong/u-boot-orangepi/tree/'''TWI2v2018.05-SDAh618'''</p>| '''27'''}|</li>| '''28'''| '''TWI2-SCL'''<li><p>b) v2021.07</p></li>{| '''PI9'''| '''265'''class="wikitable" style="width:800px;"
|-
| https://github.com/orangepi-xunlong/u-boot-orangepi/tree/'''256v2021.07-sunxi'''| }</ol></li></ol></li></ol><ol start="2" style="list-style-type: decimal;"><li><p>orangepi-build第一次运行的时候会去下载交叉编译工具链、u-boot和linux内核源码,成功编译完一次linux镜像后在orangepi-build中可以看到的文件和文件夹有</p><ol style="list-style-type: lower-alpha;"><li><p>'''build.sh''': 编译启动脚本</p></li><li><p>'''external''': 包含编译镜像需要用的配置文件、特定功能的脚本以及部分程序的源码,编译镜像过程中缓存的rootfs压缩包也存放在external中</p></li><li><p>'''kernel''': 存放linux内核的源码</p></li><li><p>'''PI0LICENSE''': GPL 2许可证文件</p></li>| style="text<li><p>'''README.md''': orangepi-alignbuild说明文件</p></li><li><p>'''output''': left;"|存放编译生成的u-boot、linux等deb包、编译日志以及编译生成的镜像等文件</p></li>| <li><p>'''29scripts''': 编译linux镜像的通用脚本</p></li>|<li><p>'''toolchains''': 存放交叉编译工具链</p></li>| <li><p>'''30u-boot''': 存放u-boot的源码</p></li>| <li><p>'''GNDuserpatches''': 存放编译脚本需要用到的配置文件</p>{| styleclass="text-align: left;wikitable"|| style="text-alignwidth: left800px;"|
|-
| <p>test@test:~/orangepi-build$ '''271ls'''</p>| <p>'''PI15build.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'''</p>| }</li></ol></li></ol> == 编译u-boot == <ol style="textlist-alignstyle-type: leftdecimal;"|>| '''31'''<li><p>运行build.sh脚本,记得加sudo权限</p>{|| '''32'''| '''PWM1'''| '''PI11'''| '''267'''class="wikitable" style="width:800px;"
|-
| <p>test@test:~/orangepi-build$ '''268sudo ./build.sh'''</p>| }</li><li><p>选择'''PI12U-boot package''',然后回车</p><div class="figure"> [[File:zero2w-img279.png]]| '''PWM2'''| '''33'''</div></li>|<li><p>接着选择开发板的型号</p>| '''34'''<p>[[File:zero2w-img280.png]]</p></li>| '''GND'''<li><p>然后选择u-boot的分支类型</p>| <ol style="textlist-style-aligntype: leftlower-alpha;"|><li><p>current分支会编译linux5.4镜像需要使用的u-boot v2018.05版本的代码</p></li><li><p>next分支会编译linux6.1镜像需要使用的u-boot v2021.07版本的代码</p><p>[[File:zero2w-img281.png]]</p></li></ol></li><li><p>如果选择的next分支还会提示需要选择内存的大小,current分支不需要选择</p>| <ol style="textlist-style-aligntype: leftlower-alpha;"|><li><p>如果购买的开发板为1.5GB内存大小的,请选择第一项</p></li><li><p>如果购买的开发板为1GB或2GB或4GB内存大小的,请选择第二项</p><p>[[File:zero2w-img282.png]]</p></li></ol></li>|<li><p>然后就会开始编译u-boot,编译next分支时提示的部分信息说明如下所示:</p>| '''258'''<ol style="list-style-type: lower-alpha;">| '''PI2'''<li><p>u-boot源码的版本</p>{| class="wikitable" style="text-alignwidth: left800px;"|-| <p>[ o.k. ] Compiling u-boot [ '''35v2021.07''']</p>|}| '''36'''</li><li><p>交叉编译工具链的版本</p>{| class="wikitable" style="text-alignwidth: left800px;"|| '''PC12'''| '''76'''
|-
| <p>[ o.k. ] Compiler version [ '''272aarch64-linux-gnu-gcc 11''']</p>| '''PI16'''}</li><li><p>编译生成的u-boot deb包的路径</p>{| styleclass="text-align: left;wikitable"|| '''37'''|| '''38'''| style="text-alignwidth: left800px;"|| '''PI4'''| '''260'''
|-
| style="text-align: left;"|| style="text-align: left;"|| <p>[ o.k. ] Target directory [ '''GND'''| '''39'''|| '''40'''| style="textorangepi-build/output/debs/u-align: left;"|| '''PI3'''| '''259boot''']</p>
|}
 <ol start="2" style="list-style-type: decimal;"/li><li><p>首先点击wiringOP图标打开wiringOP APP编译生成的u-boot deb包的包名</p>{| class="wikitable" style="width:800px;" |-| <p>[o.k. ] File name [File:media/image355'''linux-u-boot-next-orangepizero2w_x.x.x_arm64.png]deb''' ]</p>|}</li><li><p>然后在wiringOP的主界面点击'''PWM_TEST'''按钮进入PWM的测试界面编译使用的时间</p>{| class="wikitable" style="width:800px;" |-| <p>[[File:media/image384o.k.png]Runtime [ '''1 min''' ]</p>|}</li><li><p>PWM测试界面如下所示重复编译u-boot的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译u-boot</p><div {| class="figurewikitable" style="width:800px;">|-| <p>[o.k. ] Repeat Build Options [File:media'''sudo ./image385build.png]sh BOARD=orangepizero2w BRANCH=next BUILD_OPT=u-boot''' ]</p>|}</divli></ol></li><li><p>然后在Channel中设置下想用哪个PWM,默认是PWM1,如果想设置为PWM2,则在Channel中输入2即可,PWM3和PWM4以此类推查看编译生成的u-boot deb包</p>{| class="wikitable" style="width:800px;" |-| <p>[[Filetest@test:media~/image386.png]]orangepi-build$ '''ls output/debs/u-boot/'''</p></li><li><p>然后可以设置下PWM的周期,默认的配置是'''50000ns''',转换为PWM频率是'''20KHzlinux-u-boot-next-orangepizero2w_x.x.x_arm64.deb'''</p><p>[[File:media/image387.png]]</p>|}</li><li><p>然后点击orangepi-bulid编译系统编译u-boot源码时首先会将u-boot的源码和github服务器的u-boot源码进行同步,所以如果想修改u-boot的源码,首先需要关闭源码的下载更新功能('''EXPORT需要完整编译过一次u-boot后才能关闭这个功能,否则会提示找不到u-boot的源码'''按钮导出PWM),否则所作的修改都会被还原,方法如下:</p><p>[[File:media/image388.png]]</p></li><li><p>然后拖动下面的进度条,就可以改变PWM的占空比,然后勾选设置'''Enableuserpatches/config-default.conf'''就可以输出PWM波形了中的IGNORE_UPDATES变量为”yes”</p></li></ol[[File:media/image389.png]] <ol start{| class="9wikitable" style="list-style-typewidth: decimal800px;">|-| <lip>然后使用示波器测量开发板40pin中的对应引脚就可以看到下面的波形了test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</lip><p>......</olp[[File:media/image390.png]] <p>IGNORE_UPDATES=&quot;'''<span idstyle="android-12源码的编译方法color:#FF0000">yes</span> = '''Android 12源码的编译方法''' =&quot;</p><span id="下载android-12的源码"p>......</spanp>== 下载Android 12的源码 ==|}<ol style="list-style-type: decimal;"/li><li><p>首先从百度或者谷歌网盘下载Android 12源码的分卷压缩包和Orange Pi Zero2w修改的文件的压缩包调试u-boot代码时,可以使用下面的方法来更新linux镜像中的u-boot进行测试</p>
<ol style="list-style-type: lower-alpha;">
<li><p>百度网盘首先将编译好的u-boot的deb包上传到开发板的linux系统中</p>{| class="wikitable" style="width:800px;" |-| <p>[[Filetest@test:media~/image391.png]]orangepi-build$ '''cd output/debs/u-boot'''</p></li><li><p>谷歌网盘test@test:~/orangepi_build/output/debs/u-boot$ '''scp \'''</p><p>'''linux-u-boot-next-orangepizero2w_x.x.x_arm64.deb [[Filemailto:root@192.168.1.xxx:media/image392root root@192.168.1.png]xxx:/root]'''</p></li></ol>|}
</li>
<li><p>Android 12源码的分卷压缩包下载完后,请先检查下MD5校验和是否正确,如果不正确,请重新下载源码。检查MD5校验和的方法如下所示:再安装刚才上传的新的u-boot的deb包</p>{| class="wikitable" style="width:800px;" |-| <p>testorangepi@testorangepi:~$ '''md5sum sudo dpkg -i''' '''linux-u-c H618boot-Android12next-Srcorangepizero2w_x.tarx.gzx_arm64.md5sumdeb'''</p>|}</li><li><p>H618然后运行 nand-Android12sata-install脚本</p>{| class="wikitable" style="width:800px;" |-Src.tar.gzaa| <p>orangepi@orangepi: ~$ '''OKsudo nand-sata-install'''</p>|}</li><li><p>H618-Android12-Src.tar.gzab: 然后选择'''OK5 Install/Update the bootloader on SD/eMMC'''</p><p>[[File:zero2w-img283.png]]</p></li><li><p>按下回车键后首先会弹出一个Warning</p><p>[[File:zero2w-img284.png]]</p></li><li><p>再按下回车键就会开始更新u-boot,更新完后会显示下面的信息</p><p>[[File:zero2w-img285....png]]</p></li><li><p>然后需要将多个压缩文件合并成一个,再解压出安卓源码。命令如下所示:然后就可以重启开发板来测试u-boot的修改是否生效了</p></li></ol></li></ol>
test@test:~$ '''cat H618-Android12-Src.tar.gza* &gt; H618-Android12-Src.tar.gz'''== 编译linux内核 ==
test@test:~$ '''tar -xvf H618-Android12-Src.tar.gz''' <ol start="4" style="list-style-type: decimal;"><li><p>然后解压Orange Pi Zero2w修改的文件的压缩包</p><p>test@test:~$ 运行'''tar zxf opizero2w_android12_patchesbuild.tar.gzsh'''脚本,记得加sudo权限</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''lssudo ./build.sh'''</p><p>'''opizero2w_android12_patches''' opizero2w_android12_patches.tar.gz</p>|}</li><li><p>然后将Orange Pi Zero2w修改的文件复制到安卓源码中</p><p>test@test:~$ 选择'''cp -rf opizero2w_android12_patches/* H618-Android12-Src/Kernel package''',然后回车</p></li></oldiv class="figure">
<span id="编译android[[File:zero2w-12的源码"></span>== 编译Android 12的源码 ==img286.png]]
'''Android12的编译是在安装有Ubuntu 22.04的x86_64电脑上进行的,其它版本的Ubuntu系统包依赖可能会有一些区别,Ubuntu 22.04 amd64版本的镜像下载地址如下所示:'''</div></li><li><p>然后会提示是否需要显示内核配置界面,如果不需要修改内核配置,则选择第一个即可,如果需要修改内核配置,则选择第二个</p><p>[https[File:zero2w-img287.png]]</p></li><li><p>接着选择开发板的型号</repop><p>[[File:zero2w-img280.huaweicloud.compng]]</ubuntu-releasesp></22.04li><li><p>然后选择内核源码的分支类型</ubuntup><ol style="list-22.04.2style-desktoptype: lower-amd64alpha;"><li><p>current分支会编译linux5.iso '''https:4内核源码</p></repoli><li><p>next分支会编译linux6.huaweicloud1内核源码</p><p>[[File:zero2w-img281.compng]]</ubuntu-releasesp></22.04li></ubuntu-22.04.2-desktop-amd64.iso''']ol></li><li><p>如果第3)步选择了需要显示内核配置菜单(第二个选项),则会弹出通过'''编译Android12源码的x86_64电脑硬件配置建议内存为16GB或16GB以上,硬盘空间建议预留200GB或以上,CPU核心数越多越好。make menuconfig'''打开的内核配置的界面,此时可以直接修改内核的配置,修改完后再保存退出即可,退出后会开始编译内核源码。</p><p>[[File:zero2w-img288.png]]</p></li>
<ol style="list-style-type: decimal;">
<li><p>首先安装编译Android12源码需要的软件包</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>'''zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \'''</p>
<p>'''lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache \'''</p>
<p>'''libgl1-mesa-dev libxml2-utils xsltproc unzip u-boot-tools python-is-python3 \'''</p>
<p>'''libssl-dev libncurses5 clang gawk'''</p></li>
<li><p>然后编译'''longan'''文件夹中的代码,里面主要包含u-boot和linux内核</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先运行 如果不需要修改内核的配置选项,在运行build.sh脚本时,传入'''./build.sh configKERNEL_CONFIGURE=no'''设置编译选项就可临时屏蔽弹出内核的配置界面了</p><p>test@test{| class="wikitable" style="width:~$ '''cd H618800px;" |-Android12-Src/longan'''</p>| <p>test@test:~/H618orangepi-Android12-Src/longanbuild$ '''sudo ./build.sh configKERNEL_CONFIGURE=no'''</p>|}<p/li>Welcome to mkscript setup progress</pli><p>All available platform:也可以设置orangepi-build/userpatches/config-default.conf配置文件中的'''KERNEL_CONFIGURE=no''',这样可以永久禁用这个功能</p><p/li>0. android</pli><p>1编译内核的时候如果提示下面的错误,这是由于Ubuntu PC的终端界面太小,导致make menuconfig的界面无法显示,请把Ubuntu PC的终端调到最大,然后重新运行build. linuxsh脚本</p><p>Choice [android[File:zero2w-img289.png]]: '''0'''</p><p/li>All available ic:</pol><p/ol>0. h618</pol start="7" style="list-style-type: decimal;"><li><p>Choice [h618]: '''0'''编译next分支内核源码时提示的部分信息说明如下:</p><p>All available boardol style="list-style-type:</plower-alpha;"><pli>0. ft</p><p>1. p1linux内核源码的版本</p>{| class="wikitable" style="width:800px;" |-| <p>2[ o.k. p2</] Compiling current kernel [ '''6.1.31''' ]</p>|}</li><li><p>使用的交叉编译工具链的版本</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 11''' ]</p>|}</li><li><p>内核默认使用的配置文件以及它存放的路径如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Using kernel config file [ '''orangepi-build/external/config/kernel/linux-6.1-sun50iw9-next.config''' ]</p>|}</li><li><p>编译生成的内核相关的deb包的路径</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Target directory [ '''output/debs/''' ]</p>|}</li><li><p>编译生成的内核镜像deb包的包名</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] File name [ '''linux-image-next-sun50iw9_x.x.x_arm64.deb''' ]</p>|}</li><li><p>编译使用的时间</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Runtime [ '''10 min''' ]</p>|}</li><li><p>最后会显示重复编译上一次选择的内核的编译命令,使用下面的命令无需通过图形界面选择,可以直接开始编译内核源码</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepizero2w BRANCH=next BUILD_OPT=kernel KERNEL_CONFIGURE=no''' ]</p>|}</li></ol></li><li><p>查看编译生成的内核相关的deb包</p><ol style="list-style-type: lower-alpha;"><li><p>'''linux-dtb-next-sun50iw9_x.x.x_arm64.deb'''包含有内核使用的dtb文件</p></li><li><p>'''linux-headers-next-sun50iw9_x.x.x_arm64.deb'''包含内核头文件</p></li><li><p>'''linux-image-next-sun50iw9_x.x.x_arm64.deb'''包含内核镜像和内核模块</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''ls output/debs/linux-*'''</p><p>output/debs/linux-dtb-next-sun50iw9_x.x.x_arm64.deb</p><p>output/debs/linux-headers-next-sun50iw9_x.x.x_arm64.deb</p><p>output/debs/linux-image-next-sun50iw9_x.x.x_arm64.deb</p>|}</li></ol></li><li><p>orangepi-bulid编译系统编译linux内核源码时首先会将linux内核源码和github服务器的linux内核源码进行同步,所以如果想修改linux内核的源码,首先需要关闭源码的更新功能('''需要完整编译过一次linux内核源码后才能关闭这个功能,否则会提示找不到linux内核的源码'''),否则所作的修改都会被还原,方法如下:</p><p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</p><p>IGNORE_UPDATES=&quot;'''<span style="color:#FF0000">yes</span>'''&quot;</p>|}</li><li><p>如果对内核做了修改,可以使用下面的方法来更新开发板linux系统的内核和内核模块</p><ol style="list-style-type: lower-alpha;"><li><p>将编译好的linux内核的deb包上传到开发板的linux系统中</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''cd output/debs'''</p><p>test@test:~/orangepi-build/output/debs$ '''scp \'''</p><p>'''linux-image-next-sun50iw9_x.x.x_arm64.deb root@192.168.1.xxx:/root'''</p>|}</li><li><p>再安装刚才上传的新的linux内核的deb包</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo dpkg -i linux-image-next-sun50iw9_x.x.x_arm64.deb'''</p>|}</li><li><p>然后重启开发板,再查看内核相关的修改是否已生效</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p>|}</li></ol></li></ol> == 编译rootfs == <ol style="list-style-type: decimal;"><li><p>运行build.sh脚本,记得加sudo权限</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p>|}</li><li><p>选择'''Rootfs and all deb packages''',然后回车</p></li> <div class="figure"> [[File:zero2w-img290.png]] </div></ol><ol start="3" style="list-style-type: decimal;"><li><p>接着选择开发板的型号</p><p>[[File:zero2w-img280.png]]</p></li><li><p>然后选择内核源码的分支类型,不同版本的内核源码维护的rootfs类型有区别</p><ol style="list-style-type: lower-alpha;"><li><p>current分支可以看到debian11、ubuntu20.04、ubuntu22.04三个选项</p></li><li><p>next分支可以看到debian11、debian12、ubuntu22.04三个选项</p><p>[[File:zero2w-img281.png]]</p></li></ol></li><li><p>然后选择rootfs的类型</p><p>[[File:zero2w-img291.png]]</p></li><li><p>然后选择镜像的类型</p><ol style="list-style-type: lower-alpha;"><li><p>'''Image with console interface (server)'''表示服务器版的镜像,体积比较小</p></li><li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p><div class="figure"> [[File:zero2w-img292.png]] </div></li></ol></li><li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p><div class="figure"> [[File:zero2w-img293.png]] </div></li><li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护XFCE,所以请选择XFCE类型的桌面</p><p>[[File:zero2w-img294.png]]</p><p>[[File:zero2w-img295.png]]</p><p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p><p>[[File:zero2w-img296.png]]</p></li><li><p>然后就会开始编译rootfs,编译时提示的部分信息说明如下</p><ol style="list-style-type: lower-alpha;"><li><p>rootfs的类型</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] local not found [ Creating new rootfs cache for '''bullseye''' ]</p>|}</li><li><p>编译生成的rootfs压缩包的存放路径</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Target directory [ '''orangepi-build/external/cache/rootfs''' ]</p>|}</li><li><p>编译生成的rootfs压缩包的名字</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] File name [ '''bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4''' ]</p>|}</li></ol></li><li><p>查看编译生成的rootfs压缩包</p><ol style="list-style-type: lower-alpha;"><li><p>'''bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4'''是rootfs的压缩包,名字各字段的含义为</p><ol style="list-style-type: none;"><li><p>a) '''bullseye'''表示rootfs的linux发行版的类型</p></li><li><p>b) '''xfce'''表示rootfs为桌面版的类型,如果为'''cli'''则表示服务器版类型</p></li><li><p>c) '''arm64'''表示rootfs的架构类型</p></li><li><p>d) '''25250ec7002de9e81a41de169f1f89721'''是由rootfs安装的所有软件包的包名生成的MD5哈希值,只要没有修改rootfs安装的软件包的列表,那么这个值就不会变,编译脚本会通过这个MD5哈希值来判断是否需要重新编译rootfs</p></li></ol></li><li><p>'''bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list'''列出了rootfs安装的所有软件包的包名</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''ls external/cache/rootfs/'''</p><p>bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4</p><p>bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.current</p><p>bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list</p>|}</li></ol></li><li><p>如果需要的rootfs在'''external/cache/rootfs'''下已经存在,那么再次编译rootfs就会直接跳过编译过程,不会重新开始编译,编译镜像的时候也会去'''external/cache/rootfs'''下查找是否已经有缓存可用的rootfs,如果有就直接使用,这样可以节省大量的下载编译时间</p></li></ol> == 编译linux镜像 == <ol style="list-style-type: decimal;"><li><p>运行'''build.sh'''脚本,记得加sudo权限</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p>|}</li><li><p>选择'''Full OS image for flashing''',然后回车</p></li> <div class="figure"> [[File:zero2w-img297.png]] </div></ol><ol start="3" style="list-style-type: decimal;"><li><p>然后选择开发板的型号</p><p>[[File:zero2w-img280.png]]</p></li><li><p>然后选择内核源码的分支类型,不同版本的内核源码维护的rootfs类型有区别</p><ol style="list-style-type: lower-alpha;"><li><p>current分支可以看到debian11、ubuntu20.04、ubuntu22.04三个选项</p></li><li><p>next分支可以看到debian11、debian12、ubuntu22.04三个选项</p><p>[[File:zero2w-img281.png]]</p></li></ol></li><li><p>如果选择的next分支还会提示需要选择内存的大小,current分支不需要选择</p><ol style="list-style-type: lower-alpha;"><li><p>如果购买的开发板为1.5GB内存大小的,请选择第一项</p></li><li><p>如果购买的开发板为1GB或2GB或4GB内存大小的,请选择第二项</p><p>[[File:zero2w-img282.png]]</p></li></ol></li><li><p>然后选择rootfs的类型</p><p>[[File:zero2w-img291.png]]</p></li><li><p>然后选择镜像的类型</p><ol style="list-style-type: lower-alpha;"><li><p>'''Image with console interface (server)'''表示服务器版的镜像,体积比较小</p></li><li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p><div class="figure"> [[File:zero2w-img292.png]] </div></li></ol></li><li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p><div class="figure"> [[File:zero2w-img293.png]] </div></li><li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护XFCE,所以请选择XFCE类型的桌面</p><p>[[File:zero2w-img294.png]]</p><p>[[File:zero2w-img295.png]]</p><p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p><p>[[File:zero2w-img296.png]]</p></li><li><p>然后就会开始编译linux镜像,编译的大致流程如下</p><ol style="list-style-type: lower-alpha;"><li><p>初始化Ubuntu PC的编译环境,安装编译过程需要的软件包</p></li><li><p>下载u-boot和linux内核的源码(如果已经缓存,则只更新代码)</p></li><li><p>编译u-boot源码,生成u-boot的deb包</p></li><li><p>编译linux源码,生成linux相关的deb包</p></li><li><p>制作linux firmware的deb包</p></li><li><p>制作orangepi-config工具的deb包</p></li><li><p>制作板级支持的deb包</p></li><li><p>如果是编译desktop版镜像,还会制作desktop相关的deb包</p></li><li><p>检查rootfs是否已经缓存,如果没有缓存,则重新制作rootfs,如果已经缓存,则直接解压使用</p></li><li><p>安装前面生成的deb包到rootfs中</p></li><li><p>对不同的开发板和不同类型镜像做一些特定的设置,如预装额外的软件包,修改系统配置等</p></li><li><p>然后制作镜像文件,并格式化分区,默认类型为ext4</p></li><li><p>再将配置好的rootfs拷贝到镜像的分区中</p></li><li><p>然后更新initramfs</p></li><li><p>最后将u-boot的bin文件通过dd命令写入到镜像中</p></li></ol></li><li><p>编译完镜像后会提示下面的信息</p><ol style="list-style-type: lower-alpha;"><li><p>编译生成的镜像的存放路径</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Done building [ '''output/images/orangepizero2w_x.x.x_debian_bullseye_linux6.1.xx_xfce_desktop/orangepizero2w_x.x.x_debian_bullseye_linux6.1.xx_xfce_desktop.img''' ]</p>|}</li><li><p>编译使用的时间</p></li>{| class="wikitable" style="width:800px;" |-| '''[ o.k. ] Runtime [ 19 min ]'''|}</ol><ol start="3" style="list-style-type: lower-alpha;"><li><p>重复编译镜像的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译镜像</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepizero2w BRANCH=next BUILD_OPT=image RELEASE=bullseye BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=yes''' ]</p>|}</li></ol></li></ol> <span id="orange-pi-os-arch系统的使用说明"></span> = '''Orange Pi OS Arch系统的使用说明''' = <span id="orange-pi-os-arch系统功能适配情况"></span>== Orange Pi OS Arch系统功能适配情况 == {| class="wikitable" style="width:800px;text-align: center;"|-| style="width:450px;" | '''主板功能'''| '''OPi OS Arch'''|-| '''HDMI视频'''| '''OK'''|-| '''HDMI音频'''| '''OK'''|-| '''Type-C USB2.0 x 2'''| '''OK'''|-| '''TF卡启动'''| '''OK'''|-| '''WIFI'''| '''OK'''|-| '''蓝牙'''| '''OK'''|-| '''LED灯'''| '''OK'''|-| '''40pin GPIO'''| '''OK'''|-| '''40pin I2C'''| '''OK'''|-| '''40pin SPI'''| '''OK'''|-| '''40pin UART'''| '''OK'''|-| '''40pin PWM'''| '''OK'''|-| '''温度传感器'''| '''OK'''|-| '''硬件看门狗'''| '''OK'''|-| '''Mali GPU'''| '''<span style="color:#FF0000">NO</span>'''|-| '''视频编解码'''| '''<span style="color:#FF0000">NO</span>'''|} {| class="wikitable" style="width:800px;text-align: center;"|-| style="width:450px;" | '''24pin扩展板功能'''| '''OPi OS Arch'''|-| '''百兆网口'''| '''OK'''|-| '''百兆网口灯'''| '''OK'''|-| '''USB2.0 HOST x 2'''| '''OK'''|-| '''红外接收'''| '''OK'''|-| '''耳机音频播放'''| '''OK'''|-| '''开关机按键'''| '''OK'''|-| '''LRADC自定义按键 x 2'''| '''OK'''|-| '''TV-OUT'''| '''<span style="color:#FF0000">NO</span>'''|} <span id="orange-pi-os-arch系统用户向导使用说明"></span>== Orange Pi OS Arch系统用户向导使用说明 == 首先请注意,OPi OS Arch系统是没有设置默认的orangepi用户和密码的,所以烧录完系统启动后是无法直接通过串口和ssh远程登录的(root用户也不行)。这一点和Ubuntu、Debian系统是有区别的。 OPi OS Arch系统第一次启动时需要接上HDMI显示器,然后通过用户向导来初始化系统设置(其中包括新建用户名和设置密码)。用户向导的设置步骤如下所示: <ol style="list-style-type: lower-alpha;"><li><p>烧录完系统第一次启动进入桌面后会看到下图所示的用户向导程序</p><div class="figure"> [[File:zero2w-img298.png]] </div></li><li><p>首先需要选择想要语言</p><div class="figure"> [[File:zero2w-img299.png]] </div></li><li><p>在选择完语言后,用户向导会立即切换为对应的语言界面,如中文显示如下所示</p><div class="figure"> [[File:zero2w-img300.png]] </div></li><li><p>然后选择区域</p><div class="figure"> [[File:zero2w-img301.png]] </div></li><li><p>然后选择键盘型号</p><div class="figure"> [[File:zero2w-img302.png]] </div></li><li><p>然后新建用户名和设置密码</p><div class="figure"> [[File:zero2w-img303.png]] </div></li><li><p>然后确保选择没问题后,再点击'''安装'''按钮</p><div class="figure"> [[File:zero2w-img304.png]] </div></li><li><p>然后等待安装完成</p><div class="figure"> [[File:zero2w-img305.png]] </div></li><li><p>安装完成需要点击'''完成'''按钮重启系统</p><div class="figure"> [[File:zero2w-img306.png]] </div></li><li><p>重启后会自动启动Orange Pi Hello程序,此时需要去掉右下角'''开机时启动'''的勾选状态,不然每次启动都需要手动关闭Orange Pi Hello程序</p><div class="figure"> [[File:zero2w-img307.png]] </div><p>此时就可以使用刚才新建的用户名和密码通过串口或者ssh登录OPi OS系统了。</p></li></ol> <span id="设置dt-overlays的方法"></span>== 设置DT overlays的方法 == 开发板40pin中的I2C/SPI/UART/PWM等复用功能默认在内核的dts中都是关闭的,需要手动打开对应的DT overlays才能使用。 在OPi OS Arch系统中打开DT overlays的方法如下所示: <ol style="list-style-type: decimal;"><li><p>首先打开'''/boot/extlinux/extlinux.conf'''配置文件</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''sudo putty'''</p>|}<p>[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''</p></li><li><p>然后在'''/boot/extlinux/extlinux.conf'''中通过添加'''FDTOVERLAYS /dtbs/allwinner/overlay/xxx.dtbo'''来打开对应的配置</p></li> {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''注意FDTOVERLAYS /dtbs/allwinner/overlay/xxx.dtbo中的xxx.dtbo需要替换为具体的dtbo配置,请不要照抄。'''</big>|}{| class="wikitable" style="width:800px;" |-| [orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf''' LABEL Orange Pi KERNEL /Image FDT /dtbs/allwinner/sun50i-h616-orangepi-zero2w.dtb '''FDTOVERLAYS /dtbs/allwinner/overlay/<span style="color:#FF0000">xxx.dtbo</span>''' #需要添加的配置|}</ol><ol start="3" style="list-style-type: decimal;"><li><p>xxx.dtbo在OPi OS Arch镜像中的存放路径如下所示,请注意,此路径下面不是所有的dtbo都可以使用的。</p>{| class="wikitable" style="width:800px;" |-| <p>'''/boot/dtbs/allwinner/overlay/'''</p>|}</li><li><p>开发板可以使用的DT overlays配置如下所示</p></li> {| class="wikitable" style="width:800px;text-align: center;" |-| '''开发板上的功能'''| '''对应的DT overlays配置'''|-| '''40pin - i2c0'''| '''sun50i-h616-pi-i2c0.dtbo'''|-| '''40pin - i2c1'''| '''sun50i-h616-pi-i2c1.dtbo'''|-| '''40pin - i2c2'''| '''sun50i-h616-pi-i2c2.dtbo'''|-| '''40pin - uart2'''| '''sun50i-h616-pi-uart2.dtbo'''|-| '''40pin - uart3'''| '''sun50i-h616-pi-uart3.dtbo'''|-| '''40pin - uart4'''| '''sun50i-h616-pi-uart4.dtbo'''|-| '''40pin - uart5'''| '''sun50i-h616-ph-uart5.dtbo'''|-| '''40pin - pwm1'''| '''sun50i-h616-pi-pwm1.dtbo'''|-| '''40pin - pwm2'''| '''sun50i-h616-pi-pwm2.dtbo'''|-| '''40pin - pwm3'''| '''sun50i-h616-pi-pwm3.dtbo'''|-| '''40pin - pwm4'''| '''sun50i-h616-pi-pwm4.dtbo'''|-| '''40pin - spi1 cs0'''| '''sun50i-h616-spi1-cs0-spidev.dtbo'''|-| '''40pin - spi1 cs1'''| '''sun50i-h616-spi1-cs1-spidev.dtbo'''|-| '''40pin - spi1 cs0 cs1'''| '''sun50i-h616-spi1-cs0-cs1-spidev.dtbo'''|-| '''设置USB0为Host模式'''| '''sun50i-h616-usb0-host.dtbo'''|-| '''关闭绿色的LED灯'''| '''sun50i-h616-zero2w-disable-led.dtbo'''|-| '''关闭UART0调试串口的方法'''| '''sun50i-h616-disable-uart0.dtbo'''|}</ol><ol start="5" style="list-style-type: decimal;"><li><p>如果需要同时打开多个配置,直接在'''FDTOVERLAYS'''后面将多个配置的路径加上即可,比如同时打开i2c1和uart5的配置如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>[orangepi@orangepi-pc ~]$ '''sudo vim /boot/extlinux/extlinux.conf'''</p><p>LABEL Orange Pi</p><p>KERNEL /Image</p><p>FDT /dtbs/allwinner/sun50i-h616-orangepi-zero2w.dtb</p><p>'''FDTOVERLAYS <span style="color:#FF0000">/dtbs/allwinner/overlay/sun50i-h616-pi-i2c1.dtbo /dtbs/allwinner/overlay/sun50i-h616-ph-uart5.dtbo</span>'''</p>|}</li><li><p>设置好后需要重启系统才能让配置生效</p>{| class="wikitable" style="width:800px;" |-| <p>[orangepi@orangepi-pc ~]$ '''sudo reboot'''</p>|}</li></ol> == 安装软件的方法 == 使用pacman包管理工具可以安装OPi OS中没有的软件,比如安装vim编辑器的命令如下所示,如果想安装其他软件,只需要把vim替换想要安装的软件的包名即可。 {| class="wikitable" style="width:800px;" |-| [orangepi@orangepi-pc ~]$ '''sudo pacman -Syy vim'''|} <span id="android-12-tv系统使用说明"></span> = '''Android 12 TV系统使用说明''' = <span id="已支持的android版本"></span>== 已支持的Android版本 == {| class="wikitable" style="width:800px;text-align: center;" |-| Android版本| 内核版本|-| '''Android 12 TV版'''| '''linux5.4'''|} <span id="android-12-tv功能适配情况"></span>== Android 12 TV功能适配情况 == {| class="wikitable" style="width:800px;text-align: center;" |-| '''主板功能'''| '''Android12 TV'''|-| '''HDMI视频'''| '''OK'''|-| '''HDMI音频'''| '''OK'''|-| '''Type-C USB2.0 x 2'''| '''OK'''|-| '''TF卡启动'''| '''OK'''|-| '''WIFI'''| '''OK'''|-| '''蓝牙'''| '''OK'''|-| '''USB摄像头'''| '''OK'''|-| '''LED灯'''| '''OK'''|-| '''40pin GPIO'''| '''OK'''|-| '''40pin I2C'''| '''OK'''|-| '''40pin SPI1'''| '''OK'''|-| '''40pin UART'''| '''OK'''|-| '''40pin PWM'''| '''OK'''|-| '''温度传感器'''| '''OK'''|-| '''硬件看门狗'''| '''OK'''|-| '''Mali GPU'''| '''OK'''|-| '''视频编解码'''| '''OK'''|} {| class="wikitable" style="width:800px;text-align: center;" |-| '''24pin扩展板功能'''| '''Android12 TV'''|-| '''百兆网口'''| '''OK'''|-| '''百兆网口灯'''| '''OK'''|-| '''USB2.0 HOST x 2'''| '''OK'''|-| '''红外接收'''| '''OK'''|-| '''耳机音频播放'''| '''OK'''|-| '''开关机按键'''| '''OK'''|-| '''LRADC自定义按键 x 2'''| '''OK,默认设置为音量加减按键'''|-| '''TV-OUT'''| '''OK'''|} <span id="板载led灯显示说明"></span>== 板载LED灯显示说明 == {| class="wikitable" style="width:800px;text-align: center;" |-|| '''绿灯'''| '''红灯'''|-| '''u-boot启动阶段'''| '''灭'''| '''亮'''|-| '''内核启动到进入系统'''| '''亮'''| '''亮'''|} <span id="android返回上一级界面的方法"></span>== Android返回上一级界面的方法 == 我们一般都是使用鼠标和键盘来控制开发板的安卓系统,当进入某些界面,需要返回上一级界面或者桌面时,只能通过'''<span style="color:#FF0000">鼠标右键</span>'''来返回,键盘是无法返回的。 如果有购买开发板配套的红外遥控(其他遥控不行)和24pin扩展板,将24pin扩展板接入开发板后,还可以通过遥控中的返回键来返回上一级菜单,返回键的位置如下图所示: [[File:zero2w-img308.png]] <span id="adb的使用方法"></span>== ADB的使用方法 == === 使用网络连接adb调试 === {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''使用网络adb无需USB Typc C接口的数据线来连接电脑和开发板,而是通过网络来通信,所以首先请确保开发板的有线或者无线网络已经连接好了,然后获取开发板的IP地址,后面要用到。'''</big>|} <ol style="list-style-type: decimal;"><li><p>确保Android系统的'''service.adb.tcp.port'''设置为5555端口号</p>{| class="wikitable" style="width:800px;" |-| <p>apollo-p2:/ # '''getprop | grep &quot;adb.tcp&quot;'''</p><p>[service.adb.tcp.port]: [5555]</p>|}</li><li><p>如果'''service.adb.tcp.port'''没有设置,可以在串口中使用下面的命令设置网络adb的端口号</p></li>{| class="wikitable" style="width:800px;" |-| apollo-p2:/ # '''setprop service.adb.tcp.port 5555''' apollo-p2:/ # '''stop adbd''' apollo-p2:/ # '''start adbd'''|}</ol><ol start="3" style="list-style-type: decimal;"><li><p>在Ubuntu PC上安装adb工具</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''sudo apt-get update'''</p><p>test@test:~$ '''sudo apt-get install -y adb'''</p>|}</li><li><p>然后在Ubuntu PC上连接网络adb</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''adb connect 192.168.1.xxx:5555''' '''(需要修改为开发板的IP地址)'''</p><p>* daemon not running; starting now at tcp:5037</p><p>* daemon started successfully</p><p>connected to 192.168.1.xxx:5555</p><p>test@test:~$ '''adb devices'''</p><p>List of devices attached</p><p>192.168.1.xxx:5555 device</p>|}</li><li><p>然后在Ubuntu PC上通过adb shell就可以登录android系统</p></li>{| class="wikitable" style="width:800px;" |-| test@test:~$ '''adb shell''' apollo-p2:/ #|}</ol> === 使用数据线连接adb调试 === <ol style="list-style-type: decimal;"><li><p>准备一根USB Typc C接口的数据线, USB接口一端插入电脑的USB接口中,USB Type C接口一端插入开发板的USB0接口中(USB0的位置请见下面右边图片的说明)。在这种情况下是由电脑的USB接口给开发板供电,所以请确保电脑的USB接口能提供最够的功率驱动开发板。</p><p>[[File:zero2w-img15.png|400px]] [[File:zero2w-img309.png|400px]]</p></li><li><p>在Ubuntu PC上安装adb工具</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''sudo apt-get update'''</p><p>test@test:~$ '''sudo apt-get install -y adb'''</p>|}</li><li><p>查看识别到ADB设备</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''adb devices'''</p><p>List of devices attached</p><p>4c00146473c28651dd0 device</p>|}</li><li><p>然后在Ubuntu PC上通过adb shell就可以登录android系统</p></li>{| class="wikitable" style="width:800px;" |-| test@test:~$ '''adb shell''' apollo-p2:/ $|}</ol><span id="查看设置hdmi显示分辨率的方法"></span> == 查看设置HDMI显示分辨率的方法 == <ol style="list-style-type: decimal;"><li><p>首先进入'''Settings'''</p><p>[[File:zero2w-img310.png]]</p></li><li><p>然后选择'''Device Preferences'''</p><p>[[File:zero2w-img311.png]]</p></li><li><p>然后选择'''Display &amp; Sound'''</p><p>[[File:zero2w-img312.png]]</p></li><li><p>然后选择'''Advanced display settings'''</p><p>[[File:zero2w-img313.png]]</p></li><li><p>然后选择'''HDMI output mode'''</p><p>[[File:zero2w-img314.png]]</p></li><li><p>然后就能看到显示器支持的分辨率列表了。此时点击对应的选项就会切换到对应的分辨率。请注意,不同显示器支持的分辨率可能是不同的,如果接到电视上,一般会看到比下图更多的分辨率选项。</p><p>[[File:zero2w-img315.png]]</p></li><li><p>开发板的HDMI输出是支持4K显示的,当接到4K电视时就可以看到4K分辨率的选项</p><p>[[File:zero2w-img316.png]]</p></li></ol> <span id="hdmi转vga显示测试-1"></span>=== HDMI转VGA显示测试 === <ol style="list-style-type: decimal;"><li><p>首先需要准备下面的配件</p><ol style="list-style-type: lower-alpha;"><li><p>HDMI转VGA转换器</p><p>[[File:zero2w-img146.png]]</p></li><li><p>一根VGA线和一个Mini HDMI公转HDMI母的转接头</p><p>[[File:zero2w-img147.png]] [[File:zero2w-img148.png]]</p></li><li><p>一个支持VGA接口的显示器或者电视</p></li></ol></li><li><p>HDMI转VGA显示测试如下所示</p><p>[[File:zero2w-img317.png]]</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''使用HDMI转VGA显示时,开发板以及开发板的Android系统是不需要做任何设置的,只需要开发板Mini HDMI接口能正常显示就可以了。所以如果测试有问题,请检查HDMI转VGA转换器、VGA线以及显示器是否有问题。'''</p></big>|}</li></ol> <span id="wi-fi的连接方法"></span> == WI-FI的连接方法 == <ol style="list-style-type: decimal;"><li><p>首先选择'''Settings'''</p><p>[[File:zero2w-img310.png]]</p></li><li><p>然后选择'''Network &amp; Internet'''</p><p>[[File:zero2w-img318.png]]</p></li><li><p>然后打开WI-FI</p><p>[[File:zero2w-img319.png]]</p></li><li><p>打开WI-FI后在'''Available networks'''下面就可以看到搜索到的信号</p><p>[[File:zero2w-img320.png]]</p></li><li><p>选择想连接的WI-FI后会弹出下图所示的密码输入界面</p><div class="figure"> [[File:zero2w-img321.png]] </div></li><li><p>然后使用键盘输入WI-FI对应的密码,再使用'''鼠标'''点击虚拟键盘中的回车按钮就会开始连接WI-FI了</p><p>[[File:zero2w-img322.png]]</p></li><li><p>WI-FI连接成功后的显示如下图所示</p><p>[[File:zero2w-img323.png]]</p></li></ol> <span id="wi-fi-hotspot的使用方法"></span>== WI-FI hotspot的使用方法 == <ol style="list-style-type: decimal;"><li><p>首先请确保以太网口已连接网线,并且能正常上网</p></li><li><p>然后选择'''Settings'''</p><p>[[File:zero2w-img310.png]]</p></li><li><p>然后选择'''Network &amp; Internet'''</p><p>[[File:zero2w-img318.png]]</p></li><li><p>然后选择'''WIFI hotspot'''</p><p>[[File:zero2w-img324.png]]</p></li><li><p>然后打开'''Hotspot Enable''',下图中还可以看到生成的热点的名字和密码,记住它们,在连接热点的时候要用到(如果需要修改热点的名字和密码,需要先关闭'''Hotspot Enable''',然后才能修改)</p><p>[[File:zero2w-img325.png]]</p></li><li><p>此时可以拿出你的手机,如果一切正常,在手机搜索到的WI-FI列表中就能找到上图'''Hotspot name'''下面显示的同名('''这里为AndroidAP_7132''')的WIFI热点了。然后可以点击'''AndroidAP_7132'''连接热点,密码在上图的'''Hotspot password'''下面可以看到</p><p>[[File:zero2w-img326.png]]</p></li><li><p>连接成功后显示如下图所示(不同手机界面会有区别,具体界面以你手机显示的为准)。此时就可以在手机上打开一个网页看下能否上网了,如果能正常打开网页,说明开发板的'''WI-FI Hotspot'''能正常使用</p><p>[[File:zero2w-img327.png]]</p></li></ol> <span id="查看以太网口ip地址的方法"></span>== 查看以太网口IP地址的方法 == <ol style="list-style-type: decimal;"><li><p>开发板主板上是没有有线网络接口的,我们可以通过24pin扩展板来扩展百兆以太网</p><p>[[File:zero2w-img107.png]]</p></li><li><p>然后请确保扩展板的网口连接到了路由器或者交换机</p></li><li><p>然后打开'''Settings'''</p><p>[[File:zero2w-img328.png]]</p></li><li><p>然后选择'''Network &amp; Internet'''</p><p>[[File:zero2w-img329.png]]</p></li><li><p>然后在下图所示的位置就能看到开发板有线网口的IP地址了</p><p>[[File:zero2w-img330.png]]</p></li></ol> == 蓝牙的连接方法 == <ol style="list-style-type: decimal;"><li><p>首先选择'''Settings'''</p><p>[[File:zero2w-img310.png]]</p></li><li><p>然后选择'''Bluetooth'''</p><p>[[File:zero2w-img331.png]]</p></li><li><p>然后打开'''Bluetooth Enable'''</p><p>[[File:zero2w-img332.png]]</p></li><li><p>然后点击'''Pair new device'''开始扫描周围的蓝牙设备</p><p>[[File:zero2w-img333.png]]</p></li><li><p>搜索到的蓝牙设备会在'''Available devices'''下面显示出来</p><p>[[File:zero2w-img334.png]]</p></li><li><p>然后点击想要连接的蓝牙设备就可以开始配对了,当弹出下面的界面时,请使用鼠标选择'''Pair'''选项</p><p>[[File:zero2w-img335.png]]</p></li><li><p>这里测试的是开发板和'''<span style="color:#FF0000">安卓手机</span>'''蓝牙的配置过程,此时在手机上会弹出下面的确认界面,在手机上也点击配对按钮后就会开始配对过程</p><p>[[File:zero2w-img336.png]]</p></li><li><p>配对完成后,再打开'''Paired devices'''下面就可以看到已配对的蓝牙设备</p><p>[[File:zero2w-img337.png]]</p></li><li><p>此时可以使用手机蓝牙给开发板发送一张图片,发送后,在开发板的安卓系统中可以看到下面的确认界面,然后点击'''Accept'''就可以开始接收手机发过来的图片了</p><p>[[File:zero2w-img338.png]]</p></li><li><p>开发板Android系统蓝牙接收到的图片可以打开'''Received files'''中查看</p><p>[[File:zero2w-img339.png]]</p></li></ol> <span id="usb0设置为host模式的方法-1"></span> == USB0设置为HOST模式的方法 == 如下图所示,开发板的主板上有两个Type-C类型的接口:USB0和USB1,这两个接口都可以用来给开发板供电,也都可以用来当做USB2.0 HOST接口。USB0和USB1的区别是:USB0除了可以设置为HOST模式外,还可以设置为Device模式,而USB1只有HOST模式。 [[File:zero2w-img163.png]] Orange Pi发布的Android12 TV系统USB0默认设置为Device模式,所以在不需要使用USB0 Device模式时(ADB功能需要确保USB0为Device模式),建议使用USB0来供电,这样USB1就可以直接用来接USB设备。 如果想使用USB0来接USB设备,需要把USB0设置为HOST模式,方法如下所示: <ol style="list-style-type: lower-alpha;"><li><p>运行下面的命令可以将USB0设置为HOST模式:</p>{| class="wikitable" style="width:800px;" |-| <p>apollo-p2:/ # '''cat /sys/devices/platform/soc@3000000/soc@3000000\:usbc0@0/usb_host'''</p><p>host_chose finished!</p><p>apollo-p2:/ #</p>|}</li><li><p>运行下面的命令可以切回Device模式</p>{| class="wikitable" style="width:800px;" |-| <p>apollo-p2:/ # '''cat /sys/devices/platform/soc@3000000/soc@3000000\:usbc0@0/usb_device'''</p><p>device_chose finished!</p><p>apollo-p2:/ #</p>|}</li><li><p>查看USB0当前模式的命令为</p>{| class="wikitable" style="width:800px;" |-| <p>apollo-p2:/ # '''cat /sys/devices/platform/soc@3000000/soc@3000000\:usbc0@0/otg_role'''</p><p>usb_host</p>|}</li></ol> <span id="usb摄像头使用方法"></span> == USB摄像头使用方法 == <ol style="list-style-type: decimal;"><li><p>首先在开发板的USB接口中插入USB(UVC协议)摄像头</p></li><li><p>USB摄像头如果识别正常,在/dev下会生成相应的video设备节点</p>{| class="wikitable" style="width:800px;" |-| <p>console:/ # '''ls /dev/video0'''</p><p>/dev/video0</p>|}</li><li><p>然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考[[Orange Pi Zero 2W#ADB的使用方法|'''ADB的使用方法''']]一小节的说明</p></li><li><p>在开发板资料下载页面的'''官方工具'''中下载USB摄像头测试APP</p><p>[[File:zero2w-img340.png]]</p><p>[[File:zero2w-img341.png]]</p></li><li><p>然后使用adb命令安装USB摄像头测试APP到Android系统中,当然也可以使用U盘拷贝的方式进行安装</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''adb install usbcamera.apk'''</p>|}</li><li><p>安装完后在Android的桌面可以看到USB摄像头的启动图标</p><p>[[File:zero2w-img342.png]]</p></li><li><p>然后双击打开USB摄像头APP就可以看到USB摄像头的输出视频了</p></li></ol> <span id="android系统root说明"></span> == Android系统ROOT说明 == {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''<span class="mark">Orange Pi发布的Android系统已经ROOT,可以使用下面的方法来测试。</span>'''</big>|} <ol style="list-style-type: decimal;"><li><p>在开发板资料下载页面的'''官方工具'''中下载'''rootcheck.apk'''</p><p>[[File:zero2w-img340.png]]</p><p>[[File:zero2w-img343.png]]</p></li><li><p>然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考[[Orange Pi Zero 2W#ADB的使用方法|'''ADB的使用方法''']]一小节的说明</p></li><li><p>然后使用adb命令安装rootcheck.apk到Android系统中,当然也可以使用U盘拷贝的方式进行安装</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''adb install rootcheck.apk'''</p>|}</li><li><p>安装完后在Android的桌面可以看到ROOT测试工具的启动图标</p><p>[[File:zero2w-img344.png]]</p></li><li><p>第一次打开'''ROOT测试工具'''后的显示界面如下图所示</p><p>[[File:zero2w-img345.png]]</p></li><li><p>然后就可以点击'''CHECK NOW'''开始Android系统的ROOT状态的检查,检查完后的显示如下所示,可以看到Android系统已取得ROOT权限</p><p>[[File:zero2w-img346.png]]</p></li></ol> <span id="使用miracastreceiver将手机屏幕投屏到开发板的方法"></span> == 使用MiracastReceiver将手机屏幕投屏到开发板的方法 == <ol style="list-style-type: decimal;"><li><p>首先请确保开发板和手机都连接了同一个WIFI热点,开发板连接WIFI的方法请参考[[Orange Pi Zero 2W#WI-FI的连接方法|'''WI-FI的连接方法''']]一小节的说明</p></li><li><p>然后打开开发板安卓系统中的'''MiracastReceiver'''应用</p><p>[[File:zero2w-img347.png]]</p></li><li><p>'''MiracastReceiver'''打开后的界面如下所示</p><div class="figure"> [[File:zero2w-img348.png]] </div></li><li><p>然后在手机设置中找到投屏功能,'''这里以小米12S Pro手机为例''',其他品牌的手机请自行研究下,如下图所示,点击红色方框位置的按钮即可打开手机的投屏功能</p><p>[[File:zero2w-img349.png]]</p></li><li><p>等待一段时间后在手机上就能看到搜索到的可连接的设备,然后我们选择开发板对应的设备连接即可</p><p>[[File:zero2w-img350.png]]</p></li><li><p>然后在开发板的'''MiracastReceiver'''应用界面会弹出下图所示的选择框,这里我们选择'''Accept'''即可</p><p>[[File:zero2w-img351.png]]</p></li><li><p>然后就能在开发板连接的HDMI屏幕上看到手机屏幕的内容了</p><p>[[File:zero2w-img352.png]]</p></li></ol> == 通过按键或红外遥控开关机的方法 == 我们可以通过开关机按键或者红外遥控来关闭或开启开发板的安卓系统。但是需要注意的是,开发板主板上是没有开关机按键和红外接收器的,需要通过24pin扩展板来扩展。 [[File:zero2w-img107.png]] 24pin扩展板上的开关机按键所在位置如下图所示: [[File:zero2w-img274.png]] 红外遥控电源按键所在位置如下所示: [[File:zero2w-img353.png]] 关机时,我们需要长按开关机按键或者红外遥控上的电源按键,然后安卓系统会弹出下图所示的确认对话框,然后选择'''OK'''就会关闭安卓系统了。 [[File:zero2w-img354.png]] 关机后,再次长按开关机按键或者红外遥控上的电源按键就会开机了。 <span id="pin-接口-gpiouartspi-测试"></span>== 40pin 接口 GPIO、UART、SPI 测试 == {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''注意:40pin接口上的排针默认是不焊接的,需要自己焊接上去才能使用。'''</big>|} <span id="pin的gpio口测试方法"></span>=== 40pin的GPIO口测试方法 === <ol style="list-style-type: decimal;"><li><p>首先在桌面中打开wiringOP APP</p><p>[[File:zero2w-img355.png]]</p></li><li><p>然后点击'''GPIO_TEST'''按钮打开GPIO测试界面</p><p>[[File:zero2w-img356.png]]</p></li><li><p>GPIO测试界面如下图所示,左边的两排'''CheckBox'''按钮和40pin引脚是一一对应的关系。当勾选'''CheckBox'''按钮时,对应的GPIO引脚会被设置为'''OUT'''模式,引脚电平设置为高电平;当取消勾选时,GPIO引脚电平会设置为低电平;当点击'''GPIO READALL'''按钮时,可以获取到wPi号、GPIO模式、引脚电平等信息;当点击'''BLINK ALL GPIO'''按钮时,会让所有的GPIO口循环输出高低电平,使用这个功能可以用来测试40pin中所有的GPIO口。</p><p>[[File:zero2w-img357.png]]</p></li><li><p>然后点击'''GPIO READALL'''按钮,输出信息如下图所示:</p><div class="figure"> [[File:zero2w-img358.png]] </div></li><li><p>开发板40pin中总共有28个GPIO口可以使用,下面以12号引脚——对应GPIO为PI01——对应wPi序号为6——为例演示如何设置GPIO口的高低电平。首先点击12号引脚对应的'''CheckBox'''按钮,当按钮为选中状态时,12号引脚会设置为高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''3.3v''',说明设置高电平成功。</p><p>[[File:zero2w-img359.png]]</p></li><li><p>然后点击'''GPIO READALL'''按钮,可以看到当前的12号引脚模式为'''OUT''',引脚电平为高电平</p><p>[[File:zero2w-img360.png]]</p></li><li><p>再次点击下图的'''CheckBox'''按钮取消勾选状态,12号引脚就会设置为低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''0v''',说明设置低电平成功</p><p>[[File:zero2w-img361.png]]</p></li><li><p>然后点击'''GPIO READALL'''按钮,可以看到当前的12号引脚模式为OUT,引脚电平为低电平</p><p>[[File:zero2w-img362.png]]</p></li></ol> <span id="pin的uart测试方法"></span>=== 40pin的UART测试方法 === # 由下表可知,Android12 TV系统默认可用的uart有uart2和uart5。请注意uart0默认设置为调试串口,请不要把uart0当成普通串口使用。 <div style="display: flex;">::{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"|-| '''GPIO序号'''| '''GPIO'''| '''功能'''| '''引脚'''|-| style="text-align: left;"|| style="text-align: left;"|| '''3.3V'''| '''1'''|-| '''264'''| '''PI8'''| '''TWI1-SDA'''| '''3'''|-| '''263'''| '''PI7'''| '''TWI1-SCL'''| '''5'''|-| '''269'''| '''PI13'''| '''PWM3'''| '''7'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''9'''|-| '''<span style="color:#FF0000">226</span>'''| '''<span style="color:#FF0000">PH2</span>'''| '''<span style="color:#FF0000">UART5_TX</span>'''| '''<span style="color:#FF0000">11</span>'''|-| '''<span style="color:#FF0000">227</span>'''| '''<span style="color:#FF0000">PH3</span>'''| '''<span style="color:#FF0000">UART5_RX</span>'''| '''<span style="color:#FF0000">13</span>'''|-| '''<span style="color:#FF0000">261</span>'''| '''<span style="color:#FF0000">PI5</span>'''| '''<span style="color:#FF0000">UART2_TX</span>'''| '''<span style="color:#FF0000">15</span>'''|-| style="text-align: left;"|| style="text-align: left;"|| '''3.3V'''| '''17'''|-| '''231'''| '''PH7'''| '''SPI1_MOSI'''| '''19'''|-| '''232'''| '''PH8'''| '''SPI1_MISO'''| '''21'''|-| '''230'''| '''PH6'''| '''SPI1_CLK'''| '''23'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''25'''|-| '''266'''| '''PI10'''| '''TWI2-SDA'''| '''27'''|-| '''256'''| '''PI0'''| style="text-align: left;"|| '''29'''|-| '''271'''| '''PI15'''| style="text-align: left;"|| '''31'''|-| '''268'''| '''PI12'''| '''PWM2'''| '''33'''|-| '''258'''| '''PI2'''| style="text-align: left;"|| '''35'''|-| '''272'''| '''PI16'''| style="text-align: left;"|| '''37'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''39'''|}{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"|-| '''引脚'''| '''功能'''| '''GPIO'''| '''GPIO序号'''|-| '''2'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"||-| '''4'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"||-| '''6'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''8'''| '''UART0_TX'''| '''PH0'''| '''224'''|-| '''10'''| '''UART0_RX'''| '''PH1'''| '''225'''|-| '''12'''| style="text-align: left;"|| '''PI1'''| '''257'''|-| '''14'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''16'''| '''PWM4'''| '''PI14'''| '''270'''|-| '''18'''| style="text-align: left;"|| '''PH4'''| '''228'''|-| '''20'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''<span style="color:#FF0000">22</span>'''| '''<span style="color:#FF0000">UART2_RX</span>'''| '''<span style="color:#FF0000">PI6</span>'''| '''<span style="color:#FF0000">262</span>'''|-| '''24'''| '''SPI1_CS0'''| '''PH5'''| '''229'''|-| '''26'''| '''SPI1_CS1'''| '''PH9'''| '''233'''|-| '''28'''| '''TWI2-SCL'''| '''PI9'''| '''265'''|-| '''30'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''32'''| '''PWM1'''| '''PI11'''| '''267'''|-| '''34'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''36'''| style="text-align: left;"|| '''PC12'''| '''76'''|-| '''38'''| style="text-align: left;"|| '''PI4'''| '''260'''|-| '''40'''| style="text-align: left;"|| '''PI3'''| '''259'''|}</div><ol start="2" style="list-style-type: decimal;"><li><p>uart2对应的设备节点为'''/dev/ttyAS2''',uart5对应的设备节点为'''/dev/ttyAS5'''</p>{| class="wikitable" style="width:800px;" |-| <p>apollo-p2:/ # ls /dev/ttyAS*</p><p>/dev/ttyAS0 &nbsp;&nbsp;&nbsp;&nbsp; /dev/ttyAS1 &nbsp;&nbsp;&nbsp;&nbsp; '''<span style="color:#FF0000">/dev/ttyAS2 &nbsp;&nbsp;&nbsp;&nbsp; /dev/ttyAS5</span>'''</p>|}</li><li><p>首先在桌面中打开wiringOP APP</p><p>[[File:zero2w-img355.png]]</p></li><li><p>然后点击'''UART_TEST'''按钮打开UART测试界面</p><p>[[File:zero2w-img363.png]]</p></li><li><p>wiringOP的串口测试界面如下图所示</p></li> [[File:zero2w-img364.png]]</ol><ol start="6" style="list-style-type: decimal;"><li><p>然后在选择框中选择'''/dev/ttyAS2'''或者'''/dev/ttyAS5'''节点</p><p>[[File:zero2w-img365.png]]</p></li><li><p>再在编辑框中输入想要设置的波特率,然后点击'''OPEN'''按钮打开uart节点,打开成功后,'''OPEN'''按钮变为不可选中状态,'''CLOSE'''按钮和'''SEND'''按钮变为可选中状态</p></li> [[File:zero2w-img366.png]]</ol><ol start="8" style="list-style-type: decimal;"><li><p>然后使用杜邦线短接uart的rx和tx引脚</p></li><li><p>然后可以在下面的发送编辑框中输入一段字符,点击'''SEND'''按钮开始发送</p></li> [[File:zero2w-img367.png]]</ol><ol start="10" style="list-style-type: decimal;"><li>如果一切正常,接收框内会显示已接收到的字符串</li> [[File:zero2w-img368.png]]</ol><span id="pin的spi测试方法"></span> === 40pin的SPI测试方法 === # 由下表可知,40pin接口可用的spi为spi1,有两个片选引脚cs0和cs1 <div style="display: flex;">::{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"|-| '''GPIO序号'''| '''GPIO'''| '''功能'''| '''引脚'''|-| style="text-align: left;"|| style="text-align: left;"|| '''3.3V'''| '''1'''|-| '''264'''| '''PI8'''| '''TWI1-SDA'''| '''3'''|-| '''263'''| '''PI7'''| '''TWI1-SCL'''| '''5'''|-| '''269'''| '''PI13'''| '''PWM3'''| '''7'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''9'''|-| '''226'''| '''PH2'''| '''UART5_TX'''| '''11'''|-| '''227'''| '''PH3'''| '''UART5_RX'''| '''13'''|-| '''261'''| '''PI5'''| '''UART2_TX'''| '''15'''|-| style="text-align: left;"|| style="text-align: left;"|| '''3.3V'''| '''17'''|-| '''231'''| '''PH7'''| '''SPI1_MOSI'''| '''19'''|-| '''232'''| '''PH8'''| '''SPI1_MISO'''| '''21'''|-| '''230'''| '''PH6'''| '''SPI1_CLK'''| '''23'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''25'''|-| '''266'''| '''PI10'''| '''TWI2-SDA'''| '''27'''|-| '''256'''| '''PI0'''| style="text-align: left;"|| '''29'''|-| '''271'''| '''PI15'''| style="text-align: left;"|| '''31'''|-| '''268'''| '''PI12'''| '''PWM2'''| '''33'''|-| '''258'''| '''PI2'''| style="text-align: left;"|| '''35'''|}{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"|-| '''引脚'''| '''功能'''| '''GPIO'''| '''GPIO序号'''|-| '''2'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"||-| '''4'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"||-| '''6'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''8'''| '''UART0_TX'''| '''PH0'''| '''224'''|-| '''10'''| '''UART0_RX'''| '''PH1'''| '''225'''|-| '''12'''| style="text-align: left;"|| '''PI1'''| '''257'''|-| '''14'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''16'''| '''PWM4'''| '''PI14'''| '''270'''|-| '''18'''| style="text-align: left;"|| '''PH4'''| '''228'''|-| '''20'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''22'''| '''UART2_RX'''| '''PI6'''| '''262'''|-| '''24'''| '''SPI1_CS0'''| '''PH5'''| '''229'''|-| '''26'''| '''SPI1_CS1'''| '''PH9'''| '''233'''|-| '''28'''| '''TWI2-SCL'''| '''PI9'''| '''265'''|-| '''30'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''32'''| '''PWM1'''| '''PI11'''| '''267'''|-| '''34'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''36'''| style="text-align: left;"|| '''PC12'''| '''76'''|}</div><ol start="2" style="list-style-type: decimal;"><li>SPI1 CS0对应的设备节点为'''/dev/spidev1.0''',SPI1 CS1对应的设备节点为'''/dev/spidev1.1'''</li>{| class="wikitable" style="width:800px;" |-| apollo-p2:/ # '''ls /dev/spidev1.*''' '''<span style="color:#FF0000">/dev/spidev1.0 /dev/spidev1.1</span>'''|}</ol><ol start="3" style="list-style-type: decimal;"><li>这里演示下通过'''w25qxx'''模块来测试SPI1接口,首先在SPI1接口接入w25qxx模块</li>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''<span class="mark">如果没有</span>w25qxx模块也没关系,因为开发板上有一个SPIFlash接在了SPI0上,在安卓中SPI0的配置默认也打开了,所以我们也可以直接使用板载的SPIFlash测试。'''</big>|}</ol><ol start="4" style="list-style-type: decimal;"><li><p>然后在桌面中打开wiringOP APP</p><p>[[File:zero2w-img355.png]]</p></li><li><p>然后点击'''SPI_TEST'''按钮打开SPI的测试界面</p><p>[[File:zero2w-img369.png]]</p></li><li><p>然后在左上角选择spi的设备节点,如果直接测试板载的SPIFlash,那么保持默认的'''/dev/spidev0.0'''即可,如果在40pin的spi1 cs0上接了'''w25qxx'''模块,那么就请选择'''/dev/spidev1.0''',如果在40pin的spi1 cs1上接了'''w25qxx'''模块,那么就请选择'''/dev/spidev1.1'''</p><p>[[File:zero2w-img370.png]]</p></li><li><p>然后点击'''OPEN'''按钮初始化SPI</p></li> [[File:zero2w-img371.png]]</ol><ol start="8" style="list-style-type: decimal;"><li><p>然后填充需要发送的字节,比如读取板载SPIFlash的ID信息,在data[0]中填入地址0x9f,然后点击'''TRANSFER'''按钮</p><p>[[File:zero2w-img372.png]]</p></li><li><p>最后APP会显示读取到的板载SPI Flash的ID信息</p></li> [[File:zero2w-img373.png]]</ol><ol start="10" style="list-style-type: decimal;"><li>如果是读取接在40pin SPI1上的w25qxx模块,和板载SPI Flash的ID信息也是类似的</li></ol> <span id="pin的i2c测试方法"></span> === 40pin的I2C测试方法 === # 由下表可知,Android12 TV系统默认打开了i2c1和i2c2 <div style="display: flex;">::{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"|-| '''GPIO序号'''| '''GPIO'''| '''功能'''| '''引脚'''|-| style="text-align: left;"|| style="text-align: left;"|| '''3.3V'''| '''1'''|-| '''<span style="color:#FF0000">264</span>'''| '''<span style="color:#FF0000">PI8</span>'''| '''<span style="color:#FF0000">TWI1-SDA</span>'''| '''<span style="color:#FF0000">3</span>'''|-| '''<span style="color:#FF0000">263</span>'''| '''<span style="color:#FF0000">PI7</span>'''| '''<span style="color:#FF0000">TWI1-SCL</span>'''| '''<span style="color:#FF0000">5</span>'''|-| '''269'''| '''PI13'''| '''PWM3'''| '''7'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''9'''|-| '''226'''| '''PH2'''| '''UART5_TX'''| '''11'''|-| '''227'''| '''PH3'''| '''UART5_RX'''| '''13'''|-| '''261'''| '''PI5'''| '''UART2_TX'''| '''15'''|-| style="text-align: left;"|| style="text-align: left;"|| '''3.3V'''| '''17'''|-| '''231'''| '''PH7'''| '''SPI1_MOSI'''| '''19'''|-| '''232'''| '''PH8'''| '''SPI1_MISO'''| '''21'''|-| '''230'''| '''PH6'''| '''SPI1_CLK'''| '''23'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''25'''|-| '''<span style="color:#FF0000">266</span>'''| '''<span style="color:#FF0000">PI10</span>'''| '''<span style="color:#FF0000">TWI2-SDA</span>'''| '''<span style="color:#FF0000">27</span>'''|-| '''256'''| '''PI0'''| style="text-align: left;"|| '''29'''|-| '''271'''| '''PI15'''| style="text-align: left;"|| '''31'''|-| '''268'''| '''PI12'''| '''PWM2'''| '''33'''|-| '''258'''| '''PI2'''| style="text-align: left;"|| '''35'''|-| '''272'''| '''PI16'''| style="text-align: left;"|| '''37'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''39'''|}{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"|-| '''引脚'''| '''功能'''| '''GPIO'''| '''GPIO序号'''|-| '''2'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"||-| '''4'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"||-| '''6'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''8'''| '''UART0_TX'''| '''PH0'''| '''224'''|-| '''10'''| '''UART0_RX'''| '''PH1'''| '''225'''|-| '''12'''| style="text-align: left;"|| '''PI1'''| '''257'''|-| '''14'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''16'''| '''PWM4'''| '''PI14'''| '''270'''|-| '''18'''| style="text-align: left;"|| '''PH4'''| '''228'''|-| '''20'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''22'''| '''UART2_RX'''| '''PI6'''| '''262'''|-| '''24'''| '''SPI1_CS0'''| '''PH5'''| '''229'''|-| '''26'''| '''SPI1_CS1'''| '''PH9'''| '''233'''|-| '''<span style="color:#FF0000">28</span>'''| '''<span style="color:#FF0000">TWI2-SCL</span>'''| '''<span style="color:#FF0000">PI9</span>'''| '''<span style="color:#FF0000">265</span>'''|-| '''30'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''32'''| '''PWM1'''| '''PI11'''| '''267'''|-| '''34'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''36'''| style="text-align: left;"|| '''PC12'''| '''76'''|-| '''38'''| style="text-align: left;"|| '''PI4'''| '''260'''|-| '''40'''| style="text-align: left;"|| '''PI3'''| '''259'''|}</div><ol start="2" style="list-style-type: decimal;"><li><p>i2c1对应的设备节点为'''/dev/i2c-1''',i2c2对应的设备节点为'''/dev/i2c-2'''</p>{| class="wikitable" style="width:800px;" |-| <p>apollo-p2:/ # '''ls /dev/i2c-*'''</p><p>'''<span style="color:#FF0000">/dev/i2c-1 /dev/i2c-2</span>''' /dev/i2c-5</p>|}</li><li><p>首先在桌面中打开wiringOP APP</p><p>[[File:zero2w-img355.png]]</p></li><li><p>然后点击'''I2C_TEST'''按钮打开i2c的测试界面</p><p>[[File:zero2w-img374.png]]</p></li><li><p>wiringOP的i2c测试界面如下图所示</p></li> [[File:zero2w-img375.png]]</ol><ol start="6" style="list-style-type: decimal;"><li><p>然后点击左上角的设备节点选择框选择想要测试的i2c</p><p>[[File:zero2w-img376.png]]</p></li><li><p>然后在40pin的i2c引脚上接一个i2c设备,这里以ds1307 rtc模块为例</p><p>[[File:zero2w-img181.png]]</p></li><li><p>ds1307 rtc模块的i2c地址为0x68,接好线后,我们可以在串口命令行中使用'''i2cdetect -y 1'''或'''i2cdetect -y 2'''命令查看下是否能扫描到ds1307 rtc模块的i2c地址。如果能看到0x68这个地址,说明ds1307 rtc模块接线正确。</p>{| class="wikitable" style="width:800px;" |-| <p>apollo-p2:/ # '''i2cdetect -y 1'''</p><p>'''或'''</p><p>apollo-p2:/ # '''i2cdetect -y 2'''</p>|}<p>[[File:zero2w-img377.png]]</p></li><li><p>然后在wiringOP中设置i2c的地址为0x68,再点击'''OPEN'''按钮打开i2c</p><p>[[File:zero2w-img378.png]]</p></li><li><p>点击'''OPEN'''按钮打开i2c后的显示如下所示</p><p>[[File:zero2w-img379.png]]</p></li><li><p>然后我们测试下往rtc模块的寄存器中写入一个值,比如往0x1c地址写入0x55</p><ol style="list-style-type: lower-alpha;"><li><p>我们首先设置需要写入的寄存器的地址为0x1c</p><p>[[File:zero2w-img380.png]]</p></li><li><p>然后设置需要写入的值为0x55</p><p>[[File:zero2w-img381.png]]</p></li><li><p>然后点击'''WRITE BYTE'''按钮执行写入的动作</p><p>[[File:zero2w-img382.png]]</p></li></ol></li><li><p>然后点击'''READ BYTE'''按钮读取下0x1c寄存器的值,如果显示为0x55,就说明i2c读写测试通过</p><p>[[File:zero2w-img383.png]]</p></li></ol> <span id="pin的pwm测试"></span> === 40pin的PWM测试 === # 由下表可知,可用的pwm为pwm1、pwm2、pwm3和pwm4。 <div style="display: flex;">::{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"|-| '''GPIO序号'''| '''GPIO'''| '''功能'''| '''引脚'''|-| style="text-align: left;"|| style="text-align: left;"|| '''3.3V'''| '''1'''|-| '''264'''| '''PI8'''| '''TWI1-SDA'''| '''3'''|-| '''263'''| '''PI7'''| '''TWI1-SCL'''| '''5'''|-| '''<span style="color:#FF0000">269</span>'''| '''<span style="color:#FF0000">PI13</span>'''| '''<span style="color:#FF0000">PWM3</span>'''| '''<span style="color:#FF0000">7</span>'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''9'''|-| '''226'''| '''PH2'''| '''UART5_TX'''| '''11'''|-| '''227'''| '''PH3'''| '''UART5_RX'''| '''13'''|-| '''261'''| '''PI5'''| '''UART2_TX'''| '''15'''|-| style="text-align: left;"|| style="text-align: left;"|| '''3.3V'''| '''17'''|-| '''231'''| '''PH7'''| '''SPI1_MOSI'''| '''19'''|-| '''232'''| '''PH8'''| '''SPI1_MISO'''| '''21'''|-| '''230'''| '''PH6'''| '''SPI1_CLK'''| '''23'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''25'''|-| '''266'''| '''PI10'''| '''TWI2-SDA'''| '''27'''|-| '''256'''| '''PI0'''| style="text-align: left;"|| '''29'''|-| '''271'''| '''PI15'''| style="text-align: left;"|| '''31'''|-| '''<span style="color:#FF0000">268</span>'''| '''<span style="color:#FF0000">PI12</span>'''| '''<span style="color:#FF0000">PWM2</span>'''| '''<span style="color:#FF0000">33</span>'''|-| '''258'''| '''PI2'''| style="text-align: left;"|| '''35'''|-| '''272'''| '''PI16'''| style="text-align: left;"|| '''37'''|-| style="text-align: left;"|| style="text-align: left;"|| '''GND'''| '''39'''|}{| class="wikitable" style="width:390px;margin-right: 20px;text-align: center;"|-| '''引脚'''| '''功能'''| '''GPIO'''| '''GPIO序号'''|-| '''2'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"||-| '''4'''| '''5V'''| style="text-align: left;"|| style="text-align: left;"||-| '''6'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''8'''| '''UART0_TX'''| '''PH0'''| '''224'''|-| '''10'''| '''UART0_RX'''| '''PH1'''| '''225'''|-| '''12'''| style="text-align: left;"|| '''PI1'''| '''257'''|-| '''14'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''<span style="color:#FF0000">16</span>'''| '''<span style="color:#FF0000">PWM4</span>'''| '''<span style="color:#FF0000">PI14</span>'''| '''<span style="color:#FF0000">270</span>'''|-| '''18'''| style="text-align: left;"|| '''PH4'''| '''228'''|-| '''20'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''22'''| '''UART2_RX'''| '''PI6'''| '''262'''|-| '''24'''| '''SPI1_CS0'''| '''PH5'''| '''229'''|-| '''26'''| '''SPI1_CS1'''| '''PH9'''| '''233'''|-| '''28'''| '''TWI2-SCL'''| '''PI9'''| '''265'''|-| '''30'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''<span style="color:#FF0000">32</span>'''| '''<span style="color:#FF0000">PWM1</span>'''| '''<span style="color:#FF0000">PI11</span>'''| '''<span style="color:#FF0000">267</span>'''|-| '''34'''| '''GND'''| style="text-align: left;"|| style="text-align: left;"||-| '''36'''| style="text-align: left;"|| '''PC12'''| '''76'''|-| '''38'''| style="text-align: left;"|| '''PI4'''| '''260'''|-| '''40'''| style="text-align: left;"|| '''PI3'''| '''259'''|}</div><ol start="2" style="list-style-type: decimal;"><li><p>首先点击wiringOP图标打开wiringOP APP</p><p>[[File:zero2w-img355.png]]</p></li><li><p>然后在wiringOP的主界面点击'''PWM_TEST'''按钮进入PWM的测试界面</p><p>[[File:zero2w-img384.png]]</p></li><li><p>PWM测试界面如下所示</p><div class="figure"> [[File:zero2w-img385.png]] </div></li><li><p>然后在Channel中设置下想用哪个PWM,默认是PWM1,如果想设置为PWM2,则在Channel中输入2即可,PWM3和PWM4以此类推</p><p>[[File:zero2w-img386.png]]</p></li><li><p>然后可以设置下PWM的周期,默认的配置是'''50000ns''',转换为PWM频率是'''20KHz'''</p><p>[[File:zero2w-img387.png]]</p></li><li><p>然后点击'''EXPORT'''按钮导出PWM</p><p>[[File:zero2w-img388.png]]</p></li><li><p>然后拖动下面的进度条,就可以改变PWM的占空比,然后勾选'''Enable'''就可以输出PWM波形了</p></li> [[File:zero2w-img389.png]]</ol><ol start="9" style="list-style-type: decimal;"><li>然后使用示波器测量开发板40pin中的对应引脚就可以看到下面的波形了</li> [[File:zero2w-img390.png]]</ol><span id="android-12源码的编译方法"></span> = '''Android 12源码的编译方法''' = <span id="下载android-12的源码"></span>== 下载Android 12的源码 == <ol style="list-style-type: decimal;"><li><p>首先从百度或者谷歌网盘下载Android 12源码的分卷压缩包和Orange Pi Zero2w修改的文件的压缩包</p><ol style="list-style-type: lower-alpha;"><li><p>百度网盘</p><p>[[File:zero2w-img391.png]]</p></li><li><p>谷歌网盘</p><p>[[File:zero2w-img392.png]]</p></li></ol></li><li><p>Android 12源码的分卷压缩包下载完后,请先检查下MD5校验和是否正确,如果不正确,请重新下载源码。检查MD5校验和的方法如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''md5sum -c H618-Android12-Src.tar.gz.md5sum'''</p><p>H618-Android12-Src.tar.gzaa: '''<span style="color:#FF0000">OK</span>'''</p><p>H618-Android12-Src.tar.gzab: '''<span style="color:#FF0000">OK</span>'''</p><p>......</p>|}</li><li><p>然后需要将多个压缩文件合并成一个,再解压出安卓源码。命令如下所示:</p></li>{| class="wikitable" style="width:800px;" |-| test@test:~$ '''cat H618-Android12-Src.tar.gza* &gt; H618-Android12-Src.tar.gz''' test@test:~$ '''tar -xvf H618-Android12-Src.tar.gz'''|}</ol><ol start="4" style="list-style-type: decimal;"><li><p>然后解压Orange Pi Zero2w修改的文件的压缩包</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''tar zxf opizero2w_android12_patches.tar.gz'''</p><p>test@test:~$ '''ls'''</p><p>'''opizero2w_android12_patches''' opizero2w_android12_patches.tar.gz</p>|}</li><li><p>然后将Orange Pi Zero2w修改的文件复制到安卓源码中</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''cp -rf opizero2w_android12_patches/* H618-Android12-Src/'''</p>|}</li></ol> <span id="编译android-12的源码"></span> == 编译Android 12的源码 == {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''Android12的编译是在安装有<span style="color:#FF0000">Ubuntu 22.04</span>的x86_64电脑上进行的,其它版本的Ubuntu系统包依赖可能会有一些区别,Ubuntu 22.04 <span style="color:#FF0000">amd64</span>版本的镜像下载地址如下所示:''' [https://repo.huaweicloud.com/ubuntu-releases/22.04/ubuntu-22.04.2-desktop-amd64.iso '''https://repo.huaweicloud.com/ubuntu-releases/22.04/ubuntu-22.04.2-desktop-amd64.iso'''] '''编译Android12源码的x86_64电脑硬件配置建议内存为16GB或16GB以上,硬盘空间建议预留200GB或以上,CPU核心数越多越好。'''</big>|} <ol style="list-style-type: decimal;"><li><p>首先安装编译Android12源码需要的软件包</p>{| class="wikitable" style="width:800px;" |-| <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>'''zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \'''</p><p>'''lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache \'''</p><p>'''libgl1-mesa-dev libxml2-utils xsltproc unzip u-boot-tools python-is-python3 \'''</p><p>'''libssl-dev libncurses5 clang gawk'''</p>|}</li><li><p>然后编译'''longan'''文件夹中的代码,里面主要包含u-boot和linux内核</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行 '''./build.sh config'''设置编译选项</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''cd H618-Android12-Src/longan'''</p><p>test@test:~/H618-Android12-Src/longan$ '''./build.sh config'''</p>  <p>Welcome to mkscript setup progress</p><p>All available platform:</p>:<p>0. android</p>:<p>1. linux</p><p>Choice [android]: '''<span style="color:#FF0000">0</span>'''</p><p>All available ic:</p>:<p>0. h618</p><p>Choice [h618]: '''<span style="color:#FF0000">0</span>'''</p><p>All available board:</p>:<p>0. ft</p>:<p>1. p1</p>:<p>2. p2</p>:<p>3. p7</p>:<p>4. p7l</p>:<p>5. perf1</p>:<p>6. perf2</p>:<p>7. perf3</p>:<p>8. qa</p><p>Choice [p2]: '''<span style="color:#FF0000">2</span>'''</p><p>All available flash:</p>:<p>30. p7default</p>:<p>41. p7lnor</p><p>5. perf1Choice [default]: '''</pspan style="color:#FF0000">0<p/span>6. perf2'''</p><p>7. perf3All available kern_ver:</p>:<p>80. linux-5. qa4</p><p>Choice [p2linux-5.4]: '''2<span style="color:#FF0000">0</span>'''</p><p>All available flasharch:</p>:<p>0. defaultarm</p>:<p>1. norarm64</p><p>Choice [defaultarm64]: '''0'''</pspan style="color:#FF0000">1<p/span>All available kern_ver:'''</p><p>0'''..... linux-5.4'''</p><p>Choice [linux-5.4]: '''0'''</p><p>All available arch:</p><p>0. arm</p><p>1. arm64</p><p>Choice [arm64]: '''1'''</p><p>'''......'''</p><p>*** Default *** Default configuration is based on 'sun50iw9p1smp_h618_android_defconfig'</p><p>#</p><p># configuration written to .config</p><p>#</p><p>make[1]: Leaving directory '/home/test/H618-Android12-Src/longan/out/kernel/build'</p><p>make: Leaving directory '/home/test/H618-Android12-Src/longan/kernel/linux-5.4'</p><p>INFO: clean buildserver</p><p>INFO: prepare_buildserver</p>|}</li><li><p>然后运行'''./build.sh'''脚本就可以开始编译了</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/H618-Android12-Src/longan$ '''./build.sh'''</p>|}</li><li><p>编译完成后会看到下面的输出</p>{| class="wikitable" style="width:800px;" |-|
<p>sun50iw9p1 compile Kernel successful</p>
<p>INFO: Prepare toolchain ...</p><p>'''......'''</p><p>INFO: build kernel OK.</p><p>INFO: build rootfs ...</p><p>INFO: skip make rootfs for android</p><p>INFO: ----------------------------------------</p><p>INFO: build lichee OK.</p><p>INFO: ----------------------------------------</p>|}</li></ol></li><li><p>然后使用下面的命令编译安卓源码并生成最终的安卓镜像</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''cd H618-Android12-Src'''</p><p>test@test:~/H618-Android12-Src$ '''source build/envsetup.sh'''</p><p>test@test:~/H618-Android12-Src$ '''lunch apollo_p2-userdebug'''</p><p>test@test:~/H618-Android12-Src$ '''make -j8'''</p><p>test@test:~/H618-Android12-Src$ '''pack'''</p>|}</li><li><p>编译生成的安卓镜像存放路径为:</p>{| class="wikitable" style="width:800px;" |-| <p>'''longan/out/h618_android12_p2_uart0.img'''</p>|}</li></ol> = '''附录''' = == 用户手册更新历史 == {| class="wikitable" style="width:800px;text-align: center;"|-| '''版本'''| '''日期'''| '''更新说明'''|-| v1.0| 2023-09-14| 初始版本|} == 镜像更新历史 == {| class="wikitable" style="width:800px;"|-| style="text-align: center;"| '''日期''' | style="text-align: center;"| '''更新说明'''|-| style="text-align: center;"| 2023-09-14| orangepizero2w_1.0.0_debian_bullseye_server_linux5.4.125.7z orangepizero2w_1.0.0_ubuntu_focal_server_linux5.4.125.7z orangepizero2w_1.0.0_ubuntu_focal_desktop_xfce_linux5.4.125.7z orangepizero2w_1.0.0_debian_bullseye_desktop_xfce_linux5.4.125.7z  orangepizero2w_1.0.0_ubuntu_jammy_server_linux6.1.31.7z orangepizero2w_1.0.0_debian_bookworm_server_linux6.1.31.7z orangepizero2w_1.0.0_debian_bullseye_server_linux6.1.31.7z orangepizero2w_1.0.0_ubuntu_jammy_desktop_xfce_linux6.1.31.7z orangepizero2w_1.0.0_debian_bookworm_desktop_xfce_linux6.1.31.7z orangepizero2w_1.0.0_debian_bullseye_desktop_xfce_linux6.1.31.7z  OrangePi_Zero2w_Android12_v1.0.tar.gz  Opios-arch-aarch64-xfce-opizero2w-23.09-linux6.1.31.img.xz
orangepizero2w_1.0.0_debian_bookworm_desktop_xfce_linux6.1.31.7z
 
orangepizero2w_1.0.0_debian_bullseye_desktop_xfce_linux6.1.31.7z
 
OrangePi_Zero2w_Android12_v1.0.tar.gz
 
Opios-arch-aarch64-xfce-opizero2w-23.09-linux6.1.31.img.xz
* 初始版本
|}
8,460
个编辑