跳转至: 导航, 搜索

“Test”的版本间的差异

android开发平台的搭建
 
(未显示同一用户的26个中间版本)
第1行: 第1行:
 
+
[[Category:开发板]]
 
== android开发平台的搭建==
 
== android开发平台的搭建==
  
第482行: 第482行:
 
 安装eclipse后,还不能建立C/C++工程,需安装插件。进入官网下载:
 
 安装eclipse后,还不能建立C/C++工程,需安装插件。进入官网下载:
  
http://www.eclipse.org/downloads/download.php?file=/tools/cdt
+
http://www.eclipse.org/downloads/download.php?file=/tools/cdt
  
 
 解压下载的文件<nowiki>cdt-master-8.0.1.zi</nowiki>p,将解压出来的plugins和features目录拷贝到eclipse安装目录,直接合并即可完成安装。
 
 解压下载的文件<nowiki>cdt-master-8.0.1.zi</nowiki>p,将解压出来的plugins和features目录拷贝到eclipse安装目录,直接合并即可完成安装。
第490行: 第490行:
 
 第一步:打开eclipse,首次打开时,会提示选择工作路径,建立自己的路径,确定即可;
 
 第一步:打开eclipse,首次打开时,会提示选择工作路径,建立自己的路径,确定即可;
  
 第二步:新建一个工程。点
+
 第二步:新建一个工程。点 击File-&gt;New-&gt;Project,选 择C/C++-&gt;C Project,点 击Next ,在Project name一栏输入工程名称,如xboot,在Project name下面有一个Use default location的选择框,去掉前面的勾,点 击Browse ,指向我们需要修改的文件的目录。
  File-&gt;New-&gt;Project,
 
 
  C/C++-&gt;C Project,
 
 
  Next
 
在Project name一栏输入工程名称,如xboot,在Project name下面有一个Use default location的选择框,去掉前面的勾,
 
 
  Browse
 
指向我们需要修改的文件的目录。
 
 
 
 
 在Project type中选择一个工程类型,如Shared Library-&gt;Empty Project,在Toolchains中选择Cross GCC,再点击Next,在Select Configurations中选择配置类型,如Release,点击Finish完成。
 
 在Project type中选择一个工程类型,如Shared Library-&gt;Empty Project,在Toolchains中选择Cross GCC,再点击Next,在Select Configurations中选择配置类型,如Release,点击Finish完成。
 
 
 第三步:这时在Project Explorer中有xboot的目录,右击xboot,点击Import,找到General-&gt;File System,双击,弹出Import对话框,在From directory中找到需要加载的文件的目录,点击Select All,将把加载的目录的所有类型文件添加到工程中,点击Finish按钮,提示是否覆盖.cproject,点击Yes To All,这时我们需要编辑的文件就已经全加载到工程中了。
 
 第三步:这时在Project Explorer中有xboot的目录,右击xboot,点击Import,找到General-&gt;File System,双击,弹出Import对话框,在From directory中找到需要加载的文件的目录,点击Select All,将把加载的目录的所有类型文件添加到工程中,点击Finish按钮,提示是否覆盖.cproject,点击Yes To All,这时我们需要编辑的文件就已经全加载到工程中了。
  
第560行: 第549行:
 
 接下来用USB转串口线接到开发板的调试串口与PC即可看到调试串口打印的log信息。
 
 接下来用USB转串口线接到开发板的调试串口与PC即可看到调试串口打印的log信息。
  
http://x.9tripod.com/wiki/zh/images/0/01/Usb-serial.png
+
<center>[[image:RK3399securecrt.png|939 × 641px]]</center>
  
http://x.9tripod.com/wiki/zh/images/f/f1/Usb-serial-log.png
+
==安装android源码包==
 +
===安装android源码依赖包===
  
== 安装android源码包==
+
'''说明:本文档所有开发全部基于ubuntu14.04 64位系统,后续不再声明。'''
=== 安装android源码依赖包===
 
  
'''说明 本文档所有开发全部基于ubuntu14.04 64位系统,后续不再声明。'''
+
使用如下命令安装所需的软件包
  
  使用如下命令安装所需的软件包(安装前使用<pre><nowiki>sudo apt-get update </nowiki></pre> 获得一下最近的软件包的列表):
+
  sudo apt-get update
  
<pre><nowiki>sudo apt-get install git-core gnupg sun-java6-jdk flex bison gperf libsdl-dev libwxgtk2.8-dev build-essential zip curl libncurses5-dev zlib1g-dev genromfs u-boot-tools libxml2-utils texinfo mercurial subversion whois </nowiki></pre>
+
sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libwxgtk3.0-dev build-essential zip curl zlib1g-dev gcc-multilib g++-multilib genromfs libc6-dev-i386 libncurses5-dev x11proto-core-dev libx11-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip lsb-core lib32z1-dev lib32ncurses5-dev texinfo mercurial subversion whois
  
  很可能个别软件包会安装失败,比如sun-java6-jdk,这时需要我们手动来安装。下面是在ubuntu 手动 装jdk1.6的详细步骤
+
  使用如 命令 装JDK1.7
  
  第一步:在官网下载最新的jdk1.6的安装源文件<nowiki>jdk-6u27-linux-i586.bi</nowiki>n,下载地址为:
+
  sudo add-apt-repository ppa:webupd8team/java
  
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u27-oth-JPR
+
sudo apt-get update
  
  第二步:将下载的文件复制到/usr/lib/jvm目录,执行如下命令安装:
+
  sudo apt-get install oracle-java7-set-default
  
 +
执行java -version指令查看当前java安装版本:
 
<pre><nowiki>
 
<pre><nowiki>
chmod +x <nowiki>jdk-6u27-linux-i586.bi</nowiki>n
+
work@works:~$ java -version
  
sudo .<nowiki>/jdk-6u27-linux-i586.bi</nowiki>n </nowiki></pre>
+
java version "1.7.0_80"
  
第三步:修改环境变量:
+
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
  
 +
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
 +
</pre>
 +
到此,jdk1.7成功安装。
 +
 +
如果安装的版本不是1.7,会出现如下编译错误:
 
<pre><nowiki>
 
<pre><nowiki>
sudo gedit /etc/profile</nowiki></pre>
+
<nowiki>============================================</nowiki>
  
在最末尾加入如下语句:
+
Checking build tools versions...
  
<pre><nowiki>
+
/bin/bash: java: command not found
<nowiki>#set java environment</nowiki>
 
  
JAVA_HOME=/usr/lib/jvm/jdk1.6.0_27
+
/bin/bash: javac: command not found
  
export JRE_HOME=/usr/lib/jvm/jdk1.6.0_27/jre
+
<nowiki>************************************************************</nowiki>
  
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
+
You are attempting to build with the incorrect version
  
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH</nowiki></pre>
+
of java.
  
  第四步:重启系统
+
   
  
第五步:查看当前java安装版本:
+
Your version is: .
  
<pre><nowiki>
+
The required version is: "1.7.x"
root@lqm:/usr/lib/jvm# java -version
+
 
 +
  
java version "1.6.0_27"
+
Please follow the machine setup instructions at
  
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
+
    <nowiki>https://source.android.com/source/initializing.html</nowiki>
  
Java HotSpot(TM) Server VM (build 20.2-b06, mixed mode)
+
<nowiki>************************************************************</nowiki>
  
root@lqm:/usr/lib/jvm# </nowiki></pre>
+
build/core<nowiki>/main.mk:167</nowiki>: *** stop.  Stop.
  
到此,jdk1.6成功安装。
 
  
注意,如果安装了jdk1.5和1.6,很有可能查询版本时,仍然是1.5的,执行如下指令:
 
  
 +
<nowiki>#### make failed to build some targets (3 seconds) ####</nowiki>
 +
</pre>
 +
如果没有安装gperf,会出现如下编译错误:
 
<pre><nowiki>
 
<pre><nowiki>
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_27/bin/java 255
+
/bin/bash: gperf: command not found
  
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_27/bin/javac 255 </nowiki></pre>
+
external/chromium_org/third_party/WebKit/Source/platform<nowiki>/make_platform_generated.target.linux-arm.mk:48</nowiki>: recipe for target 'out/target/product/x6818/obj/GYP/shared_intermediates/blink/platform<nowiki>/ColorData.cp</nowiki>p' failed
  
这两条指令用于创建符号链接。其中,/usr/bin/java 是不用改动的,为你的原有的jdk路径,/usr/lib/jvm/jdk1.6.0_27/bin/java这个是jdk1.6的java路径255是优先级。
+
<nowiki>make: *** [out/target/product/x6818/obj/GYP/shared_intermediates/blink/platform/ColorData.cpp] Error 127</nowiki>
 +
</pre>
 +
如果没有安装libxml2-utils,会出现如下编译错误:
 +
<pre><nowiki>
 +
/bin/bash: xmllint: command not found
  
再执行如下命令:
+
build/core/Makefile:34: recipe for target 'out/target/product/x6818/system/etc<nowiki>/media_codecs_google_audio.xm</nowiki>l' failed
  
<pre><nowiki>
+
<nowiki>make: *** [out/target/product/x6818/system/etc/media_codecs_google_audio.xml] Error 127</nowiki>
sudo update-alternatives --config java
 
  
sudo update-alternatives --config javac </nowiki></pre>
+
make: *** Waiting for unfinished jobs....
  
弹出如下对话框:
+
/bin/bash: xmllint: command not found
  
<pre><nowiki>
+
build/core/Makefile:34: recipe for target 'out/target/product/x6818/system/etc<nowiki>/media_codecs_google_video.xm</nowiki>l' failed
root@lqm:/usr/local# update-alternatives --config java
 
  
There are 2 choices for the alternative java (providing /usr/bin/java).  
+
<nowiki>make: *** [out/target/product/x6818/system/etc/media_codecs_google_video.xml] Error 127</nowiki>
  
  选择       路径                                    优先级  状态
+
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java<nowiki>/jayatanaag.ja</nowiki>r
 +
</pre>
 +
编译时会弹出如下错误:
 +
<pre><nowiki>
 +
<nowiki>******************************</nowiki>
  
<nowiki>------------------------------------------------------------</nowiki>
+
You have tried to change the API from what has been previously approved.
  
<nowiki>* 0            /usr/lib/jvm/jdk1.6.0_27/bin/java          255      </nowiki>自动模式
 
  
  1            /usr/lib/jvm/java-1.5.0-sun/jre/bin/java  53        手动模式
 
  
  2            /usr/lib/jvm/jdk1.6.0_27/bin/java          255       手动模式 </nowiki></pre>
+
To make these errors go away, you have two choices:
  
要维持当前值<nowiki>[*]</nowiki>请按回车键,或者键入选择的编号。这里选择我们需要使用的jdk 版本,回车即可。
+
  1) You can add "@hide" javadoc comments to the methods, etc. listed in the
  
'''说明:jdk1.6也可以使用如下方法安装:'''
+
      errors above.
  
手动修改下载源,指令如下:
 
<pre><nowiki>
 
cd /etc/apt
 
  
cp <nowiki>sources.li</nowiki>st <nowiki>sources.list.ba</nowiki>k
 
  
vim <nowiki>sources.li</nowiki>st  </nowiki></pre>
+
  2) You can update <nowiki>current.tx</nowiki>t by executing the following command:
  
在最末行添加如下语句:
+
        make update-api
  
<pre><nowiki> deb <nowiki>http://archive.canonical.com/ubuntu</nowiki> maverick partner </nowiki></pre>
 
  
然后更新源:
 
  
<pre><nowiki> apt-get update </nowiki></pre>
+
      To submit the revised <nowiki>current.tx</nowiki>t to the main Android repository,
  
再安装java6:
+
      you will need approval.
  
<pre><nowiki>apt-get install sun-java6-jdk </nowiki></pre>
+
<nowiki>******************************</nowiki>
 +
</pre>
 +
按照上面的提示,执行make update-api指令,执行完成。
  
=== 安装交叉编译工具链===
+
===安装交叉编译工具链===
  
 
 我们已经将交叉编译工具链集成到源码包中,无需再手动安装。交叉编译工具链路径:
 
 我们已经将交叉编译工具链集成到源码包中,无需再手动安装。交叉编译工具链路径:
  
<pre><nowiki>Sourcetree/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8 </nowiki></pre>
+
Sourcetree/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8
  
 
===安装64位系统必要的一些补丁包===
 
===安装64位系统必要的一些补丁包===
  
<pre><nowiki> apt-get  install  lsb-core  libc6-dev-i386  g++-multilib  lib32z1-dev  lib32ncurses5-dev </nowiki></pre>
+
apt-get  install  lsb-core  libc6-dev-i386  g++-multilib  lib32z1-dev  lib32ncurses5-dev
  
