Konfiguration des laufenden Kernels auslesen?

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
pixel24
Beiträge: 143
Registriert: 28.06.2005 13:26:41

Konfiguration des laufenden Kernels auslesen?

Beitrag von pixel24 » 17.12.2009 15:50:31

Hallo zusammen,

ich betreibe ein Debian5 (CT-Server) als Xen-Dom0. Dort läuft ein Kernel 2.6.26-2-xen-amd64 und soweit ich weiß ist der von den Machern des CT-Servers angepasst. Der Switch kann Trunking und ich würde nun gerne die NIC:
INTEL PRO1000PT 1GBit 4xRJ45 NIC Quad Port Server Adapter PCI-Express Retail LP
einbauen. Um damit Bonding zu nutzen muss das Feature ja im Kernel aktiviert sein. Wie kann ich generell feststellen welche Funktionen/Treiber im Kernel aktiviert sind und welche nicht?

Viele Grüße
pixel

Benutzeravatar
feltel
Webmaster
Beiträge: 10458
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Re: Konfiguration des laufenden Kernels auslesen?

Beitrag von feltel » 17.12.2009 16:05:46

Die Kernelconfigs liegen in /boot und die aktuelle bekommst Du mit

Code: Alles auswählen

cat /boot/config-`uname -r`
Etwaige Kernel-Boot-Parameter stehen in /proc/cmdline

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Konfiguration des laufenden Kernels auslesen?

Beitrag von GoKi » 17.12.2009 17:25:35

Falls CONFIG_IKCONFIG_PROC gesetzt ist, existiert /proc/config.gz.
MfG GoKi
:wq

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Konfiguration des laufenden Kernels auslesen?

Beitrag von rendegast » 17.12.2009 18:29:31

Ohne /boot/config und /proc/config?

Bsp. bonding.ko
Zumal durch die Existenz von bonding.ko:

Code: Alles auswählen

$ grep -i bond modules.*
...
Binary file modules.alias.bin matches
...
modules.dep:kernel/drivers/net/bonding/bonding.ko:
...
Binary file modules.dep.bin matches
Beim Laden entstehen *bond*-Dateien in /proc/ und /sys/.

Code: Alles auswählen

$ grep -i bond System.map-2.6.30-2-686
c0291b2e T netdev_bonding_change
c03c4544 r __ksymtab_netdev_bonding_change
c03c9cc4 r __kcrctab_netdev_bonding_change
c03d9803 r __kstrtab_netdev_bonding_change
?

"bond"-Strings des Moduls,
falls einkompiliert müßte das gezippte Kernel-Image zuerst mal dekomprimiert werden:

Code: Alles auswählen

 ...
        KERNEL=/boot/vmlinuz-"$KERNEL_VERSION"
        echo KERNEL: "$KERNEL"
        POS=$(xxd -c2 -l $((0x6470)) "$KERNEL" | grep -A1 ": 1f8b " | grep -B1 ": 0800 " | awk -F: '$2~/1f8b/ {print $1}')
        KERNEL_CC_VERSION=$(dd skip=1 if="$KERNEL" bs=$((0x$POS)) 2>/dev/null | gunzip -c 2>/dev/null | strings | egrep -m1 -o "gcc version ..." | cut -d" " -f3)
#export GCC="CC=gcc-$KERNEL_CC_VERSION"
export GCC="gcc-$KERNEL_CC_VERSION"
((Hier suche ich nach der im Kernelimage enthaltenen "gcc version")
Die MAGIC für die Zip-Datei "1f8b 0800" ist ziemlich am Anfang, daher die Beschränkung '$((0x6470))' in $POS,
zusätzlich sollen das zweite 'grep' Zufallstreffer ausschließen, siehe

Code: Alles auswählen

xxd -c2 vmlinuz-2.6.30-2-686 |   grep -A1 ": 1f8b "
)

Über die String-Suche hinaus würde es zu Reverse-Engineering führen?
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

pixel24
Beiträge: 143
Registriert: 28.06.2005 13:26:41

Re: Konfiguration des laufenden Kernels auslesen?

Beitrag von pixel24 » 18.12.2009 08:59:09

Also:

Code: Alles auswählen

cat /boot/config-`uname -r` | grep bond
liefert kein Ergebnis.

Die Datei /proc/config.gz existiert nicht und

Code: Alles auswählen

grep -i bond modules.*
liefert auch kein Ergebnis. Das bedeutet wohl das bonding ist weder fest noch als Modul im Kernel drin, oder?

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Konfiguration des laufenden Kernels auslesen?

Beitrag von cosmac » 18.12.2009 10:21:12

hi,
pixel24 hat geschrieben:

Code: Alles auswählen

cat /boot/config-`uname -r` | grep bond
liefert kein Ergebnis.
in den config-Dateien wird praktisch alles groß geschrieben, es sollte also heißen:

Code: Alles auswählen

cat /boot/config-`uname -r` | grep BOND
oder

Code: Alles auswählen

grep -i bond /boot/config-`uname -r`
Beware of programmers who carry screwdrivers.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Konfiguration des laufenden Kernels auslesen?

Beitrag von rendegast » 18.12.2009 10:27:02

pixel24 hat geschrieben:

Code: Alles auswählen

 cat /boot/config-`uname -r` | grep bond
liefert kein Ergebnis.
Die /boot/config existiert?
Dann muß es 'grep -i' heißen, oder Du solltest nach "BOND" suchen (Großschreibung).
Die Datei /proc/config.gz existiert nicht und
Das Feature ist nicht im Kernel.

Code: Alles auswählen

    grep -i bond modules.*
liefert auch kein Ergebnis.
Wenn, ist es nicht als eigenes Modul realisiert.
Und dann würden die *bond*-Dateien in /proc/, /sys/ schon vom kernel-Start ab existieren.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

pixel24
Beiträge: 143
Registriert: 28.06.2005 13:26:41

Re: Konfiguration des laufenden Kernels auslesen?

Beitrag von pixel24 » 18.12.2009 11:11:30

Das sieht schon besser aus:

Code: Alles auswählen

cat /boot/config-`uname -r` | grep -i bond
CONFIG_WINBOND_FIR=m
# CONFIG_PATA_WINBOND is not set
CONFIG_BONDING=m
CONFIG_WINBOND_840=m
Es ist also als Medul im Kernel vorhanden. Danke für die Hilfe!

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Konfiguration des laufenden Kernels auslesen?

Beitrag von rendegast » 18.12.2009 17:23:06

Addendum:
pixel24 hat geschrieben:

Code: Alles auswählen

        grep -i bond modules.*
liefert auch kein Ergebnis.
Das muß (natürlich) im Modulverzeichnis des Kernels /lib/modules/KERNELVERSION/ durchgeführt werden,
wo die modules.*-Dateien liegen.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten