Hallo,

beim Zen-Kernel gibt es ja zum Beispiel mehrere Boot Logos, also das Logo des Kernels was standard mäßig Tux bzw. beim Arch Kernel das Arch Logo ist.

Wenn ich jetzt mehrere verschiedene Logos in den Kernel kompiliert habe, wie kann ich dann ein bestimmtes auswählen?

Geht das über die kernel commando Zeile in Grub? Ich konnte dazu nirgends was finden.

SiD

EDIT:

ah, in linux-2.6.xx.x/Documentation/kernel-parameters.txt steht schonmal
logo.nologo zum deaktivieren des Logos.

Werde es mal mit logo.<logo_name> probieren, wenn der kernel fertig kompiliert ist.
und, gibt's schon ein Ergebnis?
joa, aber leider keine erfolgreichen ..

also ich habe 3 verschiedene Logos reinkompiliert
$ zcat /proc/config.gz | grep LOGO
CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
# CONFIG_LOGO_LINUX_CLUT224 is not set
CONFIG_LOGO_ARCH_CLUT224=y
CONFIG_LOGO_HOMER_CLUT224=y
CONFIG_LOGO_METALLICA_CLUT224=y
ich habe es in der menu.lst probiert mit:
logo.homer
logo.homer_clut224
logo.HOMER
logo.HOMER_CLUT224
logo=homer
logo=homer_clut224
logo=HOMER
logo=HOMER_CLUT224
Es wird aber immer das metallica Logo genommen. Also das letzte in der config.

Bis jetzt konnte ich nur mitlogo.nologo das Logo deaktivieren.

Beim Zen-Kernel gibts ja die config option "use random logo" oder so. Womit wohl bei jedem booten zufällig ein Logo ausgewählt wird. Das habe ich aber noch nicht ausprobiert (habe die zen patches nicht verwendet).

Müsste man sich mal angucken wie die das machen ...
ein Monat später
Ich habe es dann irgendwann doch hinbekommen, da ich grad etwas Zeit habe hier mal meine Lösung.

Als erstes müssen natürlich die eigenen Logos erstellt werden. 😉
# pngtopnm -plain mein_logo_1.png >logo_meinlogo1_clut.ppm 
# ppmquant -plain 224 logo_meinlogo1_clut.ppm >logo_meinslogo1_clut224.ppm 

# pngtopnm -plain mein_logo_2.png >logo_meinlogo2_clut.ppm 
# ppmquant -plain 224 logo_meinlogo2_clut.ppm >logo_meinlogo2_clut224.ppm 

ect..
und nach /usr/src/linux-<kernel-version>/drivers/video/logo/ kopiert werden.

Jetzt müssen die Dateien

/usr/src/linux-<kernel-version>/include/linux/linux_logo.h
/usr/src/linux-<kernel-version>/drivers/video/logo/Makefile
/usr/src/linux-<kernel-version>/drivers/video/logo/Kconfig
/usr/src/linux-<kernel-version>/drivers/video/logo/logo.c

in die linux_logo.h muss für jedes Logo diese Zeile hinzugefügt werden.
extern const struct linux_logo logo_meinlogo1_clut224;
in das Makefile kommt für jedes Logo
obj-$(CONFIG_LOGO_MEINLOGO1_CLUT224)    += logo_meinlogo1_clut224.o
in Kconfig kommt (ans Ende des "if LOGO" Blocks)
config LOGO_MEINLOGO1_CLUT224
        bool "224-color Mein Logo Name"
        depends on LOGO
        default y
jetzt noch die logo.c. Hier wird durch ein paar Änderungen die Auswahl ermöglicht. Deshalb post ich hiermal die komplette Datei mit Änderungen für 2 eigene Logos meinlogo1 und meinlogo2.
/*
 *  Linux logo to be displayed on boot
 *
 *  Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
 *  Copyright (C) 1996,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
 *  Copyright (C) 2001 Greg Banks <gnb@alphalink.com.au>
 *  Copyright (C) 2001 Jan-Benedict Glaw <jbglaw@lug-owl.de>
 *  Copyright (C) 2003 Geert Uytterhoeven <geert@linux-m68k.org>
 */

#include <linux/linux_logo.h>
#include <linux/stddef.h>
#include <linux/module.h>

#ifdef CONFIG_M68K
#include <asm/setup.h>
#endif

#ifdef CONFIG_MIPS
#include <asm/bootinfo.h>
#endif

static int nologo;
static int meinlogo1;
static int meinlogo2;
module_param(nologo, bool, 0);
module_param(meinlogo1, bool, 0);
module_param(meinlogo2, bool, 0);
MODULE_PARM_DESC(nologo, "Disables startup logo");
MODULE_PARM_DESC(meinlogo1, "Selects meinlogo1 startup logo");
MODULE_PARM_DESC(metallica, "Selects meinlogo2 startup logo");

