[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Xen-ia64-devel] Progress on RHEL4, but blocked at xlilo?



What Anthony said is correct!  You should do

VMM= Xen.gz
Image=uncompressed Linux kernel image  <===== Xen can't uncompress image
Initrd=initrd file as usual

-Fred

Xu, Anthony wrote:
> Akio,
> 
> I just remembered xlilo doesn't support compressed guest linux
> kernel, so you should use compressed xen.gz and uncompressed guest
> linux kernel vmlinux, and compressed initrd.  
> 
> Thanks
> Anthony
> 
>> -----Original Message-----
>> From: xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx
>> [mailto:xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of
>> takebe_akio@xxxxxxxxxxxxxx Sent: 2005年11月8日 10:51
>> To: takebe_akio@xxxxxxxxxxxxxx; Magenheimer, Dan (HP Labs Fort
>> Collins); xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
>> Subject: Re: [Xen-ia64-devel] Progress on RHEL4, but blocked at
>> xlilo? 
>> 
>> Hi All,
>> 
>> I'm still tried to boot RHEL4 + Xen.
>> But I have not been able to boot yet.
>> 
>> I confirmed to boot until the following point.
>> 
>> fs/binfmt_elf.c
>> -------------------------
>> static int load_elf_binary(struct linux_binprm * bprm, struct
>> pt_regs * regs) { 
>> 
>> snip...
>> 
>>         for (i = 0; i < loc->elf_ex.e_phnum; i++) {
>>                 if (elf_ppnt->p_type == PT_INTERP) {
>>                         /* This is the program interpreter used for
>>                          * shared libraries - for now assume that
>> this 
>>                          * is an a.out format binary                
>> */ 
>> 
>>                         retval = -ENOEXEC;
>>                         if (elf_ppnt->p_filesz > PATH_MAX ||
>>                             elf_ppnt->p_filesz < 2)
>>                                 goto out_free_file;
>>                         retval = -ENOMEM;
>>                         elf_interpreter = (char *)
>> kmalloc(elf_ppnt->p_filesz,
>>                                                           
>>                         GFP_KERNEL); if (!elf_interpreter)
>>                                 goto out_free_file;
>> 
>>                         retval = kernel_read(bprm->file,
>> elf_ppnt->p_offset,
>>                                            elf_interpreter,
>>                                            elf_ppnt->p_filesz);
>>                         if (retval != elf_ppnt->p_filesz) {
>>                                 if (retval >= 0)
>>                                         retval = -EIO;
>>                                 goto out_free_interp;               
>>                         } /* make sure path is NULL terminated */
>>                         retval = -ENOEXEC;
>>                         if (elf_interpreter[elf_ppnt->p_filesz - 1]
>>                                 != '\0') goto out_free_interp;
>> 
>>                         /* If the program interpreter is one of
>> these two, 
>>                          * then assume an iBCS2 image. Otherwise
>> assume 
>>                          * a native linux image.
>>                          */
>>                         if
>>                            
>>                                
>> (strcmp(elf_interpreter,"/usr/lib/libc.so.1") == 0 ||
>> strcmp(elf_interpreter,"/usr/lib/ld.so.1") == 0) ibcs2_interpreter =
>> 1;   
>> 
>>                         /*
>>                          * The early SET_PERSONALITY here is so that
>> the lookup 
>>                          * for the interpreter happens in the
>> namespace of the 
>>                          * to-be-execed image.  SET_PERSONALITY can
>> select 
>> an
>>                          * alternate root.
>>                          *
>>                          * However, SET_PERSONALITY is NOT allowed
>> to switch 
>>                          * this task into the new images's memory
>> mapping 
>>                          * policy - that is, TASK_SIZE must still
>> evaluate to 
>>                          * that which is appropriate to the execing
>> application. 
>>                          * This is because exit_mmap() needs to have
>> TASK_SIZE 
>>                          * evaluate to the size of the old image.   
>> * 
>>                          * So if (say) a 64-bit application is
>> execing a 32-bit 
>>                          * application it is the architecture's
>> responsibility
>>                          * to defer changing the value of TASK_SIZE
>> until the 
>>                          * switch really is going to happen - do
>> this in 
>>                          * flush_thread().      - akpm              
>>                         */ SET_PERSONALITY(loc->elf_ex,
>> ibcs2_interpreter); 
>> 
>>                         interpreter = open_exec(elf_interpreter);
>>                         retval = PTR_ERR(interpreter);
>>                         if (IS_ERR(interpreter))
>>                                 goto out_free_interp;
>>                         retval = kernel_read(interpreter, 0,
>> bprm->buf, BINPRM_BUF_SIZE);  <---HERE !!!!!
>>                         if (retval != BINPRM_BUF_SIZE) {
>>                                 if (retval >= 0)
>>                                         retval = -EIO;
>>                                 goto out_free_dentry;               
>> } 
>> 
>>                         /* Get the exec headers */
>>                         loc->interp_ex = *((struct exec *)
>>                         bprm->buf); loc->interp_elf_ex = *((struct
>>                         elfhdr *) bprm->buf); break;
>>                 }
>>                 elf_ppnt++;
>>         }
>>  snip...
>> -------------
>> 
>> The above for loop is available when there is .interp section in ELF
>> binary. .interp section is found, then enter if section and the
>> following operation do. 
>> 1. Check "if (elf_ppnt->p_filesz > PATH_MAX || elf_ppnt->p_filesz <
>> 2)" 
>> 2. Alloc memory for pasting a library path by using kmalloc().
>> 3. Read a library path from /sbin/init by using kernel_read()
>> 4. Check wheather /usr/lib/libc.so.1 or /usr/lib/ld.so.1
>> 5. Open the library by using open_exec()
>> 6. Read the library from head to BINPRM_BUF_SIZE(128)
>> 7. Substitute the library header and Break
>> 
>> contents of .interp section are below.
>> =====================
>> # LANG=C objdump -s -j .interp /sbin/init
>> 
>> /sbin/init:     file format elf64-ia64-little
>> 
>> Contents of section .interp:
>> 4000000000000200 2f6c6962 2f6c642d 6c696e75 782d6961 
>> /lib/ld-linux-ia 4000000000000210 36342e73 6f2e3200                 
>> 64.so.2. ===================== 
>> 
>> /lib/ld-linux-ia64.so.2 is symbolic link
>> =====================
>> # LANG=C ls -l /lib/ld-linux-ia64.so.2
>> lrwxrwxrwx  1 root root 11 Oct 25 23:27 /lib/ld-linux-ia64.so.2 ->
>> ld-2.3.4.so ===================== 
>> 
>> I think 0 -> 128 byte of the ld-2.3.4.so is ELF header.
>> The header of the ld-2.3.4.so is the below.
>> =====================
>> # readelf -h /lib/ld-2.3.4.so |less
>> ELF Header:
>>  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
>>  Class:                             ELF64
>>  Data:                              2's complement, little endian
>>  Version:                           1 (current)
>>  OS/ABI:                            UNIX - System V
>>  ABI Version:                       0
>>  Type:                              DYN (Shared object file)
>>  Machine:                           Intel IA-64
>>  Version:                           0x1
>>  Entry point address:               0x2c90
>>  Start of program headers:          64 (bytes into file)
>>  Start of section headers:          205448 (bytes into file)
>>  Flags:                             0x10, 64-bit
>>  Size of this header:               64 (bytes)
>>  Size of program headers:           56 (bytes)
>>  Number of program headers:         5
>>  Size of section headers:           64 (bytes)
>>  Number of section headers:         25
>>  Section header string table index: 22
>> =====================
>> 
>> Why the header cannot be read?
>> Any idea? It's very difficult. Hmmm.... :<
>> 
>> Best Regards,
>> 
>> Akio takebe
>> 
>> 
>> _______________________________________________
>> Xen-ia64-devel mailing list
>> Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
>> http://lists.xensource.com/xen-ia64-devel
> 
> _______________________________________________
> Xen-ia64-devel mailing list
> Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-ia64-devel


_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.