Die Qualität eingebetteter Software oder das Durcheinander mit dem Toyota Camry im Jahr 2012

Die Qualität eingebetteter Software oder das Durcheinander mit dem Toyota Camry im Jahr 2012

Ich warne Sie gleich:Lesen Sie diesen Text nicht, wenn Ihre Nerven nicht stimmen. Es ist fast wie in den Geschichten von Stephen King. Es wird gruselig – und ziemlich viel.

Eine warnende und sehr traurige Geschichte, die mehr als sechs Jahre andauerte, ist endlich zu ihrem logischen Abschluss gekommen. Wir alle können etwas Wichtiges daraus lernen, während ich persönlich die Möglichkeit habe, hier eine Art Fortsetzung meines vorherigen Blog-Beitrags zu schreiben, da es gibt wirklich etwas zu diskutieren.

Die Geschichte begann vor sechs Jahren, als zwei ältere Damen in Oklahoma mit ihrem Toyota Camry irgendwohin fuhren, aber ihre Fahrt endete tragisch:Eine von ihnen (der Beifahrer) wurde bei einem Unfall getötet und die andere schwer verletzt.

Ihr ehrwürdiges Alter verkomplizierte den Fall und ermöglichte es den Anwälten, den Prozess viele Jahre in die Länge zu ziehen und das seltsame Verhalten des Autos auf den Fehler des Fahrers zu schieben (obwohl es nur Pech für sie war; ich kann mir nicht vorstellen, dass eine ältere Frau absichtlich beschleunigt Camry, der bei weitem kein leichtes und schnelles Auto mit einer Geschwindigkeit ist, die russische Fahrer, die diese Wagen mit weichen Sofas besitzen und sie aus irgendeinem Grund fast als „Sportwagen“ behandeln, ganz normal finden).

Das Seltsame am Verhalten des Autos war, dass es trotz der Versuche des Fahrers, es anzuhalten, unerwartet zu beschleunigen begann.

Die erste Reaktion der Anwälte von Toyota war offensichtlich:„Manchmal machen Leute Fehler beim Autofahren“.

Aber später geschah etwas Unangenehmes. Viele Fälle traten auf, als störrische Camries eine Tendenz zu unbeabsichtigter und unkontrollierter Beschleunigung zeigten. Hunderte neuer Klagen folgten. Den Fahrern die Schuld zu geben war jetzt unmöglich, und Toyota gab die Schuld… den einheimischen Fußmatten, die eine falsche Größe hatten und nicht flexibel genug waren, sodass sie das Gaspedal einklemmten, was zu einer unbeabsichtigten Beschleunigung führte.

Im Jahr 2012 zahlte Toyota insgesamt mehr als eine Milliarde Dollar aus, um Hunderte von Klagen beizulegen, obwohl einige Fälle in mehreren Bundesstaaten ungelöst blieben – zum Beispiel lehnte eine Jury in Kalifornien eine 20-Millionen-Klage eines Verwandten einer Frau ab, die dies getan hatte wurde in ihrem 2006er Camry bei einem Unfall getötet, der durch unerwartete und unkontrollierte Beschleunigung verursacht wurde.

NASA-Spezialisten waren angezogen, das seltsame Verhalten des Camry zu untersuchen, und sie brauchten 10 Monate, um alle möglichen Probleme mit dem Beschleunigungssteuerungs-Subsystem zu untersuchen. Ihre Zusammenfassung implizierte ziemlich zweideutige Schlussfolgerungen (siehe diese große PDF-Datei mit dem Bericht des NASA-Teams):

Das Forschungsteam des NESC (The NASA Engineering and Safety Center) fand zwei mögliche Ausfallszenarien (nicht im Zusammenhang mit der Mechanik …) in der ETSC-i-Drosselklappensteuerung, die eine unerwartete Beschleunigung des Fahrzeugs verursachen könnten, ohne Diagnosecodes zu generieren:das erste behandelte Szenario spezifische Fehler im Sensorsystem für die Gaspedalstellung; der zweite mit regelmäßigen Softwarefehlern im Prozessor des Beschleunigungsreglers, die vom Diagnosesystem des Autos nicht erkannt werden konnten. Das zweite Szenario impliziert ein unbeabsichtigtes Öffnen der Drosselklappe, während die Kraftstoffeinspritzung und das Zündsystem noch in Betrieb sind. Das Team fand keine direkten Beweise dafür, dass diese Fehler wirklich die Unfälle verursacht hatten, aber das bedeutete immer noch nicht, dass es nicht möglich gewesen war.

Und schließlich endete die Geschichte:Am 24. Oktober befand ein Geschworenengericht in Oklahoma Toyota für den Autounfall verantwortlich, der sich sechs Jahre zuvor ereignet hatte, und verhängte eine Strafe in Höhe von 1,5 Millionen gegen das Unternehmen.

