Saya ingin menulis driver perangkat Linux untuk beberapa perangkat perangkat keras nyata. Periferal Raspberry Pi apa yang pas? Pada dasarnya saya membutuhkan yang berikut ini:
Itu harus cukup kecil untuk pemula (paling sedikit beberapa bulan, beberapa minggu lebih baik).
Lembar data harus tersedia. Pada awalnya saya berpikir tentang adaptor USB-Ethernet, tetapi sepertinya memiliki datasheet yang sangat terbatas.
Ada ide? Mungkin sesuatu seperti membuat konsol serial berfungsi di atas GPIO?
Jawaban:
Mungkin sulit untuk belajar driver menulis ketika berinteraksi dengan perangkat yang rumit dan / atau bus yang rumit. Karena itu saya akan merekomendasikan baik menggunakan beberapa perangkat sederhana dan terkenal (mengabaikan implementasi driver yang ada di kernel) seperti perangkat I²C / SPI yang biasanya digunakan dengan mikrokontroler. Misalnya Anda dapat menemukan perangkat apa pun yang "didukung" oleh komunitas Arduino (artinya ada perpustakaan / dokumentasi untuknya) dan coba gunakan dengan RaspberryPi.
Jika itu tidak cukup atau Anda tidak ingin membeli terlalu banyak perangkat keras, Anda dapat membuatnya sendiri. Hanya mendapatkan beberapa mikrokontroler (seperti atmega atau sesuatu), buat program untuk itu menjadi beberapa perangkat dan kemudian coba berinteraksi dengannya menggunakan driver Linux. Dengan cara ini Anda dapat dengan mudah membuat program yang akan meniru berbagai kelas perangkat. Dan karena Anda akan menulis sendiri "firmware" Anda, itu akan membantu Anda men-debug masalah.
Anda memerlukan beberapa keterampilan pemrograman mikrokontroler untuk itu tetapi tidak sulit untuk belajar pemrograman dengan Arduino dan saya percaya itu adalah pengetahuan yang berguna untuk programmer driver.
sumber
BCM2835 ARM Peripherals
dokumen. Tetapi ingat bahwa untuk menggunakannya, Anda harus terlebih dahulu menonaktifkan driver yang ada di kernel.Secara pribadi saya akan mulai dengan perangkat yang sangat sederhana, seperti satu atau lebih LED yang terhubung langsung ke pin GPIO.
Anda dapat membeli perangkat yang siap dipasang, atau mentransfer perangkat Anda sendiri.
Alasan saya menyarankan ini adalah bahwa driver debug umumnya jauh lebih sulit daripada program normal, oleh karena itu tantangan sederhana untuk memulai bermanfaat, juga Anda kemudian dapat menggunakan kode itu sebagai metode debug untuk perangkat yang lebih kompleks (status ke pin GPIO untuk dilampirkan ke osiloskop) di mana waktu itu penting.
Jika menarik ada driver kernel untuk LedBorg tersedia di sini , sumber harus menjadi contoh yang cukup sederhana untuk mengemudi pin GPIO secara berkala.
sumber
"Perangkat" paling sederhana yang dapat Anda gunakan untuk menulis driver perangkat keras (jika pengembangan driver perangkat keras adalah hal Anda) juga dapat sesederhana LED (saya menambahkan tanda kutip karena secara teknis LED bukan perangkat tetapi masih berupa perangkat keras) seperti yang disarankan oleh @PiBorg.
Pilihan lain adalah beberapa perangkat / komponen yang mudah-antarmuka seperti photoresistor, sensor inframerah pasif (pendek: PIR), sensor suhu, kipas PC (lebih disukai kipas 4-kawat yang memungkinkan Anda tidak hanya memantau tetapi juga mengontrol RPM), matriks LED dot dan sebagainya. Pada dasarnya perangkat sederhana semacam itu akan memungkinkan Anda untuk memiliki minimum pada perangkat keras (sehingga Anda dapat melihat dan menyentuh apa yang sebenarnya telah Anda capai) dan pada saat yang sama Anda dapat belajar tentang banyak topik yang digunakan untuk perangkat yang jauh lebih kompleks di mana kompleksitasnya sebagian besar berasal dari protokol yang mereka gunakan.
Perlu diingat juga bahwa Anda tidak perlu melakukan penggalian lebih jauh ke dalam modul kernel. Tentu saja jika Anda ingin melakukan itu tidak ada yang menghentikan Anda. :)
Berikut adalah contoh interfacing sensor inframerah pasif (saya akan segera mengujinya ketika PIR saya dikirim: 3). Anda dapat mengambil ini dan mulai menggali lebih dalam ke dunia kernel Linux untuk melihat bagaimana Anda bisa misalnya membuat driver kernel, yang bekerja dengan PIR.
sumber