debug 串口参数

默认 115200, 8,n, 1, xon/xoff

查看 tty 驱动

cat /proc/tty/drivers

...
msm_serial_hs        /dev/ttyHS    240 0-255 serial
msm_serial           /dev/ttyMSM   241 0-2 serial
...

serial 对应 ttyMSM, 这个是普通速度串口。 serial_hs 对应 ttyHS,这个是高速串口。

uart 设置为 console

/kernel/msm-4.9/arch/arm64/boot/dts/qcom/msm8917-mtp.dtsi 里面设置:

&blsp1_uart2 {
        status = "ok";
        pinctrl-names = "default";
        pinctrl-0 = <&uart_console_active>;
};

adb 提升 root 权限

  • adb shell 进去后, su 可以提升root
  • adb root 直接提升为 root

查看开机时 uart 设置情况

adb root
adb shell dmesg >log.txt

然后在 log.txt 中查找 uarttty 发现:

...
[    0.000000] Kernel command line: sched_enable_hmp=1 console=ttyMSM0,115200,n8 androidboot.console=ttyMSM0 androidboot.hardware=qcom user_debug=30 msm_rtb.filter=0x237 ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci lpm_levels.sleep_disabled=1 earlycon=msm_hsl_uart,0x78B0000 vmalloc=300M androidboot.usbconfigfs=true loop.max_part=7 buildvariant=userdebug androidboot.emmc=true androidboot.verifiedbootstate=orange androidboot.keymaster=1 dm="1 vroot none ro 1,0 6192024 verity 1 PARTUUID=11fae9bd-cd78-deb6-4780-ff6ae8fae2dd PARTUUID=11fae9bd-cd78-deb6-4780-ff6ae8fae2dd 4096 4096 774003 774003 sha1 661f201a0b51513e175aef53da958ddf76abe55d a83a8e4530863e4ec1ef23d12f2912c52efa0dcc 10 ignore_zero_blocks ignore_zero_blocks use_fec_from_device PARTUUID=11fae9bd-cd78-deb6-4780-ff6ae8fae2dd fec_roots 2 fec_blocks 780099 fec_start 780099" root=/dev/dm-0 androidboot.vbmeta.device=PARTUUID=661b41df-a63e-849c-2db3-ea63cf2b34be androidboot.vbmeta.avb_version=1.0 androidboot.vbmeta.device_state=unlo
...
[    0.000000] Kernel command line: sched_enable_hmp=1 console=ttyMSM0,115200,n8 androidboot.console=ttyMSM0 androidboot.hardware=qcom user_debug=30 msm_rtb.filter=0x237 ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci lpm_levels.sleep_disabled=1 earlycon=msm_hsl_uart,0x78B0000 vmalloc=300M androidboot.usbconfigfs=true loop.max_part=7 buildvariant=userdebug androidboot.emmc=true androidboot.verifiedbootstate=orange androidboot.keymaster=1 dm="1 vroot none ro 1,0 6192024 verity 1 PARTUUID=11fae9bd-cd78-deb6-4780-ff6ae8fae2dd PARTUUID=11fae9bd-cd78-deb6-4780-ff6ae8fae2dd 4096 4096 774003 774003 sha1 661f201a0b51513e175aef53da958ddf76abe55d a83a8e4530863e4ec1ef23d12f2912c52efa0dcc 10 ignore_zero_blocks ignore_zero_blocks use_fec_from_device PARTUUID=11fae9bd-cd78-deb6-4780-ff6ae8fae2dd fec_roots 2 fec_blocks 780099 fec_start 780099" root=/dev/dm-0 androidboot.vbmeta.device=PARTUUID=661b41df-a63e-849c-2db3-ea63cf2b34be androidboot.vbmeta.avb_version=1.0 androidboot.vbmeta.device_state=unlo
...
[    1.021788] msm_serial 78b0000.serial: msm_serial: detected port #0
[    1.021827] msm_serial 78b0000.serial: uartclk = 7372800
[    1.021885] 78b0000.serial: ttyMSM0 at MMIO 0x78b0000 (irq = 80, base_baud = 460800) is a MSM
[    1.021901] msm_serial: console setup on port #0
[    3.798478] console [ttyMSM0] enabled
[    3.803742] msm_serial 78af000.serial: msm_serial: detected port #1
[    3.806721] msm_serial 78af000.serial: uartclk = 19200000
[    3.812839] 78af000.serial: ttyMSM1 at MMIO 0x78af000 (irq = 81, base_baud = 1200000) is a MSM
[    3.818790] msm_serial 7aef000.serial: msm_serial: detected port #2
[    3.826891] msm_serial 7aef000.serial: uartclk = 19200000
[    3.833054] 7aef000.serial: ttyMSM2 at MMIO 0x7aef000 (irq = 82, base_baud = 1200000) is a MSM
[    3.839441] msm_serial: driver initialized
[    3.848483] msm_serial_hs module loaded
...