Nachdem der Versuch beendet war, hatte die Community der Embedded-Software-Programmierer die Möglichkeit, die Daten im Zusammenhang mit der Expertise der Firmware dieses unglückseligen Drosselklappen-Steuergeräts zu veröffentlichen.

Diese Daten waren alles andere als beruhigend.

Ein Expertenteam (Sie können darüber auf der Website „EmbeddedGurus“ nachlesen) hat die Firmware der Drosselklappensteuerung überprüft und festgestellt, dass sie (buchstäblich) „ein beschämendes Beispiel für Softwaredesign und -entwicklung“ ist.

In ihren Schlussfolgerungen wiesen sie auf eine geringe Gesamtqualität des Codes hin, eine Reihe von Fehlern darin, die eine unbeabsichtigte Beschleunigung des Autos verursachen können; die generelle Architektur der Codeausführungskontroll- und Schutzsysteme sind nach dem „Kartenhaus“-Prinzip aufgebaut und schließlich das Urteil, das die Jury überzeugte – Softwarefehler in der Firmware waren der Grund für den Autounfall mit schwerwiegenden Folgen.

Bei der Untersuchung des Controllers prüften und verneinten die Experten eine Reihe von Vermutungen von Toyota, wonach die Defekte durch Hardwarefehler im Mikrocontroller NEC (Renesas) V850 verursacht worden seien – insbesondere in der Schnittstelle des externen Speichers mit Paritätsprüfung . Dass dem nicht so war, liegt ohne weiteres auf der Hand, denn der Renesas (früher bekannt als NEC) Controller ist eine Art Referenzmodell für die Autoindustrie (und auch andere Industrien) und wird daher in den unterschiedlichsten Automodellen eingesetzt die Welt hätte schon längst von einem so schwerwiegenden Fehler (der offensichtlich Speicherbeschädigung verursacht) gewusst und er wäre entweder auf Hardwareebene behoben oder zumindest vom Hersteller in Errata (einer Liste erkannter Fehler) erwähnt worden.

Unten ist ein Bild des Prozessors, der für all das Durcheinander verantwortlich ist. Es ist ein ganz gewöhnlicher kleiner eingebetteter Computer, überhaupt keine Raketenwissenschaft – nur eine solide Platine mit Komponenten, die in der Autoindustrie üblich sind (der größte Chip ist genau dieser NEC-Renesas V850-Mikrocontroller):

Die Drosselklappensteuerung ist nicht das wahrscheinlichste Element, an dem ein gefährlicher Defekt auftreten könnte. Das sollte es zumindest nicht sein. Es liest lediglich die Pedalstellung aus (oder empfängt die Werte von anderen Steuergeräten über ein Bordnetz wie CAN oder FlexRay, einem komplexeren Aufbau über CAN). Liest er die Daten selbst aus, generiert er ein CAN-Datagramm für die anderen Steuergeräte und bildet ein Steuersignal für den Schrittmotor der Drosselklappe. Und es ist natürlich in das Tempomatsystem integriert (ein System, das eine konstante Geschwindigkeit des Fahrzeugs aufrechterhält). Das ist alles. Das oben Gesagte wird durch ein riesiges Dokument zu diesem Thema bestätigt, das Toyota selbst letztes Jahr veröffentlicht hat (eine große pdf-Datei, nur für die Fans von Hardcore-Details; es ist interessant wegen der Erklärungen, an denen sich das Unternehmen letztes Jahr gehalten hat).

Nun halten Sie sich fest:Die für diese Aufgabe zuständige und als Überbau über einem Echtzeitbetriebssystem implementierte Firmware, so das Resümee der Experten, enthielt … elftausend globale Variablen . Der Code der Firmware-Implementierung trägt den jedem Programmierer wohlbekannten Namen – „Spaghetti “. Die Analyse der zyklomatischen Komplexität des Programms ergab 67 nicht testbare Funktionen , während die Schlüsselfunktion, die den Winkel der Drosselklappe ausliest, einen absolut unglaublichen Wert aufwies, was es unmöglich macht, dieses Programm nicht nur zu testen, sondern auch nur in irgendeiner Weise zu warten. Der Grad der Konformität der Software mit dem Industrie-Codierungsstandard (es gibt eine ganze Familie von Standards in der Autoindustrie namens MISRA) wird durch die Anzahl der Verstöße gegen den Standard bestimmt:In unserer Geschichte waren es 80.000 davon (Toyota hat übrigens seinen eigenen internen Standard, der nur 11 Regeln von MISRA übernimmt, während die zum Zeitpunkt der Erstellung des Codes erforderliche Mindestanzahl 93 beträgt). Außerdem ergab die Untersuchung, dass dieses komplexe System über keinen Ausfall- und Fehlerüberwachungsmechanismus verfügte. Abgesehen von diesem schönen Zustand hatte die Firmware des Controllers alle Funktionen, die für die Sicherheitswartung verantwortlich sind, durch einen einzigen Prozess implementiert. Eine weitere zu diskutierende Sache ist der Watchdog. Es ist eine seltene Komponente in Desktop-Systemen, aber ein wichtiges Merkmal in der Welt der eingebetteten Systeme. Ein Watchdog (ein Watchdog-Timer) ist ein Gerät außerhalb des Prozessors (auch wenn es auf demselben Chip implementiert sein kann), dessen Funktionsprinzip sehr einfach ist:Wenn ein Prozess den zuvor eingestellten Timer nicht auf eine bestimmte Zeit zurückgesetzt hat, dann Der Zeitgeber verursacht einen Hardware-Interrupt, um dem Prozessor einen Fehler zu melden oder einen sofortigen System-Reset einzuleiten. Die Experten stellten fest, dass der Watchdog-Timer in dieser Firmware fast nutzlos war, da das einzige, was er kontrollierte, ein Prozess war, der seltene Unterbrechungen des Watchdog-Timers handhabte, was bedeutet, dass ein Fehler, der im Handler aller anderen Unterbrechungen auftritt, jeden Prozess zulassen könnte zu laufen… etwa anderthalb Sekunden, bevor der Prozessor vom Watchdog zurückgesetzt wurde. Die Experten waren sich jedoch nicht einmal sicher, ob es nach diesem Intervall zu einem Reset kommen würde – möglicherweise wäre es überhaupt nie aufgetreten. Ein weiteres nettes Detail:Die Returncodes der meisten RTOS-Aufrufe, die Fehlermeldungen generieren sollten, wurden in der Firmware komplett ignoriert.

