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 22:16] e_szabados Added required option to specify device node. |
developersguide:driverprogramming [2022/02/10 14:58] 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> | ||
- | #minix-service up /service/hello -dev /dev/hello | + | #minix-service up /service/hello |
Hello, World! | Hello, World! | ||
RS: restarting /service/hello, restarts 0 | RS: restarting /service/hello, restarts 0 | ||
</code> | </code> | ||
- | And what a surprise, it displays the //Hello, World!// message :-). If you are working in the terminal, the message appears in the console and in the kernel log as well. If you work in an X terminal, the message may appear only in the kernel log. Check by dumping the contents of /var/log/messages. Stop the driver with: | + | And what a surprise, it displays the //Hello, World!// message :-) in the kernel log. Check with writing the contents of /var/log/messages. Stop the driver with: |
<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 |