在开发机顶盒ROM时,有一些高效的开发技巧,可以让开发工作效率大大提升,本篇文章基于Android4.4.2系统,简单介绍下一些常见的高效调试方法。
   先说编译,是因为Android系统开发和Android应用开发有个明显不同的地方:完整ROM编译的时间会比较长,可能会达到一个小时以上,所以要谨慎全编版本。   先简单说下全编译版本,此处就以Hi3798MV300为例介绍,全编ROM的过程分为3个步骤:   说完了全编,接下来就要说单编某个模块。要单编模块,需要先执行source build/envsetup.sh和lunch Hi3798MV300H-eng命令,然后再执行单编命令。经常单编的模块如下:    3>so   除了这些公共的可以单编的模块,在不同的芯片平台,还有一些特殊的可以单编的模块,如在Amlogic905上,就有以下模块可以单编:   即Amlogic的bootloader,此处以gxlx_p261.dts配置为例,编译uboot文件方式如下:     3、在sdk/uboot目录执行: ./mk gxl_p211_v1    编译的命令为:make bootimage,此命令会同时生成boot.img和dt.img。   编译简单介绍完了,就要说调试了,机顶盒ROM的调试方式比较多样,就先接着第一章节,介绍一下上面的问题怎么替换。   第一章节编出来的文件有apk、so、bin、jar等,替换到out目录下对应的机顶盒路径中即可。这句话可能有点不好理解,例子如下:   替换文件时,除了apk、so、jar之外,别的(还有如:20-dns.conf、bootAnimation.zip等)都要保持替换前后权限一致。查看文件权限的命令是”ll filename“,文件权限为”r:4  w:2  x:1 “,常见的权限如下:   特殊的文件,可简单理解为不能直接替换到机顶盒中的文件,比如1.3章节中编出的文件,替换方式如下(usb_disk代表U盘挂载到终端后的路径):   要想让开发过程变得高效,常用的调试命令必须要能够熟练地使用。在不同的芯片平台上,U盘挂载后的路径是不同的,如下:   为方便表示,下文中的U盘路径均用usb_disk表示。   首先,要尽量将上述ADB命令与” |grep “结合使用,如”ll/ls”与” |grep”使用,可过滤特定名称的文件/文件夹;“getprop”与” |grep “使用,可过滤特定名称的属性;“dumpsys meminfo”与” |grep”使用,可过滤特定名称   在以上两个章节中,涵盖了较多的日常机顶盒ROM调试命令。除此之外,还有些命令之外的技巧需要积累,如下:   某些功能,在源码中是已经实现好了的,在检测ROM中是否包含该功能时,只需要检查特定的属性或文件即可。如:   当某一功能实现出现问题,要遵循”先硬件/环境,再软件“和”先底层,再上层“的排查思路,如下:文章目录
一、编译
1.1 版本全编
    1>source build/envsetup.sh
      该步骤其实是调用了build/envsetup.sh脚本,该脚本的作用是初始化编译环境,并引入一些辅助的Shell函数,如mm、mmm等。
    2>lunch Hi3798MV300H-eng
      该步骤是调用了lunch函数,这个函数后面的参数包含两部分:硬件类型和版本类型。
    3>make bigfish  -j 2>&1 | tee log_Hi3798MV300H.txt
      此时开始真正编译,make bigfish是编译版本的命令;2>&1是将将标准错误重定向到标准输出;tee log_Hi3798MV300H.txt是从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。简单来说,就是开始编译版本,并且将编译日志保存到log_Hi3798MV300H.txt文件。1.2 公共单编模块
    1>apk
      在packages/app/ApkName目录,执行mm -B即可。编出来的 Apk 在 out/target/product/Hi3798MV300H/system/app目录。
    2>jar
      此处指的是修改framework代码,单编命令也是mm -B,常见的单编命令执行目录及其对应的jar如下:
 
目录 
jar 
 
frameworks/base/services 
services.jar 
 
frameworks/base/policy 
android.policy.jar 
 
frameworks/base 
framework.jar 
      在调试播放器、HDMI等涉及到较底层代码时,常常会编译出so文件,如在device/hisilicon/bigfish/frameworks/hidisplaymanager/hal执行mm -B,会生成out/target/product/Hi3798MV300H/system/lib/hw/hidisplay.bigfish.so文件。
    4>bin
      在frameworks/base/cmds/bootanimation目录执行mm -B,会生成out/target/product/Hi3798MV300H/system/bin/bootanimation文件;在external/dhcpcd执行mm -B,会生成out/target/product/Hi3798MV300H/system/bin/dhcpcd文件。1.3 芯片特有单编模块
