Archiv für die 'Linux und Unix' Kategorie

GoogleCL unter Fedora 13

Ich habe mir mal die GoogleCL Tools runtergeladen und unter der Fedora 13 installiert.

Als erstes erst mal die Abhängigkeiten studiert. Okay, wir brauchen die Python-Gdata-Bibliothek. Also

sudo yum install python-gdata

aufgerufen. Die Version, die bei der Fedora 13 dabei ist (2.0.9), passt. Danach das googlecl-0.9.7.tar.gz entpackt und in dem neu entstandenen Verzeichnis beherzt

sudo python setup.py install

aufgerufen. Nach ein paar Sekunden ist auch alles schon vorbei. Jetzt haben wir die GoogleCL Tools auch schon installiert. Ein kleiner Test mit

google contacts list

zeigt uns, das unter $HOME/.googlecl/ eine config Datei erzeugt wurde. Dort könnt ihr unter [global] euren Google Usernamen eintragen: user = euerusername. Damit erspart ihr euch das jeweilige angeben des Usernamens beim Aufruf der Tools. Beim ersten Aufruf eines der angebotenen Service (contacts, picasa usw.) wird euer Browser gestartet, um eine Authentifizierung durchzuführen. Ihr findet danach unter $HOME/.googlecl/ eine Datei mit dem Access Token für genau den Service, den ihr gerade das erste Mal aufgerufen habt. Beachtet, das diese Prozedur bei jedem erstmaligen Aufruf eines Services stattfindet.

Fazit: Ich finde diese CommandLine-Tools genial. Jetzt kann ich aus Scripts heraus schnell und unproblematisch auf von mir genutzte Dienste zugreifen. Zwei Szenarien fallen mir jetzt schon ein: automatische Synchronisation meiner E-Mail Adresse aus mutt heraus und vim nutzen, um einmal am Tag mein diary zu synchronisieren. Schon jemand ein Script fertig? ;-)

Nachtrag: Seit ein paar Tagen gibt’s die aktuellen GoogleCL Tools auch als fertiges RPM in updates für Fedora 13. Also einfach

sudo yum install googlecl

aufgerufen und gut ist.

Erstellt am Freitag 25. Juni 2010
Unter: Fedora, Linux und Unix, Programmieren, Tools | Keine Kommentare »

MongoDB und Fedora 13

NoSQL ist ja zur Zeit in aller Munde. So habe ich mich mal umgeschaut, und will mich in Zukunft ein wenig mit MongoDB befassen. Und da es für MongoDB für fast alle Mainstream Programmiersprachen einen Treiber gibt, lohnt sich der Blick, aus meiner Sicht, auf jeden Fall.

Als erstes steht allerdings  erst einmal eine Installation auf meiner Fedora 13 Workstation an. Es gibt auf den Download-Seiten des Projekts fertige, generische Binaries und auch RPMs für Fedora/CentOS, jedoch für Fedora nur 11/12 und auch nur als x86_64. Also heißt die Devise: selber bauen. Da ich diese Schritte auch für Fedora Neulinge nachvollziebar halten will, fange ich wirklich ganz von Vorne an. Alles was hier beschrieben steht, außer die Installationen mit yum, wird als normaler $User ausgeführt.

1. Mit

yum install rpm-build rpmdevtools auto-buildrequires

werden die nötigen Tools, und deren Abhängigkeiten, installiert. Diese sind grundlegend für das Bauen der RPM-Pakete. Des weiteren installiert ihr mit

yum install gcc-c++ cons js-devel readline-devel boost-devel pcre-devel

alle anderen, für den Build der MongoDB RPMs, benötigten Sachen.

2. Mit einem beherzten Aufruf von rpmdev-setuptree erzeugt ihr die nötige Ordnerstruktur. Danach solltete ihr in $HOME folgendes vorfinden:

  • rpmbuild/BUILD
  • rpmbuild/RPMS
  • rpmbuild/SOURCES
  • rpmbuild/SPECS
  • rpmbuil/SRPMS

