aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryan Brattlof <hello@bryanbrattlof.com>2020-07-15 16:30:03 -0400
committerBryan Brattlof <hello@bryanbrattlof.com>2020-07-15 16:30:03 -0400
commit4f27198d12f7efb3514277c8ac3d3cf1ceb7a56d (patch)
tree4de24b7d56b2f65d3ab357c4a2e51f1c76c325be
parentffb738163d21ad1fe339256cdcffc295d51a83ff (diff)
downloadeudyptula-challenge-4f27198d12f7efb3514277c8ac3d3cf1ceb7a56d.tar.gz
eudyptula-challenge-4f27198d12f7efb3514277c8ac3d3cf1ceb7a56d.tar.bz2
task 15: add task readme
-rw-r--r--readme.rst4
-rw-r--r--tasks/15/readme42
2 files changed, 45 insertions, 1 deletions
diff --git a/readme.rst b/readme.rst
index 2058fba..ac6afd4 100644
--- a/readme.rst
+++ b/readme.rst
@@ -39,4 +39,6 @@ Here are the links to each task's readme:
13. Optimizing Linked Lists: `task <https://git.bryanbrattlof.com/eudyptula-challenge/tree/tasks/13/readme>`__
-14. Process Task: `task <https://git.bryanbrattlof.com/eudyptula-challenge/tree/tasks/13/readme>`__
+14. Process Task: `task <https://git.bryanbrattlof.com/eudyptula-challenge/tree/tasks/14/readme>`__
+
+15. Create a syscall: `task <https://git.bryanbrattlof.com/eudyptula-challenge/tree/tasks/15/readme>`__
diff --git a/tasks/15/readme b/tasks/15/readme
new file mode 100644
index 0000000..aaa5a1e
--- /dev/null
+++ b/tasks/15/readme
@@ -0,0 +1,42 @@
+Task 15
+=======
+
+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
+ "7c1caf2f50d1", 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. \ No newline at end of file