Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Joe58

Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von Joe58 » 27.10.2017 11:19:08

Hallo,

ist es möglich und normal das man den Bootloader der die Kernelbefehlzseile an den Kernel gibt einfach abblockt und durch eine eigene ersetzt die aus dem Kernel selber stammt?

Kann man eigentlich alle Einstellungen wie partitionieren eines Flash Chips durch einen Bootloader, wieder rückgängig machen und somit erreichen das man einen Bootloader nicht zurückentwickeln muss?

Danke.

Joe

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

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von cosmac » 27.10.2017 13:08:48

hi,

die Grundlage ist CONFIG_CMDLINE_BOOL (am Ende von "Processor type and features"):
Allow for specifying boot arguments to the kernel at build time. On some systems (e.g. embedded ones), it is necessary or convenient to provide some or all of the kernel boot arguments with the kernel itself (that is, to not rely on the boot loader to provide them.)

To compile command line arguments into the kernel, set this option to 'Y', then fill in the boot arguments in CONFIG_CMDLINE.
und als Sahnehäubchen gibt es CONFIG_CMDLINE_OVERRIDE:
Set this option to 'Y' to have the kernel ignore the boot loader command line, and use ONLY the built-in command line.
This is used to work around broken boot loaders.
Beware of programmers who carry screwdrivers.

Joe58

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von Joe58 » 27.10.2017 17:31:40

Super geil!

Ich lasse den closed source (GPL) Bootloader erst machen und der Kernel macht direkt sein eigenes Ding! Das ist richtig :THX:

Werde dann sehen ob die mtdblock Partitionen, die ja nur definierte auf Hardwareadressen Rahmen sind mit in dem Kernel rein kompilieren kann. ;)

Jetzt muss ich nurnoch schaffen von dem Kernel aus irgendwie in das Android OS rein zu bekommen. Dann wird es so richtig toll den kernel das Tablet so nettenSachen wie Swap zukommen zu lassen.

Danke deine Antwort hat mir Motivation gegeben.

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

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von cosmac » 27.10.2017 19:31:36

Vielleicht bin ich auf dem Holzweg, aber vielleicht kannst du auch Debiankexec-tools gebrauchen.
Beware of programmers who carry screwdrivers.

Joe58

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von Joe58 » 26.05.2018 11:27:33

Hallo,

in meiner Kernel Konfig gibt es nur: CONFIG_CMDLINE="" und da habe ich die Befehlszeile mit 1,5 GHz anstatt 800 MHz rein gepackt: CONFIG_CMDLINE="init=/init console=ttyS0,115200n8 hlt no_console_suspend vmalloc=256m mem=1024m logo=osd1,loaded,panel,debug hdmitx=vdacoff,powermode1,unplug_powerdown a9_clk_max=1512000000"


Aber irgendwie lässt sich der Cortex A9 davon nicht beeindrucken und taktet weiterhin nur mit 800 MHz. Es gibt in meiner Kernel Config keine weitere cmd Optionen...

hat jemand eine Idee?

MfG,

Johannes

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

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von rendegast » 26.05.2018 12:58:51

gefunden google hat geschrieben: On old kernel: a9_clk_max=1512000000 on new: a9_clk_max=1320000000

Code: Alles auswählen

