一种保存Linux内核打印信息的方法及装置制造方法及图纸

技术编号:15054628 阅读:81 留言:0更新日期:2017-04-06 00:39
本申请公开了一种保存Linux内核打印信息的方法和装置。其中所述保存Linux内核打印信息的方法包括:接收内核打印信息;获取保留内存的环形缓冲区的使用状态数据;根据所述使用状态数据,将所述内核打印信息存储到所述保留内存的环形缓冲区。采用本申请提供的方法,能够在不断电的情况下记录多次启动的内核打印信息,避免了多进程处理和文件写操作,从而达到提高记录多次启动的内核打印信息的实时性的效果。

【技术实现步骤摘要】

本申请涉及Linux内核领域,具体涉及一种保存Linux内核打印信息的方法及装置
技术介绍
Linux是一个一体化内核系统,实质是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一套基于Linux内核的完整操作系统被称为Linux操作系统。目前,Linux操作系统以其高效和灵活性日益得到广泛应用。在Linux操作系统实际运行过程中,为了增强操作系统的稳定性,需要查看日志记录区中的内核打印信息,以便分析系统异常时的状态信息,有效地定位发生系统异常的原因。Linux内核发生的系统异常包括操作系统在不知名的原因下重启,或是操作系统挂死导致的看门狗复位等异常。一种常用的记录内核打印信息的方法是使用Linux自带的dmesg日志记录内核打印信息。该方法将printk函数的内核打印消息记录到长度为__LOG_BUF_LEN字节的环形缓冲区中,__LOG_BUF_LEN值从4KB到1MB,在配置内核时进行选择。如果环形缓存区被填满的话,printk将绕回环形缓存区...

【技术保护点】
一种保存Linux内核打印信息的方法,其特征在于,包括:接收内核打印信息;获取保留内存的环形缓冲区的使用状态数据;所述保留内存是指自加载引导程序开始即不对其再进行分配的内存,包括头区和环形缓冲区;所述头区存储所述环形缓冲区的使用状态数据,所述使用状态数据至少包括所述保留内存的环形缓冲区的头指针指向的内存地址、尾指针指向的内存地址、环形缓冲区的使用长度和环形缓冲区是否已满标志;所述保留内存的环形缓冲区存储所述内核打印信息;根据所述使用状态数据,将所述内核打印信息存储到所述保留内存的环形缓冲区。

