Bert schrieb:
> allerdings war das damals
> eher try&error bis es funktioniert hat...
Das ist auch der normale Weg. Die Thematik ist so verschwurbelt, dass
die meisten Bücher nicht mehr aktuell sind bis sie abgedruckt wurden.
Es gibt einige gute Bücher für das Gersamtsystem, die einem aber bei der
korrekten Integration eines Linux auf ein ARM System o.ä. wenig helfen.
Linux Driver Development for Embedded Processors - Second Edition: Learn
to develop embedded Linux drivers with kernel 4.9 LTS (English Edition)
frand ich ganz gut für die ganze Treibergeschichte.
Aber für das Zusammenstöpseln des Linux bringt das auch nur so mäßig
was.
Bert schrieb:
> - Wie konfiguriere ich U-Boot & Linux-Kernel korrekt
> - Wie setze ich die Toolchain zum bauen korrekt auf
> - Wie baue ich das Dateisystem für SD/eMMC
Es macht zwar (zumindest mir) Spaß das alles mal händisch
durchzubasteln, ist aber in den wenigsten fällen sinnvoll. Es gibt
Projekte wie buildroot und yocto, die quasi um den Flow herumgescriptet
wurden, damit man da halbwegs sinnvoll was bauen kann. Viele Hersteller
(bspw. TI) bieten z.B. für Yocto eigene Yocto layer auf github o.ä. an,
mit denen man Kernel/Uboot für ihre SoCs bauen kann.
Das ist aber auch nicht immer unfallfrei und man muss teilweise einfach
wühlen. Ich habe 2 Wochen verballert, bis ich herausgefunden hatte, dass
der MMC/SDIO Driver im Devicetree eine Referenz auf eine Spannungsquelle
haben will, da er das zum init der Karte braucht. Damit wären wir auch
schon bei der nächsten Frage:
Bert schrieb:
> - Wie konfiguriere ich die Treiber im Device-Tree korrekt
Die Kurzversion: Copy & Paste. Du bist selten der erste, der einen
gewissen SoC verwendet. Kopieren, verstehen, reinbauen sind hier die
richtigen Schritte. Oft ist die Devicetree-Konfig nur unzulänglich bis
gar nicht dokumentiert. Generische Sachen wie der Interruptcontroller
diverser ARM systeme gehen. Da findet man die entsprechende Doku. Aber
bei manch anderen Sachen muss man, wenn es nicht will durch den Treiber
Code wühlen.
Bert schrieb:
> - Evtl. einen praxis-Guide für gängige SoC-Plattformen (von zB TI, NXP,
> etc..) wie man am schnellsten zu was kommt ohne vorher tausende Seiten
> an Doku vom Bootprozess studieren zu müssen :)
Passende beispiele im Netz für deinen SoC suchen.
Ich habe einst auf einem Altera-SOC Treiber für IPs entwickelt. Sprich
VHDL in den FPGA rein und dann den Linux Treiber dafür geschrieben.
Da das kein produktivsystem war, habe ich den einfachen Weg gewählt:
- Von Altera die Beispiel SD Karte heruntergeladen (wegen dem Second
Stage bootloader, und den UBoot selbst). Das Linux darauf war für mich
nutzlos. Zu alt zu schmal.
Da es irgenwie zum Ziel gehen musste habe ich dann den Kernel
selbstgebaut (Musste ich ja eh wegen meinen Treibern). Für die SoCFPGA
Platform von Altera bspw hat der Kernel mainline schon configs und
devicetrees. Da habe ich einfach bisschen rumgepatcht, bis ich meien
Devices drin hatte.
Für das RootFS hatte ich dann gar keinen Kopf mehr und habe eiskalt
einfach das Rootfs von "Archlinux for Raspberry PI" geklaut.
-> Innerhalb eines Tages ein custom-Linux, mit dem die
Treiberentwicklung starten kann.