User Tools

Site Tools


developersguide:driverprogramming

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
developersguide:driverprogramming [2015/10/26 12:39]
dcvmoole [Example 2: /dev/hello] sync with actual source
developersguide:driverprogramming [2016/02/06 12:34]
lionelsambuc fixed an incorrect path in an example
Line 10: Line 10:
 The following sections contain step-by-step instructions to try out programming simple device drivers. The following sections contain step-by-step instructions to try out programming simple device drivers.
  
-Please note that while this page may be slightly outdated, an up-to-date version of the hello driver is part of the MINIX3 source tree. You can find it in /​usr/​src/​minix/​drivers/​examples/​hello. The rest of this document will assume that the driver is not yet there, and will take you through the steps to create the driver yourself. Example 1 shows how to set up the infrastructure and create a very basic working driver process. Example 2 extends it into a simple character driver. The MINIX3 source tree's hello.c corresponds to the second example.+**Please note that while this page may be slightly outdated, an up-to-date version of the hello driver is part of the MINIX3 source tree.** You can find it in /​usr/​src/​minix/​drivers/​examples/​hello. The rest of this document will assume that the driver is not yet there, and will take you through the steps to create the driver yourself. Example 1 shows how to set up the infrastructure and create a very basic working driver process. Example 2 extends it into a simple character driver. The MINIX3 source tree's hello.c corresponds to the second example.
  
 ==== Example 1: Hello, World ==== ==== Example 1: Hello, World ====
Line 30: Line 30:
 PROG=   hello PROG=   hello
 SRCS=   ​hello.c SRCS=   ​hello.c
 +
 +FILES=${PROG}.conf
 +FILESNAME=${PROG}
 +FILESDIR= /​etc/​system.conf.d
  
 DPADD+= ${LIBCHARDRIVER} ${LIBSYS} DPADD+= ${LIBCHARDRIVER} ${LIBSYS}
Line 62: Line 66:
 # make install # make install
 </​code>​ </​code>​
-If you did not receive any errors, it is time to try and run the device driver. Before we do that, we must modify ​the ///etc/system.conf// file. It contains ​a list of all system services (servers and drivers) and their permissions. Each device driver typically only needs to access one real hardware device, and uses a few functions provided by Minix. To give our simple hello try-out driver enough permissions to experiment with, append the following to ///etc/system.conf//:+If you did not receive any errors, it is time to try and run the device driver. Before we do that, we must create ​the //hello.conf// file. It contains ​the permissions ​for the service. Each device driver typically only needs to access one real hardware device, and uses a few functions provided by Minix. To give our simple hello try-out driver enough permissions to experiment with, create ​//hello.conf// ​with:
  
-///etc/system.conf//:+//hello.conf//:
  
 <​code>​ <​code>​
Line 350: Line 354:
 # make # make
 # make install # make install
-# service update /usr/sbin/hello -state 1    # request an update state where no work is in progress (i.e. SEF_LU_STATE_WORK_FREE=1)+# service update /service/hello -state 1    # request an update state where no work is in progress (i.e. SEF_LU_STATE_WORK_FREE=1)
 Hello, New World! Hello, New World!
 Hey, I'm a new version! Hey, I'm a new version!
Line 575: Line 579:
 SRCS=   ​time.c SRCS=   ​time.c
  
-FILES=$(PROG).conf +FILES=${PROG}.conf 
-FILESNAME=$(PROG)+FILESNAME=${PROG}
 FILESDIR=/​etc/​system.conf.d FILESDIR=/​etc/​system.conf.d
  
 DPADD+= ${LIBCHARDRIVER} ${LIBSYS} DPADD+= ${LIBCHARDRIVER} ${LIBSYS}
 LDADD+= -lchardriver -lsys LDADD+= -lchardriver -lsys
- 
- 
  
 .include <​minix.service.mk>​ .include <​minix.service.mk>​
 </​code>​ </​code>​
  
-Now we need to give the new time device driver access to the CMOS ports 0x70 and 0x71 using the time.conf file mentioned in the Makefile. Putting it in /​etc/​system.d/​ lets service read it. This is the contents:+Now we need to give the new time device driver access to the CMOS ports 0x70 and 0x71 using the //time.conf// file mentioned in the Makefile. Putting it in /​etc/​system.d/​ lets service read it. This is the contents:
  
 <​code>​ <​code>​
developersguide/driverprogramming.txt · Last modified: 2022/02/10 14:58 by stux