Як стати програмістом драйвера ядра / систем / пристроїв? [зачинено]


40

В даний час я працюю на професійній посаді інженером програмного забезпечення, який працює з ОС Android. Ми працюємо над інтеграцією нашої платформи як рідного демона серед інших аспектів проекту. Я в основному працюю на Java, розробляючи додатки SDK та Android, але допомагаю в платформі на C / C ++.

Як би там не було, я маю великий інтерес працювати над професійним розвитком низького рівня для Linux. Я не нещасний у своєму нинішньому становищі і буду зависати до тих пір, поки компанія дозволить мені (фактично мені дуже подобається працювати там!), Але я хотів би працювати в цьому напрямку. Я працював за розробкою Linux Kernel (Роберт Лав) та Інтерфейсом програмування Linux (Майкл Керріск) (Окрім зміцнення своїх навичок роботи на C при будь-якій можливій можливості) та випадково переглядав Monster та подібні сайти.

Я бачу проблему, що немає позицій початкового рівня. Як один проривається в це поле? Щоразу, коли я бачу "Програміст систем Linux" або "Програміст драйверів пристроїв Linux", всі вони потребують принаймні 5-7 років відповідного досвіду. Вони хочуть, щоб хтось, хто знає мотузки, не програміст молодшого рівня (я працюю вже 7 місяців ...).

Отже, я припускаю, що деякі з вас у стаціонарному потоці працюють професійно, роблячи саме те, що я хотів би зробити. Як ти сюди потрапив? Які платформи ви використовували для роботи там? Невже мені буде складніше, тому що я маю бакалаврів в CSC на відміну від комп'ютерного інженера (де вони зазнають трохи більше вбудованих, ASM тощо)?

РЕДАКЦІЯ ДЛЯ ЗРАНЕННЯ! Я знаю про характер відкритих джерел ядра Linux / драйверів тощо. Я планую вносити внески незалежно від того, де моя денна робота. Мені цікавіше, які види позицій початкового рівня дозволять мені виконувати відповідну роботу та отримувати за це зарплату! Дякую за всі відповіді поки що!


6
Дуже просто. Linux є відкритим джерелом. Просто дотримуйтесь списку розробок, виправляйте деякі помилки, після того, як ви дізнаєтесь про свої речі, починайте, можливо, писати більші речі, такі як нові функції, оптимізації, можливо, деякі драйвери ...
Let_Me_Be

2
Але перед тим, як вибрати будь-яку область в Linux, ви повинні мати глибоке розуміння роботи Linux та деякий досвід. Скажімо, ви повинні знати знання файлової системи Linux тощо
user29973

Відповіді:


36

Я пишу драйвери пристроїв Linux для своєї компанії, і я потрапив на цю посаду, знаючи найбільше про розробку Linux у своєму відділі, і вони запропонували мені / найняли мене на нову роль. Це був дуже молодий рівень стилю, тому вони існують і не втрачають надії!

Моя негайна порада для вас - подивитися, чи зможете ви звузити фокус. Програмування ядра дуже відрізняється від системного програмування, сильно відрізняється від програмування драйверів пристроїв.

  1. Розробники ядра зосереджуються на інтерфейсах, структурі даних, алгоритмах та оптимізації для ядра операційної системи.
  2. Системні програмісти записують демон, утиліти та інші інструменти для автоматизації загальних або складних завдань.
  3. Драйвери пристроїв використовують інтерфейси та структури даних, написані розробниками ядра для здійснення управління пристроєм та вводу-виводу.

Дуже хороший програміст ядра може не знати багато про затримку переривання і апаратну детермінізм, але вона буде знати багато про те, як працюють замки, черги та Kobjects. Програміст драйвера пристрою знатиме, як використовувати замки, черги та інші інтерфейси ядра, щоб їх апаратне забезпечення працювало належним чином і реагувало, але він не може виправити помилку при розподілі сторінки або написати новий планувальник.

