[flashrom] Porting flashrom to OpenBSD

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Tue Jun 29 18:53:57 CEST 2010


On 28.06.2010 22:01, Stuart Henderson wrote:
> On 2010/06/29 00:06, Ian McWilliam wrote:
>   
>> On 28/06/2010, at 6:41 PM, Matthieu Herrb wrote:
>>
>>     
>>> On Sun, Jun 27, 2010 at 10:38:30PM +0200, Carl-Daniel Hailfinger wrote:
>>>       
>>>> Could I ask you to write one or two short sentences which will be
>>>> printed if flashrom detects insufficient permisions on OpenBSD? Maybe
>>>> something like this (feel free to change it completely):
>>>>         
>>>> "Error: Insufficient permissions to access hardware. Please set
>>>> securelevel=-1 in /etc/rc.securelevel and reboot, or reboot into single
>>>> user mode."
>>>>         
>>> This message looks good to me. You could add "See the securelevel(7)
>>> and init(8) manual pages for details".
>>>
>>> Thanks for your work on this port.
>>> -- 
>>> Matthieu Herrb
>>>       
>
> I agree with both points :)
>   

Thanks.


>> I think in the port we could probably add a README.OpenBSD file where
>> we could explain the situation in more detail like we do for many other ports
>> stored in the share/doc/flashrom directory as well.
>>     
>
> We could, but I think it's even better to have proper instructions
> for OpenBSD in the main distribution.
>   

I added the message to strategic places in the code and the man page.

Add OpenBSD support.
Add a requirements section to the man page which lists the needed access
permissions for each programmer.

This patch needs the libpci 8/16-bit write patch I sent earlier.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>

Index: flashrom-openbsd/flashrom.8
===================================================================
--- flashrom-openbsd/flashrom.8	(revision 1063)
+++ flashrom-openbsd/flashrom.8	(working copy)
@@ -306,7 +306,7 @@
 Example:
 .B "flashrom \-p dummy:lpc,fwh"
 .TP
-.BR "nic3com" , " nicrealtek" , " nicsmc1211" , " gfxnvidia" , " satasii\
+.BR "nic3com" , " nicrealtek" , " nicsmc1211" , " gfxnvidia" , " satasii \
 " and " atahpt " programmers
 These programmers have an option to specify the PCI address of the card
 your want to use, which must be specified if more than one card supported
@@ -391,6 +391,51 @@
 .SH EXIT STATUS
 flashrom exits with 0 on success, 1 on most failures but with 2 if /dev/mem
 (/dev/xsvc on Solaris) can not be opened and with 3 if a call to mmap() fails.
+.SH REQUIREMENTS
+flashrom needs different access permissions for different programmers.
+.sp
+.B internal
+needs raw memory access, PCI configuration space access, raw I/O port
+access (x86) and MSR access (x86).
+.sp
+.B it87spi
+needs raw I/O port access (x86).
+.sp
+.BR nic3com ", " nicrealtek ", " nicsmc1211 " and " nicnatsemi "
+need PCI configuration space read access and raw I/O port access.
+.sp
+.B atahpt
+needs PCI configuration space access and raw I/O port access.
+.sp
+.BR gfxnvidia " and " drkaiser
+need PCI configuration space access and raw memory access.
+.sp
+.B satasii
+needs PCI configuration space read access and raw memory access.
+.sp
+.B serprog
+needs TCP access to the network or userspace access to a serial port.
+.sp
+.B buspirate_spi
+needs userspace access to a serial port.
+.sp
+.BR dediprog " and " ft2232_spi
+need access to the USB device via libusb.
+.sp
+.B dummy
+needs no access permissions at all.
+.sp
+.BR internal ", " it87spi ", " nic3com ", " nicrealtek ", " nicsmc1211 ", "
+.BR nicnatsemi ", " "gfxnvidia" ", " drkaiser ", " satasii " and " atahpt
+have to be run as superuser/root, and need additional raw access permission.
+.sp
+.BR serprog ", " buspirate_spi ", " dediprog " and " ft2232_spi
+can be run as normal user on most operating systems if appropriate device
+permissions are set.
+.sp
+On OpenBSD, you can obtain raw access permission by setting
+securelevel=-1 in /etc/rc.securelevel and rebooting, or rebooting into single
+user mode.
 .SH BUGS
 Please report any bugs at
 .sp
