On Thu, May 07, 2020 at 11:12:34AM +0300, Efraim Flashner wrote: > I haven't tested the produced image, but the following builds without > trying to also build v86d > > (start > (if (and (and (string-suffix? "linux-gnu" %host-type) > (or (string-prefix? "x86_64" %host-type) > (string-prefix? "i686" %host-type))) > (file-exists? "/dev/fb0")) > #~(lambda () > ;; uvesafb is only supported on x86 and x86_64. > (invoke #+(file-append kmod "/bin/modprobe") > "uvesafb" > (string-append "v86d=" #$v86d "/sbin/v86d") > "mode_option=1024x768")) > #~(lambda () #t)))
This way uvesafb is started unconditionally on x86_64, even when it is not needed, leading to video corruption on some boots in QEMU. I have more success with moving the file-exists check into the #~(lambda …) like the attached patch. But I’m not sure it really fixes ARM builds. I tested via qemu-system-x86_64 -m 1024 -smp 1 -enable-kvm -nic user,model=virtio-net-pci -boot menu=on,order=d -drive media=cdrom,file=/gnu/store/0cgbp4y7awk4spg49ajw077xyzk24fi0-iso9660-image and on hardware. With QEMU, uvesafb is needed if and only if nomodeset is passed as a kernel parameter. Now how to build an ARM image for QEMU? Sorry I left such a mess with uvesafb. Regards, Florian
>From 13fd2b590e37095ed4213d7bb85422b48deab9c6 Mon Sep 17 00:00:00 2001 From: Florian Pelz <pelzflor...@pelzflorian.de> Date: Thu, 7 May 2020 13:26:19 +0200 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [PATCH] installer: Do not load uvesafb on non-x86 install images. Fixes <https://bugs.gnu.org/41120>. Suggested by Efraim Flashner <efr...@flashner.co.il>. * gnu/system/install.scm (uvesafb-shepherd-service): Do not build x86-only v86d helper unconditionally. --- gnu/system/install.scm | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/gnu/system/install.scm b/gnu/system/install.scm index 6435c1bff4..ad8a84091c 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -299,16 +299,18 @@ the user's target storage device rather than on the RAM disk." (documentation "Load the uvesafb kernel module if needed.") (provision '(maybe-uvesafb)) (requirement '(file-systems)) - (start #~(lambda () - ;; uvesafb is only supported on x86 and x86_64. - (or (not (and (string-suffix? "linux-gnu" %host-type) - (or (string-prefix? "x86_64" %host-type) - (string-prefix? "i686" %host-type)))) - (file-exists? "/dev/fb0") - (invoke #+(file-append kmod "/bin/modprobe") - "uvesafb" - (string-append "v86d=" #$v86d "/sbin/v86d") - "mode_option=1024x768")))) + (start + (if (and (and (string-suffix? "linux-gnu" %host-type) + (or (string-prefix? "x86_64" %host-type) + (string-prefix? "i686" %host-type))) + (file-exists? "/dev/fb0")) + #~(lambda () + ;; uvesafb is only supported on x86 and x86_64. + (invoke #+(file-append kmod "/bin/modprobe") + "uvesafb" + (string-append "v86d=" #$v86d "/sbin/v86d") + "mode_option=1024x768")) + #~(lambda () #t))) (respawn? #f) (one-shot? #t)))) -- 2.26.1