/* logo's are marked __initdata. Use __init_refok to tell
 * modpost that it is intended that this function uses data
 * marked __initdata.
 */
const struct linux_logo * __init_refok fb_find_logo(int depth)
{
        const struct linux_logo *logo = NULL;

        if (nologo)
                return NULL;

        if (depth >= 1) {
#ifdef CONFIG_LOGO_LINUX_MONO
                /* Generic Linux logo */
                logo = &logo_linux_mono;
#endif
#ifdef CONFIG_LOGO_SUPERH_MONO
                /* SuperH Linux logo */
                logo = &logo_superh_mono;
#endif
        }
        
        if (depth >= 4) {
#ifdef CONFIG_LOGO_LINUX_VGA16
                /* Generic Linux logo */
                logo = &logo_linux_vga16;
#endif
#ifdef CONFIG_LOGO_BLACKFIN_VGA16
                /* Blackfin processor logo */
                logo = &logo_blackfin_vga16;
#endif
#ifdef CONFIG_LOGO_SUPERH_VGA16
                /* SuperH Linux logo */
                logo = &logo_superh_vga16;
#endif
        }

        if (depth >= 8) {
#ifdef CONFIG_LOGO_LINUX_CLUT224
                /* Generic Linux logo */
                logo = &logo_linux_clut224;
#endif
#ifdef CONFIG_LOGO_BLACKFIN_CLUT224
                /* Blackfin Linux logo */
                logo = &logo_blackfin_clut224;
#endif
#ifdef CONFIG_LOGO_DEC_CLUT224
                /* DEC Linux logo on MIPS/MIPS64 or ALPHA */
                logo = &logo_dec_clut224;
#endif
#ifdef CONFIG_LOGO_MAC_CLUT224
                /* Macintosh Linux logo on m68k */
                if (MACH_IS_MAC)
                        logo = &logo_mac_clut224;
#endif
#ifdef CONFIG_LOGO_PARISC_CLUT224
                /* PA-RISC Linux logo */
                logo = &logo_parisc_clut224;
#endif
#ifdef CONFIG_LOGO_SGI_CLUT224
                /* SGI Linux logo on MIPS/MIPS64 and VISWS */
                logo = &logo_sgi_clut224;
#endif
#ifdef CONFIG_LOGO_SUN_CLUT224
                /* Sun Linux logo */
                logo = &logo_sun_clut224;
#endif
#ifdef CONFIG_LOGO_SUPERH_CLUT224
                /* SuperH Linux logo */
                logo = &logo_superh_clut224;
#endif
#ifdef CONFIG_LOGO_M32R_CLUT224
                /* M32R Linux logo */
                logo = &logo_m32r_clut224;
#endif
ifdef CONFIG_LOGO_MEINLOGO1_CLUT224
                /* meinlogo 1 logo */
                if (meinlogo1)
                        logo = &logo_meinlogo1_clut224;
#endif
ifdef CONFIG_LOGO_MEINLOGO2_CLUT224
                /* meinlogo 2 logo */
                if (meinlogo2)
                        logo = &logo_meinlogo2_clut224;
#endif
        }

        return logo;
}
EXPORT_SYMBOL_GPL(fb_find_logo);
Die hinzugefügten Teile sind diese:
static int meinlogo1;
static int meinlogo2;
module_param(meinlogo1, bool, 0);
module_param(meinlogo2, bool, 0);
MODULE_PARM_DESC(meinlogo1, "Selects meinlogo1 startup logo");
MODULE_PARM_DESC(metallica, "Selects meinlogo2 startup logo");



ifdef CONFIG_LOGO_MEINLOGO1_CLUT224
                /* meinlogo 1 logo */
                if (meinlogo1)
                        logo = &logo_meinlogo1_clut224;
#endif
ifdef CONFIG_LOGO_MEINLOGO2_CLUT224
                /* meinlogo 2 logo */
                if (meinlogo2)
                        logo = &logo_meinlogo2_clut224;
#endif
nach diesen Änderungen kann man nun bei der Kernel-Konfiguration die beiden neuen Logos auswählen (beide) und so in den Kernel kompilieren. Man kann nun in der GRUB menu.lst das Logo in der kernel-Zeile auswählen.
logo.meinlogo1
oder
logo.meinlogo2
logo.nologo deaktiviert das Boot-Logo. Wird kein logo.<irgendwas> angegeben sollte der normale Tux als logo erscheinen.

ich hoffe das war jetzt einigermaßen verständlich 😉