3. Ihr entpackt das runtergeladene tar.gz Archiv von MongoDB und sucht dort nach einem rpm-Ordner. In diesem befindet sich eine mongo.spec Datei. Kopiert die mongo.spec in den SPECS Ordner. Das Verzeichnis des entpackten Archivs benennt ihr nun einfach von mongodb-src-r${Version} in mongo-${Version} um und erzeugt mit diesem Ordner ein neues Archiv, welches dann z.B. mongo-1.4.2.tar.gz heißt. Dies hat mit einigen Kleinigkeiten in der spec-Datei zu tun. Ich werde hier, in den nächsten Tagen, eine überarbeitete Datei zum Download anbieten.

4. Dieses Archiv kopiert ihr nun in den SOURCES Ordner der zuvor erzeugten rmpbuild Umgebung.

5. Wechlselt in den rpmbuild Ordner und gebt jetzt einfach rpmbuild -ba –clean SPECS/mongo.spec ein. Sollte alles richtig installiert sein, beginnt jetzt der übliche configure, make und build Prozess. Es dauert eine Weile, je nachdem wieviel Leistung euer Rechner bietet.

6. Ist der Build-Prozess abgeschlossen, solltet ihr in RPMS/$(eure Architecktur) 4 rpm-Dateien vorfinden, die alle mongo-irgendwas.rpm heißen. Von diesen 4 benötigen wir nur den mongo-server und das mongo Paket. Diese beiden installieren wir nun mit

yum localinstall --nogpgcheck paket1 paket2

Wer an MongoDB selbst entwickeln möchte, oder aber z.B. eine Schnittstelle zu PHP braucht, der sollte auch das devel-Paket installieren.

7. Zum Schluß geben wir als root/sudo noch schnell service mongod start ein und können dann im Browser unsere Vertrauens, unter http://localhost:28017, unsere Installation bewundern.

So, das war’s für’s erste. Jetzt habt ihr unter Fedora 13 eine funktionierende MongoDB Installation am Laufen. Wenn ihr mit PHP entwickelt, reicht nun ein

pecl install mongo

, vorrausgesetzt ihr habt das devel-Paket von MongoDB installiert. Für Java gibt es auch passende JDBC-Treiber auf den Projektseiten.

Erstellt am Donnerstag 10. Juni 2010
Unter: Datenbanken, Fedora, Linux und Unix, MongoDB, Programmieren | 4 Kommentare »

Samsung NC10, Fedora 13 und Netbeans

Wie ich hier schon geschrieben hatte, wurde auf meinem neuen NC10 die aktuelle Fedora 13 ohne Probleme installiert und zum Laufen gebracht. Ich hatte dort auch erwähnt, Netbeans auf dem Kleinen zu testen.

Nachdem ich nun dem Gerät einen 2GB RAM Riegel (Kingston 2 GB DDR2 PC2-5300 CL5 200 Pin So-DIMM) spendiert habe, ging es an die Installation von Netbeans 6.8. Diese lief gewohnt reibungslos durch und nach wenigen Minuten hatte ich dann auch die Anwendung parat. Gut, dank dem N270 Prozessor kann man keinen Geschwindigkeitsrausch erwarten, aber die 2 GB RAM machen sich auf jeden Fall bemerkbar. Ist an sich auch nichts neues bei solch einer IDE.

Fazit: Netbeans läuft annehmbar auf diesem Gerät mit 2 GB RAM unter der Fedora 13. Die Performance ist auch nicht schlechter als auf meinem alten DELL Dimension 8300, und für “auf dem Sofa noch ein bisschen Coden”, während Iron Man läuft reicht es alle Male.

Erstellt am Donnerstag 27. Mai 2010
Unter: Fedora, Mobile, Netbeans | Keine Kommentare »

Fedora 13 auf dem Samsung NC10

