Wintzige Änderung im Kernel ??

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
aro
Beiträge: 68
Registriert: 05.09.2003 08:14:15
Wohnort: bei Lörrach

Wintzige Änderung im Kernel ??

Beitrag von aro » 25.03.2004 15:57:25

Ich habe angefangen mit dem Quellcode zu experimentieren und ich hätte eine ganz ‘anfängerische’ Frage :?:

Ich habe im \net\ipv4\ip_output.c folgendes hinzugefügt:

Code: Alles auswählen

#include <curses.h>

..............................

beep();
Damit will ich zunächst nichts grossartiges erreichen, nur das der PC beept wenn ich eine Webseite aufrufe. Nix anderes, nur scheint das auch zu viel zu sein. Er tut nix :?

Was muss ich noch machen nachdem ich die ip_output.c geändert habe ? Muss ich den Kernel neu kompilieren ? Muss ich was anderes neu kompilieren ? Oder habe ich die beep() Funktion einfach an der falschen Stelle eingesetzt und sie wird nicht aufgerufen ?

Wie ich schon sagte sind das meine ersten Versuche den Kernel zu zerstören (hacken wäre wohl zu viel gesagt) und meine Suche im Internet war nicht erfolgreich.
Danke für jeden Input

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 26.03.2004 00:00:44

Du kannst im Kernel kein Userpace Libs (curses) verwenden. Der Kernel ist kein normales Programm, und das was Du vorhast wird so auf gar keinen Fall funktionieren.

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
aro
Beiträge: 68
Registriert: 05.09.2003 08:14:15
Wohnort: bei Lörrach

Beitrag von aro » 26.03.2004 08:07:13

pdreker hat geschrieben:Du kannst im Kernel kein Userpace Libs (curses) verwenden
Danke. Genau solche Sachen weiss icht noch nicht, und es wird nicht einfach sein die alleine zu lernen. Ich habe aber auch von keinen Linux Kernelprogrammierung Kurse gehört :cry:

Ich habe allerdings einige gute Kernel Bücher und ich müsste damit weiterkommen können, zumal ich das alles aus Spass mache und keinen Druck habe.

tylerD
Beiträge: 4068
Registriert: 10.07.2002 17:34:13
Wohnort: Halle/Saale
Kontaktdaten:

Beitrag von tylerD » 26.03.2004 09:26:02

aro hat geschrieben:
Danke. Genau solche Sachen weiss icht noch nicht, und es wird nicht einfach sein die alleine zu lernen. Ich habe aber auch von keinen Linux Kernelprogrammierung Kurse gehört :cry:

Ich habe allerdings einige gute Kernel Bücher und ich müsste damit weiterkommen können, zumal ich das alles aus Spass mache und keinen Druck habe.
Vielleicht hilft dir ja [1] weiter. Aber viellicht solltest du dir erst mal andere Projekte für Programmierenübungen aussuchen. Kann mir vorstellen, das gerade der Kernel nicht unbedingt Einsteigerfreundlich ist und man recht wenig wirkliche Erfolgserlebnisse (positive Rückmeldungen) hat.

cu


[1] http://www.kernelhacking.org/

Benutzeravatar
aro
Beiträge: 68
Registriert: 05.09.2003 08:14:15
Wohnort: bei Lörrach

Beitrag von aro » 26.03.2004 09:41:39

@tylerD

Du hast vollkommen Recht. Kernelprogrammierung ist nicht unbedingt Einsteigerfreundlich :) Ich will jetzt auch nicht den Kernel weiterentwickeln. Ich kenne meine Grenzen.

Ich habe nur damit angefangen mir den TCP Stack im Kernel anzuschauen. Die Grundlagen der TCP Funktionalität im Kernel kenne ich, C kann ich, nun will ich herausfinden wie der TCP Stack wirklich arbeitet. Ich habe mir gedacht ich fange an mit dem TCP Quellcode zu experimentieren. Nicht blind, ich habe schon Bücher dafür.

Ich weiss nicht ob das der beste Weg ist, für mich ist es aber viel spannender, auch wenn ich den Kernel ab und zu unabsichtlich platt mache.


Noch eine Frage. Wenn ich eine richtige Funktion (Kernel Space) einbauen würde (was für welche weiss ich noch nicht, vielleicht Logdatei Ausgabe), müsste ich den Kernel neu kompilieren ? Oder würde es reichen wenn ich die .c Datei modifiziere ? Besten Dank

