需求:嵌入式开发Modem,Modem会不可预料地死掉,问题出现后只能重新上电重启Modem。而且重启之后,出错之前的信息都丢失了。一个思路是修改内核的printk模块,将printk都写到flash中保存起来。重新上电后,查看这一块flash的内容。
printk
--vprintk 将待打印的句子输出到tbuf中。如果没有制定字符的级别,默认加上一个。
--release_console_sem 调用console的驱动将字符串输出到终端/串口。也就是说,我可以创建一种字符设备。它负责将所有的字符串写到flash。
--call_console_drivers 调用console的驱动写字符串。字符串被保存在log_buf中。要计算msg_level
--_call_console_drivers
--__call_console_drivers 遍历console_drivers链
相关函数:
setup.c/setup_arch()
--pdc_console_init() pdc是一种tty设备
--pdc_console_init_force()
--register_console() 注册设备。可以从pdc学习如何做pdc设备。pdc_cons.c
register_console() 注册终端
--
关键结构体:
console 实际应用中,并不需要使用所有字段
--name
--write 写函数,对pdc设备,是pdc_iodc_print
--read 读函数,并不一定有
--device 获取tty_driver,并更新index
--unblank
--setup
--early_setup
--flags
--index
--cflag flag包括CON_PRINTBUFFER/CON_CONSDEV/CON_ENABLED/CON_BOOT/CON_ANYTIME/CON_BRL
--data
--next 指向下一个console