Jak zostać programistą sterowników jądra / systemów / urządzeń? [Zamknięte]

40

Obecnie pracuję zawodowo jako inżynier oprogramowania współpracujący z systemem operacyjnym Android. Pracujemy nad zintegrowaniem naszej platformy jako natywnego demona wśród innych aspektów projektu. Pracuję przede wszystkim w Javie, tworząc aplikacje SDK i Android, ale pomagam przy platformie w C / C ++.

W każdym razie jestem bardzo zainteresowany zawodową pracą nad rozwijaniem niskiego poziomu dla systemu Linux. Nie jestem niezadowolony z mojej obecnej pozycji i będę się kręcił tak długo, jak pozwoli mi na to firma (w rzeczywistości lubię tam pracować!), Ale chciałbym pracować w tym kierunku. Pracowałem przez Linux Kernel Development (Robert Love) i The Linux Programming Interface (Michael Kerrisk) (oprócz wzmacniania moich umiejętności C przy każdej okazji) i od niechcenia przeglądałem Monster i podobne strony.

Problem, jaki widzę, polega na tym, że nie ma pozycji na poziomie podstawowym. Jak się włamać do tego pola? Za każdym razem, gdy widzę „Linux Systems Programmer” lub „Linux Device Driver Programmer”, wszystkie one wymagają co najmniej 5-7 lat odpowiedniego doświadczenia. Chcą kogoś, kto zna liny, a nie programistę na niższym poziomie (pracuję od 7 miesięcy ...).

Tak więc zakładam, że niektórzy z was na przepływie stosów pracują profesjonalnie, robiąc to, co chciałbym zrobić. Jak się tam dostałeś? Z jakich platform korzystałeś, aby tam pracować? Czy będę miał trudniejszy czas, ponieważ mam licencjatów w CSC w przeciwieństwie do inżyniera komputerowego (gdzie doświadczyliby nieco bardziej wbudowanego, asm itp.)?

EDYCJA W CELU WYJAŚNIENIA! Zdaję sobie sprawę z otwartego źródła jądra / sterowników Linuksa itp. Planuję przyczyniać się bez względu na to, gdzie jest moja codzienna praca. Jestem bardziej ciekawy, jakie rodzaje pozycji podstawowych pozwolą mi wykonać odpowiednią pracę i zarabiać za to! Dziękujemy za wszystkie dotychczasowe odpowiedzi!

folder akordeonu
źródło
6
Bardzo prosty. Linux to opensource. Po prostu postępuj zgodnie z listą programistów, napraw niektóre błędy, gdy poznasz swoje rzeczy, zacznij pisać większe rzeczy, takie jak nowe funkcje, optymalizacje, może niektóre sterowniki ...
Let_Me_Be
2
Ale zanim wybierzesz jakikolwiek obszar w Linuksie, powinieneś mieć wiedzę na temat działania Linuksa i trochę praktycznych umiejętności. Powiedzmy, że musisz mieć wiedzę na temat systemu plików Linux itp.
user29973

Odpowiedzi:

36

Piszę sterowniki urządzeń dla Linuksa dla mojej firmy i doszedłem do tego stanowiska, wiedząc najlepiej o rozwoju Linuksa w moim dziale, a oni awansowali / zatrudniali mnie do nowej roli. To był bardzo młodszy styl, więc istnieją i nie tracą nadziei!

Moja bezpośrednia rada dla ciebie to sprawdzenie, czy możesz zawęzić swoje skupienie. Programowanie jądra bardzo różni się od programowania systemu bardzo różni się od programowania sterowników urządzeń.

  1. Programiści jądra koncentrują się na interfejsach, strukturach danych, algorytmach i optymalizacji rdzenia systemu operacyjnego.
  2. Programiści systemu piszą demony, narzędzia i inne narzędzia do automatyzacji typowych lub trudnych zadań.
  3. Sterowniki urządzeń używają interfejsów i struktur danych napisanych przez programistów jądra do implementacji kontroli urządzeń i operacji wejścia / wyjścia.

Bardzo dobry programista jądra może nie wiedzieć wiele na temat opóźnień przerwań i determinizmu sprzętowego, ale będzie dużo wiedział na temat działania blokad, kolejek i obiektów Kobject. Programista sterowników urządzeń będzie wiedział, jak używać blokad, kolejek i innych interfejsów jądra, aby sprzęt działał poprawnie i szybko, ale nie będzie tak prawdopodobne, aby naprawić błąd alokacji strony lub napisać nowy harmonogram.

