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 [2016/02/06 12:34]
lionelsambuc fixed an incorrect path in an example
developersguide:driverprogramming [2022/02/07 10:41]
dcvmoole Rearrange order of instructions (suggestion by jinnjus)
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 ​//​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 **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>
-# service up /​service/​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 :-) 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>
-# service down hello+#minix-service down hello
 </​code>​ </​code>​
 We received another message as well from the so-called //​Reincarnation Server// (RS). In Minix as a [[http://​en.wikipedia.org/​wiki/​Microkernel|microkernel]],​ device drivers are separate programs which send and receive message to communicate with the other operating system components. Device drivers, like any other program, may contain bugs and could crash at any point in time. The Reincarnation server will attempt to restart device drivers when it notices they are abruptly killed by the kernel due to a crash, or in our case when they exit(2) unexpectedly. You can see the Reincarnation Server in the process list as **rs**, if you use the **ps(1)** command. The Reincarnation Server sends keep-a-live messages to each running device driver on the system periodically,​ to ensure they are still responsible and not i.e. stuck in an infinite loop. We received another message as well from the so-called //​Reincarnation Server// (RS). In Minix as a [[http://​en.wikipedia.org/​wiki/​Microkernel|microkernel]],​ device drivers are separate programs which send and receive message to communicate with the other operating system components. Device drivers, like any other program, may contain bugs and could crash at any point in time. The Reincarnation server will attempt to restart device drivers when it notices they are abruptly killed by the kernel due to a crash, or in our case when they exit(2) unexpectedly. You can see the Reincarnation Server in the process list as **rs**, if you use the **ps(1)** command. The Reincarnation Server sends keep-a-live messages to each running device driver on the system periodically,​ to ensure they are still responsible and not i.e. stuck in an infinite loop.
developersguide/driverprogramming.txt · Last modified: 2022/02/10 14:58 by stux