跳转至: 导航, 搜索

“Test”的版本间的差异

挂载TF卡
Android测试程序
第1,963行: 第1,963行:
 
 我们在x3288,x3399开发板上开发了强大的安卓测试软件,基本上可以测试开发板的所有硬件功能,它在产品量产,程序开发上有很大的参考价值。在APP界面点击安卓测试,即可进入测试界面,使用触摸屏左右滑动,或者用鼠标滑动可切换测试的硬件。
 
 我们在x3288,x3399开发板上开发了强大的安卓测试软件,基本上可以测试开发板的所有硬件功能,它在产品量产,程序开发上有很大的参考价值。在APP界面点击安卓测试,即可进入测试界面,使用触摸屏左右滑动,或者用鼠标滑动可切换测试的硬件。
  
===液晶屏测试===
+
=== 液晶屏测试 ===
  
[[image:Picture 46|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/5/57/Lcd-test.png
  
 
 在液晶屏测试界面,点击中间的任意纯色位置,会有不同的颜色变化,我们可以观察LCD是否有丢色,坏点等。
 
 在液晶屏测试界面,点击中间的任意纯色位置,会有不同的颜色变化,我们可以观察LCD是否有丢色,坏点等。
  
===触摸屏测试===
+
=== 触摸屏测试 ===
  
[[image:Picture 47|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/e/e6/Touch-test.png
  
 
 在触摸屏测试界面,点击开始测试,即可在屏幕上任意手写,在批量生产时,我们通常通过画对角线测试触摸电路是否正常。
 
 在触摸屏测试界面,点击开始测试,即可在屏幕上任意手写,在批量生产时,我们通常通过画对角线测试触摸电路是否正常。
  
===发光二极管测试===
+
=== 发光二极管测试 ===
  
[[image:Picture 48|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/6/66/Led-test.png
  
 
 点击图片上任意的灯,为红色时,对应开发板上的LED灯亮,为灰色时,对应LED灯灭。
 
 点击图片上任意的灯,为红色时,对应开发板上的LED灯亮,为灰色时,对应LED灯灭。
  
===蜂鸣器测试===
+
===蜂鸣器测试 ===
  
[[image:Picture 49|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/2/2b/Beep-test.png
  
 
 按住开始测试键,蜂鸣器会鸣叫,松开开始测试键,蜂鸣器停止鸣叫。
 
 按住开始测试键,蜂鸣器会鸣叫,松开开始测试键,蜂鸣器停止鸣叫。
  
===背光测试===
+
=== 背光测试 ===
  
[[image:Picture 50|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/e/e5/Backlight-test.png
  
 
 划动中间的圆圈,背光亮度会随之发生变化。
 
 划动中间的圆圈,背光亮度会随之发生变化。
  
=== 风扇 测试===
+
=== 按键 测试 ===
  
[[image:Picture 51|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/d/d0/Key-test.png
 
 
风扇测试仅仅是对驱动风扇的IO口电平进行开关控制,由于开发板默认没有配风扇,用户可以用万用表自行测试。
 
 
 
===按键测试===
 
 
 
[[image:Picture 52|553x325px]]
 
  
 
 按下或抬起开发板上四个独立按键的任意一个,界面上将会提示对应的按键的按下和抬起动作。
 
 按下或抬起开发板上四个独立按键的任意一个,界面上将会提示对应的按键的按下和抬起动作。
  
===电池测试===
+
=== 电池测试 ===
  
[[image:Picture 53|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/2/29/Battery-test.png
  
 
 该界面反应了接在开发板上的电池电量信息。
 
 该界面反应了接在开发板上的电池电量信息。
  
===数模转换测试'''
+
=== 数模转换测试 ===
  
[[image:Picture 54|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/e/e4/Adc-test.png
  
 
 监测四路ADC的电压。我们可以通过调节开发板上的精密可调电位器,观察上面对应通道的电压是否变化。
 
 监测四路ADC的电压。我们可以通过调节开发板上的精密可调电位器,观察上面对应通道的电压是否变化。
  
===重力传感器测试===
+
=== 重力传感器测试 ===
  
[[image:Picture 55|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/6/6f/Gsensor-test.png
  
 
 旋转开发板时,上面的X,Y,Z轴的值会随之发生变化。
 
 旋转开发板时,上面的X,Y,Z轴的值会随之发生变化。
  
=== 陀螺仪测试===
+
=== 音频测试 ===
 
 
 
 
 
 
[[image:Picture 56|553x325px]]
 
 
 
  旋转开发板时,上面的X,Y,Z轴的值同样会随之发生变化。受开发板批次问题,默认开发板上有可能没有焊接陀螺仪,但是软件功能上已经完全调通。
 
 
 
===指南针测试===
 
 
 
[[image:Picture 57|553x325px]]
 
 
 
旋转开发板时,上面的X,Y,Z轴的值同样会随之发生变化。受开发板批次问题,默认开发板上有可能没有焊接指南针芯片,但是软件功能上已经完全调通。
 
 
 
===光线传感器测试===
 
 
 
 
 
 
 
[[image:Picture 58|553x325px]]
 
 
 
    用手遮住和放开光线传感器的感光口,或用灯光照射光线传感器,对应的亮度值会随之发生变化。受开发板批次问题,默认开发板上有可能没有焊接指南针芯片,但是软件功能上已经完全调通。
 
 
 
=== 音频测试===
 
  
[[image:Picture 59|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/c/cb/Audio-test.png
  
 
 点击开始测试,会听到有清脆的声音出来。
 
 点击开始测试,会听到有清脆的声音出来。
  
===摄像头测试===
+
=== 摄像头测试 ===
  
[[image:Picture 60|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/d/dd/Camera-test.png
  
 
 装上摄相头,点击开始测试,会看到摄像头抓到的预览界面显示出来。
 
 装上摄相头,点击开始测试,会看到摄像头抓到的预览界面显示出来。
  
===无线网络测试===
+
=== 无线网络测试 ===
  
[[image:Picture 61|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/5/54/Wireless-test.png
  
 
 使用WIFI连上无线网络后,无线网络测试界面会搜索到附近的网络并列出来。
 
 使用WIFI连上无线网络后,无线网络测试界面会搜索到附近的网络并列出来。
  
===网络连接测试===
+
===   网络连接测试 ===
  
[[image:Picture 62|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/5/54/Internet-test.png
  
 
 当有线或无线网络正常连接时,网络连接测试界面可以浏览网页。
 
 当有线或无线网络正常连接时,网络连接测试界面可以浏览网页。
  
===串口测试===
+
=== 串口测试 ===
  
[[image:Picture 63|553x325px]]
+
http://x.9tripod.com/wiki/zh/images/a/a9/TtyAMA-test.png
  
 
 将需要测试的串口的TXD和RXD短路,再点击开始测试,界面上会提示对应串口会自发自收0123456789。如果不能自发自收,说明对应的串口硬件有问题。
 
 将需要测试的串口的TXD和RXD短路,再点击开始测试,界面上会提示对应串口会自发自收0123456789。如果不能自发自收,说明对应的串口硬件有问题。
  
 +
=== 外部存储器测试 ===
 +
 +
http://x.9tripod.com/wiki/zh/images/f/f3/Sdcard-test.png
 +
 +
将TF卡插到开发板上,点击开始测试,界面上会显示TF卡的相关信息。
 +
 +
===  优盘测试 ===
 +
 +
http://x.9tripod.com/wiki/zh/images/d/d0/Udisk-test.png
  
 +
将U盘插到开发板上,点击开始测试,界面上会显示U盘的相关信息。
  
 
==android内核驱动==
 
==android内核驱动==

2017年3月3日 (五) 12:23的版本

目录

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将服务器仓库提交到本地

553x36px

提示出错,有两种解决办法,第一种,先将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。

正常的操作如下:554x178px

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

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

555x109px

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

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

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

或者使用下面的指令:

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

第四步:使用git commit命令注释修改的内容到仓库553x65px

第五步:使用git push指令将修改的文件提交到服务器

553x88px

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

实战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系统,再次尝试串口是否能正常使用。