更改

跳转至: 导航搜索

Orange Pi 3G-IoT-B

添加40,120字节, 2022年6月23日 (四) 16:09
创建页面,内容为“== 介绍 == === 什么是 Orange Pi 3G-IoT === 香橙派是一款开源的单板电脑,新一代的 ARM 开发板,它可以运行 Android4.4、Linux等操作系…”
== 介绍 ==
=== 什么是 Orange Pi 3G-IoT ===
香橙派是一款开源的单板电脑,新一代的 ARM 开发板,它可以运行 Android4.4、Linux等操作系统。香橙派开发板(Orange Pi 3G-IOT)使用MTK系列MT6572 CPU。<br>
=== Orange Pi 3G-IoT 的用途 ===
我们可以用它搭建:<br>
* 一台计算机
* 一个无线网络服务器
* 游戏机
* 音乐播放器
* 高清视频播放器
* 扬声器
* Android <br><br>
当然还有其他更多的功能,因为Orange Pi 3G-IoT是开源的<br>

=== Orange Pi 3G-IoT 是为谁设计的 ===
Orange Pi 3G-IOT 不仅仅是一款消费品,同时也是给任何想用技术进行创作创新的人设计的。它是一款非常简单、有趣、实用的工具,你可以用它去打造你身边的世界。<br>
=== Orange Pi 3G-IoT 的硬件特性 ===
<br>
<table border="1" bordercolor="#d8d8d8" cellspacing="0" cellpadding="0" style="width:800px; line-height:30px;">
<tr>
<td style="padding:10px 0">主控芯片</td>
<td style="padding:10px 0"><p >MT6572</p></td>
</tr>
<tr>
<td style="padding:10px 0">处理器</td>
<td style="padding:10px 0"><p >双核ARM&#174; Cortex-A7,主频高达 1.2GHz</p></td>
</tr>
<tr>
<td style="padding:10px 0">图形处理器</td>
<td style="padding:10px 0"><p >ARM Mali-400</p></td>
</tr>
<tr>
<td style="padding:10px 0">内存+存储</td>
<td style="padding:10px 0">版本A:256MB DDR2+512MB EMMC Flash<br>版本B:512MB DDR2+4GB EMMC Flash</td>
</tr>

<tr>
<td style="padding:10px 0">无线网络</td>
<td style="padding:10px 0">WIFI / BT / FM / GPS 四合一</td>
</tr>
<tr>
<td rowspan="6">
<div style="display: flex;align-items: center;">
<div class="td-left" style="flex: 1;">射频频率</div>
<div class="td-right" style="flex: 1; border-left: 1px solid #000;">
<p style="border-bottom: 1px solid #000;padding:8px 0">GSM</p>
<p style="border-bottom: 1px solid #000;padding:8px 0">WCDMA</p>
<p style="border-bottom: 1px solid #000;padding:8px 0">TD-CDMA</p>
<p style="border-bottom: 1px solid #000;padding:8px 0">CDMA2000</p>


</div>
</div>
</td>
<td style="padding:10px 0">850/900/1800/1900</td>
</tr>
<tr>
<td style="padding:10px 0">B1+B2+B5+B8</td>
</tr>
<tr>
<td style="padding:10px 0">/</td>
</tr>
<tr>
<td style="padding:10px 0">/</td>
</tr>
<tr>
<td style="padding:10px 0">B1/B3/B7/B20 (B2/B4/B17 可选)</td>
</tr>
<tr>
<td style="padding:10px 0">B38/40/41B</td>
</tr>

<tr>
<td style="padding:10px 0">显示屏</td>
<td style="padding:10px 0"><p >FWVGA(FPC 转接到小板 zif)</p></td>
</tr>
<tr>
<td style="padding:10px 0">电容触摸</td>
<td style="padding:10px 0"><p >支持(FPC 转接到小板 共用屏 zif)</p></td>
</tr>

<tr>
<td style="padding:10px 0">摄像头</td>
<td style="padding:10px 0"><p >MIPI 接口</p></td>
</tr>

<tr>
<td style="padding:10px 0">SIM卡</td>
<td style="padding:10px 0">mini单SIM卡</td>
</tr>
<tr>
<td style="padding:10px 0">TF卡</td>
<td style="padding:10px 0">支持热插拔</td>
</tr>
<tr>
<td rowspan="2">
<div style="display: flex;align-items: center;">
<div class="td-left" style="flex: 1;">音频</div>
<div class="td-right" style="flex: 1; border-left: 1px solid #000;">
<p style="border-bottom: 1px solid #000;padding:10px 0;">耳机</p>
<p style="padding:10px 0">麦克风</p>
</div>
</div>
</td>
<td style="padding:10px 0">用于音频输入/输出</td>
</tr>
<tr>
<td style="padding:10px 0">用于音频输入</td>
</tr>


<tr>
<td style="padding:10px 0">USB</td>
<td style="padding:10px 0">USB Host*1, Micro USB*1</td>
</tr>
<tr>
<td style="padding:10px 0">LED 信号灯</td>
<td style="padding:10px 0">USB Host*1, Micro USB*1</td>
</tr>

<tr>
<td style="padding:10px 0">按键</td>
<td style="padding:10px 0">电源键(SW602)</td>
</tr>
<tr>
<td style="padding:10px 0">Low-level peripherals</td>
<td style="padding:10px 0">40pin 扩展口:GPIO 1.8V; 1 组SPI; 2 组 I2C; 2 组Uart; 16 个gpio</td>
</tr>
<tr>
<td style="padding:10px 0">电源</td>
<td style="padding:10px 0">Micro USB(5V 2A) 通过焊盘连接</td>
</tr>