Ich habe vor 14 Tagen, im Rahmen einer Vertragsverlängerung bei Vodafone, ein neues Samsung NC10 für 1,00 € erstanden. Schon seit längerem liebäugelte ich mit diesem Kleinod der Rechentechnik. So weit ich im Internet recherchieren konnte, ist es eines der am besten bewerteten Netbooks am Markt.

Ausgestattet ist das Gerät mit allem, was man unterwegs, oder auf der Couch, so braucht. HSPA-Modem, Bluetooth 2.1, 160 GB HD, Intel Atom N270 mit 1,6 GHz, Kartenleser, Atheros WLAN 802.11 b/g, 1,3 MegaPixel Webcam, 10.2″ WSVGA non-glare LED TFT (1024×600), 1 GB RAM und Intel 945GME Express Chipsatz. Das BIOS liegt in Version 11CA vom 09/08/09 vor, und das Gerät wurde laut Typenschild im Januar 2010 produziert. Konkret handelt es sich dabei um das Modell: NP-NC10-HAZ1DE. Ein optisches Laufwerk hat dieses Gerät, wie in dieser Klasse üblich, nicht. Soweit zu der Austattung. Ich will gar nicht weiter auf die Hardware eingehen, das ist hier schon geschehen. Nur soviel sei gesagt: die Tastatur finde ich sehr gut, das Touchpad ist mir persönlich zu klein. Ansonsten gibt es nichts zu beanstanden!

So, nun will ich ja nicht Windows 7 Starter auf dem Objekt meiner Begierde haben, sondern die aktuelle, noch nicht offiziell erschienende Fedora 13. Also das Live-CD-Image runter geladen, auf meinem “Großen” den liveusb-creator installiert und einen USB-Stick vorbereitet. Achtet darauf die i686 Version von Fedora zu nehmen, da der N270 Prozessor keine 64bit Erweiterung besitzt. Auch für Windows gibt es den liveusb-creatorl hier zum Download. Obwohl es nur max. die Fedora 12 zur Auswahl anzeigt, funktioniert es ohne Probleme mit dem Image der Fedora 13. Der ganze Vorgang hat bei mir knappe 1,5 Minuten gedauert.

Den so vorbereiteten USB-Stick in das NC10 gesteckt, im BIOS den USB HDD Eintrag ganz nach oben in der Geräteauswahl zum Booten eingestellt und ab geht die Post. Die Installation lief schnell und ohne Probleme durch, darauf will ich auch nicht weiter eingehen. Einzig erwähnenswert ist vielleicht die Tatsachen, das meine $HOME Partition verschlüsselt ist.

Nach der Installation dann als Erstes das WLAN in Betrieb genommen und die Updates installiert. Hat alles reibungslos funktioniert. Der neue NetworkManager arbeitet ohne Murren, auch eine Testverbindung des integrierten UMTS-Modems hat geklappt. Sobald ich den Chip eingesteckt und das Netbook gestartet hatte, wurde ich, unmittelbar nach dem Login, nach der PIN gefragt. Das eigentliche Einrichten des Zugangs war mit ein paar Klicks ein Kinderspiel. Schneller und leichter kommt man nun wirklich nicht ins mobile Internet. Apropos Mobiles Breitband, den Chip kann man ganz leicht einsetzen, in dem man den Akku heraus nimmt. Das Kabel gebundene Netzwerk funktioniert ebenfalls out-of-the-box.

Sound und Video sind gleich mit den richtigen Einstellungen parat. Compiz läßt sich von Hause aus aktivieren. Sogar die schon oft bemängelten Hell/Dunkel-Funktionstasten funktionieren auf Anhieb. Die Webcam ist mit 1,3 Megapixel nicht der Bringer, reicht für Skype und Co aber alle Male. Auch diese wurde von Cheese und einem nachinstalliertem Skype ohne Probleme erkannt. Videos und MP3 Songs werden flüssig abgespielt, vorausgesetzt man hat die Codecs installiert.

