[Fedora-livecd-list] auto-biarch (x86_64 + i686) LiveDVD patch + ISO

Jane Dogalt jdogalt at yahoo.com
Mon Jun 22 04:12:47 UTC 2009


Very cool.  Now if only you can go tri-arch with ppc.  Actually I'm just kidding, I don't care about that unless I can get fixstars to hire me, or someone to give me a ps3.

Out of curiosity- has anybody yet mastered a good spin that also plays video when inserted into a typical dvd player?  I don't think there are any issues with that, but wonder why I haven't seen that before.  It seems like packing in a kickass intro-to-fedora video that people could play on their DVD player, would be a great feature, that might help a certain class of new users feel more comfortable with the process.  I.e. it feels pretty safe to watch a DVD, versus running some strange software on your computer.

Thanks again Jan, very cool feature.

-dmc

--- On Sun, 6/21/09, Jan Kratochvil <jan.kratochvil at redhat.com> wrote:

> From: Jan Kratochvil <jan.kratochvil at redhat.com>
> Subject: [Fedora-livecd-list] auto-biarch (x86_64 + i686) LiveDVD patch + ISO
> To: fedora-livecd-list at redhat.com
> Date: Sunday, June 21, 2009, 5:05 AM
> Hi,
> 
> finally created a LiveDVD ISO automatically booting x86_64
> OS on x86_64
> (and i686 otherwise).  Regular users will not notice
> there exists any new arch
> while they will benefit from the full performance of their
> PC:
>     http://people.redhat.com/jkratoch/x86bilive-2009062000.tar.gz
> (71KB)
> 
> It uses live_dir=LiveOS-x86_64 vs. live_dir=LiveOS-i686 to
> boot the image.
> 
> The syslinux patch provides "default-{x86_64,i386}"
> keywords in isolinux.cfg.
> 
> livecd-iso-to-disk is not patched/compatible with such
> image.
> 
> livecd-creator should create such ISO on a single run, not
> by merging the
> output of two livecd-creator runs by a 3rd party app.
> 
> 
> Regards,
> Jan
> 
> Reasons:
> 
> * I still did not understand why I have to carry with me
> two media - both
>   x86_64 and i386 - when all the data perfectly fit on
> a single media.
> 
> * Why I have to try to boot x86_64 first to find out if the
> specific machine
>   is x86_64?  Even common programmers do not know
> it, "Windows XP works here".
> 
> * The OS must "just work", it must be fun and easy. 
> Requiring a special
>   technical decision before even starting the OS
> download is a showstopper.
> 
> * Checked that a regular user will on http://fedoraproject.org/get-fedora
>   still download terrible performance degradation of
> 32-bit OS although her
>   hadware is in 70%-95%(?) of cases x86_64. 
> x86_64 is here for 6 years now.
> 
>   * Arguing x86 may be faster than x86_64... I did not
> find any such case,
>     x86_64 is a more modern arch (more registers,
> PIC for free, better ABI).
>     We already hit the 2GB address space
> limitations.  x86_64 is the future.
> 
> * All the friends of mine have 8Mbit+ ADSL and TB disks
> downloading many DVD
>   disks so some several more hundreds of MB are not
> something to notice.
> 
> -----Inline Attachment Follows-----
> 
> mkisofs -f -J -r -hide-rr-moved
> -hide-joliet-trans-tbl -V Fedora-11-x86bi-Live -o
> ../x86bilive.iso -b isolinux/isolinux.bin -c
> isolinux/boot.cat -no-emul-boot -boot-info-table
> -boot-load-size 4 .
> 
> mount -r -o loop Fedora-11-x86_64-Live.iso x86_64/
> mount -r -o loop Fedora-11-i686-Live.iso i686/
> 
> x86bilive:
> total 4
> lrwxrwxrwx 1 root root   13 2009-06-18 21:10
> GPL -> ../x86_64/GPL
> lrwxrwxrwx 1 root root   14 2009-06-18 21:11
> LiveOS-i686 -> ../i686/LiveOS/
> lrwxrwxrwx 1 root root   16 2009-06-18 21:10
> LiveOS-x86_64 -> ../x86_64/LiveOS/
> lrwxrwxrwx 1 root root   16 2009-06-18 21:10
> README -> ../x86_64/README
> drwxr-xr-x 2 root root 4096 2009-06-20 21:44 isolinux/
> 
> x86bilive/isolinux:
> total 184
> lrwxrwxrwx 1 root root     30
> 2009-06-18 21:13 boot.cat ->
> ../../x86_64/isolinux/boot.cat
> lrwxrwxrwx 1 root root     31
> 2009-06-18 21:17 ii686 ->
> ../../i686/isolinux/initrd0.img
> -rw-r--r-- 1 root root  14336 2009-06-20 21:45
> isolinux.bin
> -r--r--r-- 1 root root   1411 2009-06-20
> 21:44 isolinux.cfg
> lrwxrwxrwx 1 root root     33
> 2009-06-18 21:13 ix8664 ->
> ../../x86_64/isolinux/initrd0.img
> lrwxrwxrwx 1 root root     28
> 2009-06-18 21:17 ki686 -> ../../i686/isolinux/vmlinuz0
> lrwxrwxrwx 1 root root     30
> 2009-06-18 21:13 kx8664 ->
> ../../x86_64/isolinux/vmlinuz0
> lrwxrwxrwx 1 root root     29
> 2009-06-18 21:13 memtest ->
> ../../x86_64/isolinux/memtest
> lrwxrwxrwx 1 root root     32
> 2009-06-18 21:13 splash.jpg ->
> ../../x86_64/isolinux/splash.jpg
> -r--r--r-- 1 root root 159888 2009-06-20 20:48
> vesamenu.c32
> 
> isolinux.cfg:
> 
> default vesamenu.c32
> timeout 100
> 
> menu background splash.jpg
> menu title Welcome to Fedora-11-x86bi-Live!
> menu color border 0 #ffffffff #00000000
> menu color sel 7 #ffffffff #ff000000
> menu color title 0 #ffffffff #00000000
> menu color tabmsg 0 #ffffffff #00000000
> menu color unsel 0 #ffffffff #00000000
> menu color hotsel 0 #ff000000 #ffffffff
> menu color hotkey 7 #ffffffff #ff000000
> menu color timeout_msg 0 #ffffffff #00000000
> menu color timeout 0 #ffffffff #00000000
> menu color cmdline 0 #ffffffff #00000000
> menu hidden
> menu hiddenrow 5
> label linux0
>   menu label x86_64 Boot
>   kernel kx8664
>   append initrd=ix8664
> root=CDLABEL=Fedora-11-x86bi-Live rootfstype=auto
> live_dir=LiveOS-x86_64 ro liveimg quiet  rhgb
> menu default-x86_64
> label check0
>   menu label x86_64 Verify and Boot
>   kernel kx8664
>   append initrd=ix8664
> root=CDLABEL=Fedora-11-x86bi-Live rootfstype=auto
> live_dir=LiveOS-x86_64 ro liveimg quiet  rhgb check
> label linux1
>   menu label i686 Boot
>   kernel ki686
>   append initrd=ii686
> root=CDLABEL=Fedora-11-x86bi-Live rootfstype=auto
> live_dir=LiveOS-i686 ro liveimg quiet  rhgb
> menu default-i386
> label check1
>   menu label i686 Verify and Boot
>   kernel ki686
>   append initrd=ii686
> root=CDLABEL=Fedora-11-x86bi-Live rootfstype=auto
> live_dir=LiveOS-i686 ro liveimg quiet  rhgb check
> label memtest
>   menu label Memory Test
>   kernel memtest
> label local
>   menu label Boot from local drive
>   localboot 0xffff
> 
> -----Inline Attachment Follows-----
> 
> --- /dev/null    1
> Jan 1970 00:00:00 -0000
> +++ defaults.patch    20 Jun 2009 20:10:46
> -0000
> @@ -0,0 +1,175 @@
> +---
> syslinux-3.75-orig/com32/menu/Makefile   
> 2009-04-16 06:42:14.000000000 +0200
> ++++
> syslinux-3.75-defaults/com32/menu/Makefile   
> 2009-06-20 19:21:32.000000000 +0200
> +@@ -24,7 +24,7 @@ MODULES      =
> menu.c32 vesamenu.c32
> + TESTFILES =
> + 
> + COMMONOBJS = menumain.o readconfig.o passwd.o drain.o
> printmsg.o colors.o \
> +-    background.o refstr.o execute.o
> ++    background.o refstr.o execute.o
> verify_cpu.o
> + 
> + all: $(MODULES) $(TESTFILES)
> + 
> +--- syslinux-3.75-orig/com32/menu/menu.h   
> 2009-04-16 06:42:14.000000000 +0200
> ++++
> syslinux-3.75-defaults/com32/menu/menu.h   
> 2009-06-20 19:21:32.000000000 +0200
> +@@ -224,4 +224,9 @@ void execute(const char *cmdline, enum
> k
> + /* drain.c */
> + void drain_keyboard(void);
> + 
> ++/* verify_cpu.S */
> ++#if defined(__i386__) || defined(__x86_64__)
> ++int verify_cpu(void);
> ++#endif
> ++
> + #endif /* MENU_H */
> +---
> syslinux-3.75-orig/com32/menu/readconfig.c   
> 2009-04-16 06:42:14.000000000 +0200
> ++++
> syslinux-3.75-defaults/com32/menu/readconfig.c   
> 2009-06-20 20:23:24.000000000 +0200
> +@@ -656,11 +656,22 @@ static void parse_config_file(FILE
> *f)
> +        
> m->parent_entry->displayname =
> refstr_get(m->title);
> +       }
> +     }
> +-      } else if ( looking_at(p, "default")
> ) {
> +-    if (ld.label) {
> +-      ld.menudefault = 1;
> +-    } else if (m->parent_entry) {
> +-      m->parent->defentry =
> m->parent_entry->entry;
> ++      } else if ( looking_at(p,
> "default")
> ++#if defined(__i386__) || defined(__x86_64__)
> ++          ||
> looking_at(p, "default-i386")
> ++          ||
> looking_at(p, "default-x86_64")
> ++#endif
> ++          ) {
> ++#if defined(__i386__) || defined(__x86_64__)
> ++        if (! ( ( looking_at(p,
> "default-i386") && verify_cpu () == 0 ) ||
> ++            (
> looking_at(p, "default-x86_64") && verify_cpu () !=
> 0 ) ) )
> ++#endif
> ++    {
> ++      if (ld.label) {
> ++        ld.menudefault = 1;
> ++      } else if (m->parent_entry)
> {
> ++       
> m->parent->defentry = m->parent_entry->entry;
> ++      }
> +     }
> +       } else if ( looking_at(p,
> "hide") ) {
> +     ld.menuhide = 1;
> +---
> syslinux-3.75-orig/com32/menu/verify_cpu.S   
> 1970-01-01 01:00:00.000000000 +0100
> ++++
> syslinux-3.75-defaults/com32/menu/verify_cpu.S   
> 2009-06-20 20:30:27.000000000 +0200
> +@@ -0,0 +1,119 @@
> ++/* https://lists.linux-foundation.org/pipermail/fastboot/2006-November/011885.html
> */
> ++#if defined(__i386__) || defined(__x86_64__)
> ++    .globl    verify_cpu
> ++verify_cpu:
> ++    push    %ebx
> ++    push    %esi
> ++    push    %edi
> ++    push    %ebp
> ++    call    Xverify_cpu
> ++    pop    %ebp
> ++    pop    %edi
> ++    pop    %esi
> ++    pop    %ebx
> ++    ret
> ++
> ++/*
> ++ *
> ++ *    verify_cpu.S
> ++ *
> ++ *     14 Nov 2006  Vivek Goyal:
> Created the file
> ++ *
> ++ *    This is a common code for
> verification whether CPU supports
> ++ *     long mode and SSE or not. It is not
> called directly instead this
> ++ *    file is included at various places
> and compiled in that context.
> ++ *     Following are the current usage.
> ++ *
> ++ *     This file is included by both 16bit
> and 32bit code.
> ++ *
> ++ *    arch/x86_64/boot/setup.S : Boot cpu
> verification (16bit)
> ++ *    arch/x86_64/boot/compressed/head.S:
> Boot cpu verification (32bit)
> ++ *    arch/x86_64/kernel/trampoline.S:
> secondary processor verfication (16bit)
> ++ *   
> arch/x86_64/kernel/acpi/wakeup.S:Verfication at resume
> (16bit)
> ++ *
> ++ *    verify_cpu, returns the status of
> cpu check in register %eax.
> ++ *        0: Success 
>   1: Failure
> ++ *
> ++ *     The caller needs to check for the
> error code and take the action
> ++ *     appropriately. Either display a
> message or halt.
> ++ */
> ++
> ++Xverify_cpu:
> ++
> ++    pushfl   
>             #
> Save caller passed flags
> ++    pushl   
> $0            #
> Kill any dangerous flags
> ++    popfl
> ++
> ++    /* minimum CPUID flags for x86-64 */
> ++    /* see http://www.x86-64.org/lists/discuss/msg02971.html */
> ++#define SSE_MASK ((1<<25)|(1<<26))
> ++#define REQUIRED_MASK1
> ((1<<0)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<8)|\
> ++           
>        
>    (1<<13)|(1<<15)|(1<<24))
> ++#define REQUIRED_MASK2 (1<<29)
> ++    pushfl   
>             #
> standard way to check for cpuid
> ++    popl    %eax
> ++    movl    %eax,%ebx
> ++    xorl    $0x200000,%eax
> ++    pushl    %eax
> ++    popfl
> ++    pushfl
> ++    popl    %eax
> ++    cmpl    %eax,%ebx
> ++    jz   
> verify_cpu_no_longmode    # cpu has no cpuid
> ++
> ++    movl   
> $0x0,%eax        # See if
> cpuid 1 is implemented
> ++    cpuid
> ++    cmpl    $0x1,%eax
> ++    jb   
> verify_cpu_no_longmode    # no cpuid 1
> ++
> ++    xor    %di,%di
> ++    cmpl   
> $0x68747541,%ebx    # AuthenticAMD
> ++    jnz   
> verify_cpu_noamd
> ++    cmpl   
> $0x69746e65,%edx
> ++    jnz   
> verify_cpu_noamd
> ++    cmpl   
> $0x444d4163,%ecx
> ++    jnz   
> verify_cpu_noamd
> ++    mov   
> $1,%di       
>     # cpu is from AMD
> ++
> ++verify_cpu_noamd:
> ++    movl   
> $0x1,%eax        # Does the
> cpu have what it takes
> ++    cpuid
> ++    andl   
> $REQUIRED_MASK1,%edx
> ++    xorl   
> $REQUIRED_MASK1,%edx
> ++    jnz   
> verify_cpu_no_longmode
> ++
> ++    movl   
> $0x80000000,%eax    # See if extended cpuid
> is implemented
> ++    cpuid
> ++    cmpl    $0x80000001,%eax
> ++    jb     
> verify_cpu_no_longmode    # no extended
> cpuid
> ++
> ++    movl   
> $0x80000001,%eax    # Does the cpu have what
> it takes
> ++    cpuid
> ++    andl   
> $REQUIRED_MASK2,%edx
> ++    xorl   
> $REQUIRED_MASK2,%edx
> ++    jnz 
>    verify_cpu_no_longmode
> ++
> ++verify_cpu_sse_test:
> ++    movl    $1,%eax
> ++    cpuid
> ++    andl    $SSE_MASK,%edx
> ++    cmpl    $SSE_MASK,%edx
> ++    je   
> verify_cpu_sse_ok
> ++    test    %di,%di
> ++    jz   
> verify_cpu_no_longmode    # only try to force
> SSE on AMD
> ++    movl   
> $0xc0010015,%ecx    # HWCR
> ++    rdmsr
> ++    btr   
> $15,%eax        # enable SSE
> ++    wrmsr
> ++    xor   
> %di,%di       
>     # don't loop
> ++    jmp   
> verify_cpu_sse_test    # try again
> ++
> ++verify_cpu_no_longmode:
> ++    popfl   
>             #
> Restore caller passed flags
> ++    movl $1,%eax
> ++    ret
> ++verify_cpu_sse_ok:
> ++    popfl   
>             #
> Restore caller passed flags
> ++    xorl %eax, %eax
> ++    ret
> ++#endif
> --- syslinux.spec    16 Apr 2009 18:11:30
> -0000    1.59
> +++ syslinux.spec    20 Jun 2009 20:10:46
> -0000
> @@ -7,6 +7,7 @@ License: GPLv2+
>  Group: Applications/System
>  URL: http://syslinux.zytor.com/
>  Source0: ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/%{name}-%{tarball_version}.tar.bz2
> +Patch9: defaults.patch
>  ExclusiveArch: %{ix86} x86_64
>  Buildroot:
> %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u}
> -n)
>  BuildRequires: nasm >= 0.98.38-1, perl, netpbm-progs
> @@ -33,12 +34,18 @@ MEMDISK, which loads legacy operating
> sy
>  
>  %prep
>  %setup -q -n syslinux-%{tarball_version}
> +%patch9 -p1
>  
>  %build
>  CFLAGS="-Werror -Wno-unused -finline-limit=2000"
>  export CFLAGS
>  # If you make clean here, we lose the provided
> syslinux.exe
>  #make clean
> +rm -f com32/menu/vesamenu.c32
> +make -C com32/lib libcom32.a
> +make -C com32/gpllib libcom32gpl.a
> +make -C com32/menu vesamenu.c32
> +test -f com32/menu/vesamenu.c32
>  make installer
>  make -C sample tidy
>  
> 
> -----Inline Attachment Follows-----
> 
> --
> Fedora-livecd-list mailing list
> Fedora-livecd-list at redhat.com
> https://www.redhat.com/mailman/listinfo/fedora-livecd-list
> 


      




More information about the Fedora-livecd-list mailing list