=== 指定GCC交叉编译器'''===
+
=== 安装android源码包===
 +
====通过百度网盘获取源码包====
  
  在ubuntu系统上安装最新的GCC交叉编译器时 版本已经超过4.4了 使 如下指令可查询GCC 版本:
+
  光盘中存放着android6.0的源码包 其名称为'''<nowiki>x3399_marshmallow.ta</nowiki>r.7z.001和<nowiki>x3399_marshmallow.ta</nowiki>r.7z.002'''。首先在WINDOWS下通过7z解压缩工具将两个文件提取成单一文件x3399_marshmallow.<nowiki>tar.bz</nowiki>2 再将解压出来的文件拷贝到自己的 户名目录,注意不要放在文件系统 根目录,否则会出现管理权限问题。
  
<pre><nowiki>gcc –version </nowiki></pre>
+
示例方法:在用户权限下执行如下命令:
 +
<pre><nowiki>
 +
cp yourcdromdir/source/ '''x3399_marshmallow'''.<nowiki>tar.bz</nowiki>2  ~/
  
可能出现的界面如下:
+
cd
  
<pre><nowiki>terry@ubuntu-server:~$ gcc --version 
+
tar  xvf  x3399_marshmallow.<nowiki>tar.bz</nowiki>2
  
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
+
cd  x3399_marshmallow
  
Copyright © 2011 Free Software Foundation, Inc.  
+
git  checkout .
 +
</pre>
 +
这时,整个android文件系统全部都放在了当前解压的目录中。至此,android源码包安装完成。
  
terry@ubuntu-server:~$ </nowiki></pre>
+
说明:源码包名称可能会因发布日期等有所不同,具体以网盘中实际名称为准。默认源码包中已经包含有完整的GIT调试记录。
  
上面显示4.6.3版本,默认我们给出的 ,在4.6.3上编译会提示一些错误,都是新的GCC引出的错误,网上都有解决办法,如果不想修改这些错误,可将GCC版本降至4.4即可。解决办法 :
+
====通过远程仓库克隆源码 ====
  
<pre><nowiki>sudo apt-get install gcc-4.4 g++-4.4 g++-4.4-multilib </nowiki></pre>
+
直接clone远程仓库, 速度较慢,具体依据网络速度而定。使用如下指令克隆源码包:
  
  装完后,开始降级gcc ,这不会影响系统,仅仅是改个链接而已,不喜欢的话改回来即可。
+
  git clone [https://gitlab.com/9tripod/x3399_marshmallow.git https://gitlab.com/9tripod/x3399_marshmallow.git]
  
<pre><nowiki>cd /usr/bin
+
====同步远程仓库代码====
  
sudo mv gcc <nowiki>gcc.bk</nowiki>
+
使用如下指令添加<nowiki>gitlab.com</nowiki> 远程仓库:
  
sudo ln -s gcc-4.4 gcc
+
git remote add gitlab <nowiki>https://gitlab.com/9tripod/x3399_marshmallow.git</nowiki>
  
sudo mv g++ g++.bk
+
使用如下指令同步远程仓库代码:
  
sudo ln -s g++-4.4 g++ </nowiki></pre>
+
git pull gitlab master
  
=== 安装android 源码 ===
+
==android脚本分析配置==
 +
===源码 编译脚本分析===
  
  从网盘中拷贝android 源码 放在自己的用户名目录 光盘中存放着android4.4的 源码包 ,其名称 '''<nowiki>x3288_lollipop_v10.tar.bz</nowiki>2'''。注意最好不要放在文件系统的根目录 ,这 样会出 管理权限问题
+
  说明:各种版本的 源码 编译脚本大同小异 原理完全相同 具体脚本以相关 源码包 中的 ,这 里仅用来分析其实 机制
  
  示例方法:在用户权限下执行 如下 命令
+
  编译脚本mk内容及注释 如下:
 +
<pre><nowiki>
 +
<nowiki>#!/bin/bash</nowiki>
  
<pre><nowiki>cp  yourcdromdir/source/ <nowiki>x3288_lollipop_v10.tar.bz</nowiki>2  ~/
+
<nowiki>#</nowiki>
  
cd
+
<nowiki># Description</nowiki>    : Android Build Script.
  
tar  xvf  <nowiki>x3288_lollipop_v10.tar.bz</nowiki>2 </nowiki></pre>
+
<nowiki># Authors</nowiki>       : jianjun jiang - jerryjianjun@<nowiki>gmail.com</nowiki>
  
这时,整个android文件系统全部都放在了当前解压的目录中。至此,android源码包安装完成。
+
<nowiki># Version</nowiki>        : 2.00
  
'''说明:源码包名称可能会因发布日期等有所不同,具体以网盘中实际名称为准。'''
+
<nowiki># Notes</nowiki>           : None
 
 
== android脚本分析配置==
 
=== 源码编译脚本分析===
 
 
 
'''说明:各种版本的源码编译脚本大同小异,原理完全相同,具体脚本以相关源码包中的为准,这里仅用来分析其实现机制。'''
 
 
 
编译脚本mk内容及注释如下:
 
 
 
<pre><nowiki><nowiki>#!/bin/bash</nowiki>
 
 
 
<nowiki>#</nowiki>
 
 
 
<nowiki># Description</nowiki>    : Android Build Script.
 
 
 
<nowiki># Authors</nowiki>    : lqm <nowiki>www.9tripod.com</nowiki>
 
 
 
<nowiki># Version</nowiki>    : 1.0
 
 
 
<nowiki># Notes</nowiki>       : None
 
  
 
<nowiki>#</nowiki>
 
<nowiki>#</nowiki>
第765行: 第750行:
 
<nowiki>#</nowiki>
 
<nowiki>#</nowiki>
  
export PATH=/usr/lib/jvm/jdk1.6.0_45/bin:$PATH
+
export PATH=/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin:$PATH
  
  
第776行: 第761行:
  
 
BS_DIR_TOP=$(cd `dirname $0` ; pwd)
 
BS_DIR_TOP=$(cd `dirname $0` ; pwd)
 +
 +
BS_DIR_TOOLS=${BS_DIR_TOP}/tools
  
 
BS_DIR_RELEASE=${BS_DIR_TOP}/out/release
 
BS_DIR_RELEASE=${BS_DIR_TOP}/out/release
  
BS_DIR_UBOOT=${BS_DIR_TOP}/uboot
+
BS_DIR_TARGET=${BS_DIR_TOP}/out/target/product/x3399/
 +
 
 +
BS_DIR_UBOOT=${BS_DIR_TOP}/u-boot
  
 
BS_DIR_KERNEL=${BS_DIR_TOP}/kernel
 
BS_DIR_KERNEL=${BS_DIR_TOP}/kernel
 +
 +
BS_DIR_BUILDROOT=${BS_DIR_TOP}/buildroot
  
  
第787行: 第778行:
 
<nowiki>#</nowiki>
 
<nowiki>#</nowiki>
  
<nowiki># Target Config</nowiki>
+
<nowiki># Target </nowiki>Config
  
<nowiki>#</nowiki> 指定uboot,内核以及文件系统配置文件
+
<nowiki>#</nowiki>
  
BS_CONFIG_BOOTLOADER_UBOOT=x3288_config
+
BS_CONFIG_BOOTLOADER_UBOOT=x3399_defconfig
  
BS_CONFIG_KERNEL=x3288_defconfig
+
BS_CONFIG_KERNEL=x3399_defconfig
  
BS_CONFIG_FILESYSTEM=PRODUCT-rk3288-eng
+
BS_CONFIG_KERNEL_DTB=<nowiki>x3399-development-board.im</nowiki>g
  
 +
BS_CONFIG_FILESYSTEM=PRODUCT-x3399-userdebug
 +
 +
BS_CONFIT_BUILDROOT=x3399_defconfig
  
  
<nowiki># 在编译前,事先设置一些编译环境,保证准确可靠的编译</nowiki>
 
  
 
setup_environment()
 
setup_environment()
第806行: 第799行:
  
 
     LANG=C
 
     LANG=C
 
    cd ${BS_DIR_TOP};
 
 
 
  
 
     PATH=${BS_DIR_TOP}/out/host/linux-x86/bin:$PATH;
 
     PATH=${BS_DIR_TOP}/out/host/linux-x86/bin:$PATH;
  
 
+
    cd ${BS_DIR_TOP};
  
 
     mkdir -p ${BS_DIR_RELEASE} || return 1
 
     mkdir -p ${BS_DIR_RELEASE} || return 1
第820行: 第809行:
  
  
 
<nowiki># 编译 uboot,编译完后,自动将 </nowiki>bootloader.bin 拷贝到 out/release 目录
 
  
 
build_bootloader_uboot()
 
build_bootloader_uboot()
第831行: 第818行:
 
     cd ${BS_DIR_UBOOT} || return 1
 
     cd ${BS_DIR_UBOOT} || return 1
  
     make distclean || return 1
+
     make ARCHV=aarch64 distclean || return 1
  
     make ${BS_CONFIG_BOOTLOADER_UBOOT} || return 1
+
     make ARCHV=aarch64 ${BS_CONFIG_BOOTLOADER_UBOOT} || return 1
  
     make -j${threads} || return 1
+
     make ARCHV=aarch64 -j${threads} || return 1
  
  
第841行: 第828行:
 
     # Copy bootloader to release directory
 
     # Copy bootloader to release directory
  
     cp -v ${BS_DIR_UBOOT}<nowiki>/RK3288UbootLoader_V2.19.09.bi</nowiki>n ${BS_DIR_RELEASE}
+
     cp -v ${BS_DIR_UBOOT}/<nowiki>trust.im</nowiki>g ${BS_DIR_RELEASE}
 +
 
 +
    cp -v ${BS_DIR_UBOOT}/*MiniLoaderAll_*.bin ${BS_DIR_RELEASE}
  
 +
    cp -v ${BS_DIR_UBOOT}/<nowiki>uboot.im</nowiki>g ${BS_DIR_RELEASE}
  
  
    echo "^_^ uboot path: ${BS_DIR_RELEASE}<nowiki>/RK3288UbootLoader_V2.19.09.bi</nowiki>n"
 
  
 
     return 0
 
     return 0
第852行: 第841行:
  
  
 
<nowiki># 编译内核,编译完成后,会自动将内核映像 </nowiki><nowiki>kernel.im</nowiki>g & <nowiki>resource.im</nowiki>g拷贝到 out/release 目#录
 
  
 
build_kernel()
 
build_kernel()
  
 
{
 
{
 
    #export PATH=${BS_DIR_UBOOT}/tools:$PATH
 
  
 
     # Compiler kernel
 
     # Compiler kernel
第865行: 第850行:
 
     cd ${BS_DIR_KERNEL} || return 1
 
     cd ${BS_DIR_KERNEL} || return 1
  
     make ${BS_CONFIG_KERNEL} return 1
+
     make ARCH=arm64 ${BS_CONFIG_KERNEL} || return 1
 +
 
 +
    make -j${threads} ARCH=arm64 Image || return 1
  
     make <nowiki>x3288.im</nowiki>g -j${threads} || return 1
+
     make -j${threads} ARCH=arm64 ${BS_CONFIG_KERNEL_DTB} || return 1
  
  
  
     # Copy <nowiki>kernel.im</nowiki>g & <nowiki>resource.im</nowiki>g to release directory
+
     # Copy kernel to release directory
  
     cp -v ${BS_DIR_KERNEL}<nowiki>/kernel.im</nowiki>g ${BS_DIR_RELEASE}
+
     cp -v ${BS_DIR_KERNEL}/<nowiki>resource.im</nowiki>g ${BS_DIR_RELEASE}
  
     cp -v ${BS_DIR_KERNEL}<nowiki>/resource.im</nowiki>g ${BS_DIR_RELEASE}
+
     cp -v ${BS_DIR_KERNEL}/<nowiki>kernel.im</nowiki>g ${BS_DIR_RELEASE}
  
  
第883行: 第870行:
 
}
 
}
  
<nowiki># 编译 android 文件系统</nowiki>
+
 
  
 
build_system()
 
build_system()
第891行: 第878行:
 
     cd ${BS_DIR_TOP} || return 1
 
     cd ${BS_DIR_TOP} || return 1
  
     source build<nowiki>/envsetup.sh</nowiki> || return 1
+
     source build/<nowiki>envsetup.sh</nowiki> || return 1
  
 
     make -j${threads} ${BS_CONFIG_FILESYSTEM} || return 1
 
     make -j${threads} ${BS_CONFIG_FILESYSTEM} || return 1
第897行: 第884行:
  
  
     # create <nowiki>boot.im</nowiki>g
+
     echo "create <nowiki>boot.im</nowiki>g..."
  
     echo -n "create <nowiki>boot.im</nowiki>g without kernel... "
+
     <nowiki>[ -d ${BS_DIR_TARGET}/root ] && \</nowiki>
  
     <nowiki>[ -d $OUT/root ] && \</nowiki>
+
     mkbootfs ${BS_DIR_TARGET}/root | minigzip &gt; ${BS_DIR_TARGET}/<nowiki>ramdisk.im</nowiki>g && \
  
     mkbootfs $OUT/root | minigzip &gt; $OUT<nowiki>/ramdisk.im</nowiki>g && \
+
     truncate -s "%4" ${BS_DIR_TARGET}/<nowiki>ramdisk.im</nowiki>g && \
  
        truncate -s "%4" $OUT<nowiki>/ramdisk.im</nowiki>g && \
+
    ${BS_DIR_TOOLS}/mkkrnlimg ${BS_DIR_TARGET}/<nowiki>ramdisk.im</nowiki>g ${BS_DIR_RELEASE}/<nowiki>boot.im</nowiki>g &gt;/dev/null
  
    rkst/mkkrnlimg $OUT<nowiki>/ramdisk.im</nowiki>g $BS_DIR_RELEASE<nowiki>/boot.im</nowiki>g &gt;/dev/null
 
  
    echo "done."
 
  
 +
    echo "create <nowiki>recovery.im</nowiki>g..."
  
 +
    <nowiki>[ -d ${BS_DIR_TARGET}/recovery/root ] && \</nowiki>
  
     # create <nowiki>recovery.im</nowiki>g
+
     mkbootfs ${BS_DIR_TARGET}/recovery/root | minigzip &gt; ${BS_DIR_TARGET}/<nowiki>ramdisk-recovery.im</nowiki>g && \
  
     echo -n "create <nowiki>recovery.im</nowiki>g with kernel and with out resource... "
+
     truncate -s "%4" ${BS_DIR_TARGET}/<nowiki>ramdisk-recovery.im</nowiki>g && \
  
     <nowiki>[ -d $OUT/recovery/root ] && \</nowiki>
+
     mkbootimg --kernel ${BS_DIR_TARGET}/kernel --ramdisk ${BS_DIR_TARGET}/<nowiki>ramdisk-recovery.im</nowiki>g --output ${BS_DIR_TARGET}/<nowiki>recovery.im</nowiki>g && \
  
     mkbootfs $OUT/recovery/root | minigzip &gt; $OUT<nowiki>/ramdisk-recovery.im</nowiki>g && \
+
     cp -av ${BS_DIR_TARGET}/<nowiki>recovery.im</nowiki>g ${BS_DIR_RELEASE}
  
        truncate -s "%4" $OUT<nowiki>/ramdisk-recovery.im</nowiki>g && \
 
  
    mkbootimg --kernel $OUT/kernel --ramdisk $OUT<nowiki>/ramdisk-recovery.im</nowiki>g --output $OUT<nowiki>/recovery.im</nowiki>g && \
 
  
     cp -a $OUT<nowiki>/recovery.im</nowiki>g $BS_DIR_RELEASE/
+
     system_size=`ls -l ${BS_DIR_TARGET}/<nowiki>system.im</nowiki>g | awk '{print $5;}'`
  
     echo "done."
+
     <nowiki>[ ${</nowiki>system_size} -gt "0" ] || { echo "Please build android first!!!" && exit 1; }
  
 +
    MAKE_EXT4FS_ARGS=" -L system -S ${BS_DIR_TARGET}/root/file_contexts -a system ${BS_DIR_RELEASE}/<nowiki>system.im</nowiki>g ${BS_DIR_TARGET}/system"
  
 +
    ok=0
  
     # create <nowiki>misc.im</nowiki>g
+
     <nowiki>while [ "$ok" = "0" ]; do</nowiki>
  
    echo -n "create <nowiki>misc.im</nowiki>g.... "
+
        make_ext4fs -l ${system_size} ${MAKE_EXT4FS_ARGS} &gt;/dev/null 2&gt;&1 &&
  
    cp -a rkst/Image<nowiki>/misc.im</nowiki>g $BS_DIR_RELEASE<nowiki>/misc.im</nowiki>g
+
        tune2fs -c -1 -i 0 ${BS_DIR_RELEASE}/<nowiki>system.im</nowiki>g &gt;/dev/null 2&gt;&1 &&
  
    cp -a rkst/Image<nowiki>/pcba_small_misc.im</nowiki>g $BS_DIR_RELEASE<nowiki>/pcba_small_misc.im</nowiki>g
+
        ok=1 || system_size=$((${system_size} + 5242880))
  
     cp -a rkst/Image<nowiki>/pcba_whole_misc.im</nowiki>g $BS_DIR_RELEASE<nowiki>/pcba_whole_misc.im</nowiki>g
+
     done
  
     echo "done."
+
     e2fsck -fyD ${BS_DIR_RELEASE}/<nowiki>system.im</nowiki>g &gt;/dev/null 2&gt;&1 || true
  
  
  
     # create <nowiki>system.im</nowiki>g
+
     return 0
  
    <nowiki>if [ -d $OUT/system ]</nowiki>
+
}
  
    then
 
  
        echo -n "create <nowiki>system.im</nowiki>g... "
 
  
        system_size=`ls -l $OUT<nowiki>/system.im</nowiki>g | awk '{print $5;}'`
+
build_buildroot()
  
        <nowiki>[ $system_size -gt "0" ] || { echo "Please make first!!!" && exit 1; }</nowiki>
+
{
  
        MAKE_EXT4FS_ARGS=" -L system -S $OUT/root/file_contexts -a system $BS_DIR_RELEASE<nowiki>/system.im</nowiki>g $OUT/system"
+
    # Compiler buildroot
  
        ok=0
+
    cd ${BS_DIR_BUILDROOT} || return 1
  
        <nowiki>while [ "$ok" = "0" ]; do</nowiki>
+
    make ${BS_CONFIT_BUILDROOT} || return 1
  
            make_ext4fs -l $system_size $MAKE_EXT4FS_ARGS &gt;/dev/null 2&gt;&1 &&
+
    make -j${threads} || return 1
  
            tune2fs -c -1 -i 0 $BS_DIR_RELEASE<nowiki>/system.im</nowiki>g &gt;/dev/null 2&gt;&1 &&
 
  
            ok=1 || system_size=$(($system_size + 5242880))
 
  
        done
+
    # Copy image to release directory
  
        e2fsck -fyD $BS_DIR_RELEASE<nowiki>/system.im</nowiki>g &gt;/dev/null 2&gt;&1 || true
+
    cp -v ${BS_DIR_BUILDROOT}/output/images<nowiki>/rootfs.ex</nowiki>t2 ${BS_DIR_RELEASE}/<nowiki>linux-rootfs.im</nowiki>g
  
        echo "done."
+
}
  
    fi
 
  
  
 +
build_update()
  
    chmod a+r -R $BS_DIR_RELEASE/
+
{
  
 +
    cd ${BS_DIR_RELEASE} || return 1
  
 +
   
  
     return 0
+
     # Make update-<nowiki>android.im</nowiki>g
  
}
+
    echo "create update-<nowiki>android.im</nowiki>g..."
  
 +
    cp -av ${BS_DIR_TOOLS}/package-file ${BS_DIR_RELEASE}/package-file || return 1;
  
 +
    ${BS_DIR_TOOLS}/afptool -pack ${BS_DIR_RELEASE}/ ${BS_DIR_RELEASE}/<nowiki>temp.im</nowiki>g || return 1;
  
threads=1
+
    ${BS_DIR_TOOLS}/rkImageMaker -RK330C ${BS_DIR_RELEASE}<nowiki>/RK3399MiniLoaderAll_V1.05.bi</nowiki>n ${BS_DIR_RELEASE}/<nowiki>temp.im</nowiki>g ${BS_DIR_RELEASE}/update-<nowiki>android.im</nowiki>g -os_type:androidos || return 1;
  
uboot=no
+
    rm -fr ${BS_DIR_RELEASE}/<nowiki>temp.im</nowiki>g || return 1;
  
kernel=no
 
  
system=no
 
  
 +
    # Make update-<nowiki>linux.im</nowiki>g
  
 +
    echo "create update-<nowiki>linux.im</nowiki>g..."
  
<nowiki>if [ -z $1 ]; then</nowiki>
+
    cp -av ${BS_DIR_TOOLS}/package-file-linux ${BS_DIR_RELEASE}/package-file || return 1;
  
     uboot=yes
+
     ${BS_DIR_TOOLS}/afptool -pack ${BS_DIR_RELEASE}/ ${BS_DIR_RELEASE}/<nowiki>temp.im</nowiki>g || return 1;
  
     kernel=yes
+
     ${BS_DIR_TOOLS}/rkImageMaker -RK330C ${BS_DIR_RELEASE}<nowiki>/RK3399MiniLoaderAll_V1.05.bi</nowiki>n ${BS_DIR_RELEASE}/<nowiki>temp.im</nowiki>g ${BS_DIR_RELEASE}/update-<nowiki>linux.im</nowiki>g -os_type:androidos || return 1;
  
     system=yes
+
     rm -fr ${BS_DIR_RELEASE}/<nowiki>temp.im</nowiki>g || return 1;
  
fi
 
  
  
 +
    return 0
  
<nowiki>while [ "$1" ]; do</nowiki>
+
}
  
    case "$1" in
 
  
    -j=*)
 
  
        x=$1
+
copy_other_files()
  
        threads=${x#-j=}
+
{
  
        ;;
+
    cd ${BS_DIR_TOP} || return 1
  
    -u|--uboot)
 
  
        uboot=yes
 
  
        ;;
+
    cp -av ${BS_DIR_TOP}/device/rockchip/rk3399/x3399<nowiki>/parameter.tx</nowiki>t ${BS_DIR_RELEASE} || return 1;
  
     -k|--kernel)
+
     cp -av ${BS_DIR_TOP}/device/rockchip/rk3399/x3399<nowiki>/misc.im</nowiki>g ${BS_DIR_RELEASE} || return 1;
  
            kernel=yes
+
    cp -av ${BS_DIR_TOP}/device/rockchip/rk3399/x3399<nowiki>/parameter-linux.tx</nowiki>t ${BS_DIR_RELEASE} || return 1;
  
        ;;
+
    cp -av ${BS_DIR_TOP}/device/rockchip/rk3399/x3399<nowiki>/misc-linux.im</nowiki>g ${BS_DIR_RELEASE} || return 1;
  
     -s|--system)
+
     return 0
  
        system=yes
+
}
  
        ;;
 
  
    -a|--all)
 
  
        uboot=yes
+
threads=1
  
        kernel=yes
+
uboot=no
  
        system=yes
+
kernel=no
  
        ;;
+
system=no
  
    -h|--help)
+
buildroot=no
  
        cat &gt;&2 &lt;&lt;EOF
+
update=no
  
<nowiki>Usage: build.sh [OPTION]</nowiki>
 
  
Build script for compile the source of telechips project.
 
  
 +
<nowiki>if [ -z $1 ]; then</nowiki>
  
 +
    uboot=yes
  
  -j=n                using n threads when building source project (example: -j=16)
+
    kernel=yes
  
  -u, --uboot          build bootloader uboot from source
+
    system=yes
  
  -k, --kernel        build kernel from source
+
    buildroot=yes
  
  -s, --system        build android file system from source
+
    update=yes
  
  -a, --all            build all, include anything
+
fi
  
  -h, --help          display this help and exit
 
  
EOF
 
  
        exit 0
+
<nowiki>while [ "$1" ]; do</nowiki>
  
        ;;
+
    case "$1" in
  
     *)
+
     -j=*)
  
         echo "<nowiki>build.sh</nowiki>: Unrecognised option $1" &gt;&2
+
         x=$1
  
         exit 1
+
         threads=${x#-j=}
  
 
         ;;
 
         ;;
  
     esac
+
     -u|--uboot)
  
    shift
+
        uboot=yes
  
done
+
        ;;
  
 +
    -k|--kernel)
  
 +
        kernel=yes
  
setup_environment || exit 1
+
        ;;
  
 +
    -s|--system)
  
 +
        system=yes
  
<nowiki>if [ "${uboot}" = yes ]; then</nowiki>
+
        ;;
  
     build_bootloader_uboot || exit 1
+
     -b|--buildroot)
  
fi
+
        buildroot=yes
  
 +
        ;;
  
 +
    -U|--update)
  
<nowiki>if [ "${kernel}" = yes ]; then</nowiki>
+
        update=yes
  
    build_kernel || exit 1
+
        ;;
  
fi
+
    -a|--all)
  
 +
        uboot=yes
  
 +
        kernel=yes
  
<nowiki>if [ "${system}" = yes ]; then</nowiki>
+
        system=yes
  
    build_system || exit 1
+
        buildroot=yes
  
fi
+
        update=yes
  
 +
        ;;
  
 +
    -h|--help)
  
exit 0  </nowiki></pre>
+
        cat &gt;&2 &lt;&lt;EOF
  
 +
Usage: <nowiki>build.sh</nowiki><nowiki> [OPTION]</nowiki>
  
 +
Build script for compile the source of telechips project.
  
=== '''配置使用MIPI屏'''===
 
  
在kernel/arch/arm/boot/dts目录下存放了多个已经调试好的液晶屏的配置文件,7寸RGB屏的配置文件为
 
  <nowiki>x3288_lcd070hdr.dt</nowiki>si,
 
7寸MIPI屏的配置文件为
 
  <nowiki>x3288_lcd070hdm.dt</nowiki>si。
 
 
  kernel/arch/arm/boot/dts<nowiki>/x3288.dt</nowiki>s
 
中选择配置使用的液晶模组即可,如需要使用7寸MIPI屏,示例代码如下:
 
<pre><nowiki>
 
//#include "<nowiki>x3288_lcd070hdr.dt</nowiki>si"
 
  
<nowiki>#include "x3288_lcd070hdm.dtsi"</nowiki> </nowiki></pre>
+
  -j=n                using n threads when building source project (example: -j=16)
  
== 编译android源码包 ==
+
  -u, --uboot          build bootloader uboot from source
  
说明:编译映像时一定要使用普通权限编译。编译完成后,生成的映像文件<nowiki>RK3288UbootLoader_V2.19.09.bi</nowiki>n,<nowiki>boot.im</nowiki>g, <nowiki>system.im</nowiki>g, <nowiki>kernel.im</nowiki>g, <nowiki>misc.im</nowiki>g, <nowiki>recovery.im</nowiki>g, <nowiki>resource.im</nowiki>g,<nowiki>update.im</nowiki>g。
+
  -k, --kernel         build kernel from source
  
=== 编译uboot===
+
  -s, --system        build android file system from source
  
在android源码目录下执行如下命令编译uboot,编译完成后映像文件<nowiki>RK3288UbootLoader_V2.30.10.bi</nowiki>n(因版本不同,名称不一定相同)会释放到out/release目录。
+
  -b, --buildroot      build buildroot file system for linux platform
<pre><nowiki>
 
./mk    -u </nowiki></pre>
 
  
===编译android内核===
+
  -U, --update        build update file
  
在android源码目录下执行如下命令编译android内核,编译完成后映像文件<nowiki>kernel.im</nowiki>g、<nowiki>resource.im</nowiki>g会释放到out/release目录。
+
  -a, --all            build all, include anything
<pre><nowiki>
 
./mk    -k </nowiki></pre>
 
  
=== 编译android文件系统===
+
  -h, --help          display this help and exit
  
在android源码目录下执行如下命令编译android映像文件,编译完成后映像文件会释放到out/release目录。
+
EOF
<pre><nowiki>
 
./mk    -s </nowiki></pre>
 
  
编译完文件系统,在out/release目录下会生成如下文件:
+
        exit 0
  
* <nowiki>RK3288UbootLoader_V2.19.09.bi</nowiki>n: uboot映像文件
+
        ;;
* <nowiki>Kernel.im</nowiki>g:内核映像
 
* <nowiki>Resource.im</nowiki>g:资源映像,内含开机图片和内核的设备树信息。
 
* <nowiki>Boot.im</nowiki>g: Android的初始文件映像,负责初始化并加载system分区。
 
* <nowiki>System.im</nowiki>g:android的system分区映像,ext4文件格式系统。
 
* <nowiki>Recovery.im</nowiki>g:急救模式映像。
 
* <nowiki>Misc.im</nowiki>g:分区映像,负责启动模式切换和急救模式的参数传递。
 
* <nowiki>update.im</nowiki>g:整个升级文件的单一映像,包括了uboot,内核,文件系统等。
 
===查看编译帮助===
 
  
执行如下指令可查询mk脚本使用方法:
+
    *)
<pre><nowiki>
 
./mk  -h </nowiki></pre>
 
  
 +
        echo "<nowiki>build.sh</nowiki>: Unrecognised option $1" &gt;&2
  
== 烧写android映像文件 ==
+
        exit 1
=== Windows系统映像烧写 ===
 
==== RKTool驱动安装====
 
  
解压<nowiki>RKTools.ra</nowiki>r,工具路径:<pre><nowiki>SDK\RKTools\windows\Release_DriverAssitant</nowiki></pre>打开“<nowiki>DriverInstall.ex</nowiki>e”,点击“驱动安装”,提示安装驱动成功即可。
+
        ;;
  
http://x.9tripod.com/wiki/zh/images/7/7a/Rktools-driver.png
+
    esac
  
http://x.9tripod.com/wiki/zh/images/4/4d/Rktool-driver-ok.png
+
    shift
  
注意事项:
+
done
  
1.目前支持的操作系统包括:XP,Win7_32,Win7_64,Win8_32,Win8_64。
 
  
2.XP系统在驱动安装完后,若还提示“发现新设备”, 安装驱动时选择“自动安装”。
 
  
3.若之前已经安装过老版本驱动,请先点击“驱动卸载”后再进行“驱动安装”。
+
setup_environment || exit 1
  
====烧录方法一:单个升级固件<nowiki>update.im</nowiki>g====
+
copy_other_files || exit 1
===== 生成统一固件<nowiki>update.im</nowiki>g =====
 
  
我们已经在mk脚本中集成了生成统一固件的方法,在编译android文件系统时(./mk -s),会自动生成<nowiki>update.im</nowiki>g,并释放到out/release目录。
 
  
===== 烧录固件<nowiki>update.im</nowiki>g =====
 
  
打开
+
<nowiki>if [ "${</nowiki>uboot}" = yes ]; then
  RKTools\windows\AndroidTool_Release_v2.3\AndroidTool_Release_v2.3\AndroidTool.exe
 
选择“升级固件”选项卡,点击“固件”,在弹出窗口中选择已经生成的<nowiki>update.im</nowiki>g 文件,如下图所示。
 
  
http://x.9tripod.com/wiki/zh/images/1/16/Update-fireware.png
+
    build_bootloader_uboot || exit 1
  
http://x.9tripod.com/wiki/zh/images/c/cd/Update-fireware1.png
+
fi
  
工具配置好后,连接开发板(如下图):
 
  
按下RECOVERY键,然后插上microUSB线与5V DC电源线
 
http://x.9tripod.com/wiki/zh/images/3/32/Update-fireware2.png
 
  
烧录工具界面会提示发现一个LOADER设备,然后点击升级,即可开始升级过程(注:如果提示发现一个ADB设备,点击切换按钮切换成LOADER设备即可)。
+
<nowiki>if [ "${kernel}" = yes ]; then</nowiki>
  
http://x.9tripod.com/wiki/zh/images/6/60/Update-fireware3.png
+
    build_kernel || exit 1
  
http://x.9tripod.com/wiki/zh/images/f/f1/Update-fireware4.png
+
fi
  
上图为升级完成截图。
 
  
==== 烧录方法二:多设备升级固件<nowiki>update.im</nowiki>g ====
 
  
该工具适合用户批量刷机,可以同时给多台开发板刷机。
+
<nowiki>if [ "${system}" = yes ]; then</nowiki>
  
打开路径:
+
    build_system || exit 1
  SDK\RKTools\windows\FactoryTool_v1.33
 
下的“<nowiki>FactoryTool.ex</nowiki>e”,点击“固件”选择<nowiki>update.im</nowiki>g,勾选“升级”,点击“启动”,如下图所示:
 
  
步骤1:点击固件,选择<nowiki>update.im</nowiki>g;
+
fi
  
步骤2:点击启动(选择升级按钮);
 
  
步骤3:连接开发板USB、DC电源,按下recovery键,对应USB口发现设备,并实现自动升级;然后重复步骤3即可同时升级第二台、第三台设备,升级成功或者失败的设备会在两边的列表中列出,移除成功或者失败的设备后可以继续连接需要升级的设备。
 
  
http://x.9tripod.com/wiki/zh/images/3/3a/Update-fireware-multi-device.png
+
<nowiki>if [ "${</nowiki>buildroot}" = yes ]; then
  
=== Linux系统烧写映像===
+
    build_buildroot || exit 1
==== 生成固件<nowiki>update.im</nowiki>g====
 
  
我们已经在mk脚本中集成了生成统一固件的方法,在编译android文件系统时(./mk -s),会自动生成<nowiki>update.im</nowiki>g,并释放到out/release目录。
+
fi
  
==== 烧录固件<nowiki>update.im</nowiki>g====
 
  
工具路径:
 
  RKTools\linux\Linux_Upgrade_Tool_v1.2
 
  
在升级之前将<nowiki>update.im</nowiki>g拷贝到upgrade_tool相同目录下,运行upgrade_tool('''需要sudo''')
+
<nowiki>if [ "${update}" = yes ]; then</nowiki>
  
<pre><nowiki>work@ubuntu:~/3288/Linux_Upgrade_Tool_v1.2/cp rockdev<nowiki>/update.im</nowiki>g .
+
    build_update || exit 1
  
work@ubuntu:~/3288/Linux_Upgrade_Tool_v1.2$ sudo ./upgrade_tool  </nowiki></pre>
+
fi
  
执行结果如下图,发现设备列表,输入要升级的DevNo(设备号)选择设备
 
http://x.9tripod.com/wiki/zh/images/8/82/DevNo.png
 
  
选择设备后弹出工具使用菜单如下图,左侧是功能描述,右侧是命令语法,升级相关操作都在upgrade command列表下,忘记命令语法可以输入H进行查看,清屏输入CS,退出按Q。
 
  
http://x.9tripod.com/wiki/zh/images/6/68/DevNo1.png
+
exit 0
 +
</pre>
 +
===配置使用MIPI屏===
  
* CD命令: 选择设备, 当执行 命令有包含设备重启操作时, 需重新选择设备,当改变操作设备时需重新选择
+
  在kernel/arch/arm64/boot/dts/rockchip目录下存放了多个已经调试好的液晶屏的配置文件,7寸MIPI屏 配置文件为<nowiki>lcd-mipi-7inch-wy070ml.dt</nowiki>si,7.9寸EDP屏的配置文 <nowiki>lcd-edp-lp079qx1.dt</nowiki>si。在kernel/arch/arm64/boot/dts/rockchip/ <nowiki>x3399-development-board.dt</nowiki>s中选择配置使用的液晶模组即 ,如需要 使 用7寸MIPI屏,示 代码 如下:
* SD命令:msc切换到rockusb升级模式。 当切换执行成功后, 需要重新选择设备
+
<pre><nowiki>
* UF命令:升级完整<nowiki>update.im</nowiki>g固 ,当执行成功后需要重新选择设备
+
&rk_screen {
* UL命令:升级loader功能,当执行成功后需要重新选择设备
 
* DI命令:下载单独image镜像到指定扇区,例如升级<nowiki>kernel.im</nowiki>g或者<nowiki>system.im</nowiki>g都 以直接 使 用此功能. 例如下 载<nowiki>kernel.im</nowiki>g DI -k <nowiki>kernel.im</nowiki>g parameter //如果之前通过DI下载过parameter,则再下载<nowiki>kernel.im</nowiki>g时就可以不用指定最后的parameter参数
 
* DB命令:下载boot,在maskrom状态下,可以通过此功能, 让maskrom设备进行Rockusb协议通讯
 
* EF命令:擦除整个nandflash
 
* LF命令:低格保留块后面区域,只有在loader模式下使用
 
  
执行uf <nowiki>update.im</nowiki>g 开始更新固件,下图为更新完成截图。   
+
    #include "<nowiki>lcd-mipi-7inch-wy070ml.dt</nowiki>si"
  
<pre><nowiki>Rockusb&gt;uf  <nowiki>update.im</nowiki>g </nowiki></pre>
+
    /* #include "<nowiki>lcd-edp-lp079qx1.dt</nowiki>si" */
  
http://x.9tripod.com/wiki/zh/images/0/03/DevNo2.png
+
};
 +
</pre>
  
备注:也可通过配置<nowiki>config.in</nowiki>i文件配置升级映像文件,只需输入UF即可升级,请用户自行尝试。
 
  
==== 使用upgrade_tool指令烧写映像 ====
+
== 编译android源码包==
  
  节我们介绍了 过upgrade_tool烧写统一固 件<nowiki>update.im</nowiki>g 的方法 熟悉三星平台的开发者会发现 这种方法并不是很高效 真正操作起来 它远没有fastboot工具来的迅速。其实,upgrade_tool工具同样支持类似于fastboot的烧写方式
+
  说明:编译映像时 定要使用普 权限编译。编译完成后,生成的映像文
 +
<pre>
 +
<nowiki>RK3399MiniLoaderAll_V1.05.bi</nowiki>n,<nowiki>uboot.im</nowiki>g,<nowiki>trust.im</nowiki>g,<nowiki>misc.im</nowiki>g,misc-<nowiki>linux.im</nowiki>g,<nowiki>parameter-linux.tx</nowiki>t,<nowiki>parameter.tx</nowiki>t,<nowiki>resource.im</nowiki>g,<nowiki>kernel.im</nowiki>g <nowiki>boot.im</nowiki>g <nowiki>system.im</nowiki>g <nowiki>recovery.im</nowiki>g, update-<nowiki>android.im</nowiki>g
 +
</pre>
 +
===编译uboot===
  
  为了烧写方便,在mk脚本中 默认在 编译 系统时 已经将烧写工具upgrade_tool拷贝 到out/release目录
+
  在android源码目录下执行如下命令编译uboot ,编译 完成后映像文件<nowiki>RK3399MiniLoaderAll_V1.05.bi</nowiki>n(因版本不同 名称不一定相同)以及<nowiki>uboot.im</nowiki>g会释放 到out/release目录。
  
  第一步:打开串口终端,并打开minicom,用于适时监控串口调试信息;
+
  ./<nowiki>mk.sh</nowiki>    -u
  
第二步:按住RECOVERY键,连接USB OTG线和电源线,这时uboot打印信息将会提示已经进入USB下载模式。如果接通电源后没来得及按住RECOVERY键,在按住RECOVERY键的同时,再按下复位键即可。注意,使用
+
===编译android内核===
  
  第二步:打开第二个串口终端,进入out/release目录;
+
  在android源码 目录下 执行 如下 编译android内核 编译完成后 映像 文件<nowiki>kernel.im</nowiki>g、<nowiki>resource.im</nowiki>g会释放到out/release目录。
 
 
第三步:在out/release 目录下 敲击 如下 令, 烧写相应的 映像
 
<pre><nowiki>
 
  
sudo upgrade_tool  di  –k <nowiki>kernel.im</nowiki>g(烧写内核)
+
  ./<nowiki>mk.sh</nowiki>     -k
  
sudo upgrade_tool  di  –s  <nowiki>system.im</nowiki>g(烧写 文件系统)
+
===编译android 文件系统===
  
sudo upgrade_tool di  resource  <nowiki>resource.im</nowiki>g(烧写资 源文件)
+
  在android 码目录下执行如下命令编译android映像文件,编译完成后映像 文件 会释放到out/release目录。
  
sudo upgrade_tool di  –r <nowiki>recovery.im</nowiki>g(烧写急救文件)
+
  ./<nowiki>mk.sh</nowiki>     -s
  
sudo upgrade_tool ul  <nowiki>RK3288UbootLoader_V2.30.10.bi</nowiki>n(烧写bootloader)
+
  编译完文件系统,在out/release目录下会生成如下文件:
  
sudo upgrade_tool  uf  <nowiki>update.im</nowiki>g(烧写统一固 ) </nowiki></pre>
+
* <nowiki>RK3399MiniLoaderAll_V1.05.bi</nowiki>n:uboot映像文件
 
+
* <nowiki>trust.im</nowiki>g:uboot映像文件
==== 使用Rkflashkit烧写映像 ====
+
* <nowiki>uboot.im</nowiki>g:uboot映像文件
 +
* <nowiki>Kernel.im</nowiki>g:内核映像
 +
* <nowiki>Resource.im</nowiki>g :资源映像,内含开机图片和内核的设备树信息。
 +
* <nowiki>Boot.im</nowiki>g: Android的初始文 映像,负责初始化并加载system分区。
 +
* <nowiki>System.im</nowiki>g:android的system分区映像,ext4文件格式系统。
 +
* <nowiki>Recovery.im</nowiki>g:急救模式映像。
 +
* <nowiki>Misc.im</nowiki>g:分区映像,负责启动模式切换和急救模式的参数传递。
 +
=== 生成update-<nowiki>android.im</nowiki>g文件系统===
  
rkflashkit 有图形界面,后加了 命令 行支持,更是好用。
+
  在android源码目录下执行如下 命令 生成单一android映像文件update-<nowiki>android.im</nowiki>g:
<pre><nowiki>
 
  
work@ubuntu:~/rktool$ sudo apt-get install build-essential fakeroot
+
./<nowiki>mk.sh</nowiki>    -U
  
work@ubuntu:~/rktool$ git clone <nowiki>https://github.com/linuxerwang/rkflashkit</nowiki>
+
update-<nowiki>android.im</nowiki>g为整个升级文件的单一映像,包括了uboot,内核,文件系统等。注意,生成update-<nowiki>android.im</nowiki>g的先决条件是已经成功编译了uboot,内核和文件系统,缺一不可。如果没有编译针对linux平台的文件系统,在执行该指令时,会提示无法生成update-<nowiki>linux.im</nowiki>g的错误,如果读者不使用linux系统,不用理会。其编译信息如下:
 +
<pre><nowiki>
 +
lqm@lqm:/home/DISK1/x3399_marshmallow$ ./<nowiki>mk.sh</nowiki> -U
  
work@ubuntu:~/rktool$ cd rkflashkit
+
'/home/DISK1/x3399_marshmallow/device/rockchip/rk3399/x3399<nowiki>/parameter.tx</nowiki>t' -&gt; '/home/DISK1/x3399_marshmallow/out/release<nowiki>/parameter.tx</nowiki>t'
  
work@ubuntu:~/rktool$ ./waf debian
+
'/home/DISK1/x3399_marshmallow/device/rockchip/rk3399/x3399<nowiki>/misc.im</nowiki>g' -&gt; '/home/DISK1/x3399_marshmallow/out/release<nowiki>/misc.im</nowiki>g'
  
work@ubuntu:~/rktool$ sudo apt-get install python-gtk2
+
'/home/DISK1/x3399_marshmallow/device/rockchip/rk3399/x3399<nowiki>/parameter-linux.tx</nowiki>t' -&gt; '/home/DISK1/x3399_marshmallow/out/release<nowiki>/parameter-linux.tx</nowiki>t'
  
work@ubuntu:~/rktool$ sudo dpkg -i <nowiki>rkflashkit_0.1.4_all.de</nowiki></nowiki></pre>
+
'/home/DISK1/x3399_marshmallow/device/rockchip/rk3399/x3399<nowiki>/misc-linux.im</nowiki>g' -&gt; '/home/DISK1/x3399_marshmallow/out/release<nowiki>/misc-linux.im</nowiki>g'
  
注意:<nowiki>rkflashkit_0.1.4_all.de</nowiki>b会因版本更新,版本数字可能会有所变化,如果执行失败,执行ls命令查看下即可。
+
create update-<nowiki>android.im</nowiki>g...
  
<pre><nowiki>work@ubuntu:~/rktool/$ sudo rkflashkit </nowiki></pre>
+
'/home/DISK1/x3399_marshmallow/tools/package-file' -&gt; '/home/DISK1/x3399_marshmallow/out/release/package-file'
  
如下是图形界面,在Devices下选择设备,选择要烧写的分区和对应的映像文件,点击Flash image即可。
+
Android Firmware Package Tool v1.62
  
http://x.9tripod.com/wiki/zh/images/0/08/Rkflashkit.png
+
<nowiki>------ PACKAGE ------</nowiki>
  
该工具也支持命令行,使用help命令查看使用方法
+
Add file: /home/DISK1/x3399_marshmallow/out/release/package-file
  
<pre><nowiki>work@ubuntu:~/rktool/rkflashkit$ rkflashkit --help
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/RK3399MiniLoaderAll_V1.05.bi</nowiki>n
  
<nowiki>Usage: &lt;cmd&gt; [args] [&lt;cmd&gt; [args]...]</nowiki>  
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/parameter.tx</nowiki>t
  
 +
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/trust.im</nowiki>g
  
 +
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/uboot.im</nowiki>g
  
part                              List partition
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/misc.im</nowiki>g
  
flash @&lt;PARTITION&gt; &lt;IMAGE FILE&gt;  Flash partition with image file
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/resource.im</nowiki>g
  
cmp @&lt;PARTITION&gt; &lt;IMAGE FILE&gt;    Compare partition with image file
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/kernel.im</nowiki>g
  
backup @&lt;PARTITION&gt; &lt;IMAGE FILE&gt;  Backup partition to image file
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/boot.im</nowiki>g
  
erase  @&lt;PARTITION&gt;              Erase partition
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/recovery.im</nowiki>g
  
reboot                            Reboot device
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/system.im</nowiki>g
  
 +
Add CRC...
  
 +
Make firmware OK!
  
For example, flash device with <nowiki>boot.im</nowiki>g and <nowiki>kernel.im</nowiki>g, then reboot:
+
<nowiki>------ OK ------</nowiki>
  
 +
<nowiki>********</nowiki>RKImageMaker ver 1.63********
  
 +
Generating new image, please wait...
  
  sudo rkflashkit flash @boot <nowiki>boot.im</nowiki>g @<nowiki>kernel.im</nowiki>g <nowiki>kernel.im</nowiki>g reboot
+
Writing head info...
  
work@ubuntu:~/rktool/rkflashkit$  </nowiki></pre>
+
Writing boot file...
  
=== 使用TF卡升级固件 ===
+
Writing firmware...
==== 功能说明 ====
 
  
SD Card Boot功能是主控在上电时,优先从SD卡上查找启动代码,然后加载引导,从而实现特定功能。目前SD Card Boot已经实现两个功能:SD卡升级和SD卡运行。
+
Generating MD5 data...
  
SD卡升级功能,将SD卡启动代码写到SD卡的保留区,然后将固件拷贝到SD卡可见分区上,主控从SD卡启动时,SD卡启动代码和升级代码将固件升级到本地主存储中,并支持PCBA测试和Demo文件的拷贝。可以完全做到脱离PC机进行固件升级,提高生产效率。
+
MD5 data generated successfully!
  
SD卡运行功能,将固件升级到SD卡保留区中,把SD卡当作主存储使用。主控从SD 卡启动时,固件已经存放在SD卡上,有没有本地主存储都可以正常工作。目前主要应用是板卡厂做PCBA测试,而不会破坏flash数据。
+
New image generated successfully!
  
==== 软件说明====
+
create update-<nowiki>linux.im</nowiki>g...
  
工具目录有如下文件:
+
'/home/DISK1/x3399_marshmallow/tools/package-file-linux' -&gt; '/home/DISK1/x3399_marshmallow/out/release/package-file'
  
http://x.9tripod.com/wiki/zh/images/f/f3/SD_Fireware_Tool.png
+
Android Firmware Package Tool v1.62
  
<nowiki>SD_Firmware_Tool.ex</nowiki>e:制卡工具
+
<nowiki>------ PACKAGE ------</nowiki>
  
<nowiki>Config.in</nowiki>i:配置文件
+
Add file: /home/DISK1/x3399_marshmallow/out/release/package-file
  
<nowiki>SDBoot.bi</nowiki>n:SDRK2926、RK2928、RK3166和RK3188使用<nowiki>SDBoot.bi</nowiki>n支持SD卡升级和启动功能;RK3288使用<nowiki>RK3288Loader_uboot_V2.16.bi</nowiki>n 及以后版本。
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/RK3399MiniLoaderAll_V1.05.bi</nowiki>n
  
==== 制作前软件配置 ====
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/parameter-linux.tx</nowiki>t
  
编辑<nowiki>config.in</nowiki>i配置文件以下项目设置为TRUE
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/trust.im</nowiki>g
  
  * <nowiki>#</nowiki> 当值为TRUE时,新卡格式适用3288项目
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/uboot.im</nowiki>g
  * USE_FW_LOADER=TRUE
 
  
工具界面如下:
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/misc-linux.im</nowiki>g
  
http://x.9tripod.com/wiki/zh/images/4/4d/SD_Fireware_Tool-interface.png
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/resource.im</nowiki>g
  
==== 制作 ====
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/kernel.im</nowiki>g
  
注意:制作启动卡会格式化SD卡,用户需要注意备份重要数据,防止误删。
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/boot.im</nowiki>g
  
第一步,选择对应的可移动磁盘设备;
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/recovery.im</nowiki>g
  
第二步,选择功能模式:固件升级、PCBA测试、SD启动;
+
Add file: /home/DISK1/x3399_marshmallow/out/release<nowiki>/linux-rootfs.im</nowiki>g
  
  * 默认会勾选“固件升级”,即只升级固件。
+
Error:&lt;AddFile&gt; open file failed,err=2!
  * 如果在升级固件前需要做 “PCBA 测试”,则同时勾选“固件升级”、“PCBA测试”。
 
  * 如果不升级固件,只需要测试PCBA,则单选“PCBA测试”,不选择“固件升级”。
 
  * “SD启动”会把固件烧写到SD中,所有分区都分配在SD卡上,运行时不会修改内部存储的数据(相当于SD卡做主存储设备)。
 
  
注意:SD卡运行模式,对kernel的编译有要求,需要把kernel的SD卡驱动配置去掉,不参与编译。
+
<nowiki>------ FAILED ------</nowiki>
  
http://x.9tripod.com/wiki/zh/images/5/5b/SD-runMode.png
+
lqm@lqm:/home/DISK1/x3399_marshmallow$
 +
</pre>
 +
===查看编译帮助===
  
  修改为
+
  执行如下指令可查询mk脚本使用方法
  
http://x.9tripod.com/wiki/zh/images/c/c9/SD-runMode-change.png
+
./<nowiki>mk.sh</nowiki>  -h
  
  第三步,选择对应平台的<nowiki>update.im</nowiki>g固
+
== 烧写android映像文 ==
 +
=== Windows系统映像烧写 ===
 +
==== RKTool驱动安装====
  
  第四步(可选) 如果需要拷贝demo文件到用户盘根目录 ,点击 选择Demo按钮 选择需要拷贝的文件目录。选择的目录下所有文件会拷贝到SD根目录下的Demo目录中,在SD引导固件升级后,Demo目录下的文件会拷贝到样机用户盘的根目录下
+
  解压<nowiki>RKTools.ra</nowiki>r 工具路径:<pre><nowiki>SDK\RKTools\windows\Release_DriverAssitant</nowiki></pre>打开“<nowiki>DriverInstall.ex</nowiki>e” ,点击 “驱动安装” 提示安装驱动成功即可
  
第五步,点击开始创建即可。
+
http://x.9tripod.com/wiki/zh/images/7/7a/Rktools-driver.png
  
 +
http://x.9tripod.com/wiki/zh/images/4/4d/Rktool-driver-ok.png
  
 +
注意事项:
  
 +
1.目前支持的操作系统包括:XP,Win7_32,Win7_64,Win8_32,Win8_64。
  
 +
2.XP系统在驱动安装完后,若还提示“发现新设备”, 安装驱动时选择“自动安装”。
  
 +
3.若之前已经安装过老版本驱动,请先点击“驱动卸载”后再进行“驱动安装”。
  
 +
====烧录方法一:单个升级固件<nowiki>update-android.img</nowiki>g====
 +
===== 生成统一固件<nowiki>update-android.img</nowiki>g =====
  
 +
我们已经在mk脚本中集成了生成统一固件的方法,在编译android文件系统时(./mk -s),会自动生成<nowiki>update-android.img</nowiki>g,并释放到out/release目录。
  
 +
===== 烧录固件<nowiki>update-android.img</nowiki>g =====
  
 +
解压光盘 tools\x3399 烧写工具\windows 目录下的 AndroidTool_Release_v2.38.zip 文件,得到 AndroidTool_Release_v2.38 文件夹,打开 AndroidTool.exe, 选择“升级固件”选项卡,
 +
点击“固件”,在弹出窗口中选择已经生成的 update-android.img 文件,如下图所示。
  
 +
<center>[[image:RK3399windowtool.png|905 × 456px]]</center>
  
 +
工具配置好后, 将 PC 端串口线连接开发板的调试串口,将 PC 端 TYPEC 延长线连接到开发板的 TYPEC 接口, 按下 RECOVERY 键( VOL+键) ,烧录工具界面会提示发现一个 LOADER 设备,然后点击升级,即可开始升级过程(注:如果提示发现一个 ADB 设备,点击切换按钮切换成LOADER 设备即可)。
  
 +
<center>[[image:RK3399windowtool1.png|905 × 456px]]</center>
  
 +
升级完成后将会出现如下界面:
 +
<center>[[image:RK3399windowtool3.png|905 × 456px]]</center>
  
 +
==== 烧录方法二:多设备升级固件<nowiki>update-android.img</nowiki>g ====
  
 +
该工具适合用户批量刷机,可以同时给多台开发板刷机。
  
 +
解压光盘 tools\x3399 烧写工具\windows 目录下的 FactoryTool-v1.42e.rar 文件,打开“<nowiki>FactoryTool.ex</nowiki>e”,点击“固件”选择<nowiki>update-android.img</nowiki>g,勾选“升级”,点击“启动”,如下图所示:
  
 +
步骤1:点击固件,选择<nowiki>update-android.img</nowiki>g;
  
 +
步骤2:点击启动(选择升级按钮);
  
 +
步骤3:连接开发板 USB、 DC 电源,按下 recovery 键(对应 VOL+键),对应 USB 口发现设备,并实现自动升级;然后重复步骤 3 即可同时升级第二台、第三台设备,升级成功或者失败的设备会在两边的列表中列出,移除成功或者失败的设备后可以继续连接需要升级的设备
  
 +
http://x.9tripod.com/wiki/zh/images/3/3a/Update-fireware-multi-device.png
  
 +
=== Linux系统烧写映像===
 +
==== 生成固件<nowiki>update-android.img</nowiki>====
  
 +
我们已经在mk脚本中集成了生成统一固件的方法,在编译android文件系统时(./mk -s),会自动生成<nowiki>update-android.img</nowiki>,并释放到out/release目录。
  
 +
==== 烧录固件<nowiki>update-android.img</nowiki>====
  
 +
工具路径:
 +
  tools\x3399 烧写工具\linux\ Linux_Upgrade_Tool_v1.24.zip
  
== android 开发指南 ==
+
在升级之前将<nowiki>update-android.img</nowiki>g拷贝到upgrade_tool相同目录下,运行upgrade_tool(需要sudo)
=== 命令终端 ===
 
  
将串口连接开发板上调试串口,进入android系统后,会自动进入android终端,如下图所示:
+
<pre><nowiki>work@ubuntu:~/3288/Linux_Upgrade_Tool_v1.2/cp rockdev<nowiki>/update-android.img</nowiki> .
  
http://x.9tripod.com/wiki/zh/images/9/94/Command.png
+
work@ubuntu:~/3288/Linux_Upgrade_Tool_v1.2$ sudo ./upgrade_tool  </nowiki></pre>
  
=== 播放mp3 ===
+
  执行结果如下图,发现设备列表,输入要升级的DevNo(设备号)选择设备
==== android命令行播放mp3 ====
+
http://x.9tripod.com/wiki/zh/images/8/82/DevNo.png
  
  在android的在 命令 可以 使用强大的am指令做很多事情。在android终端 入am, 正常情况下会有如下提示信息:
+
  选择设备后弹出工具使用菜单如下图,左侧是功能描述,右侧是 命令 语法,升级相关操作都在upgrade command列表 ,忘记命令语法 可以输 入H进行查看,清屏输入CS, 退出按Q。
 
 
<pre><nowiki># am</nowiki>
 
 
 
<nowiki>usage: am [subcommand] [options]</nowiki>
 
  
 +
http://x.9tripod.com/wiki/zh/images/6/68/DevNo1.png
  
 +
* CD命令: 选择设备, 当执行的命令有包含设备重启操作时, 需重新选择设备,当改变操作设备时需重新选择
 +
* SD命令:msc切换到rockusb升级模式。 当切换执行成功后, 需要重新选择设备
 +
* UF命令:升级完整<nowiki>update-android.img</nowiki>g固件,当执行成功后需要重新选择设备
 +
* UL命令:升级loader功能,当执行成功后需要重新选择设备
 +
* DI命令:下载单独image镜像到指定扇区,例如升级<nowiki>kernel.im</nowiki>g或者<nowiki>system.im</nowiki>g都可以直接使用此功能.例如下载<nowiki>kernel.im</nowiki>g: DI -k <nowiki>kernel.im</nowiki>g parameter //如果之前通过DI下载过parameter,则再下载<nowiki>kernel.im</nowiki>g时就可以不用指定最后的parameter参数
 +
* DB命令:下载boot,在maskrom状态下,可以通过此功能, 让maskrom设备进行Rockusb协议通讯
 +
* EF命令:擦除整个nandflash
 +
* LF命令:低格保留块后面区域,只有在loader模式下使用
  
<nowiki>   start an Activity: am start [-D] [-W] &lt;INTENT&gt;</nowiki>
+
执行uf <nowiki>update-android.img</nowiki>g 开始更新固件,下图为更新完成截图。   
  
        -D: enable debugging
+
<pre><nowiki>Rockusb&gt;uf  <nowiki>update-android.img</nowiki> </nowiki></pre>
  
        -W: wait for launch to complete
+
http://x.9tripod.com/wiki/zh/images/0/03/DevNo2.png
  
 +
备注:也可通过配置<nowiki>config.in</nowiki>i文件配置升级映像文件,只需输入UF即可升级,请用户自行尝试。
  
 +
==== 使用upgrade_tool指令烧写映像 ====
  
    start a Service: am startservice &lt;INTENT&gt;
+
上一节我们介绍了通过upgrade_tool烧写统一固件<nowiki>update-android.img</nowiki>的方法,熟悉三星平台的开发者会发现,这种方法并不是很高效,真正操作起来,它远没有fastboot工具来的迅速。其实,upgrade_tool工具同样支持类似于fastboot的烧写方式。
  
 +
为了烧写方便,在mk脚本中,默认在编译系统时,已经将烧写工具upgrade_tool拷贝到out/release目录了。
  
 +
第一步:打开串口终端,并打开minicom,用于适时监控串口调试信息;
  
    send a broadcast Intent: am broadcast &lt;INTENT&gt;
+
第二步:按住RECOVERY键,连接USB OTG线和电源线,这时uboot打印信息将会提示已经进入USB下载模式。如果接通电源后没来得及按住RECOVERY键,在按住RECOVERY键的同时,再按下复位键即可。注意,使用
  
 +
第二步:打开第二个串口终端,进入out/release目录;
  
 +
第三步:在out/release目录下敲击如下指令,烧写相应的映像。
 +
<pre><nowiki>
  
<nowiki>   start an Instrumentation: am instrument [flags] &lt;COMPONENT&gt;</nowiki>
+
sudo upgrade_tool  di  –k  <nowiki>kernel.im</nowiki>g(烧写内核)
  
        -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
+
sudo upgrade_tool  di  –s  <nowiki>system.im</nowiki>g( 烧写文件系统)
  
        -e &lt;NAME&gt;&lt;VALUE&gt;: set argument &lt;NAME&gt; to &lt;VALUE&gt;
+
sudo upgrade_tool  di  resource  <nowiki>resource.im</nowiki>g(烧写资源文件)
  
        -p &lt;FILE&gt;: write profiling data to &lt;FILE&gt;
+
sudo upgrade_tool  di  –r <nowiki>recovery.im</nowiki>g(烧写急救文件)
  
        -w: wait for instrumentation to finish before returning
+
sudo upgrade_tool  ul  <nowiki>RK3288UbootLoader_V2.30.10.bi</nowiki>n(烧写bootloader)
  
 +
sudo upgrade_tool  uf  <nowiki>update-android.img</nowiki>g(烧写统一固件) </nowiki></pre>
  
 +
==== 使用Rkflashkit烧写映像 ====
  
    start profiling: am profile &lt;PROCESS&gt; start &lt;FILE&gt;
+
rkflashkit 有图形界面,后加了命令行支持,更是好用。
 +
<pre><nowiki>
  
    stop profiling: am profile &lt;PROCESS&gt; stop
+
work@ubuntu:~/rktool$ sudo apt-get install build-essential fakeroot
  
 +
work@ubuntu:~/rktool$ git clone <nowiki>https://github.com/linuxerwang/rkflashkit</nowiki>
  
 +
work@ubuntu:~/rktool$ cd rkflashkit
  
&lt;INTENT&gt; specifications include these flags:
+
work@ubuntu:~/rktool$ ./waf debian
  
<nowiki>        [-a &lt;ACTION&gt;] [-d &lt;DATA_URI&gt;] [-t &lt;MIME_TYPE&gt;]</nowiki>
+
work@ubuntu:~/rktool$ sudo apt-get install python-gtk2
  
<nowiki>       [-c &lt;CATEGORY&gt; [-c &lt;CATEGORY&gt;] ...]</nowiki>
+
work@ubuntu:~/rktool$ sudo dpkg -i <nowiki>rkflashkit_0.1.4_all.de</nowiki>b  </nowiki></pre>
  
<nowiki>       [-e|--es &lt;EXTRA_KEY&gt;&lt;EXTRA_STRING_VALUE&gt; ...]</nowiki>
+
注意:<nowiki>rkflashkit_0.1.4_all.de</nowiki>b会因版本更新,版本数字可能会有所变化,如果执行失败,执行ls命令查看下即可。
  
<nowiki>       [--esn &lt;EXTRA_KEY&gt; ...]</nowiki>
+
<pre><nowiki>work@ubuntu:~/rktool/$ sudo rkflashkit </nowiki></pre>
  
<nowiki>        [--ez &lt;EXTRA_KEY&gt;&lt;EXTRA_BOOLEAN_VALUE&gt; ...]</nowiki>
+
如下是图形界面,在Devices下选择设备,选择要烧写的分区和对应的映像文件,点击Flash image即可。
  
<nowiki>        [-e|--ei &lt;EXTRA_KEY&gt;&lt;EXTRA_INT_VALUE&gt; ...]</nowiki>
+
http://x.9tripod.com/wiki/zh/images/0/08/Rkflashkit.png
  
<nowiki>        [-n &lt;COMPONENT&gt;] [-f &lt;FLAGS&gt;]</nowiki>
+
该工具也支持命令行,使用help命令查看使用方法
  
<nowiki>       [--grant-read-uri-permission] [--grant-write-uri-permission]</nowiki>
+
<pre><nowiki>work@ubuntu:~/rktool/rkflashkit$ rkflashkit --help
  
<nowiki>       [--debug-log-resolution]</nowiki>
+
<nowiki>Usage: &lt;cmd&gt; [args] [&lt;cmd&gt; [args]...]</nowiki>  
  
<nowiki>        [--activity-brought-to-front] [--activity-clear-top]</nowiki>
 
  
<nowiki>        [--activity-clear-when-task-reset] [--activity-exclude-from-recents]</nowiki>
 
  
<nowiki>        [--activity-launched-from-history] [--activity-multiple-task]</nowiki>
+
part                              List partition
  
<nowiki>        [--activity-no-animation] [--activity-no-history]</nowiki>
+
flash @&lt;PARTITION&gt; &lt;IMAGE FILE&gt;  Flash partition with image file
  
<nowiki>        [--activity-no-user-action] [--activity-previous-is-top]</nowiki>
+
cmp @&lt;PARTITION&gt; &lt;IMAGE FILE&gt;    Compare partition with image file
  
<nowiki>        [--activity-reorder-to-front] [--activity-reset-task-if-needed]</nowiki>
+
backup @&lt;PARTITION&gt; &lt;IMAGE FILE&gt;  Backup partition to image file
  
<nowiki>        [--activity-single-top]</nowiki>
+
erase  @&lt;PARTITION&gt;              Erase partition
  
<nowiki>        [--receiver-registered-only] [--receiver-replace-pending]</nowiki>
+
reboot                            Reboot device
  
<nowiki>        [&lt;URI&gt;]</nowiki> </nowiki></pre>
 
  
启动的方法为:
 
  
<pre><nowiki><nowiki># am start -n </nowiki> 包(package)名/包名. 活动(activity)名称 </nowiki></pre>
+
For example, flash device with <nowiki>boot.im</nowiki>g and <nowiki>kernel.im</nowiki>g, then reboot:
  
启动的方法可以从每个应用的<nowiki>AndroidManifest.xm</nowiki>l的文件中得到,以计算器(calculator)为例,
 
  
<pre><nowiki>&lt;?xml version="1.0" encoding=""?&gt;
 
  
 +
  sudo rkflashkit flash @boot <nowiki>boot.im</nowiki>g @<nowiki>kernel.im</nowiki>g <nowiki>kernel.im</nowiki>g reboot
  
 +
work@ubuntu:~/rktool/rkflashkit$  </nowiki></pre>
  
&lt;manifestxmlns:android="<nowiki>http://schemas.android.com/apk/res/android</nowiki>"
+
== android 开发指南 ==
 +
=== 命令终端 ===
  
 +
将串口连接开发板上调试串口,进入android系统后,会自动进入android终端,如下图所示:
  
 +
http://x.9tripod.com/wiki/zh/images/9/94/Command.png
  
package="<nowiki>com.android.ca</nowiki>lculator2"&gt;
+
=== 播放mp3 ===
 +
==== android 命令行播放mp3 ====
  
 +
在android的在命令行下,可以使用强大的am指令做很多事情。在android终端输入am,正常情况下会有如下提示信息:
  
 +
<pre><nowiki># am</nowiki>
  
&lt;applicationandroid:label="@string/app_name"android:icon="@drawable/icon"&gt;
+
<nowiki>usage: am [subcommand] [options]</nowiki>
  
  
  
&lt;activity android:name="Calculator"
+
<nowiki>    start an Activity: am start [-D] [-W] &lt;INTENT&gt;</nowiki>
  
 +
        -D: enable debugging
  
 +
        -W: wait for launch to complete
  
android:theme="@android:style/Theme.Black"&gt;
 
  
  
 +
    start a Service: am startservice &lt;INTENT&gt;
  
&lt;intent-filter&gt;
 
  
  
 +
    send a broadcast Intent: am broadcast &lt;INTENT&gt;
  
&lt;action android:name="<nowiki>android.intent.ac</nowiki>tion.MAIN" /&gt;
 
  
  
 +
<nowiki>    start an Instrumentation: am instrument [flags] &lt;COMPONENT&gt;</nowiki>
  
&lt;categoryandroid:name="<nowiki>android.intent.ca</nowiki>tegory.LAUNCHER"/&gt;
+
        -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
  
 +
        -e &lt;NAME&gt;&lt;VALUE&gt;: set argument &lt;NAME&gt; to &lt;VALUE&gt;
  
 +
        -p &lt;FILE&gt;: write profiling data to &lt;FILE&gt;
  
&lt;/intent-filter&gt;
+
        -w: wait for instrumentation to finish before returning
  
  
  
&lt;/activity&gt;
+
    start profiling: am profile &lt;PROCESS&gt; start &lt;FILE&gt;
  
 +
    stop profiling: am profile &lt;PROCESS&gt; stop
  
  
&lt;/application&gt;
 
  
 +
&lt;INTENT&gt; specifications include these flags:
  
 +
<nowiki>        [-a &lt;ACTION&gt;] [-d &lt;DATA_URI&gt;] [-t &lt;MIME_TYPE&gt;]</nowiki>
  
&lt;/manifest&gt; </nowiki></pre>
+
<nowiki>        [-c &lt;CATEGORY&gt; [-c &lt;CATEGORY&gt;] ...]</nowiki>
  
由此计算器(calculator)的启动方法为:
+
<nowiki>        [-e|--es &lt;EXTRA_KEY&gt;&lt;EXTRA_STRING_VALUE&gt; ...]</nowiki>
  
<pre><nowiki><nowiki># am start-ncom.android.calculator2/com.android.calculator2.Calculator</nowiki></nowiki></pre>
+
<nowiki>       [--esn &lt;EXTRA_KEY&gt; ...]</nowiki>
  
Music的启动方法为:
+
<nowiki>        [--ez &lt;EXTRA_KEY&gt;&lt;EXTRA_BOOLEAN_VALUE&gt; ...]</nowiki>
  
<pre><nowiki><nowiki># </nowiki>am <nowiki>start-ncom.android.mu</nowiki>sic<nowiki>/com.android.mu</nowiki>sic.MusicBrowserActivity</nowiki></pre>
+
<nowiki>       [-e|--ei &lt;EXTRA_KEY&gt;&lt;EXTRA_INT_VALUE&gt; ...]</nowiki>
  
这时,屏幕上会有music的播放列表,但是并没有播放。如果需要播放,得执行下面的指令:
+
<nowiki>        [-n &lt;COMPONENT&gt;] [-f &lt;FLAGS&gt;]</nowiki>
  
<pre><nowiki>am start -n <nowiki>com.android.mu</nowiki>sic<nowiki>/com.android.mu</nowiki>sic.MediaPlaybackActivity -d /mnt/extsd<nowiki>/liangliangxianwang.mp</nowiki>3 </nowiki></pre>
+
<nowiki>       [--grant-read-uri-permission] [--grant-write-uri-permission]</nowiki>
  
==== 使用android默认音频播放器 ====
+
<nowiki>        [--debug-log-resolution]</nowiki>
  
确保外置的SD卡中存在mp3文件,点击音乐,播放器会自动识别音频文件,如下图:
+
<nowiki>        [--activity-brought-to-front] [--activity-clear-top]</nowiki>
  
http://x.9tripod.com/wiki/zh/images/9/9a/Mp3.png
+
<nowiki>        [--activity-clear-when-task-reset] [--activity-exclude-from-recents]</nowiki>
  
点击相应的音频文件即可播放。播放时界面如下:
+
<nowiki>        [--activity-launched-from-history] [--activity-multiple-task]</nowiki>
  
http://x.9tripod.com/wiki/zh/images/3/33/Mp3-1.png
+
<nowiki>        [--activity-no-animation] [--activity-no-history]</nowiki>
  
=== 播放视频===
+
<nowiki>        [--activity-no-user-action] [--activity-previous-is-top]</nowiki>
  
&nbsp;    android自带视频处理功能,在android应用界面显示为图库。点击图库按钮,会在外置SD卡中自动寻找能够识别的视频和图片文件,如下图:
+
<nowiki>        [--activity-reorder-to-front] [--activity-reset-task-if-needed]</nowiki>
  
http://x.9tripod.com/wiki/zh/images/8/8f/Mp4.png
+
<nowiki>        [--activity-single-top]</nowiki>
  
点击中间的按钮:
+
<nowiki>        [--receiver-registered-only] [--receiver-replace-pending]</nowiki>
  
http://x.9tripod.com/wiki/zh/images/6/6b/Mp4-1.png
+
<nowiki>        [&lt;URI&gt;]</nowiki> </pre>
  
  上图中,带有播放符号 视频文件,不带的为图片文件。点击带播放符号的文件
+
  启动 方法 为:
  
http://x.9tripod.com/wiki/zh/images/7/76/Mp4-2.png
+
<pre><nowiki><nowiki># am start -n </nowiki>包(package)名/ 包名. 活动(activity)名称 </pre>
  
  再点击播放按钮:
+
  启动的方法可以从每个应用的<nowiki>AndroidManifest.xm</nowiki>l的文件中得到,以计算器(calculator)为例,
  
http://x.9tripod.com/wiki/zh/images/3/3d/Mp4-3.png
+
<pre><nowiki>&lt;?xml version="1.0" encoding=""?&gt;
  
X3288 android5.1系统还带一款4k视频播放器,播放器会自动关联视频文件,点击需要播放的视频即可播放
 
  
http://x.9tripod.com/wiki/zh/images/4/46/Mp4-4.png
 
  
 +
&lt;manifestxmlns:android="<nowiki>http://schemas.android.com/apk/res/android</nowiki>"
  
  
http://x.9tripod.com/wiki/zh/images/6/60/Mp4-5.png
 
  
如果遇到图库无法支持的视频文件,可以采用第三方播放器如RockPlayer进行播放,如网络上最为流行的rmvb和rm文件。这时,机器俨然成为了一个具有支持rm/rmvb等格式视频的超强mp4了。如对屏幕尺寸有更高要求,可以使用VGA或HDMI方式,直接将视频文件显示到显示器或电视机上。
+
package="<nowiki>com.android.ca</nowiki>lculator2"&gt;
  
使用RockPlayer播放视频时,会弹出一个硬解和软解的对话框,如果属于3288硬解码的视频文件,选择硬解模式,否则选择软解模式。如播放rm/rmvb文件,选择软解模式才能播放,如下图所示:
 
  
http://x.9tripod.com/wiki/zh/images/f/ff/Mp4-6.png
 
  
=== 图片浏览 ===
+
&lt;applicationandroid:label="@string/app_name"android:icon="@drawable/icon"&gt;
  
浏览图片时,同样使用上面的图库浏览。点击图库图标,点击要浏览的图片即可浏览。滑动可以浏览下一张图片,如下图所示:
 
  
http://x.9tripod.com/wiki/zh/images/c/ce/Image-view.png
 
  
=== 语言设置 ===
+
&lt;activity android:name="Calculator"
  
点击设置中的语言和输入法一栏,再点击选择语言,会弹出多种语言,选择需要的语言即可,如下图:
 
  
http://x.9tripod.com/wiki/zh/images/3/39/Language.png
 
  
===使用WIFI上网 ===
+
android:theme="@android:style/Theme.Black"&gt;
  
X3288开发板自带wifi/BT二合一模组,无需额外USBwifi即可无线上网。启动开发板,点击设置,在Wi-Fi一栏的方框中有个关闭按钮,将他拨到右边,即打开状态,如下图:
 
  
http://x.9tripod.com/wiki/zh/images/5/52/Wifi-default.png
 
  
再点击Wi-Fi一栏,进入wifi界面,找到属于自己的无线网络信号并点击,输入密码后,点击连接即可上网。
+
&lt;intent-filter&gt;
  
http://x.9tripod.com/wiki/zh/images/3/3b/Wifi-default1.png
 
  
===使用蓝牙传输数据 ===
 
  
x3288开发板支持AP6335芯片的WIFI/BT二合一模块。点击设置-&gt; 蓝牙,将蓝牙开关打开,如下图所示:
+
&lt;action android:name="<nowiki>android.intent.ac</nowiki>tion.MAIN" /&gt;
  
http://x.9tripod.com/wiki/zh/images/5/5a/Blutooth.png
 
  
点击蓝牙,进入设置界面,找到一个支持蓝牙设备的安卓手机,并打开蓝牙,且可被发现。在x3288开发板的蓝牙设置界面的右上脚点击搜索设备,在可用设备一栏中将会显示出所有找到的蓝牙设备。找到需要匹配的蓝牙设备并点击,在开发板上弹出配对请求:
 
  
http://x.9tripod.com/wiki/zh/images/5/5f/Blutooth1.png
+
&lt;categoryandroid:name="<nowiki>android.intent.ca</nowiki>tegory.LAUNCHER"/&gt;
  
点击配对,同时,在手机端也会弹出类似的画面,也点击配对即可。成功配对后的界面如下:
 
  
http://x.9tripod.com/wiki/zh/images/9/95/Blutooth2.png
 
  
这时,配对的设备间就可以通过蓝牙共享文件了。点击开发板的图库,找到一张图片并选中:
+
&lt;/intent-filter&gt;
http://x.9tripod.com/wiki/zh/images/d/d6/Blutooth3.png
 
  
点击右上脚的分享按钮,选择蓝牙,弹出如下界面:
 
  
http://x.9tripod.com/wiki/zh/images/6/6f/Blutooth4.png
 
  
选择配对成功的蓝牙设备,这时在配对设备上将会弹出一个接收文件的对话框,点击接收即可。
+
&lt;/activity&gt;
  
===使用蓝牙播放音乐 ===
 
  
x3288开发板可支持通过蓝牙连接蓝牙音箱,并播放音乐。准备一个蓝牙音箱,并切换到蓝牙模式,进入开发板的蓝牙界面并打开,点击右上脚的搜索设备,将会找到蓝牙音箱,下图中的GS805即是蓝牙音箱:
 
  
http://x.9tripod.com/wiki/zh/images/0/0d/Blutooth-mp3.png
+
&lt;/application&gt;
  
点击GS805,稍等几秒,将会配对成功,无需任何确认动作。这时,随意在开发板上播放音视频,音乐将会通过蓝牙音箱播放出来。
 
  
===使用USB鼠标键盘 ===
 
  
启动开发板,将USB鼠标或者USB无线鼠标键盘接到USB HOST接口,即可使用鼠标键盘操作android界面了。
+
&lt;/manifest&gt;</pre>
  
=== APK应用安装 ===
+
由此计算器(calculator)的启动方法为:
  
Android系统下有很多种APK的安装方法,这里介绍四种。
+
<pre><nowiki><nowiki># am start-ncom.android.calculator2/com.android.calculator2.Calculator</nowiki></pre>
  
==== 使用SD卡安装 ====
+
Music的启动方法为:
  
将拷贝有APK安装包的SD卡插到开发板,打开开发板的“文件管理”应用程序,界面如下:
+
<pre><nowiki><nowiki># </nowiki>am <nowiki>start-ncom.android.mu</nowiki>sic<nowiki>/com.android.mu</nowiki>sic.MusicBrowserActivity</pre>
  
http://x.9tripod.com/wiki/zh/images/6/67/SD-APK.png
+
这时,屏幕上会有music的播放列表,但是并没有播放。如果需要播放,得执行下面的指令:
  
可以看到,安装包一栏找到了3个安装包。点击进去,会列出安装列表:
+
<pre><nowiki>am start -n <nowiki>com.android.mu</nowiki>sic<nowiki>/com.android.mu</nowiki>sic.MediaPlaybackActivity -d /mnt/extsd<nowiki>/liangliangxianwang.mp</nowiki>3 </pre>
  
  点击要安装的APK文件:
+
==== 使用android默认音频播放器 ====
  
http://x.9tripod.com/wiki/zh/images/2/2f/SD-APK1.png
+
确保外置的SD卡中存在mp3文件,点击音乐,播放器会自动识别音频文件,如下图:
  
依次点击下一步,直到安装完成即可。
+
http://x.9tripod.com/wiki/zh/images/9/9a/Mp3.png
  
==== 使用ApkInstaller安装 ====
+
  点击相应的音频文件即可播放。播放时界面如下:
  
使用ApkInstaller安装APK,需要将开发板与PC机同步起来。
+
http://x.9tripod.com/wiki/zh/images/3/33/Mp3-1.png
  
  第一步:启动开发板,并进入android系统。
+
=== 播放视频===
  
第二步:将光盘 中的<nowiki>ApkInstaller.ra</nowiki>r解压到PC机的任意目录 如D盘;
+
&nbsp;    android自带视频处理功能,在android应用界面显示为图库。点击图库按钮,会在外置SD卡 自动寻找能够识别 视频和图片文件 如下图:
  
第三步:双击<nowiki>ApkInstaller.ex</nowiki>e应用程序,如下图所示:
+
http://x.9tripod.com/wiki/zh/images/8/8f/Mp4.png
  
http://x.9tripod.com/wiki/zh/images/2/25/Apkinstaller.png
+
点击中间的按钮:
  
在解压目录下默认有一个名为<nowiki>mVideoPlayer.ap</nowiki>k的APK文件,安装软件已经将它列出来了。我们需要将安装的APK软件放在该目录。
+
http://x.9tripod.com/wiki/zh/images/6/6b/Mp4-1.png
  
  第四步:点击安装-&gt;开始安装 或者 点击 快捷方式http://x.9tripod.com/wiki/zh/images/b/b0/Triangle-Shortcuts.png开始安装。安装完成后,界面上会有相应提示。
+
  上图中,带有播放符号的即为视频文件 不带的为图片文件。 点击 带播放符号的文件:
  
'''说明:此方法适合批量安装APK文件。'''
+
http://x.9tripod.com/wiki/zh/images/7/76/Mp4-2.png
  
==== 使用adb工具安装 ====
+
  再点击播放按钮:
  
在上一章节,<nowiki>ApkInstaller.ra</nowiki>r的解压目录中已经存在有adb工具了,我们在命令行下进入该目录,执行如下指令安装APK:
+
http://x.9tripod.com/wiki/zh/images/3/3d/Mp4-3.png
  
<pre><nowiki>adb  install  *.apk </nowiki></pre>
+
X3399 android6.0系统还带一款4k视频播放器,播放器会自动关联视频文件,点击需要播放的视频即可播放
  
  正常安装的界面如下:
+
[[image:RK33994K.png|1,024 × 600px]]
  
http://x.9tripod.com/wiki/zh/images/5/5d/Adb-apk.png
+
如果遇到图库无法支持的视频文件,可以采用第三方播放器如RockPlayer进行播放,如网络上最为流行的rmvb和rm文件。这时,机器俨然成为了一个具有支持rm/rmvb等格式视频的超强mp4了。如对屏幕尺寸有更高要求,可以使用VGA或HDMI方式,直接将视频文件显示到显示器或电视机上。
  
==== 在线安装 ====
+
  使用RockPlayer播放视频时,会弹出一个硬解和软解的对话框,如果属于3399硬解码的视频文件,选择硬解模式,否则选择软解模式。如播放rm/rmvb文件,选择软解模式才能播放,如下图所示:
  
用户可以通过91助手,百度应用中心、360手机助手等第三方软件直接在线安装,这里就不详细说明了。
+
http://x.9tripod.com/wiki/zh/images/f/ff/Mp4-6.png
  
===  屏幕抓 ===
+
=== 图 片浏览 ===
==== 使用eclipse抓图 ====
 
  
android有很多截 工具,但是很多都需要root权限,在平时做开发 时, 我们可以 使 用eclipse自带 插件进行截 图, 非常 方便
+
浏览 时, 同样 使 用上面 的图 库浏览。点击图库图标 点击要浏览 图片即可浏览 滑动可以浏览下一张图片,如下图所示:
  
启动开发板,并进入android系统。使用USB延长线将x3288开发板与PC机连接,第一次连接时会提示需要安装软件,如下图:
+
http://x.9tripod.com/wiki/zh/images/c/ce/Image-view.png
  
http://x.9tripod.com/wiki/zh/images/7/7d/Android-driver1.png
+
=== 语言设置 ===
  
 选择 一步
+
  点击设置中的语言和输入法一栏,再点击选择语言,会弹出多种语言, 选择 需要的语言即可
  
http://x.9tripod.com/wiki/zh/images/e/e3/Android-driver2.png
+
http://x.9tripod.com/wiki/zh/images/3/39/Language.png
  
选择自动安装软件,点下一步,直至安装完成。
+
===使用WIFI上网 ===
  
http://x.9tripod.com/wiki/zh/images/b/b5/Android-driver3.png
+
X3399开发板自带wifi/BT二合一模组,无需额外USBwifi即可无线上网。启动开发板,点击设置,在Wi-Fi一栏的方框中有个关闭按钮,将他拨到右边,即打开状态,如下图:
  
安装完成之后,打开eclipse软件,如果没有安装,需先安装该软件。然后点击Window-&gt;Show view-&gt;Devices,如下图:
+
http://x.9tripod.com/wiki/zh/images/5/52/Wifi-default.png
  
http://x.9tripod.com/wiki/zh/images/9/9d/Eclipse-device.png
+
再点击Wi-Fi一栏,进入wifi界面,找到属于自己的无线网络信号并点击,输入密码后,点击连接即可上网。
  
确保机器处于开机状态,这时Devices会找到机器的设备号,如下图:
+
http://x.9tripod.com/wiki/zh/images/3/3b/Wifi-default1.png
  
http://x.9tripod.com/wiki/zh/images/0/06/Eclipse-device1.png
+
===使用蓝牙传输数据 ===
  
点击 上图右上脚的摄相头标志 就会弹出要保存的图像,点击save保存即可 ,如下图所示:
+
x3399开发板支持AP6335芯片的WIFI/BT二合一模块。 点击 设置-&gt;蓝牙 将蓝牙开关打开 ,如下图所示:
  
http://x.9tripod.com/wiki/zh/images/3/38/Camera-save.png
+
http://x.9tripod.com/wiki/zh/images/5/5a/Blutooth.png
  
==== 使用360 手机 助手抓图 ====
+
  点击蓝牙,进入设置界面,找到一个支持蓝牙设备的安卓 手机 ,并打开蓝牙,且可被发现。在x3399开发板的蓝牙设置界面的右上脚点击搜索设备,在可用设备一栏中将会显示出所有找到的蓝牙设备。找到需要匹配的蓝牙设备并点击,在开发板上弹出配对请求:
  
在PC机上安装360手机助手手,启动开发板,通过USB延长线将开发板连接到PC机的USB口,打开360手机助手,360手机助手将会找到x3288开发板。如果找不到,将USB线拨掉重插,在开发板上会弹出一个授权界面,点击确认即可。正常连接后的360手机助手界面如下:
+
http://x.9tripod.com/wiki/zh/images/5/5f/Blutooth1.png
  
http://x.9tripod.com/wiki/zh/images/f/f0/360-screenshot.png
+
点击配对,同时,在手机端也会弹出类似的画面,也点击配对即可。成功配对后的界面如下:
  
点击左下脚的截屏按钮即可。
+
http://x.9tripod.com/wiki/zh/images/9/95/Blutooth2.png
  
=== 挂载TF卡 ===
+
  这时,配对的设备间就可以通过蓝牙共享文件了。点击开发板的图库,找到一张图片并选中:
 +
http://x.9tripod.com/wiki/zh/images/d/d6/Blutooth3.png
  
  系统启动后 会自动挂载右侧卡槽中的TF卡到/mnt/external_sd/目录 ,如下 图所示
+
  点击右上脚的分享按钮 选择蓝牙 弹出 如下 界面
  
http://x.9tripod.com/wiki/zh/images/1/16/Mount-tf.png
+
http://x.9tripod.com/wiki/zh/images/6/6f/Blutooth4.png
  
 +
选择配对成功的蓝牙设备,这时在配对设备上将会弹出一个接收文件的对话框,点击接收即可。
  
 +
===使用蓝牙播放音乐 ===
  
=== 挂载U盘===
+
x3399开发板可支持通过蓝牙连接蓝牙音箱,并播放音乐。准备一个蓝牙音箱,并切换到蓝牙模式,进入开发板的蓝牙界面并打开,点击右上脚的搜索设备,将会找到蓝牙音箱,下图中的GS805即是蓝牙音箱:
  
启动开发板,并进入android系统。插入U盘后,系统会将U盘自动挂载到/mnt/usb_storage*(*表示0到4)目录。
+
http://x.9tripod.com/wiki/zh/images/0/0d/Blutooth-mp3.png
  
=== 计算器 ===
+
  点击GS805,稍等几秒,将会配对成功,无需任何确认动作。这时,随意在开发板上播放音视频,音乐将会通过蓝牙音箱播放出来。
  
点击android应用的计算器即可 使 用计算器功能,如下图所示:
+
=== 使 用USB鼠标键盘 ===
  
http://x.9tripod.com/wiki/zh/images/c/cc/Counter.png
+
启动开发板,将USB鼠标或者USB无线鼠标键盘接到USB HOST接口,即可使用鼠标键盘操作android界面了。
  
=== 输入法 ===
+
=== APK应用安装 ===
  
推荐 安装 讯飞输入 法, 测试界面如下:
+
Android系统下有很多种APK的 安装 法, 这里介绍四种。
  
http://x.9tripod.com/wiki/zh/images/0/0b/Xunfei-input.png
+
==== 使用SD卡安装 ====
  
=== 浏览器 ===
+
  将拷贝有APK安装包的SD卡插到开发板,打开开发板的“文件管理”应用程序,界面如下:
  
android默认自带一个浏览器,该浏览器功能已经非常完善了,如果用户仍然觉得不够要求,可以下载安装第三方浏览器,如UC浏览器等。
+
http://x.9tripod.com/wiki/zh/images/6/67/SD-APK.png
  
http://x.9tripod.com/wiki/zh/images/4/43/Brower.png
+
可以看到,安装包一栏找到了3个安装包。点击进去,会列出安装列表:
  
=== 屏幕旋转 ===
+
  点击要安装的APK文件:
  
重力传感器已经集成到开发板上,将开发板移动到四周任一方向,界面会随之改变。当然并不是所有应用程序都会随之改变,有部分应用程序不支持屏幕旋转。旋转后示例图片如下:
+
http://x.9tripod.com/wiki/zh/images/2/2f/SD-APK1.png
  
http://x.9tripod.com/wiki/zh/images/d/d8/Screen-rotation.png
+
依次点击下一步,直到安装完成即可。
  
http://x.9tripod.com/wiki/zh/images/1/17/Screen-rotation1.png
+
==== 使用adb工具安装 ====
  
=== 时间设置 ===
+
  在上一章节,<nowiki>ApkInstaller.ra</nowiki>r的解压目录中已经存在有adb工具了,我们在命令行下进入该目录,执行如下指令安装APK:
  
  点击android应用中的设置,可以看到有日期和时间一栏,点击进去,选择相应的栏目设置即可。
+
<pre><nowiki>adb install  *.apk </nowiki></pre>
  
http://x.9tripod.com/wiki/zh/images/d/d2/Date-set.png
+
正常安装的界面如下:
  
===拍照摄相 ===
+
http://x.9tripod.com/wiki/zh/images/5/5d/Adb-apk.png
  
  点击android应用中的相机,会进入图像预览模式。点击右下脚的拍照按钮即可拍照,如下图所示:
+
==== 在线安装 ====
  
http://x.9tripod.com/wiki/zh/images/b/bb/Shot-picture.png
+
用户可以通过91助手,百度应用中心、360手机助手等第三方软件直接在线安装,这里就不详细说明了。
  
  右下脚可以切换拍照和录像功能。
+
=== 屏幕抓图===
 +
==== 使用eclipse抓图 ====
  
=== 使用 线 太网上网===
+
android 很多截图工具,但是很多都需要root权限,在平时做开发时,我们可 使用eclipse自带的插件进行截图,非常的方便。
  
  将可以正常上网的网 线 连接到 开发板 的网口座上 网口座的指 灯会正常闪烁 正常上网界面 如下:
+
  启动开发板,并进入android系统。使用USB延长 线 将x3399 开发板 与PC机连接 第一次连接时会提 需要安装软件 ,如下
  
http://x.9tripod.com/wiki/zh/images/6/61/Wired-internet.png
+
http://x.9tripod.com/wiki/zh/images/7/7d/Android-driver1.png
  
=== 优酷 ===
+
  选择否,点下一步:
  
将优酷的APK软件安装到开发板,连接网线就可以看视频了。
+
http://x.9tripod.com/wiki/zh/images/e/e3/Android-driver2.png
  
http://x.9tripod.com/wiki/zh/images/1/17/Youku.png
+
选择自动安装软件,点下一步,直至安装完成。
  
=== 播放电视===
+
http://x.9tripod.com/wiki/zh/images/b/b5/Android-driver3.png
  
 安装 龙龙直播 泰捷视频等网络播放器 插上网线即可播放
+
 安装 完成之后 打开eclipse软件 如果没有安装,需先安装该软件 然后点击Window-&gt;Show view-&gt;Devices,如下图:
  
http://x.9tripod.com/wiki/zh/images/3/30/Live-tv.png
+
http://x.9tripod.com/wiki/zh/images/9/9d/Eclipse-device.png
  
=== 使用遥控 操作 发板 ===
+
  确保机 处于 机状态,这时Devices会找到机器的设备号,如下图:
  
默认x3288开发板硬件支持红外遥控器,我们可以通过遥控器操作android界面,在泰捷视频等电视界面通过遥控器操作,开发板就完全变成了一个机顶盒。
+
http://x.9tripod.com/wiki/zh/images/0/06/Eclipse-device1.png
  
=== 1080P视频播放 ===
+
点击上图右上脚的摄相头标志,就会弹出要保存的图像,点击save保存即可,如下图所示:
  
3288相对4412,支持更多种全高清视频的硬解码,可以流畅的播放这些格式的1080P视频文件。
+
http://x.9tripod.com/wiki/zh/images/3/38/Camera-save.png
  
  通常情况下, 使 用RockPlayer或者自带的播放器都可播放。如果遇到自带播放器无法播放,可选择RockPlayer。播放界面如下:
+
==== 使 用360手机助手抓图 ====
  
http://x.9tripod.com/wiki/zh/images/a/a1/RockPlayer.png
+
在PC机上安装360手机助手手,启动开发板,通过USB延长线将开发板连接到PC机的USB口,打开360手机助手,360手机助手将会找到x3399开发板。如果找不到,将USB线拨掉重插,在开发板上会弹出一个授权界面,点击确认即可。正常连接后的360手机助手界面如下:
  
===QQ ===
+
http://x.9tripod.com/wiki/zh/images/f/f0/360-screenshot.png
  
  使用91助手或从QQ官网 载针对android版本的QQ软件,安装到x3288开发板, 即可 使用QQ了
+
  点击左 脚的截屏按钮 即可。
  
http://x.9tripod.com/wiki/zh/images/8/8c/Qq-login.png
+
=== 挂载TF卡 ===
  
http://x.9tripod.com/wiki/zh/images/3/37/Qq-login1.png
+
系统启动后,会自动挂载右侧卡槽中的TF卡到/mnt/external_sd/ 目录,如下图所示:
  
=== QQ斗地主 ===
+
[[image:RK3399android-tf.png|939 × 563px]]
  
  用户可自己下载安装测试。
+
=== 挂载U盘===
  
=== 愤怒的小鸟 ===
+
  启动开发板,并进入android系统。插入U盘后,系统会将U盘自动挂载到/mnt/usb_storage*(*表示0到4)目录。
  
  用户可自己下载安装测试。
+
=== 计算器 ===
  
=== 赛车 ===
+
  点击android应用的计算器即可使用计算器功能,如下图所示:
  
用户可自己下载安装测试。
+
http://x.9tripod.com/wiki/zh/images/c/cc/Counter.png
  
=== VGA显示 ===
+
=== 输入法 ===
  
  注意,x3288开发板本身不带VGA电路 ,如 需使用VGA,需另加VGA转接板。
+
  推荐安装讯飞输入法 测试界面 下:
  
=== HDMI显示===
+
http://x.9tripod.com/wiki/zh/images/0/0b/Xunfei-input.png
  
HDMI显示支持直接将LCD上显示的视频还原到带有HDMI接口的电视机上,支持1080P高清视频,兼容720P,576P以及480P的视频。同时还将音频也一并传送到电视机上。
+
=== 浏览器 ===
  
http://x.9tripod.com/wiki/zh/images/b/b4/HDMIshow.jpg
+
android默认自带一个浏览器,该浏览器功能已经非常完善了,如果用户仍然觉得不够要求,可以下载安装第三方浏览器,如UC浏览器等。
  
===开关机 ===
+
http://x.9tripod.com/wiki/zh/images/4/43/Brower.png
  
x3288开发板使用了PMU进行电源管理。当外接上5V的电源适配器后,x3288开发板将会被自动点亮,进入系统后,长按开机键,会弹出一个选择对话框,点击关机按钮将会弹出确认关机的对话框,点击确认即可关机。
+
=== 屏幕旋转 ===
  
http://x.9tripod.com/wiki/zh/images/e/e1/ON-OFF.png
+
重力传感器已经集成到开发板上,将开发板移动到四周任一方向,界面会随之改变。当然并不是所有应用程序都会随之改变,有部分应用程序不支持屏幕旋转。旋转后示例图片如下:
  
 +
http://x.9tripod.com/wiki/zh/images/d/d8/Screen-rotation.png
  
 +
http://x.9tripod.com/wiki/zh/images/1/17/Screen-rotation1.png
  
===  休眠唤醒 ===
+
===  时间设置 ===
  
  进入android文件系统后 轻按开关机键,屏幕将会熄灭,然后进入深度休眠状态。 可以 通过串口查 看进 入休眠 打印信息。再次轻按开关机键,开发板将会唤醒
+
  点击android应用中的设置 ,可以看 到有日期和时间一栏,点击 去,选择相应 栏目设置即可
  
== Android测试程序 ==
+
http://x.9tripod.com/wiki/zh/images/d/d2/Date-set.png
  
我们在x4418,x6818开发板上开发了强大的安卓测试软件,基本上可以测试开发板的所有硬件功能,它在产品量产,程序开发上有很大的参考价值。在x3288开发平台上,我们将尽快提供。在APP界面点击安卓测试,即可进入测试界面,使用触摸屏左右滑动,或者用鼠标滑动可切换测试的硬件。
+
===拍照摄相 ===
  
=== 液晶屏测试 ===
+
  点击android应用中的相机,会进入图像预览模式。点击右下脚的拍照按钮即可拍照,如下图所示:
  
http://x.9tripod.com/wiki/zh/images/5/57/Lcd-test.png
+
http://x.9tripod.com/wiki/zh/images/b/bb/Shot-picture.png
  
  在液晶屏测试界面,点击中间的任意纯色位置,会有不同的颜色变化,我们 可以 观察LCD是否有丢色,坏点等
+
  右下脚 可以 切换拍照和录像功能
  
===  触摸屏测试 ===
+
===  使用有线以太网上网===
  
http://x.9tripod.com/wiki/zh/images/e/e6/Touch-test.png
+
将可以正常上网的网线连接到开发板的网口座上,网口座的指示灯会正常闪烁,正常上网界面如下:
  
在触摸屏测试界面,点击开始测试,即可在屏幕上任意手写,在批量生产时,我们通常通过画对角线测试触摸电路是否正常。
+
http://x.9tripod.com/wiki/zh/images/6/61/Wired-internet.png
  
===  发光二极管测试 ===
+
===  优酷 ===
  
http://x.9tripod.com/wiki/zh/images/6/66/Led-test.png
+
将优酷的APK软件安装到开发板,连接网线就可以看视频了。
  
点击图片上任意的灯,为红色时,对应开发板上的LED灯亮,为灰色时,对应LED灯灭。
+
http://x.9tripod.com/wiki/zh/images/1/17/Youku.png
  
=== 蜂鸣器测试 ===
+
=== 播放电视===
  
http://x.9tripod.com/wiki/zh/images/2/2b/Beep-test.png
+
安装龙龙直播,泰捷视频等网络播放器,插上网线即可播放。
  
按住开始测试键,蜂鸣器会鸣叫,松开开始测试键,蜂鸣器停止鸣叫。
+
http://x.9tripod.com/wiki/zh/images/3/30/Live-tv.png
  
===  背光测试 ===
+
===  使用遥控器操作开发板 ===
  
http://x.9tripod.com/wiki/zh/images/e/e5/Backlight-test.png
+
默认x3399开发板硬件支持红外遥控器,我们可以通过遥控器操作android界面,在泰捷视频等电视界面通过遥控器操作,开发板就完全变成了一个机顶盒。
 +
[[image:Picture 4|284x478px]]
 +
=== 4K视频播放 ===
  
划动中间 圆圈 背光亮度会随之发生变化
+
3399相对3288,支持更多种全高清视频 硬解码 可以流畅的播放这些格式的1080P视频文件
  
=== 按键测试 ===
+
  通常情况下,使用RockPlayer或者自带的播放器都可播放。如果遇到自带播放器无法播放,可选择RockPlayer。播放界面如下:
  
http://x.9tripod.com/wiki/zh/images/d/d0/Key-test.png
+
http://x.9tripod.com/wiki/zh/images/a/a1/RockPlayer.png
  
按下或抬起开发板上四个独立按键的任意一个,界面上将会提 对应的按键的按下和抬起动作。
+
=== HDMI显 ===
  
===  池测试 ===
+
HDMI显示支持直接将LCD上显示的视频还原到带有HDMI接口的 视机上,支持1080P高清视频,兼容720P,576P以及480P的视频。同时还将音频也一并传送到电视机上。
  
http://x.9tripod.com/wiki/zh/images/2/29/Battery-test.png
+
http://x.9tripod.com/wiki/zh/images/b/b4/HDMIshow.jpg
  
该界面反应了接在 发板上的电池电量信息。
+
=== 关机 ===
  
=== 数模转换测试 ===
+
x3399开发板使用了PMU进行电源管理。当外接上5V的电源适配器后,x3399开发板将会被自动点亮,进入系统后,长按开机键,会弹出一个选择对话框,点击关机按钮将会弹出确认关机的对话框,点击确认即可关机。
  
http://x.9tripod.com/wiki/zh/images/e/e4/Adc-test.png
+
http://x.9tripod.com/wiki/zh/images/e/e1/ON-OFF.png
  
监测四路ADC的电压。我们可以通过调节开发板上的精密可调电位器,观察上面对应通道的电压是否变化。
 
  
=== 重力传感器测试 ===
 
  
http://x.9tripod.com/wiki/zh/images/6/6f/Gsensor-test.png
+
=== 休眠唤醒 ===
  
  旋转 开发板 时,上面的X,Y,Z轴的值 随之发生变化
+
  进入android文件系统后,轻按开关机键,屏幕将会熄灭,然后进入深度休眠状态。可以通过串口查看进入休眠的打印信息。再次轻按开关机键, 开发板 唤醒
  
=== 音频 测试 ===
+
==Android 测试 程序==
  
http://x.9tripod.com/wiki/zh/images/c/cb/Audio-test.png
+
我们在x3288,x3399开发板上开发了强大的安卓测试软件,基本上可以测试开发板的所有硬件功能,它在产品量产,程序开发上有很大的参考价值。在APP界面点击安卓测试,即可进入测试界面,使用触摸屏左右滑动,或者用鼠标滑动可切换测试的硬件。
  
  点击开始 测试 ,会听到有清脆的声音出来。
+
=== 液晶屏 测试 ===
  
=== 摄像头测试 ===
+
http://x.9tripod.com/wiki/zh/images/5/57/Lcd-test.png
  
http://x.9tripod.com/wiki/zh/images/d/dd/Camera-test.png
+
在液晶屏测试界面,点击中间的任意纯色位置,会有不同的颜色变化,我们可以观察LCD是否有丢色,坏点等。
  
  装上摄相头,点击开始 测试 ,会看到摄像头抓到的预览界面显示出来。
+
=== 触摸屏 测试 ===
  
=== 无线网络测试 ===
+
http://x.9tripod.com/wiki/zh/images/e/e6/Touch-test.png
  
http://x.9tripod.com/wiki/zh/images/5/54/Wireless-test.png
+
在触摸屏测试界面,点击开始测试,即可在屏幕上任意手写,在批量生产时,我们通常通过画对角线测试触摸电路是否正常。
  
  使用WIFI连上无线网络后,无线网络 测试 界面会搜索到附近的网络并列出来。
+
=== 发光二极管 测试 ===
  
===  网络连接测试 ===
+
http://x.9tripod.com/wiki/zh/images/6/66/Led-test.png
  
http://x.9tripod.com/wiki/zh/images/5/54/Internet-test.png
+
点击图片上任意的灯,为红色时,对应开发板上的LED灯亮,为灰色时,对应LED灯灭。
  
当有线或无线网络正常连接时,网络连接 测试 界面可以浏览网页。
+
===蜂鸣器 测试 ===
  
=== 串口 测试 ===
+
http://x.9tripod.com/wiki/zh/images/2/2b/Beep-test.png
 +
 
 +
  按住开始 测试 键,蜂鸣器会鸣叫,松开开始测试键,蜂鸣器停止鸣叫。
  
http://x.9tripod.com/wiki/zh/images/a/a9/TtyAMA-test.png
+
=== 背光测试 ===
  
将需要测试的串口的TXD和RXD短路,再点击开始测试,界面上会提示对应串口会自发自收0123456789。如果不能自发自收,说明对应的串口硬件有问题。
+
http://x.9tripod.com/wiki/zh/images/e/e5/Backlight-test.png
  
=== 外部存储器测试 ===
+
  划动中间的圆圈,背光亮度会随之发生变化。
  
http://x.9tripod.com/wiki/zh/images/f/f3/Sdcard-test.png
+
=== 按键测试 ===
  
将TF卡插到开发板上,点击开始测试,界面上会显示TF卡的相关信息。
+
http://x.9tripod.com/wiki/zh/images/d/d0/Key-test.png
  
===  优盘测试 ===
+
按下或抬起开发板上四个独立按键的任意一个,界面上将会提示对应的按键的按下和抬起动作。
  
http://x.9tripod.com/wiki/zh/images/d/d0/Udisk-test.png
+
=== 电池测试 ===
  
将U盘插到开发板上,点击开始测试,界面上会显示U盘的相关信息。
+
http://x.9tripod.com/wiki/zh/images/2/29/Battery-test.png
  
 +
该界面反应了接在开发板上的电池电量信息。
  
 +
=== 数模转换测试 ===
  
== android内核驱动 ==
+
http://x.9tripod.com/wiki/zh/images/e/e4/Adc-test.png
=== G-sensor驱动 ===
 
  
  路径:<pre><nowiki>kernel/drivers/input/sensors/accel/mma8452.c
+
  监测四路ADC的电压。我们可以通过调节开发板上的精密可调电位器,观察上面对应通道的电压是否变化。
  
      hardware/rockchip/sensor/st
+
=== 重力传感器测试 ===
  
文件:mma8452.c及st目录</nowiki></pre>
+
http://x.9tripod.com/wiki/zh/images/6/6f/Gsensor-test.png
  
=== 电容触摸屏驱动 ===
+
  旋转开发板时,上面的X,Y,Z轴的值会随之发生变化。
<pre><nowiki>
 
路径:kernel/drivers/input/touchscreen/
 
源码:gslX680.c
 
</nowiki></pre>
 
  
===  液晶屏驱动 ===
+
===  音频测试 ===
<pre><nowiki>
 
路径:kernel/drivers/video/rockchip/lcdc/
 
源码:rk3288_lcdc.c
 
</nowiki></pre>
 
=== 按键驱动 ===
 
<pre><nowiki>
 
路径:kernel/drivers/input/keyboard
 
源码:rk_keys.c
 
</nowiki></pre>
 
=== WIFI/BT模块驱动 ===
 
<pre><nowiki>
 
路径:kernel/drivers/net/wireless/rockchip_wlan
 
源码:该目录下所有源码文件
 
</nowiki></pre>
 
=== 摄像头驱动 ===
 
<pre><nowiki>
 
路径:hardware/rockchip/camera/SiliconImage/isi/drv
 
源码:该目录下
 
</nowiki></pre>
 
=== VGA驱动 ===
 
<pre><nowiki>
 
路径:kernel/drivers/video/rockchip
 
</nowiki></pre>
 
=== HDMI驱动===
 
<pre><nowiki>
 
路径:kernel/drivers/video/rockchip/hdmi
 
</nowiki></pre>
 
=== proc文件系统 ===
 
==== 启动环境变量查询 ====
 
  
使用如下指令查询启动环境变量配置:
+
http://x.9tripod.com/wiki/zh/images/c/cb/Audio-test.png
  
  <pre><nowiki>cat  /proc/cmdline </nowiki></pre>
+
  点击开始测试,会听到有清脆的声音出来。
  
  会有如下类似打印信息:
+
=== 摄像头测试 ===
  
<pre><nowiki>vmalloc=496M console=ttyFIQ0 <nowiki>androidboot.se</nowiki>linux=permissive <nowiki>androidboot.ha</nowiki>rdware=rk30board <nowiki>androidboot.co</nowiki>nsole=ttyFIQ0 init=/init  mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(misc),0x00008000@0x00006000(resource),0x00008000@0x0000e000(kernel),0x00010000@0x00016000(boot),0x00010000@0x00026000(recovery),0x0001a000@0x00036000(backup),0x00040000@0x00050000(cache),0x00002000@0x00090000(kpanic),0x00300000@0x00092000(system),0x00008000@0x00392000(metadata),0x00200000@0x0039A000(userdata),0x00020000@0x0059A000(radical_update),-@0x005BA000(user) storagemedia=emmc uboot_logo=0x02000000@0x7dc00000:0x01000000 <nowiki>loader.ti</nowiki>mestamp=2016-02-19_17:53:13 <nowiki>androidboot.mo</nowiki>de=emmc
+
http://x.9tripod.com/wiki/zh/images/d/dd/Camera-test.png
</nowiki></pre>
 
==== CPU信息查询 ====
 
  
  使用如下指令查询CPU信息:
+
  装上摄相头,点击开始测试,会看到摄像头抓到的预览界面显示出来。
  
<pre><nowiki>cat /proc/cpuinfo </nowiki></pre>
+
=== 无线网络测试 ===
  
会有如下类似打印信息:
+
http://x.9tripod.com/wiki/zh/images/5/54/Wireless-test.png
<pre><nowiki>
 
shell@rk3288:/ # cat /proc/cpuinfo
 
  
Processor      : ARMv7 Processor rev 1 (v7l)
+
使用WIFI连上无线网络后,无线网络测试界面会搜索到附近的网络并列出来。
  
processor      : 0
+
===  网络连接测试 ===
  
model name      : ARMv7 Processor rev 1 (v7l)
+
http://x.9tripod.com/wiki/zh/images/5/54/Internet-test.png
  
BogoMIPS        : 48.00
+
当有线或无线网络正常连接时,网络连接测试界面可以浏览网页。
  
Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 evtstrm
+
=== 串口测试 ===
  
CPU implementer : 0x41
+
http://x.9tripod.com/wiki/zh/images/a/a9/TtyAMA-test.png
  
CPU architecture: 7
+
将需要测试的串口的TXD和RXD短路,再点击开始测试,界面上会提示对应串口会自发自收0123456789。如果不能自发自收,说明对应的串口硬件有问题。
  
CPU variant    : 0x0
+
=== 外部存储器测试 ===
  
CPU part        : 0xc0d
+
http://x.9tripod.com/wiki/zh/images/f/f3/Sdcard-test.png
  
CPU revision    : 1
+
将TF卡插到开发板上,点击开始测试,界面上会显示TF卡的相关信息。
  
 +
===  优盘测试 ===
  
 +
http://x.9tripod.com/wiki/zh/images/d/d0/Udisk-test.png
  
processor      : 1
+
将U盘插到开发板上,点击开始测试,界面上会显示U盘的相关信息。
  
model name      : ARMv7 Processor rev 1 (v7l)
+
==android内核驱动==
 +
===G-sensor驱动===
  
BogoMIPS        : 48.00
+
 路径:kernel/drivers/input/sensors/gyro/
 +
 文件:lsm330_gyro.c
  
Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 evtstrm
+
===光感传感器驱动===
  
CPU implementer : 0x41
+
 路径:kernel/drivers/input/sensors/lsensor
 +
 文件:cm3218.c
  
CPU architecture: 7
+
===电容触摸屏驱动===
  
CPU variant    : 0x0
+
    路径:kernel/drivers/input/touchscreen/
 +
    源码:gslx680.c
  
CPU part        : 0xc0d
+
===液晶屏驱动===
 +
<pre><nowiki>
 +
路径:kernel/drivers/video/rockchip/
  
CPU revision    : 1
+
kernel/drivers/video/rockchip/dp/
  
 +
      kernel/drivers/video/rockchip/transmitter
  
 +
      kernel/arch/arm64/boot/dts/rockchip
  
processor      : 2
+
源码:rockchip_dp.c,mipi_dsi.c,<nowiki>lcd-edp-lp079qx1.dt</nowiki>si,<nowiki>lcd-mipi-7inch-wy070ml.dt</nowiki>si
 +
</pre>
 +
===按键驱动===
  
model name      : ARMv7 Processor rev 1 (v7l)
+
 路径:kernel/drivers/input/keyboard
  
BogoMIPS        : 48.00
+
 源码:rk_keys.c
  
Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 evtstrm
+
===WIFI/BT模块驱动===
  
CPU implementer : 0x41
+
 路径:kernel/drivers/net/wireless/rockchip_wlan
  
CPU architecture: 7
+
 源码:该目录下所有源码文件
  
CPU variant    : 0x0
+
===摄像头驱动===
  
CPU part        : 0xc0d
+
 路径:hardware/rockchip/camera/SiliconImage/isi/drv
  
CPU revision    : 1
+
 源码:该目录下
  
 +
===HDMI驱动===
  
 +
 路径:kernel/drivers/video/rockchip/hdmi
  
processor      : 3
+
===proc文件系统===
 +
====启动环境变量查询====
  
model name      : ARMv7 Processor rev 1 (v7l)
+
使用如下指令查询启动环境变量配置:
  
BogoMIPS        : 48.00
+
cat  /proc/cmdline
  
Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 evtstrm
+
会有如下类似打印信息:
 +
<pre><nowiki>
 +
root@x3399:/ # cat /proc/cmdline                                             
  
CPU implementer : 0x41
+
earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 <nowiki>androidboot.ba</nowiki>seband=N/A <nowiki>androidboot.se</nowiki>linux=permissive <nowiki>androidboot.ha</nowiki>rdware=rk30board <nowiki>androidboot.co</nowiki>nsole=ttyFIQ0 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(trust),0x00002000@0x00006000(misc),0x00008000@0x00008000(resource),0x00008000@0x00010000(kernel),0x00010000@0x00018000(boot),0x00018000@0x00028000(recovery),0x00030000@0x00040000(backup),0x00040000@0x00070000(cache),0x00600000@0x000B0000(system),0x00008000@0x006B0000(metadata),0x00002000@0x006B8000(baseparamer),0x00000400@0x006BA000(frp),-@0x006BA400(userdata) storagemedia=emmc uboot_logo=0x02000000@0x7dc00000:0x01000000 <nowiki>loader.ti</nowiki>mestamp=2017-01-20_15:16:33 <nowiki>androidboot.mo</nowiki>de=emmc
  
CPU architecture: 7
+
root@x3399:/ #
 +
</pre>
 +
====CPU 信息查询====
  
CPU variant    : 0x0
+
使用如下指令查询CPU信息:
  
CPU part        : 0xc0d
+
cat  /proc/cpuinfo
  
CPU revision    : 1
+
会有如下类似打印信息:
 +
<pre><nowiki>
 +
root@x3399:/ # cat /pro
  
 +
proc/              property_contexts 
  
 +
root@x3399:/ # cat /proc/cpuinfo                                             
  
Hardware        : Rockchip RK3288 (Flattened Device Tree)
+
processor      : 0
  
Revision       : 0000
+
BogoMIPS       : 48.00
  
Serial          : e3d650362e219fe2 </nowiki></pre>
+
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
  
==== 内存信息查询 ====
+
CPU implementer : 0x41
  
使用如下指令查询内存使用信息:
+
CPU architecture: 8
  cat  /proc/meminfo
 
  
会有如下类似打印信息:
+
CPU variant    : 0x0
<pre><nowiki>
 
shell@rk3288:/ # cat  /proc/meminfo
 
  
MemTotal:       2062080 kB
+
CPU part        : 0xd03
  
MemFree:         1573408 kB
+
CPU revision    : 4
  
Buffers:          11140 kB
 
  
Cached:          206416 kB
 
  
SwapCached:           0 kB
+
processor      : 1
  
Active:           165880 kB
+
BogoMIPS        : 48.00
  
Inactive:         156828 kB
+
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
  
Active(anon):     105176 kB
+
CPU implementer : 0x41
  
Inactive(anon):     268 kB
+
CPU architecture: 8
  
Active(file):     60704 kB
+
CPU variant    : 0x0
  
Inactive(file):   156560 kB
+
CPU part        : 0xd03
  
Unevictable:           0 kB
+
CPU revision    : 4
  
Mlocked:              0 kB
 
  
HighTotal:      1540096 kB
 
  
HighFree:       1141180 kB
+
processor      : 2
  
LowTotal:         521984 kB
+
BogoMIPS        : 48.00
  
LowFree:         432228 kB
+
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
  
SwapTotal:             0 kB
+
CPU implementer : 0x41
  
SwapFree:             0 kB
+
CPU architecture: 8
  
Dirty:                 0 kB
+
CPU variant    : 0x0
  
Writeback:             0 kB
+
CPU part        : 0xd03
  
AnonPages:       105152 kB
+
CPU revision    : 4
  
Mapped:            58948 kB
 
  
Shmem:              308 kB
 
  
Slab:             24800 kB
+
processor      : 3
  
SReclaimable:     12056 kB
+
BogoMIPS        : 48.00
  
SUnreclaim:       12744 kB
+
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
  
KernelStack:       4160 kB
+
CPU implementer : 0x41
  
PageTables:         5844 kB
+
CPU architecture: 8
  
NFS_Unstable:         0 kB
+
CPU variant    : 0x0
  
Bounce:               0 kB
+
CPU part        : 0xd03
  
WritebackTmp:         0 kB
+
CPU revision    : 4
  
CommitLimit:    1031040 kB
 
  
Committed_AS:  19085052 kB
 
  
VmallocTotal:     499712 kB
+
processor      : 4
  
VmallocUsed:       45004 kB
+
BogoMIPS        : 48.00
  
VmallocChunk:     361448 kB </nowiki></pre>
+
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
  
==== 磁盘分区信息查询 ====
+
CPU implementer : 0x41
  
使用如下命令查询磁盘分区信息:
+
CPU architecture: 8
  
<pre><nowiki>
+
CPU variant    : 0x0
cat  /proc/partitions </nowiki></pre>
 
  
会有如下类似打印信息:
+
CPU part        : 0xd08
  
<pre><nowiki>
+
CPU revision    : 2
shell@rk3288:/ # cat  /proc/partitions
 
  
major minor  #blocks  name
 
  
  
 +
processor      : 5
  
254       0    520912 zram0
+
BogoMIPS       : 48.00
  
179       0  15267840 mmcblk0
+
Features       : fp asimd evtstrm aes pmull sha1 sha2 crc32
  
179        1      4096 mmcblk0p1
+
CPU implementer : 0x41
  
179        2      4096 mmcblk0p2
+
CPU architecture: 8
  
179        3      16384 mmcblk0p3
+
CPU variant    : 0x0
  
179       4      16384 mmcblk0p4
+
CPU part       : 0xd08
  
179        5      32768 mmcblk0p5
+
CPU revision    : 2
  
179        6      32768 mmcblk0p6
+
root@x3399:/ #
 +
</pre>
 +
====内存信息查询====
  
  179        7      53248 mmcblk0p7
+
  使用如下指令查询内存使用信息:
  
  179        8    131072 mmcblk0p8
+
  cat  /proc/meminfo
  
  179        9      4096 mmcblk0p9
+
  会有如下类似打印信息:
 +
<pre><nowiki>
 +
root@x3399:/ # cat /pr
  
179      10    1572864 mmcblk0p10
+
proc/              property_contexts 
  
179      11      16384 mmcblk0p11
+
root@x3399:/ # cat /proc/meminfo                                             
  
179      12    1048576 mmcblk0p12
+
MemTotal:        2041364 kB
  
179      13      65536 mmcblk0p13
+
MemFree:          845216 kB
  
179      14  12261376 mmcblk0p14          </nowiki></pre>         
+
MemAvailable:    1554116 kB
  
==== 内核版本查询 ====
+
Buffers:            1468 kB
  
使用如下命令查询内核版本:
+
Cached:          696428 kB
<pre><nowiki>
 
cat  /proc/version </nowiki></pre>
 
  
会有如下类似打印信息:
+
SwapCached:           0 kB
<pre><nowiki>
 
shell@rk3288:/ # cat  /proc/version
 
  
Linux version 3.10.0 (lqm@lqm) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #42 SMP PREEMPT Fri May 27 11:50:10 CST 2016 </nowiki></pre>
+
Active:           436404 kB
  
==== 网络设备查询 ====
+
Inactive:        554568 kB
  
使用如下命令查询网络设备信息:
+
Active(anon):    294576 kB
<pre><nowiki>
 
cat  /proc/net/dev </nowiki></pre>
 
  
会有如下类似打印信息:
+
Inactive(anon):   10908 kB
<pre><nowiki>
 
shell@rk3288:/ #  cat /proc/net/dev
 
  
Inter-|  Receive                                                |  Transmit
+
Active(file):    141828 kB
  
face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
+
Inactive(file):  543660 kB
  
  sit0:       0      0    0    0    0    0          0        0        0      0    0    0    0    0      0          0
+
Unevictable:           0 kB
  
    lo:       0      0    0    0    0    0          0        0        0      0    0    0    0    0      0          0
+
Mlocked:               0 kB
  
  eth0:       0      0    0    0    0    0          0        0      992      6    0    0    0    0      0          0 </nowiki></pre>
+
SwapTotal:       520908 kB
  
==== 查看内核启动信息 ====
+
SwapFree:        520908 kB
  
使用如下命令查询内核启动信息:
+
Dirty:                8 kB
<pre><nowiki>
 
cat  /proc/kmsg </nowiki></pre>
 
  
== android开发项目实战==
+
Writeback:            0 kB
  
'''说明:以下为实际项目实例,用户可参考x210开发文档练习,后续我们会陆续发布。在进行下面的任一个实验之前,请确保前面的环境已经搭建完毕。'''
+
AnonPages:        293128 kB
  
=== 实战1:创建hello x3288工程 ===
+
Mapped:          352516 kB
  
参考《x4418 android平台用户手册》。
+
Shmem:            12428 kB
  
=== 实战2:在x3288开发板上运行hello x3288测试程序 ===
+
Slab:              94504 kB
  
参考《x4418 android平台用户手册》。
+
SReclaimable:      65316 kB
  
=== 实战3:从零开始编写LED测试程序 ===
+
SUnreclaim:        29188 kB
  
参考《x4418 android平台用户手册》。
+
KernelStack:      11216 kB
  
=== 实战4:建立第一个APK应用程序,通过JNI+NDK调用底层驱动 ===
+
PageTables:        11696 kB
  
参考《x4418 android平台用户手册》。
+
NFS_Unstable:          0 kB
  
=== 实战5:修改VGA分辨率 ===
+
Bounce:                0 kB
  
参考《x4418 android平台用户手册》。
+
WritebackTmp:          0 kB
  
===实战6:如何修改<nowiki>init.rc</nowiki>文件 ===
+
CommitLimit:    1541588 kB
==== 永久修改 ====
 
  
+
Committed_AS:   25896976 kB
   system/core/rootdir
 
目录下找到<nowiki>init.rc</nowiki>文件,修改后执行
 
  ./mk –s,
 
将会生成新的<nowiki>system.im</nowiki>g文件,重新烧写<nowiki>system.im</nowiki>g即可更新<nowiki>init.rc</nowiki>。注意,在编译时,首先需要先将out目录下的
 
  <nowiki>init.rc</nowiki>
 
删除后再编译,否则可能不会生效。
 
  
==== 临时修改 ====
+
VmallocTotal:  258867136 kB
  
默认<nowiki>init.rc</nowiki>在<nowiki>ramdisk.im</nowiki>g中,<nowiki>ramdisk.im</nowiki>g又被打包到<nowiki>boot.im</nowiki>g中,因此,如果我们需要临时修改<nowiki>boot.im</nowiki>g,首先需要解压<nowiki>boot.im</nowiki>g,再手动修改我们需要修改的内容,再打包即可。为此,我们特别编写了解压和压缩的脚本文件。
+
VmallocUsed:          0 kB
  
在android根目录下,新建脚本文件<nowiki>ramdisk.sh</nowiki>,编辑内容如下:
+
VmallocChunk:          0 kB
<pre><nowiki>
 
<nowiki>#!/bin/bash</nowiki>
 
  
<nowiki># create: liuqiming</nowiki>
+
CmaTotal:         131072 kB
  
<nowiki># date:   2016-11-22</nowiki>
+
CmaFree:         128616 kB
  
<nowiki># mail:  liuqiming@9tripod.com</nowiki>
+
root@x3399:/ #
 +
</pre>
 +
====磁盘分区信息查询====
  
 +
使用如下命令查询磁盘分区信息:
  
 +
cat  /proc/partitions
  
echo "Modify <nowiki>boot.im</nowiki>g"
+
会有如下类似打印信息:
 +
<pre><nowiki>
 +
root@x3399:/ # cat /proc/partitions                                           
  
echo "<nowiki>1.un</nowiki>zip <nowiki>boot.im</nowiki>g"
+
major minor  #blocks  name
  
echo "2.Create <nowiki>boot.im</nowiki>g"
 
  
echo "<nowiki>3.de</nowiki>lete cache files"
 
  
echo "<nowiki>4.ex</nowiki>it"
+
  1        0      8192 ram0
  
 +
  1        1      8192 ram1
  
 +
  1        2      8192 ram2
  
<nowiki>#</nowiki>准备工作,环境变量的声明
+
  1        3      8192 ram3
  
SOURCE_DIR=$(cd `dirname $0` ; pwd)
+
  1        4      8192 ram4
  
TOOLS_DIR=${SOURCE_DIR}/tools
+
  1        5      8192 ram5
  
TARGET_DIR=${SOURCE_DIR}/out/release
+
  1        6      8192 ram6
  
OUT=${SOURCE_DIR}/out/target/product/rk3288
+
  1        7      8192 ram7
  
 +
  1        8      8192 ram8
  
 +
  1        9      8192 ram9
  
PATH=${SOURCE_DIR}/out/host/linux-x86/bin:$PATH;
+
  1      10      8192 ram10
  
 +
  1      11      8192 ram11
  
 +
  1      12      8192 ram12
  
<nowiki>#</nowiki>读取要执行的操作索引
+
  1      13      8192 ram13
  
read -p "Choose:" CHOOSE
+
  1      14      8192 ram14
  
 +
  1      15      8192 ram15
  
 +
254        0    520912 zram0
  
<nowiki>#</nowiki>解压<nowiki>boot.im</nowiki>g
+
179        0  15267840 mmcblk0
  
<nowiki>if [ "1" = ${CHOOSE} ];then</nowiki>
+
179        1       4096 mmcblk0p1
  
    echo "unzip <nowiki>boot.im</nowiki>g"
+
179        2      4096 mmcblk0p2
  
    cd $TARGET_DIR
+
179        3      4096 mmcblk0p3
  
<nowiki>#</nowiki>第一步:新建ramdisk目录
+
179        4      16384 mmcblk0p4
  
    <nowiki>[ -e "ramdisk" ] ||{ echo "mkdir ramdisk"; mkdir ramdisk;}</nowiki>
+
179        5      16384 mmcblk0p5
  
<nowiki>#</nowiki>第二步:判断是否存在<nowiki>boot.im</nowiki>g文件
+
179        6      32768 mmcblk0p6
  
    <nowiki>[ -f "$TARGET_DIR/boot.img" ] || { echo "error! can't find boot.img!"; rm -rf ramdisk;exit; }</nowiki>
+
179        7      49152 mmcblk0p7
  
    cd ramdisk
+
179        8      98304 mmcblk0p8
  
<nowiki>#</nowiki>第三步:拷贝<nowiki>boot.im</nowiki>g
+
179        9    131072 mmcblk0p9
  
        cp ..<nowiki>/boot.im</nowiki>g .
+
179      10    3145728 mmcblk0p10
  
<nowiki>#</nowiki>第四步:解压<nowiki>boot.im</nowiki>g文件,得到<nowiki>boot.img-ramdisk.gz</nowiki>文件
+
179      11      16384 mmcblk0p11
  
    <nowiki>[ -f "/bin/split_bootimg.pl" ] || { cp $TOOLS_DIR/split_bootimg.pl /bin; }</nowiki>
+
179      12      4096 mmcblk0p12
  
        <nowiki>split_bootimg.pl</nowiki> <nowiki>boot.im</nowiki>g
+
179      13        512 mmcblk0p13
  
    rm -f <nowiki>boot.im</nowiki>g
+
179      14  11736576 mmcblk0p14
  
<nowiki>#</nowiki>第五步:解压<nowiki>boot.img-ramdisk.gz</nowiki>文件
+
179      96      4096 mmcblk0rpmb
  
    gzip -dc <nowiki>boot.img-ramdisk.gz</nowiki> | cpio -i
+
179      64      4096 mmcblk0boot1
  
    echo "^_^ unzip <nowiki>boot.im</nowiki>g finished!"
+
179      32      4096 mmcblk0boot0
  
    rm -f <nowiki>boot.img-ramdisk.gz</nowiki>
+
root@x3399:/ #                   
 +
</pre>
 +
====内核版本查询====
  
    rm -f <nowiki>boot.img-second.gz</nowiki>
+
使用如下命令查询内核版本:
  
    rm -f <nowiki>boot.im</nowiki>g-kernel
+
cat  /proc/version
  
    exit
+
会有如下类似打印信息:
 +
<pre><nowiki>
 +
root@x3399:/ # cat /proc/version                                             
  
 +
Linux version 4.4.16 (jjj@jjj-desktop) (gcc version 4.9.x-google 20140827 (prerelease) (GCC) ) #164 SMP PREEMPT Mon Jan 16 18:49:48 CST 2017
  
 +
root@x3399:/ #
 +
</pre>
 +
====网络设备查询====
  
<nowiki>#</nowiki>打包<nowiki>boot.im</nowiki>g
+
使用如下命令查询网络设备信息:
  
<nowiki>elif [ "2" = ${CHOOSE} ];then</nowiki>
+
cat  /proc/net/dev
  
    echo "create <nowiki>boot.im</nowiki>g with kernel..."
+
会有如下类似打印信息:
 +
<pre><nowiki>
 +
root@x3399:/ # cat /proc/net/dev                                             
  
<nowiki>#</nowiki>第一步:判断是否存在ramdisk目录
+
Inter-|  Receive                                                |  Transmit
  
    <nowiki>[ -e "$TARGET_DIR/ramdisk" ] || { echo "can't find [ramdisk],please unzip boot.img first!"; exit; }</nowiki>
+
face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
  
<nowiki>#</nowiki>第二步:去除默认的<nowiki>root.im</nowiki>g文件
+
  sit0:      0      0    0    0    0    0          0        0        0      0    0    0    0    0      0          0
  
     rm -f $TARGET_DIR<nowiki>/boot.im</nowiki>g
+
     lo:    6032      80    0    0    0    0          0        0    6032      80    0    0    0    0      0          0
  
     cd $TARGET_DIR
+
wlan0:  503506    2298    0    0    0     0          0        53    23070    251    0    0    0    0      0          0
  
<nowiki>#</nowiki>第三步:将当前目录所有文件打包到<nowiki>boot.im</nowiki>g
+
  eth0:      0      0    0    0    0    0          0        0      508      6    0    0    0    0      0          0
  
    <nowiki>[ -d $TARGET_DIR/ramdisk ] && \</nowiki>
+
root@x3399:/ #
 +
</pre>
 +
====查看内核启动信息====
  
    mkbootfs $TARGET_DIR/ramdisk | minigzip &gt; $TARGET_DIR<nowiki>/ramdisk.im</nowiki>g && \
+
使用如下命令查询内核启动信息:
  
    truncate -s "%4" $OUT<nowiki>/ramdisk.im</nowiki>g && \
+
cat  /proc/kmsg
  
    mkbootimg --kernel ${OUT}/kernel --ramdisk ${OUT}<nowiki>/ramdisk.im</nowiki>g --second $TARGET_DIR<nowiki>/resource.im</nowiki>g --output $TARGET_DIR<nowiki>/boot.im</nowiki>g
+
==android开发项目实战==
  
    rm -rf ramdisk
+
说明:以下为实际项目实例,用户可参考x210开发文档练习,后续我们会陆续发布。在进行下面的任一个实验之前,请确保前面的环境已经搭建完毕。'''
  
    exit
