Problem: “modprobe efivars” hangs platform during install
on an i386 EFI based system. Opening another tty session and killing the
process allows the install to continue to completion, though Linux is unable to
copy elilo.efi, elilo.conf, initrd.img, and vmlinuz to the EFI Partition and it
cannot create the Boot Manager variables. Before the install reboots, I can
manually mount the EFI Partition (mount /dev/sda1 /mnt) and copy the initrd.img
and vmlinux files to the EFI Partition. I had to find elilo.efi and elilo.conf
elsewhere and copy them to the EFI Partition manually. Once the OS is loaded, attempting to “modprobe efivars”
causes a Segmentation Fault. Background: I am a developer on an EFI BIOS based Intel Core 2 Duo
platform (i386). We have completed our EFI portion of the BIOS that meets the
EFI Spec. The code is based from the TianoCore.org code base. The EFI System Table is believed accurate and does point to
the ACPI, SMBIOS, and MP tables. Looking at dmesg shows the following: Linux version 2.6.18-04-686 (Debian
2.6.18.dfsg.1-12) (waldi@debian.org) (gcc version 4.1.2 20061115 (prerelease)
(Debian 4.1.1-21)) #1 SMP Mon Mar 26 17:17:36 UTC 2007 I suspect this is related to Linux
not being able to make EFI Runtime calls. I have looked at the source code for
efivars and from the comments it appears to be using hard-coded addresses to
find the EFI System Table. Our EFI System Table is not at that address. I
suspect this is the reason for the hangs and faults. I know when EFI launches elilo.efi,
it passes the address of the EFI System Table into it. I assume it uses this
address and finds the table and that the first few lines of dmesg come from
either it or initrd.img. Perhaps the issue is that as Linux continues
the boot process, it loses the address of the EFI System Table by the time
efivars wants to load, and unable to determine the address of the table, the
programmer was forced to use hard-coded address based on the only example at
the time, the IA64 Itanium. I have an American Arium ITP and hardware and BIOS debugging
experience, though I have never attempted to debug Linux. I am trying to figure out how to debug this module and
confirm that it uses hard-coded memory addresses for the EFI System table. Perhaps
as a test I can then hard-code it to the address of my table, but ultimately
this needs to be fixed such that the address is available to efivars when it
needs it. Thank you for any direction or help. Charles Abdouch |