一种linux内核启动时数据跟踪的方法技术

技术编号:7759019 阅读:218 留言:0更新日期:2012-09-14 00:50
本发明专利技术提供了一种linux内核启动时数据跟踪的方法,在linux内核启动时,将启动数据直接写入到串口输出寄存器。本发明专利技术能够调试内核的前提是引导区的引导程序(bootloader)已经正常工作,串口在bootloader下能正常打印信息。在内核执行平台初始化函数之前,串口设置寄存器使用的还是bootloader阶段设置的功能,我们可以直接往串口输出寄存器中写数据,使串口输出我们需要的信息。

【技术实现步骤摘要】

本专利技术涉及通信终端领域,具体的说是通信終端中嵌入式软件的调试方法,该方法中可以跟踪Iinux内核启动时printk盲区的数据。
技术介绍
近年来,随着计算 技术、通信技术的飞速发展,特别是互联网的迅速普及和3C (计算机、通信、消费电子)合一的加速,微型化和专业化成为发展的新趋势,嵌入式产品成为信息产业的主流,而嵌入式Iinux操作系统依据依据其先天的开源优势、強大的网络支持、完整的工具链和广泛的硬件支持等特点,是嵌入式产品的首先操作系统。嵌入式Iinux操作系统是靠bootloader引导启动的。Bootloader的作用之一就是把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行。为保证Iinux系统能够正常运行,在开发阶段对内核的调试是避免不了的操作步骤。目前,常规调试方法如下 在我们日常的嵌入式开发调试中,最常用也是最有效的方法是跟踪查看串ロ输出数据,如果ー个系统没有串ロ输出功能,对开发人员来说是最可怕的,特别是在Linux操作系统中。Linux内核中最常用的调试方法是使用printk函数把相应的数据输出到串ロ,其实现方法是在printk()-> vprintkO函数中使用了ー个printk_buf 的临时缓冲区,用来处理一次传给printk的数据的格式化操作,最后将格式化过的临时数据存储到printk_buf数组中的数据通过emit_log_char函数一个ー个的输送到log_buf []—真正的所有待打印数据的缓冲区,在硬件平台初始化完成后输出到串ロ。但是在硬件平台初始化完成之前,如果系统不能正常运行,那么printk缓冲区的数据是没有办法输出到串ロ的。而此时,如果能够在显示屏或者其它地方看到启动过程中的数据将对不能正常运行的系统故障定位将是非常直观的,定位故障点对解决故障是非常重要的。
技术实现思路
为解决目前Iinux内核启动吋,串ロ控制寄存器初始化完成之前不能及时对启动数据进行跟踪所帯来的不便,本专利技术提供ー种在Iinux内核启动时及时显示启动数据的内核数据跟踪方法。本专利技术为了完成其技术目的所采用的技术方案是ー种Iinux内核启动时数据跟踪的方法,在Iinux内核启动时,将启动数据直接写入到串ロ输出寄存器。进ー步的,上述的Iinux内核启动时数据跟踪的方法中linux内核启动过程中包括以下步骤 步骤A、启动Iinux内核的步骤; 步骤B、将启动数据写入到串ロ寄存器的步骤。本专利技术能够调试内核的前提是引导区的引导程序(bootloader)已经正常工作,串ロ在bootloader下能正常打印信息。在内核执行平台初始化(console_ini)函数之前,串ロ设置寄存器使用的还是bootloader阶段设置的功能,我们可以直接往串ロ输出寄存器中写数据,使串ロ输出我们需要的信息。具体实施例方式实施例1,本实施例中能够在内核阶段调试时有效弥补printk功能的先天性缺陷,做到对嵌入式Iinux内核的全方位跟踪,保证嵌入式产品的稳定运行。首先查看bootloader阶段串ロ发送的方法,其次直接把实现方法拷贝到Iinux内核初始化代码中。下面以boardcom的硬件平台bcm5358u为例,说明解决方法。I、查看bootloader阶段串ロ发送数据的操作方法。bootloader阶段串ロ的初始化是在bcm5358u/bcm_serial. c文件中实现的,最终调用函数NS16550_putcvoid NS16550_putc (char c) {unsigned int status;do { status = R_UART_LSR & LSR_TXRDY;} while ( !status );R_UART_DATA = c;} 找到其使用的寄存器的地址,如下#define CFG_NS16550_C0M1 (( (0x18000000 & Oxlfffffff) | 0xa0000000) +0x300) #define R_UART_DATA (*(volatile unsigned char*)((void*)CFG_NS16550_C0Ml+0x0)) #define R_UART_LSR(*(volatile unsigned char*) ((void*)CFG_NS16550_C0Ml+0x5)) #define LSR_TXRDY 0x20 2、把串ロ发送操作的实现方法直接拷贝到内核。Linux内核的C语言部分初始化是从init/main. c中的start_kernel ()函数开始启动,为了简单起见,把上述函数及宏定义拷贝到main, c中,并封装成debug_prints函数void debug_prints〈char 氺s){while (*s) { NS16550_putc (*s++);}} 3、执行效果 在start_kernel函数开始处按顺序添加如下操作 printk、 \nprintk:start_kernel is starting\n );debug—prints( \ndebug—prints:start_kernel is starting\n ); 如果debug—prints函数能够在printk函数之前输出信息,说明验证成功。编译内核后查看相应的串ロ输出信息如下 Starting kernel......debug—prints:start_kernel is starting printk:start_kerne丄 is starting。权利要求1.一种Iinux内核启动时数据跟踪的方法,其特征在于在Iinux内核启动时,将启动数据直接写入到串口输出寄存器。2.根据权利要求I所述的Iinux内核启动时数据跟踪的方法,其特征在于linux内核启动过程中包括以下步骤 步骤A、启动Iinux内核的步骤; 步骤B、将启动数据写入到串口寄存器的步骤。全文摘要本专利技术提供了,在linux内核启动时,将启动数据直接写入到串口输出寄存器。本专利技术能够调试内核的前提是引导区的引导程序(bootloader)已经正常工作,串口在bootloader下能正常打印信息。在内核执行平台初始化函数之前,串口设置寄存器使用的还是bootloader阶段设置的功能,我们可以直接往串口输出寄存器中写数据,使串口输出我们需要的信息。文档编号G06F11/36GK102662844SQ20121010636公开日2012年9月12日 申请日期2012年4月12日 优先权日2012年4月12日专利技术者张永杰, 朱余浩, 罗小建, 贺福华, 郑明明, 黄双榜, 黄洪波 申请人:深圳市共进电子股份有限公司本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:郑明明贺福华黄双榜罗小建黄洪波张永杰朱余浩
申请(专利权)人:深圳市共进电子股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1