<tr>
<td style="padding:10px 0">系统</td>
<td style="padding:10px 0">Android 4.4</td>
</tr>
<tr>
<td style="padding:10px 0">编程语言支持</td>
<td style="padding:10px 0">C、C++、Kotlin、Java、Shell、Pyhon 等</td>
</tr>

<tr>
<td colspan="2">外观规格</td>
</tr>
<tr>
<td>PCB 尺寸</td>
<td>52.4mm*68.8mm</td>
</tr>
<tr>
<td>重量</td>
<td>24g</td>
</tr>
<tr>
<td colspan="2" style="padding:10px 0;">Orange Pi™ 是深圳市迅龙软件有限公司的注册商标</td>
</tr>
</table>
<br>

=== 40pin GPIO 定义 ===
<br>

<table style="min-width: 800px;text-align: center; line-height:35px;" border="1" bordercolor="#d8d8d8" cellspacing="0" cellpadding="0" >
<tr>
<td>OrangePi(4G-IOT)</td>
<td></td>
<td></td>
</tr>
<tr>
<td style="background-color: #5a5a5a;">P01</td>
<td style="background-color: #5a5a5a;">VIO28_PMU</td>
<td></td>
</tr>
<tr>
<td style="background-color: #5a5a5a;">P02</td>
<td style="background-color: #5a5a5a;">DC5V</td>
<td></td>
</tr>
<tr>
<td style="background-color: #b1a0c6;">P03</td>
<td style="background-color: #b1a0c6;">SDA1</td>
<td style="background-color: #b1a0c6;">GPIO49</td>
</tr>
<tr>
<td style="background-color: #5a5a5a;">P04</td>
<td style="background-color: #5a5a5a;">DC5V</td>
<td></td>
</tr>
<tr>
<td style="background-color: #b1a0c6;">P05</td>
<td style="background-color: #b1a0c6;">SCL1</td>
<td style="background-color: #b1a0c6;">GPIO50</td>
</tr>
<tr>
<td style="background-color: #5a5a5a;">P06</td>
<td style="background-color: #5a5a5a;">GND</td>
<td></td>
</tr>
<tr>
<td style="background-color: #938a53;">P07</td>
<td style="background-color: #938a53;">EINT87</td>
<td style="background-color: #938a53;">GPIO87</td>
</tr>
<tr>
<td style="background-color: #d99694;">P08</td>
<td style="background-color: #d99694;">UTXD2</td>
<td></td>
</tr>
<tr>
<td style="background-color: #5a5a5a;">P09</td>
<td style="background-color: #5a5a5a;">GND</td>
<td></td>
</tr>
<tr>
<td style="background-color: #d99694;">P10</td>
<td style="background-color: #d99694;">URXD2</td>
<td style="background-color: #d99694;">GPIO57</td>
</tr>
<tr>
<td style="background-color: #c2d59a;">P11</td>
<td style="background-color: #c2d59a;">URXD1</td>
<td></td>
</tr>
<tr>
<td style="background-color: #938a53;">P12</td>
<td style="background-color: #938a53;">EINT8</td>
<td style="background-color: #938a53;">EINT8</td>
</tr>
<tr>
<td style="background-color: #c2d59a;">P13</td>
<td style="background-color: #c2d59a;">UTXD1</td>
<td></td>
</tr>
<tr>
<td style="background-color: #5a5a5a;">P14</td>
<td style="background-color: #5a5a5a;">GND</td>
<td></td>
</tr>
<tr>
<td style="background-color: #c2d59a;">P15</td>
<td style="background-color: #c2d59a;">UCTS1</td>
<td></td>
</tr>
<tr>
<td style="background-color: #f9c090;">P16</td>
<td style="background-color: #f9c090;">EINT9</td>
<td style="background-color: #f9c090;">EINT9</td>
</tr>
<tr>
<td style="background-color: #5a5a5a;">P17</td>
<td style="background-color: #5a5a5a;">VIO28_PMU</td>
<td></td>
</tr>
<tr>
<td style="background-color: #f9c090;">P18</td>
<td style="background-color: #f9c090;">EINT11</td>
<td style="background-color: #f9c090;">EINT11</td>
</tr>
<tr>
<td style="background-color: #92cddd;">P19</td>
<td style="background-color: #92cddd;">SPI2_MI</td>
<td style="background-color: #92cddd;">EINT3</td>
</tr>
<tr>
<td style="background-color: #5a5a5a;">P20</td>
<td style="background-color: #5a5a5a;">GND</td>
<td></td>
</tr>
<tr>
<td style="background-color: #92cddd;">P21</td>
<td style="background-color: #92cddd;">SPI2_MO</td>
<td style="background-color: #92cddd;">EINT4</td>
</tr>
<tr>
<td style="background-color: #c2d59a;">P22</td>
<td style="background-color: #c2d59a;">URTS1</td>
<td></td>
</tr>
<tr>
<td style="background-color: #92cddd;">P23</td>
<td style="background-color: #92cddd;">SPI2_CK</td>
<td style="background-color: #92cddd;">EINT6</td>
</tr>
<tr>
<td style="background-color: #92cddd;">P24</td>
<td style="background-color: #92cddd;">SPI2_CS</td>
<td style="background-color: #92cddd;">EINT5</td>
</tr>
<tr>
<td style="background-color: #5a5a5a;">P25</td>
<td style="background-color: #5a5a5a;">GND</td>
<td></td>
</tr>
<tr>
<td style="background-color: #92cddd;">P26</td>
<td style="background-color: #92cddd;">EINT12</td>
<td></td>
</tr>
<tr>
<td style="background-color: #528ed4;">P27</td>
<td style="background-color: #528ed4;">SDA2</td>
<td style="background-color: #528ed4;">GPIO51</td>
</tr>
<tr>
<td style="background-color: #938a53;">P28</td>
<td style="background-color: #938a53;">SCL2</td>
<td style="background-color: #938a53;">GPIO52</td>
</tr>
<tr>
<td style="background-color: #528ed4;">P29</td>
<td style="background-color: #528ed4;">SPI_CS</td>
<td style="background-color: #528ed4;">GPIO65</td>
</tr>
<tr>
<td style="background-color: #5a5a5a;">P30</td>
<td style="background-color: #5a5a5a;">GND</td>
<td></td>
</tr>
<tr>
<td style="background-color: #528ed4;">P31</td>
<td style="background-color: #528ed4;">SPI_CK</td>
<td style="background-color: #528ed4;">GPIO66</td>
</tr>
<tr>
<td style="background-color: #d99694;">P32</td>
<td style="background-color: #d99694;">URTS2</td>
<td style="background-color: #d99694;">GPIO60</td>
</tr>
<tr>
<td style="background-color: #528ed4;">P33</td>
<td style="background-color: #528ed4;">SPI_MO</td>
<td style="background-color: #528ed4;">PA9</td>
</tr>
<tr>
<td style="background-color: #5a5a5a;">P34</td>
<td style="background-color: #5a5a5a;">GND</td>
<td></td>
</tr>
<tr>
<td style="background-color: #528ed4;">P35</td>
<td style="background-color: #528ed4;">SPI_MI</td>
<td style="background-color: #528ed4;">GPIO67</td>
</tr>
<tr>
<td style="background-color: #d99694;">P36</td>
<td style="background-color: #d99694;">UCTS2</td>
<td style="background-color: #d99694;">GPIO59</td>
</tr>
<tr>
<td style="background-color: #938a53;">P37</td>
<td style="background-color: #938a53;">EINT_123</td>
<td style="background-color: #938a53;">GPIO123</td>
</tr>
<tr>
<td style="background-color: #938a53;">P38</td>
<td style="background-color: #938a53;">SCL3</td>
<td style="background-color: #938a53;">GPIO54</td>
</tr>
<tr>
<td style="background-color: #5a5a5a;">P39</td>
<td style="background-color: #5a5a5a;">GND</td>
<td></td>
</tr>
<tr>
<td style="background-color: #938a53;">P40</td>
<td style="background-color: #938a53;">SDA3</td>
<td style="background-color: #938a53;">GPIO53</td>
</tr>
</table>
<br><br>
接口详情视图:<br><br>
[[Image:4G-Iot-1.png]]<br>
[[Image:4G-Iot-2.png]]<br><br>

