Add Task 12 description
This commit is contained in:
parent
7925d3b689
commit
08a29693a2
|
@ -0,0 +1,71 @@
|
|||
This is Task 12 of the Eudyptula Challenge
|
||||
------------------------------------------
|
||||
|
||||
Nice job with the driver patch. That took some work in finding the
|
||||
proper place to modify, and demonstrates a great skill in tracking down
|
||||
issues when you can't get a specific piece of hardware working.
|
||||
|
||||
Now let's step back from drivers (they are boring things), and focus on
|
||||
the kernel core. To do that, we need to go way back to the basics --
|
||||
stuff you would learn in your "intro to data structures" class, if you
|
||||
happened to take one.
|
||||
|
||||
Yes, I'm talking about linked lists.
|
||||
|
||||
The kernel has a unique way of creating and handling linked lists, that
|
||||
is quite different than the "textbook" way of doing so. But, it turns
|
||||
out to be faster, and simpler, than a "textbook" would describe, so
|
||||
that's a good thing.
|
||||
|
||||
For this task, write a kernel module, based on your cleaned up one from
|
||||
task 04, that does the following:
|
||||
- You have a structure that has 3 fields:
|
||||
char name[20];
|
||||
int id;
|
||||
bool busy;
|
||||
name this structure "identity".
|
||||
- Your module has a static variable that points to a list of these
|
||||
"identity" structures.
|
||||
- Write a function that looks like:
|
||||
int identity_create(char *name, int id)
|
||||
that creates the structure "identity", copies in the 'name' and 'id'
|
||||
fields and sets 'busy' to false. Proper error checking for out of
|
||||
memory issues is required. Return 0 if everything went ok; an error
|
||||
value if something went wrong.
|
||||
- Write a function that looks like:
|
||||
struct identity *identity_find(int id);
|
||||
that takes a given id, iterates over the list of all ids, and
|
||||
returns the proper 'struct identity' associated with it. If the
|
||||
identity is not found, return NULL.
|
||||
- Write a function that looks like:
|
||||
void identity_destroy(int id);
|
||||
that given an id, finds the proper 'struct identity' and removes it
|
||||
from the system.
|
||||
- Your module_init() function will look much like the following:
|
||||
|
||||
struct identity *temp;
|
||||
|
||||
identity_create("Alice", 1);
|
||||
identity_create("Bob", 2);
|
||||
identity_create("Dave", 3);
|
||||
identity_create("Gena", 10);
|
||||
|
||||
temp = identity_find(3);
|
||||
pr_debug("id 3 = %s\n", temp->name);
|
||||
|
||||
temp = identity_find(42);
|
||||
if (temp == NULL)
|
||||
pr_debug("id 42 not found\n");
|
||||
|
||||
identity_destroy(2);
|
||||
identity_destroy(1);
|
||||
identity_destroy(10);
|
||||
identity_destroy(42);
|
||||
identity_destroy(3);
|
||||
|
||||
Bonus points for properly checking return values of the above
|
||||
functions.
|
||||
|
||||
As always, please send the full module (following the proper kernel
|
||||
coding style rules), and "proof" of it working properly. And remember
|
||||
to use your id of "[redacted]" in the Subject line properly.
|
Loading…
Reference in New Issue