GNUBLIN embedded GNU/Linux
http://forum.gnublin.org/

Gnublin mit Kernel 4.x und device tree
http://forum.gnublin.org/viewtopic.php?f=4&t=512
Seite 1 von 1

Autor:  haef [ Mo 15. Feb 2016, 00:16 ]
Betreff des Beitrags:  Gnublin mit Kernel 4.x und device tree

über die letzten Wochen (bzw. Monate) habe ich mich damit beschäftigt, Gnublin mit einem aktuellen Kernel zu versorgen. Dazu gehört natürlich auch, die einzelnen Funktionseinheiten mithilfe des Device Tree zu beschreiben.

Um das Ziel zu erreichen, bin ich wie folgt vorgegangen:
1. boot loader u-boot für Gnublin (version u-boot_work-2009.11) um device tree Funktionalität modifiziert und, um einfacher boot Parameter verändern zu können, die Konfiguration in eine boot.ini Datei ausgelagert
2. Alle relevanten Treiber für Gnublin an device tree angepasst bzw. an die aktuelle API angepasst (spi, i2c, usb, rng, pwm, adc, enc28j60). Device tree Beschreibung für Gnublin LAN erstellt
3. patch für Kernel 4.4(.1) erstellt

die drei Schritte folgen in separaten Teilen über die nächsten Tage.
Ich hoffe, es gibt noch genügend Nutzer von Gnublin, damit auch andere von meiner Arbeit profitieren (ich habe 2x Gnublin v1.5 und 2x Gnublin LAN).

Grüße an die Gnublin-Community,
Hans-Frieder

Autor:  haef [ Mo 15. Feb 2016, 00:35 ]
Betreff des Beitrags:  Re: Gnublin mit Kernel 4.x und device tree

Teil 1: Anpassen des boot loaders u-boot:
boot loader u-boot für Gnublin (bzw. lpc313x) u-boot_work-2009.11 mit angehängtem Patch erweitern und per
make EA3131_config
compilieren
SD Karte für u-boot partitionieren. ich verwende z.B. bei einer 2GB Karte:
root@vanguard:~# fdisk /dev/mmcblk0

Command (m for help): p

Disk /dev/mmcblk0: 1981 MB, 1981808640 bytes
4 heads, 16 sectors/track, 60480 cylinders, total 3870720 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x36bdadb9

Device Boot Start End Blocks Id System
/dev/mmcblk0p1 8192 65535 28672 b W95 FAT32
/dev/mmcblk0p2 2048 8191 3072 df BootIt
/dev/mmcblk0p3 65536 3739647 1837056 83 Linux
/dev/mmcblk0p4 3739648 3870719 65536 82 Linux swap / Solaris

Partition table entries are not in disk order

Command (m for help): q

den u-boot boot-loader binär in die BootIt Partition schreiben (z.B. per dd)
die FAT-Partition ist für die boot-Dateien. Der Inhalt sieht bei mir so aus:
root@vanguard:~# ls -l /boot
insgesamt 4854
-rwxr-xr-x 1 root root 253 Feb 14 18:40 boot.ini
-rwxr-xr-x 1 root root 165 Dez 26 11:20 boot.old
-rwxr-xr-x 1 root root 5392 Feb 13 11:19 gnublin-lan.dtb
-rwxr-xr-x 1 root root 2547088 Feb 13 23:24 uImage-4.4.1-gnu

boot.ini sieht für device tree Nutzung beispielsweise wie folgt aus:
UBOOT-CONFIG

# Booting
fatload mmc 0 0x31000000 uImage-4.4.1-gnu
fatload mmc 0 0x30000000 gnublin-lan.dtb
setenv bootargs console=ttyS0,115200n8 root=/dev/mmcblk0p3 ro rootwait
bootm 0x31000000 - 0x30000000

für Kernel ohne device tree kann der modifizierte boot loader ebenfalls genutzt werden. Dann sieht der Inhalt z.B. so aus:
UBOOT-CONFIG

# Booting without device tree
fatload mmc 0 0x30100000 uImage
setenv bootargs console=ttyS0,115200n8 root=/dev/mmcblk0p3 ro rootwait
bootm 0x30100000

alles klar? Dann kann es im nächsten Schritt um den Kernel gehen.

Dateianhänge:
Dateikommentar: u-boot boot loader für Gnublin mit device tree unterstützung (vor Gebrauch entpacken!)
u-boot.bin-dt.gz [90.6 KiB]
66-mal heruntergeladen
Dateikommentar: Patch file für u-boot_work-2009.11, um device tree und boot.ini Funktionalität zu ergänzen
u-boot_work-2009.11-dt.diff.gz [9.19 KiB]
53-mal heruntergeladen

Autor:  haef [ Mo 15. Feb 2016, 23:03 ]
Betreff des Beitrags:  Re: Gnublin mit Kernel 4.x und device tree