grep . /sys/devices/system/cpu/cpu*/cpufreq/*
?
Und dann wie gewöhnlich auf den governor einwirken?


-----------------------------------------------------------------
a9_clk_max
findet sich nicht im linux-source (4.14), oder
https://www.kernel.org/doc/Documentatio ... meters.txt
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Tintom
Moderator
Beiträge: 3029
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von Tintom » 26.05.2018 13:17:37

Joe58 hat geschrieben: ↑ zum Beitrag ↑
26.05.2018 11:27:33
Hallo,

in meiner Kernel Konfig gibt es nur: CONFIG_CMDLINE="" und da habe ich die Befehlszeile mit 1,5 GHz anstatt 800 MHz rein gepackt: CONFIG_CMDLINE="init=/init console=ttyS0,115200n8 hlt no_console_suspend vmalloc=256m mem=1024m logo=osd1,loaded,panel,debug hdmitx=vdacoff,powermode1,unplug_powerdown a9_clk_max=1512000000"


Aber irgendwie lässt sich der Cortex A9 davon nicht beeindrucken und taktet weiterhin nur mit 800 MHz. Es gibt in meiner Kernel Config keine weitere cmd Optionen...

hat jemand eine Idee?

MfG,

Johannes
Stammt die Zeile aus einem extrahierten Android-Image?

Joe58

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von Joe58 » 26.05.2018 13:57:38

Nee diese kommt aus dem Bootloader, aber dort ist die Befehlszeile in mehrere Strings unterterilt a9= steht halt für sich. Ich habe die Takt Frequenz genau so übernommen wie die dort im Bootloader Binary zu sehen ist.

Mein U-Boot Bootloader stellt diese wie oben genannte Befehlszeile bereit.

Was mich richtig wundert, das die Kernel Befehlszeile garnicht aktivierbar ist. CMDLINE=y gibt halt nur den string und keine Option um den zu aktivieren.

Joe58

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von Joe58 » 28.07.2018 16:29:41

Hallo,

ich habe einen 3.0.8 er Kernel und in der Kernelkonfigurationsdatei folgendes beigefügt:

Code: Alles auswählen

CONFIG_CMDLINE="init=/init console=ttyS0,115200n8 hlt no_console_suspend vmalloc=256m mem=1024m logo=osd1,loaded,panel,debug hdmitx=vdacoff,powermode1,unplug_powerdown a9_clk_max=1512000000"
Aber leider kommt keine der Kernel Befehlszeile Stings in dem Hexeditor vor.

Wie bekomme ich die Kernel Befehlszeile in das Kernel Image bei 3.0.8?

Vielen Dank,

Johannes

Joe58

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von Joe58 » 28.07.2018 20:46:31

Ich habe wie hier auf dem Bild alle Optionen an: https://www.dropbox.com/s/pwm0wragvvf03 ... e.png?dl=0

Das Ding ist, dass die Kernelkonfigurationsdatei standardmäßig nur die CONFIG_CMDLINE="meine kernel kommandline" kennt.

Das heißt CMDLINE_BOOL=y hat für den Kernel keinerlei Bedeutung. Die war auch vorher nicht in der Kernelkonfig wie z.B. CONFIG_SWAP is not set

Genau das gleiche mit CMDLINE_OVERRIDE=y die gab es auch nicht, habe ich hinzugefügt, aber die bewirkt nichts. :(

Die Befehlszeile ist zwar als String in das Image, wird aber nicht verwandt.

Ich hoffe das ist jetzt verständlich von mir erklärt.

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

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von rendegast » 28.07.2018 22:09:15

Joe58 hat geschrieben: Aber leider kommt keine der Kernel Befehlszeile Stings in dem Hexeditor vor.
Normalerweise besteht das erstellte vmlinuz-* aus komprimiertem Inhalt.
Ein direktes 'grep' kannst Du auf das unkomprimierte vmlinux ausführen.



Ein einfaches Dekomprimieren des vmlinuz-* ist nicht möglich,
bislang klappt bei mir sowas

Code: Alles auswählen

...

gcc_export() {
	KERNEL=/boot/vmlinuz-"$KERNEL_VERSION"

	POSGZ=$(xxd -c1 -l $((0x8000)) "$KERNEL" | grep -A3 ": 1f " | grep -B1 -A2 ": 8b " | grep -B2 -A1 ": 08 " | grep -B3 ": 00 " | awk '$2=="1f" {print $1}')
	POSXZ=$(xxd -c1 -l $((0x8000)) "$KERNEL" | grep -A3 ": fd " | grep -B1 -A2 ": 37 " | grep -B2 -A1 ": 7a " | grep -B3 ": 58 " | awk '$2=="fd" {print $1}')
	# soweit scheint nur eins davon ungleich non-zero
	[ "x$POSGZ" != "x" -a "z$POSXZ" = "z" ] && { POS="$POSGZ"; unzipper=gunzip; }
	[ "z$POSXZ" != "z" -a "x$POSGZ" = "x" ] && { POS="$POSXZ"; unzipper=unxz; }

	POS=${POS%:}
	KERNEL_CC_VERSION=$(dd if="$KERNEL" bs=$((0x$POS)) skip=1 2>/dev/null | $unzipper -c 2>/dev/null | strings | egrep -m1 -o "gcc version ..." | cut -d" " -f3)

export KERNEL_CC="gcc-$KERNEL_CC_VERSION"

...
Falls sich die Struktur ändert, Komprimierungs-Strings oder Blockstruktur, klappt obige Analyse nicht mehr.



Weiterhin braucht es evtl. noch CONFIG_CMDLINE_OVERRIDE, damit NUR! die eingebaute cmdline zum Tragen kommt.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Joe58

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von Joe58 » 28.07.2018 22:52:29

@rendegast

Ja CONFIG_CMDLINE_OVERRIDE=y ist ebenfalls im Einsatz. Aber dennoch funktioniert es nicht.

Ich schaue nicht in vmlinuz nach, sondern in dem U-Boot Kernel Image, welches ich auspacke indem ich oben die 64 Bytes U-Boot Image Header ausschneide und dann das lzma Archiv unlzma, dann sehe ich alle Stings, weil das CPIO Archiv nach einer alten Methode verpackt ist wo man auch alle Stings sieht.

Ja die Befehlzeile befindet sich im Image, schreibe ich in der Kernel Konfigurationsdatei CONFIG_CMDLINE_OVERRIDE="Debian ist eine coole Linux/GNU Distribution", so steht genau der String im U-Boot Image.

Ich verstehe einfach nicht warum CONFIG_CMDLINE_BOOL=y und CONFIG_CMDLINE_OVERRIDE=y keinerlei Funktion zeigen. In einem 3.0.8er sind diese Funktionen doch schon verfügbar??

Das kann nicht sein... hier nochmal das Archiv: http://www.intenso.de/multimedia/treiber/1374477316.zip

Ich nutze die GPL_BOARD_defconfig /customer/yf_configs wie man sehen kann gibt es per Standard nicht CONFIG_CMDLINE_BOOL und CONFIG_CMDLINE_OVERRIDE. Weil beide nicht mit is not set in der Konfig Datei verfügbar sind.

?

Joe58

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von Joe58 » 29.07.2018 12:04:42

Meine Güte schwierige Geburt.

Also grep CMDLINE gemacht und die .config stach mir ins Auge. Das die .config Datei mehr Konfigurationsvielfalt als das Muster GPL_BOARD_defconfig hätte ich nie gedacht!

Code: Alles auswählen

    0.000000@0] Ignoring tag cmdline (using the default kernel command line)
Die Optionen waren nur in der .config und nichtmal in meiner GPL_BOARD_defconfig Konfigurationsdatei verfügbar:

Code: Alles auswählen

  Kernel command line type
  > 1. Use bootloader kernel arguments if available (CMDLINE_FROM_BOOTLOADER)
    2. Extend bootloader kernel arguments (CMDLINE_EXTEND)
    3. Always use the default kernel command string (CMDLINE_FORCE) (NEW)
  choice[1-3]: 3

Hey mein Tablet ist frisiert mit einem custom Kernel!!!! Ihr seid so geil das ihr mir helft. :D Danke!! Ohne eure Hilfsbereitschaft hätte ich schonlängst den Kopf in den Sand versteckt. :))

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

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von rendegast » 29.07.2018 14:16:40

Aua, viel zu spät.



------------------------------------------------------------------------------
Dieses Archiv ist ein ungemein verpatchter 3.0.8.

Nach einem 'ARCH=arm make GPL_BOARD_defconfig',
*CMDLINE* gibt es nur in arch/arm/Kconfig:
CMDLINE_EXTEND [=n]
CMDLINE_FORCE [=n]
CMDLINE [=]
CMDLINE_FROM_BOOTLOADER [=n] (=y ist default)

Kein
CMDLINE_BOOL
CMDLINE_OVERRIDE
somit können diese auch nichts bewirken.


Passabel wäre
CMDLINE="........"
CMDLINE_FORCE=y
Zu setzen zBsp. per 'ARCH=arm make menuconfig'.
Die beiden anderen Optionen werden dann zu "is not set", Bsp.:

Code: Alles auswählen

$ grep CMDLINE .config
CONFIG_CMDLINE="init=/blafoo abcde"
# CONFIG_CMDLINE_FROM_BOOTLOADER is not set
# CONFIG_CMDLINE_EXTEND is not set
CONFIG_CMDLINE_FORCE=y
# CONFIG_MTD_CMDLINE_PARTS is not set
Ob es mit CMDLINE_EXTEND funktioniert hängt davon ab, wie die Optionen ausgewertet werden.




---------------------------------------------
Hier unter einem stretch mit Debiancrossbuild-essential-armel kann ich bei einem Kernel 4.x machen
ARCH=arm make [........._]defconfig',
ARCH=arm make
Bei dem Archiv oder einem vanilla 3.0.8 klappt nur das config, das Kompilieren hängt an einer fehlenden compiler-gcc6.h.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Joe58

Re: Kernelseitige -Befehlszeile? Weniger vom Bootloader?

Beitrag von Joe58 » 29.07.2018 17:54:11

Okay der Kernel ist also ungünstig. Gut das wir das gelöst bekommen haben. Nebenbei ich habe diese Kconfig Dateien natürlich des öfteren gesehen, aber dessen Zweck habe ich nie hinterfragt. :D

Momentan habe ich nur noch (endlich bin ich soweit) Probleme mit der Kamera. Diese zeigt nur grün an trotz des richtigen Treibers. Aber da eröffnet ich dann ein neues Thema und hoffe das Beste.

MfG,

Johannes

Antworten