Ein Kernel muss mindestens die Speicherverwaltung machen, weil ein Programmstart nicht ohne einen vorher gefertigten descriptor sein kann.
Ansonsten ist sehr beliebig, was man draufpackt, aber natürlich muss ein bisschen I/O gleich sein können - also Tastatur, FD, IDE-HD.
Du solltest aber an einen eigenen Kernel nur denken, wenn Du sehr spezielle Sachen machen willst, die Du auf keinem anderen Weg lösen kannst!
Ansonsten schau Dich nach Beispielen um - gleich zwei (das eine brandneu) findest Du auf meiner homepage:
www.rcfriz.de