Do you need to export plenty of data of Xen? If not, I think using
printk() or debugtrace_printk() is the best choice.
If you really have much data to export, I think you can look into how
"xm dmesg" or xentrace is implemented.
-- Paul. S.
2008/11/23 lijiandm <lijiandm@xxxxxxx>:
> "use some relatively complex methods to export the data in Xen to Dom0's
> userspace."
> What's the complex methods ?Can you give me some suggestion?
> Thanks.
>
>
> 在2008-11-24,"Paul Samon" <paul.samon@xxxxxxxxx> 写道:
>>Oh, no... You can not use C's standard IO library in Xen at all.
>>For example, Xen has no knowledge about the file system at all, so it
>>can't understand a file path "/home/a.txt" at all.
>>
>>By a serial cable, you can use printk() to output the info you need(if
>>you have not a cable at hand, check the "xm dmesg" in Dom0), or use
>>some relatively complex methods to export the data in Xen to Dom0's
>>userspace.
>>
>>-- Paul. S.
>>
>>2008/11/23 lijiandm <lijiandm@xxxxxxx>:
>>> hello list:
>>> I add some code to xen-3.1.0-src\xen\arch\x86\hvm\vmx\vmx.c to export
>>> some
>>> information when vmx_vmexit_handler() executed:
>>>
>>> -------------------------------------------------------------------------------------------------
>>> --- vmx.c 2007-05-18 22:45:22.000000000 +0800
>>> +++ vmx-patch.c 2008-11-24 14:19:18.000000000 +0800
>>> @@ -50,7 +50,9 @@
>>> #include <asm/hvm/vpt.h>
>>> #include <public/hvm/save.h>
>>> #include <asm/hvm/trace.h>
>>> -
>>> +#include <stdio.h>
>>> +#include <stdlib.h>
>>> +#include <unistd.h>
>>> char *vmx_msr_bitmap;
>>>
>>> static void vmx_ctxt_switch_from(struct vcpu *v);
>>> @@ -2590,9 +2592,13 @@
>>> unsigned int exit_reason;
>>> unsigned long exit_qualification, inst_len = 0;
>>> struct vcpu *v = current;
>>> + int test;
>>> + unsigned long FS_SELECTOR,FS_LIMIT,FS_AR_BYTES,FS_BASE,CR3;
>>> + FILE *fp;
>>> + char a='\n',b='%';
>>>
>>> exit_reason = __vmread(VM_EXIT_REASON);
>>> -
>>> +
>>> HVMTRACE_2D(VMEXIT, v, __vmread(GUEST_RIP), exit_reason);
>>>
>>> perfc_incra(vmexits, exit_reason);
>>> @@ -2711,6 +2717,27 @@
>>> }
>>> case EXIT_REASON_CR_ACCESS:
>>> {
>>> + FS_SELECTOR=(unsigned long)__vmread(EXIT_QUALIFICATION);
>>> + FS_LIMIT=(unsigned long)__vmread(EXIT_QUALIFICATION);
>>> + FS_AR_BYTES=(unsigned long)__vmread(EXIT_QUALIFICATION);
>>> + FS_BASE=(unsigned long)__vmread(EXIT_QUALIFICATION);
>>> + CR3=(unsigned long)__vmread(EXIT_QUALIFICATION);
>>> +
>>> + fp=fopen("/home/a.txt","a+");
>>> +
>>> + fwrite(&FS_SELECTOR,sizeof(unsigned long),1,fp);
>>> + fwrite(&b,sizeof(char),1,fp);
>>> + fwrite(&FS_LIMIT,sizeof(unsigned long),1,fp);
>>> + fwrite(&b,sizeof(char),1,fp);
>>> + fwrite(&FS_AR_BYTES,sizeof(unsigned long),1,fp);
>>> + fwrite(&b,sizeof(char),1,fp);
>>> + fwrite(&FS_BASE,sizeof(unsigned long),1,fp);
>>> + fwrite(&b,sizeof(char),1,fp);
>>> + fwrite(&CR3,sizeof(unsigned long),1,fp);
>>> + fwrite(&a,sizeof(char),1,fp);
>>> +
>>> + fclose(fp);
>>> +
>>> exit_qualification = __vmread(EXIT_QUALIFICATION);
>>> inst_len = __get_instruction_length(); /* Safe: MOV Cn, LMSW,
>>> CLTS
>>> */
>>> if ( vmx_cr_access(exit_qualification, regs) )
>>>
>>> -----------------------------------------------------------------------------------------------------
>>>
>>> but when I compiled the xen,the error occured:
>>> vmx.c:53:19: 错误:stdio.h:No such file or directory
>>> vmx.c:54:20: 错误:stdlib.h:No such file or directory
>>> vmx.c:55:20: 错误:unistd.h:No such file or directory
>>>
>>> How can I slove this problem?
>>> Thanks.
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|