+
===实战1:创建hello x3399工程===
  
 +
参考《x4418 android平台用户手册》。
  
 +
===实战2:在x3399开发板上运行hello x3399测试程序===
  
<nowiki>#</nowiki>清除残余文件
+
参考《x4418 android平台用户手册》。
  
<nowiki>elif [ "3" = ${CHOOSE} ];then</nowiki>
+
===实战3:从零开始编写LED测试程序===
  
    cd ${TARGET_DIR}
+
参考《x4418 android平台用户手册》。
  
    rm -rf ramdisk
+
===实战4:建立第一个APK应用程序,通过JNI+NDK调用底层驱动===
  
    echo "^_^ delete cache files ok!"
+
参考《x4418 android平台用户手册》。
  
 +
===实战5:修改VGA分辨率===
  
 +
参考《x4418 android平台用户手册》。
  
<nowiki>#</nowiki> 退出脚本
+
===实战6:如何修改<nowiki>init.rc</nowiki> 文件===
 +
====永久修改====
  
<nowiki>elif [ "4" = ${CHOOSE} ];then</nowiki>
+
在system/core/rootdir目录下找到<nowiki>init.rc</nowiki>文件,修改后执行./<nowiki>mk.sh</nowiki> –s,将会生成新的<nowiki>system.im</nowiki>g文件,重新烧写<nowiki>system.im</nowiki>g即可更新<nowiki>init.rc</nowiki>。注意,在编译时,首先需要先将out目录下的<nowiki>init.rc</nowiki> 删除后再编译,否则可能不会生效。
  
    exit
