*[[http://tldp.org/LDP/lkmpg/index.html|The Linux Kernel Module Programming Guide]]
!!!Problem Statement
Design and construct a module that implements a clock file in /proc. The file
should support only the file read() operation. When read() is called, it
should return a single ASCII string with two numerical substrings separated by
a single space. For example, it must return a string of the form
(934380108 184263)
if the system time variable, xtime, was set to
[@
xtime.tv_sec = 934380108
xtime.tv_usec = 184263
@]
Also provide an application program that demonstrates your module. As one
particular test of your program, write a tight loop of the following form.
[@
#include <stdio.h>
#include <sys/time.h>
#define N...
struct timeval gtodTimes[N];
char *procClockTimes[N];
...
my_clock = fopen("/proc/...", "r");
for( i = 0; i < N; i++ )
{
gettimeofday(>odTimes[i], 0);
fgets(procClockTime[i], LENGTH, my_clock);
}
for( i = 0; i < N; i++ )
{
printf("...", gtodTimes[i], procClockTime[i]);
}
@]
Use gettimeofday() to determine the apparent resolution of the clock values
that you read and of the values read from the kernel variable. Explain why
gettimeofday() has a much finer resolution that the 10 millisecond time
between timer interrupts.
!!!Attacking the problem
There is no difference in writing a mudule for UML and for normal kernel. The module interface in the 2.4 kernel looks like:
[@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/time.h>
int clock_read(char *buffer,
char **buffer_loc,
off_t offset,
int buffer_length,
int *eof,
void *data)
{
......
}
/* registers with the proc fs. */
int init_func(void)
{
......
create_proc_read_entry("Myclock",
0, /* dafault mode */
NULL, /* parent dir */
clock_read,
NULL); /* client data */
......
}
/* unregisters with the proc fs. */
void exit_func(void)
{
......
remove_proc_entry("Myclock", NULL);
......
}
module_init(init_func);
module_exit(exit_func);
@]
!!!Compiling your module
gcc -c -I${KERNELDIR}/include -D__KERNEL__ -DMODULE Myclock.o
!!!How to submit your assignment
Please submit your module source code, module object, test code, a Makefile, and a README under your "~/Uml/lab3" directory on elgate.