ThinkNotes

Simple is not easy | 化繁为简,知易行难

0%

高通平台 -- BH20X问题记录

BH20x问题记录

Balur项目 - Qcom Android 14 bazel编译系统

关于GKI和KMI的概念(需要clash梯子):GKI划分common kernel和platform module,是platform能使用bazel的根本原因

https://source.android.com/docs/core/architecture/kernel/generic-kernel-image

bazel用于安卓14以上的platform kernel module编译:

https://android.googlesource.com/kernel/build/+/refs/heads/main-kernel/kleaf/docs/impl.md#Step-2_Define-targets-to-build-external-kernel-modules

bazel语法(CN)

https://bazel.google.cn/versions/7.4.0/reference/be/c-cpp?hl=zh-cn

编译问题和方案

Bazel编译sdhci-msm.c中的#include语句时,找不到bayhub.c和bayhub.c

尝试按bazel语法,直接在host下的module.bzl里面的sdhci-msm模块的srcs的deps添加bayhub.c/.h,但并没有成功

临时办法:

platform kernel下的根编译文件BUILD.bazel里面定义了linux/mmc/*.h, 将bayhub.h放到这个路径再引用

不#include bayhub.c,直接将内容展开到sdhci-msm.c

image-20250905141723250

ADB的环境搭建和使用

ADB用于抓取soc板子的kernel log打印。使用ADB可以登录开发板root文件目录操作rootfs

Windows装ADB环境

  1. 安装ADB exe包

    https://www.thecustomdroid.com/google-android-usb-drivers/

    下载platform-tools-latest,并且环境变量PATH添加adb.exe所在的目录,重启生效

  2. 安装USB-ADB驱动

    没装USB驱动,连接soc板子(板子启动成功情况下),板子会被显示为yellow-bang设备,需要安装USB ADB驱动

    驱动安装过程:

    (1)右键yellow-bang的soc板子设备,选择更新驱动 -> “通用串行总线”驱动类 -> 找到WinUSB的ADB设备类驱动,不用管警告,安装。

    image-20250905145254487

    (2) 安装正常,soc设备会归为USB类,没有yellow bang

    image-20250905145328150

ADB抓kernel log

Win+R cmd进入命令行,用管理员启动

第一种方式:dmesg。输入如下命令开启mmc/core的dev_dbg打印,dmesg输出到soc板子根目录/sdcard的mmc.log,最后adb pull到windows PC查看log

图片2

另一种方式:adb logcat,可以持续抓kprint的log,配合第一种打开dev_dbg打印后,可以同时抓pr_info和mmc的命令

图片3

调试SI参数

两种方式:

1.直接改bayhub.h里面的GGC_CFG最后DWORD,包含drive strength值。需要编译整个系统,比较慢

image-20250905150355023

2.使用debug sysfs接口,方便用户I/O直接配置参数到驱动的对象,不需要编译系统。原理如下

1
2
3
4
# 读取当前值
cat /sys/devices/platform/soc/8804000.sdhci/bh201_drive_strength
# 写入新值(drive strength)
echo 0x4A417777 > /sys/devices/platform/soc/8804000.sdhci/bh201_drive_strength

image-20250905150308232

SD流程问题划分

流程如下图,代码见core/sd.c流程,以调用到.init_card()为划分:init_card前面属于平台Host测问题(调试需要看 host侧 VDD上电和CMD/DATA/CLK line信号);.init_card()之后BH201驱动介入,根据ADB kprint和mmc log分析tuning等问题。

CMD0 -> CMD8(check 2.0 card) -> ACMD41 -> CMD11(3.0 only) -> CMD2 and 3 -> .card_init (bht_load开始)

image-20250905150708572