Android 9.0 MTK8765 uart串口不打印log信息

2023-05-16

Android 9.0 MTK8765 uart串口不打印log信息
mtk uart串口信息是包含pl lk kernel层log信息
本次项目的包含两组uart口 uart0,uart1客户要使用uart用于通信功能

1 配置好GPIO口信息
1)配置dts文件
查看原理图和GPIO映射表配置GPIO口信息

从原理图和GPIO口映射表中可以看出uart0 Rx口是gpio20引脚,uart0 Tx口是gpio21引脚; uart1 Rx口是gpio22引脚, Tx口是gpio23引脚

/* UART GPIO */
&apuart0 {
    pinctrl-names = "uart0_gpio_default",
            "uart0_rx_set",
            "uart0_rx_clear",
            "uart0_tx_set",
            "uart0_tx_clear";
    pinctrl-0 = <&uart0_gpio_def_cfg>;
    pinctrl-1 = <&uart0_rx_set_cfg>;
    pinctrl-2 = <&uart0_rx_clr_cfg>;
    pinctrl-3 = <&uart0_tx_set_cfg>;
    pinctrl-4 = <&uart0_tx_clr_cfg>;
    status = "okay";
};

&apuart1 {
    pinctrl-names = "uart1_gpio_default",
            "uart1_rx_set",
            "uart1_rx_clear",
            "uart1_tx_set",
            "uart1_tx_clear";
    pinctrl-0 = <&uart1_gpio_def_cfg>;
    pinctrl-1 = <&uart1_rx_set_cfg>;
    pinctrl-2 = <&uart1_rx_clr_cfg>;
    pinctrl-3 = <&uart1_tx_set_cfg>;
    pinctrl-4 = <&uart1_tx_clr_cfg>;
    status = "okay";
};

&pio {
    /* UART GPIO Settings - Start */
    /* UART0: rx set, rx clear, tx clear, tx clear*/
    uart0_gpio_def_cfg:uart0gpiodefault {

    };
    uart0_rx_set_cfg:uart0_rx_set@gpio20 {
        pins_cmd_dat {
            pins = <PINMUX_GPIO20__FUNC_UART0RX>;
        };
    };
    uart0_rx_clr_cfg:uart0_rx_clear@gpio20 {
        pins_cmd_dat {
            pins = <PINMUX_GPIO20__FUNC_GPIO20>;
            slew-rate = <1>;
            output-high;
        };
    };
    uart0_tx_set_cfg:uart0_tx_set@gpio21 {
        pins_cmd_dat {
            pins = <PINMUX_GPIO21__FUNC_UART0TX>;
        };
    };
    uart0_tx_clr_cfg:uart0_tx_clear@gpio21 {
        pins_cmd_dat {
            pins = <PINMUX_GPIO21__FUNC_GPIO21>;
            slew-rate = <1>;
            output-high;
        };
    };

    
    /* UART1: rx set, rx clear, tx clear, tx clear*/
    uart1_gpio_def_cfg:uart1gpiodefault {

    };
    uart1_rx_set_cfg:uart1_rx_set@gpio22 {
        pins_cmd_dat {
            pins = <PINMUX_GPIO22__FUNC_UART1RX>;
        };
    };
    uart1_rx_clr_cfg:uart1_rx_clear@gpio22 {
        pins_cmd_dat {
            pins = <PINMUX_GPIO22__FUNC_GPIO22>;
            slew-rate = <1>;
            output-high;
        };
    };
    uart1_tx_set_cfg:uart1_tx_set@gpio23 {
        pins_cmd_dat {
            pins = <PINMUX_GPIO23__FUNC_UART1TX>;
        };
    };
    uart1_tx_clr_cfg:uart1_tx_clear@gpio23 {
        pins_cmd_dat {
            pins = <PINMUX_GPIO23__FUNC_GPIO23>;
            slew-rate = <1>;
            output-high;
        };
    };
};/* UART GPIO end */


2)配置dws文件

2 pl层配置
首先明白log口的定义,CFG_UART_LOG和CFG_UART_META,在mediatek/custom/project name/preloader/cust bldr.mak中定义。使用CFG UART LOG定义AP日志端口;CFG_UART_META用于定义MD/META日志端口。

\vendor\mediatek\proprietary\bootable\bootloader\preloader\custom\tb8765ap1_bsp\cust_bldr.mak 改定义口
CFG_UART_LOG :=UART4
CFG_UART_META :=UART2

\vendor\mediatek\proprietary\bootable\bootloader\preloader\platform\mt6739\mode\DUMMY_AP.mak改定义口
CFG_UART_LOG :=UART3
CFG_UART_META :=UART3