【技术特征摘要】
1.一种保存Linux内核打印信息的方法,其特征在于,包括:
接收内核打印信息;
获取保留内存的环形缓冲区的使用状态数据;所述保留内存是指自加载引
导程序开始即不对其再进行分配的内存,包括头区和环形缓冲区;所述头区存
储所述环形缓冲区的使用状态数据,所述使用状态数据至少包括所述保留内存
的环形缓冲区的头指针指向的内存地址、尾指针指向的内存地址、环形缓冲区
的使用长度和环形缓冲区是否已满标志;所述保留内存的环形缓冲区存储所述
内核打印信息;
根据所述使用状态数据,将所述内核打印信息存储到所述保留内存的环形
缓冲区。
2.根据权利要求1所述的保存Linux内核打印信息的方法,其特征在于,
还包括:
将所述内核打印信息存储到所述内核的缓冲区。
3.根据权利要求1所述的保存Linux内核打印信息的方法,其特征在于,
在所述接收内核打印信息之前,还包括:
设置保留内存管理设备,所述管理设备是指在Linux设备模型的基础上实
现的用于管理保留内存的字符设备;所述管理设备至少包括Linux内核的字符设
备结构体、主设备号,从设备号、保留内存指针和环形缓冲区指针,所述保留
内存指针指向所述保留内存的起始地址,所述环形缓冲区指针指向所述保留内
存的环形缓冲区的起始地址。
4.根据权利要求3所述的保存Linux内核打印信息的方法,其特征在于,
在所述设置保留内存管理设备之前,还包括:
设置所述保留内存。
5.根据权利要求4所述的保存Linux内核打印信息的方法,其特征在于,
所述设置保留内存包括:
设置所述保留内存的起始地址和长度;
将通用的引导程序加载到物理内存的第一预设地址处运行,加载、运行所
述引导程序所占内存空间与所述保留内存所占内存空间不重叠;
在Linux内核引导阶段,将所述保留内存的起始地址和长度传入Linux内核;
将所述Linux内核加载到物理内存的第二预设地址处运行,加载所述Linux
内核所占内存空间与所述保留内存所占内存空间不重叠;
在初始化内存分配器bootmem后,将所述保留内存所占内存空间标记为已
使用。
6.根据权利要求5所述的保存Linux内核打印信息的方法,其特征在于,
所述将所述保留内存的起始地址和长度传入Linux内核包括:
使用专用结构体保存所述保留内存的起始地址和长度;
通过通用寄存器,将所述专用结构体的起始地址传递给所述Linux内核。
7.根据权利要求6所述的保存Linux内核打印信息的方法,其特征在于,
在所述通过通用寄存器,将所述专用结构体的起始地址传递给所述Linux内核之
后,启动所述Linux内核过程中执行head.s文件时,还包括:
将所述保留内存的起始地址保存到所述专用结构体的指针中;所述专用结
构体的指针是全局变量。
8.根据权利要求3所述的保存Linux内核打印信息的方法,其特征在于,
所述设置保留内存管理设备包括:
建立所述管理设备;
初始化所述管理设备;
所述字符设备结构体接收引导程序发送的所述保留内存的起始地址和长
度;
所述字符设备结构体将所述保留内存的起始地址赋值给所述保留内存指
针;
根据接收的所述保留内存的起始地址和长度,建立所述保留内存的头区和
所述保留内存的环形缓冲区;
将建立的所述保留内存的环形缓冲区的起始地址赋值给所述环形缓冲区指
针;
建立获取所述保留内存的环形缓冲区中存储的所述内核打印信息的接口;
将所述接口的指针赋值给所述字符设备结构体的文件操作的读函数;
将所述字符设备结构体注册到所述Linux内核的设备管理模块;
使用全局变量标记所述管理设备已初始化。
9.根据权利要求1所述的保存Linux内核打印信息的方法,其特征在于,
所述根据所述使用状态数据,将所述内核打印信息存储到所述保留内存的环形
缓冲区包括:
遍历所述内核打印信息的各个字符,将所述字符写入所述尾指针指向的内
存地址,根据所述使用状态数据的环形缓冲区是否已满标志,判断所述保留内
存的环形缓冲区是否已满;
当所述保留内存的环形缓冲区已满时,将所述尾指针和所述头指针分别指
向各自当前指向的内存地址的下一个内存地址;如果所述头指针或所述尾指针
在所述环形缓冲区的末尾时,它的下一个内存地址是所述环形缓冲区的起始地
址;
当所述保留内存的环形缓冲区未满时,将所述环形缓冲区的使用长度加一,
并判断所述环形缓冲区的使用长度是否等于所述环形缓冲区的预订长度;若是,
则将所述尾指针指向所述保留内存的环形缓冲区的起始地址,将所述头指针指
向其当前指向的内存地址的下一个内存地址,并将所述环形缓冲区是否已满标
志设置为已满;若否,则将所述尾指针指向其当前指向的内存地址的下一个内
存地址。
10.根据权利要求3-9任一项所述的保存Linux内核打印信息的方法,其特
征在于,还包括:
通过所述管理设备将所述内核打印信息显示在屏幕上,或者将所述内核打
印信息存储在文件中。
11.一种保存Linux内核打印信息的装置,其特征在于,包括:
接收单元,用于接收内核打印信息;
获取单元,用于获取保留内存的环形缓冲...

【专利技术属性】
技术研发人员:王胜华
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛;KY

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

1