1.3.1 Uboot
    1、配置编译环境
      export PATH=sdk路径/toolchain/gcc-arm-none-eabi-6-2017-q2-update/bin/:$PATH
     2、修改makefile脚本diff --git a/uboot/Makefile b/uboot/Makefile index 641b28c..551c757 100755 --- a/uboot/Makefile +++ b/uboot/Makefile @@ -246,7 +246,7 @@ ifeq ($(HOSTARCH),$(ARCH))  CROSS_COMPILE ?=  endif   -export CROSS_COMPILE=/opt/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux/bin/aarch64-none-elf- +export CROSS_COMPILE=sdk路径/toolchain/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux/bin/aarch64-none-elf-    KCONFIG_CONFIG ?= .config 
     生成的uboot文件为:uboot/fip/gxl目录下的u-boot.bin、u-boot.bin.sd.bin、u-boot.bin.usb.bl2和u-boot.bin.usb.tpl。1.3.2 boot.img&dt.img
二、调试
2.1 文件替换
2.1.1 常规文件替换
 
源码目录 
机顶盒中路径 
 
out/target/product/Hi3798MV300H/system/bin/dhcpcd 
system/bin/dhcpcd 
 
out/target/product/Hi3798MV300H/system/framework/android.policy.jar 
system/framework/android.policy.jar 
 
out/target/product/Hi3798MV300H/system/lib/hw/hidisplay.bigfish.so 
system/lib/hw/hidisplay.bigfish.so 
 
out/target/product/Hi3798MV300H/system/app/BluetoothSet.apk 
system/app/BluetoothSet.apk 
 -rw------- (600)      只有拥有者有读写权限。     -rw-r--r-- (644)      只有拥有者有读写权限;而属组用户和其他用户只有读权限。     -rwx------ (700)     只有拥有者有读、写、执行权限。     -rwxr-xr-x (755)    拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。     -rwx--x--x (711)    拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。     -rw-rw-rw- (666)   所有用户都有文件读、写权限。     -rwxrwxrwx (777)  所有用户都有读、写、执行权限。 2.1.2 特殊文件替换
    1>boot.img
     cat  usb_disk/boot.img  >  /dev/block/boot
    2>uboot
     cat  usb_disk/u-boot.bin.sd.bin  >  /dev/block/bootloader2.2 常用调试命令
 
芯片 
常规U盘路径 
 
海思 
mnt/sda/sda1 
 
Amlogic 
storage/external_storage/sda1 
 
Mstar 
mnt/usb/sda1 
2.2.1 ADB命令
 
ADB命令 
串口命令 
意义 
 
adb connect IP:port 
– 
连接 Android 设备 
 
adb disconnect 
– 
断开 ADB 连接 
 
adb kill-server 
– 
关闭 PC ADB 调试,效果等同断开连接 
 
adb shell 
– 
进入 shell 模式,效果等同于串口连接 
 
adb remount 
mount -o remount,rw /system 
将 ‘/system’ 部分置于可写入的模式 
 
ll file(adb shell后) 
ll file 
查看文件权限 
 
chmod 755 file(adb shell后) 
chmod 755 file 
赋予文件755权限 
 
adb reboot 
reboot 
重启 
 
reboot recovery(adb shell后) 
reboot recovery 
重启后进入recovery 
 
adb install -r **.apk 
pm install -r  **.apk 
覆盖安装某个应用 
 
adb uninstall com.exp.test 
pm uninstall com.exp.test 
卸载某个应用(com.exp.test为应用的包名) 
 
pm list packages(adb shell后) 
pm list packages 
查看已安装的应用及其对应的包名 
 
adb logcat –c 
logcat -c 
清除log缓存 
 
logcat(adb shell后) 
logcat 
直接查看运行log 
 
adb logcat –v threadtime >E:1.log 
logcat -v threadtime -f  /sdcard/.log 
抓取1.log 
 
dmesg(adb shell后) 
dmesg 
直接查看运行内核log 
 
tcpdump -s 0 -i eth0 -w /data/dhcp.pcap(adb shell后) 
tcpdump -s 0 -i eth0 -w /data/dhcp.pcap 
抓网络包 
 