Benutzeravatar
Räuber Hotzenplotz
Beiträge: 156
Registriert: 12.03.2004 14:47:25
Wohnort: Berlin

Beitrag von Räuber Hotzenplotz » 26.03.2004 09:54:56

Hi aro,

ich denke, Du kannst C programmieren??? Dann solltest Du doch auch wissen, dass Du ein Programm auch kompilieren mußt, bevor Du es starten kannst. Und in Deinem Fall mußt Du den Kernel neu übersetzten und Dein System neu starten. Es sei denn, Du kompilierst den Part als Modul, dann sollte es reichen, wenn Du nur das Modul neu lädst.

ciao,
Hotze

Benutzeravatar
aro
Beiträge: 68
Registriert: 05.09.2003 08:14:15
Wohnort: bei Lörrach

Beitrag von aro » 26.03.2004 10:17:26

Danke, Räuber Hotzenplotz. Ich habe diese Frage gestellt weil ich nicht irgendein Programm schreibe. Ich finde, dass zwischen einem normalen C Programm und Kernelprogrammierung schon ein Unterschied besteht... Ich habe schon vermutet, dass man einiges neu komplilieren muss, wusste aber nicht ob man den Kernel neu kompiliert. Ich entschuldige mich für meine Unwissenheit.

Auf jeden Fall, nochmals danke für
Räuber Hotzenplotz hat geschrieben: in Deinem Fall mußt Du den Kernel neu übersetzten und Dein System neu starten

Benutzeravatar
jogix
Beiträge: 776
Registriert: 05.10.2002 20:08:16
Wohnort: Lampertheim
Kontaktdaten:

Beitrag von jogix » 26.03.2004 10:17:29

Hi,

wenn Du Kernel hacken willst, kann ich jedenfalls mal ein Buch über Betriebssysteme empfehlen, z.B. "Modern Operating Systems" von Andrew Tanenbaum. Gerade das Buch ist angenehm geschrieben und IMHO saumäßig spannend.
cheers,
Jochen
___________________________________________________
Testing can prove the presence of bugs, but not their absence. -- Dijkstra

Benutzeravatar
aro
Beiträge: 68
Registriert: 05.09.2003 08:14:15
Wohnort: bei Lörrach

Beitrag von aro » 26.03.2004 10:20:29

jogix hat geschrieben:Hi,

wenn Du Kernel hacken willst, kann ich jedenfalls mal ein Buch über Betriebssysteme empfehlen, z.B. "Modern Operating Systems" von Andrew Tanenbaum. Gerade das Buch ist angenehm geschrieben und IMHO saumäßig spannend.
Ich habe mir lange überlegt ob ich dieses Buch kaufen soll. Ich werde es tun :)

Benutzeravatar
jogix
Beiträge: 776
Registriert: 05.10.2002 20:08:16
Wohnort: Lampertheim
Kontaktdaten:

Beitrag von jogix » 26.03.2004 10:21:40

aro hat geschrieben:Danke, Räuber Hotzenplotz. Ich habe diese Frage gestellt weil ich nicht irgendein Programm schreibe. Ich finde, dass zwischen einem normalen C Programm und Kernelprogrammierung schon ein Unterschied besteht... Ich habe schon vermutet, dass man einiges neu komplilieren muss, wusste aber nicht ob man den Kernel neu kompiliert. Ich entschuldige mich für meine Unwissenheit.
Nö, im ersten Moment besteht zwischen Kernel und Application erstmal gar kein Unterschied. Was aber gleich auffällt, wenn man einen Kernel schreibt ist, daß einem keine Bibliotheken zur Verfügung stehen, insbesondere kein malloc , free bzw. new, delete.
Sobald man einen Pager zur Speicherverarbeitung geschrieben hat, kann man mit einer kleinen Kernellib beginnen, die einem den einfachen Zugriff auf die Speicheroperationen zur Verfügung stellt. Von da aus kann man dann weitere Funktionalitäten umsetzen und das dann zur Weiterentwicklung im Kernel nutzen. Ob es jedoch so viel Sinn macht, den Kernel mit einer fetten Lib zu implementieren..... 8O
cheers,
Jochen
___________________________________________________
Testing can prove the presence of bugs, but not their absence. -- Dijkstra

Antworten