\vendor\mediatek\proprietary\bootable\bootloader\preloader\platform\mt6739\default.mak 改定义口
CFG_UART_LOG :=UART4
CFG_UART_META :=UART2

**\vendor\mediatek\proprietary\bootable\bootloader\preloader\platform\mt6739\src\drivers\uart.c 打印实现体不执行直接return返回

void PutUARTByte (const char c)
{
  // /*disable UART log in preloader, do nothing here*/
    return;
    
    while (!(UART_READ32 (UART_LSR(g_uart)) & UART_LSR_THRE))
    {
    }

    if (c == '\n')
        UART_WRITE32 ((unsigned int) '\r', UART_THR(g_uart));

    UART_WRITE32 ((unsigned int) c, UART_THR(g_uart));

}


**


2)lk层

**\vendor\mediatek\proprietary\bootable\bootloader\lk\app\mt_boot\mt_boot.c 传进kernel参数printk.disable_uart=1表示不打印log
printk.disable_uart=1
`

int boot_linux_fdt(void *kernel, unsigned *tags,
           unsigned machtype,
           void *ramdisk, unsigned ramdisk_sz)
{    
..........
if (!has_set_p2u) {
    switch (eBuildType) {
    case BUILD_TYPE_USER://用户版本
        if (((g_boot_mode == META_BOOT) && is_meta_log_disable &&
#ifdef LOG_STORE_SUPPORT
                (is_meta_log_disable() == 0)) || g_boot_arg->log_dynamic_switch)
#else
              (is_meta_log_disable() == 0)))
#endif
                cmdline_append("printk.disable_uart=1");
            else
                cmdline_append("printk.disable_uart=1");
            break;
        case BUILD_TYPE_USERDEBUG://用户调试版本
            if ((g_boot_mode == META_BOOT) && is_meta_log_disable &&
#ifdef LOG_STORE_SUPPORT
                (is_meta_log_disable() == 1) && (g_boot_arg->log_dynamic_switch == 0))
#else
                (is_meta_log_disable() == 1))
#endif
                cmdline_append("printk.disable_uart=1 slub_debug=O");
#ifdef LOG_STORE_SUPPORT
            else if (boot_ftrace && g_boot_arg->log_dynamic_switch == 0)
#else
            else if (boot_ftrace)
#endif
                cmdline_append("printk.disable_uart=1 slub_debug=-");
            else
                cmdline_append("printk.disable_uart=1");
            break;

        case BUILD_TYPE_ENG://工程师版本
            if ((g_boot_mode == META_BOOT) && is_meta_log_disable &&
                (is_meta_log_disable() == 1))
                cmdline_append("printk.disable_uart=1 slub_debug=O");
            else
                cmdline_append("printk.disable_uart=1 ddebug_query=\"file *mediatek* +p ; file *gpu* =_\"");
        break;

    default:
        assert(0);
        break;
    }
    .......
    }

`**

修改路径有两个\vendor\mediatek\proprietary\bootable\bootloader\lk\platform\common\uart\uart.c
\vendor\mediatek\proprietary\bootable\bootloader\lk\platform\mt6739\uart.c
屏蔽uart开关宏

//#define __ENABLE_UART_LOG_SWITCH_FEATURE__
1


修改路径有两个\vendor\mediatek\proprietary\bootable\bootloader\lk\platform\common\uart\uart.c
\vendor\mediatek\proprietary\bootable\bootloader\lk\platform\mt6739\uart.c
打印实现体不执行直接return返回**

int uart_putc(const char c )
{
    /*disable UART log in lk, do nothing here*/
    return 0;
    if (g_boot_arg->log_enable == 0)
        return 0;

#ifdef USER_LOAD
    if (g_boot_arg->log_dynamic_switch == 0)
        return 0;
    if (g_lk_final_log == 0)
        return 0;
#endif

    while (!(DRV_Reg32(UART_LSR(g_uart)) & UART_LSR_THRE));

    if (c == '\n')
        mt65xx_reg_sync_writel((unsigned int)'\r', UART_THR(g_uart));

    mt65xx_reg_sync_writel((unsigned int)c, UART_THR(g_uart));

    return 0;
}

int uart_getc(void)  /* returns -1 if no data available */
{
    return 0;
    if (g_boot_arg->log_enable == 0)
        return 0;

#ifdef USER_LOAD
    if (g_boot_arg->log_dynamic_switch == 0)
        return 0;
    if (g_lk_final_log == 0)
        return 0;
#endif

    while (!(DRV_Reg32(UART_LSR(g_uart)) & UART_LSR_DR));
    return (int)DRV_Reg32(UART_RBR(g_uart));
}