== 快速入门 ==
=== 准备硬件与软件工具 ===
硬件需求:<br>
* Orange Pi 4G-IoT 开发板<br>
* 一台编译用的主机,配置最好满足以下条件:<br>
64 位 CPU<br>
16GB 内存<br>
40GB 以上的空闲磁盘空间<br>
操作系统为 Ubuntu12.04 以上,最好为 Ubuntu14.04<br>
更详细的内容可以参考 Google 文档 https://source.android.com/source/building<br><br>
软件需求:<br>
* Orange Pi 4G-IoT SDK<br>
* Orange Pi 4G-IoT 固件<br>
* Android 烧录工具<br>
以上软件均可以通过 Mega、百度云盘 的方式获取,详情参见中英文官网:<br>
http://www.orangepi.org/downloadresources/<br>
http://www.orangepi.cn/downloadresourcescn/<br><br>
=== 开发板的供电方式 ===
开发板的供电方式有两种:<br>
* DC (5V 2A)供电:插入 DC 适配器后即可开机。<br>
* 电池供电:常用 3.7V 电池,在背面有预留外接电池焊盘点 需要客户自己焊接 接上电池之后按开机键即可启动。<br>

=== 拆包说明 ===
收到产品后请将产品的天线从图 1 的位置放到图 2 的位置(或者放到板子外面的位置),不能贴在板子上面以免影响信号。<br><br>
[[Image:4G-Iot-3.png]]<br><br>

== Android 编译环境搭建 ==
=== 获取 SDK 源码压缩包 ===
为方便客户快速进行开发,OrangePi 有提供不同版本的 SDK 初始压缩包。<br>
* '''Android6.0'''<br>
下载压缩包,分别对应 OrangePi_4G-IoT_Android6.0_V1.0.tar.gz.00, OrangePi_4G-IoT_Android6.0_V1.0.tar.gz.01, ...<br>
OrangePi_4G-IoT_Android6.0_V1.0.tar. gz.14 总共 15 个分卷压缩包。获取到分卷压缩包后,把所有的压缩包放在一个同一目录下,如:<br>
{| class="wikitable" style="width:800px;"
|-
|创建目录<br>
mkdir OrangePi_4G-IOT_Android6.0<br>
拷贝分卷压缩包<br>
cp -rf OrangePi_4G-IoT_Android6.0_V1.0.tar.gz.* <br>
OrangePi_4G-IOT_Android6.0/<br>
合并压缩包<br>
cat OrangePi_4G-IoT_Android6.0_V1.0.tar.gz.* ><br>
OrangePi_4G-IOT_Android6.0.tar.gz<br>
解压<br>
tar xzvf OrangePi_4G-IOT_Android6.0.tar.gz<br>
|}
* '''Android8.1'''<br>
下载压缩包,分别对应x00, x01, x02, x03 ...x10 总共 11 个分卷压缩包。获取到分卷压缩包后,把所有的压缩包放在一个同一目录下,如:<br>
{| class="wikitable" style="width:800px;"
|-
|创建目录<br>
mkdir OrangePi_4G-IOT_Android8.1<br>拷贝分卷压缩包
cp -rf x00 x01 x02 ... x10 合并压缩包<br>
cat x*>OrangePi_4G-IOT_Android8.1.tar.gz<br>解压<br>
tar xzvf OrangePi_4G-IOT_Android8.tar.gz<br>
|}