adb pull system/media/bootanimation.zip  E: 
cp -r system/media/bootanimation.zip usb_disk 
从终端中拷贝文件出来 
 
adb push E:Provision.apk system/app/Provision.apk 
cp -r usb_disk/Provision.apk system/app/Provision.apk 
替换文件到终端中 
 
adb shell sync 
sync 
将内存缓冲区中的数据 写入到磁盘 
 
am start -n 包名/完整Activity路径(adb shell后) 
am start -n 包名/完整Activity路径 
启动Activity 
 
am broadcast -a “broadcastactionfilter”(adb shell后) 
am broadcast -a “broadcastactionfilter” 
发送Broadcast 
 
am startservice “com.exm.test/.TestService”(adb shell后) 
am startservice “com.exm.test/.TestService” 
启动Service 
 
content query –uri content://stbconfig/authentication(adb shell后) 
content query –uri content://stbconfig/authentication 
查询ContentProvider内容 
 
am force-stop com.exp.test(adb shell后) 
am force-stop com.exp.test 
强制关闭应用 
 
screencap /sdcard/screen.png(adb shell后) 
screencap /sdcard/test.png 
截屏 
 
screenrecord /sdcard/demo.mp4(adb shell后) 
screenrecord /sdcard/demo.mp4 
录制视频 
 
input text “”(adb shell后) 
input text “” 
输入一段字符串 
 
input keyevent  23(adb shell后) 
input keyevent  23 
模拟按键 
 
dumpsys -l/service list(adb shell后) 
dumpsys -l/service list 
查看当前运行的Service 
 
dumpsys package(adb shell后) 
dumpsys package 
查看应用的四大组件信息 
 
dumpsys activity (adb shell后) 
dumpsys activity 
查询AMS服务相关信息 
 
dumpsys window(adb shell后) 
dumpsys window 
查询WMS服务相关信息 
 
dumpsys cpuinfo(adb shell后) 
dumpsys cpuinfo 
查询CPU情况 
 
dumpsys meminfo(adb shell后) 
dumpsys meminfo 
查询内存情况 
 
top(adb shell后) 
top 
查询试试内存情况 
 
ps(adb shell后) 
ps 
查看进程 
 
start adbd(adb shell后) 
start adbd 
启用adbd,可以使用adb连接功能 
 
stop adbd(adb shell后) 
stop adbd 
禁用adbd 
 
start console(adb shell后) 
start console 
启用串口调试功能 
 
stop console(adb shell后) 
stop console 
禁用串口调试功能 
 
getprop(adb shell后) 
getprop 
查看属性 
 
setprop prop_name prop_val(adb shell后) 
setprop prop_name prop_val 
设置属性值 
 
cat node_path(adb shell后) 
cat node_path 
查看节点值 
 
remotecfg(adb shell后,Amlogic上使用)  
stop ir_user(adb shell后,海思上使用)
busybox devmem 0x1f007b00 16 0x0000 (adb shell后,Mstar9380上使用)remotecfg(Amlogic上使用)  
stop ir_user(海思上使用)
busybox devmem 0x1f007b00 16 0x0000 (Mstar9380上使用)禁用红外遥控器使用功能 
 
./system/bin/remotecfg.sh(adb shell后,Amlogic上使用)  
start ir_user(adb shell后,海思上使用)
busybox devmem 0x1f007b00 16 0x01bf(adb shell后,Mstar9380上使用)./system/bin/remotecfg.sh(Amlogic上使用)  
start ir_user(海思上使用)
busybox devmem 0x1f007b00 16 0x01bf (Mstar9380上使用)启用红外遥控器使用功能 
 
settings get secure ntp_server (adb shell后) 
settings get secure ntp_server 
查看系统数据库中值 
 
settings put secure ntp_server cn.pool.ntp.org(adb shell后) 
settings put secure ntp_server cn.pool.ntp.org 
设置系统数据库中值 
 
wm size(adb shell后) 
wm size 
查看UI分辨率 
 
wm size 1920×1080(adb shell后) 
wm size 1920×1080 
修改UI分辨率 
 
wm density(adb shell后) 
wm density 
查看屏幕密度 
 
wm density 240(adb shell后) 
wm density 240 
修改屏幕密度 
 
