如何屏蔽LOGD\LOGI等打印输出

今天被打印信息的去除困扰了,想了想,如果靠一个一个的改动未免太繁琐。因此就仔细的看了下这部分的打印原理。当然下面只是简单的进行了知识罗列不过有需要的朋友可以随便看看。说不准会有些收获呢。

Include/linux/printk.h中有如下定义:

#defineKERN_EMERG

"<0>"

/* system is unusable

 

 

*/

#defineKERN_ALERT

"<1>"

/* action must be taken immediately

*/

#defineKERN_CRIT

"<2>"

/* critical conditions

 

 

*/

#defineKERN_ERR

"<3>"

/* error conditions

 

 

*/

#defineKERN_WARNING

"<4>"

/* warning conditions

 

 

*/

#defineKERN_NOTICE

"<5>"

/* normal but significant condition

*/

#defineKERN_INFO

"<6>"

/* informational

 

 

*/

#defineKERN_DEBUG

"<7>"

/* debug-level messages

 

 

*/

 

/*Use the default kernel loglevel */

#defineKERN_DEFAULT

"<d>"

/*

*Annotation for a "continued" line of log printout (only done after a

*line that had no enclosing \n). Only to be used by core/arch code

*during early bootup (a continued line is not SMP-safe otherwise).

*/

#defineKERN_CONT

"<c>"

 

externint console_printk[];

 

#defineconsole_loglevel (console_printk[0])

#definedefault_message_loglevel (console_printk[1])

#defineminimum_console_loglevel (console_printk[2])

#definedefault_console_loglevel (console_printk[3])

 

这样定义了通常使用的prink函数调用时的参数。通过上面的定义可以清晰的看到系统默认的loglevel,包括日志级别和控制台级别。

/*printk's without a loglevel use this.. */

#defineDEFAULT_MESSAGE_LOGLEVEL CONFIG_DEFAULT_MESSAGE_LOGLEVEL

 

/*We show everything that is MORE important than this.. */

#defineMINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */

#defineDEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */

 

DECLARE_WAIT_QUEUE_HEAD(log_wait);

 

intconsole_printk[4] = {

DEFAULT_CONSOLE_LOGLEVEL,

/* console_loglevel */

DEFAULT_MESSAGE_LOGLEVEL,

/* default_message_loglevel */

MINIMUM_CONSOLE_LOGLEVEL,

/* minimum_console_loglevel */

DEFAULT_CONSOLE_LOGLEVEL,

/* default_console_loglevel */

};

通过上面的了解,可以知道当linux内核启动之后,能够看到那些级别的log信息。当然很多情况下,添加打印信息都是为了方便调试,当系统启动之后,很有可能我们变得很讨厌添加的log信息,或者想看到某个级别的信息。此时如果重新编译kernel然后烧写就会很浪费时间。这种情况下,应该最好能及时的修改日志级别看到真正想要看到的log 信息。

既然有这样的需求,那么linux能否提供呢?

答案当然不出意料,在linux中的特殊的文件proc中,就有这样可以进行操作的文件。

使用如下命令查看现在的printk的情况:

#cat /proc/sys/kernel/printk

7 4 1 7

对照上面的信息,就知道现在console中的级别为7,为了屏蔽部分信息,可以通过如下命令

#echo 4 > /proc/sys/kernel/printk

 

LOGE\LOGD\LOGI等宏定义一般都是某个公司自己内部定义使用的打印函数,一般定义在board端的一个log-private.h文件中 ,被log.h文件引用之后,被hardware.h文件引用。在驱动中的头文件如果包含了这个头文件,那么程序中就可以使用LOGI的打印宏定义。