=== 搭建编译环境 ===
可以参考 Google 官方文档: http://source.android.com/source/initializing.html<br>
* '''安装 JDK'''
'''Android6.0'''<br>
Android6.0 系统编译依赖于 JAVA7。编译前需要安装 OpenJDK。安装命令如下。<br>
{| class="wikitable" style="width:800px;"
|-
| sudo apt-get install openjdk-7-jdk
|}
配置 JAVA 环境变量,比如安装路径为 /usr/lib/jvm/java-7-openjdk-amd64<br>
可以在终端执行如下命令配置环境变量。<br>
{| class="wikitable" style="width:800px;"
|-
|export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64<br>
export PATH=$JAVA_HOME/bin:$PATH<br>
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
|}
'''Android8.1'''<br>
Android8.1 系统编译依赖于 JAVA8。编译前需要安装 OpenJDK。安装命令如下。<br>
{| class="wikitable" style="width:800px;"
|-
| sudo apt-get install java-8-openjdk-amd64
|}
配置 JAVA 环境变量,比如安装路径为 /usr/lib/jvm/java-8-openjdk-amd64 可以在终端执行如下命令配置环境变量。<br>
{| class="wikitable" style="width:800px;"
|-
|export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64<br>
export PATH=$JAVA_HOME/bin:$PATH<br>
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar<br>
|}
* '''安装软件包'''<br>
对于 Ubuntu12.04:<br>
{| class="wikitable" style="width:800px;"
|-
|sudo apt-get update<br>
sudo apt-get install git-core gnupg flex bison ccache gperf libsdl1.2-dev libesd0-dev<br>
libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind libc6-dev lib32ncurses5-dev x11proto-core-dev<br>
libx11-dev lib32readline-gplv2-dev lib32z1-dev libgl1-mesa-dev gcc-4.4<br>
g++-4.4 g++-4.4-multilib g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc wine
|}
对于 Ubuntu14.04:<br>
{| class="wikitable" style="width:800px;"
|-
|sudo apt-get update<br>
sudo apt-get install git-core gnupg flex bison ccache gperf libsdl1.2-dev libesd0-dev<br>
libwxgtk2.8-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind libc6-dev lib32ncurses5-dev x11proto-core-dev<br>
libx11-dev lib32readline-gplv2-dev lib32z1-dev libgl1-mesa-dev g++-multilib g++-4.8-multilib mingw32 tofrodos python-markdown<br>
libxml2-utils xsltproc libc6-dev-i386 lib32z1 lib32ncurses5 lib32bz2-1.0 lib32readline-gplv2-dev wine
|}
至此,我们可以开始进行 SDK 源码的编译。<br><br>

=== 编译 SDK 源码 ===
为方便客户进行开发,Orange Pi 提供了一系列的编译脚本。<br>
* '''Android6.0'''<br>
目录为 SDK/code/orangepi/scripts<br>
{| class="wikitable" style="width:800px;"
|-
|$ cd code/orangepi/scripts<br>
$ ls anr_LM.sh auto.sh clean.sh codegen.sh init_project.sh tar_img.sh
|}
auto.sh 为自动编译脚本<br>
clean.sh 为自动清除编译结果脚本<br><br>
在 code/orangepi/scripts 目录下,我们执行自动编译脚本:<br>
{| class="wikitable" style="width:800px;"
|-
| $ ./auto.sh IoT_bd6737m_35g_b_m0_op_smt_hd720_pcb_v2 v00 eng
|}
传入的三个参数含义如下:<br>
#$1 project_info [eg: IoT_bd6737m_35g_b_m0_op_smt_hd720_pcb_v2] <br>
#$2 version_info [eg: v00 v01 ...]<br>
#$3 compile_mode [eng:user userdebug eng]<br>

* '''Android8.1'''<br>
目录为 SDK/code/orangepi/scripts<br>
{| class="wikitable" style="width:800px;"
|-
|$ cd code/orangepi/scripts<br>
$ ls anr_LM.sh auto.sh clean.sh codegen.sh init_project.sh tar_img.sh
|}
auto.sh 为自动编译脚本<br>
clean.sh 为自动清除编译结果脚本<br><br>

在 code/orangepi/scripts 目录下,我们执行自动编译脚本:<br>
{| class="wikitable" style="width:800px;"
|-
| $ ./auto.sh IoT_k37mv1_bsp_ry_smt_hd720_pcb_v2 v00 eng
|}
传入的三个参数含义如下:<br>
#$1 project_info [eg: IoT_k37mv1_bsp_ry_smt_hd720_pcb_v2]<br>
#$2 version_info [eg: v00 v01 ...]<br>
#$3 compile_mode [eng:user userdebug eng]<br><br>

执行命令编译<br>
source build/envsetup.sh<br>
luncher >full_k37mv1_bsp-eng<br>
make -j4<br>
<big>'''模块编译'''</big><br>
如:单编译launcer<br>
mm packages/apps/Launcher3/ 或者进入到packages/apps/Launcher3/下,执行mm。<br>
注意:有些模块由于依赖包的关系,需要mma<br><br>

=== 生成固件 ===
<br>
* '''Android6.0'''
编译完成后固件将汇总在 code/IoT_op_smt_hd720_pcb_v2 目录中,并打包形如 IoT_op_smt_hd720_pcb_v2_v00_eng_20180126140300.tar.gz 名字的压缩包。<br><br>

