[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] fix booting xenlinux kerenl error not on a xen domain
From: |
Michael Chang |
Subject: |
Re: [PATCH] fix booting xenlinux kerenl error not on a xen domain |
Date: |
Tue, 23 Sep 2014 14:52:03 +0800 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Sun, Sep 21, 2014 at 05:27:02PM +0200, Vladimir 'φ-coder/phcoder' Serbinenko
wrote:
> On 18.09.2014 10:58, Michael Chang wrote:
> > There are two types of xen enabled kernel in linux, one is called
> > xenlinux which is older and can only boot on xen domain but not on any
> > real hardware without xen hypervisor. The other is called pvops which
> > can boot on xen domain as well as real hardware.
> >
> > This patch is to prevent booting xenlinux kernel on real hardware by
> > filtering it out from boot menu. If not the error will show up when
> > attempting to boot it.
> >
> > "Loading Linux xen ..."
> > error: invalid magic number
> > Loading initial ramdisk
> > error: you need to load the kernel first"
> >
> > This patch achieves it by checking the host type, then disable xenlinux
> > kernel from booting on hosts that is not xen pv domU, and meanwhile
> > allow xen pvops kernel to boot.
> > ---
> > util/grub.d/10_linux.in | 24 ++++++++++++++++++++++++
> > 1 files changed, 24 insertions(+), 0 deletions(-)
> >
> > diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
> > index d2e2a8f..b055ccc 100644
> > --- a/util/grub.d/10_linux.in
> > +++ b/util/grub.d/10_linux.in
> > @@ -207,6 +207,30 @@ while [ "x$list" != "x" ] ; do
> > fi
> > done
> >
> > + # check if host is xen pv domU
> > + if [ ! -e /proc/xen/xsd_port -a -e /proc/xen ]; then
> > + dmi=/sys/class/dmi/id
> > + if [ -r "${dmi}/product_name" -a -r "${dmi}/sys_vendor" ]; then
> > + product_name=`cat ${dmi}/product_name`
> > + sys_vendor=`cat ${dmi}/sys_vendor`
> > + if test "${sys_vendor}" = "Xen" -a "${product_name}" = "HVM domU";
> > then
> > + # host is xen HVM guest
> > + xen_pv_domU=false
> > + fi
> > + fi
> > + else
> > + xen_pv_domU=false
> > + fi
> > +
> Please don't determine system type at config file generation. Think of
> e.g. systems that can be bootable in either configuration. Use $grub_cpu
> and $grub_platofem runtime variables.
The question is the config could be loaded by pygrub. It's unclear to me
in this case whether $grub_platform runtime variable will be set or not.
> > + if test "$xen_pv_domU" = "false" ; then
> > + # prevent xen kernel without pv_opt support from booting
> > + if (grep -qx "CONFIG_XEN=y" "${config}" 2> /dev/null && ! grep -qx
> > "CONFIG_PARAVIRT=y" "${config}" 2> /dev/null); then
> We're moving away from grepping in $config. Can you see if it can be
> integrated with grub_file?
Thanks for pointing me this, I'll try integrating the check into
grub-file utility.
regards,
Michael
> > + echo "Skip xenlinux kernel $linux" >&2
> > + list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
> > + continue
> > + fi
> > + fi
> > +
> > initramfs=
> > if test -n "${config}" ; then
> > initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${config}" | cut -f2 -d= |
> > tr -d \"`
> > -- 1.7.3.4 _______________________________________________ Grub-devel
> > mailing list address@hidden
> > https://lists.gnu.org/mailman/listinfo/grub-devel
> >
>
>