Tidak begitu banyak bertanya buku apa (walaupun jika Anda tahu ada panduan / tutorial yang akan membantu) tetapi apa cara terbaik untuk mulai melakukan pemrograman kernel dan apakah ada distribusi tertentu yang akan lebih baik untuk dipelajari?
Saya sebagian besar tertarik pada bagian Device Drivers, tetapi saya ingin belajar bagaimana Kernel diatur juga (Modul dan semacamnya) Saya memiliki sekitar 4-5 tahun Pengalaman dengan C / C ++ tetapi sebagian besar pengetahuan dari College (jadi itu adalah tidak suka pengalaman kerja 4-5 tahun, jika Anda tahu maksud saya)
kernel
drivers
kernel-modules
Jeff Schaller
sumber
sumber
Jawaban:
Pertama:
Untuk tahap bayi, menulis berbagai variasi pada modul "hello world", dan driver perangkat keras virtual, adalah cara terbaik untuk memulai (perangkat keras nyata memperkenalkan masalah dunia nyata yang paling dihadapi ketika Anda memiliki lebih banyak ide tentang apa yang Anda lakukan).
"Linux Device Drivers" adalah buku yang sangat bagus dan layak dimulai dengan: http://lwn.net/Kernel/LDD3/
LDD (dulu, setidaknya) melakukan latihan di mana Anda menulis driver virtual, misalnya disk RAM, dan perangkat jaringan virtual.
Kedua:
berlangganan https://lkml.org/ atau ke milis sub-sistem tempat Anda akan meretas. Bersembunyi sebentar, memindai thread, membaca ulasan kode (membalas tambalan) untuk melihat hal-hal seperti apa yang dilakukan orang tersandung atau mengambil.
Lihat apakah Anda dapat memperoleh perangkat keras (murah) untuk perangkat yang belum didukung, atau belum didukung dengan baik. Kandidat yang baik adalah NIC USB murah atau sejenisnya, periferal USB murah. Sesuatu dengan driver yang ketinggalan zaman, atau out-of-tree, mungkin ditulis vendor, mungkin untuk 2.4.x, sangat ideal, karena Anda dapat mulai dengan sesuatu yang berfungsi (sort-of), dan secara bertahap menyesuaikan / menulis ulang itu, menguji saat Anda pergi. Upaya driver pertama saya adalah untuk NIC USB Davicom DM9601. Ada driver kernel 2.4-series vendor-tertulis yang saya perlahan beradaptasi dengan 2.6. (Catatan: driver di jalur utama bukan driver saya, pada akhirnya orang lain menulis satu dari awal).
Cara lain yang baik adalah dengan melihat situs Kernel Newbies, khususnya "pembersih kernel" todo: http://kernelnewbies.org/KernelJanitors/Todo Ini adalah daftar tugas yang harus dapat ditangani oleh seorang pemula.
sumber
Ada banyak kernel yang ada.
Linux
bukan satu-satunya game di luar sana, tapi itu yang paling banyak digunakan. Beberapa orang merekomendasikanminix
kernel untuk memahami konsep sistem operasi. Saya akan menggunakan Linux 2.6.x series karena ini adalah yang paling umum dan tidak akan sia-sia untuk sesuatu (hampir) tidak ada yang menggunakan. Solaris, XNU (Mac), FreeBSD dan Dragonfly sangat menonjol. 1Temukan sesuatu yang super sederhana (port serial, usb, dll.) Dan buat itu melakukan sesuatu yang lain. Untuk tantangan tambahan, cobalah menulis modul kernel untuk sesuatu yang belum memilikinya. (Pastikan untuk google tersangka oleh pci
sudo lspci -nn
dan / atau usb idsudo lsusb
terlebih dahulu.)Pembaruan: Jangan lakukan ini secara langsung pada sistem utama Anda, gunakan mesin virtual (VM) (komputer dalam komputer) seperti yang disebutkan. VirtualBox dapat menyediakan ini dan gratis. Juga, saya tidak ingin itu tampak luar biasa, tetapi coba snapshot VM sehingga Anda dapat kembali jika ada sesuatu yang merusak VM itu sendiri.
Pembaruan 2 : Catatan tentang Git (DVCSes inc. Mercurial, fossil, bazaar, darcs) adalah ide yang bagus, kebanyakan untuk kode dan file kecil, file penting. Cobalah untuk tidak menggunakan Git untuk membuat cadangan musik, video, dan semacamnya kecuali Anda mengetahui implikasinya. ;)
sumber
Temukan modul atau driver yang ingin Anda modifikasi atau mulai dengan modul dunia null / hello world dan buatlah dari sana. Secara khusus bekerja dengan modul karena itu akan memungkinkan Anda untuk memuat, membongkar, mengkompilasi ulang dan memuat kembali kode ke kernel yang sedang berjalan. Kemudian Anda bisa masuk ke bit inti, tetapi pada dasarnya modul memiliki semua jenis dan Anda dapat melakukan hampir apa pun yang Anda suka.
Kedua, gunakan VM. Setup mesin tamu di bawah VirtualBox atau lebih dari VM dan lakukan pengujian kernel Anda di sana untuk sementara waktu. Dengan begitu Anda tidak akan membunuh sistem utama Anda ketika Anda memecahkan sesuatu, dan memulai kembali, mundur ke snapshot yang berfungsi, dll sangat mudah.
Ketiga, pelajari
git
.sumber
Seseorang sudah menyebutkan buku "Linux Device Drivers" - ini adalah sumber yang bagus, dan saya sangat merekomendasikannya juga.
Meskipun pertanyaan menyebutkan pencetusnya tidak menanyakan buku secara khusus, edisi terbaru dari buku "Memahami Kernel Linux" ( http://oreilly.com/catalog/9780596005658/ ) sangat berharga dalam mempelajari kernel Linux secara umum , dan juga berisi bagian tentang driver perangkat Linux.
sumber