<div style="background:#f1f1f1;border:1px solid #ddd;padding:5px;width:800px; ">
$ tree IoT_op_smt_hd720_pcb_v2 IoT_op_smt_hd720_pcb_v2<br>
├── images<br>
│ ├── boot.img<br>
│ ├── cache.img<br>
│ ├── lk.bin<br>
│ ├── logo.bin<br>
│ ├── MT6737M_Android_scatter.txt<br>
│ ├── preloader_bd6737m_35g_b_m0.bin<br>
│ ├── recovery.img<br>
│ ├── secro.img<br>
│ ├── system.img<br>
│ ├── trustzone.bin<br>
│ └── userdata.img<br>
└── modem<br>
├── APDB_MT6735_S01_alps-mp-m0.mp1_W17.21<br>
├── _APDB_MT6735_S01_alps-mp-m0.mp1_W17.21.check<br>
└── APDB_MT6735_S01_alps-mp-m0.mp1_W17.21_ENUM
</div><br>
除此之外,开发者也可通过 Linux_Pack_Firmware 对以上固件进行打包,生成统一固件 update.img。<br>
* '''Android8.1'''<br><br>
编译完成后固件将汇总在 code/IoT_ry_smt_hd720_pcb_v2 目录中,并打包形如 IoT_ry_smt_hd720_pcb_v2_v09_eng_20180504163653.tar.gz 名字的压缩包。<br>
<div style="background:#f1f1f1;border:1px solid #ddd;padding:5px;width:800px;">
$ tree IoT_op_smt_hd720_pcb_v2 IoT_op_smt_hd720_pcb_v2<br>
├── images<br>
│ ├── boot.img<br>
│ ├── cache.img<br>
│ ├── lk.bin<br>
│ ├── logo.bin<br>
│ ├── MT6737M_Android_scatter.txt<br>
│ ├── preloader_k37mv1_bsp.bin<br>
│ ├── recovery.img<br>
│ ├── secro.img<br>
│ ├── system.img<br>
│ ├── trustzone.bin<br>
│ └── userdata.img<br>
└── modem<br>
├── APDB_MT6735_S01_alps-mp-m0.mp1_W18.04<br>
├── _APDB_MT6735_S01_alps-mp-m0.mp1_W18.04.check<br>
└── APDB_MT6735_S01_alps-mp-m0.mp1_W18.04_ENUM
</div>
<br>

== Android 固件烧录 ==
'''Orange Pi 4G-IoT 开发板''' 烧录相关按键与接口如下:<br><br>
[[Image:4G-Iot-4.png]]<br><br>
编译生成的固件清单如下:<br><br>
<div style="background:#f1f1f1;border:1px solid #ddd;padding:5px;width:800px; ">
IoT_op_smt_hd720_pcb_v2<br>
├── images<br>
│ ├── boot.img<br>
│ ├── cache.img<br>
│ ├── lk.bin<br>
│ ├── logo.bin<br>
│ ├── MT6737M_Android_scatter.txt<br>
│ ├── preloader_bd6737m_35g_b_m0.bin<br>
│ ├── recovery.img<br>
│ ├── secro.img<br>
│ ├── system.img<br>
│ ├── trustzone.bin<br>
│ └── userdata.img<br>
└── modem<br>
├── APDB_MT6735_S01_alps-mp-m0.mp1_W17.21<br>
├── _APDB_MT6735_S01_alps-mp-m0.mp1_W17.21.check<br>
└── APDB_MT6735_S01_alps-mp-m0.mp1_W17.21_ENUM<br>
<br></div>
我们提供已经编译且打包好的镜像分区文件,请根据自身的需求自行下载:<br>
http://www.orangepi.org/downloadresources/<br>
通过如下命令进行Android6.0 镜像解压<br>
{| class="wikitable" style="width:800px;"
|-
| $ tar zxvf IoT_op_smt_hd720_pcb_v2_v00_eng_20180126140300.tar.gz
|}
即可得到上文中固件清单中的文件。或者也可以参照Android 环境搭建及固件编译部分自行编译。<br><br>
<big>'''主机操作系统支持:'''</big><br>
* Windows 10<br>
* Windows 7 (32/64 位)<br>
* Windows 8 (32/64 位)<br>
* Ubuntu10.04 / 12.04 / 14.04 (32/64 位)<br>

=== 烧录工具介绍 ===
烧录工具为 Smart Phone Flash Tool请前往 OrangePi官方网站中 4G-IoT 版块下载。<br><br>
本工具有 Windows 和 Linux 版。请根据自己的主机环境选取合适的版本。界面如下:<br><br>
[[Image:4G-Iot-5.png]]<br><br>
Windows 和 Linux 版的使用方法完全一样。本手册将以 Linux 版为例进行烧录说明。<br>
=== 镜像烧录方法 ===
{| class="wikitable" style="width:800px;"
|-
|连不上电脑,则需要:<br>
$sudo apt-get remove modemmanager<br>
$sudo /etc/init.d/udev retstart<br>
然后重启电脑<br><br>
Window 下根据相应的系统下载 MTK 驱动<br>
解压 Driver_Auto_Installer_EXE_v5.1453.03.rar<br>
然后安装。
|}
<br>
* <big>'''解压并打开烧录工具'''</big><br>
{| class="wikitable" style="width:800px;"
|-
|$ unzip SP_Flash_Tool_v5.1644_Linux.zip<br>
$ cd SP_Flash_Tool_v5.1644_Linux<br>
$ sudo ./flash_tool.sh
|}
<br>
如果你是第一次打开软件,可能会出现 警告显示 scatter file 文件未找到 :<br>
[[Image:4G-Iot-30.png]]<br><br>
这是正常的。后面我们将手动指定 Scatter File 的路径。点击 OK 后我们进入软件。<br><br>
* <big>'''进入烧录模式'''</big><br>
a.首先切换到 Download 标签页,显示如下:
[[Image:4G-Iot-31.png]]<br><br>
b.我们点击 Scatter-loading File 一栏的最右侧的 choose并且选择 Scatter File 的路径,如下图
[[Image:4G-Iot-32.png]]<br><br>
c.双击选择后,在下面的分区信息显示部分将会自动填充各个分区文件所在的路径,以及他们将要被烧录的绝对起始地址,如下图:
[[Image:4G-Iot-33.png]]<br><br>
d.在分区信息显示部分的左上角有一个下拉菜单其中有三个选项<br>
Format All + Download //擦除机器内的全部分区信息,并且重新下载选中分区<br>
Firmware Upgrade //更新选中分区中有差异的部分<br>
Download Only //无论是否有差异都重新下载
<span style="color:red;">注意</span>,一般情况下固件更新只需要选择 Firmware Upgrade,<span style="color:red;">切勿选择</span> Format All +Download。<br>
因为我们的每台机器在出厂的时候都有针对于进行各项参数的校准,在 Format All后会丢失校准信息。<br>
如果不慎出现此情况请联系售后并根据指导通过机器码获取校准参数,并按照《4G-IOT 校准参数导入导出工具和说明》重新烧录校准参数。<br>
e.接下来使用 USB 下载线,连接主机的 USB 与机器的 MircoUSB 接口。右上角红灯亮。<br><span style="color:red;">此时不需要连接 DC 电源。</span><br>
f.点击 Download 按钮进行下载 [[Image:4G-Iot-34.png]]<br>
g.下载完成后界面如下
[[Image:4G-Iot-35.png]]<br>
h.拔掉USB线。插上DC电源。
等待5秒将会显示关机充电界面。<br>
长按Power按键5秒后松开,会开机进入系统。<br>
当更新的分区比较多时,第一次开机也会时间稍长(全分区更新的情况开机需要8min),请耐心等待。<br><br>
Window 系统需要下载 SP_Flash_Tool_v5.1644_Win.zip,然后解压安装,就可以烧录固件了。操作方法和 Linux 的一样。<br><br>
接下来请享用您自己的定制 4G 手机吧。: )

