[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