Touchscreen Issue Resolved

@wondow

This may help?

https://askubuntu.com/questions/1027552/including-a-custom-acpi-dsdt-with-kubuntu-18-04-rc1

Thanks for taking the effort to rebuild the CPIO image and resolving the issue in Bios version 0.23 @joshwiththegoodhair. Its good to hear the touchscreen is now working again in Bios version 0.23.

2 Likes

So I tried with Linux Mint 19.2, without any success. I then installed Ubuntu 19.10 and tried again, without also any success. I used this method:

  1. Extract the CPIO file: cpio --extract < ./acpi_override_23
  2. Copy the result to /boot : cp kernel/firmware/acpi/dsdt.aml /boot/fixed_dsdt.aml
  3. Create /boot/grub/custom.cfg to contain acpi /fixed_dsdt.aml

No touch screen so far…

Have any clues on why touchscreen is not working? (Touch is working fine in Windows)

Is this using the new cpio file @joshwiththegoodhair built last night?
Located here http://josh.sh/acpi_override_23 and mentioned Several posts up on this thread?

Edit: can see you appear to have extracted the correct file. Will wait to see if Josh can add something useful.

yes, I checked twice to be sure.

1 Like

Move the raw CPIO image (from the URL) to /boot, then edit grub.cfg to include initrd /acpi_override_23 ABOVE all other initrd lines.

1 Like

My apologies, grub sucks. Open /boot/grub/grub.cfg (or /boot/grub.cfg; not sure exactly where the “compiled” grub.cfg lies), then find the correct menuentry and add the line like the highlighted line here. Make sure it’s the first initrd entry in the menuentry - before linux.

I don’t have Ubuntu or grub, so I can’t confirm this works 100%.

1 Like

When I get off the train and at my destination I will try this on Ubuntu MATE and reply back thanks again.

I modified the grub.cfg file. I now have this message: error: you need to load the kernel first.

If I insert the line after the first initrd (under linux /boot/vm[…] I get a kernel panic.

I also tried:
linux /boot/vmlinuz-5.2.0-15-generic root=UUID=8267d56c-137c-4cf8-b97f-272cd5f079a5 ro splash $vt_handoff
initrd /boot/acpi_override_23
initrd /boot/initrd.img-5.2.0-15-generic

The system boot, but no touchscreen.

Ok, new attempt based on this.

Edit /etc/grub.d/10_linux. Search for initrd and you should see a line initrd ${rel_dirname}/${initrd}. Above that line, add initrd /acpi_override_23 like this highlighted line. Also, you should not need to prepend /boot to the initrd.

Then, rebuild grub.cfg proper with sudo grub-mkconfig -o /boot/grub/grub.cfg and restart.

If this doesn’t work, I’ll find a way to install Mate (maybe on a USB stick) and work from there.

I tried with /acpi_override_23 : file not found
With /boot/acpi_override_23 : system boot, but no touchscreen.

Here is the lines:
EOF
fi
sed “s/^/$submenu_indentation/” << EOF
initrd /boot/acpi_override_23
initrd ${rel_dirname}/${initrd}
EOF

@petem Is it working for you?

Sorry my journey was lengthy and I got unexpectedly delayed.
OK so heres what I’ve tried.

  1. Extract the CPIO file: cpio --extract < ./acpi_override_23
  2. Copy the result to /boot : cp kernel/firmware/acpi/dsdt.aml /boot/fixed_dsdt.aml
  3. Create /boot/grub/custom.cfg to contain acpi /fixed_dsdt.aml

I realised that /grub/grub.cfg is a dynamically generated file (as it tells you this when you open it)
the config is generated from /etc/grub.d as Josh correctly identifies.

cd /etc/grub.d
sudo nano 10_linux

Ctrl O (saw it write out)
Ctrl X
sudo grub-mkconfig -o /boot/grub/grub.cfg

Dump from Terminal

user@user-pc:/etc/grub.d$ sudo nano 10_linux
[sudo] password for user: 
user@user-pc:/etc/grub.d$ sudo grub-mkconfig io /boot/grub/grub.cfg
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  set have_grubenv=true
  load_env
fi
if [ "${initrdfail}" = 2 ]; then
   set initrdfail=
elif [ "${initrdfail}" = 1 ]; then
   set next_entry="${prev_entry}"
   set prev_entry=
   save_env prev_entry
   if [ "${next_entry}" ]; then
      set initrdfail=2
   fi
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="0"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}
function initrdfail {
    if [ -n "${have_grubenv}" ]; then if [ -n "${partuuid}" ]; then
      if [ -z "${initrdfail}" ]; then
        set initrdfail=1
        if [ -n "${boot_once}" ]; then
          set prev_entry="${default}"
          save_env prev_entry
        fi
      fi
      save_env initrdfail
    fi; fi
}
function recordfail {
  set recordfail=1
  if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}
function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  9dee80c4-823b-4448-8615-fa96fd77230e
else
  search --no-floppy --fs-uuid --set=root 9dee80c4-823b-4448-8615-fa96fd77230e
fi
    font="/usr/share/grub/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=en_GB
  insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
  set timeout=30
else
  if [ x$feature_timeout_style = xy ] ; then
    set timeout_style=hidden
    set timeout=10
  # Fallback hidden-timeout code in case the timeout_style feature is
  # unavailable.
  elif sleep --interruptible 10 ; then
    set timeout=0
  fi
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
if background_color 60,59,55; then
  clear
fi

color_normal=light-gray/black

if [ -e ${prefix}/themes/ubuntu-mate/theme.txt ]; then
  insmod png
  theme=${prefix}/themes/ubuntu-mate/theme.txt
