Bagaimana cara menjadi programmer driver Kernel / Sistem / Perangkat? [Tutup]


40

Saat ini saya bekerja dalam kapasitas profesional sebagai insinyur perangkat lunak yang bekerja dengan OS Android. Kami berupaya mengintegrasikan platform kami sebagai daemon asli di antara aspek-aspek lain dari proyek ini. Saya terutama bekerja di Jawa mengembangkan aplikasi SDK dan Android, tetapi bisa membantu dengan platform di C / C ++.

Bagaimanapun, saya memiliki minat yang besar untuk bekerja secara profesional mengembangkan tingkat rendah untuk linux. Saya tidak bahagia dengan posisi saya saat ini dan akan bertahan selama perusahaan mengizinkan saya (sebenarnya saya cukup menikmati bekerja di sana!), Tetapi saya ingin bekerja dengan cara itu ke arah saya. Saya telah bekerja melalui Pengembangan Kernel Linux (Robert Love) dan Antarmuka Pemrograman Linux (Michael Kerrisk) (Selain memperkuat keterampilan C saya di setiap kesempatan yang saya dapatkan) dan dengan santai menelusuri Monster dan situs sejenis.

Masalah yang saya lihat adalah, tidak ada posisi entry level. Bagaimana cara masuk ke bidang ini? Setiap kali saya melihat "Linux Systems Programmer" atau "Linux Device Driver Programmer" mereka semua membutuhkan pengalaman yang relevan minimal 5-7 tahun. Mereka menginginkan seseorang yang tahu seluk beluk, bukan programmer tingkat junior (saya sudah bekerja selama 7 bulan sekarang ...).

Jadi, saya berasumsi, bahwa beberapa dari Anda di stackoverflow bekerja dalam kapasitas profesional melakukan apa yang ingin saya lakukan. Bagaimana Anda sampai di sana? Platform apa yang Anda gunakan untuk bekerja di sana? Apakah saya akan memiliki waktu yang lebih sulit karena saya memiliki sarjana saya di CSC sebagai lawan dari insinyur komputer (di mana mereka akan mengalami sedikit lebih tertanam, asm, dll)?

EDIT UNTUK KLARIFIKASI! Saya mengetahui sifat opensource dari kernel / driver linux dll. Saya berencana untuk berkontribusi di mana pun pekerjaan saya. Saya lebih ingin tahu jenis posisi entry level apa yang memungkinkan saya melakukan pekerjaan yang relevan dan mendapatkan bayaran dengan melakukannya! Terima kasih untuk semua balasan sejauh ini!


6
Sangat sederhana. Linux adalah opensource. Cukup ikuti daftar pengembangan, perbaiki beberapa bug, setelah Anda tahu barang-barang Anda, mulailah mungkin menulis hal-hal yang lebih besar seperti fitur baru, optimisasi, mungkin beberapa driver ...
Let_Me_Be

2
Tetapi sebelum memilih area mana pun di Linux Anda harus memiliki pemahaman melalui kerja Linux dan beberapa tangan. Katakanlah Anda harus memiliki pengetahuan tentang sistem file Linux dll.
user29973

Jawaban:


36

Saya menulis driver perangkat Linux untuk perusahaan saya, dan saya masuk ke posisi ini dengan mengetahui paling banyak tentang pengembangan Linux di departemen saya dan mereka mempromosikan / merekrut saya ke peran baru. Itu sangat entri gaya tingkat junior, sehingga mereka ada dan tidak kehilangan harapan!

Nasihat langsung saya untuk Anda adalah untuk melihat apakah Anda dapat mempersempit fokus Anda. Pemrograman kernel sangat berbeda dari pemrograman sistem sangat berbeda dari pemrograman driver perangkat.

  1. Pengembang kernel fokus pada antarmuka, struktur data, algoritma, dan optimisasi untuk inti sistem operasi.
  2. Pemrogram sistem menulis daemon, utilitas, dan alat lain untuk mengotomatisasi tugas-tugas umum atau sulit.
  3. Driver perangkat menggunakan antarmuka dan struktur data yang ditulis oleh pengembang kernel untuk mengimplementasikan kontrol perangkat dan IO.

Seorang programmer kernel yang sangat baik mungkin tidak tahu banyak tentang interupsi latensi dan determinisme perangkat keras, tetapi dia akan tahu banyak tentang cara kerja kunci, antrian, dan Kobjects. Seorang programmer driver perangkat akan tahu bagaimana menggunakan kunci, antrian, dan antarmuka kernel lainnya untuk membuat perangkat keras mereka bekerja dengan baik dan responsif, tetapi ia tidak akan mungkin memperbaiki bug alokasi halaman atau menulis penjadwal baru.

