You are not logged in.

#1 2016-06-09 16:05:33

HappyTetrahedron
Member
Registered: 2016-06-09
Posts: 2

Arch only boots when overriding boot order through firmware

Hi guys

I installed Arch Linux on a Trekstor Surftab Wintron 7.0 tablet (baytrail). It has 32 bit efi, even though it actually has a 64 bit processor, so I installed grub using

grub-install --target=i386-efi --efi-directory=/boot/ --bootloader-id=arch

which appeared to work.

Now I have this weird issue with booting:

When I let the system boot normally (without interfering), grub loads and attempts to boot Arch after the timeout. I see the message saying

loading Linux linux...
loading initial ramdisk...

but after that it hangs. I waited for several minutes, but nothing happened.

When I press F7 during boot, I get a little popup that lets me override the boot order. From there, I select 'arch', which is the entry for grub. Grub then loads, and after the timeout, arch boots normally.


I have no idea why this happens. I did some troubleshooting:

I installed rEFInd. I then found out that 32bit rEFInd can't load a 64bit kernel, but I did notice that rEFInd uses a different screen resolution when I override the boot order (compared to when I boot it without interfering).

That led me to believe it was related to modesetting. I tried the nomodeset kernel parameter (using grub), which didn't help or change anything.

I also tried to ssh into the machine after leaving it hangig at 'loading initial ramdisk' for a few minutes, thinking that maybe it boots but can't use the display for some reason. That didn't work, though, so I guess it doesn't boot at all.


I'm really stumped here. I don't know what else to try. If anyone has an idea, please let me know - any help is greatly appreciated. It would be nice if I could boot this thing without having to attach a keyboard every time.

Here's my grub.cfg

#
# 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 ###
insmod part_gpt
insmod part_msdos
if [ -s $prefix/grubenv ]; then
  load_env
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 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  1cf76837-8e32-42a5-96da-d4aa72eeb6a6
else
  search --no-floppy --fs-uuid --set=root 1cf76837-8e32-42a5-96da-d4aa72eeb6a6
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_US
  insmod gettext
fi
terminal_input console
terminal_output gfxterm
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=5
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Arch Linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1cf76837-8e32-42a5-96da-d4aa72eeb6a6' {
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_gpt 
	insmod fat
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root  9922-28ED
	else
	  search --no-floppy --fs-uuid --set=root 9922-28ED
	fi
	echo	'Loading Linux linux-baytrail ...'
	linux	/vmlinuz-linux-baytrail root=UUID=1cf76837-8e32-42a5-96da-d4aa72eeb6a6 rw  clocksource=tsc
	echo	'Loading initial ramdisk ...'
	initrd	 /initramfs-linux-baytrail.img
}
submenu 'Advanced options for Arch Linux' $menuentry_id_option 'gnulinux-advanced-1cf76837-8e32-42a5-96da-d4aa72eeb6a6' {
	menuentry 'Arch Linux, with Linux linux-baytrail' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-baytrail-advanced-1cf76837-8e32-42a5-96da-d4aa72eeb6a6' {
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_gpt 
		insmod fat
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  9922-28ED
		else
		  search --no-floppy --fs-uuid --set=root 9922-28ED
		fi
		echo	'Loading Linux linux-baytrail ...'
		linux	/vmlinuz-linux-baytrail root=UUID=1cf76837-8e32-42a5-96da-d4aa72eeb6a6 rw  clocksource=tsc
		echo	'Loading initial ramdisk ...'
		initrd	 /initramfs-linux-baytrail.img
	}
	menuentry 'Arch Linux, with Linux linux-baytrail (fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-baytrail-fallback-1cf76837-8e32-42a5-96da-d4aa72eeb6a6' {
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_gpt 
		insmod fat
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  9922-28ED
		else
		  search --no-floppy --fs-uuid --set=root 9922-28ED
		fi
		echo	'Loading Linux linux-baytrail ...'
		linux	/vmlinuz-linux-baytrail root=UUID=1cf76837-8e32-42a5-96da-d4aa72eeb6a6 rw  clocksource=tsc
		echo	'Loading initial ramdisk ...'
		initrd	 /initramfs-linux-baytrail-fallback.img
	}
	menuentry 'Arch Linux, with Linux linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-advanced-1cf76837-8e32-42a5-96da-d4aa72eeb6a6' {
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_gpt 
		insmod fat
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  9922-28ED
		else
		  search --no-floppy --fs-uuid --set=root 9922-28ED
		fi
		echo	'Loading Linux linux ...'
		linux	/vmlinuz-linux root=UUID=1cf76837-8e32-42a5-96da-d4aa72eeb6a6 rw  clocksource=tsc
		echo	'Loading initial ramdisk ...'
		initrd	 /initramfs-linux.img
	}
	menuentry 'Arch Linux, with Linux linux (fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-fallback-1cf76837-8e32-42a5-96da-d4aa72eeb6a6' {
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_gpt 
		insmod fat
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  9922-28ED
		else
		  search --no-floppy --fs-uuid --set=root 9922-28ED
		fi
		echo	'Loading Linux linux ...'
		linux	/vmlinuz-linux root=UUID=1cf76837-8e32-42a5-96da-d4aa72eeb6a6 rw  clocksource=tsc
		echo	'Loading initial ramdisk ...'
		initrd	 /initramfs-linux-fallback.img
	}
}

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

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

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### 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 ###

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

and my partition layout

> lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0rpmb  179:24   0    4M  0 disk 
mmcblk0boot0 179:8    0    4M  1 disk 
mmcblk0boot1 179:16   0    4M  1 disk 
mmcblk0      179:0    0 14.6G  0 disk 
├─mmcblk0p1  179:1    0  100M  0 part /boot
├─mmcblk0p2  179:2    0    2G  0 part [SWAP]
└─mmcblk0p3  179:3    0 12.5G  0 part /

Thanks in advance! Let me know if I need to provide more information.

Offline

#2 2016-06-15 22:01:15

olive
Member
From: Belgium
Registered: 2008-06-22
Posts: 1,490

Re: Arch only boots when overriding boot order through firmware

I would write a grub.cfg myself like this:

insmod efi_gop
insmod efi_uga
insmod ext2
terminal_input console
terminal_output console
search --fs-uuid --set=root <UUID1> # UUID of the root partition.
set default=0
set timeout=3
set rootdev="<UUID2>" # UUID of the partition of the root filsesystem.

menuentry "Archlinux" {
          linux /boot/vmlinuz-linux root=${rootdev} rw ipv6.disable=1 intel_pstate=disable
          initrd /boot/initramfs-linux.img
}

Careful not loading any video driver and forcing to use the normal console. Maybe grub configure the console badly. It is better that grub does not configure anything and leave this task to the kernel.

Offline

Board footer

Powered by FluxBB