Отже, виберіть те, що вас найбільше цікавить, можливо, опитуючи списки розробок або відслідковуючі помилки, і подивіться, який вплив ви хочете зробити. Потім внесіть внесок і накопичіть досвід, працюючи над цими проектами та зусиллями. Коли ваше ім’я / електронна адреса додаються до коду в основній лінії ядра, ви матимете досвід, на який можете вказати у своєму резюме / супровідному листі на інші посади :-)


3
Цікава, але може не чарівна куля.
Метт Столяр

7
Чарівні кулі рідко існують.
Ред С.

Дякую за Ваш внесок! Я буду працювати над звуженням фокусу (зрештою, я хотів би зрозуміти всі аспекти) поки що. У якій якості (якщо ви розважаєтеся про дозвілля), ви працювали до того, щоб стати водієм "перейти до хлопця"?
акордеоніст

4
Вірите чи ні, але я був технічною підтримкою для клієнтів, які користувалися обладнанням і продавцями, намагаючись зрозуміти це: я відповідав на електронні та телефонні дзвінки. Але мій побічний досвід у розробці ядра та користувальницької землі для Linux допоміг мені більше.
Джо Фрідріхсен

3

Я розробник програмного забезпечення з досвідом понад 15 років, працюючи в Motorola та деяких інших високотехнологічних компаніях. Я маю ступінь BSCE. Тож я не аматор.

Це питання ... як зламатись ... є поширеним не лише для Linux, але практично для будь-якої галузі спеціалізації. Інженерія програмного забезпечення стала такою ж, як і медицина, в тому, що практикуючі повинні спеціалізуватися. Але коли ваша компанія скорочує чисельність та звільняє вас після 10 років перебування у спеціалісті, ви виявите, що ринок роботи змінився, і ви не поточний. Компанії раніше не були настільки вибіркові - часто єдиним кандидатом, який має всі навички в списку бажань, є ті, хто вже працює в цій компанії або є прямим конкурентом! Це стає досить жорстким.

Зараз я перебуваю в цій ситуації, і хоча це важко, є кілька стратегій, які можна використовувати, щоб прийняти на роботу. Але по-перше, ви ОБОВ'ЯЗКОВО стати досвідченим у технології, тому що якщо ви наймете її, ви, як очікується, будете виробляти. Як тільки ви почуваєтесь готовими, врахуйте наступне:

  1. Шукайте невелику компанію для початку. Вони не можуть бути такими вибагливими щодо того, кого наймають, як і великі хлопці. Проведіть там рік-два, і після цього ви отримаєте професійний досвід щодо резюме, щоб отримати право.

  2. Розгляньте договір, особливо якщо ви не працюєте на повний робочий день. Компанії набагато охочіше ризикнути на підрядника, ніж на повний робочий день. Знову ж таки, коли ви маєте перевірений досвід, щоб надіслати своє резюме, він відкриває двері.

  3. Зробіть невеликий проект або два самостійно і створіть портфоліо, яке представляти потенційним роботодавцям. Це може відкрити двері для входу не тільки невеликої компанії, але і середньої компанії.

На додаток до вищезазначеного, подумайте про використання професійного рекрутера від такої компанії, як Kforce, Aerotek тощо. Роботодавець сплачує плату за набір, а рекрутер допоможе продати вас так, як ви не можете зробити самостійно.

Насправді, "молодший програміст", який має лише 7 місяців досвіду, має величезну перевагу перед таким хлопцем, як я, коли намагається взяти на роботу, щоб зробити щось нове. Компанії ЛЮБИТЬ "свіжих" / "нових градів", бо знають, що ви не будете вимагати багато грошей, і будуть готові робити, ЩО ЗАПИТАТИСЯ, включаючи довгі штрихи за кордоном, якщо потрібно. Компанії не наймуть мене на посаду молодшого, навіть якщо я подав заявку на кандидатуру, бо знаю, що я буду шукати виїзду на краще. Ваша ситуація не така вже й погана.

Удачі!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.