+
====临时修改====
  
fi
+
'''注意:以下步骤为基于x3288平台的修改步骤,在x3399平台下大同小异,读者可以先行尝试,后续我们将发布基于x3399平台的修改脚本。'''
  
    执行.<nowiki>/ramdisk.sh</nowiki>, 输入1 回车 将会自动 压out/release目录下的<nowiki>boot.im</nowiki>g, 并存放到out/release/ramdisk目录
+
默认<nowiki>init.rc</nowiki>在<nowiki>ramdisk.im</nowiki>g中,<nowiki>ramdisk.im</nowiki>g又被打包到<nowiki>boot.im</nowiki>g中 因此 如果我们需要临时修改<nowiki>boot.im</nowiki>g 首先需要 <nowiki>boot.im</nowiki>g, 再手动修改我们需要修改的内容,再打包即可。为此,我们特别编写了解压和压缩的脚本文件
  
    执行.<nowiki>/ramdisk.sh</nowiki>, 输入2,回车,将会自动将out/release/ramdisk目录 的文件打包成<nowiki>boot.im</nowiki>g。
+
在android根目录下,新建脚本文件<nowiki>ramdisk.sh</nowiki>, 编辑内容如
</nowiki></pre>
+
<pre><nowiki>
=== 实战7:如何修改开机动画 ===
+
<nowiki>#!/bin/bash</nowiki>
  