上面有地址和 MSM 的具体对应,可以和下面的设备树里面的进行对应。而且还能看到 console 和 MSM 的对应情况。

查看设备树 uart 相关

/kernel/msm-4.9/arch/arm64/boot/dts/qcom/msm8917-mtp.dtsi 里面可以看到:

        blsp1_uart2: serial@78b0000 {
                compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
                reg = <0x78b0000 0x200>;
                interrupts = <0 108 0>;
                clocks = <&clock_gcc clk_gcc_blsp1_uart2_apps_clk>,
                        <&clock_gcc clk_gcc_blsp1_ahb_clk>;
                clock-names = "core", "iface";
                status = "disabled";
        };
        blsp1_uart1: serial@78af000 {
                compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
                reg = <0x78af000 0x200>;
                interrupts = <0 107 0>;
                clocks = <&clock_gcc clk_gcc_blsp1_uart1_apps_clk>,
                        <&clock_gcc clk_gcc_blsp1_ahb_clk>;
                clock-names = "core", "iface";
                status = "disabled";
        };
        blsp2_uart1: serial@7aef000 {
                compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
                reg = <0x7aef000 0x200>;
                interrupts = <0 306 0>;
                clocks = <&clock_gcc clk_gcc_blsp2_uart1_apps_clk>,
                        <&clock_gcc clk_gcc_blsp2_ahb_clk>;
                clock-names = "core", "iface";
                status = "disabled";
        };

可以通过这个地址和上面的 dmesg 里面的地址进行对应,从而知道 MSM 和uart 的具体对应方式。

uart 设备树参考文档

kernel/msm-4.9/Documentation/devicetree/bindings/serial 目录下面有很多厂家的文档,比如 qcom 的就有3个文档,qcom,msm-geni-uart.txt, qcom,msm-uartdm.txt, qcom,msm-uart.txt 从这些文档里面可以看出,普通模式是不用 DMA 的,高速模式才用 DMA。

policy 查看

adb pull /sys/fs/selinux/policy
adb logcat -b all -d | audit2allow -p policy

win 平台只能 adb logcat -b all -d >log.txt 然后查看 log.txt 了。

修改 logo

  • logo 所在位置是 device/qcom/common/display/logo/ 下面放一张 png 文件即可。
  • 使用工具把 png 文件生成为 splash.img 也放在 logo 这个目录下。

修改 第二个 logo

第二个 logo 位置在 frameworks/base/core/res/assets/images/ 下面的 android-logo-mask.png

获取 android 的 log

adb logcat -c 清除所有 log 记录 adb logcat >log.txt 开启记录,然后运行 apk,操作完成之后,打断 logcat,就可以 log 了。

串口失败,有可能是 tty 权限不对

ls -l dev/tty*
chmod 777 dev/tty*

aosp 中编译模块使用 mmm ./

adb pull, push 文件

adb pull <手机路径>   <本机路径>  从手机中拉取信息到本地电脑上
adb push <本机路径>  <手机路径>  从本地电脑推送信息到手机上

参考: https://blog.csdn.net/beautyxiang/article/details/81067233

adb push 文件到设备上

  1. adb push SC60_Android9_R05_r029\out\target\product\msm8953_64\system\bin\UartTest system/bin/ 有可能会提示权限不够。
  2. 那么就 adb root,之后再 push。
  3. 如果还是提示不能创建,那么就 adb remount,挂载 system 分区为可读写分区。
  4. 如果还是权限不够,那么就 adb disable-verity先关闭检测,然后 adb reboot 重启机器,然后 adb root,再 adb remount,最后再 push.

aosp 中需要 编译单独的镜像

  • make snod 用来单独编译 system.img
  • make vnod 用来单独编译 vendor.img

参考: https://stackoverflow.com/questions/27925810/make-snod-didnt-work-with-waring-like-thisno-rule-to-make-target-out-target#:~:text=make%20snod%20is%20used%20to%20build%20the%20system,snod%20to%20include%20those%20changes%20in%20system%20image.
https://blog.csdn.net/gaoguoxin2/article/details/53369918
https://blog.csdn.net/qq_33611327/article/details/104700616

在 system 区域添加系统属性

  • device/qcom/msm8937_32/system.prop 里面添加 ro.pure.version=1.0
  • 查看 out/target/product/pure/system/build.prop 里面有我们定义的属性,重新编译并烧录
  • adb shell, getprop ro.pure.version 就可以看到前面定义的数值了。