sieh auch
http://www.gentooforum.de/artikel/9226/linux-bootup-logo-hack.html
ein Jahr später
Hmm.. danke auf jeden Fall für dieses umfangreiche Tutorial! Aber..

..eine Frage: was passiert wenn man zum FB ein nicht passendes Logo auswählt? Gibt das große Probleme? Oder kann man dann wie gewohnt booten ohne ein Logo zu erhalten? Inwiefern ist das mit Vorsicht zu genießen??
SiD schrieb logo.nologo deaktiviert das Boot-Logo. Wird kein logo.<irgendwas> angegeben sollte der normale Tux als logo erscheinen.
@SiD: heisst das, wenn ich keine personalisierten, eigenen Logos verwenden möchte, sondern einfach nur die gewöhnlichen Tux-Logos haben möchte, ich dann nur das nologo in logo.nologo entfernen muss und darf alle anderen Schritte Deiner Beschreibung darüber auslassen?


Ich bitte dringend um Rückmeldung! Ich vermisse meinen Tux.. 😢
7 Tage später
Hi,

ich habe gerade die mail gelesen 😉

Also, das ist schon so lange her, ich weiss auch nicht mehr so genau. 😉

Was für einen Kernel benutzt Du denn? Den Arch standard Kernel (kernel26) oder einen eigenen?

Ich weiss nicht wie das jetzt ist aber "früher" war beim Arch Kernel der Tux durch das Arch Logo ersetzt.
Ob nur Das Bild in den Kernel Quellen ausgetauscht wurde, oder das Arch Logo hinzugefügt und dann in der config ausgewählt wurde, weiss ich auch nicht mehr.

Da müsste man mal die Arch kernel Patches anguken... 😉

Und seit diesem KMS Kram ist das Logo glaube ich eh nur noch solange zu sehen, bis KMS die Auflösung anpasst.

Ich nutze inzwischen einen eigenen vanilla Kernel; also ohne die Arch Patches, aber mit einem Patch für das speedstep-centrino Modul, weil sonst die CPU, dank des vermurksten BIOS, mit falschen Frequenzen läuft. Das logo habe ich in der config glaube ich komplett deaktiviert.

Wie gesagt, habe mich schon lange nicht mehr damit beschäftigt. 😉
Der Zen-Kernel aus dem AUR hat das Arch-Logo drin, das kann man da in der Kernel-Config aktivieren. Man kann da auch mehrere aktivieren, die dann (zufällig) durchgewechselt werden. 😉
Und wenn man eh schon einen Kernel baut, kann man einen ohne initrd bauen, und KMS direkt in der Kernel einbauen. Dann hat man das Logo auch iirc dauerhaft.
Creshal schrieb Und wenn man eh schon einen Kernel baut, kann man einen ohne initrd bauen, und KMS direkt in der Kernel einbauen. Dann hat man das Logo auch iirc dauerhaft.
Dazu habe ich dann mal zwei fragen.

1) welche Optionen in der kernel config sind für KMS zuständig, was muss ich da alles aktiveren?

2)
ein Kernel ohne initrd wäre nicht schlecht aber funktioniert das auch mit einer verschlüsselten Festplatte, die per USB stick automatisch entschlüsselt wird?
Es müsste dann ja alles mit rein was der "encrypt" HOOK macht, geht das irgendwie?
1) welche Optionen in der kernel config sind für KMS zuständig, was muss ich da alles aktiveren?
kA. Ich hab nur einmal einen Kernel selber gebaut, da war menuconfig intuitiv genug. *g*
aber funktioniert das auch mit einer verschlüsselten Festplatte, die per USB stick automatisch entschlüsselt wird?
Ebenfalls kA, nie getestet.
Also ich habe es jetzt mal ausprobiert.

Wenn Du nur den normalen Tux haben willst, reicht es das Modul für deine Grafikkarte direkt in den kernel zu kompilieren (mit aktiviertem KMS) und das das Bootlogo ganz normal in der kernel config zu aktivieren.
9 Tage später
SiD schrieb..
Was für einen Kernel benutzt Du denn? Den Arch standard Kernel (kernel26) oder einen eigenen?
..
den standard kernel, kernel26.
SiD schrieb..
Wenn Du nur den normalen Tux haben willst, reicht es das Modul für deine Grafikkarte direkt in den kernel zu kompilieren (mit aktiviertem KMS) und das das Bootlogo ganz normal in der kernel config zu aktivieren.
..
wowowow! das geht mir ein bißchen zu schnell! ich hab erst kürzlich mit linux angefangen.

kompilieren heißt mit anderen worten 'einbinden', oder?
wenn ich änderungen am standard kernel vornehme, werden diese bei einem systemweiten update (per "pacman -Syu") überschrieben, also rückgängig gemacht?
was ist "KMS"?