This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
developersguide:driverprogramming [2017/05/24 20:54] e_szabados service is now called minix-service, module messages are written to system log. |
developersguide:driverprogramming [2022/02/10 14:58] (current) stux add mknod /dev/time c 18 0 |
||
|---|---|---|---|
| Line 59: | Line 59: | ||
| } | } | ||
| </code> | </code> | ||
| - | Ignore the sef_startup() call for now. We'll explain its purpose later. Now try to see if everything compiles correctly: | + | Ignore the sef_startup() call for now. We'll explain its purpose later. |
| - | <code bash> | + | In addition, we must create a //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: |
| - | # make clean | + | |
| - | # make | + | |
| - | # make install | + | |
| - | </code> | + | |
| - | 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: | + | |
| //hello.conf//: | //hello.conf//: | ||
| Line 85: | Line 80: | ||
| }; | }; | ||
| </code> | </code> | ||
| - | Starting, stopping and restarting device drivers must be done using the **minix-service(8)** command. To start the hello program, enter the following command: | + | Now try to see if everything compiles correctly: |
| + | |||
| + | <code bash> | ||
| + | # make clean | ||
| + | # make | ||
| + | # make install | ||
| + | </code> | ||
| + | If you did not receive any errors, it is time to try and run the device driver. Starting, stopping and restarting device drivers must be done using the **minix-service(8)** command. To start the hello program, enter the following command: | ||
| <code bash> | <code bash> | ||
| Line 300: | Line 302: | ||
| Finally, the //main()// function executes //chardriver_task()// to let //libchardriver// start processing user requests and invoke our driver callback functions. | Finally, the //main()// function executes //chardriver_task()// to let //libchardriver// start processing user requests and invoke our driver callback functions. | ||
| - | Now compile the program again using the same commands as in example 1, and start the driver with the **service(8)** command. We supply ''-dev /dev/hello'' to indicate that the newly started driver is responsible for the major device identified by /dev/hello - namely, major 17, which we picked earlier. | + | Now compile the program again using the same commands as in example 1, and start the driver with the **minix-service(8)** command. We supply ''-dev /dev/hello'' to indicate that the newly started driver is responsible for the major device identified by /dev/hello - namely, major 17, which we picked earlier. |
| <code bash> | <code bash> | ||
| - | # service up /usr/sbin/hello -dev /dev/hello | + | # minix-service up /service/hello -dev /dev/hello |
| Hello, World! | Hello, World! | ||
| </code> | </code> | ||
| Line 321: | Line 323: | ||
| If you get the message above, the hello driver works!** :D ** | If you get the message above, the hello driver works!** :D ** | ||
| - | Now let's try to restart the driver with the **service(8)** command to simulate a failure: | + | Now let's try to restart the driver with the **minix-service(8)** command to simulate a failure: |
| <code bash> | <code bash> | ||
| - | # service refresh hello | + | # minix-service refresh hello |
| Hello, World! | Hello, World! | ||
| Hey, I've just been restarted! | Hey, I've just been restarted! | ||
| Line 348: | Line 350: | ||
| #endif /* __HELLO_H */ | #endif /* __HELLO_H */ | ||
| </code> | </code> | ||
| - | Now recompile it and update the driver with the **service(8)** command: | + | Now recompile it and update the driver with the **minix-service(8)** command: |
| <code bash> | <code bash> | ||
| Line 354: | Line 356: | ||
| # make | # make | ||
| # make install | # make install | ||
| - | # service update /service/hello -state 1 # request an update state where no work is in progress (i.e. SEF_LU_STATE_WORK_FREE=1) | + | # minix-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 439: | Line 441: | ||
| struct chardriver time_tab = | struct chardriver time_tab = | ||
| { | { | ||
| - | *cdr_open = time_open, | + | .cdr_open = time_open, |
| - | *cdr_close = time_close, | + | .cdr_close = time_close, |
| - | *cdr_read = time_read, | + | .cdr_read = time_read, |
| }; | }; | ||
| Line 621: | Line 623: | ||
| install /service/time | install /service/time | ||
| install /etc/system.conf.d/time | install /etc/system.conf.d/time | ||
| - | # service up /service/time -dev /dev/time | + | # mknod /dev/time c 18 0 |
| + | # minix-service up /service/time -dev /dev/time | ||
| # cat /dev/time | # cat /dev/time | ||
| 2014-09-10 15:48:21 | 2014-09-10 15:48:21 | ||