it-swarm.dev

Wie werde ich ein Kernel / Systems / Device-Treiberprogrammierer?

Ich arbeite derzeit in professioneller Funktion als Softwareentwickler mit dem Betriebssystem Android. Wir arbeiten daran, unsere Plattform als nativen Daemon unter anderen Aspekten des Projekts zu integrieren. Ich arbeite hauptsächlich in Java Entwicklung des SDK und Android Anwendungen, aber Hilfe bei der Plattform in C/C++.

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

Das Problem, das ich sehe, ist: es gibt keine Einstiegspositionen. 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 also davon aus, dass einige von Ihnen im 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 dorthin gearbeitet? Werde ich eine schwierigere Zeit haben, weil ich meine Junggesellen in CSC habe, im Gegensatz zu einem Computeringenieur (wo sie ein bisschen mehr Embedded, Asm usw. erleben würden)?

EDIT FOR CLARIFICATION! Ich bin mir der OpenSource-Natur des Linux-Kernels/der Treiber usw. bewusst. Ich plane, unabhängig davon, wo sich mein Tagesjob befindet, einen Beitrag zu leisten. Ich bin eher neugierig, welche Art von Einstiegspositionen es mir ermöglichen, relevante Arbeit zu leisten und dafür bezahlt zu werden! Vielen Dank für alle bisherigen Antworten!

40
accordionfolder

Ich schreibe Linux-Gerätetreiber für mein Unternehmen und bin in diese Position gekommen, indem ich das Beste über die Linux-Entwicklung in meiner Abteilung wusste, und sie haben mich in eine neue Rolle befördert/eingestellt. Es war sehr viel ein Einstieg im Junior-Level-Stil, also existieren sie und verlieren nicht die Hoffnung!

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

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

Eine sehr gute Kernel-Programmiererin weiß möglicherweise nicht viel über Interrupt-Latenz und Hardware-Determinismus, aber sie weiß viel über die Funktionsweise von Sperren, Warteschlangen und Kobjects. Ein Gerätetreiber-Programmierer weiß, wie Sperren, Warteschlangen und andere Kernel-Schnittstellen verwendet werden, damit die Hardware ordnungsgemäß und reaktionsschnell funktioniert. Es ist jedoch weniger wahrscheinlich, dass er einen Fehler bei der Seitenzuweisung behebt oder einen neuen Scheduler schreibt.

Wählen Sie also aus, was Sie am meisten interessiert, indem Sie möglicherweise Entwicklungslisten oder Bug-Tracker untersuchen und sehen, welche Auswirkungen Sie erzielen möchten. Tragen Sie dann bei und arbeiten Sie an diesen Projekten und Bemühungen. Wenn Ihr Name/Ihre E-Mail-Adresse 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 :-)

36

Ich bin ein Softwareentwickler mit mehr als 15 Jahren Erfahrung bei Motorola und einigen anderen High-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 jeden Spezialisierungsbereich häufig. Software-Engineering ist genau wie Medizin geworden, da sich Praktiker spezialisieren müssen. Aber wenn Ihr Unternehmen Sie nach 10 Jahren als Spezialist verkleinert und entlässt, stellen Sie fest, dass sich der Arbeitsmarkt geändert hat und Sie nicht auf dem neuesten Stand sind. Früher waren Unternehmen nicht so selektiv - heute sind häufig diejenigen, die bereits für dieses Unternehmen oder einen direkten Konkurrenten arbeiten, der einzige Kandidat, der über alle Fähigkeiten auf der Wunschliste verfügt! Es ist ziemlich hart geworden.

Ich bin jetzt in dieser Situation und obwohl es schwierig ist, gibt es ein paar Strategien, mit denen Sie eingestellt werden können. Aber zuerst MÜSSEN Sie sich mit der Technologie auskennen, denn wenn Sie eingestellt werden, müssen Sie produzieren. Wenn Sie sich bereit fühlen, beachten Sie Folgendes:

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

  2. Ziehen Sie einen Vertrag in Betracht, insbesondere wenn Sie nicht Vollzeit arbeiten. Unternehmen sind viel eher bereit, ein Risiko für einen Auftragnehmer einzugehen als Vollzeit. Sobald Sie nachweislich Erfahrung mit Ihrem Lebenslauf haben, öffnet sich wieder die Tür.

  3. Machen Sie ein oder zwei kleine Projekte selbst und erstellen Sie ein Portfolio, das Sie potenziellen Arbeitgebern präsentieren können. Dies kann die Tür öffnen, um nicht nur eine kleine, sondern auch eine mittelständische Firma zu betreten.

Darüber hinaus sollten Sie einen professionellen Personalvermittler eines Unternehmens 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 bereit sind, alles zu tun, was auch immer sie verlangen, einschließlich langer Aufenthalte in Übersee, falls erforderlich. Unternehmen werden mich nicht für eine Junior-Stelle einstellen, selbst wenn ich mich für eine beworben habe, weil sie wissen, dass ich sofort nach einer besseren suchen werde. Ihre Situation ist nicht so schlimm.

Viel Glück!

3
guest