本发明专利技术揭示了一种Linux中的早期串口打印调试方法及装置。该方法包括:在嵌入式单板的CPU地址空间中,预留一信息传递空间;在Bootloader阶段实现串口驱动和打印函数,并将打印函数地址保存到预留的信息传递空间;将预留的信息传递空间地址作为启动参数传递给Linux;从信息传递空间中取得Bootloader中实现的打印函数地址。本发明专利技术可以在Linux启动的最早期实现真正的调试信息即时打印,提高了Linux开发、移植的效率。
【技术实现步骤摘要】
本专利技术涉及到嵌入式设备的早期打印调试方法,特别涉及到一种使用Linux操作 系统的嵌入式设备的早期打印调试方法。
技术介绍
目前Linux操作系统的应用范围非常广泛,使用Linux的嵌入式设备越来越多。在 新设备上,Linux内核的移植、开发工作成为使用Linux的第一个技术性难关。Linux内核的移植开发,首先需要解决的是调试方法的问题。当前在Linux中 进行早期调试非常困难,在Printk功能启用之前(包括2. 6. 22版本之后加入的early_ printk),缺乏直观高效的调试信息输出方式。许多技术开发人员使用点亮设备上指示灯的 方式来获得当前Linux系统的工作状态,这种方式不但使用不便,而且能够展示的信息相 当有限。
技术实现思路
本专利技术的主要目的为提供一种Linux中的早期串口打印调试方法,可提高Linux 开发、移植的效率。为了实现上述目的,本专利技术提出一种Linux中的早期串口打印调试方法,包括步 骤在嵌入式单板的CPU地址空间中,预留一段受保护的用于从Bootloader向Linux 传递信息的信息传递空间;在Bootloader阶段实现串口驱动和打印函数,并将打印函数地址保存到预留的 信息传递空间;将预留的信息传递空间地址作为启动参数传递给Linux ;从信息传递空间中取得Bootloader中实现的打印函数地址。优选地,所述信息传递空间、Bootloader空间、Linux空间不互相覆盖。优选地,所述打印函数的类型包括Bootloader早期用汇编代码实现的不使用堆 栈的打印以及Bootloader后期用C代码实现的使用堆栈的打印。优选地,所述打印函数的地址保存在信息传递空间中。本专利技术还提出一种Linux中的早期串口打印调试装置,包括地址规划模块,在嵌入式单板的CPU地址空间中,预留一段受保护的用于从 Bootloader向Linux传递信息的信息传递空间;实现保存模块,在Bootloader阶段实现串口驱动和打印函数,并将打印函数地址 保存到预留的信息传递空间;传递模块,将预留的信息传递空间地址作为启动参数传递给Linux ;获取模块,从信息传递空间中取得Bootloader中实现的打印函数地址。优选地,所述信息传递空间、Bootloader空间以及Linux空间不互相覆盖。优选地,所述打印函数的类型包括Bootloader早期用汇编代码实现的不使用堆栈的打印以及Bootloader后期用C 代码实现的使用堆栈的打印。优选地,所述打印函数的地址保存在信息传递空间中。本专利技术所述的Linux中的早期串口打印调试方法,丰富了 Linux的调试手段,可以 在Linux启动的最早期实现真正的调试信息即时打印,提高了 Linux开发、移植的效率。附图说明图1为本专利技术Linux中的早期串口打印调试方法一实施例的流程示意图;图2为本专利技术Linux中的早期串口打印调试方法一实施例的地址空间规划示意 图;图3为本专利技术Linux中的早期串口打印调试方法一实施例的Bootloader实现流 程示意图;图4为本专利技术Linux中的早期串口打印调试方法一实施例的Linux实现流程示意 图;图5为本专利技术Linux中的早期串口打印调试装置一实施例的结构示意图。本专利技术目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。具体实施例方式本专利技术中,Bootloader (引导程序),是在操作系统内核运行之前运行的一段小程 序。通过Bootloader,可以初始化硬件设备、建立内存空间映射,从而将系统的软硬件环境 带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。Uart (Universal Asynchronous Receiver/Transmitter),俗称串口,是一种通用 串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设 计中,UART用来与PC进行通信,包括与监控调试器和其它器件,如EEPROM通信。参照图1所示,其为本专利技术Linux中的早期串口打印调试方法一实施例的流程示 意图,该方法包括步骤S10、在嵌入式单板的CPU地址空间中,预留一段受保护的用于从Bootloader 向Linux传递信息的信息传递空间;其中,上述信息传递空间、Bootloader空间、Linux空 间不互相覆盖。其中,上述嵌入式单板的CPU地址空间中,还可规划出Bootloader的空间。步骤Sl 1、在Bootloader阶段实现串口驱动和打印函数,并将打印函数地址保存 到预留的信息传递空间;其中,上述打印函数的类型有两种,一种是Bootloader早期用汇 编代码实现的不使用堆栈的打印,另一种是Bootloader后期用C代码实现的使用堆栈的打 印。进一步的,两者类型的打印函数的地址都保存到信息传递空间中。步骤S12、将预留的信息传递空间地址作为启动参数传递给Linux;其中,启动参 数为Linux已经实现的参数传递方法。本步骤可在加载Linux操作系统时进行。步骤S13、从信息传递空间中取得Bootloader中实现的打印函数地址;并在此基 础上实现Linux下的打印函数。其中,Linux下的打印函数也有两种,一种是在Linux启动 的早期汇编代码阶段的汇编打印函数,用汇编代码实现的打印;另一种是在Linux启动的4早期C代码阶段的C打印函数,用C代码实现的打印。本步骤可通过修改Linux代码实现, 且可在启动初期进行。本实施例中,在Linux启动阶段使用的打印方法通过串口和显示设备输出调试信 肩、ο参照图2所示,其为本专利技术Linux中的早期串口打印调试方法一实施例的地址 空间规戈丨J不意图,嵌入式设备米用mips (Microprocessor without inter locked piped stages,无内部互锁流水级)架构的处理器,根据mips处理器的要求Bootloader加载地址 为0x9fc0 0000。在本实施例中,将Bootloader的代码段指定链接到0x8cl0 0000地址, 规划0x8c0 0000地址到0x8cl0 0000共IM空间为信息传递空间,用于存贮boot_info信 息。移植后的Linux代码段链接到0x8340 0000地址,只要Linux编译之后不超过140M, 则不会覆盖到信息传递空间及其上的Bootloader代码段空间,进而保证了信息传递空间、 Bootloader空间、Linux空间不互相覆盖。参照图3所示,其为本专利技术Linux中的早期串口打印调试方法一实施例的 Bootloader实现流程示意图,给出了在Bootloader阶段与本专利技术相关的操作流程,包括步骤201 ,Bootloader指定加载到0x9fc 00000地址,且将其代码段链接到0x8cl0 0000。步骤202,在boot阶段实现串口的驱动,使能设备串口。步骤203,在早期的汇编代码阶段,实现汇编代码版本的串口打印函数。该打印函 数用于boot的初期,其功能有限,且因为不对堆栈进行维护,调用者在寄存器的使用上受 限。该打印函数可命名为a_print。步骤204,在后期的C代码阶段,实现C语言代码版本的串口打印函数。该打印函 数用本文档来自技高网...
【技术保护点】
一种Linux中的早期串口打印调试方法,其特征在于,包括步骤:在嵌入式单板的CPU地址空间中,预留一段受保护的用于从引导程序Bootloader向Linux传递信息的信息传递空间;在Bootloader阶段实现串口驱动和打印函数,并将打印函数地址保存到预留的信息传递空间;将预留的信息传递空间地址作为启动参数传递给Linux;从信息传递空间中取得Bootloader中实现的打印函数地址。
【技术特征摘要】
【专利技术属性】
技术研发人员:石东佳,
申请(专利权)人:中兴通讯股份有限公司,
类型:发明
国别省市:94[中国|深圳]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。