Saya ingin memahami kode kernel linux, dan saya telah mengalaminya tetapi saya tidak dapat merasakan sepenuhnya apa yang terjadi (saya berkonsentrasi pada bagian jaringan dari kernel linux), jadi siapa pun di antara Anda dapat menyarankan yang baik praktik membaca kode C (atau bahasa lainnya) secara umum dan khusus untuk bagian jaringan dari kernel linux. Terima kasih sebelumnya
c
linux-kernel
davidhaskins
sumber
sumber
Jawaban:
Jika Anda perlu belajar C dengan membaca terlebih dahulu, maka kernel Linux tidak akan memulai: ini adalah program tingkat rendah yang agak tidak biasa (meskipun saya merasa terstruktur dengan baik).
Sebaliknya, lihat kode sumber untuk beberapa program utilitas BSD, misalnya yang ada di OpenBSD . Bacalah manualnya untuk mendapatkan spesifikasi program semi-formal dan tingkat tinggi.
Ambil salinan Bacaan Kode Spinellis dan / atau Praktek Pemrograman Kernighan dan Pike .
Terakhir, bacalah buku bagus tentang Unix atau Linux kernel internal dan mulailah membaca kernel. (Saya menemukan Desain Sistem Operasi Unix oleh Maurice J. Bach (sekitar 1986) masih menjadi awal yang baik, bahkan untuk Linux.)
sumber
Apa yang saya kagumi ketika saya mencoba melakukan hal yang sama (yang ingin Anda lakukan) adalah menemukan begitu sedikit komentar yang relevan (jika ada) dalam kode yang sedemikian rumit.
Dokumentasi harus berupa kode, benar, tetapi fitur komentar ada dalam bahasa pemrograman C karena suatu alasan.
Jika mereka telah dihapus, itu mungkin juga karena suatu alasan: untuk menjauhkan Anda darinya.
Saya dengan tulus meragukan bahwa semua pengembang kernel harus bekerja pada basis kode yang telah dibersihkan ini dan pandangan saya tentang hal itu adalah (setidaknya) penulis dari setiap "fitur" kernel yang diberikan (seperti epoll, demi diskusi) tetap tersimpan versi pribadi dari kode DENGAN semua komentar yang hilang.
Mengapa saya percaya ini?
Salah satu pengembang kernel terkemuka, mencoba meyakinkan saya untuk merilis kode sumber server G-WAN sebagai open-source, menyarankan saya untuk "membuatnya sesulit mungkin untuk membaca".
Dia menambahkan bahwa taktik ini bekerja luar biasa untuknya selama beberapa dekade pada semua proyek "open-source" -nya.
Menjaga Anda tetap pada bagian penting dari proyek "open-source" yang banyak digunakan jelas menciptakan peluang ketika pendapatan Anda secara eksklusif berasal dari konsultasi.
Jadi, kembali ke pertanyaan Anda, hal paling berguna yang dapat Anda lakukan untuk memahami kode ini adalah mempelajarinya langkah demi langkah dan TAMBAH komentar yang hilang.
Kemudian, secara progresif, itu akan mulai masuk akal (dan Anda akan menemukan mengapa komentar telah dihapus).
sumber
i++ // increment i by 1
Yang kadang membantu saya adalah debugging melalui kode. Visualisasi data aktual dan jalur aktual cenderung membuatnya lebih mudah dipahami bagi saya. Seperti yang ditunjukkan oleh anggota lain, kode kernel linux adalah titik awal yang sangat buruk untuk memahami c.
sumber