Add descriptions of tasks 1 to 5
This commit is contained in:
parent
f4d2f478cd
commit
1f0b38399f
|
@ -0,0 +1,22 @@
|
||||||
|
This is Task 01 of the Eudyptula Challenge
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
Write a Linux kernel module, and stand-alone Makefile, that when loaded
|
||||||
|
prints to the kernel debug log level, "Hello World!" Be sure to make
|
||||||
|
the module able to be unloaded as well.
|
||||||
|
|
||||||
|
The Makefile should be able to build the kernel module against the
|
||||||
|
source of the currently-running kernel as well as being able to accept
|
||||||
|
an arbitrary kernel sources directory from an environment variable.
|
||||||
|
|
||||||
|
Please show proof of this module being built, and running, in your
|
||||||
|
kernel. What this proof is is up to you. I'm sure you can come up with
|
||||||
|
something. Also be sure to send the kernel module you wrote, along with
|
||||||
|
the Makefile you created to build the module.
|
||||||
|
|
||||||
|
Remember to use your ID assigned in the Subject: line when responding to
|
||||||
|
this task, so that I can figure out who to attribute it to. You can
|
||||||
|
just respond to the task with the answers and all should be fine.
|
||||||
|
|
||||||
|
If you forgot, your id is "[redacted]". But of course you have not
|
||||||
|
forgotten that yet, you are better than that.
|
|
@ -0,0 +1,41 @@
|
||||||
|
This is Task 02 of the Eudyptula Challenge
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
Now that you have written your first kernel module, it's time to take
|
||||||
|
off the training wheels and move on to building a custom kernel. No
|
||||||
|
more distro kernels for you. For this task you must run your own
|
||||||
|
kernel. And use git! Exciting, isn't it? No? Oh, ok...
|
||||||
|
|
||||||
|
The tasks for this round are:
|
||||||
|
- Download Linus's latest git tree from git.kernel.org (you have to
|
||||||
|
figure out which one is his. It's not that hard, just remember what
|
||||||
|
his last name is and you should be fine.)
|
||||||
|
- Build it, install it, and boot it. You can use whatever kernel
|
||||||
|
configuration options you wish to use, but you must enable
|
||||||
|
CONFIG_LOCALVERSION_AUTO=y.
|
||||||
|
- Show proof of booting this kernel. Bonus points if you do it on a
|
||||||
|
"real" machine, and not a virtual machine (virtual machines are
|
||||||
|
acceptable, but come on, real kernel developers don't mess around
|
||||||
|
with virtual machines, they are too slow. Oh yeah, we aren't real
|
||||||
|
kernel developers just yet. Well, I'm not anyway, I'm just a
|
||||||
|
script...) Again, proof of running this kernel is up to you, I'm
|
||||||
|
sure you can do well.
|
||||||
|
|
||||||
|
Hint, you should look into the 'make localmodconfig' option, and base
|
||||||
|
your kernel configuration on a working distro kernel configuration.
|
||||||
|
Don't sit there and answer all 1625 different kernel configuration
|
||||||
|
options by hand, even I, a foolish script, know better than to do that!
|
||||||
|
|
||||||
|
After doing this, don't throw away that kernel, git tree, and
|
||||||
|
configuration file. You'll be using it for later tasks. A working
|
||||||
|
kernel configuration file is a precious thing, all kernel developers
|
||||||
|
have one they have grown and tended to over the years. This is the
|
||||||
|
start of a long journey with yours. Don't discard it like was a broken
|
||||||
|
umbrella, it deserves better than that.
|
||||||
|
|
||||||
|
Remember to use your ID assigned in the subject line when responding to
|
||||||
|
this task, so that I can figure out who to attribute it to.
|
||||||
|
|
||||||
|
If you forgot, your id is "[redacted]". But why do I repeat myself?
|
||||||
|
Of course you know your id, you made it through the first task just fine
|
||||||
|
with it.
|
|
@ -0,0 +1,25 @@
|
||||||
|
This is Task 03 of the Eudyptula Challenge
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
Now that you have your custom kernel up and running, it's time to modify
|
||||||
|
it!
|
||||||
|
|
||||||
|
The tasks for this round are:
|
||||||
|
- Take the kernel git tree from Task 02 and change the Makefile to
|
||||||
|
modify the EXTRAVERSION field. Do this in a way that the
|
||||||
|
running kernel (after modifying the Makefile, rebuilding, and
|
||||||
|
rebooting) has the characters "-eudyptula" in the version string.
|
||||||
|
- Show proof of booting this kernel. Extra cookies when you provide
|
||||||
|
creative examples, especially if done in interpretive dance at your
|
||||||
|
local pub.
|
||||||
|
- Send a patch that shows the Makefile modified. Do this in a manner
|
||||||
|
that would be acceptable for merging in the kernel source tree.
|
||||||
|
(Hint, read the file Documentation/SubmittingPatches and follow the
|
||||||
|
steps there.)
|
||||||
|
|
||||||
|
Remember to use your ID assigned in the subject line when responding to
|
||||||
|
this task, so that I can figure out who to attribute it to.
|
||||||
|
|
||||||
|
If you forgot, your id is "[redacted]". Surely I don't need to keep
|
||||||
|
saying this right? I know, _you_ wouldn't forget, but someone else, of
|
||||||
|
course they would, so I'll just leave it here for those "others."
|
|
@ -0,0 +1,53 @@
|
||||||
|
This is Task 04 of the Eudyptula Challenge
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
Wonderful job in making it this far. I hope you have been having fun.
|
||||||
|
Oh, you're getting bored, just booting and installing kernels? Well,
|
||||||
|
time for some pedantic things to make you feel that those kernel builds
|
||||||
|
are actually fun!
|
||||||
|
|
||||||
|
Part of the job of being a kernel developer is recognizing the proper
|
||||||
|
Linux kernel coding style. The full description of this coding style
|
||||||
|
can be found in the kernel itself, in the Documentation/CodingStyle
|
||||||
|
file. I'd recommend going and reading that right now. It's pretty
|
||||||
|
simple stuff, and something that you are going to need to know and
|
||||||
|
understand. There is also a tool in the kernel source tree in the
|
||||||
|
scripts/ directory called checkpatch.pl that can be used to test for
|
||||||
|
adhering to the coding style rules, as kernel programmers are lazy and
|
||||||
|
prefer to let scripts do their work for them...
|
||||||
|
|
||||||
|
Why a coding standard at all? Because of your brain (yes, yours, not
|
||||||
|
mine, remember, I'm just some dumb shell scripts). Once your brain
|
||||||
|
learns the patterns, the information contained really starts to sink in
|
||||||
|
better. So it's important that everyone follow the same standard so
|
||||||
|
that the patterns become consistent. In other words, you want to make
|
||||||
|
it really easy for other people to find the bugs in your code, and not
|
||||||
|
be confused and distracted by the fact that you happen to prefer 5
|
||||||
|
spaces instead of tabs for indentation. Of course you would never
|
||||||
|
prefer such a thing, I'd never accuse you of that, it was just an
|
||||||
|
example, please forgive my impertinence!
|
||||||
|
|
||||||
|
Anyway, the tasks for this round all deal with the Linux kernel coding
|
||||||
|
style. Attached to this message are is one kernel module that does not
|
||||||
|
follow the proper Linux kernel coding style rules. Fix this file up,
|
||||||
|
AND fix up the final submission you did for Task 01, and send them back
|
||||||
|
to me as attachments in your response email.
|
||||||
|
|
||||||
|
Yes, the logic in attached second module is crazy, and probably wrong,
|
||||||
|
but don't focus on that, just look at the patterns here, and fix up the
|
||||||
|
coding style, do not remove lines of code.
|
||||||
|
|
||||||
|
Oh, and before you think "Ah, but I got the coding style right for Task
|
||||||
|
01, I already know this stuff!", remember that so far only 10 people,
|
||||||
|
out of over 4000, have gotten the coding style exactly right for their
|
||||||
|
Task 01 module. Yes, you could be one of those people, but the odds are
|
||||||
|
not in your favor. You should look at it again just to be sure.
|
||||||
|
|
||||||
|
So again, attach 2 files, this one fixed up, and your Task 01
|
||||||
|
submission. Don't use base64 either, the scripts will instantly reject
|
||||||
|
it, you don't want to get on their bad side.
|
||||||
|
|
||||||
|
As always, please remember to use your ID in the subject line when
|
||||||
|
responding to this task, so that I can figure out who to attribute it
|
||||||
|
to. And if you forgot (which of course you have not, we've been through
|
||||||
|
all of this before), your id is "[redacted]".
|
|
@ -0,0 +1,20 @@
|
||||||
|
This is Task 05 of the Eudyptula Challenge
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
Yeah, you survived the coding style mess! Now, on to some "real"
|
||||||
|
things, as I know you are getting bored by these so far.
|
||||||
|
|
||||||
|
So, two simple tasks this time around:
|
||||||
|
- Take the kernel module you wrote for task 01, and modify it so that
|
||||||
|
when any USB keyboard is plugged in, the module will be
|
||||||
|
automatically loaded by the correct userspace hotplug tools (which
|
||||||
|
are implemented by depmod / kmod / udev / mdev / systemd, depending
|
||||||
|
on what distro you are using.)
|
||||||
|
- Again, provide "proof" this all works.
|
||||||
|
|
||||||
|
Yes, so simple, and yet, it's a bit tricky. As a hint, go read chapter
|
||||||
|
14 of the book, "Linux Device Drivers, 3rd edition." Don't worry, it's
|
||||||
|
free, and online, no need to go buy anything.
|
||||||
|
|
||||||
|
As always, please remember to use your ID, yadda yadda yadda...
|
||||||
|
It's "[redacted]" of course.
|
Loading…
Reference in New Issue