fi
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
	set gfxpayload="${1}"
	if [ "${1}" = "keep" ]; then
		set vt_handoff=vt.handoff=7
	else
		set vt_handoff=
	fi
}
if [ "${recordfail}" != 1 ]; then
  if [ -e ${prefix}/gfxblacklist.txt ]; then
    if hwmatch ${prefix}/gfxblacklist.txt 3; then
      if [ ${match} = 0 ]; then
        set linux_gfx_mode=keep
      else
        set linux_gfx_mode=text
      fi
    else
      set linux_gfx_mode=text
    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
export linux_gfx_mode
Found linux image: /boot/vmlinuz-5.2.0-15-generic
Found initrd image: /boot/initrd.img-5.2.0-15-generic
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-9dee80c4-823b-4448-8615-fa96fd77230e' {
	recordfail
	load_video
	gfxmode $linux_gfx_mode
	insmod gzio
	if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
	insmod part_gpt
	insmod ext2
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root  9dee80c4-823b-4448-8615-fa96fd77230e
	else
	  search --no-floppy --fs-uuid --set=root 9dee80c4-823b-4448-8615-fa96fd77230e
	fi
	linux	/boot/vmlinuz-5.2.0-15-generic root=UUID=9dee80c4-823b-4448-8615-fa96fd77230e ro  quiet splash $vt_handoff
            initrd /acpi_override_23
	initrd	/boot/initrd.img-5.2.0-15-generic
}
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-9dee80c4-823b-4448-8615-fa96fd77230e' {
	menuentry 'Ubuntu, with Linux 5.2.0-15-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.2.0-15-generic-advanced-9dee80c4-823b-4448-8615-fa96fd77230e' {
		recordfail
		load_video
		gfxmode $linux_gfx_mode
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  9dee80c4-823b-4448-8615-fa96fd77230e
		else
		  search --no-floppy --fs-uuid --set=root 9dee80c4-823b-4448-8615-fa96fd77230e
		fi
		echo	'Loading Linux 5.2.0-15-generic ...'
		linux	/boot/vmlinuz-5.2.0-15-generic root=UUID=9dee80c4-823b-4448-8615-fa96fd77230e ro  quiet splash $vt_handoff
		echo	'Loading initial ramdisk ...'
	            initrd /acpi_override_23
		initrd	/boot/initrd.img-5.2.0-15-generic
	}
	menuentry 'Ubuntu, with Linux 5.2.0-15-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.2.0-15-generic-recovery-9dee80c4-823b-4448-8615-fa96fd77230e' {
		recordfail
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  9dee80c4-823b-4448-8615-fa96fd77230e
		else
		  search --no-floppy --fs-uuid --set=root 9dee80c4-823b-4448-8615-fa96fd77230e
		fi
		echo	'Loading Linux 5.2.0-15-generic ...'
		linux	/boot/vmlinuz-5.2.0-15-generic root=UUID=9dee80c4-823b-4448-8615-fa96fd77230e ro recovery nomodeset 
		echo	'Loading initial ramdisk ...'
	            initrd /acpi_override_23
		initrd	/boot/initrd.img-5.2.0-15-generic
	}
Found linux image: /boot/vmlinuz-5.2.0-8-generic
Found initrd image: /boot/initrd.img-5.2.0-8-generic
	menuentry 'Ubuntu, with Linux 5.2.0-8-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.2.0-8-generic-advanced-9dee80c4-823b-4448-8615-fa96fd77230e' {
		recordfail
		load_video
		gfxmode $linux_gfx_mode
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  9dee80c4-823b-4448-8615-fa96fd77230e
		else
		  search --no-floppy --fs-uuid --set=root 9dee80c4-823b-4448-8615-fa96fd77230e
		fi
		echo	'Loading Linux 5.2.0-8-generic ...'
		linux	/boot/vmlinuz-5.2.0-8-generic root=UUID=9dee80c4-823b-4448-8615-fa96fd77230e ro  quiet splash $vt_handoff
		echo	'Loading initial ramdisk ...'
	            initrd /acpi_override_23
		initrd	/boot/initrd.img-5.2.0-8-generic
	}
	menuentry 'Ubuntu, with Linux 5.2.0-8-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.2.0-8-generic-recovery-9dee80c4-823b-4448-8615-fa96fd77230e' {
		recordfail
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  9dee80c4-823b-4448-8615-fa96fd77230e
		else
		  search --no-floppy --fs-uuid --set=root 9dee80c4-823b-4448-8615-fa96fd77230e
		fi
		echo	'Loading Linux 5.2.0-8-generic ...'
		linux	/boot/vmlinuz-5.2.0-8-generic root=UUID=9dee80c4-823b-4448-8615-fa96fd77230e ro recovery nomodeset 
		echo	'Loading initial ramdisk ...'
	            initrd /acpi_override_23
		initrd	/boot/initrd.img-5.2.0-8-generic
	}
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/10_linux_zfs ###
### END /etc/grub.d/10_linux_zfs ###

### BEGIN /etc/grub.d/20_linux_xen ###

### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_memtest86+ ###
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
Found Windows Boot Manager on /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi
menuentry 'Windows Boot Manager (on /dev/nvme0n1p1)' --class windows --class os $menuentry_id_option 'osprober-efi-62D5-EA09' {
	insmod part_gpt
	insmod fat
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root  62D5-EA09
	else
	  search --no-floppy --fs-uuid --set=root 62D5-EA09
	fi
	chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
  set timeout=10
fi
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
Adding boot menu entry for EFI firmware configuration
menuentry 'System setup' $menuentry_id_option 'uefi-firmware' {
	fwsetup
}
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
done

sudo reboot

Received “error: file ‘/acpi_override_23’ not found - press any key to continue”
Booted back into Ubuntu Mate

Open Terminal

cd /etc/grub.d
sudo nano 10_linux
changed the line i added to /boot/acpi_override_23

10_linux

#! /bin/sh
set -e

# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009,2010  Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

prefix="/usr"
exec_prefix="/usr"
datarootdir="/usr/share"
ubuntu_recovery="1"
quiet_boot="1"
quick_boot="1"
gfxpayload_dynamic="1"
vt_handoff="1"

. "$pkgdatadir/grub-mkconfig_lib"

export TEXTDOMAIN=grub
export TEXTDOMAINDIR="${datarootdir}/locale"

CLASS="--class gnu-linux --class gnu --class os"
SUPPORTED_INITS="sysvinit:/lib/sysvinit/init systemd:/lib/systemd/systemd upstart:/sbin/upstart"

if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
  OS=GNU/Linux
else
  case ${GRUB_DISTRIBUTOR} in
    Ubuntu|Kubuntu)
      OS="${GRUB_DISTRIBUTOR}"
      ;;
    *)
      OS="${GRUB_DISTRIBUTOR} GNU/Linux"
      ;;
  esac
  CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
fi

