Lieber Zuschauer, dieser Untertitel wurde automatisch generiert von YouTube und dementsprechend (sehr) fehlerhaft. Wenn du kannst, hilf uns bitte gute Untertitel zu erstellen: https://c3subtitles.de/talk/2403 Danke!
der daniel hat ja ein Vortrag
vorbereitet er beschäftigt sich viel mit
Computern mehrinrichtung hat wir aber
auch viel low level Software und
Firmware hat uns einen wunderschönen
Talk vorbereitet wo er zwei
Implementationen von corbot vergleicht
auf z unterschiedlichen Plattform die
auch demonstrieren
wird ja hallo allerseits vielen Dank für
die kurze Einleitung ich habe vorgestern
hier auch schon mal einen etwas längeren
Vortrag gehalten etwas umfänglicher über
Computer erzählt wie die so insgesamt
funktionieren und heute wollen wir da
ein bisschen konkreter dran gehen im
vorherigen Jahr habe ich hier auch schon
einmal einen Vortrag gehalten über die
risk 5 Prozessorarchitektur bzw den
Befehlssatz und jetzt habe ich hier
mitgebracht zwei
implementierungsbeispiele das eine davon
hatten wir auch schon im letzten Jahr
und dieses Jahr werde ich das noch ein
bisschen genauer ausführen ich werde
jetzt aber noch mal erst eine kleine
Einleitung geben noch mal ein bisschen
erzählen wie ist das jetzt überhaupt mit
Firmware was genau ist das orboot
Projekt und dann werde ich über die zwei
Prozessoren die ich jetzt implementiert
habe genaues erzählen wie jeweils die
Implementierung war und am Ende werde
ich einen kleinen Vergleich dazu liefern
wie verschiedene Ansätze sind überhaupt
an die Sache heranzugehen und dann noch
mal eine kleine Aussicht geben was wir
noch in Zukunft machen
können ja was ist überhaupt jetzt allbot
noch mal orboot ist erstmal ein Fork von
corboot ja das heißt also wir haben
einfach den gitmechanismus benutzt um
ein neues Repository zu
erstellen und das erste was wir gemacht
haben ist den ganzen ccode
wegzuschmeißen also erste commit in
allbot F dann alles weg aus dem ccode
und stattdessen machen wir eine neue
Implementierung in Rust Rust ist eine
relativ junge Programmiersprache noch
ist aber sehr gut schon geeignet um
gerade so Sachen wie low level
Programmierung damit zu machen oder
auchus Systemsoftware na ja und so haben
wir das halt jetzt genutzt um einfach
mal die Firmware neu
anzugehen aber jetzt will ich noch mal
kurz erzählen wie ist das überhaupt
Firmware zu entwickeln und ich habe da
jetzt schon mehrfach drüber nachgedacht
weil immer wenn ich mit Leuten darüber
rede ist das ein bisschen schwer rüber
zuubringen und mir ist neulich ein neues
Bild dazu eingefallen im Endeffekt ist f
wir so ein bisschen wie wenn wir ein
Rollenspiel anfangen zu spielen also
Leute die schon mal irgendwie an dem
Computer gemacht haben die kennen das
irgendwie muss am Anfang erstmal ein
bisschen rausfinden wie funktionieren
überhaupt auch die Sachen bei Pen and
Paper Rollen spielen ist das auch
ähnlich na ja und bei so gerade spielen
am Computer da hat man gerne mal
irgendwo so eine kleine Karte
eingeblendet und dann sieht man so ein
bisschen die eigene Umgebung dieser
Punkt auf der Karte das ist in der
Firmware Entwicklung der sogenannte
program Counter das ist oder auch
generell in der Hardware das ist einfach
die Adresse wo wir uns jetzt gerade
aktuell befinden in der Ausführung
unseres Programmcodes manchmal wissen
wir aber eigentlich gar nicht wo das ist
dann müssen wir uns irgendwie behelfen
uns diese Information wieder irgendwo
auszugeben na ja dann kann man sich oft
eine Weltkarte anschauen in so einem
Rollenspiel und kann man sehen was gibt
es so alles in dieser riesigen weiten
Welt manch sind das sogar auch mehrere
Welten und wir haben auch sowas
ähnliches konzeptuell in Hardware da
nennt sich das Memory Map das ist die
Karte sozusagen mit dem gesamten
Speicher den wir zur Verfügung hab haben
mit diesem Speicher können wir noch
neben dem Arbeitsspeicher den man halt
eher so kennt können wir auch noch
andere Dinge machen und das werde ich
später noch mal im Detail etwas
erläutern da können wir nämlich mit der
Peripherie aprechen z.B mit einer
SD-Karte oder mit einer seriellen
Schnittstelle na ja manchmal gibt es für
gerade so Computerspiele ein players
Guide wo dann irgendwo noch mal Hinweise
sind ne was es so im Spiel irgendwo zu
entdecken gibt was man vielleicht selbst
übersieht wo man irgendwo nicht
weiterkommt
und so ähnlich ist das auch mit so Chips
bzw mit Prozessoren da gibt es dann
Anleitung zu und da ist dann vollständig
erklärt was alles der Prozessor in
Features überhaupt hat wie man die
jeweils benutzt gerne gibt es da so
kleine
Programmierbeispiele das kann pseudoc
Code sein das kann auch einfach C oder
Assembly Code sein na ja aber es ist
auch so ein bisschen wie bei solchen
Spielen also diese Informationen die
müssen nicht unbedingt immer öffentlich
zugänglich sein manchmal sind auch Dinge
einfach gar nicht komentiert und dann
braucht man so ein gewisses Vorwissen
irgendwie um da konkreter rangehen zu
können das habe ich jetzt in dem Vortrag
vorgestern hier auch schon mal ein
bisschen erzählt das ist leider hat sich
das so entwickelt wir haben so komplexe
Systeme mlerweile heutzutage dass wir ja
manche Dinge auch nur noch schwierig
dokumentieren können weil sonst müsste
man immer sehr sehr viel dokumentieren
statt Dinge vorauszusetzen oder irgendwo
hin verweisen oder so deswegen habe ich
das andere Projekt gestartet mit dem ich
mal so ein Kompendium dafür bauen
will na ja und dann gibt's natürlich
noch dieses lustige Internet of things
wo schon viele Leute von gehört haben
und das vergleiche ich so ein bisschen
mit so einem MS Multiplayer Online
Rollenspiel ja das heißt also ich habe
nicht nur mein eigenes Gerät oder
vielleicht auch nicht nur meine ein oder
zwei Geräte es gibt ganz ganz viele
Geräte auf der Welt die sind alle
irgendwie verknüpft ja wie wenn wir in
einem Rollenspiel alle gemeinsam
irgendwo zusammen spielen und dann rennt
man da so rum D weiß ihr eigentlich nie
so genau ne was machen andere gerade was
ist so Diren Strategie oder so so ein
bisschen ist das auch mit Internet of
things ja man weiß nie so genau hey
werden meine Geräte gerade auch von
außen angesprochen oder so können die
vielleicht kompromittiert werden also
kann ich angegriffen werden ja ist auch
ein bisschen gefährlich dadurch deswegen
muss man da ein bisschen
aufpassen na ja und jetzt werde ich ein
slide noch mal aufgreifen dass ich
vorgestern auch schon hatte und noch mal
kurz was über singleboard Computer
erzählen m ganz wichtig ich will hier
keine Werbung machen ähm ich will
vielleicht sowas geben wie
Kaufempfehlung bzw ein bisschen erzählen
worauf sollte man achten wenn man sich
mit solchen Geräten überhaupt
beschäftigen möchte ja und wirklich was
schönes damit erleben möchte und keine
Frustration
ähm solche singleboard Computer werden
nämlich gerne mal vermarktet als Open
Source ja jetzt ist die Frage sind die
denn auch wirklich Open Source nur weil
es irgendwo drauf steht das wird im
Marketing leider gerne mal gemacht ja
das ein bisschen die Realität gedehnt
wird würden manche Leute sagen ich
versuche das jetzt auch mal so
diplomatisch zu halten
und dafür hat sich die Open Source
Hardware Alliance einfach mal Gedanken
gemacht und Kriterien aufgestellt was
bedeutet das denn überhaupt wenn
Hardware Open Source ist die haben
gesagt es müssen mindestens Anleitungen
dabei sein da müssen die ganzen
schematics bei sein also das heißt die
Schaltpläne für die Platinen es muss
dokumentiert sein wie man damit arbeiten
kann es muss eine offene Lizenz dafür
verhanden sein für Open Hardware gibt es
auch tatsächlich Lizenzen will ich jetzt
nicht drauf eingehen weiter ja und ich
habe jetzt noch hinzugefügt wir brauchen
dann entsprechend auch Quellcode dafür
damit wir mit den Sachen arbeiten können
ja ich habe ja schon erzählt so
Anleitungen die können manchmal ein
bisschen sperlicher ausfallen wenn wir
uns jetzt gleich auch an zwei Beispielen
ein bisschen genauer anschauen wie das
dann aussieht na aber ich kann teilweise
auch aus Programmcode der schon besteht
irgendwie lernen manchmal kann ich Code
wieder verwenden manchmal auch nicht und
dann muss ich den vielleicht erstmal
umarbeiten oder vielleicht einfach weil
ich in einer anderen Sprache etwas mache
übersetzen na und je mehr Code wir dann
haben und desto besser der auch
kommentiert ist desto mehr können wir
damit anfangen
und wenn man halt etwas zertifizieren
lassen möchte dann kann man das
tatsächlich auch bei der OSA bei der
openource Hardware Alliance machen ja
kann man auf certification W org einfach
mal schauen da gibt's so Formulare zum
ausfüllen und ein Prozess den man
durchlaufen
kann ja und jetzt würde ich sagen
schauen wir doch einfach mal in so ein
typisches Manual von einem Prozessor
rein und zwar genau auf so eine memory
Map eine memory Map die sieht ungefähr
so aus hier ist jetzt jetzt gerade das
datasheet bzw die das processor Manual
von dem allwinner D1 Chip der hat
bestimmte Dinge ja dazu gehören z.B hier
ein Bereich das nennt sich SRAM SRAM ist
eine Form von Arbeitsspeicher der
sogenannte static RAM der ist einfach so
da den kann ich direkt schon anfangs
benutzen da muss ich nicht erst mich
groß für irgendwo anstellen hier in dem
Beispiel sind das jetzt gerade 32
KB und hier in der Mitte steht noch die
Adresse wo das
anfängt das kann man halt wenn man ja
sich jetzt so eine Landkarte vorstellt
kann man sich einfach vorstellen wie
halt so kleine ja wenn man jetzt
irgendwo so Inseln sich halt vorstellt
da so diese kleinen Inselchen die
irgendwo eingezeichnet sind großen Ozean
so ungefähr ist das hier auch es gibt
auch einfach viele Bereiche im Speicher
wenn man jetzt hier mal ein bisschen
genauer drauf schaut die werden gar
nicht benutzt also ist quasi wie
Wasser na ja und wenn man hier ein
bisschen weiter runter geht hier werden
arbeitsspeicherregionen für bestimmte
Dinge noch mal erwähnt und dann komm
hier gewisse Bereiche wie z.B GPIO GPIO
general purpose Input und Output damit
kann ich einfach ja so einzelne Pins die
ich gerne auf solchen singlecutern
exponiert habe kann ich einfach
einschalten ausschalten ich kann die als
Eingang nehmen als Ausgang nehmen kann
ich auf verschiedene Weisen benutzen
dann gibst du einfach einen
Adressbereich mit dem kann ich dann
interagieren um genau das zu tun dazu
später noch etwas mehr jetzt gehen wir
erstmal wieder
zurück und dann schauen wir uns einfach
mal die all winner D1 an bzw was wir
erstmal so an Fakten darüber
haben es ist erstmal ein sock sock heißt
system on chip das heißt wir haben einen
Chip auf dem befinden sich sowohl der
Prozessor als auch ein bisschen
Arbeitsspeicher das was jetzt gerade im
datasheet gesehen haben das heißt dieser
interne Speicher dann gibt es da die
einzelnen perifherieteile serele
Schnittstelle die GPIO opins und einiges
mehr ja dieser tiip der wird sehr viel
noch produziert soweit ich weiß ich habe
auch selber mehrere Boards damit
es gibt von verschiedenen Herstellern
gibt es verschiedene Boards die man sich
einfach so kaufen kann auch relativ
günstig wie sieht das aus mit
Prozessorkern da ist ein Prozessorkern
drin das ist der c906 Kern das ist ein
risk 5 Prozessorkern der ist auf ein
Gigaherz getaktet und der ist sogar auch
öffentlich ja das heißt der ist auch
sogar unteriner Open Source license kann
man sich hier einfach auf giitub mal
genau anschauen ja wenn man sich ein
bisschen mit Chipdesign tooling auskennt
dann kann man das verstehen ansonsten
halt reinarbeiten dann gibt's noch einen
kleinen zweiteren core dazu das ist ein
Open risk core und der ist einfach dazu
da wenn ich Strom sparen möchte dann
kann ich einfach den anderen Prozessor
wegschalten und dann wird einfach nur
dieser kleine core noch betrieben und
der er hält dann so ein bisschen das
System und dann kann ich irgendwann
wieder den anderen core hochfahren
dieser Chip war nämlich auch z.B für
sowas wie also Multimedia Anwendung
gedacht oder so als speech assistant und
sowas ja das heißt macht das dann schon
Sinn W das Ding nicht ganze Zeit läuft
sondern halt nur wirklich dann wenn es
gerade nötig
ist ja wie sieht das aus mit der
Dokumentation dieses Manual was ich
gerade gezeigt habe ist ungefähr 1400
Seiten lang da steht sehr sehr viel drin
es gibt aber auch Sachen die stehen da
nicht drin z.B der DRAM Controller das
ist dann der höhere Arbeitsspeicher wo
ich dann mehrere Hundt oder auch mega
oder ein paar gigaby zur Verfügung habe
und die HDMI Anbindung ist da leider
auch nicht dokumentiert aber dafür sehr
viele andere
Sachen jetzt mal eine kleine Übersicht
von verschiedenen Boards die wir so zur
Verfügung haben und kaufen können ich
habe dazu im linuxsunchi.org Wiki auch
mal einiges hinterlegt z.B dieses Bild
was ich hier gemacht habe da gibt's
einmal das narbard das ist so also
Raspberry Pi form factor relativ
bekanntes dann gibt's einige Boards von
cped mit einem Modul was sie gebaut
haben und noch ein paar weitere und sehr
schön finde ich das von mangoie was ich
jetzt hier unten auch im Beispiel habe
die haben nämlich etwas gebaut das ist
im Formfaktor von dem Raspberry Pi Zero
und dann konnte ich tatsächlich einfach
was man hier auch sieht ich konnte
einfach fertige Gehäuse nehmen und dafür
auch wieder verwenden und auch hier
solche Gadgets da sind dann einfach so
kleine für so mini Spielkonsolen war das
quasi gedacht die könnte man jetzt auch
mit diesem RIS 5 Chip dann einfach
machen fand ich ziemlich cool habe ich
halt auch zum laufen gekriegt da und
habe ich auch einige Demos mitgemacht
ähm dann gibt es dieses Board hier das
ist von ciped 1 die haben hier einmal
ein Modul das ist dieses hier dann was
man hier oben jetzt sieht das sind
eigentlich zwei
Steckplätze und damit wird das Modul auf
dieses größere Board was hier außen ist
reingesteckt da sind dann hier oben die
ganzen Pins dran und so weiter mit
diesem Wort weil es einfach auch so
schön portabel ist und weil da mehrere
Knöpfe dran sind um hier firmw zu
entwickeln habe ich sch auch gerne
gearbeitet das habe ich immer wieder
mitgenommen und ja z.B halt diese Demo
hier
gemacht
das ist das normale Doc das hat ja
einmal wenn man mal dieses Modul
runternimmt dann sind da noch acht
Lötstellen drauf wo man einen
sogenannten spfleashch drauf packen kann
da kann ich bis zu 16 megb als
speicherbauschein einfach haben um meine
Firmware zu hinterlegen ansonsten könnte
die z.B von der SD-Karte gelesen werden
na ja ich habe halt diesen spyflash
hinzugefügt und konnte ich das einfach
von außen immer ansprechen und muss
nicht mit SD-Karten
hantieren dann gibt es noch das Doc pro
dieses Doc pro das ist ein kleines
bisschen größer und das hat einen
eingebauten USB seriellwandler ich Hal
das hier gerade jetzt mal hoch und da
sind auch schon 16 megb als Speicher mit
eingebaut das ist dann dieses hier da
haben wir hier rechts oben einen
usbc-anschluss dieser usbc-anschluss
hier ist für die serielle schnittcheller
kann ich einfach meinem Rechner
anschießen und dann sehe ich da die
Ausgaben von meinem Betriebssystem ja
wenn ich z.B noch gar nicht diesen HDMI
Port hier ansteuern kann dann brauche
ich ja erstmal irgendwie ein bisschen
Feedback und das mache ich d einfach
hier rüber bei dem anderen Board muss
ich mir das halt anderweitig über die
Pins rausholen geht aber auch na ja und
unter dem Modul ist halt wie gesagt ein
16 megb speicherbauschein schon
vorhanden ja wie sieht das dann aus wenn
man so ein Gerät startet ja in diesen
Chips da ist ein sogenanntes mascrome
erstmal eingebaut und dieses mcrom das
fängt erstmal an überhaupt erste
Instruktionen auszuführen und ist ossen
in den Chip das ist auch nicht
veränderbar ja das ist einfach eine
feste Schaltung die da verdrattet ist
die im Endeffekt so ähnlich ist wie halt
ja was wir irgendwo auf einem USB-Stick
kopieren können oder sowas aber halt als
feste Schaltung
m wie sich das Ganze verhält das lät
jetzt einen kleinen Teil aus einem
externen Speicher entweder halt so ein Z
Flash was ich gerade beschrieben hatte
das kann emmc sein oder auch eine
SD-Karte seht das in den SRAM Speicher
und dieser SRAM Speicher der ist jetzt
gerade 32 KB groß das heißt ich habe
nicht sehr viel um damit zu
arbeiten muss ein bestimmter Header am
Anfang sein der heißt igon der sieht
relativ simpel aus ja der ist nicht im
Manual dokumentiert aber wir haben in
der Community relativ gutes Wissen dazu
wenn wir jetzt mit einem spyflash
arbeiten wollen SD-Karte wäre ähnlich
dann müssen wir den aktiv ansprechen ja
dann müssten wir dafür jeweils SAS wie
einen Treiber haben nur in sehr kleiner
Form reicht das schon wir haben z.B
einfach nur ein lesebeefehl
implementiert
jetzt soll ich einmal kurz den Flow
beschreiben wie das in orboot aussieht
da ist das so wenn wir jetzt von einem
Flash booten dann machen wir erstmal
darüber die
arbeitsspeicherinitialisierung das haben
wir erstmal extern in einem getrennten
Repository
implementiert dann haben wir das rüber
geholt in das outut Repository selbst
haben das etwas weiter
entwickelt und dann habe ich die
payloader Stage dazugefügt und die
payloader Stage ist jetzt die nächste
stage die arbeitet dann jetzt weiter da
sind dann die Teile die nicht mehr in
dieses SRM reingepasst haben das heißt
da habe ich dann das Betriebssystem
reingelegt noch ein paar andere
Mechanismen die ich noch weiter brauchte
und dann fortgeführt und da ist auch die
erste Implementierung von einem SBI drin
was SBI genau ist das haben wir jetzt
hier mit Rust SBI als Library
implementiert erzähle ich gleich noch
mal kurz wie siah das aus mit der
arbeitsspeicherinizalisierung an sich na
wie gesagt dieser diram Controller der
ist hier gar nicht im Manual
dokumentiert da steht nur dass es den
gibt
aber es gab eine Implementierung als
Assembly Dump die hat jemand genommen
und auf die Sprache C drüber übersetzt
und ich habe dannum die cimplementierung
genommen und in Rust übersetzt das sind
jetzt bei uns ungefähr 2000 Zeilen Code
geworden die ist allerdings auch nicht
perfekt es gibt da das sind erstmal so
Funktionen wo man noch Parameter mal
reingeben muss zum Teil da müssen wir
mal gucken also wir können auch nicht
alle Boards damit jetzt perfekt nutzen
manches könnte man eigentlich auch ein
bisschen verbessern aber na ja wenn da
irgendwer Interesse dran hat sagt bitte
bescheid wir haben in der Community von
all winner da gibt's ein paar Leute die
machen mehr mit den Chips haben wir
Leute haben sich damit befasst und ein
bisschen Doku haben wir auch also wenn
man den Einstieg sucht ja also ne ich
habe erstmal mein Bestes gegeben und
habe auch die Register ein bisschen
benannt die ich da so gefunden habe
können auch Fehler mit bei sein na ja
aber wenn irgendwer da helfen möchte
bitte gerne können wir dann vielleicht
auch für andere allwinner Chips nutzen
ja wie ist jetzt der Entwicklungsstatus
also erstmal das ist der Main branch von
orbut jetzt gerade drin wir können von
einem Spy Flash Booten sd-cart habe ich
auch angefangen zu implementieren das
noch nicht ganz fertig SBI habe ich
optional gemacht das heißt man kann auch
ohne ein Supervisor binary Interface
starten mehr dazu noch mal mehr wir
unterstützen auch mehrere Bots schon wir
können starten wir können Linux starten
xv6 ein kleines Unix System nos R9 und
mal gucken dass wir auch vielleicht und
ilumos oder so dazu holen oder auch noch
andere und Adam Greg der hat z.B hier so
eine kleine Demo Implementierung macht
wo man einfach nur ein Display ansteuert
das ist eine W mal Applikation da
brauche ich gar kein Linux oder sonst
irgendwas für das ist einfach nur ein
kleines bisschen code was jetzt hier
gerade feris das das kottchen von Rust
einfach mal auf den Bildschirm
packt ja jetzt gehen wir zum Vergleich
über zum zweiten Chip den ich
implementiert habe das ist der jh7100 es
ist auch ein zock also auch ein System
on chip der wird nicht mehr weiter
hergestellt der ist aber scheinbar wie
es aussieht sehr ähnlich zu dem
Nachfolger davon der jh71 10 der ist
jetzt gerade frisch verfügbar geworden
erzähle ich gleich noch mal ein bisschen
was auch zu und wie es aussieht ist das
der gleiche diram Controller und so
weiter dort heißt also wir können viel
Code wahrscheinlich wieder
verwenden da sind zwei cors jetzt drin
von CF die heißen u74 da sind dann muss
man noch auf ein paar Sachen achten ähm
da sind da halt auch Mechanismen dass
sie miteinander reden können ja und dann
gibt's da noch einen weiteren call das
ist ein VP6 heißt der der ist wohl für
irgendwie spezielles Multimedia
processing noch gedacht oder auch
irgendwie ai processing oder so gibt's
aber jetzt auch nicht so viel Doku zu
habe ich jetzt auch nicht viel
mitgemacht also erstmal ignoriert ja
generell gibt's auch gar nicht so viel
Doku muss man dazu sagen es gibt zwar
Anleitungen wie man jetzt so Firmware
Recovery macht z.B dann gibt's ein klein
dat sheet das ist keine 140 Seiten dran
da steht aber zumindest drin wo die
Peripherie herkommen wo starfive das
selbst eingekauft hat das ist schon mal
sehr
interessant na ja was gibt es an Boards
es gab einmal das Beagle 5 Board da
wurden nur ein paar allerdings von
hergestellt und D manche Leute erstmal
als Prototyp gegeben um damit mal ein
bisschen zu entwickeln das hatten wir
auch anfänglich in orbot haben wir
erstmal wieder rausgekickt und dann kam
dieses Vision 51 also jetzt habe ich die
eins dazugefügt we das zweite jetzt
gerade gekommen ist das ist von starf
erstmal rausgegeben worden und auch mit
von risk 5 international für das
Developer Program da kann man sich
einfach anmelden und sagen hey ich
möchte gerne irgendwas Gutes mit R 5
machen kann so ein bisschen das Projekt
beschreiben und das habe ich dann auch
gemacht und ich habe gesagt ich mache
das Live ich habe dazu dann Twitch
Streams gemacht wo ich dann ungefähr
jede Woche oder alle zwei Wochen
ungefähr habe ich dann jeweils immer
einen Stream gemacht und habe dann halt
live dann orbut entwickelt erzählt was
wir gerade machen wie das funktioniert
und so hab die ganzen Sachen auch auf
YouTube hier archiviert große Einladung
sich das mal anzuschauen sieht man auch
so ein bisschen was ich so alles
zwischendurch selbst erstmal entdecken
musste ja ich habe dann zwischendurch
habe ich immer mal wieder auch revidiert
diesen Plan aufgestellt wie wir
dahinkommen von der Implementierung des
Herstellercodes zu unserer eigenen
Implementierung mit der wir dann auch
ein bisschen flexibler sind das hier so
grob der Plan ja also wir haben
angefangen hier ganz links das war so
das initiale
ja das war beim Hersteller gab es
einfach drei Komponenten da gab es
dieses second Boot dann die
Arbeitsspeicher Initialisierung dann
open SBI irgendwie zusammen mit Boot das
waren so die drei großen Stücke davon na
ja und was habe ich gemacht ich habe ja
nach und nach immer mehr zu Rust
übersetzt deswegen sind ja ein zwei
respektive drei Krabben und am Ende dann
der Pinguin wenn wir dann Linux mit
dabei haben und linuxbot implementieren
da sind wir aber noch nicht angekommen
wir sind jetzt gerade hier an dieser
Stelle reicht aber auch schon aus weil
wir trotzdem auch weiterledungs
Nachladen
können ja wie sieht hier das
bootverhalten aus das ist relativ easy
das ist zwar auch nicht wirklich
dokumentiert wir können das maschrome
hier einfach uns über Bo z.B
wegspeichern da wird ein kleiner Blob
auch in den SR geladen und ich muss aber
keinen großen her haben ich muss nur
vier bite einfach angeben mit der Größe
von dem was jetzt als nächstes kommt hab
natürlich trotzdem weil das ja in den Nr
reinpassen muss eine gewisse Begrenzung
dazu ich kann von dem spyflash einfach
laden und ich kann das über sogenanntes
mmioio machen das heißt ich muss gar
nicht aktiv mit dem spyflash reden
sondern ich kann darauf zugreifen als wä
es Arbeitsspeicher dazu noch mal mehr am
Ende muss ich auch nicht für
initialisieren großartig nur ein
bisschen ja das heißt also ich kann am
Ende einfach von einem Speicherbereich
in den anderen kopieren um weiteren Code
nachzuladen jetzt habe ich schon gesagt
wir haben Mul mehrere Prozessorkerne das
heißt ich muss ein bisschen aufpassen
dass ich jetzt nicht wenn ich auf beiden
Kernen einfach jetzt mein orbut laufen
lasse dass jetzt beide versuchen auf die
peripherieparallelle zuzugreifen also
machen wir dann einfach den einen den
lassen wir einfach nur rumloten lopen
und mit dem anderen machen wir dann
unsere eigentliche
Arbeit ja wie sieht die
arbeitsspeicherinitialisierung hierbei
aus komplizierter leider ich habe
erstmal mit einer case study angefangen
das habe ich auch in dem Livestream
gemacht habe erstmal geguckt wie
funktioniert der Hersteller Code da war
auch einiges mehr drin als n
arbeitsspeichinizalisierung
ja wir sind jetzt bei mehr als 4000
Zeilen am Ende gelandet da werden einige
Register im Code zwar dokumentiert das
ist schon mal ziemlich gut ja das heißt
da sind dann Kommentare mit bei ähm
eigens werden da hoffenweise einfach
irgendwelche Magic values
reingeschrieben wo nicht wirklich
unbeding klar ist was sie genau heißen
da ist auch kaum Logik bei und ungefähr
die Hälfte des Codes ist wahrscheinlich
eigentlich gar nicht notwendig könnte
man noch mal
überarbeiten ja dabei habe ich
zufälligerweise auch einen Back gefunden
ist jetzt wirklich nichts großartiges
ähm da wird einfach in falsches Register
reingeschrieben das heißt irgendein
random Wert ist an einer Stelle gelandet
wo es nicht landen sollte also im
Endeffekt ist das quasi ein
doppelteraback gewesen habe ich dann
auch ein isue entsprechend auf giitub
aufgemacht kan aber bisher noch keine
Antwort zurück
zu ja wie ist jetzt hier der
Entwicklungsstatus ich habe ja gerade
schon grob gesagt wir können jetzt auch
weiter zu Boot und dann einfach darüber
wieder lung starten das geht soweit die
ganze arbeitsspeicherinizalisierung die
tut ähm ich kann damit dann auch einfach
eine weitere eigene kleinees stage Laden
z.B so ich jetzt hier gemacht habe da
habe ich da einfach ganz viele CS
ausgegeben ja soweit so
gut ja jetzt will ich noch mal kurz
darauf kommen wie ist das mit
verschiedenen Ansätzen die wir hier
haben mit denen wir gearbeitet
haben ähm das eine ist wie wir mit
Peripherie sprechen und mit Peripherie
zu sprechen habe ich ja schon manualel
gerade so ein bisschen gezeigt da gibt
es so Blöcke ja also das was ähm diese
diese verschiedenen Adressbereiche sind
die bezeichnen wir jetzt einfach als
Blöcke und da sind einfach die einzelnen
Register von Peripherie mit bei jede
Peripherie hat einfach so spezielle
Register und die werden dann auch in
einem guten und vollständigen Menu
dokumentiert wofür die da sind na so ein
registerblock ist halt einfach ja
wirklich so eine Menge von Registern
gibt dann z.B einen für die gpios einen
um die clocks z.B also die Taktung
anzusteuern und so
weiter ja der Anfang davon wird dann als
basisregister bezeichnet und den Rest
den kann man dann einfach als Offsets
dazu angeben das heißt man kann das
relativ zu dieser anfangsadresse dann
betrachten das heißt man kann das dann
noch andere auf andere Chips übertragen
W man das einmal gemacht hat wenn die
diese gleichen Blöcke
benutzen so ungefähr sieht das dann aus
man definiert halt so ein basisregister
Ja und jedes weitere Register wird dann
als einfach eine Addition auf dieses
basisregister
bezeichnet soweit so klar mm das Memory
Map input output heißt dann ich kann
jetzt um so ein eine anzusprechen kann
ich über einen Zugriff auf den Speicher
einfach ja die Register verändern ja das
sieht im schreibfall relativ einfach aus
also wenn wir jetzt was updaten wollen
dann lesen wir erst ein Register rein
machen dann unsere Änderung drauf und
schreiben das dann wieder zurück das
sieht dann so aus ja es gibt hier read
vol Teil heißt das jetzt hier in Rust
darüber lese ich dann den Wert ein Pack
dann eine Maske drauf und schreib das
ganz mit wi voler Teil wieder zurück
na ja und dann gibt's aber noch den
anderen Ansatz und das kommt aus der
Rust embedded working group das nennt
sich Pack bzw hell und was ist so ein
Pack das kann man generieren aus einem
sogenannten
SVD es gibt für den D1 Chip gibt es
unter anderem ein Pack das ist sehr sehr
gut heißt da hat jemand schon mal so
eine SVD Datei geschrieben da ist
einfach genau das gleiche was auch in
der Anleitung mit drin steht das schön
einfach die ganzen en basisadressen was
Einzel Bitz darin bedeuten und so weiter
steht alles drin dann wird Rust Code
generiert den kann ich mir jetzt dann
entsprechend auch auf der Rust Doku
Seite
anschauen ja und dann habe ich hier so
ein kleines Schichtenmodell dazu wenn
ich jetzt mit einem Pack arbeite und
dann heißt das ich habe einmal hier
jetzt hier in der Abbildung unten das
ist auch aus der Doku von Rust embed da
habe ich mein per Access crate darüber
kann ich jetzt meine Treiber
implementieren ja und darüber meine
Applikation und genau das machen wir
halt auch in orbut das sind einfach
unsere drei Schichten sozusagen wir
versuchen das aber gering zuen also ich
habe jetzt deswegen hier auch Treiber
nur in Anführungszeichen weil wir
eigentlich gar nicht wirklich groß
Treiber
schreiben ja wie gesagt die können auch
solchen SVD Dateien generiert werden
bestimmtes Format will ich jetzt auch
nicht zu sehr drauf eingehen kann man
noch mal
nachschauen ja wenn man jetzt so ein
Pack benutzt statt halt gerade mit
diesen direkten Funktion n mit den
Pointer arbeiten dann sieht das so aus
wir nutzen nicht R volatile sondern wir
rufen eine semantische Funktion auf z.B
jetzt hier gerade ich sag jetzt ich
möchte mit GPO sprechen ich möchte den
und den Port haben mchte jetzt den im
outputmodus nutzen und dann setze ich
den Pin jetzt einfach auf hoch und damit
kann ich z.B eine LED
Einschalten ja je nachdem wie die
Schnittstelle so ist und was ich auch
für Register habe kann es auch sein dass
ich so ein sogenanntes writer Interface
habe ja jetzt jetzt hier z.B ein
Beispiel um die clocks zu steuern da
habe ich da einfach eine Funktion die
ich noch mal mit
reingebe ja in risk 5 gibt es noch
laufzeitservices das hatte ich auch in
dem Vortrag vorgestern schon mal erzählt
die sind in der plattformspezifikation
erwähnt im Detail in der SBI
Spezifikation dann noch mal erläutert
und aufgelistet und die beschreiben
einfach so Erweiterung bzw Aufrufe die
ich dann aus einem anderen
privilegierten Modus im Prozessor machen
kann auch nicht zu sehr im Detail dazu
erstmal nur dass man das noch mal auf
dem Schirm hat die muss ich jetzt pro
Board bzw Plattform implementieren ja
und für den D1 Chip haben wir genauso
ein Implementierung deswegen können wir
da auch Linux starten weil die
Implementierung darauf angewiesen ist
das machen wir mit Rust SBI als
Programmbibliothek will ich mich noch
einmal kurz einer Frage zuwenden die
vorgestern eingegangen ist die wir
leider nicht mehr beantworten konnten da
war nämlich die Frage wie ist das mit
risk 5 weil die ja Spezifikation die
sieht vor dass halt Herstell auch eigene
Sachen einfach machen können
ähm man kann eigene Instruktion machen
ja und jetzt kann man da auch zusätzlich
noch sogenante csrs benutzen control and
status Registers das ist einfach ein
risk 5 spezifischer Mechanismus damit
kann man z.B weitere Features auf der
Plattform
freischalten na ja wenn man jetzt halt
solche custom Sachen macht als Wender
okay äh gibt äh Windows die halten das
dann leider unter Verschluss kann sein
dass der notwendig sind ja wenn ich
jetzt Halit den vollen Chip irgendwie
benutzen möchte es kann aber auch sein
ja dass ich mich gar nicht darauf
einlasse ja und gar nicht erstmal diese
custom instructions benutze sondern
einfach nur das was ich dann tatsächlich
davon brauche was kann mir in meinem
Regelfall auch erstmal
ausreichen na ja ich habe jetzt hier
noch mal eine kleine Liste mitgebracht
von drei Chips die wir auch nutzen
könnten vielleicht in Zukunft für orbot
das oberste davon finde ich interessant
das ist der bl808 da habe ich auch
mehrere Boards von ja 7110 habe ich
schon erwähnt da ist jetzt das erste an
Boards ausgeliefert worden aber leider
gibt's da nicht wirklich Doku zu so wie
ich das bisher sehe na ja und dann gibt
es noch einen weiteren Chip der auch
bald kommen wird der TH 1520 es könnte
auch sehr interessant werden ist aber
noch nicht käuflich
verfügbar ja ansonsten weitere Arbeit
m wir haben noch eine Bibliothek Layout
Flash die würden wir ganz gerne in orbut
wiederbeleben falls jemand Interesse hat
Einladung einfach mal in das orbut
Projekt reinzuschauen wir haben einen
Framework mit dem wir den ganzen Code in
orbut bauen das ist extas das auch an
anderen chinen Rust benutzt wird auch
eine Einladung da mal ein bisschen einzu
reinzuschauen ja und zum Schluss wäre es
natürlich cool auch wieder andere
prozessearchitekturen wie z.B Arm zu
unterstützen ja damit sind wir auch
schon am Ende und ich freue mich auf
Fragen die jetzt noch eingegangen
sind dann danke Daniel für den tollen
Vortrag es sind sogar Fragen eingekommen
also das Thema scheint sehr spannend zu
sein und das fängt an mit der Frage
welcher Chiphersteller ist aus deiner
Sicht am meisten Open Source Hardware
complient außer neben z.B die jetzt die
D1 Massenproduktion
herstellen also was ich
erstmal insgesamt sagen kann
grundsätzlich sind Microcontroller
Hersteller aus irgendeinem Grunde etwas
zugänglicher und dokumentieren mehr
application Prozessoren das heißt die wo
wir tatsächlich auch so unixartige
Betriebs mit einem größeren
Arbeitsspeicher und so und mit
speicherverwaltungseinheit mit einer MMU
benutzen können die sind tendenziell
eher nicht offen und gerade so die dirm
Controller die sind halt warum auch
immer selten offen es gibt tatsächlich
eine offene Implementierung von einem da
müssen wir mal gucken ob die mal
irgendein Hersteller auch tatsächlich
verwendet deswegen habe ich auch
vorgestern meinem Talk ein bisschen
versucht die Motivation zu geben einfach
auch mal eigene Sachen zu designen denn
die Möglichkeit die haben wir
tatsächlich heutzutage wir könen könnten
viel viel machen ja ja müssen wir halt
mal gucken
ansonsten ja der c906 Ken der wie gesagt
der ist komplett halt selbst offen den
kann man z.B verwenden für einige eigene
Designs ansonsten ja der D1 Chip kann
ich selbst so empfehlen ist sehr sehr
zugänglich und der bl808 der jetzt
kommt ich jetzt auch gerade noch mal
hier in die Kamera halten ich habe jetzt
auch noch dieses kleine Teil hier auch
von der Firma
cpenb da ist jetzt einfach ein kleines
Display eingebaut und eine Kamera mit
eingebaut da kann man mal gucken ich
habe schon den ersten Code hier auch
drauf ausgeführt das will ich als
nächstes dann für allbot benutzen ähm
das wäre vielleicht eine interessante
Plattform auch ja eine weitere Frage
wenn man ein funktionierendes ohbut für
den der ein Chip schon hat funktioniert
dann direkt ein gesamtes ubun System
drauf
das wenn man entsprechende dongless und
so weiter hat ja kommt jetzt ein kleines
bisschen darauf an was man mit gesamt
und System so bezeichnet also was wir
jetzt es gibt so zwei drei Sachen in der
Peripherie die glaube ich noch nicht
implementiert sind im Linux Kernel Samu
Holland kümmert sich darum die Sachen zu
abstreamen zu mainlanding Kel davon sind
sehr viele Patches auch schon gelandet
aber der Kel der jetzt gerade auf
kel.org liegt aktuell also wirklich ne
so der Head von dem Kel hat noch nicht
alle Patches drin die sind aber auf
Github auf jeden Fall einmal bei Samuel
Holland SMIL
smul smul geschrieben
in einem branch zur Verfügung der heißt
d1- all und ich habe bei mir selber in
meinem Linux fog aufg hab auch noch mal
auf sein branches basieren was selber
und darüber kann ich z.B das HDMI nutzen
über USB kann ich Tastaturen anschließen
Netzwerk habe ich darüber schon genutzt
also Ethernet habe ich über ein SPI
angeschlossen
Display auch über SVI angeschlossen ja
GP sowieso kann ich alles mögliche Veron
nutzen und ich habe da schon
verschiedene Systeme drauf ausgeführt
unter anderem ja open suuse auch obunto
kannst du dann da genauso nutzen ja open
suuse witzigerweise wenn man jetzt auf
Anekdote dazu wenn man jetzt auf
aliexpress schaut zu dem die einport li
da wird man dann ein Video finden wo
auch Screenshots von mir irgendwie drin
gelandet sind ist ganz witzig gut du
hast eben schon erwähnt preferie und
enet gibt eine weitere Frage ob wenn
Bots mit enet schon ausgestattet sind ob
man dann ein net machen kann also vom
netbot ja ja ja also zum einen erstmal
noch dazu die Anmerkung man kann über
den USBAnschluss der hier auf diesem
Board unten ist was ich auch gerade hier
gezeigt habe dieser USB-Anschluss der
kann auch über den gadgetreiber genutzt
werden aus Linux darüber habe ich z.B
auch Ethernet mir geholt das heißt ich
schließe das jetzt bei mir an meinem
Rechner an und ich kann über Ethernet
auf dieses Gerät zugreifen das heißt ich
habe jetzt eine CPU die ich über USB
anschließen kann und nutzen kann es gibt
aber aber auch ein Board wo ein
ethernetpard schon drauf ist das ist
einmal das nerjar Board das große und
dann das andere das nerjar Stu
m schaut bitte mal im sunchi Forum bzw
im Wiki sorry vorbei da habe ich die
ganzen Sachen auch dokumentiert da
gibt's diese Kategorie die1bards da sind
ja alle aufgelistet dann gibt's noch
eine letzte Frage bisher
corbot ist ja für Inel und AMD Bots
gedacht und orbut spezialisiert momentan
ja nur aufs soock ist es geplant oder
gedacht auch orbot auf Notebooks
verwendbar zu machen oder könen okay da
machen wir leider ein kleines Fass auf
also vielleicht F klein halten wenn es
geht ich halt klein also tatsächlich ist
erstmal corbut nicht für x86 per se
gedacht sondern erstmal war die Idee
überhaupt eigene Firmware zu
implementieren das ist angefangen weil
irgendwo in dem Rechenzentrum halt
Rechner nicht ging ja wir haben aber
auch Unterstützung für verschiedene
armprzessoren und da waren auch die die
allerersten Firmware Implementierung
übrigens für risk 5 drin das wird nur
leider nicht großartig publik gemacht
also ja ist ein bisschen schade leider
so gelaufen und da werden auch socks
unterstützt denn diese ganzen Sachen die
wir jetzt heute von Intel haben oder
auch von AMD haben da sind haufenweise
socks dabei die haben auf einem auf
einem Prozessor also auf einem so einem
Chip drauf haben die eine GPU drin da
haben die ihre prozessverkne drin da
haben die auch einiges an anderer
Peripherie drin na also es ist
prinzipiell alles genau das gleiche
eigentlich ob die jetzt irgendwie AMD
heißen die das machen oder ob die Firma
keine Ahnung allwinner heißt oder so ist
eigentlich vollkommen egal die machen
alle sehr sehr ähnliche Sachen
heutzutage und inbut wäre natürlich auch
interessant dann für da ein paar andere
Sachen zu unterstützen deswegen halt
wirklich die Einladung auch x86 ich habe
z.B mir selber mal ein AMD Board geholt
wo ich ein bisschen rumgedraftet habe
ich hatte schon seriellen
Output bei den aktuellen AMD Chips ist
es so dass die
arbeitsspeicherinitialisierung von
kprozessor übernommen wir das heißt ich
muss mich darum nicht kümmern und auf
der anderen Seite haben wir do schon
halt einen vollständigen Linux könen
laufen lassen Wirten nur noch kein pcci
Bus bzw PCI Express zur Verfügung da
muss man noch ein bisschen was für
machen aber wenn jemand Interesse hat
bitte Bescheid geben und sich an mich
wenden ich weiß wo man Informationen
dazu findet ja gut dann danke das war's
an Fragen aus dem Internet ja gerne und
danke
auch
[Musik]