<think>我们正在使用ESP-IDF开发环境,并且想要在ESP32-S3上运行中文TTS(Text-to-Speech)示例,同时希望将日志输出到串口。根据用户的问题,我们需要配置两个主要部分:运行中文TTS示例和启用串口日志输出。 ### 步骤1:获取中文TTS示例代码 中文TTS示例可能在ESP-IDF的示例目录中,或者需要从其他仓库获取。根据引用[3]提到,我们可以使用esp-iot-solution中的TTS相关示例。具体步骤如下: 1. 克隆esp-iot-solution仓库(注意:用户引用[3]中提到了使用`usb/add_usb_solutions`分支,但我们需要的是TTS,所以可能需要其他分支或主分支): ```bash git clone -b master --recursive https://github.com/espressif/esp-iot-solution ``` 如果遇到子模块更新失败,可以进入`esp-iot-solution`目录手动更新子模块: ```bash cd esp-iot-solution git submodule update --init --recursive ``` 2. 中文TTS示例位于`esp-iot-solution/examples/tts/`目录下,其中可能包含`chinese_tts`示例。 ### 步骤2:将示例复制到ESP-IDF的工作目录 将`chinese_tts`示例复制到你的项目目录中,例如: ```bash cp -r esp-iot-solution/examples/tts/chinese_tts ~/esp/my_projects/ cd ~/esp/my_projects/chinese_tts ``` ### 步骤3:配置项目 1. 设置目标芯片为ESP32S3: ```bash idf.py set-target esp32s3 ``` 2. 运行配置菜单: ```bash idf.py menuconfig ``` ### 步骤4:启用串口日志输出 在`menuconfig`中,我们需要配置串口作为日志输出通道: 1. 进入`Component config` -> `Log output`。 2. 选择`Default log verbosity`(默认日志级别),例如选择`Info`(信息级别)。 3. 在`Log output`子菜单中,确保选择`Print via UART`(通过UART打印)被选中(默认通常已选中)。 4. 设置`UART for console output`(控制台输出的UART端口)。对于ESP32-S3,通常使用UART0(GPIO43为TX,GPIO44为RX)或UART1(默认USB CDC可能占用,但这里我们使用串口)。注意:ESP32-S3的默认串口0的TX是GPIO43,RX是GPIO44。如果你使用开发板的USB转串口芯片连接的是这些引脚,那么默认即可。 ### 步骤5:配置TTS(如果需要) 在`menuconfig`中,可能还需要配置TTS相关参数: 1. 进入`Component config` -> `ESP Speech Recognition` -> `Chinese TTS`(路径可能类似,具体根据示例的Kconfig配置)。 2. 确保启用中文TTS,并配置相关参数(如语音模型等)。 ### 步骤6:编译和烧录 ```bash idf.py build idf.py -p /dev/ttyUSB0 flash monitor ``` 这里`/dev/ttyUSB0`是串口设备,根据你的系统更改。`monitor`选项将启动串口监视器,这样你就可以看到从串口输出的日志。 ### 步骤7:查看日志 程序运行时,日志将通过串口输出。你可以使用`idf.py monitor`或者任何串口终端工具(如Putty、minicom等)查看。 ### 注意事项 - 如果使用ESP32-S3的USB CDC功能(引用[3]提到),也可以将日志输出到USB CDC。但用户要求串口,所以我们使用UART。 - 确保硬件连接正确:ESP32-S3的UART0的TX连接到USB转串口芯片的RX,RX连接到TX。 ### 示例代码修改(如果需要) 在TTS示例代码中,可能已经包含日志输出,但如果你想添加自定义日志,可以在代码中使用: ```c #include "esp_log.h" static const char *TAG = "TTS_DEMO"; void app_main() { ESP_LOGI(TAG, "Starting Chinese TTS example"); // ... 其他代码 } ``` ### 相关问题 1. 如何修改ESP32-S3的串口引脚配置? 2. 如何提高ESP32-S3的TTS性能? 3. 如何将TTS生成的PCM数据通过I2S输出? 4. 如何降低TTS示例的日志级别以减少输出? 通过以上步骤,你应该能够在ESP32-S3上运行中文TTS示例,并通过串口查看日志输出。</think>在ESP-IDF中配置ESP32-S3运行中文TTS示例并启用串口日志输出,请按以下步骤操作: ### 1. 准备开发环境 ```bash # 克隆esp-iot-solution仓库(包含中文TTS示例) git clone -b master --recursive https://github.com/espressif/esp-iot-solution cd esp-iot-solution/examples/tts/chinese_tts ``` ### 2. 设置目标芯片 ```bash idf.py set-target esp32s3 ``` ### 3. 配置串口日志输出 运行配置菜单: ```bash idf.py menuconfig ``` 进行以下关键配置: 1. **Component config → Log output**: - 选择`Default log verbosity`为`Info`(推荐) - 启用`✔️ Print via UART` - 设置`UART for console output`为`Custom UART` 2. **Component config → ESP System Settings → Channel for console output**: - 选择`UART`作为控制台通道 3. **Serial flasher config**: - 确认`Default serial port`设置为您的串口设备(如`/dev/ttyUSB0`) ### 4. 修改示例代码(可选) 在`main.c`中添加日志输出: ```c #include "esp_log.h" static const char *TAG = "TTS_DEMO"; void app_main() { ESP_LOGI(TAG, "启动中文TTS示例"); // ... 原有代码 ... ESP_LOGD(TAG, "PCM数据地址: %p", pcm_data); ESP_LOGI(TAG, "音频生成完成,长度: %d", len); } ``` ### 5. 编译并烧录固件 ```bash idf.py build idf.py -p /dev/ttyUSB0 flash ``` ### 6. 查看串口日志 使用串口监视工具查看输出: ```bash idf.py -p /dev/ttyUSB0 monitor ``` 或使用其他串口工具(如Putty、minicom): - 波特率:115200 - 数据位:8 - 停止位:1 - 校验位:None ### 关键配置说明 1. **日志级别控制**: - `ESP_LOGE()` - 错误(红色) - `ESP_LOGW()` - 警告(黄色) - `ESP_LOGI()` - 信息(绿色) - `ESP_LOGD()` - 调试(蓝色) - `ESP_LOGV()` - 详细(青色) 2. **运行时调整日志级别**: ```bash idf.py monitor -p /dev/ttyUSB0 --log-level info ``` 3. **配置文件覆盖**: 在`sdkconfig.defaults`中添加: ``` CONFIG_LOG_DEFAULT_LEVEL_INFO=y CONFIG_ESP_CONSOLE_UART=y CONFIG_ESP_CONSOLE_UART_NUM=0 ``` ### 常见问题排查 1. **无日志输出**: - 检查`menuconfig`中`UART for console output`是否启用 - 确认开发板串口连接正确(ESP32-S3默认UART0: TX=GPIO43, RX=GPIO44) 2. **中文乱码**: ```c // 在app_main开头添加 setlocale(LC_ALL, "zh_CN.UTF-8"); ``` 3. **日志不完整**: 在`menuconfig`中调整: ``` Component config → Log output → Maximum log verbosity → Info ``` ### 输出示例 ``` I (512) TTS_DEMO: 启动中文TTS示例 I (1024) TTS_ENGINE: 加载中文语音模型 D (1536) TTS_CORE: PCM缓冲区分配: 32000字节 I (2048) TTS_DEMO: 音频生成完成,长度: 16000 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值