Über die tatsächliche Akku-Laufzeit kann ich ehrlich noch nichts sagen, da ich es bisher noch nicht lange genug in Betrieb hatte, bis der Akku auch nur annähernd leer war. Ich glaube diese Tatsache spricht für sich, besonders wenn man bedenkt, das ich das Teil schon des Öfteren Abends, im Wohnzimmer, in Gange hatte. Die beiden Ruhezustände, Suspend-To-Ram und Suspend-To-Disk,  funktionieren erfreulicherweise auch wunderbar.

So das war’s auch schon zur Hardware-Funktionalität. Ansonsten habe ich ein paar Kleinigkeiten gegenüber der Standard-Installation geändert. Als erstes mußte das obere Panel dran glauben und das untere wurde entsprechend angepasst, wie man auf dem Screenshot erkennen kann.

Desktop NC10

Desktop NC10

Als Zweites habe ich die DPI in den Schriftarten/Details auf 84 eingestellt. Damit sind die Schriften nicht mehr so groß und trotzdem scharf. Auch finde ich das Default Theme von Fedora 13 nicht so schick, so das ich mir die Solar-Backgrounds und das Solar Plymouth Theme installiert habe. Ein Wechsel des Plymouth Themes ist hier wunderbar erklärt und funktioniert auch unter der 13.

Dem Gnome-Terminal habe ich die Menüleiste genommen. Dieses Tool ist für mich wichtig, da ich vieles auf der Console erledige.

Terminal NC10

Terminal NC10

Bei der Software Auswahl habe ich auch einiges verändert. Als erstes die üblichen Codecs und den Mplayer von RPM-Fusion installiert. Firefox, Evolution und Shotwell habe ich deinstalliert. Zum Einen gehe ich unterwegs via Browser auf meine E-Mail Konten, und zum Anderen brauche ich auf dem Netbook keine Bilderverwaltung. Zum Ansehen reichen mir Nautilus in Verbindung mit Eye of Gnome. Als Standard-Browser fungiert bei mir der Chromium.

Ich habe mir auch noch diverse Tools zum Entwickeln installiert, damit ich unterwegs, im Wohnzimmer oder beim Lesen des einen oder anderen Fachbuches auch mal schnell was zur Hand habe. Soweit ich im Internet gelesen habe, läuft wohl Netbeans recht passabel auf dem Gerät. Ich werde es die Tage mal installieren und sehen wie es geht. Ansonsten benutze ich sowieso den gvim.

gvim NC10

gvim NC10

Mein erster Eindruck mit Fedora 13 und dem Samsung NC10: ein ideales Paar!

Die Distribution habe ich vorher schon auf meinen Acer Aspire 8920 installiert und bin auch hier, auf dem “Kleinen” begeistert. Die Hardware wird vom Standard Kernel (2.6.33.4-95) unterstützt und die notwendigen Tools arbeiten auch ohne Probleme. Ich habe auch den Eindruck, als ob es unter der Fedora etwas “flüssiger” läuft, als mit dem Windows 7 Starter. Das kann aber auch eine subjektive Wahrnehmung, geboren aus Wunschdenken, sein. ;-)

Was mich besonders entzückt, ist schlicht weg die Tatsache, das ich einem vollwertigen kleinen Rechner für unterwegs habe.

Erstellt am Freitag 21. Mai 2010
Unter: Allgemein, Fedora, Mobile | Keine Kommentare »

Ubuntu Lucid Lynx, ein rant zum Wochenende!

Ich muß hier mal ein paar Sachen los werden. Ich habe einige Jahre Ubuntu genutzt. Ich bin jetzt aber davon weg? Warum?

Irgendwie geht mir der ganze Hype mittlerweile ziemlich auf die Nerven. Nicht das mich jemand falsch versteht, ich habe nichts gegen gute Werbung für Linux, nur sollte man dabei aber auch die Kuh im Dorf lassen. Ich bin auch kein “im Prinzip gegen den Strom Schwimmer” . Ich finde einfach nur die Entwicklung, die Ubuntu einschlägt nicht mehr in Ordnung.

