Wie werde ich ein Programmierer für Kernel / Systeme / Gerätetreiber? [geschlossen]

40

Derzeit arbeite ich als Software-Ingenieur mit dem Android-Betriebssystem. Wir arbeiten daran, unsere Plattform als native Daemon in andere Facetten des Projekts zu integrieren. Ich arbeite hauptsächlich in Java und entwickle die SDK- und Android-Anwendungen, kann aber mit der Plattform in C / C ++ helfen.

Jedenfalls habe ich ein großes Interesse daran, Low Level für Linux professionell zu entwickeln. Ich bin in meiner jetzigen Position nicht unglücklich und werde so lange rumhängen, wie es die Firma zulässt (eigentlich arbeite ich dort sehr gerne!), Aber ich würde gerne so arbeiten. Ich habe die Linux-Kernel-Entwicklung (Robert Love) und die Linux-Programmierschnittstelle (Michael Kerrisk) durchgearbeitet (zusätzlich zur Stärkung meiner C-Kenntnisse bei jeder Gelegenheit) und gelegentlich Monster und ähnliche Websites durchsucht.

Das Problem, das ich sehe, ist, dass es keine Einstiegspositionen gibt. Wie bricht man in dieses Feld ein? Immer wenn ich "Linux Systems Programmer" oder "Linux Device Driver Programmer" sehe, benötigen sie alle mindestens 5-7 Jahre einschlägige Erfahrung. Sie wollen jemanden, der die Seile kennt, keinen Junior-Programmierer (ich arbeite jetzt seit 7 Monaten ...).

Ich gehe davon aus, dass einige von Ihnen im Bereich Stackoverflow professionell arbeiten und genau das tun, was ich gerne tun würde. Wie bist du da hin gekommen? Auf welchen Plattformen haben Sie sich dahin gearbeitet? Habe ich eine schwierigere Zeit, weil ich meine Bachelor in CSC im Gegensatz zu einem Computeringenieur habe (wo sie ein bisschen mehr Embedded, ASM usw. erleben würden)?

BEARBEITEN SIE FÜR KLARIFIKATION! Ich bin mir der OpenSource-Natur des Linux-Kernels / der Linux-Treiber usw. bewusst. Ich plane, Beiträge zu leisten, unabhängig davon, wo sich mein Tagesjob befindet. Ich bin eher neugierig, welche Arten von Einstiegspositionen es mir ermöglichen, relevante Arbeit zu leisten und dafür bezahlt zu werden! Vielen Dank für alle bisherigen Antworten!

Akkordeon Ordner
quelle
6
Sehr einfach. Linux ist Open Source. Befolgen Sie einfach die Entwicklungsliste, beheben Sie einige Fehler, nachdem Sie Ihre Inhalte kennen, und schreiben Sie möglicherweise
umfangreichere Inhalte
2
Bevor Sie sich jedoch für einen Linux-Bereich entscheiden, sollten Sie sich mit der Funktionsweise von Linux vertraut machen und einige praktische Erfahrungen sammeln. Nehmen wir an, Sie müssen Kenntnisse über Linux-Dateisystem usw. haben
user29973

Antworten:

36

Ich schreibe Linux-Gerätetreiber für mein Unternehmen und bin in diese Position gekommen, weil ich am meisten über die Linux-Entwicklung in meiner Abteilung wusste und sie haben mich in eine neue Rolle befördert / engagiert. Es war sehr viel ein Junior Level Style Eintrag, also existieren sie und verlieren nicht die Hoffnung!

Mein unmittelbarer Rat für Sie ist, zu sehen, ob Sie Ihren Fokus eingrenzen können. Die Kernelprogrammierung unterscheidet sich stark von der Systemprogrammierung und der Gerätetreiberprogrammierung.

  1. Kernel-Entwickler konzentrieren sich auf Schnittstellen, Datenstrukturen, Algorithmen und Optimierungen für den Kern des Betriebssystems.
  2. Systemprogrammierer schreiben Daemons, Dienstprogramme und andere Tools, um allgemeine oder schwierige Aufgaben zu automatisieren.
  3. Gerätetreiber verwenden die von den Kernel-Entwicklern geschriebenen Schnittstellen und Datenstrukturen, um Gerätesteuerung und E / A zu implementieren.

Eine sehr gute Kernel-Programmiererin weiß vielleicht nicht viel über Interrupt-Latenz und Hardware-Determinismus, aber sie weiß viel darüber, wie Sperren, Warteschlangen und Kobjects funktionieren. Ein Gerätetreiber-Programmierer weiß, wie er Sperren, Warteschlangen und andere Kernel-Schnittstellen verwendet, um eine ordnungsgemäße und reaktionsschnelle Funktionsweise der Hardware zu gewährleisten. Es ist jedoch unwahrscheinlich, dass er einen Fehler bei der Seitenzuordnung behebt oder einen neuen Planer erstellt.