=== 常见问题 ===
Android8.1 编译工具链使用了全新的 Jack server 来取代以往的编译器工具,所以编译时会出现问题。以下是 Android8.1 编译的常见问题。<br><br>
'''1)编译前要先配 Jack server'''<br>
1.修改$HOME 路径下的.jack 文件:<br>
[[Image:4G-Iot-36.png]]<br><br>
2.修改$HOME 路径下的.jack-settings 文件:<br>
[[Image:4G-Iot-37.png]]<br>
(注:此处两个文件的 TCP 端口号必须是没有用过的,且两个文件的端口配置要相同!)<br><br>
3.code/prebuilts/sdk/tools/目录下,执行./jack-admin kill-server 和./jack-admin restart-server<br><br>
'''2)Failed to contact Jack server'''<br>
如果你在编译的过程中,出现了如下的问题:<br>
FAILED: /bin/bash -c "(prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar<br>
prebuilts/sdk/tools/jack-server-4.8.ALPHA.jar 2>&1 || (exit 0) ) && <br>
(JACK_SERVER_VM_ARGUMENTS=\"-Dfile.encoding=UTF-8-XX:+TieredCompilation\" prebuilts/sdk/tools/jack-admin start-server 2>&1 || exit 0 ) &&<br>
(prebuilts/sdk/tools/jack-admin update server prebuilts/sdk/tools/jack-server-4.8.ALPHA.jar 4.8.ALPHA 2>&1 || exit 0 ) &&<br>
(prebuilts/sdk/tools/jack-admin update jack prebuilts/sdk/tools/jacks/jack-2.28.RELEASE.jar 2.28.RELEASE || exit 47; prebuilts/sdk/tools/jack-admin<br>
update jack prebuilts/sdk/tools/jacks/jack-3.36.CANDIDATE.jar 3.36.CANDIDATE || exit 47; prebuilts/sdk/tools/jack-admin update jack<br>
prebuilts/sdk/tools/jacks/jack-4.7.BETA.jar 4.7.BETA || exit 47 )"<br>
Writing client settings in /home/user3/.jack-settings<br>
Installing jack server in "/home/user3/.jack-server"

<br>
修改:在 code/prebuilts/sdk/tools/目录下,执行./jack-admin kill-server 和./jack-admin restart-server,然后重新编译。<br><br>
'''3)Out of memory error'''<br>
1.首先停止 jack server 的运行;
2.去 prebuilts/sdk/tools 目录下执行 jack-admin kill-server 以杀死 Jack server;<br>
3.然后打开 jack-admin 文件,在文件中搜索 JACK_SERVER_COMMAND, 然 后 将 JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1
-Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp<br>
$LAUNCHER_JAR $LAUNCHER_NAME", 改为 JACK_SERVER_COMMAND="java -Xmx3g -XX:MaxJavaStackTraceDepth=-1<br>
-Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp<br>
$LAUNCHER_JAR $LAUNCHER_NAME"。也就是添加了-Xmx3g 选项。<br><br>

'''4)FAILED: setup-jack-server'''<br>
Jack server installation not found<br>
解决方法:到 prebuilts/sdk/tools 目录下执行一下这个命令:./jack-admin install-server jack-launcher.jar jack-server-4.11.ALPHA.jar<br>
jack-launcher.jar,jack-server-4.11.ALPHA.jar 这两个文件的名字视 prebuilts/sdk/tools 目录下的文件名而定。<br><br>

'''5)测试问题'''<br>
遇到 sim 卡不能识别的时候,需要格式化烧录。<br><br>

== linux 编译环境搭建 ==
=== 获取linux 源码 ===
* <big>'''OrangePi 源码下载器'''</big><br>
{| class="wikitable" style="width:800px;"
|-
|$ sudo apt-get install git<br>
$ git clone https://github.com/orangepi-xunlong/OrangePi_Build.git<br>
$ cd OrangePi_Build<br>
$ ls<br>
Build_OrangePi.sh lib README.md<br>
|}
* <big>'''运行下载器'''</big><br>
{| class="wikitable" style="width:800px;"
|-
| $ ./Build_OrangePi.sh
|}
输入 root 密码,然后回车<br>
[[Image:4G-Iot-52.png]]<br><br>
选择 0 Build system with kernel/uboot/rootfs,进入开发板型号选择界面。<br>
[[Image:4G-Iot-53.png]]<br><br>
选择 23 orangepi 4G-IoT,回车后将会开始下载 Orange Pi 4G-IoT 的 Linux 源码<br>
[[Image:4G-Iot-54.png]]<br><br>
下载的源码会存放在 OrangePi_Build 的同级目录下。<br><br>
OrangePi 4G-IoT 的 Linux 源码目录结构如下所示<br>

<div style="background:#f1f1f1;border:1px solid #ddd;padding:5px; width:800px;">
├── bootloader<br>
├── build.sh -> scripts/build.sh 编译启动脚本<br>
├── external <br>
├── kernel<br>
├── output Store the output file, generate it after compiling the source code<br>
├── scripts<br>
└── toolchain<br>
<br>6 directories, 1 file
</div>
<br>

=== 编译linux 源码 ===
* <big>'''执行编译启动脚本'''</big><br>
{| class="wikitable" style="width:800px;"
|-
|$ cd OrangePi4G-IoT<br>
$ ./build.sh
|}
根据板子型号选择并回车<br><br>
[[Image:4G-Iot-38.png]]<br><br>
输入 root 密码并回车,然后选择需要执行的功能<br><br>
[[Image:4G-Iot-39.png]]<br><br>
[[Image:4G-Iot-40.png]]<br><br>

其中各选项的功能如下:<br>
* '''0 Build Release Image &nbsp;&nbsp;&nbsp;&nbsp;编译 ubuntu 和 debian 发行版'''
* '''1 Build Rootfs &nbsp;&nbsp;&nbsp;&nbsp;编译 Rootfs'''
* '''2 Build Uboot &nbsp;&nbsp;&nbsp;&nbsp;编译 preloader 和 lk'''
* '''3 Build Linux &nbsp;&nbsp;&nbsp;&nbsp;编译内核源码'''<br>
选择 0 Build Release Image,会生成以下完整的固件包<br><br>
<div style="background:#f1f1f1;border:1px solid #ddd;padding:5px;width:800px;">
output/images/<br>
├── OrangePi_4g-iot_ubuntu_xenial_server_linux3.18.19_v1.1<br>
│ ├── boot.img<br>
│ ├── lk.bin<br>
│ ├── lk_emmc.bin<br>
│ ├── lk_sd.bin<br>
│ ├── logo.bin<br>
│ ├── MT6737M_Android_scatter.txt<br>
│ ├── preloader_bd6737m_35g_b_m0.bin<br>
│ ├── rootfs.img<br>
│ └── trustzone.bin<br>
└── OrangePi_4g-iot_ubuntu_xenial_server_linux3.18.19_v1.1.tar.gz<br>
<br>
1 directory, 10 files
</div>
<br>

== Linux 系统的烧录 ==
目前 Linux 系统不支持 modem、LCD 屏。<br>
只能通过串口登录系统,连接 wifi 后,可通过 ssh 登录。<br><br>
前面的《安卓固件烧录》已经介绍了如何使用烧录工具了,这里不再赘述,直接打开烧录工具。<br>
a.'''我们点击Scatter-loading File一栏的最右侧的choose并且选择Scatter File的路径''',如下图
[[Image:4G-Iot-60.png]]<br><br>
b.'''先断开板子与 PC 的连接,点击 Download 按钮'''
[[Image:4G-Iot-61.png]]<br><br>
c.'''接下来使用 USB 下载线,连接主机的 USB 与机器的 MircoUSB 接口'''。烧录完成
[[Image:4G-Iot-62.png]]<br><br>
d.'''启动系统'''。
将板子连接 5V 3A 的电源适配器。连接串口可以看到系统启动。<br>
[[Image:4G-Iot-63.png]]<br><br>
如果板载空间不够,可以将 rootfs 烧录到 TF 卡上。步骤如下。<br><br>
e.'''烧录支持挂载TF卡rootfs的lk'''
点击下图框中内容<br>
[[Image:4G-Iot-64.png]]<br><br>
弹出窗口选择 lk_sd.bin。<br><br>
[[Image:4G-Iot-65.png]]<br><br>
点击 download,下载完成<br>
f.'''烧录 rootfs 到 TF 卡中'''
准备一张 8G 以上,class10 的 TF 卡。格式化后。按照以下方法烧录 roofs.img<br>
pv rootfs.img | sudo dd of=/dev/sdb bs=1M
sdb 是 TF 卡对应的设备文件<br>
如果是在 windows 系统,也可以用 Win32DiskImager 软件烧录。<br><br>
g.启动系统
将 tf 卡插入板子,上电即可启动。<br><br>

== 串口调试工具介绍 ==
首先需要准备一根 USB 转 TTL 串口线,需要支持 921600 波特率4G-IoT 的调试串口没有引出,需要用户自己飞线,如下图方框的焊点就是串口的 TXD和 RXD,需要将 GND、RXD、TXD 引出来。<br><br>
[[Image:4G-Iot-41.png]]<br><br>
接线方式:<br>

板子 TXD 接 USB 转 TTL 的 RXD <br>
板子 RXD 接 USB 转 TTL 的 TXD <br>
板子 GND 接 USB 转 TTL 的 GND <br><br>

=== 基于Windows 平台的使用 ===
在使用 OrangePi 做项目开发过程中,为了获得更多的调试信息,OrangePi 默认支持串口信息调试。对于开发者而言,只需准备上面提到的材料,即可简单的获得串口调试信息。<br>
不同的上位机使用的串口调试工具大同小异,基本可以参考下文的方法进行部署。使用 Windows 平台进行串口调试的工具很多,通常使用的工具是putty。<br>
本节以 putty 作为例子进行部署讲解。<br><br>
* <big>'''安装 USB 驱动'''</big><br>
下载最新版的驱动 PL2303_Prolific_DriverInstaller_v130.zip,下载解压<br><br>
[[Image:4G-Iot-45.png]]<br><br>
以管理员身份选择应用程序安装<br><br>
[[Image:4G-Iot-46.png]]<br><br>
等待安装完成<br><br>
[[Image:4G-Iot-47.png]]<br><br>
* <big>'''下载安装 Putty'''</big><br>
Putty 可从下面的地址下载,请选择适合自己开发环境的版本。<br>
{| class="wikitable" style="width:800px;"
|-
| https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
|}
直接双击下载的 putty.exe 即可打开 putty,软件界面如下图所示。<br>
[[Image:4G-Iot-48.png]]<br><br>
* <big>'''设备信息的获取'''</big><br>
在 Windows7 中,我们可以通过设备管理器查看串口连接是否正常以及串口的设备号。如果设备没有正常识别,请检查驱动是否安装成功。<br>
如果驱动安装有问题, 可以尝试使用 360 驱动大师扫描安装驱动。<br>
[[Image:4G-Iot-49.png]]<br><br>
* <big>'''Putty配置'''</big><br>
串行口设置成相应的端口号(COM4),关闭流控,速度设置成 921600<br><br>
[[Image:4G-Iot-50.png]]<br><br>
* <big>'''启动调试串口输出'''</big><br>
OrangePi上电开机,putty将会自动打印串口log信息<br>

=== 基于 Linux 平台的使用 ===
在 Linux 平台使用 putty 和 Windows 平台区别不太,下面主要说明有差异地方的操作步骤。所有操作都是基于 Ubuntu 14.04 系统。<br><br>
* <big>'''安装并启动 Putty'''</big><br>
{| class="wikitable" style="width:800px;"
|-
|$ sudo apt-get install putty<br>$ sudo putty
|}
* <big>'''配置 Putty'''</big><br>
串口号可以通过 ls '''/dev/ttyUSB*''' 查看波特率需要设置为 921600 并且关闭流控<br><br>
[[Image:4G-Iot-51.png]]<br><br>

== GPIO 调试 ==
GPIO 调试有两种方法:<br><br>
1.Linux 下面有一个通用的 GPIO 操作接口,那就是我要介绍的“/sys/class/gpio”方式。<br>
GPIO 的配置文件在/sys/class/gpio 目录下,控制程序可以分为四个步骤:<br><br>
①、配置 GPIO:<br>
在/sys/class/gpio 目录下可以看到文件 export,调用该文件以实现配置。该文件对所有 GPIO 编号,40pin GPIO 口,可通过原理图或手册获取。<br>
如 40pin 的第 37 个 pin 脚是 GPIO123 在终端输入: # echo 123 > /sys/class/gpio/export , 在此回到目录/sys/class/gpio 下,可以看到产生了<br>
一个新的目录./gpio123,里面包含了该 IO 口的输入输出设置等配置文件。注意:export 文件只有 root 写权限,执行上述命令或者以后用 C 编写的<br>
可执行文件要以 ROOT 身份执行。<br><br>
②、设置 GPIO 的方向(输入输出):<br>
在终端输入:# echo "out" > /sys/class/gpio/gpio38/direction,即设置该 GPIO 为输出。<br><br>
③、设置 GPIO 的输出电平:<br>
在终端输入:#echo 1 > /sys/class/gpio/gpio123/value,即设置 GPIO 输出高电平,输入 echo "0" > /sys/class/gpio/gpio123/value 设置 GPIO 输出低电平。<br>
④、关闭 GPIO:<br>
在终端输入:#echo "38" > /sys/class/gpio/unexport,即删除 GPIO 配置文件,可以看到目录 gpio38 已经被删除.<br><br>
2.MTK 用 ADB 修改和显示 GPIO 状态<br>
获取 GPIO 的状态, cat /sys/devices/virtual/misc/mtgpio/pin<br><br>
在 adb 下面直接执行 cat /sys/devices/virtual/misc/mtgpio/pin 命令则显示:<br>
pin:[mode] [pull_sel] [din] [dout] [pull en] [dir] [ies] [smt]<br><br>
0:11101010<br><br>
1:01101010<br><br>
、、、、、、<br><br>
22:1-100-10-1-1<br><br>
、、、、、、、<br><br>
42:00000110<br><br>
每行分别对应:<br><br>
IO 编号:模式,输入上拉选择,输入值,输出值,输入上拉使能,方向 direction, 输入翻转<br><br>
修改 GPIO 的状态:<br>
40pin GPIO 口,可通过原理图或手册获取,如 40pin 的第 37 个 pin 脚是 GPIO123, <br>
echo -wdout123 1> pin 即设置该 GPIO 输出高电平<br>
echo -wdout123 0> pin 即设置该 GPIO 输出低电平<br><br>

== 版本历史 ==
{| class="wikitable" style="width:800px;"
|-
! 版本 !! 日期 !! 作者 !! 摘要 !! 发布 !! 备忘录
|-
| 1.1 || 2018-01-26 || Younix || 创建文档 || 2018-3-27 || -
|-
| 1.2 || 2018-05-10 || Pan || 增加 Android8.1|| 2018-5-18 || -
|-
| 1.3 || 2018-10-18 || Pan || GPIO 定义及调试 || 2018-10-19 || -
|-
| 1.4 || 2019-06-24 || Csy || Linux 源码编译及串口调试 || - || -
|-
| 1.5 || 2020-03-18 || Csy || 增加 Linux 系统烧录说明 || - || -
|}
8,460
个编辑

导航菜单