发布信息

通过动态设置log等级以调试debugjailhouse的方法与流程 专利技术说明

作者:admin      2023-06-29 21:03:30     215



计算;推算;计数设备的制造及其应用技术通过动态设置log等级以调试debug jailhouse的方法技术领域1.本发明涉及jailhouse日志记录功能优化技术领域,具体涉及动态设置log等级debug jailhouse的方法。背景技术:2.log日志是记录系统运行过程中变化的一种抽象数据,无论开发何种程序,单片机,手机app,电脑客户端,还是服务器,log日志都是最基础也是最重要的调试手段。有效的日志方法可以起到事半功倍的效果。3.jailhouse是一个针对创建工业级应用程序的小型hypervisor,是一个软件程序,jailhouse在现有linux之上启用非对称多处理方式,并将系统拆分成称为cell的独立分区。每个cell运行一个guestos并拥有一组完全控制的分配资源(cpu、内存区域、pci设备)。4.当前有多种嵌入式系统的开源hypervisor,这些hypervisor提供了嵌入式设备上进行虚拟化的功能。5.xen支持cpu虚拟化、mmu虚拟化、虚拟中断处理、客户机间通讯,使用domain代表一个虚拟机或者客户机,dom0运行着一个linux内核的修改版本,利用linux内核提供io虚拟化和客户机管理服务,优先级最高,对主机硬件有着完全访问权限。使用运行在dom0用户空间的xen工具栈来实现管理客户机的用户接口。xen的优点是重用linux内核现有的设备驱动和其他部分,但缺点是dom0只是xen的另一个域,有自己的嵌套页表,并且可能被xen调度器调度出去。6.kvm允许客户机操作系统与主机操作系统运行在相同的执行模式下,host将虚拟机视作一个qemu进程,i/o访问将陷入到主机linux内核。kvm在host上虚拟化cpu,并依赖于运行在用户空间的qemu来处理客户机io事件。kvm的优点是重用linux内核现有的设备驱动和其他部分,但缺点是kvm的客户机模式到主机模式的虚拟机切换依赖于嵌套页表故障机制,特殊指令陷阱(trap),主机中断,客户机io事件,和另一个从主机模式唤醒客户机执行的虚拟机切换,导致了kvm整体性能本质上的降低。7.基于上面两种hypervisor的特点,西门子研发出了jailhouse。jailhouse将硬件直接分配给guestos,从而将复杂的硬件处理引导问题从hypervisor转移到通用操作系统(guestos)。jailhouse建立隔离域,且能够直接访问物理资源,无需仿真或半虚拟化。jailhouse不仅保留了linux操作系统的通用性,还利用自身简洁的优势,使得实现安全关键性和实时关键性工作负载在隔离域中运行变得容易。8.jailhouse的log日志系统没有一个全局开关,如果要关闭log日志,需要注释每一句log日志,特别繁琐,而每一句日志的打开、关闭变化,都需要修改代码,重新编译,重新加载,灵活性比较差。技术实现要素:9.为解决已有技术存在的不足,本发明提供了一种通过动态设置log等级以调试debug jailhouse的方法,包括如下步骤:10.步骤s1:jailhouse驱动层增加一个attr属性,该attr属性的值供用户在用户空间动态读取或设置;驱动层检测到attr属性的值改变之后,使用hvc命令将该attr属性的值传入到jailhouse的hypervisor层;11.步骤s2:修改hypervisor的日志打印机制,增加打印级别,只有当前log级别小于传入的attr属性值时,才对相应的log级别所对应的日志进行打印。12.其中,所述步骤s1包括如下步骤:13.步骤s11:在main.c中定义一个全局变量,来存储用户设置的log级别,并设置一个默认值;14.步骤s12:在sysfs.c文件中增加一个可读写attr属性节点;15.步骤s13:实现attr属性节点的读函数;16.步骤s14:增加hvc命令,向hypervisor层传递attr属性的值;17.步骤s15:实现属性节点的写函数,并通过jailhouse封装的hvc命令将设置的log级别传入hypervisor层。18.其中,所述步骤s2包括如下步骤:19.步骤s21:hypervisor层接收驱动层传递的debug_level值;20.步骤s22:增加含有log级别的打印函数;21.步骤s23:定义不同等级的打印函数;22.步骤s24:根据需要选择不同的打印函数。23.其中,所述步骤s2还包括:24.步骤s25:在/sys/devices/jailhouse目录下会自动生成一个属性文件,debug_level,通过cat debug_level命令可以查看该属性文件的值;25.步骤s26:echo n》debug_level命令,设置希望打印的log等级,其中,n为所设置的希望打印的log等级。本发明可以在用户层动态设置log级别debug jailhouse,并实现一次添加日志,一次编译,永久控制该日志是否输出,改变了jailhouse原有日志系统每次输出和关闭都需要重新编译安装的繁琐,增加了工作效率。附图说明26.图1为本发明的动态设置log等级debug jailhouse的方法的实现流程图。具体实施方式27.为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。28.本发明提供一种用户动态设置log等级debug jailhouse的日志方法,根据用户设置的log级别,动态控制jailhouse的日志是否输出,及哪些级别的log日志需要输出。29.本发明的技术构思在于:在jailhouse驱动层增加一个attr属性,用户可以在用户空间动态读取或者设置该attr属性文件的值,驱动层检测到attr属性的值改变之后,使用hvc命令将该值传入到jailhouse的hypervisor层;修改hypervisor的日志打印机制,增加打印级别,只有当前log级别小于传入的attr属性值时,才进行打印。实现一种用户动态设置log等级debug jailhouse的日志方法。30.具体实现方法如下:31.准备一台ft2004台式机或者开发板,安装centos8.1系统,安装jailhosue代码,并准备测试所需的配置文件,main.c,inmate.c。32.测试环境具体步骤如下:33.a.驱动层增加attr属性节点34.具体的,在驱动层增加一个属性节点,命名为debug_attr,增加一个debug_level变量,用于存放该属性节点的值,包括如下步骤:35.a1.在main.c中定义一个全局变量,来存储用户设置的log级别,并设置默认值,例如为unsigned int debug_level=5;36.a2.在sysfs.c文件中增加一个可读写attr属性节点,static device_attr_rw(debug_attr);并添加到属性列表jaihouse_sysfs_entries数组里;37.a3.实现debug_attr属性节点的读函数38.static ssize_t debug_attr_show(struct device*dev,struct device_attribute*attr,39.char*buf)40.{41.return sprintf(buf,"%dn",debug_level);42.}43.通过上述读函数,使用户可以读取属性节点的值;44.a4.增加hvc命令,向hypervisor传递属性值45.在hypercall.h文件中增加向jailhouse hypervisor层传递debug_level变量的方法,从而使用户修改了debug_level值时能够将修改后的值传入hypervisor层,例如:46.#define jailhouse_hc_hypervisor_debug_level 9;47.jailhouse代码分为驱动层和hypersivor层,属性节点bebug_attr的值存储在debug_level变量中,用户通过修改属性节点文件debug_attr修改debug_level的值,jailhouse的驱动层以及hypersivor层都要共享这个变量值。48.a5.实现debug_level属性节点的写函数,并通过jailhouse封装的hvc命令将用户修改的debug_level值传入hypervisor,代码如下:49.static ssize_t debug_flag_store(struct device*dev,struct device_attribute*attr,50.const char*buf,size_t size)51.{52.unsigned int val;53.ssize_t rc;54.rc=kstrtouint(buf,0,&val);55.debug_level=val;56.rc=jailhouse_call_arg1(jailhouse_hc_hypervisor_debug_level,57.val);58.if(rc!=0)59.return rc;60.return size;61.}62.b.hypervisor层修改日志系统63.b1.接收驱动层传递的debug_level值64.具体的,用户修改debug_attr属性文件的值后,jailhouse驱动层通过a5步骤将修改后的值debug_level传入hypervisor层,在hypervisor同样定义一个全局变量debug_lavel2接收该值;65.在control.c中定义全局变量unsigned int debug_level2=5;控制hypervisor模块日志的输出;66.并在hypvercall函数中将驱动层的debug_level值赋值给hypervisor的debug_level2;67.case jailhouse_hc_hypervisor_debug_level:68.debug_level2=(unsigned int)arg1;69.return 0;70.b2.在hypersivor层增加含有log级别判断的打印函数71.在printk.c中增加72.void__attribute__((format(printf,2,3)))printk_level(unsigned int level,const char*fmt,...);73.void printk_level(unsigned int level,const char*fmt,...){74.if(level《debug_level2){75.printk(fmt);76.}77.}78.b3.基于步骤b2的打印函数,定义error、info、debug等不同级别的打印函数79.在printk.h中增加:80.#define printke(fmt,...)printk_level(0,fmt,##__va_args__)81.#define printki(fmt,...)printk_level(3,fmt,##__va_args__)82.#define printkv(fmt,...)printk_level(5,fmt,##__va_args__)83.b4.根据需要,选择不同的打印函数84.例如在cell_create函数中,增加打印printki(“cell create!!”);85.c.用户控制日志输出的级别86.c1.编译安装代码,加载驱动模块;87.c2.在/sys/devices/jailhouse目录下会自动生成一个属性文件,debug_attr,通过cat debug_attr命令可以查看该属性文件的值是默认的5,通过echo 4》debug_attr命令,可以将希望打印的log等级设置为4,则代码中使用printke和printki函数打印的日志的会输出,而使用printkv函数打印的日志就会自动关闭,不会输出。88.编译安装代码,加载驱动之后,验证方法如下:89.1、启动hypervisor:jailhouse enable main.cell90.串口最后输出下面信息,表示hypervisor正常启动:91.activating hypervisor92.2、测试log93.例如在cell_create函数中,增加打印printki(“cell create!!”);echo 4》debug_level94.执行jailhouse cell create inmate.cell95.串口会输出cell create!!信息。96.而如果97.echo 3》debug_level98.执行jailhouse cell create inmate.cell99.串口不会输出cell create!!信息。100.综上,本发明提供了一种用户通过shell命令动态设置log级别debug jailhouse的日志方法,通过用户动态控制jailhouse的日志打开和关闭,控制特定级别的log日志的打开和关闭;本发明可以在用户层动态设置log级别debug jailhouse,并实现一次添加日志,一次编译,永久控制该日志是否输出,改变了jailhouse原有日志系统每次输出和关闭都需要重新编译安装的繁琐,增加了工作效率。101.虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。









图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!




内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,发布内容不收取任何费用也不接任何广告!




免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

相关内容 查看全部