Wählen Sie also, was Sie am meisten interessiert, indem Sie vielleicht Entwicklungslisten oder Bug-Tracker untersuchen, und sehen Sie, welche Auswirkungen Sie erzielen möchten. Tragen Sie dann bei und sammeln Sie Erfahrungen, indem Sie an diesen Projekten und Bemühungen arbeiten. Wenn Ihr Name / Ihre E-Mail an den Code in der Kernel-Hauptzeile angehängt ist, haben Sie Erfahrung, auf die Sie in Ihrem Lebenslauf / Anschreiben für andere Positionen verweisen können :-)

Joe Friedrichsen
quelle
3
Interessant, aber vielleicht kein Wundermittel.
Matt Joiner
7
Zauberkugeln gibt es selten.
Ed S.
Danke für deinen Beitrag! Ich werde vorerst daran arbeiten, meinen Fokus einzugrenzen (irgendwann möchte ich alle Facetten verstehen). In welcher Eigenschaft haben Sie gearbeitet (wenn Sie die Möglichkeit haben, dies mitzuteilen), bevor Sie zum "Go to Guy" für die Fahrer wurden?
Akkordeonordner
4
Ob Sie es glauben oder nicht, aber ich war technischer Support für Kunden, die die Hardware und den Vertrieb nutzten, um dies zu verstehen: Ich beantwortete E-Mails und Anrufe. Aber meine Nebenerfahrung in der Kernel- und User-Land-Entwicklung für Linux hat mir mehr geholfen.
Joe Friedrichsen
3

Ich bin ein Softwareentwickler mit mehr als 15 Jahren Erfahrung bei Motorola und einigen anderen Hi-Tech-Unternehmen. Ich habe einen BSCE-Abschluss. Ich bin also kein Amateur.

Diese Frage ... wie man einbricht ... ist nicht nur für Linux, sondern für praktisch alle Bereiche der Spezialisierung gebräuchlich. Software-Engineering ist zu einer Medizin geworden, auf die sich Praktiker spezialisieren müssen. Aber wenn Ihr Unternehmen nach 10 Jahren als Spezialist verkleinert und Sie entlässt, stellt man fest, dass sich der Arbeitsmarkt geändert hat und Sie nicht mehr auf dem neuesten Stand sind. Früher waren Unternehmen nicht so selektiv - heute sind häufig nur diejenigen Kandidaten auf der Wunschliste, die bereits für dieses Unternehmen tätig sind, oder direkte Wettbewerber, die über alle Fähigkeiten verfügen! Es ist ziemlich hart geworden.

Ich bin in dieser Situation jetzt und während es schwierig ist, gibt es ein paar Strategien, die Sie verwenden können, um angestellt zu werden. Aber zuerst MUSS man sich mit der Technologie auskennen, denn wenn man sie anstellt, muss man sie produzieren. Wenn Sie sich bereit fühlen, sollten Sie Folgendes berücksichtigen:

  1. Suchen Sie zunächst nach einer kleinen Firma. Sie können nicht so wählerisch sein, wen sie einstellen, wie die Großen. Verbringen Sie ein oder zwei Jahre dort und danach haben Sie die Berufserfahrung, die Sie benötigen, um sich zu qualifizieren.

  2. Ziehen Sie in Betracht, Verträge abzuschließen, insbesondere wenn Sie nicht in Vollzeit arbeiten. Unternehmen sind viel eher bereit, ein Risiko für einen Auftragnehmer einzugehen als in Vollzeit. Wiederum öffnet es Türen, sobald Sie nachweisliche Erfahrungen mit Ihrem Lebenslauf gesammelt haben.

  3. Führen Sie selbst ein oder zwei kleine Projekte durch und erstellen Sie ein Portfolio, das Sie potenziellen Arbeitgebern präsentieren können. Dies kann die Tür nicht nur für kleine, sondern auch für mittelgroße Unternehmen öffnen.

Darüber hinaus sollten Sie einen professionellen Personalvermittler von einem Unternehmen wie Kforce, Aerotek usw. in Betracht ziehen. Der Arbeitgeber zahlt die Einstellungsgebühr, und der Personalvermittler hilft Ihnen dabei, Sie auf eine Weise zu verkaufen, die Sie nicht alleine tun können.

Tatsächlich hat ein "Junior-Programmierer" mit nur 7 Monaten Erfahrung einen großen Vorteil gegenüber einem Mann wie mir, wenn er versucht, eingestellt zu werden, um etwas Neues zu machen. Unternehmen LIEBEN "fresh-outs" / "new grads", weil sie wissen, dass Sie nicht viel Geld verlangen und dazu bereit sind, WAS IMMER SIE BITTEN, einschließlich langer Aufenthalte im Ausland, falls erforderlich. Unternehmen werden mich nicht für eine Junior-Position einstellen, auch wenn ich mich für eine beworben habe, weil sie wissen, dass ich sofort nach einer besseren Auszeit Ausschau halten werde. Deine Situation ist nicht so schlimm.

Viel Glück!

Gast
quelle