Lingkungan Peretasan Kernel

22

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.

  1. 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.)

  2. 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.

  3. 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?

rajaganesh87
sumber
3
Untuk # 1, Linus sendiri menggunakan Fedora, sehingga mungkin mengatakan sesuatu. Saya tidak cukup tahu tentang topik ini untuk benar-benar memberikan jawaban, tetapi saya akan tertarik dengan apa yang dikatakan orang lain.
jonescb
1
make_kpkg berasal dari Debian, yang menjadi basis Ubuntu dan distro fav saya;)
Akun Terhapus

Jawaban:

14

Rasa pribadi saya untuk pengembangan Kernel Linux adalah Debian. Sekarang untuk poin Anda:

  1. 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:

  2. 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 .

  3. Lihat item 2. Sayangnya tidak ada metode terbaik di sini, karena setiap alat / metode memiliki pro dan kontra.

Shinnok
sumber
Terima kasih! untuk jawaban terperinci. BTW saya tertarik dengan subsistem fs dan bio di kernel. setup seperti apa yang terbaik untuk saya?
rajaganesh87
UML dan QEMU mungkin adalah cara yang harus ditempuh, karena Anda dapat dengan mudah bermain dengan sistem file tanpa biaya.
Shinnok
Tautan yang sangat bagus, hanya satu hal. Favorit saya adalah debian juga, tetapi Pengembangan Kernel dapat dibuat dengan distro apa pun. Mungkin slack adalah cara terbaik jika Anda murni karena menggunakan kernel vanilla, tetapi konfigurasi bukanlah hal yang buruk, Anda akan menemukan yang terbaik.
D4RIO
Menemukan beberapa tautan yang lebih bermanfaat: [Tautan 1] ( ibm.com/developerworks/linux/tutorials/l-kernelhack1/index.html ) [Tautan 2] ( ibm.com/developerworks/linux/tutorials/l-kernelhack2/index. html )
rajaganesh87
6

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.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3

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.

Simon Richter
sumber
Lebih baik lagi, gunakan User Mode Linux. Linux sebagai proses userland biasa.
vonbrand
0

Intinya setiap distribusi arus utama harus bekerja dengan baik untuk ini (mereka menggunakan distribusinya sendiri untuk meretasnya). Gunakan apa pun yang terasa lebih nyaman.

vonbrand
sumber