2851

速查。

编译

进入到code的Android版本目录,“pie”是Android 9

1
$ cd kernel/android/pie  

初始化编译环境

1
$ source build/envsetup.sh  

选择板型

1
$ lunch  

进入到APK目录

1
$ cd vendor/realtek/app/HKMediaBrowser  

编译

1
$ mm  

kernel/android/pie/frameworks/base/services目录下的东西,需要到这个目录下执行mmeng版本会生成services.jar,user-debug会生成services.jar``services.jar.prof``oat/arm/services.art``oat/arm/services.odex``oat/arm/services.vdex

编译kernel模块

1
$ make -C kernel/linux/linux-4.14/ CROSS_COMPILE=../../../kernel/system/tmp/toolchain/asdk-6.4.1-a55-EL-4.4-g2.26-a32nut-170810/bin/asdk-linux- modules  

挂载分区

1
2
$ mount -o rw,remount /  
$ mount -o rw,remount /vendor

更新API

1
2
3
4
$ cd kernel/android/pie  
$ source build/envsetup.sh
$ lunch
$ make update-api

Android分区查看

  • 查看分区数
    1
    $ cat /proc/partitions  
  • 查看分区名字
    1
    $ ls -l /dev/block/by-name/  
  • 查看分区挂载点
    1
    $ cat /proc/mounts  
  • 查看磁盘使用情况
    1
    $ df -h  
  • 记录当前系统所有挂载文件系统的信息
    1
    $ cat /proc/self/mountinfo

格式化一个分区

1
2
3
$ mke2fs -t ext4 /dev/block/mmcblk0p14 > /dev/null
$ mke2fs -t ext4 /dev/block/mmcblk0p14 > /dev/null
$ mke2fs -t ext4 /dev/block/mmcblk0p3 > /dev/null

dumpsys

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ dumpsys -l #查看当前所有的系统服务名称,接着就可以通过dumpsys + name查看某个服务的具体信息  
$ dumpsys activity #查询AMS服务相关信息
$ dumpsys window #查询WMS服务相关信息
$ dumpsys cpuinfo #查询CPU情况
$ dumpsys meminfo #查询内存情况
$ dumpsys input #查询linux event与android keyevent的映射

$ dumpsys activity a packagename #获取某个应用的Activity信息
$ dumpsys activity s packagename #获取某个应用的Service信息
$ dumpsys activity b packagename #获取某个应用的Broadcast信息
$ dumpsys activity prov packagename #获取某个应用的Provider信息
$ dumpsys activity p packagename #查询某个应用的进程状态

$ dumpsys activity top #当前界面app状态
$ dumpsys activity oom #查看进程状态

$ dumpsys usb dump-descriptors -dump-list #查看USB描述符状态


$ dumpsys activity | grep Focuse
1
2
3
$ cd kernel/android/nougat/packages/apps/  
$ find -name "AndroidManifest.xml" | xargs grep -wnr "com.android.tv.settings"
$ ls kernel/android/nougat/packages/apps/TvSettings/Settings

ADB使用

单板设置:

1
2
3
setprop service.adb.tcp.port 5555  
start adbd
ifconfig

PC机设置:
ipconfig确认IP是否跟单板在同一个网段上
Ping单板的IP
连接:

1
2
3
$ adb connect 192.168.1.105:5555  
$ adb shell
$ adb kill-server #终止adb服务进程

logcat

常用功能:

1
2
3
4
5
6
7
$ logcat -c #清空所有的日志缓存信息  
$ logcat -G 10M #设置缓存区大小为10M
$ logcat -s MainActivity #设置输出日志的标签,只显示MainActivity标签的日志
$ logcat -v time #设置日志的输出格式,log带有日期
$ logcat | grep <过滤内容> #根据内容过滤log
$ logcat CRYPTO:S #S表示为不输出该标签的日志
$ logcat | grep -vE "CRYPTO" #滤掉CRYPTO

应用:
如何查看指定应用的日志?以包名为com.realtek.dtv的应用为例:

  1. 查看应用进程号
    1
    $ ps | grep com.realtek.dtv  
    获得信息,可知该应用的PID为1069:

    1069 1000 0:05 com.realtek.dtv
    2909 2000 0:00 grep com.realtek.dtv

  2. 过滤该应用的日志
    1
    $ logcat -c;logcat | grep 1069  

常用命令

应用安装:

1
2
$ pm install /storage/udisk/sda1/.apk  
$ pm uninstall com.test.selftest (包名)

编辑框也可以直接输入信息:

1
$ input text 12345678  

uboot命令:

1
2
3
4
$ fatls mmc 0:2 //查看第0个mmc设备的第2个分区(fat分区)
$ ext4ls mmc 0:11 /common/panel //查看第0个mmc设备的第11个分区的/common/panel目录
$ mmc list //列出所有的mmc设备
$ mmc part //列出当前mmc设备的分区信息

bootcode指令烧录:

1
2
3
$ usb start;  
$ fatload usb 0:1 0x1500000 dvrboot.rescue.exe.bin;
$ go 0x1500000

升级内核:

1
$ swuu vmlinux.pkg  

打开KERNEL打印信息:

1
$ echo 7 4 1 7 > /proc/sys/kernel/printk  

关闭KERNEL打印信息:

1
$ echo 0 4 1 7 > /proc/sys/kernel/printk  

打开demod打印信息:

1
$ echo "log_onoff=1" > /proc/rtkdemod/dbg  

开bootcode打印:
编辑bootcode/uboot/include/configs/rtd285o_common.h

快速打开一个应用:

1
$ am start com.android.tv.settings/com.android.tv.settings.MainSettings  

调试IR信息:

1
$ rtd irda set_decode_dbg_en 1  

选择IR协议:

1
$ rtd irda set_protocol 1  

快速复位:

1
$ am broadcast -a android.intent.action.MASTER_CLEAR  

输入虚拟键:

1
$ input keyevent 26 //keycode_power  

查看input设备的属性:

1
$ cat /proc/bus/input/devices  

获取屏幕分辨率:

1
$ wm size

获取像素密度:

1
$ wm density

编译差分包:

1
$ ./build/tools/releasetools/ota_from_target_files -i ota_target_files_old.zip ota_target_files.zip update.zip  

升级OTA:

1
2
3
4
5
6
$ touch /cache/recovery/command;  
$ echo "--update_package=/data/update.zip" > /cache/recovery/command;
$ echo "--wipe_data" >> /cache/recovery/command;
$ sync;
$ reboot
$ #然后按住TAB键上电

进Recovery:

1
2
3
touch /cache/recovery/command
echo "--show_text" > /cache/recovery/command
sync

打包系统log信息:

1
$ tar cvf /mnt/media_rw/sda1/log.tar /tmp/var/log/ /data/anr/ /data/tombstones/;sync;

其他

mm编译出来的软件无法安装:
不生成odex,只生成apk,就可以安装了。
Android.mkLOCAL_DEX_PREOPT 设定为false

调试

  1. 挂在so的问题,一般可以看tombstones文件,或者用addr2line工具定位:

    1
    $ addr2line -f -C -e libhbbtv_jni.so 0000381b

    -f显示函数名称
    -C显示函数参数

  2. debuggerd命令
    进程锁死或者错误逻辑引起死循环时,可以用该命令把相关进程的backtrace打印出来:

    1
    $ debuggerd -b <pid>

参考链接