默认android启动时,会有android的英文字母不断高亮滚动显示,构成了一幅美丽的开机动画。其实这个开机动画是可以定制的,有兴趣的读者可以自行尝试。
+
<nowiki># create: </nowiki>liuqiming
  
=== 实战8:如何修改uboot中的开机LOGO ===
+
<nowiki># date:  2016-11-22</nowiki>
  
瑞芯微官方提供的uboot会读取kernel根目录下的<nowiki>logo.bm</nowiki>p和<nowiki>logo_kernel.bm</nowiki>p两个文件,分别用于做uboot和内核的开机LOGO,uboot和内核的LOGO显示全部是由uboot完成的。其中<nowiki>logo.bm</nowiki>p用作uboot的开机LOGO,<nowiki>logo_kernel.bm</nowiki>p用作内核的开机LOGO。值得注意的是,如果我们要将uboot和内核显示的LOGO设置得相同,并不能简单的复制,因为他们的图片格式是有区别的。<nowiki>logo.bm</nowiki>p支持8b的bmp格式图片,而<nowiki>logo_kernel.bm</nowiki>p只支持压缩后的8b的bmp格式图片,因此<nowiki>logo_kernel.bm</nowiki>p实际上要比<nowiki>logo.bm</nowiki>p的尺寸要小得多。而且在实际显示时,很明显的看到显示内核LOGO时,如果颜色比较丰富,就会失真。为了只显示一幅图片,我们直接将kernel目录下的<nowiki>logo_kernel.bm</nowiki>p删除即可。
+
<nowiki># mail:  liuqiming@9tripod.com</nowiki>
  
如果我们需要换uboot的开机LOGO,找一张分辨率不是太大的图片,转换成BMP格式,然后使用WINDOWS的图库编辑功能,转换成8b模式,保存并替换kernel目录下的<nowiki>logo.bm</nowiki>p即可。注意,如果LOGO的分辨率设置得过大,也可能导致无法显示。如果需要全屏开机LOGO,默认的uboot代码就不适用了,需要重新移植。
 
  
=== 实战9:如何修改内核中的LOGO ===
 
  
同上,找一张分辨率不是太大的图片,转换成BMP格式,在WINDOWS的图片编辑软件下转换成8b模式后,还需要借助于linux下强大的gimp工具,将图片压缩,内核LOGO才能显示出来。默认瑞芯微提供的这套方案,内核LOGO分辨率不够大,而且会明显失真,无法显示真彩图片,如果开发的工程师一定要显示完美的内核LOGO,建议使用linux下标准的开机LOGO方案。
+
echo "Modify <nowiki>boot.im</nowiki>g"
  
===实战11:使用git管理源代码 ===
+
echo "<nowiki>1.un</nowiki>zip <nowiki>boot.im</nowiki>g"
  
在我们最开始编码时,就应该养成使用git等工具管理源码的好习惯。这里简单介绍git的一些常用操作,具体更深入的学习,需要读者深入研究。
+
echo "2.Create <nowiki>boot.im</nowiki>g"
  
====git指令 ====
+
echo "<nowiki>3.de</nowiki>lete cache files"
  
1). 初始化仓库
+
echo "<nowiki>4.ex</nowiki>it"
  
  git init
 
  
2).查看版本库的状态
 
  
  git status
+
<nowiki>#</nowiki>准备工作,环境变量的声明
  
3).查看版本库的状态
+
SOURCE_DIR=$(cd `dirname $0` ; pwd)
  
  git log
+
TOOLS_DIR=${SOURCE_DIR}/tools
  
4).提交文件到仓库索引中
+
TARGET_DIR=${SOURCE_DIR}/out/release
  
  git add .                                ---提交当前目录所有修改
+
OUT=${SOURCE_DIR}/out/target/product/rk3288
  
  git add hello.c example.c                ---提交两个文件到仓库索引
 
  
5).提交内容到仓库:
 
  
  git commit -a -m "yx modify some files"
+
PATH=${SOURCE_DIR}/out/host/linux-x86/bin:$PATH;
  
6).比较当前的工作目录和仓库数据库中的差异
 
  
  git diff                                  ---建议使用windows 客户端
 
 
7).恢复到某个版本
 
  
  git reset --hard 8f097e                  ---恢复到某个历史版本
+
<nowiki>#</nowiki>读取要执行的操作索引
  
8).打标签
+
read -p "Choose:" CHOOSE
  
  git tag V1.01 8f097e -m "20100101发布"    ---给某个版本打上标签
 
  
  git tag -d V1.01                          ---删除标签
 
  
9).clone仓库
+
<nowiki>#</nowiki>解压<nowiki>boot.im</nowiki>g
  
  git clone git@172.18.0.198:boot          ---clone仓库到当前目录
+
<nowiki>if [ "1" = ${CHOOSE} ];then</nowiki>
  
  git clone git@172.18.0.198:boot temp        ---clone仓库到temp目录
+
    echo "unzip <nowiki>boot.im</nowiki>g"
  
10)服务器仓库同步到本地
+
    cd $TARGET_DIR
  
  git pull                                  ---将服务器最 内容同步到本地
+
<nowiki>#</nowiki>第一步: 建ramdisk目录
  
11).将本地仓库中的内容同步到服务器中
+
    <nowiki>[ -e "</nowiki>ramdisk" ] ||{ echo "mkdir ramdisk"; mkdir ramdisk;}
  
  git push                                  ---提交当前目录修改记录到服务器(服务器已 存在 此目录)
+
<nowiki>#</nowiki>第二步:判断是否 存在<nowiki>boot.im</nowiki>g文件
  
  git push git@172.18.0.198:FCR/K660/app master  --- 提交当前目录修改到服务器(服务器不存在此目录)
+
    <nowiki>[ -f "$TARGET_DIR/</nowiki><nowiki>boot.im</nowiki>g" ] || { echo "error! can't find <nowiki>boot.im</nowiki>g!"; rm -rf ramdisk;exit; }
  
12).查看项目版本更新细节
+
    cd ramdisk
  
  git show 18183e                            ---显示当前分支的最新版本的更新细节
+
<nowiki>#</nowiki>第三步:拷贝<nowiki>boot.im</nowiki>g
  
==== '''初始化git仓库''' ====
+
        cp ../<nowiki>boot.im</nowiki>g .
  
一次 压android源码后 进入android根目录,更新本地Git仓库:
+
<nowiki>#</nowiki> 四步: 压<nowiki>boot.im</nowiki>g文件 得到<nowiki>boot.img-ramdisk.gz</nowiki>文件
  
  cd android_gingerbread     #进入工作目录
+
     <nowiki>[ -f "/bin/split_bootimg.pl" ] || { cp $TOOLS_DIR/split_bootimg.pl /bin; }</nowiki>
  
  git init-db        #初始化工作目录
+
        <nowiki>split_bootimg.pl</nowiki> <nowiki>boot.im</nowiki>g
  
  git add .       #将工作目录的所有文件添加进来以便跟踪管理
+
    rm -f <nowiki>boot.im</nowiki>g
  
  git commit -a        #将所监视的 文件 提交到仓库
+
<nowiki>#</nowiki>第五步:解压<nowiki>boot.img-ramdisk.gz</nowiki> 文件
  
  sudo apt-get install qgit
+
    gzip -dc <nowiki>boot.img-ramdisk.gz</nowiki> | cpio -i
  
第一次建立仓库后,给出第一次提交:
+
    echo "^_^ unzip <nowiki>boot.im</nowiki>g finished!"
  
  git commit -m "初始化工程"
+
    rm -f <nowiki>boot.img-ramdisk.gz</nowiki>
  
否则,输入git log时,会提示如下错误:
+
    rm -f <nowiki>boot.img-second.gz</nowiki>
  
  fatal: bad default revision 'HEAD'
+
    rm -f <nowiki>boot.im</nowiki>g-kernel
  
==== 恢复到上一版本 ====
+
    exit
  
首先,使用git log命令查询修改记录:
 
  
<pre><nowiki>lqm@lqm:~/android_gingerbread$ git log
 
  
commit d5fd5223fd354c0a9c63057a7b8fe9a6870bdd7e
+
<nowiki>#</nowiki>打包<nowiki>boot.im</nowiki>g
  
Author: lqm &lt;lqm@lqm.(none)&gt;
+
elif<nowiki> [ "2" = ${CHOOSE} ];then</nowiki>
  
Date:  Wed Dec 14 10:34:34 2011 +0800 </nowiki></pre>
+
    echo "create <nowiki>boot.im</nowiki>g with kernel..."
  
删除不必要的处理器文件
+
<nowiki>#</nowiki>第一步:判断是否存在ramdisk目录
  
<pre><nowiki>commit 1af4b99d582bf33cc2f37a0529554426b30a168d
+
    <nowiki>[ -e "$TARGET_DIR/</nowiki>ramdisk<nowiki>" ] || { echo "can't find [</nowiki>ramdisk],please unzip <nowiki>boot.im</nowiki>g first!"; exit; }
  
Author: lqm &lt;lqm@lqm.(none)&gt;
+
<nowiki>#</nowiki>第二步:去除默认的<nowiki>root.im</nowiki>g文件
  
Date:  Wed Dec 14 10:14:39 2011 +0800 </nowiki></pre>
+
    rm -f $TARGET_DIR/<nowiki>boot.im</nowiki>g
  
初始化工程
+
    cd $TARGET_DIR
  lqm@lqm:~/android_gingerbread$
 
  
再使用git reset指令恢复 某个提交状态:
+
<nowiki>#</nowiki>第三步:将当前目录所有文件打包 <nowiki>boot.im</nowiki>g
  
  lqm@lqm:~/android_gingerbread$ git reset --hard 1af4b
+
    <nowiki>[ -d $TARGET_DIR/</nowiki>ramdisk ] && \
  
Checking out files: 100% (12517/12517), done.
+
    mkbootfs $TARGET_DIR/ramdisk | minigzip &gt; $TARGET_DIR/<nowiki>ramdisk.im</nowiki>g && \
  
HEAD is now at 1af4b99 初始化工程
+
    truncate -s "%4" $OUT/<nowiki>ramdisk.im</nowiki>g && \
  
lqm@lqm:~/android_gingerbread$
+
    mkbootimg --kernel ${OUT}/kernel --ramdisk ${OUT}/<nowiki>ramdisk.im</nowiki>g --second $TARGET_DIR/<nowiki>resource.im</nowiki>g --output $TARGET_DIR/<nowiki>boot.im</nowiki>g
  
==== 修改源码后,提交修改记录 ====
+
    rm -rf ramdisk
  
修改了某些文件,需要提交到服务器,具体操作如下:
+
    exit
  
第一步:使用git pull将服务器仓库提交到本地
 
  
http://x.9tripod.com/wiki/zh/images/c/c6/Git-pull.png
 
  
提示出错,有两种解决办法,第一种,先将drivers/mtd/nand/nand_base.c备份,比如:mv drivers/mtd/nand/nand_base.c drivers/mtd/nand<nowiki>/nand_base.c.ba</nowiki>k
+
<nowiki>#</nowiki> 清除残余文件
  
然后再执行git pull。第二种,执行git checkout –f,然后再执行git pull。
+
elif<nowiki> [ "3" = ${CHOOSE} ];then</nowiki>
  
正常的操作如下:
+
    cd ${TARGET_DIR}
http://x.9tripod.com/wiki/zh/images/9/9f/Git-pull-ok.png
 
  
上面的提示文件为服务器上已经更新的文件,执行git pull后,已经同步到本地了。
+
    rm -rf ramdisk
  
第二步:使用git status,查看修改的文件:
+
    echo "^_^ delete cache files ok!"
  
http://x.9tripod.com/wiki/zh/images/f/ff/Git-status.png
 
  
上图表示本地修改了build/mk和common/env_common.c两个文件。
 
  
 第三步:使用git add指令将指定的文件提交到仓库索引
+
<nowiki>#</nowiki>退出脚本
 +
 
 +
elif<nowiki> [ "4" = ${CHOOSE} ];then</nowiki>
 +
 
 +
    exit
 +
 
 +
fi
 +
 
 +
    执行./<nowiki>ramdisk.sh</nowiki>,输入1,回车,将会自动解压out/release目录下的<nowiki>boot.im</nowiki>g,并存放到out/release/ramdisk目录。
 +
 
 +
    执行./<nowiki>ramdisk.sh</nowiki>,输入2,回车,将会自动将out/release/ramdisk目录下的文件打包成<nowiki>boot.im</nowiki>g。
 +
</pre>
 +
===实战7:如何修改开机动画===
 +
 
 +
默认android启动时,会有android的英文字母不断高亮滚动显示,构成了一幅美丽的开机动画。其实这个开机动画是可以定制的,有兴趣的读者可以自行尝试。
 +
 
 +
===实战8:如何修改uboot中的开机LOGO===
 +
 
 +
在kernel根目录下,存放有<nowiki>logo.bm</nowiki>p和<nowiki>logo_kernel.bm</nowiki>p两张图片,在编译内核后,他们会被打包到<nowiki>resource.im</nowiki>g中。开机启动时,uboot会从中读取<nowiki>logo.bm</nowiki>p并显示出来。默认uboot只支持8b模式的图像读取,且必须为BMP格式。找一张分辨率不是太大的图片,转换成BMP格式,在WINDOWS的图片编辑软件下转换成8b模式后,替换kernel根目录下的<nowiki>logo.bm</nowiki>p即可。注意,如果分辨率过大,可能会无法显示。
 +
 
 +
===实战9:如何修改内核中的LOGO===
 +
 
 +
修改内核的LOGO和修改uboot的LOGO方法类似,所不同的是,我们需要修改<nowiki>logo_kernel.bm</nowiki>p文件,而不是<nowiki>logo.bm</nowiki>p文件。如果我们只需要显示一幅图片,删掉<nowiki>logo_kernel.bm</nowiki>p即可。
 +
 
 +
===实战11:使用git管理源代码===
 +
 
 +
    在我们最开始编码时,就应该养成使用git等工具管理源码的好习惯。这里简单介绍git的一些常用操作,具体更深入的学习,需要读者深入研究。
 +
 
 +
====git指令====
 +
 
 +
1).初始化仓库
 +
 
 +
git init
 +
 
 +
2).查看版本库的状态
 +
 
 +
git status
 +
 
 +
3).查看版本库的状态
 +
 
 +
git log
 +
 
 +
4).提交文件到仓库索引中
 +
 
 +
git add .                                ---提交当前目录所有修改
 +
 
 +
git add hello.c example.c                ---提交两个文件到仓库索引
 +
 
 +
5).提交内容到仓库:
 +
 
 +
git commit -a -m "yx modify some files"
 +
 
 +
6).比较当前的工作目录和仓库数据库中的差异
 +
 
 +
git diff                                  ---建议使用windows 客户端
 +
 
 +
7).恢复到某个版本
 +
 
 +
git reset --hard 8f097e                  ---恢复到某个历史版本
 +
 
 +
8).打标签
 +
 
 +
git tag V1.01 8f097e -m "20100101发布"    ---给某个版本打上标签
 +
 
 +
git tag -d V1.01                          ---删除标签
 +
 
 +
9).clone仓库
 +
 
 +
git clone git@172.18.0.198:boot          ---clone仓库到当前目录
 +
 
 +
git clone git@172.18.0.198:boot temp        ---clone仓库到temp目录
 +
 
 +
10)服务器仓库同步到本地
 +
 
 +
git pull                                  ---将服务器最新内容同步到本地
 +
 
 +
11).将本地仓库中的内容同步到服务器中
 +
 
 +
git push                                  ---提交当前目录修改记录到服务器(服务器已存在此目录)
 +
 
 +
git push git@172.18.0.198:FCR/K660/app master  ---提交当前目录修改到服务器(服务器不存在此目录)
 +
 
 +
12).查看项目版本更新细节
 +
 
 +
git show 18183e                            ---显示当前分支的最新版本的更新细节
 +
 
 +
====初始化git仓库====
 +
 
 +
在第一次解压android源码后,进入android根目录,更新本地Git仓库:
 +
<pre><nowiki>
 +
cd android_gingerbread    #进入工作目录
 +
 
 +
git init-db        #初始化工作目录
 +
 
 +
git add .        #将工作目录的所有文件添加进来以便跟踪管理
 +
 
 +
git commit -a        #将所监视的文件提交到仓库
 +
 
 +
sudo apt-get install qgit
 +
 
 +
第一次建立仓库后,给出第一次提交:
 +
 
 +
git commit -m "初始化工程"
 +
 
 +
否则,输入git log时,会提示如下错误:
 +
 
 +
fatal: bad default revision 'HEAD'
 +
</pre>
 +
====恢复到上一版本====
 +
 
 +
首先,使用git log命令查询修改记录:
 +
<pre><nowiki>
 +
lqm@lqm:~/android_gingerbread$ git log
 +
 
 +
commit d5fd5223fd354c0a9c63057a7b8fe9a6870bdd7e
 +
 
 +
Author: lqm &lt;lqm@lqm.(none)&gt;
 +
 
 +
Date:  Wed Dec 14 10:34:34 2011 +0800
 +
 
 +
 
 +
 
 +
    删除不必要的处理器文件
 +
 
 +
 
 +
 
 +
commit 1af4b99d582bf33cc2f37a0529554426b30a168d
 +
 
 +
Author: lqm &lt;lqm@lqm.(none)&gt;
 +
 
 +
Date:  Wed Dec 14 10:14:39 2011 +0800
 +
 
 +
 
 +
 
 +
    初始化工程
 +
 
 +
lqm@lqm:~/android_gingerbread$
 +
 
 +
    再使用git reset指令恢复到某个提交状态:
 +
 
 +
lqm@lqm:~/android_gingerbread$ git reset --hard 1af4b
 +
 
 +
Checking out files: 100% (12517/12517), done.
 +
 
 +
HEAD is now at 1af4b99 初始化工程
 +
 
 +
lqm@lqm:~/android_gingerbread$
 +
</pre>
 +
==== 修改源码后,提交修改记录 ====
 +
 
 +
修改了某些文件,需要提交到服务器,具体操作如下:
 +
 
 +
第一步:使用git pull将服务器仓库提交到本地
 +
 
 +
http://x.9tripod.com/wiki/zh/images/c/c6/Git-pull.png
 +
 
 +
提示出错,有两种解决办法,第一种,先将drivers/mtd/nand/nand_base.c备份,比如:mv drivers/mtd/nand/nand_base.c drivers/mtd/nand<nowiki>/nand_base.c.ba</nowiki>k
 +
 
 +
然后再执行git pull。第二种,执行git checkout –f,然后再执行git pull。
 +
 
 +
正常的操作如下:
 +
http://x.9tripod.com/wiki/zh/images/9/9f/Git-pull-ok.png
 +
 
 +
上面的提示文件为服务器上已经更新的文件,执行git pull后,已经同步到本地了。
 +
 
 +
第二步:使用git status,查看修改的文件:
 +
 
 +
http://x.9tripod.com/wiki/zh/images/f/ff/Git-status.png
 +
 
 +
上图表示本地修改了build/mk和common/env_common.c两个文件。
 +
 
 +
 第三步:使用git add指令将指定的文件提交到仓库索引
 +
 
 +
  git  add  .  #将当前目录所有修改的文件提交到仓库索引
 +
 
 +
或者使用下面的指令:
 +
 
 +
  git  add  build/mk  #将指定的文件提交到仓库索引,env_common.c并未提交。
 +
 
 +
第四步:使用
 +
  git commit #命令注释修改的内容到仓库
 +
http://x.9tripod.com/wiki/zh/images/2/29/Git-commit.png
 +
 
 +
第五步:使用
 +
  git push  #指令将修改的文件提交到服务器
 +
 
 +
http://x.9tripod.com/wiki/zh/images/f/fd/Git-push.png
 +
 
 +
'''        '''说明:如果源码保存在本机上,不用操作第一步和第五步。'''
 +
 
 +
===实战13:如何打包整个android bsp包===
 +
 
 +
这里推荐两种常用的打包方法。
 +
 
 +
====使用tar指令====
 +
 
 +
通常在编译完android源码包后,在android源码目录中会生成各种释放文件,它统统被汇集到源码根目录的out目录,打包时我们需要将它排除在外。另外,使用git管理工具管理源码时,在android源码根目录会生成.git目录,随着修改次数的增加,该目录内容会越来越多,打包时也需要将它排除在外。
 +
 
 +
由于在整个android源码中,存在其他的out目录,为了在使用tar指令打包时,防止将这些目录也排除在外,因此我们可以首先将源码根目录的out目录重命名,如out_x3399,再执行打包指令。打包完成后,再将out_x3399还原成out即可。
 +
 
 +
另外,如果编译了uboot,内核等,在源码包中会存在很多*.o,*.cmd的临时文件,这些也是我们所不需要的,在打包时也一并排除在外。
 +
 
 +
在android源码总目录的同级目录下执行如下指令完成打包:
 +
<pre><nowiki>
 +
mv    x3399_marshmallow\out    x3399_ marshmallow \out_x3399
 +
 
 +
tar  jcvf  x3399_ <nowiki>marshmallow.tar.bz</nowiki>2  x3399_ marshmallow –exclude=”.git” –exclude=”out_x3399” –exclude=”*.o” –exclude=”*.cmd”
  
  git  add  .  #将当前目录所有修改的文件提交到仓库索引
+
mv x3399_ marshmallow \out_x3399 x3399_ marshmallow\out
 
+
</pre>
或者使用下面的指令:
+
====使用git指令====
 
 
  git  add  build/mk  #将指定的文件提交到仓库索引,env_common.c并未提交。
 
 
 
第四步:使用
 
  git commit #命令注释修改的内容到仓库
 
http://x.9tripod.com/wiki/zh/images/2/29/Git-commit.png
 
 
 
第五步:使用
 
  git push  #指令将修改的文件提交到服务器
 
 
 
http://x.9tripod.com/wiki/zh/images/f/fd/Git-push.png
 
 
 
'''        '''说明:如果源码保存在本机上,不用操作第一步和第五步。'''
 
 
 