void uart_puts(const char *s)
{
return;
     while (*s)
        uart_putc(*s++);
}
 

3 9.0 trusty层也是有一些log信息,需要屏蔽

\trusty\vendor\mediatek\proprietary\platform\mt6739\rules.mk****把log打印口换成串口3 uart0和uart1就不会有打印串口信息
CFG_LOG_REG_BASE ?= UART3_BASE

4 kernel层
把动态打印,时间打印,打印信息相关宏改关闭,我这里是直接屏蔽掉
**这里有两处修改的地方
\device\mediateksample\tb8765ap1_bsp\elink\PCBA\S108\tb8765ap1_bsp_debug_defconfig
\device\mediateksample\tb8765ap1_bsp\elink\PCBA\S108\tb8765ap1_bsp_defconfig

#CONFIG_PRINTK_TIME=y
#CONFIG_DYNAMIC_DEBUG=y
#CONFIG_DEBUG_INFO=y

**


\kernel-4.4\include\linux\printk.h 把打印等级给调到最低值 0

/* We show everything that is MORE important than this.. */
#define CONSOLE_LOGLEVEL_SILENT  0 /* Mum's the word */
#define CONSOLE_LOGLEVEL_MIN     0 /* Minimum loglevel we let people use */
#define CONSOLE_LOGLEVEL_QUIET     0 /* Shhh ..., when booted with "quiet" */
#define CONSOLE_LOGLEVEL_DEFAULT 0 /* anything MORE serious than KERN_DEBUG */
#define CONSOLE_LOGLEVEL_DEBUG    0 /* issue debug messages */
#define CONSOLE_LOGLEVEL_MOTORMOUTH 0    /* You can't shut this one up */


5 控制台相关使能log口关闭
**\device\mediatek\mt6739\init.mt6739.rc
**
不使能prink

## mtk printk uart controller
on property:persist.vendor.uartconsole.enable=0
    write /proc/mtprintk ${persist.vendor.uartconsole.enable}
....
on property:persist.vendor.mediatek.fg.log.enable=0
    write /sys/devices/platform/battery_meter/FG_daemon_log_level 7
    write /sys/bus/platform/devices/battery/FG_daemon_log_level 7
    write /proc/sys/kernel/printk 8


 


\device\mediatek\mt6739\init.mt6739.usb.rc
不使能prink


on property:vendor.usb.printk=0
    write /proc/sys/kernel/printk ${vendor.usb.printk}

on property:persist.vendor.usb.printk=0
    setprop vendor.usb.printk ${persist.vendor.usb.printk}

 

\system\core\rootdir\init.rc
关闭debuggable

