第8阶段:完善电池和充电
目标
可以检测到BMS驱动,检测到电池状态。
硬件分析
Y927 充电硬件用 PM8916 内置 LBC(线性充电器),不存在外部 SMB358/SMB1360 芯片——原厂 DTB 里有 smb_int_pin: smb1360_int_gpio = <gpio62> 这种引脚标签,但没有实际的 smb 设备节点,是参考设计残留。原厂另有一条 vivo,charger-monitor compatible 是 vivo 私有充电策略,主线不复刻。
DTS 改动分析
电池侧用主线 simple-battery + &pm8916_bms + &pm8916_charger 的标准三件套。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| / {
battery: battery { compatible = "simple-battery"; voltage-min-design-microvolt = <3400000>; voltage-max-design-microvolt = <4350000>; energy-full-design-microwatt-hours = <8588000>; charge-full-design-microamp-hours = <2260000>; ocv-capacity-celsius = <25>; ocv-capacity-table-0 = < 4342000 100 4288000 95 4234000 90 4189000 85 4148000 80 4111000 75 4075000 70 4041000 65 4008000 60 3977000 55 3949000 50 3922000 45 3895000 40 3866000 35 3835000 30 3803000 25 3774000 20 3744000 15 3711000 10 3674000 5 3634000 0 >; }; };
&pm8916_bms { status = "okay"; monitored-battery = <&battery>; power-supplies = <&pm8916_charger>; };
&pm8916_charger { status = "okay"; monitored-battery = <&battery>; qcom,fast-charge-safe-current = <900000>; qcom,fast-charge-safe-voltage = <4200000>; };
|
内核配置
1 2 3 4
| cd ~/y927/linux ./scripts/config --enable CONFIG_BATTERY_PM8916_BMS_VM ./scripts/config --enable CONFIG_CHARGER_PM8916_LBC make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- olddefconfig
|
编译 Linux 内核
1 2
| cd ~/y927/linux make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) Image.gz dtbs
|
构建 boot.img 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| cd ~/y927/linux PHASE_ID=8 INITRAMFS_PHASE_ID=7
cat arch/arm64/boot/Image.gz \ arch/arm64/boot/dts/qcom/msm8916-vivo-y927.dtb \ > vmlinuz-dtb
~/y927/lk2nd/lk2nd/scripts/mkbootimg \ --kernel vmlinuz-dtb \ --ramdisk $HOME/y927/initramfs/initramfs-phase-$INITRAMFS_PHASE_ID.cpio.gz \ --cmdline "console=tty0 console=ttyMSM0,115200 panic=1 initcall_blacklist=simpledrm_platform_driver_init" \ --base 0x80000000 \ --kernel_offset 0x00008000 \ --ramdisk_offset 0x01000000 \ --second_offset 0x00f00000 \ --tags_offset 0x00000100 \ --pagesize 2048 \ --header_version 0 \ --output boot-phase-$PHASE_ID.img
|
刷入 boot.img 文件
1 2 3
| PHASE_ID=8 fastboot flash boot boot-phase-$PHASE_ID.img fastboot reboot
|
测试
1
| sudo picocom -b 115200 /dev/ttyACM0
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| busybox ls /sys/class/power_supply/
busybox cat /sys/class/power_supply/pm8916-bms-vm/voltage_now
busybox cat /sys/class/power_supply/pm8916-bms-vm/capacity
busybox cat /sys/class/power_supply/pm8916-bms-vm/health
busybox cat /sys/class/power_supply/pm8916-bms-vm/status
busybox cat /sys/class/power_supply/pm8916-bms-vm/charge_full_design
busybox cat /sys/class/power_supply/pm8916-bms-vm/voltage_max_design
busybox cat /sys/class/power_supply/pm8916-lbc-chgr/online
|