Als erstes fällt mir dazu das ganze in die Cloud wollen Gehabe ein. WTF! Was will eine vorrangig Desktop orientierte Distribution in der Cloud? Die Verbreitung auf dem Server ist bei Ubuntu eher marginal, im Vergleich zu SuSE und RedHat/CentOS. Den Vergleich mit Debian brauchen wir nicht stellen. Dann das Verhalten von Mr. S, welches sich seinem vermeintlichen Idol, Mr. J, scheinbar immer mehr annähert. Nichts gegen charismatische Leute, die die Sache voran bringen wollen. Nur mit Community hat das ganze nicht mehr viel zu tun. Und das wurde von Anfang an bei Ubuntu SEHR groß geschrieben, offiziell zumindest. Als nächstes das ganze OSX-Look-A-Like. Ich finde es befremdlich, wenn eine “professionelle” Distribution es nötig hat, sich zu verhalten wie meine 14-jährige Tochter, deren Windows aussieht wie ein Teller bunte Knete. Zu diesem Thema habe ich mich aber schon hier geäußert. Die alten Farben und Themes waren vielleicht nicht jedermanns Geschmack, aber man wusste sofort, ah Ubuntu. Genauso wie ich mit einem Blick weiß, Windows oder Apple.

Dann noch der eigen Musik-Store. Nichts verwerfliches, nur gibt es doch schon einige davon! Hat auch son leichten Apple Beigeschmack.

Mal sehen was als nächstes kommt: Programmieren mit und unter Ubuntu nur noch in C# mit dem Mono-Stack und anschließender Ausschließlichkeit der Nutzung als deb-Paket unter Ubuntu und deren Derivate nach vorheriger Sichtung und Freigabe durch die Firma Canonical, nach Kriterien die keiner kennt.

Na klar, es steht mir frei, eine andere Distribution zu nutzen. Mach ich auch.

Schönes Wochenende!

Erstellt am Freitag 23. April 2010
Unter: Linux und Unix, Ubuntu | Keine Kommentare »

Emacs 23 erschienen

Ich arbeite zur Zeit zwar mit dem Vim, habe aber damals, als ich Linux für mich entdeckte, den Emacs benutzt und geliebt. Irgendwann wurde mir das Ding dann doch zu sehr Dinosaurier, nicht mehr zeitgemäße GUI (Lucid), Font-Rendering war auch nicht der Brüller, usw.; es paßte einfach nicht mehr auf meinen schönen Ubuntu/Debian Desktop. ;-) So kam ich dann zum Vim mit nativem GTK-Tookit für die GUI; passt ja auch besser zu Gnome. Die Tastatur-Bedienung war kein großes Problem, da die vom Emacs auch nicht unbedingt so intuitiv ist. Ich meine, CUA ist bei beiden nicht der default Zustand.

So nu issa da, der Emacs 23.1, seit gestern nämlich! Hat native GTK-Unterstützung, kann UTF-8, rendert Schriften mit Fontconfig und Xft, und hat noch ein paar Modes spendiert bekommen. Nachlesen kann man das Ganze in der NEWS Datei.

Da ich nun mal zu der Sorte “extrem ungeduldiger Mensch” gehöre, habe ich mir die Sourcen mal eben rundergeladen. Bis bei Ubuntu die fertigen Pakete auftauchen, wird es wohl noch ne Weile dauern. Also den alten Emacs Kram aus dem System gepurged und ./configure –prefix=/usr/local && make und dann noch sudo make install. Fertig! Kein rumgemecker und gezicke. Achso, vor dem build-Lauf habe ich sicherheitshalber noch sudo apt-get build-dep emacs aufgerufen, um die vielleicht noch fehlenden Abhängigkeiten auf die Platte zu bekommen.

