mtk平台串口使用

mtk平台串口使用

preloader

alps\vendor\mediatek\proprietary\bootable\bootloader\preloader\custom\xxx_lwctg65_64\cust_bldr.mak
CFG_UART_LOG :=UART1
CFG_UART_META :=UART1 
log输出串口通道配置   

lk

alps\vendor\mediatek\proprietary\bootable\bootloader\lk\app\mt_boot\mt_boot.c
     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=0");
      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=0");//修改为1,切到kernel的时候可以关闭log输出,显示console,用来输入命令
      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=0 ddebug_query=\"file *mediatek* +p ; file *gpu* =_\"");
      break;

kernel

alps\kernel-4.9\kernel\printk\printk.c
void mt_disable_uart(void)
{

  //printk_disable_uart = 0;
  //return;//默认开机动画结束后关闭kernel log输出,改为0,让log一直输出,调试用

  /* uart print not always enable */
  if ((mt_need_uart_console != 1) && (printk_disable_uart != 2))
    printk_disable_uart = 1;
} 
alps\kernel-4.9\arch\arm64\boot\dts\mediatek\mt6765.dts
  chosen: chosen {
    bootargs = "console=tty0 console=ttyS0,921600n1 vmalloc=400M \
slub_debug=OFZPU page_owner=on \
swiotlb=noforce androidboot.hardware=mt6765 \
maxcpus=8 loop.max_part=7 \
firmware_class.path=/vendor/firmware"; 
ttyS0对应preloader里 UART1

device

//打开uart控制台
persist.vendor.uartconsole.enable=1 

init.rc

alps\system\core\rootdir\init.rc
service console /system/bin/sh
    class core
    console
    #disabled
    user root  #默认是shell
    group shell log readproc
    seclabel u:r:shell:s0
    setenv HOSTNAME console

on property:ro.debuggable=1   # eng 和userdebug这个属性为1
    # 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

参考faq

  • Android P/Q uart log进lunch 关了,如何打开

    [SOLUTION]

    1. eng版本下如果有出现log 暂停,可以在log tool(例如:ttermpro)输入任意字符,触发log 继续。

    2. userdebug版本 :

      (1) 通过下cmd 打开: adb shell setprop persist.vendor.uartconsole.enable 1 (reboot 之后uart log 仍然可以输出)

      (2) 也可以通过修改Kernel文件: alps/kernel-xx/kernel/printk.c : 修改函数mt_disable_uart()

      printk_disable_uart=1为0, 这个条件在mt_enable_uart()和_call_console_drivers()都使用
      
    3. user 版本: 进入kernel 之后默认uart log 停止

    (1) modify mt_boot.c to enable kernel printk:  修改cmdline中'printk.disable_uart=0'。 path: vendor\mediatek\proprietary\bootable\bootloader\lk\app\mt_boot\mt_boot.c: boot_linux_fdt() 
    
    (2)  cmdline中如果含有‘loglevel=0' ,请修改为 ‘loglevel=8' (check dts里面配置)
    
  • 通过串口进入敲 shell 命令的方法

    [SOLUTION]

    Uart Tx Rx 在DCT中分别配制成 UTXD URXD模式。

    Tx Rx 通过串口线和PC连接。确认Uart 能吐 log,此时PC串口软件(如超级终端)中敲回车,会出现输入提示符,可以敲 shell 命令了。

    如不能输入, 请检查如下命令的输出:

    1. adb shell cat /proc/cmdline 可以看到Uart 输入输出的端口。

    2. adb shell cat /init.rc 确认有如下内容:

    service console /system/bin/sh

    class core
    
    console
    
    disabled
    
    user root
    
    group log
    
    on property:ro.debuggable=1
    
       start console
    
    1. adb shell getprop ro.debuggable

      确认其值为 1
      
  • Android L 版本后uart console 没有root 权限的说明

    在Android L 后,Google 增强了Android 系统安全性, 强制性开启了SELinux. 去除了uart console 的root 权限. 如果你需要uart console , 可以临时调整.

    (1). system/core/rootdir/init.rc

    service console /system/bin/sh

    class core
    
    console
    
    disabled
    
    user shell
    
    seclabel u:r:shell:s0
    

    删除后面的user shell 这行以及 seclabel u:r:shell:s0 (M 版本后不能删除)这行.

    注意的是: M 版本后, seclabel u:r:shell:s0 这行不能删除, 否则console service 无法启动, 其原因是: Google 增强了这块的SELinux约束,通过使用neverallow init { file_type fs_type}:file execure_no_trans;严格限制了init 启动service 都必须进行domain 切换,否则service 无法启动.

    (2). 将SELinux 设置成permissve mode, 不然你还拿不到完整的root 权限 参考FAQ:

    FAQ11484 [SELinux] 如何设置确认selinux 模式

    https://online.mediatek.com/Pages/FAQ.aspx?List=SW&FAQID=FAQ11484

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值