docs/install: document CONFIG_X86_IOPL_IOPERM

Signed-off-by: Leah Rowe <leah@libreboot.org>
master
Leah Rowe 2024-01-04 09:21:57 +00:00 committed by Leah Rowe
parent 4ebb707a33
commit c125175615
1 changed files with 36 additions and 0 deletions

View File

@ -5,11 +5,47 @@ x-toc-enable: true
This section relates to installing Canoeboot on supported targets.
FLASH ERRORS (and workarounds)
+=======================
Right out of the gate, some users may experience errors with flashrom when
using the internal programmer. They are:
/dev/mem access error
---------------------
NOTE: if running `flashrom -p internal` for software based flashing, and you
get an error related to `/dev/mem` access, you should reboot with
`iomem=relaxed` kernel parameter before running flashrom, or use a kernel that
has `CONFIG_STRICT_DEVMEM` not enabled.
ERROR: Could not get I/O privileges
------------------------------------
Error message: `ERROR: Could not get I/O privileges (Function not implemented)`
If you get this while running `flashrom -p internal -w filename.rom` (or any
internal flash operation), note: flashrom heavily uses ioperm/iopl functions
to operate the internal flasher, at least on x86 machines.
See: <https://lwn.net/Articles/804143/>
Yeah, just enable `CONFIG_X86_IOPL_IOPERM` in your Linux kernel. This is
a *build-time* option, so you must re-compile your kernel, or find a build that
has this option enabled (IOPL emulation).
Here's a handy-dandy guide for building a kernel from source:
<https://www.cyberciti.biz/tips/compiling-linux-kernel-26.html>
**BSD users:** On OpenBSD and NetBSD if you get similar errors, note that it
should work here, but you need to boot with `kern.securelevel=-1`.
See: [NetBSD securelevel manual](https://wiki.netbsd.org/tutorials/kernel_secure_levels/)
and [OpenBSD securelevel manpage](https://man.openbsd.org/securelevel).
Otherwise, if you get such errors, it may just be that you're not root. You
must run flashrom as root, at least to use the internal flasher (using external
USB flashing dongles doesn't normally require root).
PRECAUTIONS
===========