So nun an die Arbeit und die noch fehlenden modes installiert. Dazu unter ~/.emacs.d noch ein Verzeichnis erstellt (elisp). Hier die Dateien reinkopiert (php-mode.el, inf-ruby.el, snippet.el, find-recursive.el, das rails-mode Geraffel ). Dann wie üblich mit require ‘XXXXX-mode in der ~/.emacs die Modes geladen und schon hats nicht mehr getan wie es soll. Es kam immer ne nette Meldung im Emacs:

Warning (initialization): An error occurred while loading `/home/guenti/.emacs':
 
error: `c-lang-defconst' must be used in a file
 
To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.

Was nun? Also Google angeworfen und folgenden Hinweis gefunden. Also statt require dann (autoload ‘php-mode …) genommen und alles ist sowas von Schick!

Was mir in der kurzen Zeit auch noch positiv aufviel, ist die vorhandene Unterstützung von git. Da ich alle meine Projekte seit kurzem mit git verwalte, freut mich dies um so mehr.

Aussehen tut der neue Emacs jetzt so:

Emacs 23.1

Emacs 23.1

So nun will ich das Teil aber mal weiter ausprobieren. So wie ich greade gesehen habe, ist Speedbar jetzt auch per default dabei, super. Wer ne Alternative zu den manchmal doch etwas gigantisch wirkenden IDEs sucht, hat mit dem neuen Emacs vielleicht ne gute Wahl getroffen. Auch so, CUA kann man per Mausklick aktiviren ;-)

Erstellt am Donnerstag 30. Juli 2009
Unter: Linux und Unix, Programmieren, Tools | Keine Kommentare »

Mein erstes Linux Kernel Modul

Bevor wir beginnen

Jeder zukünftige Kernel Hacker fängt irgendwann mal an, so wie ich jetzt. ;-) Ich habe natürlich auch den Traum, mal mein eigenes Modul zu schreiben und zu kompilieren. So habe ich mal aufgeschrieben, wie ich ein absolut sinnloses Modul schreibe und kompiliere, in den laufenden Kernel einbinde und wieder raus werfe. Diese Modul macht erst mal nichts, es lässt sich jedoch , wie ein richtiges Modul laden und gibt eine Meldung nach /var/log/messages.

Wir brauchen unbedingt root-Privilegien um das Modul zu laden und zu entladen! Aber wenn Ihr an dieser Stelle seit, ein Kernel-Modul schreiben zu wollen, solltet ihr über die Grundkenntnisse im Umgang mit Linux Bescheid wissen.

Grundlagen

Es gibt einige Dinge, die Ihr unbedingt auf Eurem System braucht, sonst funktioniert die ganze Sache nicht! Ich liste hier einfach mal alles auf:

1.) Die Standard Entwicklungsumgebung bestehend aus bintuils, gcc, make und so weiter. Diese solltet Ihr aber ohne Problem mit Eurem Paketverwaltungswerkzeug installiert bekommen.

2.) Die module-init-tools, also die Tools die die Kommandos lsmod, insmod, rmmod usw. liefern.

3.) Die Kernel Sourcen für Euren laufenden Kernel. Hier gibt es unterschiedliche Möglichkeiten; ihr habt einen Vanilla-Kernel, so wie ich, dann habt Ihr die Sourcen sowieso ;-) , oder Ihr habt einen Distributions-Kernel, dann solltet ihr die jeweilgen Devel- oder Headers-Pakete installieren. Beispielsweise für Ubuntu/Debian

1
sudo apt-get install linux-headers-`uname -r`

und unter Fedora/Redhat lautet das Paket kernel-devel.

Kernel Sourcen

Die Kernel Sourcen sind so wichtig, das wir hier noch ein wenig darüber reden wollen. Auf JEDEN Fall müsst Ihr die passenden Sourcen zu Eurem laufenden Kernel installieren. Diese liegen dann gewöhnlich irgendwo unterhalb /usr/src, je nach Distribution heissen die Ordner dort dann anders. Gebt Ihr im Terminal den Befehl

