CN102141955B - 一种基于Linux的内核日志***及实现方法 - Google Patents
一种基于Linux的内核日志***及实现方法 Download PDFInfo
- Publication number
- CN102141955B CN102141955B CN 201110078735 CN201110078735A CN102141955B CN 102141955 B CN102141955 B CN 102141955B CN 201110078735 CN201110078735 CN 201110078735 CN 201110078735 A CN201110078735 A CN 201110078735A CN 102141955 B CN102141955 B CN 102141955B
- Authority
- CN
- China
- Prior art keywords
- kernel
- space
- log
- daily record
- kernel log
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种基于Linux的内核日志***,包括内核日志空间,位于Linux内核空间,包含一组连续的内核空间日志结点和一个内核日志控制块;用户日志空间,位于Linux用户空间,由多个用户空间日志结点所构成,其中记录有内容的用户空间日志结点挂接在多个用户空间日志队列中,空闲的用户空间日志结点则组成一个空闲链表;多个日志文件,对应于日志的多个等级,用于将用户空间日志队列中读取的内核日志的分类输出。本发明还提供了一种上述基于Linux的内核日志***的实现方法,包括在Linux内核空间创建内核日志空间、在Linux用户空间创建用户日志空间、完成从内核日志输出到不同的日志文件的步骤。本发明便于程序员对内核程序进行调试和分析,提高内核开发效率。
Description
技术领域
本发明涉及一种基于Linux的内核日志***及实现方法。
背景技术
现代的计算机体系结构中存储管理通常都包含保护机制。提供保护的目的,是要避免***中的一个任务访问属于另外的或属于操作***的存储区域。基于这种构架,Linux操作***对自身进行了划分:一部分核心软件独立于普通应用程序,运行在较高的特权级别上,它们驻留在被保护的内存空间上,拥有访问硬件设备的所有权限,Linux将此称为内核空间。相对的,其它部分被作为应用程序在用户空间执行。它们只能看到允许它们使用的部分***资源,并且不能使用某些特定的***功能,不能直接访问硬件,不能直接访问内核空间,当然还有其他一些具体的使用限制。
调试是软件开发过程中一个必不可少的环节,在Linux内核开发的过程中也不可避免地会面对如何调试内核的问题。但是,Linux***的开发者出于保证内核代码正确性的考虑,不愿意在Linux内核源代码树中加入一个调试器。由于内核是一个不与特定进程相关的功能集合,内核代码无法轻易地放在外界的调试器中执行,而且也很难跟踪。同样,要想复现内核代码中的错误也是相当困难的,因为这种错误可能导致整个***崩溃,这样也就破坏了可以用来跟踪它们的现场。
许多大型的Linux应用***,比如通信***,其主运行平台不可能支持对单个程序进行断点调测。在这样的前提下,目前内核调试的唯一方法是***调用printk,打印调试日志信息到***默认的指定文件中,然后再用***专有命令dmesg查看内核日志。这种方式将所有内核日志打到一个文件中,程序员要遍历整个文件去查找与开发模块相关的日志信息,存在大量信息干扰,十分不便。
中国专利CN101216800B公开了一种Linux日志的管理装置,用于包括应用层和内核的嵌入式***。该管理装置包括:一应用层日志,用于通过应用层日志输出函数输出用户态日志信息;一应用层内核日志传输装置,用于将所述用户态日志信息转送至内核;一内核日志,用于通过内核日志输出函数输出内核态日志信息;一日志输出控制装置,用于分别接收所述应用内核日志传输装置输出的内核态日志信息,并对所述日志信息进行配置、处理与输出。然而,此发明对于内核日志的输出函数,依旧是采用printk函数,也就无法从根本上对内核日志起到有效的管理作用。
发明内容
本发明首先所要解决的技术问题是提供一种基于Linux的内核日志***,使得程序员可以清晰方便地检索Linux内核日志,试和分析Linux***的运行。为此,本发明采用以下技术方案:一种基于Linux的内核日志***,包括三个部分:
1-a)、内核日志空间,位于Linux内核空间,包含一组连续的内核空间日志结点和一个内核日志控制块,
每一个所述的内核空间日志结点,包含日志等级和内核日志存储区,用作对内核日志内容的分类存储,
所述的内核日志控制块,包含对应于内核空间日志结点的一个写位置指针和一个读位置指针,用作对内核日志进行读和写的位置控制;
1-b)、用户日志空间,位于Linux用户空间,由多个用户空间日志结点所构成,其中记录有内容的用户空间日志结点挂接在多个用户空间日志队列中,空闲的用户空间日志结点则组成一个空闲链表,
所述用户空间日志结点,包含日志等级和日志存储区,用于将内核空间日志结点内容读出之后转存于用户空间,
所述多个用户空间日志队列,对应于日志的多个等级,分类挂接记录有不同等级日志的用户空间日志结点;
1-c)、多个日志文件,对应于日志的多个等级,用于将用户空间日志队列中读取的内核日志的分类输出。
在采用以上技术方案的基础上,本发明还可采用以下进一步的技术方案:
所述内核空间日志结点,还包含内核日志标志位,所述内核日志标志位有“空”和“有”两种标志。
所述内核日志控制块,还包含一个用于限制单一进程来移动写位置指针的内核日志锁。
日志的多个等级事先在Linux***软件的代码中被设定。
本发明另一个所要解决的技术问题是提供一种上述基于Linux的内核日志***的实现方法。为此,本发明采用以下技术方案:所述方法包括在Linux内核空间创建内核日志空间的步骤、在Linux用户空间创建用户日志空间的步骤,所述方法还包括用下列三个任务来完成从内核日志输出到不同的日志文件的步骤:
5-a)、内核日志写入任务,将Linux***运行时同步生成的内核日志,依照日志产生的时间顺序,标记成不同日志等级,写入内核日志空间中;
5-b)、内核日志读取任务,以阻塞方式读取内核日志空间的内核日志,内核日志空间无日志时,内核日志读取任务就被挂起;当内核日志空间存在日志时,内核日志读取任务被唤醒,将内核空间结点的日志写入到用户空间结点中;
5-c)、内核日志输出任务,以阻塞方式读取用户日志空间内的日志队列,当日志队列为空时,内核日志输出任务被挂起;当日志队列不为空时,内核日志输出任务被唤醒,从日志队列中取下用户空间日志结点,将其中日志内容输出到日志等级对应的日志文件中。
在采用以上技术方案的基础上,本发明还可采用以下进一步的技术方案:
在所述内核日志写入任务的步骤中,内核日志写入哪一个内核空间日志结点,由移动内核日志写位置指针来控制;在所述内核日志读取任务的步骤中,读取哪一个内核空间日志结点的日志内容,由移动内核日志读位置指针来控制。
内核日志写位置指针和读位置指针在移动之前,要对内核日志控制块进行上锁操作,不允许同时有两个任务移动写位置指针或者读位置指针。
在所述内核日志读取任务和内核日志输出任务的步骤中,对用户空间日志结点的写入或者读出之前,先取得对用户空间日志结点进行读或写的信号量。
在本说明书的发明内容、具体实施方式中所述的“日志”均为“内核日志”,为简洁起见,除第一次出现时表述为“内核日志”,其余都简写为“日志”。
采用本发明,可以将内核日志从内核空间搬移到用户空间中,通过建立多级日志,将内核调试信息进行分类,然后将指定的开发内核模块的调试信息输出到指定的文件中,便于程序员对内核程序进行调试和分析,提高内核开发效率。
附图说明
图1是本发明内核日志空间的数据存储示意图。
图2是本发明用户日志空间的数据存储示意图。
图3是本发明内核日志写入内核日志空间的流程图。
图4是本发明将内核日志读出到用户日志空间的流程图。
图5是本发明将内核日志从用户日志空间输出到日志文件的流程图。
具体实施方式
为了充分理解本发明的技术内容,下面给出具体实施例,结合附图对本发明的技术方案进行较为详细的介绍和说明。
Linux***启动时在Linux***内核空间创建内核日志空间,在Linux***用户空间创建用户日志空间,并设定若干级别的日志文件。本实施例中,日志文件有十个等级,分别命名为log0至log9。
如图1所示,内核日志空间由一组连续的内核日志结点101和一个内核日志控制块102组成。所述内核日志控制块又包括一个内核日志写位置指针103、一个内核日志读位置指针104、和一个内核日志锁105。
所述内核日志结点101用作内核日志内容的存储,每个内核日志结点包含日志状态位,日志等级标志,内核日志存储区三部分;
所述内核日志状态位有“空”和“有”两种标识;
所述日志等级,在本实施例中,分为十级。程序员在编写Linux***软件的的时候,事先对软件程序的各个部分,比如某些特定代码行或者代码段,设定了日志等级。则当程序运行到这个部分时,同步生成的日志就带有事先设定的等级。
所述内核日志控制块102用作对内核日志结点进行内容读写的控制,具体为:
所述内核日志写位置指针103,用作标记当前已写入内容的内核日志结点的位置;
所述内核日志读位置指针104,用作标记将所存储内容读取到用户空间的当前内核日志结点的位置;
所述内核日志锁105,用于对内核日志进行写入操作时上锁,只允许一个线程获得写指针移动的权限。
如图2所示,用户日志空间包括两部分:由各个空闲的用户空间日志结点201所构成的一个链表,和一组用户空间日志输出队列202。
所述用户空间日志输出队列202,各个队列的等级不同,分别对应于不同的日志等级。每个已写入日志内容的用户空间日志结点,按照其日志等级挂在相应的队列中。本实施例中,用户空间日志输出队列共有十个,对应于十个等级。
Linux***运行过程中,内核日志被写入所述的内核日志空间,然后读取到用户日志空间,再按等级输出为不同的日志文件,分别被称为内核日志写入任务、内核日志读取任务和内核日志输出任务,其过程分别如下描述。
如图3所示,Linux***运行时所同步生成的日志,按下列过程写入内核日志空间:
首先是内核日志写入任务利用内核日志锁,对内核日志控制块上锁301;接着获得当前的内核空间日志写位置指针302;判断指针位置是否已经为内核空间日志最后一个结点303。若是,则将内核日志写位置指针置为内核空间日志第一个结点304;若否,则移动内核空间日志写位置指针到下一个结点305。
然后就可以对内核日志控制块解锁306,允许其他线程来写入内核日志。
依据写位置指针找到内核空间日志结点,将日志内容写入存储区307;设置内核日志等级,设置内核日志状态位为“有”,释放内核空间日志写位置指针308。
向内核日志读取任务发送中断,唤醒内核日志读取任务309。
内核日志写入任务结束。
内核日志读取任务通常是处于挂起状态,当被中断唤醒后,如图4所示,执行下列操作:
首先是对内核日志控制块上锁401;接着获得当前的内核空间日志读位置指针402;将内核空间日志读位置指针移动到下一个结点,依据读位置指针找到要读取的内核空间日志结点403;然后就可以对内核日志控制块解锁404,允许其他线程来读取内核日志。
判断内核日志状态位是否为“有”405。若为“空”,则内核日志读取任务返回挂起状态,流程结束;若为“有”,则获取用户空间日志结点信号量,获得空闲的用户空间日志结点406。
将内核空间日志结点内的日志内容复制到用户空间日志结点,并设置日志等级407;设置内核日志状态位为“空”,释放内核空间日志读位置指针408。
获取用户空间日志队列信号量409;将写入内容的用户空间日志结点按日志等级挂到相应的日志队列上410;释放用户空间日志队列信号量和用户空间日志结点信号量411,读取任务完成,返回挂起状态。
内核日志输出到日志文件的流程如图5所示。
内核日志输出任务在Linux***的执行队列中得到执行机会时,首先检查不同等级的所有日志队列是否为空501。若是,则不存在需要输出的日志,内核日志输出任务挂起;若否,则至少有一个日志队列有内容,内核日志输出任务获取指定等级的日志队列信号量502;将挂在该队列中的日志结点取下503;将日志结点中的内容输入到指定的日志文件中504;释放日志队列信号量505;返回重新判断所有日志队列是否为空501。
所述指定的日志文件,是指log0到log9的十个日志文件,分别对应于十个日志等级。
应当理解的是,以上所述从具体实施例的角度对本发明的技术内容进一步的披露,其目的在于让大家更容易了解本发明的内容,但不代表本发明的实施方式和权利保护局限于此。本发明保护范围阐明于所附权利要求书中,凡是在本发明的宗旨之内的显而易见的修改,亦应归于本发明的保护之内。
Claims (4)
1.一种基于Linux的内核日志***的实现方法,所述Linux的内核日志***,包括三个部分:
1-a)、内核日志空间,位于Linux内核空间,包含一组连续的内核空间日志结点和一个内核日志控制块,
每一个所述的内核空间日志结点,包含日志等级和内核日志存储区,用作对内核日志内容的分类存储,
所述的内核日志控制块,包含对应于内核空间日志结点的一个内核日志写位置指针和一个内核日志读位置指针,用作对内核日志进行读和写的位置控制;
1-b)、用户日志空间,位于Linux用户空间,由多个用户空间日志结点所构成,其中记录有内容的用户空间日志结点挂接在多个用户空间日志队列中,空闲的用户空间日志结点则组成一个空闲链表,
所述用户空间日志结点,包含日志等级和日志存储区,用于将内核空间日志结点内容读出之后转存于用户日志空间,
所述多个用户空间日志队列,对应于日志的多个等级,分类挂接记录有不同等级日志的用户空间日志结点;
1-c)、多个日志文件,对应于日志的多个等级,用于将用户空间日志队列中读取的内核日志的分类输出;
其特征在于:
所述方法包括在Linux内核空间创建内核日志空间的步骤、在Linux用户空间创建用户日志空间的步骤,所述方法还包括用下列三个任务来完成从内核日志输出到不同的日志文件的步骤:
5-a)、内核日志写入任务,将Linux***运行时同步生成的内核日志,依照日志产生的时间顺序,标记成不同日志等级,写入内核日志空间中;
5-b)、内核日志读取任务,以阻塞方式读取内核日志空间的内核日志,内核日志空间无日志时,内核日志读取任务就被挂起;当内核日志空间存在日志时,内核日志读取任务被唤醒,将内核空间日志结点的日志写入到用户空间日志结点中;
5-c)、内核日志输出任务,以阻塞方式读取用户日志空间内的日志队列,当日志队列为空时,内核日志输出任务被挂起;当日志队列不为空时,内核日志输出任务被唤醒,从日志队列中取下用户空间日志结点,将其中日志内容输出到日志等级对应的日志文件中。
2.如权利要求1所述的基于Linux的内核日志***的实现方法,其特征在于在所述内核日志写入任务的步骤中,内核日志写入哪一个内核空间日志结点,由移动内核日志写位置指针来控制;在所述内核日志读取任务的步骤中,读取哪一个内核空间日志结点的日志内容,由移动内核日志读位置指针来控制。
3.如权利要求2所述的基于Linux的内核日志***的实现方法,其特征在于内核日志写位置指针和内核日志读位置指针在移动之前,要对内核日志控制块进行上锁操作,不允许同时有两个任务移动内核日志写位置指针或者内核日志读位置指针。
4.如权利要求1所述的基于Linux的内核日志***的实现方法,其特征在于在所述内核日志读取任务和内核日志输出任务的步骤中,对用户空间日志结点的写入或者读出之前,先取得对用户空间日志结点进行读或写的信号量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110078735 CN102141955B (zh) | 2011-03-30 | 2011-03-30 | 一种基于Linux的内核日志***及实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110078735 CN102141955B (zh) | 2011-03-30 | 2011-03-30 | 一种基于Linux的内核日志***及实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102141955A CN102141955A (zh) | 2011-08-03 |
CN102141955B true CN102141955B (zh) | 2013-12-25 |
Family
ID=44409490
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110078735 Active CN102141955B (zh) | 2011-03-30 | 2011-03-30 | 一种基于Linux的内核日志***及实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102141955B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102385632A (zh) * | 2011-12-02 | 2012-03-21 | 苏州阔地网络科技有限公司 | 一种日志自动分类通知方法及*** |
CN104283703A (zh) * | 2013-07-08 | 2015-01-14 | ***通信集团黑龙江有限公司 | 一种用户登录提醒方法及*** |
CN104657277B (zh) * | 2015-03-13 | 2017-12-22 | 浪潮集团有限公司 | 一种基于日志打点的Linux内核调试方法 |
CN108920215A (zh) * | 2018-07-18 | 2018-11-30 | 郑州云海信息技术有限公司 | 一种通过initramfs收集***日志的方法 |
CN110888769B (zh) * | 2018-09-07 | 2021-09-07 | 华为技术有限公司 | 数据处理方法及计算机设备 |
CN111913923A (zh) * | 2020-07-15 | 2020-11-10 | 上海眼控科技股份有限公司 | 日志记录方法、装置、设备以及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1361489A (zh) * | 2000-12-28 | 2002-07-31 | 深圳市中兴通讯股份有限公司 | 一种日志信息的自动循环存储方法和*** |
CN101216800A (zh) * | 2008-01-02 | 2008-07-09 | 中兴通讯股份有限公司 | 一种linux日志的管理装置及方法 |
CN101464908A (zh) * | 2009-01-14 | 2009-06-24 | 北京北方微电子基地设备工艺研究中心有限责任公司 | 一种日志记录的方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011034552A (ja) * | 2009-07-07 | 2011-02-17 | Ricoh Co Ltd | 情報処理装置、情報処理方法および情報処理プログラム |
-
2011
- 2011-03-30 CN CN 201110078735 patent/CN102141955B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1361489A (zh) * | 2000-12-28 | 2002-07-31 | 深圳市中兴通讯股份有限公司 | 一种日志信息的自动循环存储方法和*** |
CN101216800A (zh) * | 2008-01-02 | 2008-07-09 | 中兴通讯股份有限公司 | 一种linux日志的管理装置及方法 |
CN101464908A (zh) * | 2009-01-14 | 2009-06-24 | 北京北方微电子基地设备工艺研究中心有限责任公司 | 一种日志记录的方法及装置 |
Non-Patent Citations (2)
Title |
---|
一种增强的Linux***安全审计机制;徐辉等;《计算机应用研究》;20041130;第21卷(第11期);第151-152页,图1、4 * |
徐辉等.一种增强的Linux***安全审计机制.《计算机应用研究》.2004,第21卷(第11期), |
Also Published As
Publication number | Publication date |
---|---|
CN102141955A (zh) | 2011-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102141955B (zh) | 一种基于Linux的内核日志***及实现方法 | |
CN100375060C (zh) | 一种嵌入式***及其实时内存监控处理方法 | |
CN103455424B (zh) | 基于VxWorks操作***的动态内存泄漏检测方法及装置 | |
US20100313185A1 (en) | Access to test-ready virtual environments | |
CN104951395A (zh) | 一种嵌入式***调试信息处理方法及装置 | |
CN103577308B (zh) | 移动设备的日志文件的获取方法 | |
CN103530118A (zh) | 将自定义dll注入目标进程的方法及装置 | |
CN103440201A (zh) | 动态污点分析装置及其在文件格式逆向解析中的应用 | |
CN101416214A (zh) | 用于基于延续的元运行时环境的抽象执行模型 | |
US9355003B2 (en) | Capturing trace information using annotated trace output | |
CN105074671A (zh) | 用于在内核模块和设备驱动程序中检测并发编程错误的方法和*** | |
CN103440196B (zh) | 一种操作***资源问题检测方法 | |
CN101110044A (zh) | 一种内存监控管理的方法及*** | |
US9298590B2 (en) | Methods and apparatuses for automated testing of streaming applications using mapreduce-like middleware | |
CN103440457A (zh) | 基于进程模拟的二进制程序分析*** | |
CN101609429B (zh) | 一种调试嵌入式操作***的方法和装置 | |
US8141082B2 (en) | Node-based representation of multi-threaded computing environment tasks, and node-based data race evaluation | |
WO2020248510A1 (zh) | 一种终端应用行为反射的处理方法 | |
US20160300069A1 (en) | Data sanitization | |
CN104932972A (zh) | 一种反动态调试应用程序的方法及装置 | |
CN101685420B (zh) | 多线程调试方法和装置 | |
WO2019047510A1 (zh) | IOS平台隐藏dylib文件的方法、存储介质、电子设备及*** | |
CN102135877A (zh) | 自动化构建方法及装置 | |
CN104461880A (zh) | 一种嵌入式***中自动检测内存越界的方法及*** | |
Parri et al. | FaultFlow: A tool supporting an MDE approach for Timed Failure Logic Analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20110803 Assignee: Hangzhou Dongfang Communication Software Technology Co., Ltd. Assignor: Dongfang Communication Co., Ltd. Contract record no.: 2018330000120 Denomination of invention: Linux-based kernel log system and realization method thereof Granted publication date: 20131225 License type: Common License Record date: 20181121 |
|
EE01 | Entry into force of recordation of patent licensing contract |