参考:
http://qiushao.net/2019/11/20/Android%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91%E5%85%A5%E9%97%A8/3-%E6%B7%BB%E5%8A%A0%E7%B3%BB%E7%BB%9F%E5%B1%9E%E6%80%A7/

自定义模块,可执行文件

  1. mkdir -p device/qcom/msm8937_32/hello 创建文件夹
  2. c 文件
vim hello.cpp

#include <cstdio>
#include <android/log.h>

#define LOG_TAG "qiushao"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG ,__VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG ,__VA_ARGS__)

int main() {
    printf("hello qiushao\n");
    LOGD("hello qiushao");
    return 0;
}
  1. 构建文件
vim Android.bp

cc_binary {              //模块类型为可执行文件
    name: "hello",       //模块名hello
    srcs: ["hello.cpp"], //源文件列表
    vendor: true,        //编译出来放在/vendor目录下(默认是放在/system目录下)
    shared_libs: [       //编译依赖的动态库
        "liblog",
    ],
}
  1. mm -j 试试看编译能不能过
  2. device/qcom/msm8937_32/msm8937_32.mk 中添加 PRODUCT_PACKAGES += hello
  3. 重新编译系统。
  4. adb root, adb shell, hello 就可以看到输出了,which hello 能找到位置。

参考:
http://qiushao.net/2019/11/22/Android%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91%E5%85%A5%E9%97%A8/4-%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A8%A1%E5%9D%97/

查看设备树

  1. cd kernel/msm-4.9/arch/arm64/ 复制 DeviceTreeMap.py 到这个目录下面,并且增加执行权限
  2. cd boot/dts/qcom/
  3. ../../../DeviceTreeMap.py qcm2150.dts 就可以看到相应的设备树了

附件DeviceTreeMap.py

添加预编译模块二进制文件

  1. device/qcom/msm8937_32 目录下创建 prebuilt 文件夹
  2. mkdir -p device/qcom/msm8937_32/prebuilt/vendor/bin 创建二进制文件夹
  3. busybox-i686 复制到 prebuilt/vendor/bin 文件夹下面。
  4. device/qcom/msm8937_32 创建 product_copy_files.mk 文件
### prebuilt copy files

LOCAL_PREBUILD_DIR := device/qiushao/pure/prebuilt

PRODUCT_COPY_FILES += \
    $(LOCAL_PREBUILD_DIR)/vendor/bin/busybox-i686:vendor/bin/busybox
  1. msm8937_32.mk 里面添加 include device/qiushao/pure/product_copy_files.mk
  2. adb root, adb shellbusybox 就可以了。

参考: http://qiushao.net/2019/12/10/Android%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91%E5%85%A5%E9%97%A8/5-%E6%B7%BB%E5%8A%A0%E9%A2%84%E7%BC%96%E8%AF%91%E6%A8%A1%E5%9D%97/

删除原生 app

  1. device/qcom/msm8937_32 下的 Android.mk 里面添加
include $(CLEAR_VARS)
LOCAL_MODULE := remove_unused_module
LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_CLASS := FAKE
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

LOCAL_OVERRIDES_PACKAGES += \
   Contacts \
   Email

include $(BUILD_SYSTEM)/base_rules.mk

$(LOCAL_BUILT_MODULE):
    $(hide) echo "Fake: $@"
    $(hide) mkdir -p $(dir $@)
    $(hide) touch $@

PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES))

这里需要注意的是 (hide) echo "Fake:@" 前面是 TAB,不是空格, Makefile 语法的要求。

  1. msm8937_32.mk 里面添加 PRODUCT_PACKAGES += remove_unused_module
  2. 删除 out/target/product/msm8937_32 下面的 system 文件夹,然后重新编译系统,重新烧录,就能看到没有通讯录和邮件。

Contacts, Email 被指向到 out/target/product/msm8937_32/fake_packages。因为 LOCAL_MODULE_CLASS := FAKE 所以对应的是 fake_packages

参考:
http://qiushao.net/2019/12/12/Android%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91%E5%85%A5%E9%97%A8/6-%E5%88%A0%E9%99%A4%E5%8E%9F%E7%94%9F%E5%86%85%E7%BD%AEAPK/

img 作用

aboot / emmc_appsboot.mbn is the Primary Bootloader sbl1.mbn is the Secondary Boot Loader modem / NON-HLOS.bin is the phone's cellular radio (3G/LTE) boot.img is the kernel recovery.img is the recovery partition (stock/TWRP etc) system.img is the main ROM logo.bin is just the logo image when starting up the phone cache.img is the cache partition (empty when flashing) userdata / userdata_64G.img is the space where all the user's files and apps are stored (empty when flashing)

参考: https://forums.oneplus.com/threads/anyone-knows-what-each-fastboot-partition-is-for.449048/

标签: aosp

添加新评论