发明内容
本发明主要解决的技术问题是提供一种移动设备的日志文件的获取方法,能够直接通过USB接口将日志文件读取至外部设备,有效提高调试的效率。
为解决上述技术问题,本发明采用的一个技术方案是:提供一种移动设备的日志文件的获取方法,方法包括:将移动设备在调试过程中产生的日志文件存储至移动设备的内存的缓冲空间内;将缓冲空间内的日志文件存储至移动设备的内嵌式存储器的预定分区内;将预定分区内的日志文件读取至外部设备。
其中,将移动设备在调试过程中产生的日志文件存储至移动设备的内存的缓冲空间内的步骤之前进一步包括:判断对应的全局变量是否为表示缓冲空间已分配成功的预定数值,若为预定数值则执行将移动设备在调试过程中产生的日志文件存储至移动设备的内存的缓冲空间内的步骤。
其中,日志文件为移动设备的预加载过程中产生的日志文件。
其中,将缓冲空间内的日志文件存储至移动设备的内嵌式存储器的预定分区内的步骤之前进一步包括:判断对应的宏变量是否打开,若宏变量打开,则执行将缓冲空间内的日志文件存储至移动设备的内嵌式存储器的预定分区内的步骤。
其中,将移动设备在调试过程中产生的日志文件存储至移动设备的内存的缓冲空间内的步骤包括:判断缓冲空间是否溢出,若缓冲空间溢出,则执行将缓冲空间内的日志文件存储至移动设备的内嵌式存储器的预定分区的步骤。
其中,将缓冲空间内的日志文件存储至移动设备的内嵌式存储器的预定分区的步骤包括:判断预定分区是否溢出,若预定分区溢出,则停止将日志文件存储至预定分区。
其中,将移动设备在调试过程中产生的日志文件存储至移动设备的内存的缓冲空间内的步骤包括:将移动设备在调试过程中产生的字符串以及报错信息存储至内存的第一缓冲空间内;将第一缓冲空间内的字符串以及报错信息进行整理成日志文件并存储至内存的第二缓冲空间。
其中,将缓冲空间内的日志文件存储至移动设备的内嵌式存储器的预定分区内的步骤:将第二缓冲空间内的日志文件部分存储至内存的第三缓冲空间;判断对应的宏变量是否打开;若宏变量打开,则判断第三缓冲空间是否为空;若第三缓冲空间为空,则返回将第二缓冲空间内的日志文件部分存储至内存的第三缓冲空间的步骤;若第三缓冲空间不为空,则判断预定分区是否溢出;若预定分区未溢出,则判断预定分区内的文件是否打开;若预定分区内的文件打开,则将第三缓冲空间内的日志文件写入预定分区,清空第三缓冲空间并返回判断第三缓冲空间是否为空的步骤。
其中,日志文件为移动设备在内核运行过程中产生的日志文件。
其中,将预定分区内的日志文件读取至外部设备的步骤包括:通过USB接口将预定分区内的日志文件读取至外部设备。
本发明的有益效果是:区别于现有技术的情况,本发明通过将移动设备在调试过程中产生的日志文件存储至移动设备的内存的缓冲空间内;再将缓冲空间内的日志文件存储至移动设备的内嵌式存储器的预定分区内;在需要用到日志文件时,将预定分区内的日志文件读取至外部设备;能够使得工程师在调试过程中需要分析日志文件时,直接通过USB接口将日志文件从移动设备读取至外部设备,有效提高工程师调试的效率。
具体实施方式
下面结合附图和实施方式对本发明进行详细说明。
如图1所示,图1是本发明移动设备的日志文件的获取方法的流程示意图。本发明所揭示的移动设备10的日志文件的获取方法是基于移动设备10和外部设备20来实现的,移动设备10与外部设备20连接,如图2所示,优选地,移动设备10与外部设备20通过USB(UniversalSerial Bus,通用串行总线)数据线30连接。该方法包括以下步骤:
步骤S101:将移动设备10在调试过程中产生的日志文件存储至移动设备10的内存的缓冲空间内;
在步骤S101中,内存的缓冲空间优选为移动设备10的RAM(Random Access Memory,随机存储器)中分配一个内存空间。
步骤S102:将缓冲空间内的日志文件存储至移动设备10的内嵌式存储器的预定分区内。
步骤S103:将预定分区内的日志文件读取至外部设备20;
在步骤S103中,通过外部设备20设置读取日志文件的开始地址、日志文件的长度和保存日志文件到外部设备20的地址,外部设备20根据日志文件的开始地址、日志文件的长度和保存日志文件到外部设备20的地址从移动设备10的预定分区读取日志文件。例如,外部设备20通过启动Flash Tool(调试工具)设置读取日志文件的开始地址、日志文件的长度和保存日志文件到外部设备20的地址,移动设备10关机后将电池拔出然后再装上,外部设备20通过USB数据线30读取移动设备10的日志文件。
优选地,移动设备10在基于MTK平台的Android调试过程中,先将各阶段产生的日志文件存储至移动设备10的内存的缓冲空间内;再将各阶段存储在缓冲空间内的日志文件存储至移动设备10的内嵌式存储器的预定分区内;因此外部设备20可以从移动设备10的预定分区获取移动设备10的日志文件。
在本实施例中,移动设备10将日志文件存储在预定分区内包括第一阶段、第二阶段以及第三阶段。在第一阶段时,通过调用Preloader_emmc_write_test()函数,将第一阶段的日志文件保存到第一阶段的预定分区的起始地址。在执行第二阶段时,通过调用Uboot_emmc_w rite_test()函数,将第二阶段的日志文件保存到第二阶段的预定分区的起始地址,其中,第二阶段的预定分区的起始地址是第一阶段的预定分区的结束地址偏移0X1800。在执行第三阶段时,通过调用Kernel_emmc_wri te_test()函数,将第三阶段的日志文件保存到第三阶段的预定分区的起始地址,第三阶段的预定分区的起始地址是第二阶段的预定分区的结束地址偏移0X1800;其中Kernel_emmc_write_test()函数中的printk()函数将日志文件传送到控制台,其中printk()函数中有两个主要的缓存函数,为printk_buf()函数和log_buf()函数,其中,printk_buf()函数用来存储要输出的字符串和报错信息,log_buf()函数用来存储最终要输出的字符串。因此,外部设备20通过获取第一阶段、第二阶段和第三阶段的日志文件就可以实现读取移动设备10的日志文件。
如图3所示,图3是本发明移动设备的日志文件的第一阶段的获取方法流程示意图。该方法包括以下步骤:
步骤S201:移动设备10执行第一阶段;
在移动设备10开机后,在移动设备10执行第一阶段时,移动设备10首先对RAM进行相关初始化,例如总线和***电路等硬件设备的初始化。在初始化后,RAM增加第一阶段对应的全局变量。
步骤S202:判断全局变量是否为表示缓冲空间已分配成功的预定数值;
其中,全局变量为缓冲空间分配的数值,预定数值为1,当然,在其他实施例中,预定数值也可以是其他数值,具体需要根据用户设定。
如果判断全局变量为预定数值,则步骤S203:判断缓冲空间是否溢出;
其中,缓冲空间是移动设备10的RAM分配一个用于暂时缓存日志文件的内存空间,每一缓冲空间对应不同的阶段,此处的缓冲空间为第一阶段的缓冲空间。另外,增加了判断缓冲空间是否溢出的步骤,为了保证分配的缓冲空间不会因为溢出而影响下一段内存的使用。
如果判断缓冲空间不溢出,则步骤S204:将第一阶段的日志文件存储至移动设备10的内存的缓冲空间内;
其中,第一阶段的日志文件为移动设备10的预加载过程中产生的日志文件。
如果判断全局变量不为预定数值或如果判断缓冲空间溢出,又或者执行完步骤S204,则步骤S205:判断第一阶段对应的宏变量是否打开;
其中,每一宏变量对应不同阶段的预定分区,此处的宏变量对应第一阶段的预定分区。
如果判断宏变量打开,则步骤S206:将缓冲空间内的日志文件存储至移动设备10的内嵌式存储器的预定分区内;
即通过调用Preloader_emmc_write_test()函数,将第一阶段的日志文件保存到第一阶段的预定分区的起始地址。
如果判断宏变量不打开或者执行完步骤S206,则步骤S301:移动设备10执行第二阶段。
在本实施例中,如果在RAM还未初始化前,就将第一阶段的日志文件保存到缓冲空间内,会导致移动设备10的***出问题。因此,当缓冲空间保存满后会停止保存日志文件的操作,其中,本发明分配有足够长的缓冲空间。
如图4所示,图4是本发明移动设备的日志文件的第二阶段的获取方法流程示意图。该方法包括以下步骤:
步骤S301:移动设备10执行第二阶段。
步骤S302:判断缓冲空间是否溢出;
其中,此处的缓冲空间为第二阶段的缓冲空间。
如果判断缓冲空间不溢出,则步骤S303:将第二阶段的日志文件存储至移动设备10的内存的缓冲空间内。
如果判断缓冲空间溢出或执行完步骤S303,则步骤S304:判断第二阶段对应的宏变量是否打开;
其中,此处的宏变量对应第二阶段的预定分区。
如果判断宏变量打开,则步骤S305:将缓冲空间内的日志文件存储至移动设备10的内嵌式存储器的预定分区内;
即通过调用Uboot_emmc_w rite_test()函数,将第二阶段的日志文件保存到第二阶段的预定分区的起始地址,其中,第二阶段的预定分区的起始地址是第一阶段的预定分区的结束地址偏移0X1800。
如果判断宏变量不打开或执行完步骤S305,则直接跳到步骤S401:移动设备10执行第三阶段。
在本实施例中,在移动设备10执行第二阶段时,首先执行汇编代码,当执行完start.S文件后,开始跳转到start_armboot()函数执行C代码。由于RAM在移动设备10执行第一阶段时已经初始化成功,因此在移动设备10执行第二阶段时,就把printf()函数中送往串口的日志文件保存到缓冲空间内。但是为了避免缓冲空间溢出,同样增加了判断缓冲空间是否溢出的步骤以保护缓冲空间。其中,第二阶段的日志文件遵循GPL(General Public License,通用公共许可证)条款的开放源码项目。
如图5所示,图5是本发明移动设备的日志文件的第三阶段的获取方法流程示意图。该方法包括以下步骤:
步骤S401:移动设备10执行第三阶段。
步骤S402:将第三阶段在调试过程中产生的字符串以及报错信息存储至内存的第一缓冲空间内;
在步骤S402中,Printk()函数会通过vprintk()函数调用vscnprintf()函数将要输出的字符串以及报错信息放入printk_buf()函数。
步骤S403:将第一缓冲空间内的字符串以及报错信息进行整理成日志文件并存储至内存的第二缓冲空间;
在步骤S403中,Printk()函数再调用emit_log_char()函数将printk_buf()函数的数据整理后形成日志文件并拷贝到log_buf()函数。
步骤S404:将第二缓冲空间内的日志文件部分存储至内存的第三缓冲空间。
在步骤S404中,Printk()函数再调用__call_console_drivers(start,end)函数将输出内容分成多个部分发送给console驱动,并将日志文件拷贝到第三缓冲空间。
执行完步骤S404后,则步骤S405:判断第三阶段对应的宏变量是否打开;
其中,此处的宏变量对应第三阶段的预定分区。
如果判断宏变量打开,则步骤S406:判断第三缓冲空间是否为空。
如果判断第三缓冲空间为空,则返回步骤S404,如果判断第三缓冲空间不为空,则步骤S407:判断预定分区是否溢出。
如果判断预定分区不溢出,则步骤S408:判断预定分区内的文件是否打开。
如果判断宏变量不打开或判断预定分区溢出,又或者判断预定分区内的文件不打开,则步骤S410:停止将第三阶段的日志文件存储至预定分区。
如果判断预定分区内的文件打开,则步骤S409:将第三缓冲空间内的日志文件写入预定分区,并清空第三缓冲空间;
即通过调用Kernel_emmc_wri te_test()函数,将第三阶段的日志文件保存到第三阶段的预定分区的起始地址,第三阶段的预定分区的起始地址是第二阶段的预定分区的结束地址偏移0X1800;第三缓冲空间的日志文件全部保存到预定分区后,清空第三缓冲空间。
执行完步骤S409后,继续返回步骤S406。
在本实施例中,log_buf()函数和printk_buf()形成一个环形的缓冲空间,并且配合该环形缓冲空间使用的变量是log_start/log_end/con_start。当printk()函数调用call_consoles_drivers(start,end)函数的同时,会将日志文件拷贝到一个临时分配第三缓冲空间的_k_log_buf()函数中,由于第三阶段中的日志文件数据非常多,则第三缓冲空间的_k_log_buf()函数设计成环形结构,在拷贝日志文件时,通过环形结构的缓冲空间将日志文件分多个部分按循环方式拷贝到预定分区。因此移动设备10执行第三阶段时,把log_buf()函数中的日志文件拷贝到一个独立的第三缓冲空间,再通过文件***将日志文件写到分区中。其中,第三阶段的日志文件为移动设备10在内核运行过程中产生的日志文件。
综上所述,本发明通过将移动设备在调试过程中产生的日志文件存储至移动设备的内存的缓冲空间内;再将缓冲空间内的日志文件存储至移动设备的内嵌式存储器的预定分区内;在需要用到日志文件时,将预定分区内的日志文件读取至外部设备;能够使得工程师在调试过程中需要分析日志文件时,直接通过USB接口将日志文件从移动设备读取至外部设备,有效提高工程师调试的效率。
以上所述仅为本发明的实施方式,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。