Ticking away the moments…
Once the basics of a driver are in place, we can continue to add more features. This week, we’ll add a bit of code that has the LED blinking on a timer. From HW 3, you should already have the LED control connected to the cdev callbacks, so most of the work is already done. Here, the aim is to have a driver that blinks the LED as long as some user process has the control file open.
Kicking around…
Here are your requirements:
- a) When the driver loads, it creates the /dev/ece_led character device file (no mknod this time) and prints to the logfile that says it was loaded. It also checks for a module parameter blink_rate that gives a new default blinks-per-second rate, otherwise it has a default of 2.
- b) When a user program opens the device file, LED0 starts to blink on a 50% duty cycle at the given rate per second. This blink should be controlled by a timer object.
- c) If a new value is written to the module parameter by writing into the parameter entry in /sys/module/<driver_name>/parameter/blink_rate, the blink rate will change.
- d) If the user program reads the file it should be given the current blink rate integer.
- e) If a positive integer is written to the file, the driver should use that value as the new blink rate, just the same as in (c).
- f) If the data written is not a positive integer, the write callback should return the error EINVAL. Also, make sure nothing bad happens if the program writes a 0.