Index: flashrom-openbsd/hwaccess.c
===================================================================
--- flashrom-openbsd/hwaccess.c	(revision 1063)
+++ flashrom-openbsd/hwaccess.c	(working copy)
@@ -57,6 +57,11 @@
 #endif
 		msg_perr("ERROR: Could not get I/O privileges (%s).\n"
 			"You need to be root.\n", strerror(errno));
+#if defined (__OpenBSD__)
+		msg_perr("Please set securelevel=-1 in /etc/rc.securelevel "
+			   "and reboot, or reboot into \n");
+		msg_perr("single user mode.\n");
+#endif
 		exit(1);
 	}
 #endif
Index: flashrom-openbsd/hwaccess.h
===================================================================
--- flashrom-openbsd/hwaccess.h	(revision 1063)
+++ flashrom-openbsd/hwaccess.h	(working copy)
@@ -228,17 +228,25 @@
 #endif
 #endif
 
-#if defined(__NetBSD__)
+#if defined(__NetBSD__) || defined (__OpenBSD__)
   #define off64_t off_t
   #define lseek64 lseek
   #if defined(__i386__) || defined(__x86_64__)
     #include <sys/types.h>
     #include <machine/sysarch.h>
+#if defined(__NetBSD__)
     #if defined(__i386__)
       #define iopl i386_iopl
     #elif defined(__x86_64__)
       #define iopl x86_64_iopl
     #endif
+#elif defined (__OpenBSD__)
+    #if defined(__i386__)
+      #define iopl i386_iopl
+    #elif defined(__amd64__)
+      #define iopl amd64_iopl
+    #endif
+#endif
   #include <stdint.h>
 
 static inline void outb(uint8_t value, uint16_t port)
Index: flashrom-openbsd/physmap.c
===================================================================
--- flashrom-openbsd/physmap.c	(revision 1063)
+++ flashrom-openbsd/physmap.c	(working copy)
@@ -229,6 +229,10 @@
 			msg_perr("You can override CONFIG_X86_PAT at boot with the nopat kernel parameter but\n");
 			msg_perr("disabling the other option unfortunately requires a kernel recompile. Sorry!\n");
 		}
+#elif defined (__OpenBSD__)
+		msg_perr("Please set securelevel=-1 in /etc/rc.securelevel "
+			   "and reboot, or reboot into \n");
+		msg_perr("single user mode.\n");
 #endif
 		if (!mayfail)
 			exit(3);
Index: flashrom-openbsd/Makefile
===================================================================
--- flashrom-openbsd/Makefile	(revision 1063)
+++ flashrom-openbsd/Makefile	(working copy)
@@ -48,6 +48,10 @@
 CPPFLAGS += -I/usr/local/include
 LDFLAGS += -L/usr/local/lib
 endif
+ifeq ($(OS_ARCH), OpenBSD)
+CPPFLAGS += -I/usr/local/include
+LDFLAGS += -L/usr/local/lib
+endif
 ifeq ($(OS_ARCH), DOS)
 EXEC_SUFFIX := .exe
 CPPFLAGS += -I../libgetopt -I../libpci/include
@@ -259,9 +263,13 @@
 LIBS += ../libpci/lib/libpci.a
 else
 LIBS += -lpci
+ifeq ($(OS_ARCH), OpenBSD)
+# For (i386|amd64)_iopl(2).
+LIBS += -l$(shell uname -m)
 endif
 endif
 endif
+endif
 
 ifeq ($(CONFIG_PRINT_WIKI), yes)
 FEATURE_CFLAGS += -D'CONFIG_PRINT_WIKI=1'
Index: flashrom-openbsd/README
===================================================================
--- flashrom-openbsd/README	(revision 1063)
+++ flashrom-openbsd/README	(working copy)
@@ -55,6 +55,11 @@
  * devel/gmake
  * devel/libpci
 
+On OpenBSD, you need the following ports:
+
+ * devel/gmake
+ * sysutils/pciutils
+
 To compile on Linux, use:
 
  make
@@ -76,6 +81,10 @@
  ln -s /usr/pkg/include/pciutils pci
  gmake CPPFLAGS=-I. LDFLAGS="-L/usr/pkg/lib -Wl,-rpath-link,/usr/pkg/lib"
 
+To compile on OpenBSD, use:
+
+ gmake
+
 To compile and run on Darwin/Mac OS X:
 
  Install DirectIO from coresystems GmbH.


-- 
http://www.hailfinger.org/





More information about the flashrom mailing list