PX30 Android 8.1.2 Manual
目录
android开发平台的搭建
Android系统编译整套源码包对PC机硬件要求很高,请直接安装Linux操作系统,充分发挥PC机的性能,不要企图通过虚拟机顺利开发。我们这里以ubuntu14.04 64位系统机器为例讲解,如果您是新手,建议与我们版本保持一致。
使用U盘安装ubuntu
使用U盘安装ubuntu系统简单快捷,强烈推荐使用此方法安装。
安装工具:
- 2G以上U盘一个
- lili usb creater 软件,下载地址:http://www.linuxliveusb.com/
- ubuntu最新系统,下载地址:[http://www.ubuntu.com/download/{.underline}]
- PC机一台
安装方法:
第一步:下载好ubuntu的ISO文件,和lili usb creater这个软件并安装。
第二步:插入usb,并打开usb creater 这个软件,根据软件提示设置,在步骤1中选择安装盘,找到识别出的U盘;在步骤2中找到下载的ubuntu映像文件;步骤3默认,步骤4中选中隐藏优盘上创建的文件,使用FAT32格式化U盘;最后在步骤5中点击闪电图标开始安装,直到提示优盘已安装完成为止。
[[File: 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文件,可以看到最末尾有如下语句:
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 ###
仔细阅读该文件,发现有不少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下安装源码比较工具
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
[ 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
表示串口设备名称为ttyUSB0。有时会提示如下错误:
lqm\@lqm:~$ dmesg | tail -f
[ 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
一般情况下重插拨一次USB转串口线即可。
ubuntu下安装串口终端picocom
picocom 是一款linux下的串口调试工具,它比minicom精巧的多,在使用minicom调试时,有时我们会手动清除之前的调试信息,这时minicom再次接收串口调试数据时,不会再从顶端显示打印信息,而是从最末一行,程序员看起来会很别扭。而picocom并不会出现这种BUG。使用如下指令安装picocom:
sudo apt-get install picocom
安装完成后,执行如下指令打开picocom:
sudo picocom -b 115200 /dev/ttyUSB0
这里115200表示波特率,/dev/ttyUSB0表示PC机上的调试串口的设备节点,用户根据实际情况进行调整。
Android开发工具
SDK
谷歌公司开发的Android Studio提供用于为各类 Android 设备开发应用的最快速的工具。利用世界一流的代码编辑、调试、性能工具、一套灵活的构建系统以及一套即时构建/部署系统,您可以专注于构建独特的高品质应用。
网上下载最新的SDK,下载地址为:[[http://developer.android.com/sdk/index.html{.underline}。用户可根据自身的PC机系统选择对应的安装包,]]如下图所示:
adb工具
安装adb工具
在光盘中找到fastboot_adb.rar文件,解压出来,将fastboot文件夹下面的adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll以及fastboot.exe四个文件拷贝到C:\Windows\System32目录,如果是64位系统,需要同时拷贝到C:\Windows\SysWOW64目录,adb和fastboot即安装成功。
查看设备的连接状态
开发板上电,进入 setting,选择" developer options",勾选" USB debugging"进入WINDOWS下的CMD命令行,输入如下命令验证开发板是否连接:
adb devices
显示下面内容表示成功连接:
进入adb shell
使用如下命令进入开发板终端:
adb shell
如下图所示:
输入exit退回DOS操作界面。注意,有时候,执行adb devices命令时,会提示error: more than one device and emulator,很有可能是播放了USB设备造成的。这时已经无法再通过adb传输数据,解决的办法很简单,如果是使用windows,直接在进程中干掉adb.exe,再启动adb即可。
串口工具secureCRT
安装secureCRT工具,在计算机设备管理器中找到COM口号,点击"快速连接",如下图:
协议选择serial(我的设备是COM2),其他选项按照下图所示选择,右侧三个流控制选项不能勾选!
接下来用USB转串口线接到开发板的调试串口与PC即可看到调试串口打印的log信息。
安装android源码包
安装android源码依赖包
说明:本文档所有开发全部基于ubuntu14.04 64位系统,后续不再声明。
使用如下命令安装所需的软件包(安装前使用sudo apt-get update 获得一下最近的软件包的列表):
sudo apt-get install git-core gnupg 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
px30 android8编译需要jdk8,软件包可以从sun官网下载,也可以使用网盘提供的压缩包(网盘资料DVD_X30/tools/JDK/)java-8-openjdk-amd64.tar.bz2文件,将此文件下载后复制到PC Ubuntu系统下,解压到/usr/lib/jvm/目录下:
sudo tar xjf java-8-openjdk-amd64.tar.bz2 -C /usr/lib/jvm
注意:这样安装了jdk8后不会覆盖PC Ubuntu系统原来使用的jdk,当px30 android8编译需要使用时键入命令:
export PATH=/usr/lib/jvm/java-8-openjdk-amd64/bin:$PATH
另,Android8编译时为了操作方便,统一使用编译脚本mk.sh(编译脚本一般放在整套SDK源码的根目录,命名为mk.sh或mk)来编译,以上命令可以在编译脚本看到。
安装交叉编译工具链
我们已经将交叉编译工具链集成到源码包中,无需再手动安装。交叉编译工具链路径:
prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/
注意:如果需要详细获取具体使用哪种交叉编译器,可以进入文件kernel/Makefile文件,搜索关键词CROSS_COMPILE,在arm64的那项可发现。
安装64位系统必要的一些补丁包
apt-get install lsb-core libc6-dev-i386 g++-multilib lib32z1-dev lib32ncurses5-dev
指定GCC交叉编译器
注:本节是其他代码编译需要准备的环境,不适用PX30 Android8环境,仅供参考。
在ubuntu系统上安装最新的GCC交叉编译器时,版本已经超过4.4了,使用如下指令可查询GCC的版本:
gcc --version
可能出现的界面如下:
terry\@ubuntu-server:~$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright © 2011 Free Software Foundation, Inc.
terry\@ubuntu-server:~$
上面显示4.6.3版本,默认我们给出的包,在4.6.3上编译会提示一些错误,都是新的GCC引出的错误,网上都有解决办法,如果不想修改这些错误,可将GCC版本降至4.4即可。解决办法 :
sudo apt-get install gcc-4.4 g++-4.4 g++-4.4-multilib
装完后,开始降级gcc ,这不会影响系统,仅仅是改个链接而已,不喜欢的话改回来即可。
cd /usr/bin
sudo mv gcc gcc.bk
sudo ln -s gcc-4.4 gcc
sudo mv g++ g++.bk
sudo ln -s g++-4.4 g++
安装android源码包
PX30 Android8源码包获取方式有:从网盘获取,从gitlab获取。
方法1:从网盘获取
从网盘DVD_X30/source/目录下获取Android8.1的源码包px30_oreo.tar.bz2,将其复制到本地PC Ubuntu系统用户目录下,解压:
tar xjf px30_oreo.tar.bz2
压缩包解压完成后在px30_oreo目录下只有一个目录.git,需要下面的操作才可以获取源码:
cd px30_oreo
git checkout .
稍等片刻待此指令执行完成后即可获取源码。
如果需要更新源码,首先确定是否包含http://gitlab.com/9tripod/px30_oreo.git这一项:
$ git config --list
如果不存在,请执行以下指令添加:
git remote add gitlab http://gitlab.com/9tripod/px30_oreo.git
添加后再次执行git config --list即可看到以上内容,然后更新:
git pull gitlab
方法2:从gitlab获取代码
进入普通用户某目录下,键入指令:
git clone http://gitlab.com/9tripod/px30_oreo.git
等待下载完成后,可在当前目录下获取px30_oreo,进入目录即可获取源码。
如果因为网络问题总是中断,可从网盘下载初始包(见上面方法1),同样获取到源码,然后更新(注意更新源操作同方法1,添加同样使用git remote add):
git pull gitlab
说明:源码包名称可能会因发布日期等有所不同,具体以网盘中实际名称为准。
编译android源码包
说明:编译映像时一定要使用普通权限编译。编译生成的镜像统一放在out/release目录下,包括MiniLoaderAll.bin、uboot.img、trust.img、resource.img、kernel.img、boot.img、misc.img, recovery.img、system.img、vendor.img、oem.img、update-android.img
编译uboot
在android源码目录下执行如下命令编译uboot,编译完成后映像文件会释放到out/release目录:MiniLoaderAll.bin、uboot.img、trust.img
./mk -u
编译android内核
在android源码目录下执行如下命令编译android内核,编译完成后映像文件kernel.img、resource.img会释放到out/release目录。
./mk -k
编译android文件系统
在android源码目录下执行如下命令编译android映像文件,编译完成后映像文件会释放到out/release目录。
./mk -s
编译完文件系统,在out/release目录下会生成如下文件:
- MiniLoaderAll.bin、uboot.img、trust.img: uboot映像文件
- Kernel.img:内核映像
- Resource.img:资源映像,内含开机图片和内核的设备树信息。
- Boot.img: Android的初始文件映像,负责初始化并加载system分区。
- System.img:android的system分区映像,ext4文件格式系统。
- Recovery.img:急救模式映像。
- Misc.img:分区映像,负责启动模式切换和急救模式的参数传递。
- oem.img:用于给厂家使用,存放厂家的APP或数据。只读
- update-android.img:整个升级文件的单一映像,包括了uboot,内核,文件系统等。
查看编译帮助
执行如下指令可查询mk脚本使用方法:
./mk -h
"-u"表示编译uboot
"-k"表示编译内核
"-s"表示编译Android文件系统
"-U"表示所有的镜像编译完成后执行打包程序(生成update-android.img镜像)
"-j="表示多线程编译(比如-j=20)
"-a"表示所有的都执行。注意,"-a"等同于"./mk.sh -u -k -s -U"
烧写android映像文件
Windows系统映像烧写
RKTool驱动安装
解压RKTools.rar,工具路径:SDK\RKTools\windows\Release_DriverAssitant,打开"DriverInstall.exe",点击"驱动安装",提示安装驱动成功即可。
注意事项:\ 1.目前支持的操作系统包括:XP,Win7_32,Win7_64,Win8_32,Win8_64。\ 2.XP系统在驱动安装完后,若还提示"发现新设备", 安装驱动时选择"自动安装"。\ 3.若之前已经安装过老版本驱动,请先点击"驱动卸载"后再进行"驱动安装"。
烧录方法一:单个升级固件update-android.img
生成统一固件update-android.img
我们已经在mk脚本中集成了生成统一固件的方法,把所有的镜像编译完成后执行-U即可打包,释放到out/release目录。
烧录固件update-android.img
打开源码包目录下的RKTools\windows\AndroidTool\AndroidTool_Release_v2.58\AndroidTool.exe,选择"升级固件"选项卡,点击"固件",在弹出窗口中选择已经生成的update.img 文件,如下图所示。
工具配置好后,连接开发板(如下图):
按下RECOVERY键,然后插上microUSB线与12V DC电源线,烧录工具界面会提示发现一个LOADER设备,然后点击升级,即可开始升级过程(注:如果提示发现一个ADB设备,点击切换按钮切换成LOADER设备即可)。
上图为升级完成截图。
烧录方法二:多设备升级固件update.img
该工具适合用户批量刷机,可以同时给多台开发板刷机。
从代码目录下获取文件RKTools\windows\FactoryTool_v1.63.zip,将其解压,打开"FactoryTool.exe",点击"固件"选择update-android.img,勾选"升级",点击"启动",如下图所示:
步骤1:点击固件,选择update-android.img;
步骤2:点击启动(选择升级按钮);
步骤3:连接开发板USB、DC电源,按下recovery键,对应USB口发现设备,并实现自动升级;然后重复步骤3即可同时升级第二台、第三台设备,升级成功或者失败的设备会在两边的列表中列出,移除成功或者失败的设备后可以继续连接需要升级的设备。
Linux系统烧写映像
生成固件update.img
我们已经在mk脚本中集成了生成统一固件的方法,在编译android文件系统时(./mk -s),会自动生成update.img,并释放到out/release目录。
烧录固件update-android.img
工具路径:RKTools\linux\Linux_Upgrade_Tool_v1.2
在升级之前将update.img拷贝到upgrade_tool相同目录下,运行upgrade_tool(需要sudo)
work\@ubuntu:~/3288/Linux_Upgrade_Tool_v1.2/cp rockdev/update.img .
work\@ubuntu:~/3288/Linux_Upgrade_Tool_v1.2$ sudo ./upgrade_tool
执行结果如下图,发现设备列表,输入要升级的DevNo(设备号)选择设备fig:
选择设备后弹出工具使用菜单如下图,左侧是功能描述,右侧是命令语法,升级相关操作都在upgrade command列表下,忘记命令语法可以输入H进行查看,清屏输入CS,退出按Q。
- CD命令:选择设备,当执行的命令有包含设备重启操作时,需重新选择设备,当改变操作设备时需重新选择
- SD命令:msc切换到rockusb升级模式。 当切换执行成功后, 需要重新选择设备
- UF命令:升级完整update.img固件,当执行成功后需要重新选择设备
- 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.img开始更新固件,下图为更新完成截图。
Rockusb>uf update.img
备注:也可通过配置config.ini文件配置升级映像文件,只需输入UF即可升级,请用户自行尝试。
使用upgrade_tool指令烧写映像
上一节我们介绍了通过upgrade_tool烧写统一固件update.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 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.img(烧写统一固件)
使用Rkflashkit烧写映像
rkflashkit 有图形界面,后加了命令行支持,更是好用。
work\@ubuntu:~/rktool$ sudo apt-get install build-essential fakeroot
work\@ubuntu:~/rktool$ git clone 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
注意:rkflashkit_0.1.4_all.deb会因版本更新,版本数字可能会有所变化,如果执行失败,执行ls命令查看下即可。
work\@ubuntu:~/rktool/$ sudo rkflashkit
如下是图形界面,在Devices下选择设备,选择要烧写的分区和对应的映像文件,点击Flash image即可。
该工具也支持命令行,使用help命令查看使用方法
work\@ubuntu:~/rktool/rkflashkit$ rkflashkit --help
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$
使用TF卡升级固件
功能说明
注:此功能等待后续验证,暂未实现,以下是其他平台的参考。
SD Card Boot功能是主控在上电时,优先从SD卡上查找启动代码,然后加载引导,从而实现特定功能。目前SD Card Boot已经实现两个功能:SD卡升级和SD卡运行。
SD卡升级功能,将SD卡启动代码写到SD卡的保留区,然后将固件拷贝到SD卡可见分区上,主控从SD卡启动时,SD卡启动代码和升级代码将固件升级到本地主存储中,并支持PCBA测试和Demo文件的拷贝。可以完全做到脱离PC机进行固件升级,提高生产效率。
SD卡运行功能,将固件升级到SD卡保留区中,把SD卡当作主存储使用。主控从SD 卡启动时,固件已经存放在SD卡上,有没有本地主存储都可以正常工作。目前主要应用是板卡厂做PCBA测试,而不会破坏flash数据。
软件说明
工具目录有如下文件:
SD_Firmware_Tool.exe:制卡工具
Config.ini:配置文件
SDBoot.bin:SDRK2926、RK2928、RK3166和RK3188使用SDBoot.bin支持SD卡升级和启动功能;RK3288使用RK3288Loader_uboot_V2.16.bin及以后版本。
制作前软件配置
编辑config.ini配置文件以下项目设置为TRUE
- #当值为TRUE时,新卡格式适用3288项目
- USE_FW_LOADER=TRUE
工具界面如下:
制作
注意:制作启动卡会格式化SD卡,用户需要注意备份重要数据,防止误删。
第一步,选择对应的可移动磁盘设备;
第二步,选择功能模式:固件升级、PCBA测试、SD启动;
- 默认会勾选"固件升级",即只升级固件。
- 如果在升级固件前需要做 "PCBA 测试",则同时勾选"固件升级"、"PCBA测试"。
- 如果不升级固件,只需要测试PCBA,则单选"PCBA测试",不选择"固件升级"。
- "SD启动"会把固件烧写到SD中,所有分区都分配在SD卡上,运行时不会修改内部存储的数据(相当于SD卡做主存储设备)。
注意:SD卡运行模式,对kernel的编译有要求,需要把kernel的SD卡驱动配置去掉,不参与编译。
修改为:
第三步,选择对应平台的update.img固件;
第四步(可选),如果需要拷贝demo文件到用户盘根目录,点击选择Demo按钮,选择需要拷贝的文件目录。选择的目录下所有文件会拷贝到SD根目录下的Demo目录中,在SD引导固件升级后,Demo目录下的文件会拷贝到样机用户盘的根目录下。
第五步,点击开始创建即可。
划动中间的圆圈,背光亮度会随之发生变化。
android内核驱动
G-sensor驱动
路径:kernel/drivers/input/sensors/accel/lis3dh.c
hardware/rockchip/sensor/st
文件:lis3dh.c及st目录
电容触摸屏驱动
路径:kernel/drivers/input/touchscreen/
源码:gslX680.c
液晶屏驱动
路径:kernel/drivers/gpu/drm/panel/
源码:panel-simple.c
注:显示驱动基于drm框架,不止这些文件,基本位于kernel/drivers/gpu/drm目录下
按键驱动
路径:kernel/drivers/input/keyboard
源码:rk_keys.c adc-keys.c
WIFI/BT模块驱动
路径:kernel/drivers/net/wireless/rockchip_wlan
源码:该目录下所有源码文件
摄像头驱动
路径:hardware/rockchip/camera/SiliconImage/isi/drv
源码:该目录下
proc文件系统
启动环境变量查询
使用如下指令查询启动环境变量配置:
cat /proc/cmdline
会有如下类似打印信息:
storagemedia=emmc androidboot.mode=emmc androidboot.oem_unlocked=0 earlyprintk=uart8250,mmio32,0xff160000 swiotlb=1 console=ttyFIQ0 androidboot.baseband=N/A androidboot.veritymode=enforcing androidboot.hardware=rk30board androidboot.console=ttyFIQ0 init=/init kpti=0
CPU信息查询
使用如下指令查询CPU信息:
cat /proc/cpuinfo
会有如下类似打印信息:
px30:/ # 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 : 0xd04
CPU revision : 2
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 : 0xd04
CPU revision : 2
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 : 0xd04
CPU revision : 2
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 : 0xd04
CPU revision : 2
Serial : edb5c6db7629d0f1
内存信息查询
使用如下指令查询内存使用信息:
cat /proc/meminfo
会有如下类似打印信息:
px30:/ # cat /proc/meminfo
MemTotal: 977612 kB
MemFree: 37360 kB
MemAvailable: 568044 kB
Buffers: 3152 kB
Cached: 566344 kB
SwapCached: 0 kB
Active: 285836 kB
Inactive: 498400 kB
Active(anon): 107816 kB
Inactive(anon): 135952 kB
Active(file): 178020 kB
Inactive(file): 362448 kB
Unevictable: 256 kB
Mlocked: 256 kB
SwapTotal: 488268 kB
SwapFree: 488256 kB
Dirty: 432 kB
Writeback: 0 kB
AnonPages: 215068 kB
Mapped: 405048 kB
Shmem: 29056 kB
Slab: 64960 kB
SReclaimable: 26980 kB
SUnreclaim: 37980 kB
KernelStack: 12512 kB
PageTables: 20084 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 977072 kB
Committed_AS: 53788924 kB
VmallocTotal: 258867136 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
CmaTotal: 16384 kB
CmaFree: 15060 kB
磁盘分区信息查询
使用如下命令查询磁盘分区信息:
cat /proc/partitions
会有如下类似打印信息:
px30:/ # 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 488272 zram0
179 0 7634944 mmcblk2
179 1 4096 mmcblk2p1
179 2 4096 mmcblk2p2
179 3 4096 mmcblk2p3
179 4 16384 mmcblk2p4
179 5 32768 mmcblk2p5
179 6 32768 mmcblk2p6
179 7 65536 mmcblk2p7
179 8 114688 mmcblk2p8
179 9 4096 mmcblk2p9
179 10 393216 mmcblk2p10
179 11 1572864 mmcblk2p11
179 12 16384 mmcblk2p12
179 13 393216 mmcblk2p13
179 14 131072 mmcblk2p14
179 15 512 mmcblk2p15
179 16 4840943 mmcblk2p16
179 96 512 mmcblk2rpmb
179 64 4096 mmcblk2boot1
179 32 4096 mmcblk2boot0
内核版本查询
使用如下命令查询内核版本:
cat /proc/version
会有如下类似打印信息:
px30:/ # cat /proc/version
Linux version 4.4.138 (lxb\@9tripod-server) (gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05) ) #9 SMP PREEMPT Wed Feb 20 20:21:04 CST 2019
网络设备查询
使用如下命令查询网络设备信息:
cat /proc/net/dev
会有如下类似打印信息:
px30:/ # 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: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
wlan0: 0 0 0 0 0 0 0 0 168 2 0 0 0 0 0 0
eth0: 68045 1003 0 0 0 0 0 0 29109 272 0 0 0 0 0 0
查看内核启动信息
使用如下命令查询内核启动信息:
cat /proc/kmsg
android开发项目实战
实战1:如何修改init.rc文件
永久修改
在system/core/rootdir目录下找到init.rc文件,修改后执行./mk --s,将会生成新的system.img文件,重新烧写system.img即可更新init.rc。注意,在编译时,首先需要先将out目录下的init.rc删除后再编译,否则可能不会生效。
临时修改
默认init.rc在ramdisk.img中,ramdisk.img又被打包到boot.img中,因此,如果我们需要临时修改boot.img,首先需要解压boot.img,再手动修改我们需要修改的内容,再打包即可。为此,我们特别编写了解压和压缩的脚本文件。
在android根目录下,新建脚本文件ramdisk.sh,编辑内容如下:
- !/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。
实战2:如何修改开机动画
默认android启动时,会有android的英文字母不断高亮滚动显示,构成了一幅美丽的开机动画。其实这个开机动画是可以定制的,有兴趣的读者可以自行尝试。
实战3:如何修改uboot中的开机LOGO
瑞芯微官方提供的uboot会读取kernel根目录下的logo.bmp和logo_kernel.bmp两个文件,分别用于做uboot和内核的开机LOGO,uboot和内核的LOGO显示全部是由uboot完成的。其中logo.bmp用作uboot的开机LOGO,logo_kernel.bmp用作内核的开机LOGO。值得注意的是,如果我们要将uboot和内核显示的LOGO设置得相同,并不能简单的复制,因为他们的图片格式是有区别的。logo.bmp支持8b的bmp格式图片,而logo_kernel.bmp只支持压缩后的8b的bmp格式图片,因此logo_kernel.bmp实际上要比logo.bmp的尺寸要小得多。而且在实际显示时,很明显的看到显示内核LOGO时,如果颜色比较丰富,就会失真。为了只显示一幅图片,我们直接将kernel目录下的logo_kernel.bmp删除即可。
如果我们需要换uboot的开机LOGO,找一张分辨率不是太大的图片,转换成BMP格式,然后使用WINDOWS的图库编辑功能,转换成8b模式,保存并替换kernel目录下的logo.bmp即可。注意,如果LOGO的分辨率设置得过大,也可能导致无法显示。如果需要全屏开机LOGO,默认的uboot代码就不适用了,需要重新移植。
实战4:如何修改内核中的LOGO
同上,找一张分辨率不是太大的图片,转换成BMP格式,在WINDOWS的图片编辑软件下转换成8b模式后,还需要借助于linux下强大的gimp工具,将图片压缩,内核LOGO才能显示出来。默认瑞芯微提供的这套方案,内核LOGO分辨率不够大,而且会明显失真,无法显示真彩图片,如果开发的工程师一定要显示完美的内核LOGO,建议使用linux下标准的开机LOGO方案。
配置使用MIPI屏
在kernel/arch/arm64/boot/dts/rockchip目录下存放了多个已经调试好的液晶屏的配置文件,7寸RGB屏的配置文件为lcd_1024x600_rgb.dtsi,7寸MIPI屏的配置文件为lcd_1024x600_mipi.dtsi。在kernel/arch/arm64/boot/dts/rockchip/x30_evb.dts中选择配置使用的液晶模组即可,如需要使用7寸MIPI屏,示例代码如下:
- include "lcd_1024x600_mipi.dtsi" //7ch mipi panel
//#include "lcd_1024x600_rgb.dtsi" // 7ch rgb panel