嵌入式Linux 在做驱动模块相关操作时,往往需要开启串口打印printk实时观察运行的状态,特把亲自实验过程和遇到的问题分享出来。
一、首先把串口驱动模块一定要编译进内核(如果之前没有做的话)。
yangjh@win10yangjh:~/work/t0d/platform/kernel$ make menuconfig
进入kernel目录下运行make menuconfig,按下图依次Device Drivers--->Character device--->Serial drivers--->找到enable uart0,按空格键切到 [ * ], 并且保存后离开。
二、重新编译内核。
yangjh@win10yangjh:~/work/t0d/platform/kernel$ ./build.sh
三、提高debug信息输出的优先级。
由于debug信息的优先级最低,是8,如果不降低串口输出的级别,还是没有debug信息输出,降低的两个方法:
1、在运行的机器上,实时的修改:echo 8 > /proc/sys/kernel/printk
2、直接在修改内核代码:
/home/yangjh/work/t0d/project/bsp/t31z/rootfs/etc/init.d/rcS
打开rcS文件,并增加内容:
echo 8 > /proc/sys/kernel/printk
重新编译内核和下载新固件。串口就会有内核的printk信息了。
四、参考:printk信息输出优先级的定义
printk等级(路径:include/linux/kern_levels.h)
#define KERN_EMERG KERN_SOH "0" /* 最高输出等级,系统可能处于不可用的状态 */
#define KERN_ALERT KERN_SOH "1" /* 紧急和理科需要处理的输出 */
#define KERN_CRIT KERN_SOH "2" /* 紧急情况 */
#define KERN_ERR KERN_SOH "3" /* 发生错误的情况 */
#define KERN_WARNING KERN_SOH "4" /* 警告 */
#define KERN_NOTICE KERN_SOH "5" /* 重要的提示 */
#define KERN_INFO KERN_SOH "6" /* 提示信息 */
#define KERN_DEBUG KERN_SOH "7" /* 调试输出 */