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编译:
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

ADB的环境搭建和使用
ADB用于抓取soc板子的kernel log打印。使用ADB可以登录开发板root文件目录操作rootfs
Windows装ADB环境
安装ADB exe包
https://www.thecustomdroid.com/google-android-usb-drivers/
下载platform-tools-latest,并且环境变量PATH添加adb.exe所在的目录,重启生效
安装USB-ADB驱动
没装USB驱动,连接soc板子(板子启动成功情况下),板子会被显示为yellow-bang设备,需要安装USB ADB驱动
驱动安装过程:
(1)右键yellow-bang的soc板子设备,选择更新驱动 -> “通用串行总线”驱动类 -> 找到WinUSB的ADB设备类驱动,不用管警告,安装。

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

ADB抓kernel log
Win+R cmd进入命令行,用管理员启动
第一种方式:dmesg。输入如下命令开启mmc/core的dev_dbg打印,dmesg输出到soc板子根目录/sdcard的mmc.log,最后adb pull到windows PC查看log

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

调试SI参数
两种方式:
1.直接改bayhub.h里面的GGC_CFG最后DWORD,包含drive strength值。需要编译整个系统,比较慢

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

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开始)