Jadi, pilih minat apa yang paling Anda minati, mungkin dengan mensurvei daftar pengembangan atau pelacak bug, dan lihat dampak apa yang ingin Anda buat. Kemudian, berkontribusi dan bangun pengalaman dengan mengerjakan proyek dan upaya tersebut. Ketika nama / email Anda dilampirkan ke kode di kernel utama, maka Anda akan memiliki pengalaman yang dapat Anda tunjukkan di resume / surat pengantar Anda untuk posisi lain :-)


3
Menarik, tapi mungkin bukan peluru ajaib.
Matt Joiner

7
Peluru ajaib jarang ada.
Ed S.

Terima kasih atas masukannya! Saya akan bekerja untuk mempersempit fokus saya (akhirnya saya ingin memiliki pemahaman tentang semua aspek) untuk saat ini. Dalam kapasitas apa (jika Anda ingin mengungkapkan) Anda bekerja sebelum menjadi "go to guy" untuk pengemudi?
pemegang akordeon

4
Percaya atau tidak, tetapi saya adalah dukungan teknis bagi pelanggan yang menggunakan perangkat keras dan penjualan yang berusaha memahaminya: Saya menjawab email dan panggilan telepon. Tapi pengalaman sampingan saya dalam pengembangan kernel dan lahan pengguna untuk Linux membantu saya lebih banyak.
Joe Friedrichsen

3

Saya seorang pengembang perangkat lunak dengan 15+ tahun pengalaman bekerja di Motorola dan beberapa perusahaan teknologi tinggi lainnya. Saya memiliki gelar BSCE. Jadi saya bukan seorang amatir.

Pertanyaan ini ... bagaimana menerobos ... adalah yang umum tidak hanya untuk Linux tetapi untuk hampir semua bidang spesialisasi. Rekayasa perangkat lunak telah menjadi seperti obat di mana praktisi harus berspesialisasi. Tetapi ketika perusahaan Anda mengurangi dan memulangkan Anda setelah 10 tahun menjadi spesialis, Anda menemukan pasar kerja telah berubah dan Anda tidak mutakhir. Perusahaan yang dulunya tidak selektif - seringkali sekarang satu-satunya kandidat yang memiliki semua keterampilan dalam daftar harapan adalah mereka yang sudah bekerja untuk perusahaan itu atau pesaing langsung! Ini menjadi sangat sulit.

Saya berada dalam situasi ini sekarang dan sementara ini sulit, ada beberapa strategi yang dapat Anda gunakan untuk diterima. Tapi pertama-tama, Anda HARUS menjadi ahli dalam teknologi karena jika disewa, Anda akan diharapkan untuk menghasilkan. Setelah Anda merasa siap, pertimbangkan hal berikut:

  1. Carilah perusahaan kecil untuk memulai. Mereka tidak bisa pilih-pilih tentang siapa yang mereka pekerjakan seperti halnya orang-orang besar. Luangkan satu atau dua tahun di sana dan setelah itu, Anda akan memiliki pengalaman profesional di resume untuk memenuhi syarat.

  2. Pertimbangkan kontrak, terutama jika Anda tidak bekerja penuh waktu. Perusahaan jauh lebih bersedia untuk mengambil kesempatan pada kontraktor daripada purna waktu. Sekali lagi, setelah Anda memiliki pengalaman yang dapat diverifikasi untuk memasukkan resume Anda, itu membuka pintu.

  3. Lakukan satu atau dua proyek kecil sendiri dan buat portofolio untuk dipresentasikan kepada calon pemberi kerja. Ini dapat membuka pintu untuk memasuki tidak hanya perusahaan kecil tetapi juga perusahaan menengah.

Selain hal di atas, pertimbangkan untuk menggunakan perekrut profesional dari perusahaan seperti Kforce, Aerotek, dll. Majikan membayar biaya perekrutan dan perekrut akan membantu menjual Anda dengan cara yang tidak dapat Anda lakukan sendiri.

Sebenarnya, seorang "junior programmer" dengan pengalaman hanya 7 bulan memiliki keuntungan besar dibandingkan dengan orang seperti saya ketika mencoba untuk dipekerjakan untuk melakukan sesuatu yang baru. Perusahaan MENCINTAI "fresh-out" / "lulusan baru" karena mereka tahu Anda tidak akan meminta banyak uang dan akan bersedia melakukan APA PUN YANG MEREKA ASK termasuk tugas lama di luar negeri jika diperlukan. Perusahaan tidak akan mempekerjakan saya untuk posisi junior bahkan jika saya melamar untuk posisi itu karena mereka tahu saya akan segera mencari yang lebih baik. Situasi Anda tidak seburuk itu.

Semoga berhasil!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.