cat /proc/cpuinfo(adb shell后) 
cat /proc/cpuinfo 
查看CPU信息 
2.2.2 LINUX命令
 
LINUX命令 
意义 
 
cd / 
cd –
cd dirA切换到根目录 
切换到上次操作目录
切换到dirA目录
 
pwd 
查看当前目录 
 
su userName 
切换用户 
 
df 
查看磁盘使用情况 
 
mkdir 
创建目录 
 
rm –f fileName 
强制删除文件 
 
rm –rf folderName 
强制删除文件夹(慎用) 
 
mv aName bName 
文件(夹)重命名 
 
cp –rf dirA dirB 
拷贝文件夹 A 内容到文件夹 B 
 
find . –name fileName 
在当前目录搜索某文件 
 
grep –rin “str” ./* 
在当前目录检索字符串 
 
tar –cvf test.tar ./fName 
压缩 fName 目录文件为 test.tar 
 
tar –xvf a.tar 
解压 test.tar 
 
make clean 
清除编译内容 
 
busybox md5sum fileName 
查看文件 md5 
 
java -Xmx2048m -jar signapk.jar   -w platform.x509.pem platform.pk8 test.apk test_sign.apk 
apk签名 
 
java -Xmx2048m -jar signapk.jar  -w testkey.x509.pem testkey.pk8 update.zip update_signed.zip 
update.zip签名 
2.2.3 VIM命令
 
VIM命令 
意义 
 
vi fileName 
打开文件 
 
:set nu 
显示行数 
 
/ 
检索 
 
:w 
保存修改 
 
:q 
退出 
 
i 
进入编辑模式 
 
Esc 
退出编辑模式 
 
dd 
删除一行 
2.2.4 GIT命令
 
VIM命令 
意义 
 
git branch 
查看本地分支 
 
git status . 
查看当前目录哪些文件修改过还未提交 
 
git diff filename/folderName 
查看某个文件/文件夹具体修改内容 
 
git log 
查看本地所以修改记录 
 
git log filename/folderName 
查看某个文件/文件夹修改记录 
 
git checkout fileName 
回退某个文件未提交的修改 
 
git pull 
更新本地代码,与服务器同步 
 
git show commitId 
查看某次 commit 内容 
 
git show –-stat commitId 
查看某次提交修改的文件 
 
git clone + gitUrl 
拉取远程代码到本地 
 
git checkout A B 
从分支 A 切换到分支 B 
 
git add/rm 
添加到暂存区/删除文件 
 
git commit –m “” 
将修改提交到本地 
 
git push origin branchRemoteName 
将本地分支修改提交到远程分支 
2.2.5 命令使用小技巧
 应用的内存使用情况;“logcat”与” |grep “使用,可过滤某些特定日志。
   其次,多使用模糊搜索/特定目录搜索,如:”find frameworks/base –name Window.java”可搜索 frameworks/base 目录下名称中带 Window 的java文件。
   再者,在 shell 界面使用 linux 命令时,命令前都要加上”busybox”。
   最后,在向机顶盒中 push 文件或从机顶盒向外 pull 文件后,尽量使用一下”adb shell sync”,来确保文件传输完整。三、积累关键功能调试经验
3.1 功能开关
   1>海思上的CEC开关
    persist.sys.hdmi.cec为true,代表打开该功能;为false,代表关闭该功能。
   2>海思上的HDMI待机开关
    persist.hdmi.suspend.enable为1,代表打开该功能;为0,代表关闭该功能;
    persist.hdmi.suspend.time为具体的待机时间,一般为5。
   3>Amlogic静帧功能
    system/etc目录下的blackout_whitelist.txt文件,文件内逐行写入要实现静帧功能的应用的包名、类名。
   3>Amlogic DHCP重连功能
    net.dhcp.repeat为enabled,代表打开DHCP重连功能;
    net.dhcp.repeat.count为重试次数。3.2 调试思路
    1>先硬件/环境,再软件
     遇到一个问题时,要先了解问题出现的具体情况,是否与环境、复现问题方式、机顶盒硬件有关,先做对比验证。确定是软件问题后,再从软件侧进行排查。
    2>先底层,再上层
     遇到一个问题时,可以先用命令从底层了解功能是否OK。如果底层OK,那就是上层调用逻辑出现了问题,再层层向上、逐步缩小debug范围。
   至此,高效的调试技巧已介绍完毕。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
官方软件产品操作指南 (170)