on property:ro.debuggable=0
    # Give writes to anyone for the trace folder on debug builds.
    # The folder is used to store method traces.
    chmod 0773 /data/misc/trace
    # Give reads to anyone for the window trace folder on debug builds.
    chmod 0775 /data/misc/wmtrace
    start console

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 9.0 MTK8765 uart串口不打印log信息 的相关文章

  • 确定是否在已取得 root 权限的设备上运行

    我的应用程序具有某些功能 该功能只能在具有 root 权限的设备上运行 与其让此功能在使用时失败 然后向用户显示适当的错误消息 我更喜欢能够先默默地检查 root 是否可用 如果不可用 则首先隐藏相应的选项 有没有办法做到这一点 这是一个类
  • 在phonegap中播放本地声音

    我有一个 wav文件在我的www文件夹 我正在使用 jQuery 和以下代码 警报响起 但声音不播放 难道我做错了什么
  • fresco 的 Proguard 错误

    我正在使用 ProGuard 当我在发布配置中运行项目时 出现以下错误 Warning com facebook imagepipeline bitmaps DalvikBitmapFactory can t find referenced
  • 如何检测android中的颠倒方向?

    在我的 Android 应用程序中 我有全景图像 并且我使用 TYPE ORIENTATION 传感器根据手机运动旋转该图像 它对于横向和纵向都工作良好 这是旋转逻辑的代码 Override public void onSensorChan
  • 任务“:app:checkReleaseDuplicateClasses”执行失败

    我的 React Native Android 构建中突然出现构建问题 令人惊讶的是 它是早上建好的 没有做任何改变 但突然就失败了 这就是我得到的错误 知道为什么会发生这种情况吗 在 stack 和 GitHub 中也看到了一些类似的问题
  • 为网络和/或持久存储序列化 Android Bundle?

    我需要序列化一个全面的应用程序 游戏 状态 以便通过网络传输或保存到磁盘并在以后检索 当然 捆绑包用于在多个用例中保存 恢复状态 因此使用它们将是理想的选择 但是 由于某种原因 Bundle 不可序列化 寻找解决方案只发现了将 Bundle
  • Android,语言文件不起作用

    我现在正在创建一个 Android 应用程序 并尝试为我的母语添加语言文件 但在某种程度上 这对我不起作用 我尝试在两部不同的手机中加载该应用程序 但结果相同 之前创建过语言文件 效果良好 但这次不行 手机设置为瑞典语 语言文件适用于我创建
  • 在 Android 中关闭 Spinner 中的下拉菜单

    在 Android 中打开和关闭微调器时 我需要为箭头图标设置动画 打开微调器时我可以旋转箭头 我只是放了一个setOnTouchListener on the Spinner 当下拉菜单关闭或隐藏时 问题就来了 因为我不知道如何在该操作上
  • 用于代码生成的 ANTLR 工具版本 4.7.1 与当前运行时版本 4.5.3 不匹配

    我正在开发一个 Android 应用程序 当前使用 DSL 和一些库 突然构建给了我这个错误 任务 app kaptDebugKotlin 失败 用于代码生成的 ANTLR 工具版本 4 7 1 与当前运行时版本 4 5 3 不匹配 用于解
  • 如何从debug.keystore文件获取MD5?

    我使用一些命令来获取 MD5 私钥debug keystore文件 但实际上我得到的是 SHA1 私钥而不是 MD5 我不知道如何获得MD5 这是我使用的命令 keytool list alias androiddebugkey keyst
  • 将搜索结果更新为 Android 中的 Lazy Adapter

    我有项目列表 想为其实现搜索功能 因此 我有一个带有 addTextChangedListener 的文本框 搜索结果运行良好 但当我尝试将结果设置为 ListView 时 新结果将附加到旧结果中 我正在使用惰性适配器 如何清除适配器中的旧
  • ImageButton 拉伸背景图像

    我正在尝试创建一个没有边框的 ImageButton 但遇到了图像按钮大小的问题 我使用 Eclipse ADT 将 ImageButton 拖到布局中并选择背景图像 图像按钮显示如下 正如您所看到的 背景图像和图像按钮周边之间有一个边框
  • Android 依赖项:apklib 与 aar 文件

    据我了解 apklib包含代码 共享资源Maven aar文件由以下人员分发Gradle The aar与 apklib 的主要区别在于 类被编译并包含在 aar 根目录下的classes jar 中 然而apklib不能包含已编译的类文件
  • Android - 内容值覆盖现有行

    我正在尝试使用插入值ContentValues 我已将 5 个值插入到 5 列中 运行应用程序后 我只有最后一组值的行ContentValues 前四组未插入 ContentValues cv new ContentValues cv pu
  • 如何使用 onSearchRequested() 调用搜索对话框

    我正在尝试实现搜索对话框 但无法显示活动中的搜索 我在清单文件中定义了主要活动 此活动向用户显示了他们必须从中选择的选项列表 选项之一是 搜索 选项
  • 对基本适配器类及其功能的疑问

    我正在尝试自定义列表视图 我使用数组列表添加对象列表 并将其发送到扩展基本适配器的类 当我扩展基本适配器类时 它实现了一些方法 例如 getView 等 在 getView 中 我将其发送到将名称 数据 分配给 XML 格式的自定义菜单的类
  • 如果联系人与电话通讯录中的应用程序关联,则显示应用程序图标

    我正在尝试显示与该应用程序关联的电话号码的应用程序图标 我试着跟随this http www c99 org 2010 01 23 writing an android sync provider part 1 链接但是太难了 有没有任何库
  • 找不到资源矢量绘图的异常

    我将在某些设备上运行我的应用程序 其崩溃日志如下 01 04 16 54 02 206 7466 7466 com lawnmowers E AndroidRuntime FATAL EXCEPTION main Process com l
  • 如何手动添加Android Studio依赖

    我多次尝试向我的项目添加依赖项 但每次都会出现错误 我想添加它们的依赖项是 de hdodenhof circleimageview 1 3 0 and com github bumptech glide glide 3 6 1 所以我想下
  • RecyclerView元素更新+异步网络调用

    我有一个按预期工作的回收视图 我的布局中有一个按钮可以填充列表 该按钮应该进行异步调用 根据结果 我更改按钮的外观 这一切都发生得很好 但是 当我单击按钮并快速向下滚动列表时 异步调用的结果会更新新视图的按钮 代替旧视图的视图 我该如何处理

随机推荐