System Debugging
Debugging tools and methods
Serial port debugging is available, with a baud rate of 115200. You can use it directly to view the relevant printouts of uboot, kernel, and OpenHarmony init processes
hdc
hdc is similar to android's adb, supporting two connection modes: usb and tcp. When using tcp mode, the default port is set to 55555. The configuration file is default.para in device/board/spacemit/xxx/cfg, as shown below:
persist.hdc.mode=usb,tcp
persist.hdc.port=55555
Host support
For Windows systems, place hdc.exe (click here to download) in a specific directory and set the environment variable path.
Ubuntu system installation dependencies: Open the terminal and enter the following commands to update the package list and install the necessary development tools and libraries
sudo apt-get update
sudo apt-get install build-essential libstdc++6 libc++1·
Download the HDC Toolkit:
Go to the OpenHarmony official website to download the latest version of the HDC tool package for the Linux platform. Place it in a suitable location and decompress it. Please adjust the decompression path according to the actual situation.
tar -zxvf hdc_std_<version>_linux.tar.gz -C /opt/hdc/
Setting environment variables: Edit the user's shell initialization script (such as .bashrc) and add the following line to the end of the file:
export PATH=$PATH:/opt/hdc/bin
source ~/.bashrc
Verify installation success: Try running a simple help command in a new terminal window to confirm that everything is ready. If you can see detailed help documentation, it means that the whole process is completed successfully.
hdc connection
The network connection needs to ensure that the hdc server and client are in the same LAN. The connection method is as follows:
D:\>hdc tconn 10.0.90.142:55555
Connect OK
D:\>hdc shell
#
usb 连接
D:\>hdc list targets
0123456789ABCDEF
D:\>hdc shell
#
多设备连接
通过 -t 参数指定设备即可,如下:
D:\>hdc list targets
0123456789ABCDEF
ABCDEF
D:\>hdc -t 0123456789ABCDEF shell
#
hdc 常用命令
命令 用途
hdc list targets # List all currently connected devices
hdc shell reboot # Reboot the device
hdc uninstall com.example.myapp # Uninstall the HAP package
hdc install -r xxx.hap # Reinstall the HAP package (overwrite existing)
hdc shell aa start -a EntryAbility -b com.example.myapp # Start the HAP application
hdc file recv /xxx D:/ # Copy file from device to local machine
hdc file send D:/xxx /data/ # Send local file to device
hdc start -r # Restart the HDC server
Basic usage of hilog
hilog is similar to android's logcat. The basic usage is as follows:
命令 用途 示例
hilog -h 获取帮助
hilog -t app|core|kmsg|init - 阻塞式实时查询模块日志
- 可以与其他参数同时使用 hilog -t core
hilog -t app|core|kmsg|init -x - 非阻塞式实时查询模块日志
- 可以与其他参数同时使用 hilog -t core -x
hilog -T <tag> - 模块内指定tag
- 可以与其他参数一起使用 hilog -T Launcher_Default
hilog -L D|I|W|E|F - 指定level查询
- D:debug, I:info, W:warning, E:error, F:fatal hilog -L I
hilog -D <domain>
- 日志的服务域,用于指定输出日志所对应的业务领域
- 这是一个十六进制整数,范围从 0x0 到 0xFFFFF。
- 建议使用0xAAABB格式,AAA表示子系统,BB表示模块
- 指定domian查询
- 可以与其他参数一起使用 hilog -D 0x0
^ - 排除 hilog -t ^app -T ^BatteryThread
Log storage
Log storage means saving the log to a file and exporting it for viewing.
命令 用途
hilog -w start [-f "xxx"] [-l <length>] [-j <jobid>] [-m <algorithm>] [-n <number>] 启动落盘任务
hilog -w query [-j <jobid>] 查询落盘任务
hilog -w stop [-j <jobid>] 停止落盘任务
示例如下:
# hilog -w query
#
#hilog -w start -f "hilog" -l 66k -j 222 -m zlib -n 2
Persist task [jobid:222] started successfully
#cd /data/log/hilog
# ls -al
total 100
drwxr-x--- 2 logd log 4096 1970-01-02 03:34 .
drwxrwx--- 6 system log 4096 1970-01-01 00:38 ..
-rw-r----- 1 logd system 65540 1970-01-02 03:34 .persisterInfo_222
-rw-r----- 1 logd system 132 1970-01-02 03:34 .persisterInfo_222.info
-rw-r----- 1 logd system 12239 1970-01-02 03:34 hilog.002.19700102-033431.gz
-rw-r----- 1 logd system 6883 1970-01-02 03:34 hilog.003.19700102-033431.gz
#
# hilog -w query -j 222 #指定jobid查询
222 core,app zlib /data/log/hilog/hilog 67584 2
#
# hilog -w query #查询全部落盘任务
222 core,app zlib /data/log/hilog/hilog 67584 2
#
# hilog -w stop -j 222
Persist task [jobid:222] stopped successfully
#
# ls -al
total 36
drwxr-x--- 2 logd log 4096 1970-01-02 03:35 .
drwxrwx--- 6 system log 4096 1970-01-01 00:38 ..
-rw-r----- 1 logd system 12239 1970-01-02 03:34 hilog.002.19700102-033431.gz
-rw-r----- 1 logd system 13000 1970-01-02 03:35 hilog.003.19700102-033431.gz
hidumper
hidumper is a unified system information acquisition tool in OpenHarmony for developers, testers, and IDE tools to help users analyze and locate problems.
命令 用途
hidumper -h 获取帮助
hidumper --cpuusage [pid] 查看某个进程的cpu占用信息
hidumper --mem [pid] 查看某个进程的内存占用情况
hidumper --cpufreq 查看cpu的频率
hidumper --storage 查看存储情况
hidumper --net 查看网络情况
Parameter Management
命令 用途
param -h 获取帮助
param ls -r 查看所用系统参数
param ls -r persist.sys.hilog.debug.on 查看系统参数
param get persist.sys.hilog.debug.on 获取系统参数
param set persist.sys.hilog.debug.on true 设置系统参数
Simulate key presses
Mouse Operation
# uinput -?
Usage: uinput <option> <command> <arg>...
The option are:
-M --mouse
commands for mouse:
-m <dx> <dy> --move <dx> <dy> -move to relative position (dx,dy),
<dx1> <dy1> <dx2> <dy2> [smooth time] --trace -dx1 dy1 to dx2 dy2 smooth movement
-d <key> --down key -press down a button,
0 is the left button, 1 is the right,
2 is the middle
-u <key> --up <key> -release a button
-c <key> --click <key> -press the left button down,then raise
-b <dx1> <dy1> <id> [press time] [click interval time] --double click
[press time] the time range is more than 1ms but less than 300ms,
[click interval time] the time range is more than 1ms but less than 450ms,
Otherwise the operation result may produce error or invalid operation
-press the left button down,then raise
key value:0 - button left
key value:1 - button right
key value:2 - button middle
key value:3 - button side
key value:4 - button extra
key value:5 - button forward
key value:6 - button back
key value:7 - button task
-s <key> --scroll <key> -positive values are sliding backwards
-g <dx1> <dy1> <dx2> <dy2> [total time] --drag <dx1> <dy1> <dx2> <dy2> [total time],
dx1 dy1 to dx2 dy2 smooth drag
-i <time> --interval <time> -the program interval for the (time) milliseconds
negative values are sliding forwards
Command Examples
命令 用途
uinput -M -m 50 50 鼠标光标移动到(50,50)位置
Uinput -M -b 50 200 0 100 300 鼠标在(50,200)左键双击,点击事件100ms,双击的间隔时间300ms
Keyboard Operation
# uinput -?
Usage: uinput <option> <command> <arg>...
The option are:
-K --keyboard
commands for keyboard:
-d <key> --down <key> -press down a key
-u <key> --up <key> -release a key
-l <key> [long press time] --long_press <key> [long press time] -press and hold the key
-i <time> --interval <time> -the program interval for the (time) milliseconds
Key value
key keycode
KEYCODE_HOME 1
KEYCODE_BACK 2
KEYCODE_VOLUME_UP 16
KEYCODE_VOLUME_DOWN 17
KEYCODE_POWER 18
KEYCODE_VOLUME_MUTE 22
KEYCODE_DPAD_UP 2012
KEYCODE_DPAD_DOWN 2013
KEYCODE_DPAD_LEFT 2014
KEYCODE_DPAD_RIGHT 2015
KEYCODE_DPAD_CENTER 2016
KEYCODE_TAB 2049
Command Examples
命令 用途
uinput -K -d 1 -u 1 按HOME键返回主界面
uinput -K -d 1 -u 1 声音调大
Touch screen operation
# uinput -?
Usage: uinput <option> <command> <arg>...
The option are:
-T --touch
commands for touch:
-d <dx1> <dy1> --down <dx1> <dy1> -press down a position dx1 dy1,
-u <dx1> <dy1> --up <dx1> <dy1> -release a position dx1 dy1,
-m <dx1> <dy1> <dx2> <dy2> [smooth time] --smooth movement
<dx1> <dy1> <dx2> <dy2> [smooth time] -smooth movement,
dx1 dy1 to dx2 dy2 smooth movement
-c <dx1> <dy1> [click interval] -touch screen click dx1 dy1
Service Management
命令 用途
service_control start pulseaudio 启动pulseaudio服务
service_control stop pulseaudio 停止pulseaudio服务
hiperf
https://device.harmonyos.com/cn/docs/documentation/guide/subsys-toolchain-hiperf-0000001186316470
bytrace
The method to obtain trace through hdc is as follows:
Capture the trace:
D:\>hdc shell
# param set const.security.developermode.state true
# param set persist.hdc.root 1
# echo > /sys/kernel/debug/tracing/trace
# echo 4096 > /sys/kernel/debug/tracing/saved_cmdlines_size
# bytrace -t 10 -b 4096 --overwrite ohos zimage zmedia zcamera zaudio ability distributeddatamgr graphic freq irq mdfs workq mmc idle notification sync pagecache ace app > /mnt/mynewtrace.ftrace
# echo > /sys/kernel/debug/tracing/trace
# exit
D:\>hdc file recv /mnt/mynewtrace.ftrace
查看trace:
https://ui.perfetto.dev(科学上网)
How to use bootchart:
1. hdc shell
2. begetctl bootchart enable
3. reboot 或者断电重启
4. begetctl bootchart stop
5. begetctl bootchart disable
6. 进入到/data/service/el0/startup/init/文件夹下查看是否有如下文件:
header、proc_diskstats.log、proc_ps.log、proc_stat.log
7. 在/data/service/el0/startup/init/目录下执行命令:tar -czf bootchart.tgz * # 打包
8. hdc_std file recv /data/service/el0/startup/init/bootchart.tgz ./ #导出
9. 生成开机性能图片 java -jar bootchart.jar bootchart.tgz
glmark
Directions:
Execute the following three commands to run glmark aging:
power-shell setmode 602
cd /system/bin
./glmark2-es2 --run-forever --size 720x720
wpa_supplicant&wpa_cli
使用方法:
1. 开启再关闭wifi
2. cd /vendor/bin/
3. ./wpa_supplicant -B -i wlan0 -c /data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf
4. ps -ef | grep wpa查看wpa_supplicant是否起来
5. /wpa_cli -p /data/service/el1/public/wifi/sockets/wpa
6. > scan
7. > scan_results
8. > add_network,返回一个ID
9. > set_network ID ssid "WIFI名称"
10. > set_network ID psk "WIFI密码"
11. > enable_network ID
snapshot_display
param set const.security.developermode.state true
param set persist.hdc.root 1
snapshot_display -f /data/local/tmp/test1.jpeg
power-shell
power-shell setmode 602 #性能模式,关闭休眠
power-shell suspend #休眠
power-shell display -s xxx #设置亮度
Remount the system/vendor partition as read-write. The system/vendor partition is mounted as read-only (ro) by default. When you need to use hdc file send to push files during debugging, you need to remount it as read-write, as follows:
mount -o remount,rw /vendor
mount -o remount,rw /
Invalid after system restart, need to re-mount
CPU frequency adjustment
cd /sys/devices/system/cpu/cpufreq/policy0/
cat scaling_cur_freq
View current frequency
cat scaling_available_frequencies
View available frequencies
echo userspace > scaling_governor
echo 1228800 > scaling_setspeed
Adjust frequency
cat scaling_cur_freq
查看调整是否生效
DDR 调频
频率表:
2400M C
1200M 8
800M 4
600M 2
devmem 0xd4282980 4
Read the current frequency
devmem 0xd4282980 4 0xX
设置频率,0xX值要比频率表的值+1,相当于bit0写1
比如设置2400M,devmem 0xd4282980 32 0xD
Common test methods
Common Problem Debugging Methods
The peripheral screen backlight cannot be adjusted:
Check and set the node sys/class/backlight/backlight/brightness to confirm whether the driver is normal. If the brightness of the above node does not change, it means that there is a problem with the driver. You need to check the driver and focus on whether the PWM corresponding to the backlight is working properly. If the brightness of the above node changes, it means that there is a problem with the OH upper layer. You can use the command power-shell display -s xxx(100>xxx>0) to check whether the brightness has changed.