===实战13:如何打包整个android bsp包 ===
 
 
 
这里推荐两种常用的打包方法。
 
 
 
==== 使用tar指令 ====
 
 
 
  通常在编译完android源码包后,在android源码目录中会生成各种释放文件,它统统被汇集到源码根目录的out目录,打包时我们需要将它排除在外。另外,使用git管理工具管理源码时,在android源码根目录会生成.git目录,随着修改次数的增加,该目录内容会越来越多,打包时也需要将它排除在外。
 
 
 
由于在整个android源码中,存在其他的out目录,为了在使用tar指令打包时,防止将这些目录也排除在外,因此我们可以首先将源码根目录的out目录重命名,如out_x3288,再执行打包指令。打包完成后,再将out_x3288还原成out即可。
 
 
 
另外,如果编译了uboot,内核等,在源码包中会存在很多*.o,*.cmd的临时文件,这些也是我们所不需要的,在打包时也一并排除在外。
 
 
 
在android源码总目录的同级目录下执行如下指令完成打包:
 
 
 
  mv    x3288_kitkat\out     x3288_kitkat\out_x3288
 
 
 
  tar  jcvf  <nowiki>x3288_kitkat.tar.bz</nowiki>2  x3288_kitkat  –exclude=”.git” –exclude=”out_x3288” –exclude=”*.o” –exclude=”*.cmd”
 
 
 
  mv x3288_kitkat \out_x3288  x3288_kitkat\out
 
 
 
==== 使用git指令 ====
 
  
 
 使用git指令打包源码的前提是整个android源码包已经由git管理起来。在android源码包的根目录下(包含有uboot,kernel等目录的同一级目录)使用如下指令打包整个源码包:
 
 使用git指令打包源码的前提是整个android源码包已经由git管理起来。在android源码包的根目录下(包含有uboot,kernel等目录的同一级目录)使用如下指令打包整个源码包:
  
  git  archive  --format=tar  HEAD  &gt;  x3288<nowiki>_kitkat.ta</nowiki>r
+
git  archive  --format=tar  HEAD  &gt;  x3399_ marshmallow.tar;bzip2  x3399_ marshmallow.tar
  
  bzip2  x3288<nowiki>_kitkat.ta</nowiki>r
+
===实战15:android调试技巧之mm指令===
 
 
=== 实战15:android调试技巧之mm指令 ===
 
  
 
 在Android SDK源码工程下,如果编译整个工程可能需要两三个小时,即使二次编译也要二十多分钟。如果只想单独编译某个APK应用,那么可以这样做:
 
 在Android SDK源码工程下,如果编译整个工程可能需要两三个小时,即使二次编译也要二十多分钟。如果只想单独编译某个APK应用,那么可以这样做:
第2,753行: 第2,879行:
  
 
- printconfig: 当前build的配置情况
 
- printconfig: 当前build的配置情况
</nowiki></pre>
+
</pre>
 
 
 
2)mm命令
 
2)mm命令
  
第2,761行: 第2,886行:
 
3)mmm命令
 
3)mmm命令
  
 用于编译指定目录,如 :mmm Settings  表示编译Settings这个目录,之后会生成新的apk
+
 用于编译指定目录,如
  
 +
mmm Settings  表示编译Settings这个目录,之后会生成新的apk
  
=== 实战16:ubuntu下minicom的设置 ===
+
===实战16:ubuntu下minicom的设置===
  
 
 在做项目开发时,串口调试已经成为我们开发的必备工具。但是现在很多主板,或是笔记本上都已经省掉了串口,这对我们开发人员来说,无疑会带来些不必要的麻烦。为此,我们可能会通过PCI转串口,USB转串口等来开发。值得庆幸的是,在windows下使用的人多,我们很容易就能够安装PCI转串口驱动或是USB转串口驱动。如果我们使用纯的linux系统开发,安装驱动可能就没这么简单了。因此,这里分享一些我们实际开发中总结的一些经验,避免新人多走弯路。
 
 在做项目开发时,串口调试已经成为我们开发的必备工具。但是现在很多主板,或是笔记本上都已经省掉了串口,这对我们开发人员来说,无疑会带来些不必要的麻烦。为此,我们可能会通过PCI转串口,USB转串口等来开发。值得庆幸的是,在windows下使用的人多,我们很容易就能够安装PCI转串口驱动或是USB转串口驱动。如果我们使用纯的linux系统开发,安装驱动可能就没这么简单了。因此,这里分享一些我们实际开发中总结的一些经验,避免新人多走弯路。
  
====通用串口的minicom设置方法 ====
+
====通用串口的minicom设置方法====
  
 
 通常情况下,PC机上自带的串口,在windows和ubuntu下都自带驱动了,这时安装就比较简单了。
 
 通常情况下,PC机上自带的串口,在windows和ubuntu下都自带驱动了,这时安装就比较简单了。
第2,774行: 第2,900行:
 
 第一步:安装minicom
 
 第一步:安装minicom
  
  sudo apt-get install minicom
+
sudo apt-get install minicom
  
 
 第二步:设置minicom的端口
 
 第二步:设置minicom的端口
  
  sudo minicom -s
+
sudo minicom -s
  
 
 界面如下:
 
 界面如下:
第2,802行: 第2,928行:
 
             | Exit from Minicom        |
 
             | Exit from Minicom        |
  
             +--------------------------+ </nowiki></pre>
+
             +--------------------------+
  
 
 通过键盘的上下键盘选择到Serial port setup,回车
 
 通过键盘的上下键盘选择到Serial port setup,回车
  
   <pre><nowiki>+-----------------------------------------------------------------------+
+
   +-----------------------------------------------------------------------+
  
 
     | A -    Serial Device      : /dev/ttyWCH1                              |
 
     | A -    Serial Device      : /dev/ttyWCH1                              |
第2,826行: 第2,952行:
 
     |    Change which setting?                                              |
 
     |    Change which setting?                                              |
  
     +-----------------------------------------------------------------------+ </nowiki></pre>
+
     +-----------------------------------------------------------------------+
 
+
</pre>
 
 输入A,光标会停留到Serial Device的界面,将设备节点设置为/dev/ttyS0;输入F,关闭硬流控;再回车,退出当前设置,回到上一界面,选择Save setup as dfl,再选择Exit退出设置。到此,minicom安装完成。
 
 输入A,光标会停留到Serial Device的界面,将设备节点设置为/dev/ttyS0;输入F,关闭硬流控;再回车,退出当前设置,回到上一界面,选择Save setup as dfl,再选择Exit退出设置。到此,minicom安装完成。
  
==== USB转串口安装方法 ====
+
====USB转串口安装方法====
  
 
 这里以PL2303的驱动IC为例。默认ubuntu10.10系统已经自带有PL2303的驱动了。因此,这个安装比较简单。
 
 这里以PL2303的驱动IC为例。默认ubuntu10.10系统已经自带有PL2303的驱动了。因此,这个安装比较简单。
第2,838行: 第2,964行:
 
 第二步:执行如下指令检查是否有USB转串口的设备节点:
 
 第二步:执行如下指令检查是否有USB转串口的设备节点:
  
  lqm@lqm:~$ ls /dev/ttyU*
+
lqm@lqm:~$ ls /dev/ttyU*
  
  /dev/ttyUSB0
+
/dev/ttyUSB0
  
 
 第三步:重新设置minicom的设备节点,方法同上;
 
 第三步:重新设置minicom的设备节点,方法同上;
第2,846行: 第2,972行:
 
 第四步:打开minicom,测试USB转串口是否能正常使用。
 
 第四步:打开minicom,测试USB转串口是否能正常使用。
  
====PCI转串口安装方法 ====
+
====PCI转串口安装方法====
  
 
PCI转串口的芯片比较多,这里以CH35X为例,讲述在ubuntu下的安装方法。
 
PCI转串口的芯片比较多,这里以CH35X为例,讲述在ubuntu下的安装方法。
第2,874行: 第3,000行:
 
driver  Makefile  README  wchdump  wchmknod  wchterm
 
driver  Makefile  README  wchdump  wchmknod  wchterm
  
lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ </nowiki></pre>
+
lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$
 
+
</pre>
 
 第三步:在LINUX目录下执行如下命令安装:
 
 第三步:在LINUX目录下执行如下命令安装:
  
  sudo make clean
+
sudo make clean
  
  sudo make install
+
sudo make install
  
 
 实际操作时发现有如下错误提示:
 
 实际操作时发现有如下错误提示:
 
+
<pre><nowiki>
<pre><nowiki>cd wchmknod;\
+
cd wchmknod;\
  
 
     ./wchmknod
 
     ./wchmknod
第2,890行: 第3,016行:
 
/bin/sh: line 1: ./wchmknod: 权限不够
 
/bin/sh: line 1: ./wchmknod: 权限不够
  
<nowiki>make: *** [wchmknod_install] </nowiki>错误 126
+
<nowiki>make: *** [</nowiki>wchmknod_install]  错误 126
  
 
root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX#
 
root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX#
第2,912行: 第3,038行:
 
-r--r--r-- 1 lqm lqm  936 2010-09-20 04:48 wchmknod
 
-r--r--r-- 1 lqm lqm  936 2010-09-20 04:48 wchmknod
  
root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX/wchmknod# chmod 777 wchmknod </nowiki></pre>
+
root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX/wchmknod# chmod 777 wchmknod
 
 
 
  make install
 
即可安装成功。
 
  
 +
再make install,即可安装成功。
 +
</pre>
 
 第四步:执行如下指令加载驱动
 
 第四步:执行如下指令加载驱动
  
  modprobe wch
+
modprobe wch
  
 
 或者
 
 或者
  
  insmod driver<nowiki>/wch.ko</nowiki>
+
insmod driver/<nowiki>wch.ko</nowiki>
  
 
 第五步:使用如下指令查询驱动是否正常加载:
 
 第五步:使用如下指令查询驱动是否正常加载:
  
  lsmod | grep wch
+
lsmod | grep wch
  
 
 示例如下:
 
 示例如下:
 +
<pre><nowiki>
 +
lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ lsmod |grep wch
  
  lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ lsmod |grep wch
+
wch                    58933  1  
 
 
  wch                    58933  1  
 
 
 
  lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$
 
  
 +
lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$
 +
</pre>
 
 这里查找到了已经加载的驱动,表明驱动加载成功。
 
 这里查找到了已经加载的驱动,表明驱动加载成功。
  
 
 第六步:查看/dev下生成的相关节点:
 
 第六步:查看/dev下生成的相关节点:
 +
<pre><nowiki>
 +
lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ ls /dev/ttyWCH*
  
   lqm@lqm:~/ 下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ ls /dev/ttyWCH*
+
/dev/ttyWCH0  /dev/ttyWCH11  /dev/ttyWCH14  /dev/ttyWCH17  /dev/ttyWCH2   /dev/ttyWCH22  /dev/ttyWCH25  /dev/ttyWCH28  /dev/ttyWCH30  /dev/ttyWCH4  /dev/ttyWCH7
  
  /dev/ttyWCH0   /dev/ttyWCH11 /dev/ttyWCH14 /dev/ttyWCH17 /dev/ttyWCH2  /dev/ttyWCH22 /dev/ttyWCH25 /dev/ttyWCH28 /dev/ttyWCH30 /dev/ttyWCH4 /dev/ttyWCH7
+
/dev/ttyWCH1   /dev/ttyWCH12 /dev/ttyWCH15 /dev/ttyWCH18 /dev/ttyWCH20  /dev/ttyWCH23 /dev/ttyWCH26 /dev/ttyWCH29 /dev/ttyWCH31 /dev/ttyWCH5 /dev/ttyWCH8
  
  /dev/ttyWCH1  /dev/ttyWCH12  /dev/ttyWCH15  /dev/ttyWCH18  /dev/ttyWCH20  /dev/ttyWCH23  /dev/ttyWCH26  /dev/ttyWCH29  /dev/ttyWCH31  /dev/ttyWCH5  /dev/ttyWCH8
+
/dev/ttyWCH10  /dev/ttyWCH13  /dev/ttyWCH16  /dev/ttyWCH19  /dev/ttyWCH21  /dev/ttyWCH24  /dev/ttyWCH27  /dev/ttyWCH3  /dev/ttyWCH32  /dev/ttyWCH6  /dev/ttyWCH9
 
 
  /dev/ttyWCH10  /dev/ttyWCH13  /dev/ttyWCH16  /dev/ttyWCH19  /dev/ttyWCH21  /dev/ttyWCH24  /dev/ttyWCH27  /dev/ttyWCH3  /dev/ttyWCH32  /dev/ttyWCH6  /dev/ttyWCH9
 
 
 
  lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$
 
  
 +
lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$
 +
</pre>
 
 表明节点已经成功生成。
 
 表明节点已经成功生成。
  
 
 第七步:使用minicom设置节点
 
 第七步:使用minicom设置节点
  
  sudo minicom -s
+
sudo minicom -s
  
 
 选择Serial port setup,回车,再选择A,将设备节点设置为/dev/ttyWCH0或/dev/ttyWCH1
 
 选择Serial port setup,回车,再选择A,将设备节点设置为/dev/ttyWCH0或/dev/ttyWCH1
  
 
 保存退出,再开启minicom:
 
 保存退出,再开启minicom:
 
+
<pre><nowiki>
<pre><nowiki>Welcome to minicom 2.4
+
Welcome to minicom 2.4
  
  
第2,998行: 第3,122行:
 
                       HclkPsys = 133MHz, PclkPsys = 66MHz
 
                       HclkPsys = 133MHz, PclkPsys = 66MHz
  
                       SCLKA2M  = 200MHz </nowiki></pre>
+
                       SCLKA2M  = 200MHz
 
+
</pre>
 
 可见,PCI转串口驱动已经能够正常使用了。
 
 可见,PCI转串口驱动已经能够正常使用了。
  
第3,006行: 第3,130行:
 
 编辑/etc/rc.d<nowiki>/rc.lo</nowiki>cal文件,在最末尾添加如下语句:
 
 编辑/etc/rc.d<nowiki>/rc.lo</nowiki>cal文件,在最末尾添加如下语句:
  
  modprobe wch
+
modprobe wch
  
 
 第九步:重启ubuntu系统,再次尝试串口是否能正常使用。
 
 第九步:重启ubuntu系统,再次尝试串口是否能正常使用。

2017年3月3日 (五) 12:28的最新版本

目录

android开发平台的搭建

Android自从升级到4.0以来,相比之前的版本工程更加庞大,编译整套源码对PC机硬件要求很高,因此不建议采用虚拟机编译,强烈建议直接安装Linux操作系统,充分发挥PC机的性能。我们这里以ubuntu14.04 64位系统机器为例讲解,如果您是新手,建议与我们版本保持一致。

使用U盘安装ubuntu

使用U盘安装ubuntu系统简单快捷,强烈推荐使用此方法安装。

安装工具:

安装方法:

第一步:下载好ubuntu的ISO文件,和lili usb creater这个软件并安装。

第二步:插入usb,并打开usb creater 这个软件,根据软件提示设置,在步骤1中选择安装盘,找到识别出的U盘;在步骤2中找到下载的ubuntu映像文件;步骤3默认,步骤4中选中隐藏优盘上创建的文件,使用FAT32格式化U盘;最后在步骤5中点击闪电图标开始安装,直到提示优盘已安装完成为止。

USB-MemoryToUbuntu.png

第三步:重启电脑,开机时,看清屏幕下方的提示,进入BIOS设置菜单,选择U盘启动。一般台式机是按DEL键,笔记本有些是按F2,有些按F10进入。设置完成后保存退出。

第四步:再次重启系统,这时已经可以看到ubuntu的安装界面了,选择中文,继续;

第五步:选择 install (您也可以选择live mode 可以体验下系统),继续;

第六步:也选择中文,点击继续:再继续;

第七步:配置网络,可以安装时升级,也可以不升级,等安装完系统后再手动升级;

第八步:第一个选项是把以前的系统升级到ubuntu14.04,如果你只要单系统的可以选择第一项,第二项是升级到ubuntu14.04并把其他的资料删除掉,第三项是我们用的最多的,比较灵活,选something else,继续,在这里我分出了两个区给ubuntu,一个 /  和 一个 /home ,分区可以新建,可以对它格式化,具体根据需要选择;

第九步:这是设置区域,选择上海就行了;

第十步:选择键盘布局。选中国;

第十一步:选择用户名和密码,到此配置完毕,点击继续直接安装,喝一会儿咖啡,待安装完毕,重启之后,就可以看到美丽的ubuntu世界了。

设置XP为开机默认启动

ubuntu安装后每次开机都是默认进入ubuntu系统的,对于以windows为主的朋友,每次开机都要守在画面切换到XP启动,可见十分麻烦,通过下面,你可以设置让你的XP系统为第一启动。

修改/boot/grub/grub.cfg文件,可以看到最末尾有如下语句:

<nowiki>
 menuentry "Microsoft Windows XP Professional (on /dev/sda1)" {

    insmod part_msdos

    insmod ntfs

    set root='(hd0,msdos1)'

    search --no-floppy --fs-uuid --set 0E48A65048A6367D

    drivemap -s (hd0) ${root}

    chainloader +1

}

### END /etc/grub.d/30_os-prober ###
<nowiki>

仔细阅读该文件,发现有不少menuentry,这些正是对应了开机启动时的选择项,将上面语句放在第一个menuentry的前面,这样Windows XP就为默认的启动系统了。修改后的部分代码如下:

### BEGIN /etc/grub.d/05_debian_theme ###

set menu_color_normal=white/black

set menu_color_highlight=black/light-gray

### END /etc/grub.d/05_debian_theme ###



### BEGIN /etc/grub.d/30_os-prober ###

menuentry "Microsoft Windows XP Professional (on /dev/sda1)" {

    insmod part_msdos

    insmod ntfs

    set root='(hd0,msdos1)'

    search --no-floppy --fs-uuid --set 0E48A65048A6367D

    drivemap -s (hd0) ${root}

    chainloader +1

}

### END /etc/grub.d/30_os-prober ###



### BEGIN /etc/grub.d/10_linux ###

menuentry 'Ubuntu, with Linux 2.6.35-30-generic' --class ubuntu --class gnu-linux --class gnu --class os {

    recordfail

    insmod part_msdos

    insmod ext2

    set root='(hd0,msdos9)'

    search --no-floppy --fs-uuid --set 4833f619-6388-4dd3-acd7-6fa3eacb9a15

    linux    /boot/vmlinuz-2.6.35-30-generic root=UUID=4833f619-6388-4dd3-acd7-6fa3eacb9a15 ro   quiet splash

    initrd    /boot/initrd.img-2.6.35-30-generic

}

ubuntu下磁盘格式化

在做开发时,经常会把SD卡格式化为msdos,ext3等格式。这时,放在windows下将无法格式化,只能借助于Linux。

在Linux下使用fdisk和mkfs两个工具实现SD卡的格式化。首先,使用fdisk指令删除里面的所有分区,步骤为:

fdisk  /dev/sdb

d

w


每输一次d,输入一次分区的序号,直到删完,再按w写入,完成分区的删除。再按n,回车,回车,新建一个分区。之后再使用mkfs工具格式化为指定格式的盘,如格式化为fat32格式,则执行如下指令:

mkfs  –t  vfat  /dev/sdb

Ubuntu下通过SSH远程登录服务器

第一步:在服务器上安装ssh的服务器端。

 apt-get install openssh-server 

第二步:启动ssh-server。

 service ssh restart 

第三步:确认ssh-server已经正常工作。

 netstat -tlp 

有如下打印信息:

 tcp 0 0 *:ssh *:* LISTEN - 

看到上面这一行输出说明ssh-server已经在运行了。

第四步:在Ubuntu客户端通过ssh登录服务器。假设服务器的IP地址是172.18.0.198,登录的用户名是liuqiming。

 $ ssh -l liuqiming 172.18.0.198 

接下来会提示输入密码,然后就能成功登录到服务器上了。可以通过资源管理器浏览的方式登录服务器,点击位置->连接到服务器,服务器类型选择ssh,服务器一栏填入服务器的IP地址,点击连接即可。

ubuntu下使用邮箱

ubuntu下默认就有邮箱软件,如在使用时发现无法接受或发送邮件,在发送电子邮件->身份验证点击检查的类型,再选择没有划斜线的就好了。

ubuntu下安装五笔

使用如下指令:

 sudo apt-get install ibus-tables-wubi 

然后在系统->首选项->键盘输入法的输入法中选择WUBI,添加进去即可。

ubuntu下安装chrome浏览器

ubuntu10.10默认安装的火狐浏览器,如果用户喜欢该浏览器,可以跳过此节。google出了基于linux的浏览器chrome,用户可以使用如下方式安装。在网上下载安装源文件,http://tools.google.com/chrome/,也可以从光盘中获得,双击即可安装。

ubuntu下安装VIM

使用如下命令安装即可:

 sudo apt-get install vim 

ubuntu打开WINDOWS下记事本乱码问题

出现这种情况的原因是,gedit 使用一个编码匹配列表,只有在这个列表中的编码才会进行匹配,不在这个列表中的编码将显示为乱码。您要做的就是将 GB18030 加入这个匹配列表。

您可以遵循以下步骤,使您的gedit正确显示中文编码文件。

1. 终端中键入“gconf-editor”,并按下回车键,打开“配置编辑器”。

2. 展开左边的树节点,找到 /apps/gedit-2/preferences/encodings 节点并单击它。

3. 双击右边的 auto_detected 键,打开“编辑键”对话框。

4. 单击列表右边的“添加”按钮,输入“GB18030”,单击确定按钮。

5. 列表的最底部新增加了一个“GB18030”。单击右边的向上,将“GB18030”放在第二位;

6. 单击确定按钮,关闭配置编辑器。

现在,gedit 应该能够顺利打开 GB18030 编码的文本文件了。如果不放心,可以再增加GBK、GB2312编码。

ubuntu下安装源码比较工具

ubuntu下源码比较工具很多,比较常见的是meld工具,使用如下指令安装:

sudo apt-get install meld 

安装完成后,可以在应用程序->编程中打开。

ubuntu下安装串口终端minicom

使用如下指令安装:

sudo apt-get install minicom 

安装完成后,需要设置minicom。如果直接使用串口,通常设置为ttyS0,如果使用USB转串口,通常设置为ttyUSB0。输入如下指令:

 sudo minicom -s 

选择Serial port setup,选择A,输入正确的串口终端,选择E,输入115200 8N1,选择F和G,都设置为No,不使用流控,再回车,选择Save setup as dfl。注意,只有root用户才有权限保存参数。笔记本用户通常使用的USB转串口延长线,目前市面上大多都是pl2303方案,插上USB转串口延长线后,输入如下命令查询驱动是否正常加载:

lsmod |grep pl2303 

正常加载时会提示如下信息:

lqm@lqm:~$ lsmod |grep pl2303

pl2303                 11756  1 

usbserial              33100  3 pl2303 

再使用如下命令查询系统的一些信息:

 dmesg | tail -f 

正常情况下会出现如下提示:

lqm@lqm:~$ dmesg |tail -f

<nowiki>[  383.093851] ERROR! H2M_MAILBOX still hold by MCU. command fail

[  383.148849] ---> RTMPFreeTxRxRingMemory

[  383.148903] <--- RTMPFreeTxRxRingMemory

[  383.180580]  RTUSB disconnect successfully

[  387.762330] usb 2-4: USB disconnect, address 3

[  387.762566] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0

[  387.762601] pl2303 2-4:1.0: device disconnected

[  392.164589] usb 2-4: new full speed USB device using ohci_hcd and address 5

[  392.379898] pl2303 2-4:1.0: pl2303 converter detected

[  392.412998] usb 2-4: pl2303 converter now attached to ttyUSB0</nowiki>

表示串口设备名称为ttyUSB0。有时会提示如下错误:

lqm@lqm:~$ dmesg | tail -f

<nowiki>[  408.910351] 0x1300 = 00073200

[  413.945752] ===>rt_ioctl_giwscan. 8(8) BSS returned, data->length = 1177

[  419.047006] ===>rt_ioctl_giwscan. 7(7) BSS returned, data->length = 1067

[  419.047302] ==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x8b04] (Channel=1)

[  419.392535] wlan0: no IPv6 routers present

[  433.902136] ===>rt_ioctl_giwscan. 6(6) BSS returned, data->length = 960

[  473.902907] ===>rt_ioctl_giwscan. 8(8) BSS returned, data->length = 1271

[  533.900777] ===>rt_ioctl_giwscan. 8(8) BSS returned, data->length = 1200

[  613.904091] ===>rt_ioctl_giwscan. 9(9) BSS returned, data->length = 1435

[  713.904199] ===>rt_ioctl_giwscan. 8(8) BSS returned, data->length = 1263</nowiki>

一般情况下重插拨一次USB转串口线即可。

ubuntu卡死的解决办法

ubuntu系统有时也会像windows系统一样,卡死不动。这时除了复位系统,我们也可以尝试如下方法:

一:按住ctrl+alt+F2进入tty2;

二:查看进程:

ps -e 

三:kill掉相关进程

四:再按住alt+F7返回图形界面

Android开发工具

代码编辑工具

在windows下开发时,很多人都习惯使用source insight,但是source insight并没有linux版本,而且自从3.5版本之后,就再也没有更新了。

在linux下,同样也有很多优秀的代码编辑软件,如Emacs、KVIM、Arachnophilia、Bluefish、Komodo Edit、NEdit、Gedit、Kate、Quanta Plus等等。这里介绍两款比较优秀的代码编辑软件,slickedit和eclipse。

slickedit

安装步骤如下:

第一步:解压se_14000202_linux_full.tar.gz:

tar -zxvf <nowiki>se_14000202_linux_full.tar.gz</nowiki>

第二步:进入解压的目录,运行安装程序vsinst。这里要加上sudo,增加读写访问权限:

 sudo ./vsinst 

第三步:会弹出安装信息,按住回车不放,直到弹出如下提示:

<nowiki>Do you agree to the above license terms?[yes or no] </nowiki>
输入
 yes 

第四步:弹出如下信息:

<nowiki>Install directory [/opt/slickedit]: </nowiki>

这里提示输入安装路径,默认按回车即可

第五步:提示如下信息:

<nowiki>Directory /opt/slickedit/ does not exist. Create [Y]? </nowiki>

输入Y,回车, 程序开始安装。

第六步:安装过程中会弹出一个SlickEdit License Manager的对话框,点退出

再弹出一个对话框,点
OK 

第七步:这时会提示:

INSTALLATION SUCCESSFULLY COMPLETED

1.Type "/opt/slickedit/bin/vs" to run SlickEdit.

2.You may want to add "/opt/slickedit/bin/" to your users' PATH.

第八步:退回原存放安装文件的目录,解压破解文件

<nowiki>slickedit2009-14.0.2.2-linux-cracked.tar.gz:

tar -xvf slickedit2009-14.0.2.2-linux-cracked.tar.gz</nowiki>

将解压出的破解文件VS拷备到/opt/slickedit/bin目录下:

sudo cp vs /opt/slickedit/bin 

第九步:在/opt/slickedit/bin目录下,执行./vs命令打开slickedit软件,看看是否大功告成?以下是执行命令:

cd /

./opt/slickedit/bin/vs 

第十步:启动方式

可以在 [终端] 中 ./vs 启动 ,也可以自己创建一个起动器。

cd /opt/slickedit/bitmaps 

找到图标文件,slickedit 2010下我选择了vse_profile_256.bmp

$ sudo cp <nowiki>vse_profile_256.bmp /usr/share/icons </nowiki>

一般把图标都放在/usr/share/icons下

$ cd /usr/share/applications 

$ sudo gedit <nowiki>slickedit.desktop </nowiki>

输入如下语句:

<nowiki>[Desktop Entry]

Name=Slickedit

Comment=Slickedit

Exec=/opt/slickedit/bin/vs

Icon=/usr/share/icons/vse_profile_256.bmp

Terminal=false

Type=Application

Categories=Development;

StartupNotify=true </nowiki>

这时,在应用程序->编程中,就能找到slickedit的图标了。

第十一步:如果你实在是用烦了这个软件,那就干掉他吧!进入/opt目录,输入如下指令:

rm -rf slickedit 

从此让他滚得越远越好!

附:slickedit行号显示:

tool->options->Languages->Application Languages->C/C++->View->Line numbers 

eclipse

在ubuntu下安装eclipse

第一步:进入如下网站下载eclipse:

http://www.eclipse.org/

选择Eclipse IDE for Java Developers,Linux 32 Bit或Linux 64 Bit根据自己的机器而定;

第二步:将下载的文件解压到用户目录:

cp <nowiki>eclipse-java-indigo-SR1-linux-gtk.tar.gz ~/

cd ~

tar xf eclipse-java-indigo-SR1-linux-gtk.tar.gz</nowiki>

第三步:创建启动图标:

sudo cp <nowiki>icon.xpm /usr/share/icons/eclipse.xpm

sudo gedit /usr/share/applications/eclipse.desktop </nowiki>

输入如下语句:

<nowiki>[Desktop Entry]

Name=eclipse

Comment=eclipse

Exec=/home/lqm/eclipse/eclipse

Icon=/usr/share/icons/eclipse.xpm

Terminal=false

Type=Application

Categories=Development;

StartupNotify=true  </nowiki>

这时,在应用程序->编程中,就能找到eclipse图标了,点击即可启动eclipse.

第四步:安装CDT插件

安装eclipse后,还不能建立C/C++工程,需安装插件。进入官网下载:

http://www.eclipse.org/downloads/download.php?file=/tools/cdt

解压下载的文件cdt-master-8.0.1.zip,将解压出来的plugins和features目录拷贝到eclipse安装目录,直接合并即可完成安装。

使用eclipse新建一个工程

第一步:打开eclipse,首次打开时,会提示选择工作路径,建立自己的路径,确定即可;

第二步:新建一个工程。点击File->New->Project,选择C/C++->C Project,点击Next,在Project name一栏输入工程名称,如xboot,在Project name下面有一个Use default location的选择框,去掉前面的勾,点击Browse,指向我们需要修改的文件的目录。 在Project type中选择一个工程类型,如Shared Library->Empty Project,在Toolchains中选择Cross GCC,再点击Next,在Select Configurations中选择配置类型,如Release,点击Finish完成。 第三步:这时在Project Explorer中有xboot的目录,右击xboot,点击Import,找到General->File System,双击,弹出Import对话框,在From directory中找到需要加载的文件的目录,点击Select All,将把加载的目录的所有类型文件添加到工程中,点击Finish按钮,提示是否覆盖.cproject,点击Yes To All,这时我们需要编辑的文件就已经全加载到工程中了。

adb工具

安装adb工具

网上下载最新的SDK,下载地址为:

http://developer.android.com/sdk/index.html

对于WINDOWS系统,需下载installer_r12-windows.exe,如下图所示:

Android-sdk-Window.png

如果PC机上没有安装JDK,会提示需要先安装,需从java官网下载,如jdk-6u25-windows-i586.exe,不同的版本名称不一样。安装完JDK后,再安装SDK,默认会装在C盘,建议安装在D盘,这时adb工具在下面的路径:

 D:\Program Files\Android\android-sdk\platform-tools 

修改系统环境变量,找到Path环境变量,在前面添加

 D:\Program Files\Android\android-sdk\platform-tools;

注意一定要加一个分号隔开。然后在WINDOWS的CMD命令行中输入adb,将会弹出adb的一些参数。如果出现”adb不是内部或外部命令的错误”,表示系统没有找到adb,将上面目录中的adb.exe和AdbWinApi.dll拷贝到C:\WINDOWS\system32中即可。

查看设备的连接状态

开发板上电,进入 setting,选择“ developer options”,勾选“ USB debugging”进入WINDOWS下的CMD命令行,输入如下命令验证开发板是否连接:

adb  devices 

显示下面内容表示成功连接:

Adb-device.png

进入adb shell

使用如下命令进入开发板终端:

adb  shell 

如下图所示:

Adb-shell.png

输入exit退回DOS操作界面。注意,有时候,执行adb devices命令时,会提示error: more than one device and emulator,很有可能是播放了USB设备造成的。这时已经无法再通过adb传输数据,解决的办法很简单,如果是使用windows,直接在进程中干掉adb.exe,再启动adb即可。

串口工具secureCRT

安装secureCRT工具,在计算机设备管理器中找到COM口号,点击“快速连接”,如下图:

SecureCRT.png

协议选择serial(我的设备是COM2),其他选项按照下图所示选择,右侧三个流控制选项不能勾选!

SecureCRT-set.png

接下来用USB转串口线接到开发板的调试串口与PC即可看到调试串口打印的log信息。

939 × 641px

安装android源码包

安装android源码依赖包

说明:本文档所有开发全部基于ubuntu14.04 64位系统,后续不再声明。

使用如下命令安装所需的软件包:

sudo apt-get update
sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libwxgtk3.0-dev build-essential zip curl zlib1g-dev gcc-multilib g++-multilib genromfs libc6-dev-i386 libncurses5-dev x11proto-core-dev libx11-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip lsb-core lib32z1-dev lib32ncurses5-dev texinfo mercurial subversion whois

使用如下命令安装JDK1.7:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-set-default

执行java -version指令查看当前java安装版本:

<nowiki>
work@works:~$ java -version

java version "1.7.0_80"

Java(TM) SE Runtime Environment (build 1.7.0_80-b15)

Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

到此,jdk1.7成功安装。

如果安装的版本不是1.7,会出现如下编译错误:

<nowiki>============================================

Checking build tools versions...

/bin/bash: java: command not found

/bin/bash: javac: command not found

************************************************************

You are attempting to build with the incorrect version

of java.

 

Your version is: .

The required version is: "1.7.x"

 

Please follow the machine setup instructions at

    https://source.android.com/source/initializing.html

************************************************************

build/core/main.mk:167: *** stop.  Stop.



#### make failed to build some targets (3 seconds) ####

如果没有安装gperf,会出现如下编译错误:

