如何按照这个格式mount
/dev/block/bootdevice/by-name/spunvm                    /mnt/vendor/spunvm     vfat    rw,noatime,shortname=lower,uid=1000,gid=1000,dmask=007,fmask=007,context=u:object_r:spunvm_file:s0 wait

为了按照以下格式挂载 `/dev/block/bootdevice/by-name/spunvm` 分区,请遵循以下步骤:

```
/dev/block/bootdevice/by-name/spunvm /mnt/vendor/spunvm vfat rw,noatime,shortname=lower,uid=1000,gid=1000,dmask=007,fmask=007,context=u:object_r:spunvm_file:s0 wa

sed -i '/persist/d' rawprogram_unsparse0.xml

git status --porcelain | awk '{print $2}' | xargs git checkout

AMSS: repo init -u ssh://<yourname>@[IP]:29418/AMSS/manifest -b XX && repo sync -cdf -j8

HLOS:repo init -u ssh://<yourname>@[IP]:29418/AP/manifest -b XX && repo sync -cdf -j8

XX:/ # pm list packages | grep run
package:org.freedesktop.monado.openxr_runtime.out_of_process

XX:/ # pm dump org.freedesktop.monado.openxr_runtime.out_of_process >/sdcard/dump.txt

dump.txt:

DUMP OF SERVICE package:
Activity Resolver Table:
Non-Data Actions:
android.intent.action.MAIN:
be9f12 org.freedesktop.monado.openxr_runtime.out_of_process/org.freedesktop.monado.android_common.AboutActivity filter ff69da2
Action: "android.intent.action.MAIN"

adb shell am start -n org.freedesktop.monado.openxr_runtime.out_of_process/org.freedesktop.monado.android_common.AboutActivity

使用trace来追踪Linux内核function调用

1)参考链接:

Linux内核常用的动态调试手段_trace

Linux使用 ftrace 来跟踪内核函数调用 - 灰信网(软件开发博客聚合)

2)实操环节:追踪qpnp_tri_led_set_blink

kona:/d/tracing #> set_event;>set_ftrace_filter;echo qpnp_tri_led_set_blink > set_ftrace_filter;echo 1 > options/func_stack_trace;echo function > current_tracer;> trace;echo 1 >tracing_on
sh-19303 [003] ...1 6965.106018: qpnp_tri_led_set_blink <-led_blink_setup
sh-19303 [003] ...1 6965.106026: <stack trace>
=> ftrace_graph_call
=> qpnp_tri_led_set_blink
=> led_blink_setup
=> led_blink_set
=> led_delay_off_store
=> dev_attr_store
=> sysfs_kf_write
=> kernfs_fop_write
=> __vfs_write
=> vfs_write
=> ksys_write
=> __arm64_sys_write
=> el0_svc_common
=> el0_svc_handler
=> el0_svc

usb 

高通平台下,USB OTG鼠标的枚举流程涉及到Linux内核、USB驱动以及与高通芯片相关的代码。在一个通用的高通平台下,以下是与USB OTG鼠标枚举相关的一些代码:

1. USB插入。当一个USB OTG设备(例如鼠标)插入时,先触发phy驱动层的中断,具体代码位置位于内核源代码的 `drivers/usb/phy/` 目录下,如`phy-msm-usb.c` 文件。在该文件中定义了函数`msm_hsusb_vbus_notify`,用来处理外部设备的连接。

2. USB设备的物理连接会使系统产生一个中断并调用`msm_hsusb_vbus_notify`。随后,平台会通知USB Core进行设备枚举。具体实现代码位于内核源代码的 `drivers/usb/core/` 目录下,如`hub.c`, `usb.c`等文件。

3. OTG鼠标在电气连接完成后,USB Core会为其分配一个设备地址。设备地址的分配通过 `usb_new_device` 函数来完成,该函数在 `drivers/usb/core/hub.c` 文件中定义。

4. 获取鼠标设备的描述符。USB Core会向鼠标发送`GET_DESCRIPTOR`请求,此请求在文件`drivers/usb/core/message.c`中的`usb_get_descriptor()`函数中处理。

5. 分析鼠标设备描述符并装载驱动。设备描述符包括有关设备类型、供应商、产品ID等信息。在解析鼠标描述符后,USB驱动通过函数`hid_probe()`(位于`drivers/hid/usbhid/hid-core.c` 文件中)来分配并装载鼠标驱动。

6. 与鼠标建立通信。在找到设备驱动并配置好后,主机就可以与鼠标进行通信了,具体代码位置位于 `drivers/hid/usbhid/` 目录下的如`hid-core.c`,`hid-quirks.c`等文件中。这些文件负责将USB数据包转换为事件数据。

7. 报告鼠标事件。USB驱动最后会将鼠标的移动、滚轮和按键事件通过`input-core.c` 或 `evdev.c` 等文件中的事件接口报告给上层应用。应用程序可以通过`/dev/input/event*`设备节点来获取鼠标事件。

这个流程涉及到内核源代码树的USB架构、USB HID(人机输入设备)框架以及高通平台相关的驱动实现。这个流程在不同的高通平台上细节可能略有差异,但整体结构基本相同。要了解具体的实现细节,请参考具体高通平台的内核源代码。

当Android设备插入PC时,Android设备作为USB设备,具体处理代码主要涉及Linux内核、USB驱动和与高通芯片相关的代码。以下是通用高通平台的一些与USB设备枚举相关的代码逻辑:

1. USB 插入:当Android设备连接到PC时,会触发物理层驱动的中断。这个中断处理通常位于内核源码中的 `drivers/usb/phy/` 目录下。例如,在 `phy-msm-usb.c` 文件中,处理外部设备连接的函数如`msm_hsusb_vbus_notify`。

2. 连接建立:系统与PC建立连接后,USB Core开始识别已连接的设备。相关实现代码位于内核源码的 `drivers/usb/gadget/` 目录下,如 `configfs.c`, `udc-core.c` 等文件。

3. 与PC通信:Android设备会响应PC端发送的控制命令。 如当PC端请求设备描述符或功能描述符时,Android设备端会通过相应的代码处理并发送描述符。这些代码位于 `drivers/usb/gadget/` 和 `drivers/usb/gadget/function` 目录下的相关文件中。例如,当Android设备以MTP模式连接时,MTP功能描述符的解析和处理在 `f_mtp.c` 文件中完成。

4. 配置设备与启用功能:根据PC端的请求,Android设备会执行相应的配置操作。设备配置相关的代码通常位于 `drivers/usb/gadget/` 和 `drivers/usb/gadget/function/` 目录下。例如,在MTP模式下,数据传输任务会通过`f_mtp.c` 中的代码进行处理。

5. 数据传输与处理:USB驱动通过 `drivers/usb/gadget/` 和 `drivers/usb/gadget/function/` 目录下的代码实现与PC的数据传输控制。PC通过与Android设备建立BULK OUT和BULK IN通道传输数据,以传输文件和执行其他操作。

6. 与上层应用交互:内核通知上层应用的相关状态(如已连接、断开)以及数据传输结果。上层应用,如MTP服务、ADB等,会处理这些事件并做出相应处理。

这个流程涉及到内核源代码树的USB架构、USB设备框架以及高通平台相关的驱动实现。这个流程在不同的高通平台上细节可能略有差异,但整体结构基本相同。要了解具体的实现细节,请参考具体高通平台的内核源代码。

healthd下LOGW打印log少的问题.

HLOS/system/core$ git diff libcutils/klog.cpp
diff --git a/libcutils/klog.cpp b/libcutils/klog.cpp
old mode 100644
new mode 100755
index 6a9f4df..6ef735a
--- a/libcutils/klog.cpp
+++ b/libcutils/klog.cpp
@@ -42,7 +42,7 @@ static int __open_klog(void) {
return TEMP_FAILURE_RETRY(open(kmsg_device, O_WRONLY | O_CLOEXEC));
}

-#define LOG_BUF_MAX 512
+#define LOG_BUF_MAX 1512

void klog_writev(int level, const struct iovec* iov, int iov_count) {
if (level > klog_level) return;

使用interlace-frames.py来解包battery_scale.png会报错

D:\>python interlace-frames.py -d battery_scale.png -o battery.png

This script requires the Python Imaging Library to be installed.

interlace-frames.py脚本需要修改如下,依然报错

       将

       import Image

       import PngImagePlugin

       修改为

       from PIL import Image

       from PIL import PngImagePlugin

安装pip install Pillow后再使用上述修改可以成功.

D:\>python interlace-frames.py -d battery_scale.png -o battery.png
P
Found 6 frames in battery_scale.png.
[0, 0, 0, 255, 255, 255, 255, 255, 204, 204, 204, 204, 51, 51, 51, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 45, 45, 45, 46, 46, 46, 47, 47, 47, 48, 48, 48, 49, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 172, 172, 172, 173, 173, 173, 174, 174, 174, 175, 175, 175, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 180, 180, 180, 181, 181, 181, 182, 182, 182, 183, 183, 183, 184, 184, 184, 185, 185, 185, 186, 186, 186, 187, 187, 187, 188, 188, 188, 189, 189, 189, 190, 190, 190, 191, 191, 191, 192, 192, 192, 193, 193, 193, 194, 194, 194, 195, 195, 195, 196, 196, 196, 197, 197, 197, 198, 198, 198, 199, 199, 199, 200, 200, 200, 201, 201, 201, 202, 202, 202, 203, 203, 203, 204, 204, 204, 205, 205, 205, 206, 206, 206, 207, 207, 207, 208, 208, 208, 209, 209, 209, 210, 210, 210, 211, 211, 211, 212, 212, 212, 213, 213, 213, 214, 214, 214, 215, 215, 215, 216, 216, 216, 217, 217, 217, 218, 218, 218, 219, 219, 219, 220, 220, 220, 221, 221, 221, 222, 222, 222, 223, 223, 223, 224, 224, 224, 225, 225, 225, 226, 226, 226, 227, 227, 227, 228, 228, 228, 229, 229, 229, 230, 230, 230, 231, 231, 231, 232, 232, 232, 233, 233, 233, 234, 234, 234, 235, 235, 235, 236, 236, 236, 237, 237, 237, 238, 238, 238, 239, 239, 239, 240, 240, 240, 241, 241, 241, 242, 242, 242, 243, 243, 243, 244, 244, 244, 245, 245, 245, 246, 246, 246, 247, 247, 247, 248, 248, 248, 249, 249, 249, 250, 250, 250, 251, 251, 251, 252, 252, 252, 253, 253, 253, 254, 254, 254, 255, 255, 255]
P
Frame 0 written to battery00.png.
P
Frame 1 written to battery01.png.
P
Frame 2 written to battery02.png.
P
Frame 3 written to battery03.png.
P
Frame 4 written to battery04.png.
P
Frame 5 written to battery05.png.