Saya telah bekerja di embedded OS seperti UCOS, ThreadX. Walaupun saya memiliki kode aplikasi di Linux, sekarang saya berencana untuk mulai belajar Kernel Linux. Saya punya beberapa pertanyaan tentang lingkungan.
Yang mana adalah distro terbaik, yang memiliki alat yang mudah digunakan untuk pengembangan kernel? (sejauh ini saya telah menggunakan RHEL dan Fedora. Walaupun saya merasa nyaman dengan ini, kelihatannya Ubuntu memiliki skrip bawaan untuk kompilasi kernel yang mudah
make_kpkg
, dll.)Bisakah Anda menggambarkan pengaturan terbaik untuk debugging kernel? Saat men-debug OS tertanam lainnya, saya telah menggunakan port serial untuk membuang progres, JTAG, dll. Jenis setup apa yang digunakan oleh kernel Linux? (Apakah PC testbed saya dengan port serial sudah cukup untuk kebutuhan saya? Jika ya, bagaimana cara mengkonfigurasi kernel untuk dibuang ke port serial?) Saya berencana untuk mengarahkan pesan kernel ke konsol serial yang akan dibaca di laptop saya.
Alat apa yang terbaik untuk men-debug dan melacak kode kernel? Seperti yang disebutkan sebelumnya, apakah konsol serial satu-satunya cara? Atau segala jenis antarmuka IDE / JTAG ada untuk PC?
sumber
Jawaban:
Rasa pribadi saya untuk pengembangan Kernel Linux adalah Debian. Sekarang untuk poin Anda:
Seperti yang Anda duga, Ubuntu tidak membawa sesuatu yang baru ke kernel untuk memudahkan pengembangan afaik, terlepas dari apa yang sudah tersedia di Debian. Untuk mis make_kpkg adalah fitur Debian dan bukan Ubuntu. Berikut ini beberapa tautan untuk membantu Anda memulai tugas pengembangan Kernel Linux yang umum di Debian:
Cara termudah untuk melakukan debugging kernel menggunakan QEMU dan GDB. Beberapa tautan untuk Anda mulai:
Meskipun, Anda harus menyadari bahwa metode ini tidak dapat digunakan untuk skenario tertentu seperti debugging masalah perangkat keras tertentu dan semacamnya, yang mana Anda akan lebih baik menggunakan debugging serial fisik dan perangkat keras nyata. Untuk ini, Anda dapat menggunakan KGDB (berfungsi juga menggunakan ethernet). KDB juga merupakan pilihan yang bagus. Oh, dan omong-omong, KGDB dan KDB telah digabungkan ke dalam Kernel Linux. Lebih lanjut tentang keduanya di sini . Metode keren lain, yang bekerja luar biasa untuk masalah yang tidak terkait dengan perangkat keras, adalah menggunakan Kernel Linux mode Pengguna . Menjalankan Kernel dalam mode pengguna karena proses lain memungkinkan Anda untuk men-debug itu sama seperti program lain ( contoh ). Lebih lanjut tentang User-mode Linuxdi sini . UML adalah bagian dari Kernel Linux sejak 2.6.0, sehingga Anda dapat membangun versi kernel resmi apa pun di atas yang menjadi mode UML dengan mengikuti langkah-langkah ini .
Lihat item 2. Sayangnya tidak ada metode terbaik di sini, karena setiap alat / metode memiliki pro dan kontra.
sumber
Jika Anda mengembangkan untuk platform tertanam yang tidak didasarkan pada perangkat keras i386, Anda harus melakukan kompilasi silang. Proyek Emdebian menyediakan toolchains untuk dikembangkan untuk banyak arsitektur (ARM, m68k, MIPS, dan lainnya) pada PC (i386 atau amd64). Itu berarti di bawah Debian, Anda dapat menambahkan repositori dan menginstal apt-get toolchain untuk target pilihan Anda.
sumber
Penyelidikan JTAG memang ada, tetapi ini cukup mahal (dan perusahaan yang membangunnya memiliki kontrak eksklusif). Cara terbaik untuk men-debug kode kernel adalah memulainya dalam kvm atau qemu dengan gdbserver di dalam emulasi.
sumber
Intinya setiap distribusi arus utama harus bekerja dengan baik untuk ini (mereka menggunakan distribusinya sendiri untuk meretasnya). Gunakan apa pun yang terasa lebih nyaman.
sumber