/bin/bash: gperf: command not found

external/chromium_org/third_party/WebKit/Source/platform<nowiki>/make_platform_generated.target.linux-arm.mk:48: recipe for target 'out/target/product/x6818/obj/GYP/shared_intermediates/blink/platform/ColorData.cpp' failed

make: *** [out/target/product/x6818/obj/GYP/shared_intermediates/blink/platform/ColorData.cpp] Error 127

如果没有安装libxml2-utils,会出现如下编译错误:

/bin/bash: xmllint: command not found

build/core/Makefile:34: recipe for target 'out/target/product/x6818/system/etc<nowiki>/media_codecs_google_audio.xml' failed

make: *** [out/target/product/x6818/system/etc/media_codecs_google_audio.xml] Error 127

make: *** Waiting for unfinished jobs....

/bin/bash: xmllint: command not found

build/core/Makefile:34: recipe for target 'out/target/product/x6818/system/etc/media_codecs_google_video.xml' failed

make: *** [out/target/product/x6818/system/etc/media_codecs_google_video.xml] Error 127

Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar

编译时会弹出如下错误:

<nowiki>******************************

You have tried to change the API from what has been previously approved.



To make these errors go away, you have two choices:

   1) You can add "@hide" javadoc comments to the methods, etc. listed in the

      errors above.



   2) You can update current.txt by executing the following command:

         make update-api



      To submit the revised current.txt to the main Android repository,

      you will need approval.

******************************

按照上面的提示,执行make update-api指令,执行完成。

安装交叉编译工具链

我们已经将交叉编译工具链集成到源码包中,无需再手动安装。交叉编译工具链路径:

Sourcetree/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8

安装64位系统必要的一些补丁包

apt-get  install  lsb-core  libc6-dev-i386  g++-multilib  lib32z1-dev  lib32ncurses5-dev

安装android源码包

通过百度网盘获取源码包

光盘中存放着android6.0的源码包,其名称为x3399_marshmallow.tar.7z.001和x3399_marshmallow.tar.7z.002。首先在WINDOWS下通过7z解压缩工具将两个文件提取成单一文件x3399_marshmallow.tar.bz2,再将解压出来的文件拷贝到自己的用户名目录,注意不要放在文件系统的根目录,否则会出现管理权限问题。

示例方法:在用户权限下执行如下命令:

cp  yourcdromdir/source/ '''x3399_marshmallow'''.<nowiki>tar.bz2  ~/

cd 

tar  xvf  x3399_marshmallow.tar.bz2

cd  x3399_marshmallow

git  checkout  .

这时,整个android文件系统全部都放在了当前解压的目录中。至此,android源码包安装完成。

说明:源码包名称可能会因发布日期等有所不同,具体以网盘中实际名称为准。默认源码包中已经包含有完整的GIT调试记录。

通过远程仓库克隆源码包

直接clone远程仓库, 速度较慢,具体依据网络速度而定。使用如下指令克隆源码包:

git clone https://gitlab.com/9tripod/x3399_marshmallow.git

同步远程仓库代码

使用如下指令添加gitlab.com远程仓库:

git remote add gitlab https://gitlab.com/9tripod/x3399_marshmallow.git

使用如下指令同步远程仓库代码:

git pull gitlab master

android脚本分析配置

源码编译脚本分析

说明:各种版本的源码编译脚本大同小异,原理完全相同,具体脚本以相关源码包中的为准,这里仅用来分析其实现机制。

编译脚本mk内容及注释如下:

<nowiki>#!/bin/bash

#

# Description    : Android Build Script.

# Authors        : jianjun jiang - jerryjianjun@gmail.com

# Version        : 2.00

# Notes            : None

#



#

# JAVA PATH

#

export PATH=/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin:$PATH



#

# Some Directories

#

BS_DIR_TOP=$(cd `dirname $0` ; pwd)

BS_DIR_TOOLS=${BS_DIR_TOP}/tools

BS_DIR_RELEASE=${BS_DIR_TOP}/out/release

BS_DIR_TARGET=${BS_DIR_TOP}/out/target/product/x3399/

BS_DIR_UBOOT=${BS_DIR_TOP}/u-boot

BS_DIR_KERNEL=${BS_DIR_TOP}/kernel

BS_DIR_BUILDROOT=${BS_DIR_TOP}/buildroot



#

# Target Config

#

BS_CONFIG_BOOTLOADER_UBOOT=x3399_defconfig

BS_CONFIG_KERNEL=x3399_defconfig

BS_CONFIG_KERNEL_DTB=x3399-development-board.img

BS_CONFIG_FILESYSTEM=PRODUCT-x3399-userdebug

BS_CONFIT_BUILDROOT=x3399_defconfig



setup_environment()

{

    LANG=C

    PATH=${BS_DIR_TOP}/out/host/linux-x86/bin:$PATH;

    cd ${BS_DIR_TOP};

    mkdir -p ${BS_DIR_RELEASE} || return 1

}



build_bootloader_uboot()

{

    # Compiler uboot

    cd ${BS_DIR_UBOOT} || return 1

    make ARCHV=aarch64 distclean || return 1

    make ARCHV=aarch64 ${BS_CONFIG_BOOTLOADER_UBOOT} || return 1

    make ARCHV=aarch64 -j${threads} || return 1



    # Copy bootloader to release directory

    cp -v ${BS_DIR_UBOOT}/trust.img ${BS_DIR_RELEASE}

    cp -v ${BS_DIR_UBOOT}/*MiniLoaderAll_*.bin ${BS_DIR_RELEASE}

    cp -v ${BS_DIR_UBOOT}/uboot.img ${BS_DIR_RELEASE}



    return 0

}



build_kernel()

{

    # Compiler kernel

    cd ${BS_DIR_KERNEL} || return 1

    make ARCH=arm64 ${BS_CONFIG_KERNEL} || return 1

    make -j${threads} ARCH=arm64 Image || return 1

    make -j${threads} ARCH=arm64 ${BS_CONFIG_KERNEL_DTB} || return 1



    # Copy kernel to release directory

    cp -v ${BS_DIR_KERNEL}/resource.img ${BS_DIR_RELEASE}

    cp -v ${BS_DIR_KERNEL}/kernel.img ${BS_DIR_RELEASE}



    return 0

}



build_system()

{

    cd ${BS_DIR_TOP} || return 1

    source build/envsetup.sh || return 1

    make -j${threads} ${BS_CONFIG_FILESYSTEM} || return 1



    echo "create boot.img..."

    [ -d ${BS_DIR_TARGET}/root ] && \

    mkbootfs ${BS_DIR_TARGET}/root | minigzip > ${BS_DIR_TARGET}/ramdisk.img && \

    truncate -s "%4" ${BS_DIR_TARGET}/ramdisk.img && \

    ${BS_DIR_TOOLS}/mkkrnlimg ${BS_DIR_TARGET}/ramdisk.img ${BS_DIR_RELEASE}/boot.img >/dev/null



    echo "create recovery.img..."

    [ -d ${BS_DIR_TARGET}/recovery/root ] && \

    mkbootfs ${BS_DIR_TARGET}/recovery/root | minigzip > ${BS_DIR_TARGET}/ramdisk-recovery.img && \

    truncate -s "%4" ${BS_DIR_TARGET}/ramdisk-recovery.img && \

    mkbootimg --kernel ${BS_DIR_TARGET}/kernel --ramdisk ${BS_DIR_TARGET}/ramdisk-recovery.img --output ${BS_DIR_TARGET}/recovery.img && \

    cp -av ${BS_DIR_TARGET}/recovery.img ${BS_DIR_RELEASE}



    system_size=`ls -l ${BS_DIR_TARGET}/system.img | awk '{print $5;}'`

    [ ${system_size} -gt "0" ] || { echo "Please build android first!!!" && exit 1; }

    MAKE_EXT4FS_ARGS=" -L system -S ${BS_DIR_TARGET}/root/file_contexts -a system ${BS_DIR_RELEASE}/system.img ${BS_DIR_TARGET}/system"

    ok=0

    while [ "$ok" = "0" ]; do

        make_ext4fs -l ${system_size} ${MAKE_EXT4FS_ARGS} >/dev/null 2>&1 &&

        tune2fs -c -1 -i 0 ${BS_DIR_RELEASE}/system.img >/dev/null 2>&1 &&

        ok=1 || system_size=$((${system_size} + 5242880))

    done

    e2fsck -fyD ${BS_DIR_RELEASE}/system.img >/dev/null 2>&1 || true



    return 0

}



build_buildroot()

{

    # Compiler buildroot

    cd ${BS_DIR_BUILDROOT} || return 1

    make ${BS_CONFIT_BUILDROOT} || return 1

    make -j${threads} || return 1



    # Copy image to release directory

    cp -v ${BS_DIR_BUILDROOT}/output/images/rootfs.ext2 ${BS_DIR_RELEASE}/linux-rootfs.img

}



build_update()

{

    cd ${BS_DIR_RELEASE} || return 1

    

    # Make update-android.img

    echo "create update-android.img..."

    cp -av ${BS_DIR_TOOLS}/package-file ${BS_DIR_RELEASE}/package-file || return 1;

    ${BS_DIR_TOOLS}/afptool -pack ${BS_DIR_RELEASE}/ ${BS_DIR_RELEASE}/temp.img || return 1;

    ${BS_DIR_TOOLS}/rkImageMaker -RK330C ${BS_DIR_RELEASE}/RK3399MiniLoaderAll_V1.05.bin ${BS_DIR_RELEASE}/temp.img ${BS_DIR_RELEASE}/update-android.img -os_type:androidos || return 1;

    rm -fr ${BS_DIR_RELEASE}/temp.img || return 1;



    # Make update-linux.img

    echo "create update-linux.img..."

    cp -av ${BS_DIR_TOOLS}/package-file-linux ${BS_DIR_RELEASE}/package-file || return 1;

    ${BS_DIR_TOOLS}/afptool -pack ${BS_DIR_RELEASE}/ ${BS_DIR_RELEASE}/temp.img || return 1;

    ${BS_DIR_TOOLS}/rkImageMaker -RK330C ${BS_DIR_RELEASE}/RK3399MiniLoaderAll_V1.05.bin ${BS_DIR_RELEASE}/temp.img ${BS_DIR_RELEASE}/update-linux.img -os_type:androidos || return 1;

    rm -fr ${BS_DIR_RELEASE}/temp.img || return 1;



    return 0

}



copy_other_files()

{

    cd ${BS_DIR_TOP} || return 1



    cp -av ${BS_DIR_TOP}/device/rockchip/rk3399/x3399/parameter.txt ${BS_DIR_RELEASE} || return 1;

    cp -av ${BS_DIR_TOP}/device/rockchip/rk3399/x3399/misc.img ${BS_DIR_RELEASE} || return 1;

    cp -av ${BS_DIR_TOP}/device/rockchip/rk3399/x3399/parameter-linux.txt ${BS_DIR_RELEASE} || return 1;

    cp -av ${BS_DIR_TOP}/device/rockchip/rk3399/x3399/misc-linux.img ${BS_DIR_RELEASE} || return 1;

    return 0

}



threads=1

uboot=no

kernel=no

system=no

buildroot=no

update=no



if [ -z $1 ]; then

    uboot=yes

    kernel=yes

    system=yes

    buildroot=yes

    update=yes

fi



while [ "$1" ]; do

    case "$1" in

    -j=*)

        x=$1

        threads=${x#-j=}

        ;;

    -u|--uboot)

        uboot=yes

        ;;

    -k|--kernel)

        kernel=yes

        ;;

    -s|--system)

        system=yes

        ;;

    -b|--buildroot)

        buildroot=yes

        ;;

    -U|--update)

        update=yes

        ;;

    -a|--all)

        uboot=yes

        kernel=yes

        system=yes

        buildroot=yes

        update=yes

        ;;

    -h|--help)

        cat >&2 <<EOF

Usage: build.sh [OPTION]

Build script for compile the source of telechips project.



  -j=n                 using n threads when building source project (example: -j=16)

  -u, --uboot          build bootloader uboot from source

  -k, --kernel         build kernel from source

  -s, --system         build android file system from source

  -b, --buildroot      build buildroot file system for linux platform

  -U, --update         build update file

  -a, --all            build all, include anything

  -h, --help           display this help and exit

EOF

        exit 0

        ;;

    *)

        echo "build.sh: Unrecognised option $1" >&2

        exit 1

        ;;

    esac

    shift

done



setup_environment || exit 1

copy_other_files || exit 1



if [ "${uboot}" = yes ]; then

    build_bootloader_uboot || exit 1

fi



if [ "${kernel}" = yes ]; then

    build_kernel || exit 1

fi



if [ "${system}" = yes ]; then

    build_system || exit 1

fi



if [ "${buildroot}" = yes ]; then

    build_buildroot || exit 1

fi



if [ "${update}" = yes ]; then

    build_update || exit 1

fi



exit 0

配置使用MIPI屏

在kernel/arch/arm64/boot/dts/rockchip目录下存放了多个已经调试好的液晶屏的配置文件,7寸MIPI屏的配置文件为lcd-mipi-7inch-wy070ml.dtsi,7.9寸EDP屏的配置文件为lcd-edp-lp079qx1.dtsi。在kernel/arch/arm64/boot/dts/rockchip/ x3399-development-board.dts中选择配置使用的液晶模组即可,如需要使用7寸MIPI屏,示例代码如下:

&rk_screen {

    #include "<nowiki>lcd-mipi-7inch-wy070ml.dtsi"

    /* #include "lcd-edp-lp079qx1.dtsi" */

};


编译android源码包

说明:编译映像时一定要使用普通权限编译。编译完成后,生成的映像文件

RK3399MiniLoaderAll_V1.05.bin,uboot.img,trust.img,misc.img,misc-linux.img,parameter-linux.txt,parameter.txt,resource.img,kernel.img,boot.img,system.img,recovery.img, update-android.img。

编译uboot

在android源码目录下执行如下命令编译uboot,编译完成后映像文件RK3399MiniLoaderAll_V1.05.bin(因版本不同,名称不一定相同)以及uboot.img会释放到out/release目录。

./mk.sh     -u

编译android内核

在android源码目录下执行如下命令编译android内核,编译完成后映像文件kernel.img、resource.img会释放到out/release目录。

./mk.sh     -k

编译android文件系统

在android源码目录下执行如下命令编译android映像文件,编译完成后映像文件会释放到out/release目录。

./mk.sh     -s

编译完文件系统,在out/release目录下会生成如下文件:

  • RK3399MiniLoaderAll_V1.05.bin:uboot映像文件
  • trust.img:uboot映像文件
  • uboot.img:uboot映像文件
  • Kernel.img:内核映像
  • Resource.img:资源映像,内含开机图片和内核的设备树信息。
  • Boot.img: Android的初始文件映像,负责初始化并加载system分区。
  • System.img:android的system分区映像,ext4文件格式系统。
  • Recovery.img:急救模式映像。
  • Misc.img:分区映像,负责启动模式切换和急救模式的参数传递。

生成update-android.img文件系统

在android源码目录下执行如下命令生成单一android映像文件update-android.img:

./mk.sh     -U

update-android.img为整个升级文件的单一映像,包括了uboot,内核,文件系统等。注意,生成update-android.img的先决条件是已经成功编译了uboot,内核和文件系统,缺一不可。如果没有编译针对linux平台的文件系统,在执行该指令时,会提示无法生成update-linux.img的错误,如果读者不使用linux系统,不用理会。其编译信息如下:

lqm@lqm:/home/DISK1/x3399_marshmallow$ ./<nowiki>mk.sh -U

'/home/DISK1/x3399_marshmallow/device/rockchip/rk3399/x3399/parameter.txt' -> '/home/DISK1/x3399_marshmallow/out/release/parameter.txt'

'/home/DISK1/x3399_marshmallow/device/rockchip/rk3399/x3399/misc.img' -> '/home/DISK1/x3399_marshmallow/out/release/misc.img'

'/home/DISK1/x3399_marshmallow/device/rockchip/rk3399/x3399/parameter-linux.txt' -> '/home/DISK1/x3399_marshmallow/out/release/parameter-linux.txt'

'/home/DISK1/x3399_marshmallow/device/rockchip/rk3399/x3399/misc-linux.img' -> '/home/DISK1/x3399_marshmallow/out/release/misc-linux.img'

create update-android.img...

'/home/DISK1/x3399_marshmallow/tools/package-file' -> '/home/DISK1/x3399_marshmallow/out/release/package-file'

Android Firmware Package Tool v1.62

------ PACKAGE ------

Add file: /home/DISK1/x3399_marshmallow/out/release/package-file

Add file: /home/DISK1/x3399_marshmallow/out/release/RK3399MiniLoaderAll_V1.05.bin

Add file: /home/DISK1/x3399_marshmallow/out/release/parameter.txt

Add file: /home/DISK1/x3399_marshmallow/out/release/trust.img

Add file: /home/DISK1/x3399_marshmallow/out/release/uboot.img

Add file: /home/DISK1/x3399_marshmallow/out/release/misc.img

Add file: /home/DISK1/x3399_marshmallow/out/release/resource.img

Add file: /home/DISK1/x3399_marshmallow/out/release/kernel.img

Add file: /home/DISK1/x3399_marshmallow/out/release/boot.img

Add file: /home/DISK1/x3399_marshmallow/out/release/recovery.img

Add file: /home/DISK1/x3399_marshmallow/out/release/system.img

Add CRC...

Make firmware OK!

------ OK ------

********RKImageMaker ver 1.63********

Generating new image, please wait...

Writing head info...

Writing boot file...

Writing firmware...

Generating MD5 data...

MD5 data generated successfully!

New image generated successfully!

create update-linux.img...

'/home/DISK1/x3399_marshmallow/tools/package-file-linux' -> '/home/DISK1/x3399_marshmallow/out/release/package-file'

Android Firmware Package Tool v1.62

------ PACKAGE ------

Add file: /home/DISK1/x3399_marshmallow/out/release/package-file

Add file: /home/DISK1/x3399_marshmallow/out/release/RK3399MiniLoaderAll_V1.05.bin

Add file: /home/DISK1/x3399_marshmallow/out/release/parameter-linux.txt

Add file: /home/DISK1/x3399_marshmallow/out/release/trust.img

Add file: /home/DISK1/x3399_marshmallow/out/release/uboot.img

Add file: /home/DISK1/x3399_marshmallow/out/release/misc-linux.img

Add file: /home/DISK1/x3399_marshmallow/out/release/resource.img

Add file: /home/DISK1/x3399_marshmallow/out/release/kernel.img

Add file: /home/DISK1/x3399_marshmallow/out/release/boot.img

Add file: /home/DISK1/x3399_marshmallow/out/release/recovery.img

Add file: /home/DISK1/x3399_marshmallow/out/release/linux-rootfs.img

Error:<AddFile> open file failed,err=2!

------ FAILED ------

lqm@lqm:/home/DISK1/x3399_marshmallow$

查看编译帮助

执行如下指令可查询mk脚本使用方法:

./mk.sh  -h

烧写android映像文件

Windows系统映像烧写

RKTool驱动安装

解压RKTools.rar,工具路径:
SDK\RKTools\windows\Release_DriverAssitant
打开“DriverInstall.exe”,点击“驱动安装”,提示安装驱动成功即可。

Rktools-driver.png

Rktool-driver-ok.png

注意事项:

1.目前支持的操作系统包括:XP,Win7_32,Win7_64,Win8_32,Win8_64。

2.XP系统在驱动安装完后,若还提示“发现新设备”, 安装驱动时选择“自动安装”。

3.若之前已经安装过老版本驱动,请先点击“驱动卸载”后再进行“驱动安装”。

烧录方法一:单个升级固件update-android.imgg

生成统一固件update-android.imgg

我们已经在mk脚本中集成了生成统一固件的方法,在编译android文件系统时(./mk -s),会自动生成update-android.imgg,并释放到out/release目录。

烧录固件update-android.imgg

解压光盘 tools\x3399 烧写工具\windows 目录下的 AndroidTool_Release_v2.38.zip 文件,得到 AndroidTool_Release_v2.38 文件夹,打开 AndroidTool.exe, 选择“升级固件”选项卡, 点击“固件”,在弹出窗口中选择已经生成的 update-android.img 文件,如下图所示。

905 × 456px

工具配置好后, 将 PC 端串口线连接开发板的调试串口,将 PC 端 TYPEC 延长线连接到开发板的 TYPEC 接口, 按下 RECOVERY 键( VOL+键) ,烧录工具界面会提示发现一个 LOADER 设备,然后点击升级,即可开始升级过程(注:如果提示发现一个 ADB 设备,点击切换按钮切换成LOADER 设备即可)。

905 × 456px

升级完成后将会出现如下界面:

905 × 456px

烧录方法二:多设备升级固件update-android.imgg

该工具适合用户批量刷机,可以同时给多台开发板刷机。

解压光盘 tools\x3399 烧写工具\windows 目录下的 FactoryTool-v1.42e.rar 文件,打开“FactoryTool.exe”,点击“固件”选择update-android.imgg,勾选“升级”,点击“启动”,如下图所示:

步骤1:点击固件,选择update-android.imgg;

步骤2:点击启动(选择升级按钮);

步骤3:连接开发板 USB、 DC 电源,按下 recovery 键(对应 VOL+键),对应 USB 口发现设备,并实现自动升级;然后重复步骤 3 即可同时升级第二台、第三台设备,升级成功或者失败的设备会在两边的列表中列出,移除成功或者失败的设备后可以继续连接需要升级的设备

Update-fireware-multi-device.png

Linux系统烧写映像

生成固件update-android.img

我们已经在mk脚本中集成了生成统一固件的方法,在编译android文件系统时(./mk -s),会自动生成update-android.img,并释放到out/release目录。

烧录固件update-android.img

工具路径:

 tools\x3399 烧写工具\linux\ Linux_Upgrade_Tool_v1.24.zip

在升级之前将update-android.imgg拷贝到upgrade_tool相同目录下,运行upgrade_tool(需要sudo)

work@ubuntu:~/3288/Linux_Upgrade_Tool_v1.2/cp rockdev<nowiki>/update-android.img .

work@ubuntu:~/3288/Linux_Upgrade_Tool_v1.2$ sudo ./upgrade_tool  </nowiki>

执行结果如下图,发现设备列表,输入要升级的DevNo(设备号)选择设备 DevNo.png

选择设备后弹出工具使用菜单如下图,左侧是功能描述,右侧是命令语法,升级相关操作都在upgrade command列表下,忘记命令语法可以输入H进行查看,清屏输入CS,退出按Q。

DevNo1.png

  • CD命令: 选择设备, 当执行的命令有包含设备重启操作时, 需重新选择设备,当改变操作设备时需重新选择
  • SD命令:msc切换到rockusb升级模式。 当切换执行成功后, 需要重新选择设备
  • UF命令:升级完整update-android.imgg固件,当执行成功后需要重新选择设备
  • UL命令:升级loader功能,当执行成功后需要重新选择设备
  • DI命令:下载单独image镜像到指定扇区,例如升级kernel.img或者system.img都可以直接使用此功能.例如下载kernel.img: DI -k kernel.img parameter //如果之前通过DI下载过parameter,则再下载kernel.img时就可以不用指定最后的parameter参数
  • DB命令:下载boot,在maskrom状态下,可以通过此功能, 让maskrom设备进行Rockusb协议通讯
  • EF命令:擦除整个nandflash
  • LF命令:低格保留块后面区域,只有在loader模式下使用

执行uf update-android.imgg 开始更新固件,下图为更新完成截图。

Rockusb>uf  <nowiki>update-android.img </nowiki>

DevNo2.png

备注:也可通过配置config.ini文件配置升级映像文件,只需输入UF即可升级,请用户自行尝试。

使用upgrade_tool指令烧写映像

上一节我们介绍了通过upgrade_tool烧写统一固件update-android.img的方法,熟悉三星平台的开发者会发现,这种方法并不是很高效,真正操作起来,它远没有fastboot工具来的迅速。其实,upgrade_tool工具同样支持类似于fastboot的烧写方式。

为了烧写方便,在mk脚本中,默认在编译系统时,已经将烧写工具upgrade_tool拷贝到out/release目录了。

第一步:打开串口终端,并打开minicom,用于适时监控串口调试信息;

第二步:按住RECOVERY键,连接USB OTG线和电源线,这时uboot打印信息将会提示已经进入USB下载模式。如果接通电源后没来得及按住RECOVERY键,在按住RECOVERY键的同时,再按下复位键即可。注意,使用

第二步:打开第二个串口终端,进入out/release目录;

第三步:在out/release目录下敲击如下指令,烧写相应的映像。


sudo upgrade_tool  di  –k  <nowiki>kernel.img(烧写内核)

sudo upgrade_tool  di  –s  system.img(烧写文件系统)

sudo upgrade_tool  di  resource  resource.img(烧写资源文件)

sudo upgrade_tool  di  –r recovery.img(烧写急救文件)

sudo upgrade_tool  ul  RK3288UbootLoader_V2.30.10.bin(烧写bootloader)

sudo upgrade_tool  uf  update-android.imgg(烧写统一固件) </nowiki>

使用Rkflashkit烧写映像

rkflashkit 有图形界面,后加了命令行支持,更是好用。


work@ubuntu:~/rktool$ sudo apt-get install build-essential fakeroot

work@ubuntu:~/rktool$ git clone <nowiki>https://github.com/linuxerwang/rkflashkit

work@ubuntu:~/rktool$ cd rkflashkit

work@ubuntu:~/rktool$ ./waf debian

work@ubuntu:~/rktool$ sudo apt-get install python-gtk2

work@ubuntu:~/rktool$ sudo dpkg -i rkflashkit_0.1.4_all.deb  </nowiki>

注意:rkflashkit_0.1.4_all.deb会因版本更新,版本数字可能会有所变化,如果执行失败,执行ls命令查看下即可。

work@ubuntu:~/rktool/$ sudo rkflashkit 

如下是图形界面,在Devices下选择设备,选择要烧写的分区和对应的映像文件,点击Flash image即可。

Rkflashkit.png

该工具也支持命令行,使用help命令查看使用方法

work@ubuntu:~/rktool/rkflashkit$ rkflashkit --help

<nowiki>Usage: <cmd> [args] [<cmd> [args]...] 



part                              List partition

flash @<PARTITION> <IMAGE FILE>   Flash partition with image file

cmp @<PARTITION> <IMAGE FILE>     Compare partition with image file

backup @<PARTITION> <IMAGE FILE>  Backup partition to image file

erase  @<PARTITION>               Erase partition

reboot                            Reboot device



For example, flash device with boot.img and kernel.img, then reboot:



  sudo rkflashkit flash @boot boot.img @kernel.img kernel.img reboot

work@ubuntu:~/rktool/rkflashkit$  </nowiki>

android开发指南

命令终端

将串口连接开发板上调试串口,进入android系统后,会自动进入android终端,如下图所示:

Command.png

播放mp3

android命令行播放mp3

在android的在命令行下,可以使用强大的am指令做很多事情。在android终端输入am,正常情况下会有如下提示信息:

# am

usage: am [subcommand] [options]



    start an Activity: am start [-D] [-W] <INTENT>

        -D: enable debugging

        -W: wait for launch to complete



    start a Service: am startservice <INTENT>



    send a broadcast Intent: am broadcast <INTENT>



    start an Instrumentation: am instrument [flags] <COMPONENT>

        -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)

        -e <NAME><VALUE>: set argument <NAME> to <VALUE>

        -p <FILE>: write profiling data to <FILE>

        -w: wait for instrumentation to finish before returning



    start profiling: am profile <PROCESS> start <FILE>

    stop profiling: am profile <PROCESS> stop



<INTENT> specifications include these flags:

        [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]

        [-c <CATEGORY> [-c <CATEGORY>] ...]

        [-e|--es <EXTRA_KEY><EXTRA_STRING_VALUE> ...]

        [--esn <EXTRA_KEY> ...]

        [--ez <EXTRA_KEY><EXTRA_BOOLEAN_VALUE> ...]

        [-e|--ei <EXTRA_KEY><EXTRA_INT_VALUE> ...]

        [-n <COMPONENT>] [-f <FLAGS>]

        [--grant-read-uri-permission] [--grant-write-uri-permission]

        [--debug-log-resolution]

        [--activity-brought-to-front] [--activity-clear-top]

        [--activity-clear-when-task-reset] [--activity-exclude-from-recents]

        [--activity-launched-from-history] [--activity-multiple-task]

        [--activity-no-animation] [--activity-no-history]

        [--activity-no-user-action] [--activity-previous-is-top]

        [--activity-reorder-to-front] [--activity-reset-task-if-needed]

        [--activity-single-top]

        [--receiver-registered-only] [--receiver-replace-pending]

        [<URI>] 

启动的方法为:

<nowiki># am start -n 包(package)名/包名.活动(activity)名称 

启动的方法可以从每个应用的AndroidManifest.xml的文件中得到,以计算器(calculator)为例,

<?xml version="1.0" encoding=""?>



<manifestxmlns:android="<nowiki>http://schemas.android.com/apk/res/android"



package="com.android.calculator2">



<applicationandroid:label="@string/app_name"android:icon="@drawable/icon">



<activity android:name="Calculator"



android:theme="@android:style/Theme.Black">



<intent-filter>



<action android:name="android.intent.action.MAIN" />



<categoryandroid:name="android.intent.category.LAUNCHER"/>



</intent-filter>



</activity>



</application>



</manifest>

由此计算器(calculator)的启动方法为:

<nowiki># am start-ncom.android.calculator2/com.android.calculator2.Calculator

Music的启动方法为:

<nowiki># am start-ncom.android.music/com.android.music.MusicBrowserActivity

这时,屏幕上会有music的播放列表,但是并没有播放。如果需要播放,得执行下面的指令:

am start -n <nowiki>com.android.music/com.android.music.MediaPlaybackActivity -d /mnt/extsd/liangliangxianwang.mp3 

使用android默认音频播放器

确保外置的SD卡中存在mp3文件,点击音乐,播放器会自动识别音频文件,如下图:

Mp3.png

点击相应的音频文件即可播放。播放时界面如下:

Mp3-1.png

播放视频

  android自带视频处理功能,在android应用界面显示为图库。点击图库按钮,会在外置SD卡中自动寻找能够识别的视频和图片文件,如下图:

Mp4.png

点击中间的按钮:

Mp4-1.png

上图中,带有播放符号的即为视频文件,不带的为图片文件。点击带播放符号的文件:

Mp4-2.png

再点击播放按钮:

Mp4-3.png

X3399 android6.0系统还带一款4k视频播放器,播放器会自动关联视频文件,点击需要播放的视频即可播放

1,024 × 600px

如果遇到图库无法支持的视频文件,可以采用第三方播放器如RockPlayer进行播放,如网络上最为流行的rmvb和rm文件。这时,机器俨然成为了一个具有支持rm/rmvb等格式视频的超强mp4了。如对屏幕尺寸有更高要求,可以使用VGA或HDMI方式,直接将视频文件显示到显示器或电视机上。

使用RockPlayer播放视频时,会弹出一个硬解和软解的对话框,如果属于3399硬解码的视频文件,选择硬解模式,否则选择软解模式。如播放rm/rmvb文件,选择软解模式才能播放,如下图所示:

Mp4-6.png

图片浏览

浏览图片时,同样使用上面的图库浏览。点击图库图标,点击要浏览的图片即可浏览。滑动可以浏览下一张图片,如下图所示:

Image-view.png

语言设置

点击设置中的语言和输入法一栏,再点击选择语言,会弹出多种语言,选择需要的语言即可,如下图:

Language.png

使用WIFI上网

X3399开发板自带wifi/BT二合一模组,无需额外USBwifi即可无线上网。启动开发板,点击设置,在Wi-Fi一栏的方框中有个关闭按钮,将他拨到右边,即打开状态,如下图:

Wifi-default.png

再点击Wi-Fi一栏,进入wifi界面,找到属于自己的无线网络信号并点击,输入密码后,点击连接即可上网。

Wifi-default1.png

使用蓝牙传输数据

x3399开发板支持AP6335芯片的WIFI/BT二合一模块。点击设置->蓝牙,将蓝牙开关打开,如下图所示:

Blutooth.png

点击蓝牙,进入设置界面,找到一个支持蓝牙设备的安卓手机,并打开蓝牙,且可被发现。在x3399开发板的蓝牙设置界面的右上脚点击搜索设备,在可用设备一栏中将会显示出所有找到的蓝牙设备。找到需要匹配的蓝牙设备并点击,在开发板上弹出配对请求:

Blutooth1.png

点击配对,同时,在手机端也会弹出类似的画面,也点击配对即可。成功配对后的界面如下:

Blutooth2.png

这时,配对的设备间就可以通过蓝牙共享文件了。点击开发板的图库,找到一张图片并选中: Blutooth3.png

点击右上脚的分享按钮,选择蓝牙,弹出如下界面:

Blutooth4.png

选择配对成功的蓝牙设备,这时在配对设备上将会弹出一个接收文件的对话框,点击接收即可。

使用蓝牙播放音乐

x3399开发板可支持通过蓝牙连接蓝牙音箱,并播放音乐。准备一个蓝牙音箱,并切换到蓝牙模式,进入开发板的蓝牙界面并打开,点击右上脚的搜索设备,将会找到蓝牙音箱,下图中的GS805即是蓝牙音箱:

Blutooth-mp3.png

点击GS805,稍等几秒,将会配对成功,无需任何确认动作。这时,随意在开发板上播放音视频,音乐将会通过蓝牙音箱播放出来。

使用USB鼠标键盘

启动开发板,将USB鼠标或者USB无线鼠标键盘接到USB HOST接口,即可使用鼠标键盘操作android界面了。

APK应用安装

Android系统下有很多种APK的安装方法,这里介绍四种。

使用SD卡安装

将拷贝有APK安装包的SD卡插到开发板,打开开发板的“文件管理”应用程序,界面如下:

SD-APK.png

可以看到,安装包一栏找到了3个安装包。点击进去,会列出安装列表:

点击要安装的APK文件:

SD-APK1.png

依次点击下一步,直到安装完成即可。

