35 lines
1.8 KiB
Text
35 lines
1.8 KiB
Text
This is Task 15 of the Eudyptula Challenge
|
|
------------------------------------------
|
|
|
|
That process task turned out to not be all that complex, but digging
|
|
through the core kernel was a tough task, nice work with that.
|
|
|
|
Speaking of "core kernel" tasks, let's do another one. It's one of the
|
|
most common undergraduate tasks there is: create a new syscall!
|
|
Yeah, loads of fun, but it's good to know the basics of how to do this,
|
|
and, how to call it from userspace.
|
|
|
|
For this task:
|
|
- Add a new syscall to the kernel called "sys_eudyptula", so this is
|
|
all going to be changes to the kernel tree itself, no stand-alone
|
|
module needed for this task (unless you want to do it that way
|
|
without hacking around the syscall table, if so, bonus points for
|
|
you...)
|
|
- The syscall number needs to be the next syscall number for the
|
|
architecture you test it on (some of you all are doing this on ARM
|
|
systems, showoffs, and syscall numbers are not the same across all
|
|
architectures). Document the arch you are using and why you picked
|
|
this number in the module.
|
|
- The syscall should take two parameters: int high_id, int low_id.
|
|
- The syscall will take the two values, mush them together into one
|
|
64bit value (low_id being the lower 32bits of the id, high_id being
|
|
the upper 32bits of the id).
|
|
- If the id value matches your id (which of course you know as
|
|
"[redacted]", then the syscall returns success. Otherwise it
|
|
returns a return code signifying an invalid value was passed to it.
|
|
- Write a userspace C program that calls the syscall and properly
|
|
exercises it (valid and invalid calls need to be made).
|
|
- "Proof" of running the code needs to be provided.
|
|
|
|
So you need to send in a .c userspace program, a kernel patch, and
|
|
"proof" that it all works, as a response.
|