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 no 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
|