# loop-AES arranges things so that /dev/loop/X can be our root device, but
# the initrds that Linux uses don't like that.
case ${GRUB_DEVICE} in
  /dev/loop/*|/dev/loop[0-9])
    GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
    # We can't cope with devices loop-mounted from files here.
    case ${GRUB_DEVICE} in
      /dev/*) ;;
      *) exit 0 ;;
    esac
  ;;
esac

# Default to disabling partition uuid support to maintian compatibility with
# older kernels.
GRUB_DISABLE_LINUX_PARTUUID=${GRUB_DISABLE_LINUX_PARTUUID-true}

# get_dm_field_for_dev /dev/dm-0 uuid -> get the device mapper UUID for /dev/dm-0
# get_dm_field_for_dev /dev/dm-1 name -> get the device mapper name for /dev/dm-1
# etc
get_dm_field_for_dev () {
    dmsetup info -c --noheadings -o $2 $1 2>/dev/null
}

# Is $1 a multipath device?
is_multipath () {
    local dmuuid dmtype
    dmuuid="$(get_dm_field_for_dev $1 uuid)"
    if [ $? -ne 0 ]; then
        # Not a device mapper device -- or dmsetup not installed, and as
        # multipath depends on kpartx which depends on dmsetup, if there is no
        # dmsetup then there are not going to be any multipath devices.
        return 1
    fi
    # A device mapper "uuid" is always <type>-<uuid>. If <type> is of the form
    # part[0-9] then <uuid> is the device the partition is on and we want to
    # look at that instead. A multipath node always has <type> of mpath.
    dmtype="${dmuuid%%-*}"
    if [ "${dmtype#part}" != "$dmtype" ]; then
        dmuuid="${dmuuid#*-}"
        dmtype="${dmuuid%%-*}"
    fi
    if [ "$dmtype" = "mpath" ]; then
        return 0
    else
        return 1
    fi
}

if test -e "${GRUB_DEVICE}" && is_multipath "${GRUB_DEVICE}"; then
    # If / is multipathed, there will be multiple paths to the partition, so
    # using root=UUID= exposes the boot process to udev races. In addition
    # GRUB_DEVICE in this case will be /dev/dm-0 or similar -- better to use a
    # symlink that depends on the multipath name.
    GRUB_DEVICE=/dev/mapper/"$(get_dm_field_for_dev $GRUB_DEVICE name)"
    GRUB_DISABLE_LINUX_UUID=true
fi

# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter
# and mounting btrfs requires user space scanning, so force UUID in this case.
if ( [ "x${GRUB_DEVICE_UUID}" = "x" ] && [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] ) \
    || ( [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
	&& [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ] ) \
    || ( ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
	&& ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}" ) \
    || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then
  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
elif [ "x${GRUB_DEVICE_UUID}" = "x" ] \
    || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ]; then
  LINUX_ROOT_DEVICE=PARTUUID=${GRUB_DEVICE_PARTUUID}
else
  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
fi

case x"$GRUB_FS" in
    xbtrfs)
	rootsubvol="`make_system_path_relative_to_its_root /`"
	rootsubvol="${rootsubvol#/}"
	if [ "x${rootsubvol}" != x ]; then
	    GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
	fi;;
    xzfs)
	# We have a more specialized ZFS handler, with multiple system in 10_linux_zfs.
	if [ -e "`dirname $(readlink -f $0)`/10_linux_zfs" ]; then
	  exit 0
	fi
	rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
	bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
	LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs%/}"
	;;
esac

title_correction_code=

if [ -x /lib/recovery-mode/recovery-menu ]; then
    GRUB_CMDLINE_LINUX_RECOVERY=recovery
else
    GRUB_CMDLINE_LINUX_RECOVERY=single
fi
if [ "$ubuntu_recovery" = 1 ]; then
    GRUB_CMDLINE_LINUX_RECOVERY="$GRUB_CMDLINE_LINUX_RECOVERY nomodeset"
fi

if [ "$vt_handoff" = 1 ]; then
  for word in $GRUB_CMDLINE_LINUX_DEFAULT; do
    if [ "$word" = splash ]; then
      GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT \$vt_handoff"
    fi
  done
fi

if [ x"$GRUB_FORCE_PARTUUID" != x ]; then
   echo "set partuuid=${GRUB_FORCE_PARTUUID}"
fi

linux_entry ()
{
  os="$1"
  version="$2"
  type="$3"
  args="$4"

  if [ -z "$boot_device_id" ]; then
      boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
  fi
  if [ x$type != xsimple ] ; then
      case $type in
	  recovery)
	      title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "$(gettext "${GRUB_RECOVERY_TITLE}")")" ;;
	  init-*)
	      title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "${type#init-}")" ;;
	  *)
	      title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;;
      esac
      if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
	  replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
	  quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
	  title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
	  grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
      fi
      echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
  else
      echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
  fi      
  if [ "$quick_boot" = 1 ]; then
      echo "	recordfail" | sed "s/^/$submenu_indentation/"
  fi
  if [ x$type != xrecovery ] ; then
      save_default_entry | grub_add_tab
  fi

  # Use ELILO's generic "efifb" when it's known to be available.
  # FIXME: We need an interface to select vesafb in case efifb can't be used.
  if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then
      echo "	load_video" | sed "s/^/$submenu_indentation/"
  else
      if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then
	  echo "	load_video" | sed "s/^/$submenu_indentation/"
      fi
  fi
  if ([ "$ubuntu_recovery" = 0 ] || [ x$type != xrecovery ]) && \
     ([ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 1 ]); then
      echo "	gfxmode \$linux_gfx_mode" | sed "s/^/$submenu_indentation/"
  fi

  echo "	insmod gzio" | sed "s/^/$submenu_indentation/"
  echo "	if [ x\$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi" | sed "s/^/$submenu_indentation/"

  if [ x$dirname = x/ ]; then
    if [ -z "${prepare_root_cache}" ]; then
      prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab)"
    fi
    printf '%s\n' "${prepare_root_cache}" | sed "s/^/$submenu_indentation/"
  else
    if [ -z "${prepare_boot_cache}" ]; then
      prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
    fi
    printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
  fi
  if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
    message="$(gettext_printf "Loading Linux %s ..." ${version})"
    sed "s/^/$submenu_indentation/" << EOF
	echo	'$(echo "$message" | grub_quote)'
EOF
  fi
  if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then
    sed "s/^/$submenu_indentation/" << EOF
	linux	${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args}
EOF
  else
    # We have initrd and PARTUUID is set - we try to boot without initrd, and fallback to using it
    # if it fails.
    # "panic=-1" means "on panic reboot immediately". "panic=0" disables the reboot behavior.
    if [ x"$GRUB_FORCE_PARTUUID" != x ]; then
        linux_root_device_thisversion="PARTUUID=${GRUB_FORCE_PARTUUID}"
    fi
    message="$(gettext_printf "Loading initial ramdisk ...")"
    if test -n "${initrd}" && [ x"$GRUB_FORCE_PARTUUID" != x ]; then
        sed "s/^/$submenu_indentation/" << EOF
	if [ "\${initrdfail}" = 1 ]; then
	  linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
EOF
        if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
          sed "s/^/$submenu_indentation/" << EOF
	  echo	'$(echo "$message" | grub_quote)'
EOF
        fi

        sed "s/^/$submenu_indentation/" << EOF
	  initrd	${rel_dirname}/${initrd}
	else
	  linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} panic=-1
	fi
	initrdfail
EOF
    else
    # We don't have initrd or we don't want to set PARTUUID. Don't try initrd-less boot with fallback.
        sed "s/^/$submenu_indentation/" << EOF
	linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
EOF
        if test -n "${initrd}"; then
            # We do have initrd - let's use it at boot.
            # TRANSLATORS: ramdisk isn't identifier. Should be translated.
            if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
              sed "s/^/$submenu_indentation/" << EOF
	echo	'$(echo "$message" | grub_quote)'
EOF
            fi
            sed "s/^/$submenu_indentation/" << EOF
            initrd /boot/acpi_override_23
	initrd	${rel_dirname}/${initrd}
EOF
        fi
    fi
    if test -n "${dtb}" ; then
      if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
        message="$(gettext_printf "Loading device tree blob...")"
        sed "s/^/$submenu_indentation/" << EOF
	echo	'$(echo "$message" | grub_quote)'
EOF
      fi
      sed "s/^/$submenu_indentation/" << EOF
	devicetree	${rel_dirname}/${dtb}
EOF
    fi
  fi
  sed "s/^/$submenu_indentation/" << EOF
}
EOF
}

machine=`uname -m`
case "x$machine" in
    xi?86 | xx86_64)
	list=
	for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
	    if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
	done ;;
    *) 
	list=
	for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
                  if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
	done ;;
esac

case "$machine" in
    i?86) GENKERNEL_ARCH="x86" ;;
    mips|mips64) GENKERNEL_ARCH="mips" ;;
    mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
    arm*) GENKERNEL_ARCH="arm" ;;
    *) GENKERNEL_ARCH="$machine" ;;
esac

prepare_boot_cache=
prepare_root_cache=
boot_device_id=
title_correction_code=

cat << 'EOF'
function gfxmode {
	set gfxpayload="${1}"
EOF
if [ "$vt_handoff" = 1 ]; then
  cat << 'EOF'
	if [ "${1}" = "keep" ]; then
		set vt_handoff=vt.handoff=7
	else
		set vt_handoff=
	fi
EOF
fi
cat << EOF
}
EOF

# Use ELILO's generic "efifb" when it's known to be available.
# FIXME: We need an interface to select vesafb in case efifb can't be used.
if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 0 ]; then
  echo "set linux_gfx_mode=$GRUB_GFXPAYLOAD_LINUX"
else
  cat << EOF
if [ "\${recordfail}" != 1 ]; then
  if [ -e \${prefix}/gfxblacklist.txt ]; then
    if hwmatch \${prefix}/gfxblacklist.txt 3; then
      if [ \${match} = 0 ]; then
        set linux_gfx_mode=keep
      else
        set linux_gfx_mode=text
      fi
    else
      set linux_gfx_mode=text
    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
EOF
fi
cat << EOF
export linux_gfx_mode
EOF

# Extra indentation to add to menu entries in a submenu. We're not in a submenu
# yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
submenu_indentation=""

is_top_level=true
while [ "x$list" != "x" ] ; do
  linux=`version_find_latest $list`
  case $linux in
    *.efi.signed)
      # We handle these in linux_entry.
      list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
      continue
      ;;
  esac
  gettext_printf "Found linux image: %s\n" "$linux" >&2
  basename=`basename $linux`
  dirname=`dirname $linux`
  rel_dirname=`make_system_path_relative_to_its_root $dirname`
  version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
  alt_version=`echo $version | sed -e "s,\.old$,,g"`
  linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"

  initrd_early=
  for i in ${GRUB_EARLY_INITRD_LINUX_STOCK} \
	   ${GRUB_EARLY_INITRD_LINUX_CUSTOM}; do
    if test -e "${dirname}/${i}" ; then
      initrd_early="${initrd_early} ${i}"
    fi
  done

  initrd_real=
  for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
	   "initrd-${version}" "initramfs-${version}.img" \
	   "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
	   "initrd-${alt_version}" "initramfs-${alt_version}.img" \
	   "initramfs-genkernel-${version}" \
	   "initramfs-genkernel-${alt_version}" \
	   "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
	   "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
    if test -e "${dirname}/${i}" ; then
      initrd_real="${i}"
      break
    fi
  done

  initrd=
  if test -n "${initrd_early}" || test -n "${initrd_real}"; then
    initrd="${initrd_real}"
    if test -n "${initrd_early}"; then
        initrd="${initrd_early} ${initrd}"
    fi

    initrd_display=
    for i in ${initrd}; do
      initrd_display="${initrd_display} ${dirname}/${i}"
    done
    gettext_printf "Found initrd image: %s\n" "$(echo $initrd_display)" >&2
  fi

  dtb=
  for i in "dtb-${version}" "dtb-${alt_version}" "dtb"; do
    if test -e "${dirname}/${i}" ; then
      dtb="$i"
      break
    fi
  done

  config=
  for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
    if test -e "${i}" ; then
      config="${i}"
      break
    fi
  done

  initramfs=
  if test -n "${config}" ; then
      initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${config}" | cut -f2 -d= | tr -d \"`
  fi

  if test -z "${initramfs}" && test -z "${initrd_real}" ; then
    # "UUID=" and "ZFS=" magic is parsed by initrd or initramfs.  Since there's
    # no initrd or builtin initramfs, it can't work here.
    if [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] \
	|| [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ]; then

	linux_root_device_thisversion=${GRUB_DEVICE}
    else
	linux_root_device_thisversion=PARTUUID=${GRUB_DEVICE_PARTUUID}
    fi
  fi

  if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then
    linux_entry "${OS}" "${version}" simple \
    "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"

    submenu_indentation="$grub_tab"
    
    if [ -z "$boot_device_id" ]; then
	boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
    fi
    # TRANSLATORS: %s is replaced with an OS name
    echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
    is_top_level=false
  fi

  linux_entry "${OS}" "${version}" advanced \
              "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
  for supported_init in ${SUPPORTED_INITS}; do
    init_path="${supported_init#*:}"
    if [ -x "${init_path}" ] && [ "$(readlink -f /sbin/init)" != "$(readlink -f "${init_path}")" ]; then
      linux_entry "${OS}" "${version}" "init-${supported_init%%:*}" \
		  "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} init=${init_path}"
    fi
  done
  if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
    linux_entry "${OS}" "${version}" recovery \
                "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}"
  fi

  list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
done

# If at least one kernel was found, then we need to
# add a closing '}' for the submenu command.
if [ x"$is_top_level" != xtrue ]; then
  echo '}'
fi

echo "$title_correction_code"


/boot/grub/custom.cfg

acpi /fixed_dsdt.aml

sudo grub-mkconfig -o /boot/grub/grub.cfg

Dump of Terminal

user@user-pc:/etc/grub.d$ sudo grub-mkconfig -o /boot/grub/grub.cfg

Sourcing file `/etc/default/grub'

Sourcing file `/etc/default/grub.d/init-select.cfg'

Generating grub configuration file ...

Found linux image: /boot/vmlinuz-5.2.0-15-generic

Found initrd image: /boot/initrd.img-5.2.0-15-generic

Found linux image: /boot/vmlinuz-5.2.0-8-generic

Found initrd image: /boot/initrd.img-5.2.0-8-generic

Found Windows Boot Manager on /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi

Adding boot menu entry for EFI firmware configuration

done

sudo reboot

No longer get any errors on boot it loads ubuntu mate straight to enter password prompt
but I do not have any touchscreen at all.

:frowning:

NB: I should add that on both options I tried extracting CPIO as mentioned then copying to /boot
and I also did without extraction i.e Josh raw downloaded file and copied to /boot
It appeared to make no difference.

Just to make sure we’re all on the same page: is this everyone’s first attempt at getting this override to work with Ubuntu/Ubuntu Mate/grub or was the touchscreen working with Peter’s original acpi_override file in previous BIOS versions? I’m trying to determine if this is simply a loading issue or something with the generated cpio image.

1 Like

@petem - Could you execute dmesg | grep DSDT and paste the output here with the grub configuration that seems to have loaded the override cpio?

This is my first attempt at getting Touchscreen to work. I had not got round to doing original PeterCxy fix before upgrading to 0.23.

user@user-pc:~$ dmesg | grep DSDT
[    0.017286] ACPI: DSDT 0x000000008CA03258 028DB5 (v02 ALASKA A M I    01072009 INTL 20160422)
[    0.234431] ACPI: \_SB_.PCI0.LPCB.H_EC: Boot DSDT EC used to handle transactions
[    0.287489] ACPI: \_SB_.PCI0.LPCB.H_EC: Boot DSDT EC used to handle transactions and events

/etc/grub.d/10_linux

#! /bin/sh
set -e

# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009,2010  Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

prefix="/usr"
exec_prefix="/usr"
datarootdir="/usr/share"
ubuntu_recovery="1"
quiet_boot="1"
quick_boot="1"
gfxpayload_dynamic="1"
vt_handoff="1"

. "$pkgdatadir/grub-mkconfig_lib"

export TEXTDOMAIN=grub
export TEXTDOMAINDIR="${datarootdir}/locale"

CLASS="--class gnu-linux --class gnu --class os"
SUPPORTED_INITS="sysvinit:/lib/sysvinit/init systemd:/lib/systemd/systemd upstart:/sbin/upstart"

if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
  OS=GNU/Linux
else
  case ${GRUB_DISTRIBUTOR} in
    Ubuntu|Kubuntu)
      OS="${GRUB_DISTRIBUTOR}"
      ;;
    *)
      OS="${GRUB_DISTRIBUTOR} GNU/Linux"
      ;;
  esac
  CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
fi

# loop-AES arranges things so that /dev/loop/X can be our root device, but
# the initrds that Linux uses don't like that.
case ${GRUB_DEVICE} in
  /dev/loop/*|/dev/loop[0-9])
    GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
    # We can't cope with devices loop-mounted from files here.
    case ${GRUB_DEVICE} in
      /dev/*) ;;
      *) exit 0 ;;
    esac
  ;;
esac

# Default to disabling partition uuid support to maintian compatibility with
# older kernels.
GRUB_DISABLE_LINUX_PARTUUID=${GRUB_DISABLE_LINUX_PARTUUID-true}

# get_dm_field_for_dev /dev/dm-0 uuid -> get the device mapper UUID for /dev/dm-0
# get_dm_field_for_dev /dev/dm-1 name -> get the device mapper name for /dev/dm-1
# etc
get_dm_field_for_dev () {
    dmsetup info -c --noheadings -o $2 $1 2>/dev/null
}

# Is $1 a multipath device?
is_multipath () {
    local dmuuid dmtype
    dmuuid="$(get_dm_field_for_dev $1 uuid)"
    if [ $? -ne 0 ]; then
        # Not a device mapper device -- or dmsetup not installed, and as
        # multipath depends on kpartx which depends on dmsetup, if there is no
        # dmsetup then there are not going to be any multipath devices.
        return 1
    fi
    # A device mapper "uuid" is always <type>-<uuid>. If <type> is of the form
    # part[0-9] then <uuid> is the device the partition is on and we want to
    # look at that instead. A multipath node always has <type> of mpath.
    dmtype="${dmuuid%%-*}"
    if [ "${dmtype#part}" != "$dmtype" ]; then
        dmuuid="${dmuuid#*-}"
        dmtype="${dmuuid%%-*}"
    fi
    if [ "$dmtype" = "mpath" ]; then
        return 0
    else
        return 1
    fi
}

if test -e "${GRUB_DEVICE}" && is_multipath "${GRUB_DEVICE}"; then
    # If / is multipathed, there will be multiple paths to the partition, so
    # using root=UUID= exposes the boot process to udev races. In addition
    # GRUB_DEVICE in this case will be /dev/dm-0 or similar -- better to use a
    # symlink that depends on the multipath name.
    GRUB_DEVICE=/dev/mapper/"$(get_dm_field_for_dev $GRUB_DEVICE name)"
    GRUB_DISABLE_LINUX_UUID=true
fi

# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter
# and mounting btrfs requires user space scanning, so force UUID in this case.
if ( [ "x${GRUB_DEVICE_UUID}" = "x" ] && [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] ) \
    || ( [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
	&& [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ] ) \
    || ( ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
	&& ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}" ) \
    || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then
  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
elif [ "x${GRUB_DEVICE_UUID}" = "x" ] \
    || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ]; then
  LINUX_ROOT_DEVICE=PARTUUID=${GRUB_DEVICE_PARTUUID}
else
  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
fi

case x"$GRUB_FS" in
    xbtrfs)
	rootsubvol="`make_system_path_relative_to_its_root /`"
	rootsubvol="${rootsubvol#/}"
	if [ "x${rootsubvol}" != x ]; then
	    GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
	fi;;
    xzfs)
	# We have a more specialized ZFS handler, with multiple system in 10_linux_zfs.
	if [ -e "`dirname $(readlink -f $0)`/10_linux_zfs" ]; then
	  exit 0
	fi
	rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
	bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
	LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs%/}"
	;;
esac

title_correction_code=

if [ -x /lib/recovery-mode/recovery-menu ]; then
    GRUB_CMDLINE_LINUX_RECOVERY=recovery
else
    GRUB_CMDLINE_LINUX_RECOVERY=single
fi
if [ "$ubuntu_recovery" = 1 ]; then
    GRUB_CMDLINE_LINUX_RECOVERY="$GRUB_CMDLINE_LINUX_RECOVERY nomodeset"
fi

if [ "$vt_handoff" = 1 ]; then
  for word in $GRUB_CMDLINE_LINUX_DEFAULT; do
    if [ "$word" = splash ]; then
      GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT \$vt_handoff"
    fi
  done
fi

if [ x"$GRUB_FORCE_PARTUUID" != x ]; then
   echo "set partuuid=${GRUB_FORCE_PARTUUID}"
fi

linux_entry ()
{
  os="$1"
  version="$2"
  type="$3"
  args="$4"

  if [ -z "$boot_device_id" ]; then
      boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
  fi
  if [ x$type != xsimple ] ; then
      case $type in
	  recovery)
	      title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "$(gettext "${GRUB_RECOVERY_TITLE}")")" ;;
	  init-*)
	      title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "${type#init-}")" ;;
	  *)
	      title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;;
      esac
      if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
	  replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
	  quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
	  title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
	  grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
      fi
      echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
  else
      echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
  fi      
  if [ "$quick_boot" = 1 ]; then
      echo "	recordfail" | sed "s/^/$submenu_indentation/"
  fi
  if [ x$type != xrecovery ] ; then
      save_default_entry | grub_add_tab
  fi

  # Use ELILO's generic "efifb" when it's known to be available.
  # FIXME: We need an interface to select vesafb in case efifb can't be used.
  if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then
      echo "	load_video" | sed "s/^/$submenu_indentation/"
  else
      if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then
	  echo "	load_video" | sed "s/^/$submenu_indentation/"
      fi
  fi
  if ([ "$ubuntu_recovery" = 0 ] || [ x$type != xrecovery ]) && \
     ([ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 1 ]); then
      echo "	gfxmode \$linux_gfx_mode" | sed "s/^/$submenu_indentation/"
  fi

  echo "	insmod gzio" | sed "s/^/$submenu_indentation/"
  echo "	if [ x\$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi" | sed "s/^/$submenu_indentation/"

  if [ x$dirname = x/ ]; then
    if [ -z "${prepare_root_cache}" ]; then
      prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab)"
    fi
    printf '%s\n' "${prepare_root_cache}" | sed "s/^/$submenu_indentation/"
  else
    if [ -z "${prepare_boot_cache}" ]; then
      prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
    fi
    printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
  fi
  if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
    message="$(gettext_printf "Loading Linux %s ..." ${version})"
    sed "s/^/$submenu_indentation/" << EOF
	echo	'$(echo "$message" | grub_quote)'
EOF
  fi
  if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then
    sed "s/^/$submenu_indentation/" << EOF
	linux	${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args}
EOF
  else
    # We have initrd and PARTUUID is set - we try to boot without initrd, and fallback to using it
    # if it fails.
    # "panic=-1" means "on panic reboot immediately". "panic=0" disables the reboot behavior.
    if [ x"$GRUB_FORCE_PARTUUID" != x ]; then
        linux_root_device_thisversion="PARTUUID=${GRUB_FORCE_PARTUUID}"
    fi
    message="$(gettext_printf "Loading initial ramdisk ...")"
    if test -n "${initrd}" && [ x"$GRUB_FORCE_PARTUUID" != x ]; then
        sed "s/^/$submenu_indentation/" << EOF
	if [ "\${initrdfail}" = 1 ]; then
	  linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
EOF
        if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
          sed "s/^/$submenu_indentation/" << EOF
	  echo	'$(echo "$message" | grub_quote)'
EOF
        fi

        sed "s/^/$submenu_indentation/" << EOF
	  initrd	${rel_dirname}/${initrd}
	else
	  linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} panic=-1
	fi
	initrdfail
EOF
    else
    # We don't have initrd or we don't want to set PARTUUID. Don't try initrd-less boot with fallback.
        sed "s/^/$submenu_indentation/" << EOF
	linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
EOF
        if test -n "${initrd}"; then
            # We do have initrd - let's use it at boot.
            # TRANSLATORS: ramdisk isn't identifier. Should be translated.
            if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
              sed "s/^/$submenu_indentation/" << EOF
	echo	'$(echo "$message" | grub_quote)'
EOF
            fi
            sed "s/^/$submenu_indentation/" << EOF
            initrd /boot/acpi_override_23
	initrd	${rel_dirname}/${initrd}
EOF
        fi
    fi
    if test -n "${dtb}" ; then
      if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
        message="$(gettext_printf "Loading device tree blob...")"
        sed "s/^/$submenu_indentation/" << EOF
	echo	'$(echo "$message" | grub_quote)'
EOF
      fi
      sed "s/^/$submenu_indentation/" << EOF
	devicetree	${rel_dirname}/${dtb}
EOF
    fi
  fi
  sed "s/^/$submenu_indentation/" << EOF
}
EOF
}

machine=`uname -m`
case "x$machine" in
    xi?86 | xx86_64)
	list=
	for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
	    if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
	done ;;
    *) 
	list=
	for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
                  if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
	done ;;
esac

case "$machine" in
    i?86) GENKERNEL_ARCH="x86" ;;
    mips|mips64) GENKERNEL_ARCH="mips" ;;
    mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
    arm*) GENKERNEL_ARCH="arm" ;;
    *) GENKERNEL_ARCH="$machine" ;;
esac

prepare_boot_cache=
prepare_root_cache=
boot_device_id=
title_correction_code=

cat << 'EOF'
function gfxmode {
	set gfxpayload="${1}"
EOF
if [ "$vt_handoff" = 1 ]; then
  cat << 'EOF'
	if [ "${1}" = "keep" ]; then
		set vt_handoff=vt.handoff=7
	else
		set vt_handoff=
	fi
EOF
fi
cat << EOF
}
EOF

# Use ELILO's generic "efifb" when it's known to be available.
# FIXME: We need an interface to select vesafb in case efifb can't be used.
if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 0 ]; then
  echo "set linux_gfx_mode=$GRUB_GFXPAYLOAD_LINUX"
else
  cat << EOF
if [ "\${recordfail}" != 1 ]; then
  if [ -e \${prefix}/gfxblacklist.txt ]; then
    if hwmatch \${prefix}/gfxblacklist.txt 3; then
      if [ \${match} = 0 ]; then
        set linux_gfx_mode=keep
      else
        set linux_gfx_mode=text
      fi
    else
      set linux_gfx_mode=text
    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
EOF
fi
cat << EOF
export linux_gfx_mode
EOF

# Extra indentation to add to menu entries in a submenu. We're not in a submenu
# yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
submenu_indentation=""

is_top_level=true
while [ "x$list" != "x" ] ; do
  linux=`version_find_latest $list`
  case $linux in
    *.efi.signed)
      # We handle these in linux_entry.
      list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
      continue
      ;;
  esac
  gettext_printf "Found linux image: %s\n" "$linux" >&2
  basename=`basename $linux`
  dirname=`dirname $linux`
  rel_dirname=`make_system_path_relative_to_its_root $dirname`
  version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
  alt_version=`echo $version | sed -e "s,\.old$,,g"`
  linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"

  initrd_early=
  for i in ${GRUB_EARLY_INITRD_LINUX_STOCK} \
	   ${GRUB_EARLY_INITRD_LINUX_CUSTOM}; do
    if test -e "${dirname}/${i}" ; then
      initrd_early="${initrd_early} ${i}"
    fi
  done

  initrd_real=
  for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
	   "initrd-${version}" "initramfs-${version}.img" \
	   "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
	   "initrd-${alt_version}" "initramfs-${alt_version}.img" \
	   "initramfs-genkernel-${version}" \
	   "initramfs-genkernel-${alt_version}" \
	   "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
	   "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
    if test -e "${dirname}/${i}" ; then
      initrd_real="${i}"
      break
    fi
  done

  initrd=
  if test -n "${initrd_early}" || test -n "${initrd_real}"; then
    initrd="${initrd_real}"
    if test -n "${initrd_early}"; then
        initrd="${initrd_early} ${initrd}"
    fi

    initrd_display=
    for i in ${initrd}; do
      initrd_display="${initrd_display} ${dirname}/${i}"
    done
    gettext_printf "Found initrd image: %s\n" "$(echo $initrd_display)" >&2
  fi

  dtb=
  for i in "dtb-${version}" "dtb-${alt_version}" "dtb"; do
    if test -e "${dirname}/${i}" ; then
      dtb="$i"
      break
    fi
  done

  config=
  for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
    if test -e "${i}" ; then
      config="${i}"
      break
    fi
  done

  initramfs=
  if test -n "${config}" ; then
      initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${config}" | cut -f2 -d= | tr -d \"`
  fi

  if test -z "${initramfs}" && test -z "${initrd_real}" ; then
    # "UUID=" and "ZFS=" magic is parsed by initrd or initramfs.  Since there's
    # no initrd or builtin initramfs, it can't work here.
    if [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] \
	|| [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ]; then

	linux_root_device_thisversion=${GRUB_DEVICE}
    else
	linux_root_device_thisversion=PARTUUID=${GRUB_DEVICE_PARTUUID}
    fi
  fi

  if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then
    linux_entry "${OS}" "${version}" simple \
    "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"

    submenu_indentation="$grub_tab"
    
    if [ -z "$boot_device_id" ]; then
	boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
    fi
    # TRANSLATORS: %s is replaced with an OS name
    echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
    is_top_level=false
  fi

  linux_entry "${OS}" "${version}" advanced \
              "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
  for supported_init in ${SUPPORTED_INITS}; do
    init_path="${supported_init#*:}"
    if [ -x "${init_path}" ] && [ "$(readlink -f /sbin/init)" != "$(readlink -f "${init_path}")" ]; then
      linux_entry "${OS}" "${version}" "init-${supported_init%%:*}" \
		  "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} init=${init_path}"
    fi
  done
  if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
    linux_entry "${OS}" "${version}" recovery \
                "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}"
  fi

  list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
done

# If at least one kernel was found, then we need to
# add a closing '}' for the submenu command.
if [ x"$is_top_level" != xtrue ]; then
  echo '}'
fi

echo "$title_correction_code"

This is also my first attemp.

simon@P2M:~$ dmesg | grep DSDT
[    0.017577] ACPI: DSDT 0x000000008CA03248 028DB5 (v02 ALASKA A M I    01072009 INTL 20160422)
[    0.206529] ACPI: \_SB_.PCI0.LPCB.H_EC: Boot DSDT EC used to handle transactions
[    0.255377] ACPI: \_SB_.PCI0.LPCB.H_EC: Boot DSDT EC used to handle transactions and events

This is mine. I feel like the CPIO image is just not loading for you guys or not loading first. I’ll dig a little deeper this evening.

1 Like

I also tried this way, no more success:

https://ubuntuforums.org/showthread.php?t=2115984

You might want to look at this:
https://wiki.debian.org/OverridingDSDT

If I understand correctly, we can’t use the workaround without recompiling the kernel?

1 Like

Guys, to my regret none of the solutions here helped me :frowning:

I’ve got BIOS 0.23, Arch Linux with kernel 5.2.14 and GRUB 2.04

What I’ve been trying (every try with fresh grub.cfg):

  1. added “initrd /boot/acpi_override” record in grub menu before real initrd. No messages related to ACPI override.
  2. added initrd /boot/acpi_override /boot/initramfs-linux.img. Did not boot at all, hangs right after the GRUB message “Booting Linux…”
  3. extracted dsdt.aml file from acpi_override and tried to add “acpi /boot/dsdt.aml” before linux command entry in grub.cfg. The same effect as above.
  4. tried to move the “acpi …” line after linux command entry. No ACPI override applied.

Does this thing work for BIOS 0.23 and GRUB for someone? If you’ve managed to do it then please share your wisdom. Along with grub.cfg please :slight_smile: Thank you.

1 Like