Wybierz więc to, co najbardziej Cię interesuje, na przykład poprzez ankietę list rozwoju lub narzędzia do śledzenia błędów i zobacz, jaki wpływ chcesz wywrzeć. Następnie wnieś wkład i zdobądź doświadczenie pracując nad tymi projektami i wysiłkami. Kiedy twoje imię / e-mail jest dołączony do kodu w głównej linii jądra, będziesz miał doświadczenie, na które możesz wskazać w CV / liście motywacyjnym dla innych pozycji :-)

Joe Friedrichsen
źródło
3
Ciekawe, ale może nie magiczna kula.
Matt Joiner
7
Magiczne pociski rzadko istnieją.
Ed S.
Dziękujemy za Twój wkład! Na razie będę pracował nad zawężeniem mojego zainteresowania (w końcu chciałbym zrozumieć wszystkie aspekty). W jakim charakterze (jeśli masz czas na ujawnienie) pracowałeś, zanim stałeś się „kierowcą” dla kierowców?
folder akordeonu
4
Wierzcie lub nie, ale byłem wsparciem technicznym dla klientów korzystających ze sprzętu i sprzedaży starających się to zrozumieć: odpowiadałem na e-maile i telefony. Ale moje dodatkowe doświadczenie w tworzeniu jądra i przestrzeni użytkownika dla Linuksa pomogło mi bardziej.
Joe Friedrichsen
3

Jestem programistą z ponad 15-letnim doświadczeniem w pracy w Motoroli i kilku innych firmach z branży zaawansowanych technologii. Mam stopień BSCE. Więc nie jestem amatorem.

To pytanie ... jak się włamać ... jest powszechne nie tylko w Linuksie, ale praktycznie w każdym obszarze specjalizacji. Inżynieria oprogramowania stała się jak medycyna w tym, że specjaliści muszą się specjalizować. Ale kiedy Twoja firma zmniejsza i zwalnia cię po 10 latach bycia specjalistą, okazuje się, że rynek pracy zmienił się i nie jesteś obecny. Firmy kiedyś nie były tak selektywne - często teraz jedynym kandydatem, który ma wszystkie umiejętności na liście życzeń, są te, które już pracują dla tej firmy lub bezpośredni konkurent! Stało się dość trudne.

Jestem teraz w tej sytuacji i choć jest ciężko, istnieje kilka strategii, które możesz wykorzystać, aby zostać zatrudnionym. Ale najpierw MUSISZ opanować technologię, ponieważ jeśli zostaniesz zatrudniony, będziesz musiał produkować. Gdy będziesz gotowy, zastanów się, co następuje:

  1. Poszukaj małej firmy na początek. Nie mogą być tak wybredni w kwestii tego, kogo zatrudniają, jak duzi faceci. Spędź tam rok lub dwa, a następnie będziesz mieć doświadczenie zawodowe w CV, aby się zakwalifikować.

  2. Rozważ zawarcie umowy, szczególnie jeśli nie pracujesz w pełnym wymiarze godzin. Firmy są znacznie bardziej skłonne do skorzystania z usług kontrahenta niż w pełnym wymiarze godzin. Ponownie, gdy masz weryfikowalne doświadczenie, aby włączyć swoje CV, otwiera drzwi.

  3. Wykonaj mały projekt lub dwa samodzielnie i stwórz portfolio, które przedstawi potencjalnym pracodawcom. Może to otworzyć drzwi do wejścia nie tylko małej firmie, ale także średniej wielkości.

Oprócz powyższego, rozważ skorzystanie z usług profesjonalnego rekrutera z firmy takiej jak Kforce, Aerotek itp. Pracodawca płaci opłatę rekrutacyjną, a rekruter pomoże ci sprzedać w sposób, którego nie będziesz w stanie zrobić sam.

W rzeczywistości „młodszy programista” z zaledwie 7-miesięcznym doświadczeniem ma ogromną przewagę nad facetem takim jak ja, gdy próbuje zostać zatrudniony do zrobienia czegoś nowego. Firmy UWIELBIAJĄ „świeże” / „nowe stopnie”, ponieważ wiedzą, że nie poprosisz o dużo pieniędzy i chętnie zrobią to, CO ZADAJĄ, w tym, jeśli to konieczne, za granicą. Firmy nie zatrudniają mnie na niższą pozycję, nawet gdybym ubiegał się o jedną, ponieważ wiedzą, że od razu będę chciał odejść na lepszą. Twoja sytuacja nie jest taka zła.

Powodzenia!

Gość
źródło