使用adb工具安装

在上一章节,ApkInstaller.rar的解压目录中已经存在有adb工具了,我们在命令行下进入该目录,执行如下指令安装APK:

adb  install  *.apk 

正常安装的界面如下:

Adb-apk.png

在线安装

用户可以通过91助手,百度应用中心、360手机助手等第三方软件直接在线安装,这里就不详细说明了。

屏幕抓图

使用eclipse抓图

android有很多截图工具,但是很多都需要root权限,在平时做开发时,我们可以使用eclipse自带的插件进行截图,非常的方便。

启动开发板,并进入android系统。使用USB延长线将x3399开发板与PC机连接,第一次连接时会提示需要安装软件,如下图:

Android-driver1.png

选择否,点下一步:

Android-driver2.png

选择自动安装软件,点下一步,直至安装完成。

Android-driver3.png

安装完成之后,打开eclipse软件,如果没有安装,需先安装该软件。然后点击Window->Show view->Devices,如下图:

Eclipse-device.png

确保机器处于开机状态,这时Devices会找到机器的设备号,如下图:

Eclipse-device1.png

点击上图右上脚的摄相头标志,就会弹出要保存的图像,点击save保存即可,如下图所示:

Camera-save.png

使用360手机助手抓图

在PC机上安装360手机助手手,启动开发板,通过USB延长线将开发板连接到PC机的USB口,打开360手机助手,360手机助手将会找到x3399开发板。如果找不到,将USB线拨掉重插,在开发板上会弹出一个授权界面,点击确认即可。正常连接后的360手机助手界面如下:

360-screenshot.png

点击左下脚的截屏按钮即可。

挂载TF卡

系统启动后,会自动挂载右侧卡槽中的TF卡到/mnt/external_sd/目录,如下图所示:

939 × 563px

挂载U盘

启动开发板,并进入android系统。插入U盘后,系统会将U盘自动挂载到/mnt/usb_storage*(*表示0到4)目录。

计算器

点击android应用的计算器即可使用计算器功能,如下图所示:

Counter.png

输入法

推荐安装讯飞输入法,测试界面如下:

Xunfei-input.png

浏览器

android默认自带一个浏览器,该浏览器功能已经非常完善了,如果用户仍然觉得不够要求,可以下载安装第三方浏览器,如UC浏览器等。

Brower.png

屏幕旋转

重力传感器已经集成到开发板上,将开发板移动到四周任一方向,界面会随之改变。当然并不是所有应用程序都会随之改变,有部分应用程序不支持屏幕旋转。旋转后示例图片如下:

Screen-rotation.png

Screen-rotation1.png

时间设置

点击android应用中的设置,可以看到有日期和时间一栏,点击进去,选择相应的栏目设置即可。

Date-set.png

拍照摄相

点击android应用中的相机,会进入图像预览模式。点击右下脚的拍照按钮即可拍照,如下图所示:

Shot-picture.png

右下脚可以切换拍照和录像功能。

使用有线以太网上网

将可以正常上网的网线连接到开发板的网口座上,网口座的指示灯会正常闪烁,正常上网界面如下:

Wired-internet.png

优酷

将优酷的APK软件安装到开发板,连接网线就可以看视频了。

Youku.png

播放电视

安装龙龙直播,泰捷视频等网络播放器,插上网线即可播放。

Live-tv.png

使用遥控器操作开发板

默认x3399开发板硬件支持红外遥控器,我们可以通过遥控器操作android界面,在泰捷视频等电视界面通过遥控器操作,开发板就完全变成了一个机顶盒。 284x478px

4K视频播放

3399相对3288,支持更多种全高清视频的硬解码,可以流畅的播放这些格式的1080P视频文件。

通常情况下,使用RockPlayer或者自带的播放器都可播放。如果遇到自带播放器无法播放,可选择RockPlayer。播放界面如下:

RockPlayer.png

HDMI显示

HDMI显示支持直接将LCD上显示的视频还原到带有HDMI接口的电视机上,支持1080P高清视频,兼容720P,576P以及480P的视频。同时还将音频也一并传送到电视机上。

HDMIshow.jpg

开关机

x3399开发板使用了PMU进行电源管理。当外接上5V的电源适配器后,x3399开发板将会被自动点亮,进入系统后,长按开机键,会弹出一个选择对话框,点击关机按钮将会弹出确认关机的对话框,点击确认即可关机。

ON-OFF.png


休眠唤醒

进入android文件系统后,轻按开关机键,屏幕将会熄灭,然后进入深度休眠状态。可以通过串口查看进入休眠的打印信息。再次轻按开关机键,开发板将会唤醒。

Android测试程序

我们在x3288,x3399开发板上开发了强大的安卓测试软件,基本上可以测试开发板的所有硬件功能,它在产品量产,程序开发上有很大的参考价值。在APP界面点击安卓测试,即可进入测试界面,使用触摸屏左右滑动,或者用鼠标滑动可切换测试的硬件。

液晶屏测试

Lcd-test.png

在液晶屏测试界面,点击中间的任意纯色位置,会有不同的颜色变化,我们可以观察LCD是否有丢色,坏点等。

触摸屏测试

Touch-test.png

在触摸屏测试界面,点击开始测试,即可在屏幕上任意手写,在批量生产时,我们通常通过画对角线测试触摸电路是否正常。

发光二极管测试

Led-test.png

点击图片上任意的灯,为红色时,对应开发板上的LED灯亮,为灰色时,对应LED灯灭。

蜂鸣器测试

Beep-test.png

按住开始测试键,蜂鸣器会鸣叫,松开开始测试键,蜂鸣器停止鸣叫。

背光测试

Backlight-test.png

划动中间的圆圈,背光亮度会随之发生变化。

按键测试

Key-test.png

按下或抬起开发板上四个独立按键的任意一个,界面上将会提示对应的按键的按下和抬起动作。

电池测试

Battery-test.png

该界面反应了接在开发板上的电池电量信息。

数模转换测试

Adc-test.png

监测四路ADC的电压。我们可以通过调节开发板上的精密可调电位器,观察上面对应通道的电压是否变化。

重力传感器测试

Gsensor-test.png

旋转开发板时,上面的X,Y,Z轴的值会随之发生变化。

音频测试

Audio-test.png

点击开始测试,会听到有清脆的声音出来。

摄像头测试

Camera-test.png

装上摄相头,点击开始测试,会看到摄像头抓到的预览界面显示出来。

无线网络测试

Wireless-test.png

使用WIFI连上无线网络后,无线网络测试界面会搜索到附近的网络并列出来。

网络连接测试

Internet-test.png

当有线或无线网络正常连接时,网络连接测试界面可以浏览网页。

串口测试

TtyAMA-test.png

将需要测试的串口的TXD和RXD短路,再点击开始测试,界面上会提示对应串口会自发自收0123456789。如果不能自发自收,说明对应的串口硬件有问题。

外部存储器测试

Sdcard-test.png

将TF卡插到开发板上,点击开始测试,界面上会显示TF卡的相关信息。

优盘测试

Udisk-test.png

将U盘插到开发板上,点击开始测试,界面上会显示U盘的相关信息。

android内核驱动

G-sensor驱动

路径:kernel/drivers/input/sensors/gyro/
文件:lsm330_gyro.c

光感传感器驱动

路径:kernel/drivers/input/sensors/lsensor
文件:cm3218.c

电容触摸屏驱动

   路径:kernel/drivers/input/touchscreen/
   源码:gslx680.c

液晶屏驱动

路径:kernel/drivers/video/rockchip/

kernel/drivers/video/rockchip/dp/

      kernel/drivers/video/rockchip/transmitter

      kernel/arch/arm64/boot/dts/rockchip

源码:rockchip_dp.c,mipi_dsi.c,<nowiki>lcd-edp-lp079qx1.dtsi,lcd-mipi-7inch-wy070ml.dtsi

按键驱动

路径:kernel/drivers/input/keyboard
源码:rk_keys.c

WIFI/BT模块驱动

路径:kernel/drivers/net/wireless/rockchip_wlan
源码:该目录下所有源码文件

摄像头驱动

路径:hardware/rockchip/camera/SiliconImage/isi/drv
源码:该目录下

HDMI驱动

路径:kernel/drivers/video/rockchip/hdmi

proc文件系统

启动环境变量查询

使用如下指令查询启动环境变量配置:

cat  /proc/cmdline

会有如下类似打印信息:

root@x3399:/ # cat /proc/cmdline                                               

earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 <nowiki>androidboot.baseband=N/A androidboot.selinux=permissive androidboot.hardware=rk30board androidboot.console=ttyFIQ0 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(trust),0x00002000@0x00006000(misc),0x00008000@0x00008000(resource),0x00008000@0x00010000(kernel),0x00010000@0x00018000(boot),0x00018000@0x00028000(recovery),0x00030000@0x00040000(backup),0x00040000@0x00070000(cache),0x00600000@0x000B0000(system),0x00008000@0x006B0000(metadata),0x00002000@0x006B8000(baseparamer),0x00000400@0x006BA000(frp),-@0x006BA400(userdata) storagemedia=emmc uboot_logo=0x02000000@0x7dc00000:0x01000000 loader.timestamp=2017-01-20_15:16:33 androidboot.mode=emmc

root@x3399:/ #

CPU信息查询

使用如下指令查询CPU信息:

cat  /proc/cpuinfo

会有如下类似打印信息:

<nowiki>
root@x3399:/ # cat /pro

proc/               property_contexts   

root@x3399:/ # cat /proc/cpuinfo                                               

processor       : 0

BogoMIPS        : 48.00

Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32

CPU implementer : 0x41

CPU architecture: 8

CPU variant     : 0x0

CPU part        : 0xd03

CPU revision    : 4



processor       : 1

BogoMIPS        : 48.00

Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32

CPU implementer : 0x41

CPU architecture: 8

CPU variant     : 0x0

CPU part        : 0xd03

CPU revision    : 4



processor       : 2

BogoMIPS        : 48.00

Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32

CPU implementer : 0x41

CPU architecture: 8

CPU variant     : 0x0

CPU part        : 0xd03

CPU revision    : 4



processor       : 3

BogoMIPS        : 48.00

Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32

CPU implementer : 0x41

CPU architecture: 8

CPU variant     : 0x0

CPU part        : 0xd03

CPU revision    : 4



processor       : 4

BogoMIPS        : 48.00

Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32

CPU implementer : 0x41

CPU architecture: 8

CPU variant     : 0x0

CPU part        : 0xd08

CPU revision    : 2



processor       : 5

BogoMIPS        : 48.00

Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32

CPU implementer : 0x41

CPU architecture: 8

CPU variant     : 0x0

CPU part        : 0xd08

CPU revision    : 2

root@x3399:/ #

内存信息查询

使用如下指令查询内存使用信息:

cat  /proc/meminfo

会有如下类似打印信息:

<nowiki>
root@x3399:/ # cat /pr

proc/               property_contexts   

root@x3399:/ # cat /proc/meminfo                                               

MemTotal:        2041364 kB

MemFree:          845216 kB

MemAvailable:    1554116 kB

Buffers:            1468 kB

Cached:           696428 kB

SwapCached:            0 kB

Active:           436404 kB

Inactive:         554568 kB

Active(anon):     294576 kB

Inactive(anon):    10908 kB

Active(file):     141828 kB

Inactive(file):   543660 kB

Unevictable:           0 kB

Mlocked:               0 kB

SwapTotal:        520908 kB

SwapFree:         520908 kB

Dirty:                 8 kB

Writeback:             0 kB

AnonPages:        293128 kB

Mapped:           352516 kB

Shmem:             12428 kB

Slab:              94504 kB

SReclaimable:      65316 kB

SUnreclaim:        29188 kB

KernelStack:       11216 kB

PageTables:        11696 kB

NFS_Unstable:          0 kB

Bounce:                0 kB

WritebackTmp:          0 kB

CommitLimit:     1541588 kB

Committed_AS:   25896976 kB

VmallocTotal:   258867136 kB

VmallocUsed:           0 kB

VmallocChunk:          0 kB

CmaTotal:         131072 kB

CmaFree:          128616 kB

root@x3399:/ #

磁盘分区信息查询

使用如下命令查询磁盘分区信息:

cat  /proc/partitions

会有如下类似打印信息:

<nowiki>
root@x3399:/ # cat /proc/partitions                                            

major minor  #blocks  name



   1        0       8192 ram0

   1        1       8192 ram1

   1        2       8192 ram2

   1        3       8192 ram3

   1        4       8192 ram4

   1        5       8192 ram5

   1        6       8192 ram6

   1        7       8192 ram7

   1        8       8192 ram8

   1        9       8192 ram9

   1       10       8192 ram10

   1       11       8192 ram11

   1       12       8192 ram12

   1       13       8192 ram13

   1       14       8192 ram14

   1       15       8192 ram15

 254        0     520912 zram0

 179        0   15267840 mmcblk0

 179        1       4096 mmcblk0p1

 179        2       4096 mmcblk0p2

 179        3       4096 mmcblk0p3

 179        4      16384 mmcblk0p4

 179        5      16384 mmcblk0p5

 179        6      32768 mmcblk0p6

 179        7      49152 mmcblk0p7

 179        8      98304 mmcblk0p8

 179        9     131072 mmcblk0p9

 179       10    3145728 mmcblk0p10

 179       11      16384 mmcblk0p11

 179       12       4096 mmcblk0p12

 179       13        512 mmcblk0p13

 179       14   11736576 mmcblk0p14

 179       96       4096 mmcblk0rpmb

 179       64       4096 mmcblk0boot1

 179       32       4096 mmcblk0boot0

root@x3399:/ #                    

内核版本查询

使用如下命令查询内核版本:

cat  /proc/version

会有如下类似打印信息:

<nowiki>
root@x3399:/ # cat /proc/version                                               

Linux version 4.4.16 (jjj@jjj-desktop) (gcc version 4.9.x-google 20140827 (prerelease) (GCC) ) #164 SMP PREEMPT Mon Jan 16 18:49:48 CST 2017

root@x3399:/ #

网络设备查询

使用如下命令查询网络设备信息:

cat  /proc/net/dev

会有如下类似打印信息:

<nowiki>
root@x3399:/ # cat /proc/net/dev                                               

Inter-|   Receive                                                |  Transmit

 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed

  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

    lo:    6032      80    0    0    0     0          0         0     6032      80    0    0    0     0       0          0

 wlan0:  503506    2298    0    0    0     0          0        53    23070     251    0    0    0     0       0          0

  eth0:       0       0    0    0    0     0          0         0      508       6    0    0    0     0       0          0

root@x3399:/ #

查看内核启动信息

使用如下命令查询内核启动信息:

cat  /proc/kmsg

android开发项目实战

说明:以下为实际项目实例,用户可参考x210开发文档练习,后续我们会陆续发布。在进行下面的任一个实验之前,请确保前面的环境已经搭建完毕。

实战1:创建hello x3399工程

参考《x4418 android平台用户手册》。

实战2:在x3399开发板上运行hello x3399测试程序

参考《x4418 android平台用户手册》。

实战3:从零开始编写LED测试程序

参考《x4418 android平台用户手册》。

实战4:建立第一个APK应用程序,通过JNI+NDK调用底层驱动

参考《x4418 android平台用户手册》。

实战5:修改VGA分辨率

参考《x4418 android平台用户手册》。

实战6:如何修改init.rc文件

永久修改

在system/core/rootdir目录下找到init.rc文件,修改后执行./mk.sh –s,将会生成新的system.img文件,重新烧写system.img即可更新init.rc。注意,在编译时,首先需要先将out目录下的init.rc删除后再编译,否则可能不会生效。

临时修改

注意:以下步骤为基于x3288平台的修改步骤,在x3399平台下大同小异,读者可以先行尝试,后续我们将发布基于x3399平台的修改脚本。

默认init.rc在ramdisk.img中,ramdisk.img又被打包到boot.img中,因此,如果我们需要临时修改boot.img,首先需要解压boot.img,再手动修改我们需要修改的内容,再打包即可。为此,我们特别编写了解压和压缩的脚本文件。

在android根目录下,新建脚本文件ramdisk.sh,编辑内容如下:

<nowiki>#!/bin/bash

# create: liuqiming

# date:   2016-11-22

# mail:   liuqiming@9tripod.com



echo "Modify boot.img"

echo "1.unzip boot.img"

echo "2.Create boot.img"

echo "3.delete cache files"

echo "4.exit"



#准备工作,环境变量的声明

SOURCE_DIR=$(cd `dirname $0` ; pwd)

TOOLS_DIR=${SOURCE_DIR}/tools

TARGET_DIR=${SOURCE_DIR}/out/release

OUT=${SOURCE_DIR}/out/target/product/rk3288



PATH=${SOURCE_DIR}/out/host/linux-x86/bin:$PATH;



#读取要执行的操作索引

read -p "Choose:" CHOOSE



#解压boot.img

if [ "1" = ${CHOOSE} ];then

    echo "unzip boot.img"

    cd $TARGET_DIR

#第一步:新建ramdisk目录

    [ -e "ramdisk" ] ||{ echo "mkdir ramdisk"; mkdir ramdisk;}

#第二步:判断是否存在boot.img文件

    [ -f "$TARGET_DIR/boot.img" ] || { echo "error! can't find boot.img!"; rm -rf ramdisk;exit; }

    cd ramdisk

#第三步:拷贝boot.img

        cp ../boot.img .

#第四步:解压boot.img文件,得到boot.img-ramdisk.gz文件

    [ -f "/bin/split_bootimg.pl" ] || { cp $TOOLS_DIR/split_bootimg.pl /bin; }

        split_bootimg.pl boot.img

    rm -f boot.img

#第五步:解压boot.img-ramdisk.gz文件

    gzip -dc boot.img-ramdisk.gz | cpio -i

    echo "^_^ unzip boot.img finished!"

    rm -f boot.img-ramdisk.gz

    rm -f boot.img-second.gz

    rm -f boot.img-kernel

    exit



#打包boot.img

elif [ "2" = ${CHOOSE} ];then

    echo "create boot.img with kernel..."

#第一步:判断是否存在ramdisk目录

    [ -e "$TARGET_DIR/ramdisk" ] || { echo "can't find [ramdisk],please unzip boot.img first!"; exit; }

#第二步:去除默认的root.img文件

    rm -f $TARGET_DIR/boot.img

    cd $TARGET_DIR

#第三步:将当前目录所有文件打包到boot.img

    [ -d $TARGET_DIR/ramdisk ] && \

    mkbootfs $TARGET_DIR/ramdisk | minigzip > $TARGET_DIR/ramdisk.img && \

    truncate -s "%4" $OUT/ramdisk.img && \

    mkbootimg --kernel ${OUT}/kernel --ramdisk ${OUT}/ramdisk.img --second $TARGET_DIR/resource.img --output $TARGET_DIR/boot.img

    rm -rf ramdisk

    exit



#清除残余文件

elif [ "3" = ${CHOOSE} ];then

    cd ${TARGET_DIR}

    rm -rf ramdisk

    echo "^_^ delete cache files ok!" 



#退出脚本

elif [ "4" = ${CHOOSE} ];then

    exit

fi

    执行./ramdisk.sh,输入1,回车,将会自动解压out/release目录下的boot.img,并存放到out/release/ramdisk目录。

    执行./ramdisk.sh,输入2,回车,将会自动将out/release/ramdisk目录下的文件打包成boot.img。

实战7:如何修改开机动画

默认android启动时,会有android的英文字母不断高亮滚动显示,构成了一幅美丽的开机动画。其实这个开机动画是可以定制的,有兴趣的读者可以自行尝试。

在kernel根目录下,存放有logo.bmp和logo_kernel.bmp两张图片,在编译内核后,他们会被打包到resource.img中。开机启动时,uboot会从中读取logo.bmp并显示出来。默认uboot只支持8b模式的图像读取,且必须为BMP格式。找一张分辨率不是太大的图片,转换成BMP格式,在WINDOWS的图片编辑软件下转换成8b模式后,替换kernel根目录下的logo.bmp即可。注意,如果分辨率过大,可能会无法显示。

修改内核的LOGO和修改uboot的LOGO方法类似,所不同的是,我们需要修改logo_kernel.bmp文件,而不是logo.bmp文件。如果我们只需要显示一幅图片,删掉logo_kernel.bmp即可。

实战11:使用git管理源代码

   在我们最开始编码时,就应该养成使用git等工具管理源码的好习惯。这里简单介绍git的一些常用操作,具体更深入的学习,需要读者深入研究。

git指令

1).初始化仓库

git init

2).查看版本库的状态

git status

3).查看版本库的状态

git log

4).提交文件到仓库索引中

git add .                                 ---提交当前目录所有修改
git add hello.c example.c                 ---提交两个文件到仓库索引

5).提交内容到仓库:

git commit -a -m "yx modify some files"

6).比较当前的工作目录和仓库数据库中的差异

git diff                                  ---建议使用windows 客户端

7).恢复到某个版本

git reset --hard 8f097e                   ---恢复到某个历史版本

8).打标签

git tag V1.01 8f097e -m "20100101发布"    ---给某个版本打上标签
git tag -d V1.01                          ---删除标签

9).clone仓库

git clone git@172.18.0.198:boot          ---clone仓库到当前目录
git clone git@172.18.0.198:boot temp         ---clone仓库到temp目录

10)服务器仓库同步到本地

git pull                                   ---将服务器最新内容同步到本地

11).将本地仓库中的内容同步到服务器中

git push                                   ---提交当前目录修改记录到服务器(服务器已存在此目录)
git push git@172.18.0.198:FCR/K660/app master  ---提交当前目录修改到服务器(服务器不存在此目录)

12).查看项目版本更新细节

git show 18183e                            ---显示当前分支的最新版本的更新细节

初始化git仓库

在第一次解压android源码后,进入android根目录,更新本地Git仓库:

<nowiki>
cd android_gingerbread     #进入工作目录

git init-db        #初始化工作目录

git add .        #将工作目录的所有文件添加进来以便跟踪管理

git commit -a        #将所监视的文件提交到仓库

sudo apt-get install qgit

第一次建立仓库后,给出第一次提交:

git commit -m "初始化工程"

否则,输入git log时,会提示如下错误:

fatal: bad default revision 'HEAD'

恢复到上一版本

首先,使用git log命令查询修改记录:

<nowiki>
lqm@lqm:~/android_gingerbread$ git log

commit d5fd5223fd354c0a9c63057a7b8fe9a6870bdd7e

Author: lqm <lqm@lqm.(none)>

Date:   Wed Dec 14 10:34:34 2011 +0800



    删除不必要的处理器文件



commit 1af4b99d582bf33cc2f37a0529554426b30a168d

Author: lqm <lqm@lqm.(none)>

Date:   Wed Dec 14 10:14:39 2011 +0800



    初始化工程

lqm@lqm:~/android_gingerbread$

    再使用git reset指令恢复到某个提交状态:

lqm@lqm:~/android_gingerbread$ git reset --hard 1af4b

Checking out files: 100% (12517/12517), done.

HEAD is now at 1af4b99 初始化工程

lqm@lqm:~/android_gingerbread$

修改源码后,提交修改记录

修改了某些文件,需要提交到服务器,具体操作如下:

第一步:使用git pull将服务器仓库提交到本地

Git-pull.png

提示出错,有两种解决办法,第一种,先将drivers/mtd/nand/nand_base.c备份,比如:mv drivers/mtd/nand/nand_base.c drivers/mtd/nand/nand_base.c.bak

然后再执行git pull。第二种,执行git checkout –f,然后再执行git pull。

正常的操作如下: Git-pull-ok.png

上面的提示文件为服务器上已经更新的文件,执行git pull后,已经同步到本地了。

第二步:使用git status,查看修改的文件:

Git-status.png

上图表示本地修改了build/mk和common/env_common.c两个文件。

第三步:使用git add指令将指定的文件提交到仓库索引

 git  add  .  #将当前目录所有修改的文件提交到仓库索引

或者使用下面的指令:

 git  add  build/mk  #将指定的文件提交到仓库索引,env_common.c并未提交。

第四步:使用

 git commit #命令注释修改的内容到仓库

Git-commit.png

第五步:使用

 git push   #指令将修改的文件提交到服务器

Git-push.png

说明:如果源码保存在本机上,不用操作第一步和第五步。

实战13:如何打包整个android bsp包

这里推荐两种常用的打包方法。

使用tar指令

通常在编译完android源码包后,在android源码目录中会生成各种释放文件,它统统被汇集到源码根目录的out目录,打包时我们需要将它排除在外。另外,使用git管理工具管理源码时,在android源码根目录会生成.git目录,随着修改次数的增加,该目录内容会越来越多,打包时也需要将它排除在外。

由于在整个android源码中,存在其他的out目录,为了在使用tar指令打包时,防止将这些目录也排除在外,因此我们可以首先将源码根目录的out目录重命名,如out_x3399,再执行打包指令。打包完成后,再将out_x3399还原成out即可。

另外,如果编译了uboot,内核等,在源码包中会存在很多*.o,*.cmd的临时文件,这些也是我们所不需要的,在打包时也一并排除在外。

在android源码总目录的同级目录下执行如下指令完成打包:

mv     x3399_marshmallow\out     x3399_ marshmallow \out_x3399

tar  jcvf  x3399_ <nowiki>marshmallow.tar.bz2  x3399_ marshmallow –exclude=”.git” –exclude=”out_x3399” –exclude=”*.o” –exclude=”*.cmd”

mv x3399_ marshmallow \out_x3399  x3399_ marshmallow\out

使用git指令

使用git指令打包源码的前提是整个android源码包已经由git管理起来。在android源码包的根目录下(包含有uboot,kernel等目录的同一级目录)使用如下指令打包整个源码包:

git  archive  --format=tar  HEAD  >  x3399_ marshmallow.tar;bzip2  x3399_ marshmallow.tar

实战15:android调试技巧之mm指令

在Android SDK源码工程下,如果编译整个工程可能需要两三个小时,即使二次编译也要二十多分钟。如果只想单独编译某个APK应用,那么可以这样做:

1)在build目录下执行

   . envsetup.sh  (注意,命令前面有一个点,然后接一个“空格”键)

执行完后,就会多出以下几个命令:

<nowiki>
- croot:   Changes directory to the top of the tree.

- m:       Makes from the top of the tree.

- mm:      Builds all of the modules in the current directory.

- mmm:     Builds all of the modules in the supplied directories.

- cgrep:   Greps on all local C/C++ files.

- jgrep:   Greps on all local Java files.

- resgrep: Greps on all local res/*.xml files.    /*???*/

- godir:   Go to the directory containing a file.

- printconfig: 当前build的配置情况

2)mm命令

用于当前目录下的工程

3)mmm命令

用于编译指定目录,如:

mmm Settings 表示编译Settings这个目录,之后会生成新的apk

实战16:ubuntu下minicom的设置

在做项目开发时,串口调试已经成为我们开发的必备工具。但是现在很多主板,或是笔记本上都已经省掉了串口,这对我们开发人员来说,无疑会带来些不必要的麻烦。为此,我们可能会通过PCI转串口,USB转串口等来开发。值得庆幸的是,在windows下使用的人多,我们很容易就能够安装PCI转串口驱动或是USB转串口驱动。如果我们使用纯的linux系统开发,安装驱动可能就没这么简单了。因此,这里分享一些我们实际开发中总结的一些经验,避免新人多走弯路。

通用串口的minicom设置方法

通常情况下,PC机上自带的串口,在windows和ubuntu下都自带驱动了,这时安装就比较简单了。

第一步:安装minicom

sudo apt-get install minicom

第二步:设置minicom的端口

sudo minicom -s

界面如下:

<nowiki> +-----[configuration]------+

            | Filenames and paths      |

            | File transfer protocols  |

            | Serial port setup        |

            | Modem and dialing        |

            | Screen and keyboard      |

            | Save setup as dfl        |

            | Save setup as..          |

            | Exit                     |

            | Exit from Minicom        |

            +--------------------------+

通过键盘的上下键盘选择到Serial port setup,回车

  +-----------------------------------------------------------------------+

    | A -    Serial Device      : /dev/ttyWCH1                              |

    | B - Lockfile Location     : /var/lock                                 |

    | C -   Callin Program      :                                           |

    | D -  Callout Program      :                                           |

    | E -    Bps/Par/Bits       : 115200 8N1                                |

    | F - Hardware Flow Control : No                                        |

    | G - Software Flow Control : No                                        |

    |                                                                       |

    |    Change which setting?                                              |

    +-----------------------------------------------------------------------+

输入A,光标会停留到Serial Device的界面,将设备节点设置为/dev/ttyS0;输入F,关闭硬流控;再回车,退出当前设置,回到上一界面,选择Save setup as dfl,再选择Exit退出设置。到此,minicom安装完成。

USB转串口安装方法

这里以PL2303的驱动IC为例。默认ubuntu10.10系统已经自带有PL2303的驱动了。因此,这个安装比较简单。

第一步:将USB转串口延长线连接到PC机的USB口,启动ubuntu系统;

第二步:执行如下指令检查是否有USB转串口的设备节点:

lqm@lqm:~$ ls /dev/ttyU*
/dev/ttyUSB0

第三步:重新设置minicom的设备节点,方法同上;

第四步:打开minicom,测试USB转串口是否能正常使用。

PCI转串口安装方法

PCI转串口的芯片比较多,这里以CH35X为例,讲述在ubuntu下的安装方法。

第一步:下载最新的安装包CH35XDRV.ZIP,或者从光盘里面获得;

第二步:将CH35XDRV.ZIP拷贝到ubuntu的任意目录并解压,得到CH35XDRV目录,使用命令终端进入该目录,示例如下:

lqm@lqm:~/下载/CH35XDRV/CH35XDRV$ pwd

/home/lqm/下载/CH35XDRV/CH35XDRV

lqm@lqm:~/下载/CH35XDRV/CH35XDRV$ ls

CH35X??-???+?-??+-?+?.chm  DRV_16S  DRV_1P  DRV_1S  DRV_1S1P  DRV_2S  DRV_2S1P  DRV_2S1P_RA  DRV_4S  DRV_4S1P  DRV_6S  DRV_8S  <nowiki>PCISETUP.exe  README.TXT  SETUPX64  TOOLS

lqm@lqm:~/下载/CH35XDRV/CH35XDRV$ cd DRV_2S

lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S$ ls

DOS  LINUX  WINDOWS

lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S$ cd LINUX/

lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ ls

driver  Makefile  README  wchdump  wchmknod  wchterm

lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$

第三步:在LINUX目录下执行如下命令安装:

sudo make clean
sudo make install

实际操作时发现有如下错误提示:

cd wchmknod;\

    ./wchmknod

/bin/sh: line 1: ./wchmknod: 权限不够

<nowiki>make: *** [wchmknod_install] 错误 126

root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX#

进入./wchmknod目录,更改wchmknod文件权限,再编译即可:

root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX# cd wchmknod/

root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX/wchmknod# ls

wchmknod

root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX/wchmknod# ls -la

总计 12

drwxrwxrwx 2 lqm lqm 4096 2011-04-29 16:55 .

drwxrwxrwx 6 lqm lqm 4096 2011-04-29 16:55 ..

-r--r--r-- 1 lqm lqm  936 2010-09-20 04:48 wchmknod

root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX/wchmknod# chmod 777 wchmknod

再make install,即可安装成功。 

第四步:执行如下指令加载驱动

modprobe wch

或者

insmod driver/wch.ko

第五步:使用如下指令查询驱动是否正常加载:

lsmod | grep wch

示例如下:

<nowiki>
lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ lsmod |grep wch

wch                    58933  1 

lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ 

这里查找到了已经加载的驱动,表明驱动加载成功。

第六步:查看/dev下生成的相关节点:

<nowiki>
lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ ls /dev/ttyWCH*

/dev/ttyWCH0   /dev/ttyWCH11  /dev/ttyWCH14  /dev/ttyWCH17  /dev/ttyWCH2   /dev/ttyWCH22  /dev/ttyWCH25  /dev/ttyWCH28  /dev/ttyWCH30  /dev/ttyWCH4  /dev/ttyWCH7

/dev/ttyWCH1   /dev/ttyWCH12  /dev/ttyWCH15  /dev/ttyWCH18  /dev/ttyWCH20  /dev/ttyWCH23  /dev/ttyWCH26  /dev/ttyWCH29  /dev/ttyWCH31  /dev/ttyWCH5  /dev/ttyWCH8

/dev/ttyWCH10  /dev/ttyWCH13  /dev/ttyWCH16  /dev/ttyWCH19  /dev/ttyWCH21  /dev/ttyWCH24  /dev/ttyWCH27  /dev/ttyWCH3   /dev/ttyWCH32  /dev/ttyWCH6  /dev/ttyWCH9

lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$

表明节点已经成功生成。

第七步:使用minicom设置节点

sudo minicom -s

选择Serial port setup,回车,再选择A,将设备节点设置为/dev/ttyWCH0或/dev/ttyWCH1

保存退出,再开启minicom:

<nowiki>
Welcome to minicom 2.4



OPTIONS: I18n                                                                

Compiled on Jun  3 2010, 13:46:31.                                           

Port /dev/ttyWCH1                                                            



Press CTRL-A Z for help on special keys                                                              



OK                                                                                                   



U-Boot 1.3.4-dirty (Apr 20 2012 - 09:02:38) for SMDKV210                                             





CPU:  S5PV210@1000MHz(OK)               

        APLL = 1000MHz, HclkMsys = 200MHz, PclkMsys = 100MHz

        MPLL = 667MHz, EPLL = 96MHz     

                       HclkDsys = 166MHz, PclkDsys = 83MHz

                       HclkPsys = 133MHz, PclkPsys = 66MHz

                       SCLKA2M  = 200MHz

可见,PCI转串口驱动已经能够正常使用了。

第八步:以上步骤,仅仅是临时加载了驱动,ubuntu系统重启后,wch.ko文件并没有自动加载。因此,需要在ubuntu的启动脚本里面添加自动加载的命令。

编辑/etc/rc.d/rc.local文件,在最末尾添加如下语句:

modprobe wch

第九步:重启ubuntu系统,再次尝试串口是否能正常使用。