Teil 2 und 3: Patch für kernel 4.4 (mit 4.4.1 erstellt).
Im Vergleich zu der Gnublin-Version für Kernel 3.3 habe ich das arch-Verzeichnis entschlackt, d.h. die board-files entfernt und durch ein generisches für LPC31xx ersetzt, und so viel wie möglich in separate Treiber ausgelagert, z.B.:
- irqchip
- i2c

Die lpc3131-spezifischen Treiber habe ich an die aktuellen APIs angepasst, z.B.
- pwm in drivers/pwm
- adc in drivers/iio/adc

Alle Gnublin-Basistreiber wurden an device-tree angepasst (wenn auch noch nicht überall komplett).
Der workaround für spi mit den GPIO-nummerierten chip-selects wurde durch device-tree unnötig. Im Gnublin-lan device-tree file gnublin-lan.dts liegt cs0 auf GPIO19 und cs1 auf GPIO11, das kann aber einfach geändert werden.
Die Umsetzung von event router (d.h. GPIO-basierten) interrupts ist noch nicht gut gelöst: Im Moment muss z.B. für spi-devices der interrupt absolut angegeben werden (d.h. 30+event). Das will ich eigentlich noch besser lösen.

Vorgehensweise:
- patch linux-4.4.1-gnublin.diff auf die Kernel-Dateien version 4.4 oder 4.4.1 anwenden
- am Besten als Start meine config-Beispieldatei als .config verwenden (zumindest sicherstellen, dass device-tree ausgewählt)
- in einer cross-compile Umgebung den Kernel für Gnublin erstellen:
- make menuconfig zum Anpassen der Konfiguration, falls gewünscht
- make uImage
- make modules
- make modules_install INSTALL_MOD_PATH=/media/wo-immer-die-sdcard-liegt
- make gnublin-lan.dtb

dann uImage und gnublin-lan.dtb nach /media/gnublin-boot kopieren. boot.ini anpassen.
booten => Viel Spaß!
Fortsetzung folgt...

Dateianhänge:
Dateikommentar: Beispiel-Konfigurationsdatei (.config)
config-4.4.1-gnu.gz [18.23 KiB]
55-mal heruntergeladen
Dateikommentar: Gnublin-patch für kernel.4.4.1
linux-4.4.1-gnublin.diff.gz [122.69 KiB]
53-mal heruntergeladen

Autor:  ttnp [ Do 25. Feb 2016, 07:32 ]
Betreff des Beitrags:  Re: Gnublin mit Kernel 4.x und device tree

haef hat geschrieben:
Ich hoffe, es gibt noch genügend Nutzer von Gnublin, damit auch andere von meiner Arbeit profitieren (ich habe 2x Gnublin v1.5 und 2x Gnublin LAN).

Grüße an die Gnublin-Community,
Hans-Frieder

Au ja, ich hatte die Hoffnung schon aufgegeben.
Kann ich irgendwie helfen?

Matthias

Autor:  haef [ Sa 27. Feb 2016, 13:30 ]
Betreff des Beitrags:  Re: Gnublin mit Kernel 4.x und device tree

Hallo Matthias,

wenn Du einfach den bootloader und Kernel testen und etwaige Probleme identifizieren könntest, das wäre super.
Welche Funktionen des Boards nutzt Du?

Hans-Frieder

Schön zu hören, dass Gnublin noch nicht tot ist!
Ich habe bisher noch keine sparsamere (nach Ersatz des ineffizienten Spannungswandlers) Plattform gefunden, die so universell ist wie Gnublin. Bei mir läuft ein Gnublin-board seit fast 3 Jahren nonstop (d.h. 24/7) zuverlässig als Monitoring-Server für Onewire-Sensoren.

Autor:  ttnp [ So 13. Mär 2016, 10:40 ]
Betreff des Beitrags:  Re: Gnublin mit Kernel 4.x und device tree

haef hat geschrieben:
Hallo Matthias,

wenn Du einfach den bootloader und Kernel testen und etwaige Probleme identifizieren könntest, das wäre super.
Welche Funktionen des Boards nutzt Du?

Hans-Frieder

Schön zu hören, dass Gnublin noch nicht tot ist!
Ich habe bisher noch keine sparsamere (nach Ersatz des ineffizienten Spannungswandlers) Plattform gefunden, die so universell ist wie Gnublin. Bei mir läuft ein Gnublin-board seit fast 3 Jahren nonstop (d.h. 24/7) zuverlässig als Monitoring-Server für Onewire-Sensoren.


Puhh, einfach.
Wenn ich mich richtig eingelesen habe, dann muss ich die Kernelsource 4.4.1 mit Deinem diff patchen und dann mit Deiner Config bauen, der Bootlader befindet sich fertig in u-boot.bin-dt.gz, richtig?

Zum Kompilieren des Kernels muss ich welche Versionen verwenden? (gcc usw.)

Matthias

Autor:  Porsrun [ Sa 1. Jul 2017, 08:44 ]
Betreff des Beitrags:  Re: Gnublin mit Kernel 4.x und device tree

Schönes Thema, vielen Dank für den Austausch.
gclub
โกลเด้นสล็อต

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/