Lassen Sie uns nun verschiedene architekturbezogene Probleme besprechen, die auch ziemlich nett sind. Der Hauptprozessor (dieser NEC-Renesas V850, den Toyota anfangs zu Unrecht für alles verantwortlich gemacht hat) wird von einem zusätzlichen Mikrocontroller mit einer Firmware eines Drittherstellers überwacht, die außerhalb der Verantwortung von Toyota liegt. Es ist natürlich wunderbar, wenn Sie ein unabhängiges Überwachungssystem haben, aber wie kam es dazu, dass der einzige Analog-Digital-Wandler, dessen Aufgabe darin bestand, das analoge Signal der Gaspedalposition zu lesen, sowohl nicht redundant als auch darin integriert zu sein schien zusätzlicher Mikrocontroller? Ich kann mir nicht einmal vorstellen, wie das jemandem passieren könnte. Wandler dieser Klasse müssen nicht sehr präzise sein (wie präzise lässt sich das Gaspedal denn drücken?), sie sind recht günstig und etabliert; aber der Hersteller entschied sich trotzdem zu sparen und schuf damit einen äußerst gefährlichen Single Point of Failure. Eine solche intelligente Lösung wurde auf Codeebene angemessen unterstützt:Der ausfallsichere Code des überwachenden Coprozessors erwies sich als abhängig von einer vom Hauptmikrocontroller ausgeführten Funktion, deren Name aus Gründen des Geschäftsgeheimnisses verschwiegen wurde. Übrigens haben die Ingenieure dieser Funktion die unterschiedlichsten Aufgaben abgenommen – vom Pedalwinkel über die Drosselklappenwinkel-Umsetzung bis hin zur Fahrzeugsteuerung im Tempomat-Modus und sogar der Diagnose.

Ich bin ehrlich zu Ihnen – als ich die Originalpapiere las und den Absatz über elftausend globale Variablen las, die in der Firmware verwendet werden, war ich etwas begeistert. Jeder einzelne falsche Zustand, der von allen Prozessen in einem Echtzeitsystem geteilt wird, ist an sich schon ein großes Problem. Vor diesem Hintergrund möchte ich Sie daran erinnern, worüber ich letztes Mal geschrieben habe.

Zweifellos waren diejenigen, die diesen seltsamen Code für Toyota geschrieben und eine so exotische Prozessorarchitektur entworfen haben, keine Studenten oder unerfahrenen Angestellten. Natürlich – und Gott sei Dank – traten diese Probleme nur bei wenigen Automodellen auf, und alle Fehler wurden gefunden, und Toyota muss die Firmware-Entwicklung und -Tests von nun an ernsthaft verbessern, als Folge all dieser Albträume (es gibt spezielle Mitarbeiter in Unternehmen, deren Job ist Reputationsmanagement – ​​nun, ich würde die Leute, die diesen Job für Toyota machen, nicht beneiden).

Aber wir sollten dieses besondere Beispiel im Lichte des IoT (Internet of Things) nicht vergessen, das sich schnell in alle Richtungen ausbreitet. Ich hoffe, die Hersteller ignorieren das nicht. Das werden sie schließlich nicht können – denn der Skandal hat auf der ganzen Welt für Aufsehen gesorgt.

Mit freundlichen Grüßen

Andrey Zubinskiy

Dieser Artikel wurde ursprünglich veröffentlicht auf der Website „Kompyuternoe Obozrenie“; kopiert und übersetzt mit Genehmigung der Redaktion. Kompyuternoe Obozrenie