CN102929779A - 一种Linux驱动程序调试方法 - Google Patents
一种Linux驱动程序调试方法 Download PDFInfo
- Publication number
- CN102929779A CN102929779A CN2012104280271A CN201210428027A CN102929779A CN 102929779 A CN102929779 A CN 102929779A CN 2012104280271 A CN2012104280271 A CN 2012104280271A CN 201210428027 A CN201210428027 A CN 201210428027A CN 102929779 A CN102929779 A CN 102929779A
- Authority
- CN
- China
- Prior art keywords
- debugged
- driver
- linux
- debugging
- chip microcomputer
- 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.)
- Pending
Links
Images
Landscapes
- Microcomputers (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种Linux驱动程序调试方法。该方法包括:步骤A:在单片机系统中运行待调试Linux驱动程序;步骤B:判断所述待调试Linux驱动程序是否运行正常,若运行正常,则进入步骤D,反之,进入步骤C;步骤C:使用单片机集成开发环境和单片机硬件调试工具驱动程序源码以进行跟踪调试和/或单步调试,根据调试对所述待调试Linux驱动程序代码进行修改并重新编译得到所述待调试Linux驱动程序后,返回步骤A;步骤D:运行正常的待调试Linux驱动程序作为调试好的Linux驱动程序并将其移植到Linux上。使用本发明的方法能够较快速、方便地定位、解决漏洞和/或错误。
Description
技术领域
本发明涉及一种程序调试技术,尤其涉及一种Linux驱动程序调试方法。
背景技术
目前,基于Linux下的驱动开发为最具技术含量的科技工作之一,驱动软件的编写中,最主要的是BUG的解决,其中核心在于错误和/或漏洞(BUG)的定位。对于任何一位驱动程序的编写者来说,最急迫的问题之一就是如何完成调试。现在Linux下驱动程序的代码量越来越大,复杂程度越来越高。这给Liunx下的驱动程序的调试,带来了极大的不便。同时Linux下的驱动程序的调试工具却发展缓慢,单步调试、实时监控都不是容易的事。
现有的调试方法主要是串口打印信息的方法,该方法包括:开启调试功能,设置内核;执行调试命令,获取内核中的串口打印信息;关闭调试功能,清除内核,停止获取串口打印信息。这种方法缺点非常明显和致命。比如使用很繁琐、不方便、无法实时获得程序出现BUG的运行环境等。严重的阻碍了开发人员对于程序BUG的调试和问题的解决。
因此,急需一种易于实施的Linux下的驱动调试方法来解决上述技术问题,以使开发人员可以较快速、方便地定位、解决BUG。
发明内容
本发明所要解决的技术问题之一是需要提供一种较快速、方便地定位、解决BUG的Linux驱动程序调试方法。
为了解决上述技术问题,本发明提供了一种Linux驱动程序调试方法,该方法包括:
步骤A:在单片机系统中运行待调试Linux驱动程序;
步骤B:判断所述待调试Linux驱动程序是否运行正常,若运行正常,则进入步骤D,反之,进入步骤C;
步骤C:使用单片机集成开发环境和单片机硬件调试工具驱动程序源码以进行跟踪调试和/或单步调试,根据调试对所述待调试Linux驱动程序代码进行修改并重新编译得到所述待调试Linux驱动程序后,返回步骤A;
步骤D:运行正常的待调试Linux驱动程序作为调试好的Linux驱动程序并将其移植到Linux上。
根据本发明一方面的方法,所述单片机系统是MCU系统。
根据本发明一方面的方法,所述单片机系统是51芯片、AVR芯片、MIPS芯片和ARM芯片中任一。
根据本发明一方面的方法,所述集成开发环境是Keil和IAR中任一,所述硬件调试工具是H-JTAG、ulink和Jlink中任一。
根据本发明一方面的方法,在所述待调试Linux驱动程序是非通用输入输出的目标接口的待调试驱动程序时,先通过上述步骤A至步骤C调试通用输入输出的所述待调试驱动程序,再通过上述步骤A至步骤C调试基于所述目标接口的所述待调试驱动程序。
根据本发明一方面的方法,所述目标接口为I2C串行接口。
与现有技术相比,本发明的一个或多个实施例可以具有如下优点:
本发明通过基于单片机的调试方法,充分利用单片机中丰富功能强大的调试方法和手段来调试Linux驱动程序。充分利用单片机中丰富的集成开发环境、价格低廉的硬件调试器,可以帮助开发人员实时跟踪程序的运行,监控几乎所有需要监控的程序运行参数,可以方便开发人员进行当步执行、调试变量的改变等。
由于是基于单片机的调试方法,克服了对驱动程序不易监控和调试的问题,提高了开发人员的效率。
虽然在下文中将结合一些示例性实施及使用方法来描述本发明,但本领域技术人员应当理解,为并不旨在将本发明限制于这些实施例。反之,旨在覆盖包含在所附的权利要求书所定义的本发明的精神与范围内的所有替代品、修正及等效物。
本发明的其他优点、目标,和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书,权利要求书,以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中:
图1是根据本发明第一实施例的GPIO控制驱动程序的调试的流程示意图;
图2是根据本发明第二实施例的AT24C02的I2C的驱动程序调试的流程示意图。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。
另外,在附图的流程图示出的步骤可以在任意一种单片机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
第一实施例
图1是根据本发明第一实施例的用于Linux系统的通用输入输出(GPIO,General Purpose I/O)控制驱动程序的调试的流程示意图,下面根据图1详细说明本实施例的各个步骤。
在本发明第一实施例中,优选地,将使用基于ARM内核的例如STM32F207VE等单片机系统进行驱动程序的调式。单片机集成开发环境则优选的使用IAR,单片机硬件调试工具优选的使用Jlink或ulink。
在本发明第一实施例中,主要是对一个编写好的GPIO的控制驱动程序(对应于待调试Linux驱动程序)进行调试,该GPIO的控制驱动程序用于实现5个LED灯间隔1s的流水闪烁效果。开发人员编写GPIO的控制驱动程序,准备好调试用的软硬件工具。步骤S110,在单片机系统中运行待调试Linux驱动程序。
在本实例中,在STM32F207单片机板子上运行该GPIO控制驱动程序。
步骤S120:判断待调试Linux驱动程序是否运行正常,若运行正常,则进入步骤S140,反之,进入步骤S130。在本例中,出现异常,例如发现程序在第3个LED灯不亮,而第2个和第4个LED灯之间相隔2秒,因此进步骤S130。步骤S130,使用单片机集成开发环境和单片机硬件调试工具驱动程序源码以进行跟踪调试和/或单步调试,根据调试对所述待调试Linux驱动程序代码进行修改并重新编译得到所述待调试Linux驱动程序后,返回步骤S110。
在本实例中,使用IAR集成开发环境,Jlink硬件调试器去驱动程序源码进行跟踪,单步调试。调试发现控制第三个LED灯的GPIO的控制寄存器设置不正确即查找问题根源。修正控制程序源码,重新编译,在STM32F207单片机板子运行,显示正常。步骤S140,将调试好的GPIO的控制驱动程序移植到Linux上,本实施案例结束。
第二实施例
在本实施例中,提供了一种非GPIO出的目标接口(亦即,该目标接口不是通用输入输出接口)的待调试驱动程序时、先通过上述S110至S130的处理调试GPIO的待调试驱动程序,再通过上述S110至S130的处理调试基于目标接口的所述待调试驱动程序的方法。
图2是根据本发明第二实施例的用于Linux系统的AT24C02的I2C(Inter-Integrated Circuit)的驱动程序调试的流程示意图,下面参照图2对该实施例进行说明。
AT24C02是一个2K位串行CMOS E2PROM。本实例中的目标接口为I2C接口。
在本发明第二实施例中,优选地,将使用基于ARM(也可以是AVR等)内核的STM32F207VE单片机(也可以是LPC2138、C8051F020等)系统进行驱动程序的调式。这里以STM32F207VE作为单片机系统的例子,是因为目前ARM内核的产业链最为成熟,调试工具最为丰富,而其中STM32系列则是ARM单片机中,为市场应用较广、占有率较高的单片机系统之一,因此较具有代表性。集成开发环境则优选的使用Keil,硬件调试工具优选的使用ulink。
在本发明第二实施例中,主要是编写一个AT24C02的I2C的驱动程序(目标接口的驱动程序),实现对于基于I2C串行接口的AT24C02的存储器的读写。本例使用芯片的GPIO模拟I2C的方式实现I2C的串行通信协议。开发人员编写基于GPIO的I2C串行通信协议的驱动程序和AT24C02的I2C的驱动程序,准备好调试用的软硬件工具。
步骤S210,在STM32F207VE单片机板子上运行该基于GPIO的I2C串行通信控制驱动程序,如果运行正常,跳到步骤S230,否则进行步骤S220。
步骤S220,使用Keil集成开发环境,ulink硬件调试器去驱动基于GPIO的I2C串行通信控制驱动程序的程序源码以进行跟踪,单步调试。调试发现问题的原因所在,修正控制程序源码,重新编译,在STM32F207单片机板子运行,直至显示正常,进入步骤230。
步骤S230,在STM32F207单片机板子上运行该AT24C02的I2C的驱动程序,如果运行正常,跳到步骤S250,否则进行步骤S240。
步骤S240,使用Keil集成开发环境,ulink硬件调试器去驱动程序源码进行跟踪,单步调试。调试发现问题的原因所在,修正控制程序源码,重新编译,在STM32F207单片机板子运行,直至显示正常。
步骤S250,将调试好的AT24C02的I2C的驱动程序移植到Linux上,本实施案例结束。
这样,通过编写基于GPIO的I2C串行通信协议的驱动程序,并先调试基于GPIO的I2C串行通信协议的驱动程序,可以使得调试整个驱动程序的过程更加简化,使得每个驱动程序调试相对容易。此外,由于AT24C02的I2C的驱动程序可以分成I2C串行通信协议的驱动程序和AT24C02的I2C的驱动程序。前者作为一种通用的I2C串行通信协议的驱动程序可以被各种基于I2C协议的设备调用。AT24C02就是其中的一种设备。因此,进行这样的可分阶段调试的设计也可使得驱动的框架明确、层次分明,符合Linux驱动设计中设备模型的要求,可以简化整个驱动程序等。
此外,本实施例也可以使用IAR等开发环境。
需要说明的是,现有技术中,H-JTAG、ulink和Jlink等硬件调试器主要是用来调试单片机,难以用来进行Linux驱动程序调试。本发明利用在单片机的调试开发环境,使得H-JTAG、ulink和Jlink等硬件调试器可以较好地用来调试Linux驱动程序。
此外,本发明的单片机系统指MCU(微控制单元,又称单片微型计算机)。包括例如51芯片、AVR芯片、MIPS芯片、ARM芯片等。
本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的单片机装置来实现,这样,本发明不限制于任何特定的硬件和软件结合。
虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
Claims (6)
1.一种Linux驱动程序调试方法,其特征在于,包括:
步骤A:在单片机系统中运行待调试Linux驱动程序;
步骤B:判断所述待调试Linux驱动程序是否运行正常,若运行正常,则进入步骤D,反之,进入步骤C;
步骤C:使用单片机集成开发环境和单片机硬件调试工具驱动程序源码以进行跟踪调试和/或单步调试,根据调试对所述待调试Linux驱动程序代码进行修改并重新编译得到所述待调试Linux驱动程序后,返回步骤A;
步骤D:将所述待调试Linux驱动程序作为调试好的Linux驱动程序并将其移植到Linux上。
2.根据权利要求1所述的方法,其特征在于,所述单片机系统是MCU。
3.根据权利要求1所述的方法,其特征在于,所述单片机系统是51芯片、AVR芯片、MIPS芯片和ARM芯片中任一。
4.根据权利要求1所述的方法,其特征在于,所述集成开发环境是Keil和IAR中任一,所述硬件调试工具是H-JTAG、ulink和Jlink中任一。
5.根据权利要求1所述的方法,其特征在于,在所述待调试Linux驱动程序是非通用输入输出的目标接口的待调试驱动程序时,先通过上述步骤A至步骤C调试通用输入输出的所述待调试驱动程序,再通过上述步骤A至步骤C调试基于所述目标接口的所述待调试驱动程序。
6.根据权利要求5所述的方法,其特征在于,所述目标接口为I2C串行接口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012104280271A CN102929779A (zh) | 2012-10-31 | 2012-10-31 | 一种Linux驱动程序调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012104280271A CN102929779A (zh) | 2012-10-31 | 2012-10-31 | 一种Linux驱动程序调试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102929779A true CN102929779A (zh) | 2013-02-13 |
Family
ID=47644583
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012104280271A Pending CN102929779A (zh) | 2012-10-31 | 2012-10-31 | 一种Linux驱动程序调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102929779A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110032508A (zh) * | 2019-03-04 | 2019-07-19 | 百富计算机技术(深圳)有限公司 | 功能驱动程序测试方法、终端设备及存储介质 |
CN111538488A (zh) * | 2020-04-17 | 2020-08-14 | 荏原冷热系统(中国)有限公司 | 一种单片机驱动程序生成方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020099953A1 (en) * | 2000-11-30 | 2002-07-25 | International Business Machines Corporation | Debugging of chipcards |
CN101894069A (zh) * | 2010-06-10 | 2010-11-24 | 中兴通讯股份有限公司 | Linux中的早期串口打印调试方法及装置 |
-
2012
- 2012-10-31 CN CN2012104280271A patent/CN102929779A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020099953A1 (en) * | 2000-11-30 | 2002-07-25 | International Business Machines Corporation | Debugging of chipcards |
CN101894069A (zh) * | 2010-06-10 | 2010-11-24 | 中兴通讯股份有限公司 | Linux中的早期串口打印调试方法及装置 |
Non-Patent Citations (2)
Title |
---|
吕少中 等: "基于ARM的I2C设备控制方法的实现", 《现代电子技术》, vol. 31, no. 4, 4 May 2008 (2008-05-04) * |
熊明: "基于嵌入式Linux的USB2.0 OTG IP驱动程序研究与设计", 《中国优秀硕士学位论文全文数据库》, 15 November 2009 (2009-11-15) * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110032508A (zh) * | 2019-03-04 | 2019-07-19 | 百富计算机技术(深圳)有限公司 | 功能驱动程序测试方法、终端设备及存储介质 |
CN110032508B (zh) * | 2019-03-04 | 2022-05-27 | 百富计算机技术(深圳)有限公司 | 功能驱动程序测试方法、装置、终端设备及存储介质 |
CN111538488A (zh) * | 2020-04-17 | 2020-08-14 | 荏原冷热系统(中国)有限公司 | 一种单片机驱动程序生成方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2020207040A1 (zh) | 片上调试装置和方法 | |
WO2020134634A1 (zh) | 程序调试方法、程序调试装置、终端设备及存储介质 | |
CN204086979U (zh) | 一种电动汽车电机控制器硬件在环测试系统 | |
CN102508752B (zh) | 一种单片机硬件仿真器和仿真方法 | |
CN105740139B (zh) | 一种基于虚拟环境的嵌入式软件调试方法 | |
CN101246449B (zh) | 跟踪函数调用轨迹的方法和装置 | |
CN105550118A (zh) | 调试系统和调试方法 | |
CN104699523A (zh) | 用于硬件平台所开发的应用程序的调试方法和系统 | |
US8826235B2 (en) | Step granularity selection in a software debugger | |
CN105511937A (zh) | 一种适用于云平台的批量虚拟机蓝屏监控方法 | |
WO2012069883A1 (en) | Method of debugging software and corresponding computer program product | |
CN102929779A (zh) | 一种Linux驱动程序调试方法 | |
US20120110383A1 (en) | Method and apparatus for off-line analyzing crashed programs | |
CN102968372A (zh) | 具有程序分析功能的程序调试系统 | |
CN116414634A (zh) | 设备调试方法、系统、装置、调试设备和可读存储介质 | |
CN105095079A (zh) | 一种热点模块指令跟踪的方法及设备 | |
CN108536586B (zh) | Android移动终端的信息获取方法、设备以及系统 | |
CN101329650B (zh) | 智能卡仿真器 | |
CN109144849B (zh) | 一种嵌入式软件调测方法 | |
CN112685212A (zh) | 一种处理器异常的调试追踪方法、装置和系统 | |
CN104899122A (zh) | 一种移动终端测试系统及方法 | |
CN205375453U (zh) | 调试系统 | |
CN102750167B (zh) | 应用程序启动方法、装置和计算机系统 | |
CN109344022A (zh) | 一种多功能下载调试装置及调试方法 | |
CN108121627B (zh) | 一种VxWorks操作系统调试方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20130213 |