1
guenti@guenti-laptop:~/Projekte/kernel-module$ ls -l /lib/modules/`uname -r` | grep build

ein, dann solltet Ihr eine ähnliche Ausgabe bekommen, wie die folgende:

lrwxrwxrwx 1 root root 31 2009-07-09 13:20 build -> /home/guenti/build/linux-2.6.30

Bei mir liegen die Sourcen deshalb woanders, weil ich einen Vanilla Kernel, also einen Original-Kernel, verwende. Normalerweise verweist der Symlink /lib/module/`uname -r`/build nach /usr/src/kernel-headers-xxx, oder ähnlichem.

Die passenden Kernel Sourcen sind deshalb so enorm wichtig, da die Präprozessor #include Anweisungen NICHT auf die normalen System Header-Dateien verweisen, sondern auf die in den Kernel-Source Pfaden. Später, im Makefile, werden wir dem Build-Prozess dann den genauen Pfad zu den Kernel-Sourcen mitteilen.

Das Modul

Hier erst mal der Quelltext von firstmodule.c:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <asm/current.h>
#include <linux/sched.h>
 
static int fmload(void)
{
    printk(KERN_INFO "firstmodule module being loaded.\n");
    return 0;
}
 
static void fmunload(void)
{
    printk(KERN_INFO "firstmodule module being unloaded.\n");
}
 
module_init(fmload);
module_exit(fmunload);
 
MODULE_AUTHOR("Mario Guenterberg");
MODULE_LICENSE("Dual new BSD/GPL");
MODULE_DESCRIPTION("My first kernel module.");

Einige Erläuterungen zum Quelltext:

1.) Als erstes includen wir die Kernel-Header Dateien.

2.) Eigentlich ist es nicht nötig, Meldungen ausgeben zu lassen, doch zu Testzwecken machen wir es, um in den Logs was zu lesen zu haben. ;-)

3.) Der return-Wert der init Funktion sollte immer 0 sein, damit angezeigt wird, das alles in Ordnung ist.

4.) Fügt eine “valide” Lizenz ein, damit Ihr den Kernel nicht “tainted”. Also BSD/GPL/LGPL oder dergleichen. Ein Beispiel für ein Modul, welches den Kernel in den tainted Zustand überführt, ist das Closed Source Nvidia Treiber Modul.

5.) Auf keinen Fall ein Komma hinter den Log Level Parameter in der printk Anweisung einfügen. Dort gehört keines hin!

So nun kommen wir zum Build-Prozess.

Das Makefile

1
2
3
4
5
6
7
8
9
10
11
12
ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
.PHONY: build clean
build:
         $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
         rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.markers *.symvers *.order
else
$(info Building with KERNELRELEASE = ${KERNELRELEASE})
obj-m :=    firstmodule.o
endif

Eine kurze Erklärung zu diesem Makefile:

Das Makefile weiß, das es sich im Source-Verzeichnis (PWD) des Moduls befindet, von dem aus es sich in das Kernel-Source Verzeichnis (KERNELDIR), so wie angegeben, begibt, in dem es alles benötigte vorfindet und dieses auch benutzt, um anschliessend wieder in das Modul Verzeichnis (PWD) zurückzukommen, um das Modul zu kompilieren. Hört sich wirr an, is aber so. ;-) Nach einigem Überlegen erschließt es sich dann auch.

Wenn alles durchläuft, sollte nach einem Aufruf von make build, die Ausgabe wie folgt aussehen:

1
2
3
4
5
6
7
8
9
10
11
guenti@guenti-laptop:~/Projekte/kernel-module$ make build
make -C /lib/modules/2.6.30.1-selfmade/build M=/home/guenti/Projekte/kernel-module modules
make[1]: Betrete Verzeichnis '/home/guenti/build/linux-2.6.30'
Building with KERNELRELEASE = 2.6.30.1-selfmade
  CC [M]  /home/guenti/Projekte/kernel-module/firstmodule.o
  Building modules, stage 2.
