grub-devel
[Top][All Lists]
Advanced

[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: Vladimir 'φ-coder/phcoder' Serbinenko
Subject: Re: [PATCH] fix booting xenlinux kerenl error not on a xen domain
Date: Sun, 21 Sep 2014 17:27:02 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.0

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.
> +  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?
> +      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
> 


Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]