Compile and link the driver. Use the -D_KERNEL option to indicate that this code defines a kernel module. The following example shows compiling and linking for a 32-bit architecture using the Oracle Solaris Studio C compiler:
% cc -D_KERNEL -c qotd_1.c % ld -r -o qotd_1 qotd_1.o |
Note that the name of the driver, qotd_1, must match the name property in the configuration file.
Make sure you are user root when you install the driver.
Copy the driver binary to the /tmp directory as discussed in Device Driver Testing Tips.
# cp qotd_1 /tmp # ln -s /tmp/qotd_1 /usr/kernel/drv/qotd_1 |
Copy the configuration file to the kernel driver area of the system.
# cp qotd_1.conf /usr/kernel/drv |
This qotd_1 driver writes a message to a system log each time the driver is loaded. The cmn_err(9F) function writes low priority messages such as the message defined in this qotd_1 driver to /dev/log. The syslogd(1M) daemon reads messages from /dev/log and writes low priority messages to /var/adm/messages.
To test this driver, watch for the message in /var/adm/messages. In a separate window, enter the following command:
% tail -f /var/adm/messages |
Make sure you are user root when you load the driver. Use the add_drv(1M) command to load the driver:
# add_drv qotd_1 |
You should see the following messages in the window where you are viewing /var/adm/messages:
date time machine pseudo: [ID 129642 kern.info] pseudo-device: devinfo0 date time machine genunix: [ID 936769 kern.info] devinfo0 is /pseudo/devinfo@0 date time machine qotd: [ID 197678 kern.notice] QOTD_1: Be careful about reading health books. You may die of a misprint. - Mark Twain |
This last line is the content of the variable output by the cmn_err(9F) function in the _init(9E) entry point. The _init(9E) entry point is called when the driver is loaded.