Building with KERNELRELEASE = 2.6.30.1-selfmade
  MODPOST 1 modules
  CC      /home/guenti/Projekte/kernel-module/firstmodule.mod.o
  LD [M]  /home/guenti/Projekte/kernel-module/firstmodule.ko
make[1]: Verlasse Verzeichnis '/home/guenti/build/linux-2.6.30'

So, nun haben wir im Verzeichnis die Datei firstmodule.ko – unser eigenes Kernel Modul.

Wenn wir jetzt mal modinfo firstmodule.ko aufrufen, dann sehen wir folgende Ausgabe:

1
2
3
4
5
6
7
8
guenti@guenti-laptop:~/Projekte/kernel-module$ modinfo firstmodule.ko
filename:       firstmodule.ko
description:    My first kernel module.
license:        Dual new BSD/GPL
author:         Mario Guenterberg
srcversion:     0CB416C6EAC5346958A6EAE
depends:        
vermagic:       2.6.30.1-selfmade SMP mod_unload modversions CORE2

Die letzte Zeile und srcversion kann abweichen; der Rest sollte so aussehen, wie hier abgebildet.

Laden des Moduls

Zum Schluss laden wir das Modul und spielen damit ein wenig herum. Hier müsst Ihr auf jeden Fall root-Rechte haben!

guenti@guenti-laptop:~/Projekte/kernel-module$ sudo insmod firstmodule.ko
[sudo] password for guenti: 
guenti@guenti-laptop:~/Projekte/kernel-module$ lsmod | grep firstmodule
firstmodule             1292  0 
guenti@guenti-laptop:~/Projekte/kernel-module$ sudo rmmod firstmodule

Und wo sind nun die printk Meldungen geblieben? Ganz einfach, sie befinden sich in /var/log/messages:

guenti@guenti-laptop:~/Projekte/kernel-module$ tail /var/log/messages
[snip]
Jul 12 11:24:21 guenti-laptop kernel: [ 1022.497508] firstmodule module being loaded.
Jul 12 11:24:42 guenti-laptop kernel: [ 1044.069566] firstmodule module being unloaded.
[/snip]

Regel Nummer 1 bei der Kernel Programmierung lautet nämlich: Normalerweise findet keine Interaktion mit dem User-Space statt. Also damit auch keine Ausgaben auf dem Terminal, statt dessen wird, wie in unserem Fall, das Standard System Logfile benutzt und alle Ausgaben hierhin umgeleitet.

Aufräumen

Zum Schluss räumen wir nach das Quellverzeichnis unseres Moduls auf mit dem einfachen Befehl:

guenti@guenti-laptop:~/Projekte/kernel-module$ make clean

Abschluss

Wie wir sehen konnten, ist es relativ einfach ein Kernel-Modul zu bauen (hat mich auch überrascht ;-) ), zumindest in dieser vereinfachten Form. Jetzt ist es Zeit, dem ganzen auch noch eine vernünftige Funktionalität zu geben. :-)

Erstellt am Samstag 11. Juli 2009
Unter: Kernel, Linux und Unix | Keine Kommentare »

Ubuntu USB-Scanner

ich weiß nicht, wie es euch geht, aber bei mir hatte ich das Problem, dass Ubuntu 9.04 den Scanner (HP Scanjet G2710) zwar erkannte, ich aber bei jedem Start von xsane die Meldung bekam, dass ich auf device usbxxx:blabla nicht zugreifen kann. Ein Blick in die /etc/udev/libsane.rules sagte mir, das die Geräte für eine Gruppe scanner verfügbar gemacht werden. Diese Gruppe existierte aber leider nicht. Also mit groupadd die Grupper scanner angelegt, meinen $user dort mit reingenommen, und alles klappt.

Erstellt am Mittwoch 27. Mai 2009
Unter: Linux und Unix, Ubuntu | Keine Kommentare »

Rss Feed Tweeter button Facebook button Linkedin button Delicious button Digg button Flickr button