Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Dalam fail manakah kod sumber kernel linux diletakkan?

Dalam fail manakah kod sumber kernel linux diletakkan?

青灯夜游
青灯夜游asal
2023-03-30 11:04:353579semak imbas

Kod sumber kernel Linux diletakkan dalam direktori /usr/src/linux. Komposisi kod sumber kernel: 1. direktori arch, yang mengandungi kod teras yang berkaitan dengan seni bina perkakasan yang disokong oleh kod sumber teras 2. termasuk direktori, yang merangkumi kebanyakan teras termasuk fail; mengandungi Kod permulaan teras; 4. direktori mm, mengandungi semua kod pengurusan memori;

Dalam fail manakah kod sumber kernel linux diletakkan?

Persekitaran pengendalian tutorial ini: sistem linux7.3, komputer Dell G3.

Di manakah kod sumber kernel Linux?

Kod sumber kernel Linux boleh diperolehi daripada banyak sumber. Secara umumnya, di bawah sistem Linux yang dipasang, kandungan dalam direktori /usr/src/linux ialah kod sumber kernel.

Untuk membaca kod sumber dengan lebih lancar, sebaiknya anda mempunyai pemahaman tertentu tentang pengetahuan latar belakang kod sumber terlebih dahulu.

Komposisi kod sumber kernel Linux adalah seperti berikut (diandaikan relatif kepada direktori linux):

arch

Subdirektori ini mengandungi kod teras yang berkaitan dengan seni bina perkakasan yang disokong oleh kod sumber teras ini. Sebagai contoh, untuk platform X86, ia adalah i386.

serta

Direktori ini mengandungi kebanyakan teras termasuk fail. Terdapat juga subdirektori untuk setiap seni bina yang disokong.

init

Direktori ini mengandungi kod permulaan teras.

mm

Direktori ini mengandungi semua kod pengurusan memori. Kod pengurusan memori yang berkaitan dengan seni bina perkakasan khusus terletak dalam direktori arch/*/mm Contohnya, yang sepadan dengan X86 ialah arch/i386/mm/fault.c.

pemandu

Semua pemacu peranti dalam sistem terletak dalam direktori ini. Ia dibahagikan lagi kepada beberapa jenis pemacu peranti, setiap satunya juga mempunyai subdirektori yang sepadan, seperti pemacu kad bunyi yang sepadan dengan pemacu/bunyi.

Ipc

Direktori ini mengandungi kod komunikasi antara proses teras.

modul

Direktori ini mengandungi modul yang telah dibina dan boleh dimuatkan secara dinamik.

fs Linux

Kod sistem fail yang disokong. Sistem fail yang berbeza mempunyai subdirektori berbeza yang sepadan antara satu sama lain Sebagai contoh, sistem fail ext2 sepadan dengan subdirektori ext2.

Kernel

Kod teras utama. Pada masa yang sama, kod yang berkaitan dengan struktur pemproses diletakkan dalam direktori arch/*/kernel.

Bersih

Kod bahagian rangkaian teras. Setiap subdirektori di dalam sepadan dengan aspek rangkaian.

Lib

Direktori ini mengandungi kod perpustakaan teras. Kod perpustakaan yang berkaitan dengan seni bina pemproses diletakkan dalam direktori arch/*/lib/.

Skrip

Direktori ini mengandungi fail skrip yang digunakan untuk mengkonfigurasi teras.

Dokumentasi

Direktori ini ialah beberapa dokumen untuk rujukan.

Kaedah analisis kod sumber kernel Linux

1 Kejelasan kod sumber kernel

Jika anda ingin menganalisis Linux dan mendalami intipati sistem pengendalian, membaca kod sumber kernel adalah cara yang paling berkesan. Kita semua tahu bahawa menjadi seorang pengaturcara yang baik memerlukan banyak latihan dan penulisan kod. Pengaturcaraan adalah penting, tetapi orang yang hanya memprogram boleh dengan mudah mengehadkan diri mereka kepada bidang pengetahuan mereka sendiri. Jika kita ingin meluaskan pengetahuan kita, kita perlu didedahkan dengan lebih banyak kod yang ditulis oleh orang lain, terutamanya kod yang ditulis oleh orang yang lebih maju daripada kita. Melalui pendekatan ini, kita boleh keluar daripada kekangan kalangan pengetahuan kita sendiri, memasuki lingkungan pengetahuan orang lain, dan mengetahui lebih lanjut tentang maklumat yang biasanya tidak dapat kita pelajari dalam jangka pendek. Kernel Linux diselenggara dengan teliti oleh "tuan" yang tidak terkira banyaknya dalam komuniti sumber terbuka, dan mereka semua boleh dipanggil master kod teratas. Dengan membaca kod kernel Linux, kita bukan sahaja mempelajari pengetahuan berkaitan kernel, tetapi pada pendapat saya, apa yang lebih berharga ialah mempelajari dan memahami kemahiran pengaturcaraan dan pemahaman komputer mereka.

Saya juga telah berhubung dengan analisis kod sumber kernel Linux melalui projek yang saya telah mendapat banyak manfaat daripada analisis kod sumber. Di samping memperoleh pengetahuan kernel yang berkaitan, ia juga mengubah pemahaman saya yang lalu tentang kod kernel:

1. Analisis kod sumber kernel bukan "di luar jangkauan". Kesukaran analisis kod sumber kernel tidak terletak pada kod sumber itu sendiri, tetapi pada cara menggunakan kaedah dan cara yang lebih sesuai untuk menganalisis kod. Kebesaran kernel bermakna kita tidak boleh menganalisisnya langkah demi langkah bermula dari fungsi utama seperti yang kita lakukan dengan program demo biasa Kita memerlukan cara campur tangan dari tengah untuk "menerobos" kod sumber kernel satu demi satu. Pendekatan "permintaan atas permintaan" ini membolehkan kami memahami baris utama kod sumber dan bukannya terlalu bergantung pada butiran khusus.

2. Reka bentuk intinya cantik. Status tertentu kernel menentukan bahawa kecekapan pelaksanaan kernel mestilah cukup tinggi untuk bertindak balas kepada keperluan masa nyata aplikasi komputer semasa Atas sebab ini, kernel Linux menggunakan pengaturcaraan hibrid bahasa C dan pemasangan. Tetapi kita semua tahu bahawa kecekapan pelaksanaan perisian dan kebolehselenggaraan perisian bertentangan antara satu sama lain dalam banyak kes. Bagaimana untuk meningkatkan kebolehselenggaraan kernel sambil memastikan kecekapan kernel bergantung pada reka bentuk "cantik" dalam kernel.

3. Kemahiran pengaturcaraan yang menakjubkan. Dalam bidang reka bentuk perisian aplikasi umum, status pengekodan mungkin tidak terlalu ditekankan, kerana pembangun memberi lebih perhatian kepada reka bentuk perisian yang baik, dan pengekodan hanyalah masalah cara pelaksanaan-sama seperti menggunakan kapak untuk memotong kayu, tanpa terlalu banyak berfikir. Tetapi ini tidak benar dalam reka bentuk pengekodan yang baik bukan sahaja meningkatkan kebolehselenggaraan, tetapi juga meningkatkan prestasi kod.

Pemahaman setiap orang tentang kernel akan berbeza Memandangkan pemahaman kita tentang kernel terus mendalam, kita akan mempunyai lebih banyak pemikiran dan pengalaman tentang reka bentuk dan pelaksanaannya. Oleh itu, artikel ini berharap dapat membimbing lebih ramai orang yang berkeliaran di luar pintu kernel Linux untuk memasuki dunia Linux dan mengalami sendiri keajaiban dan kehebatan kernel. Dan saya bukan pakar dalam kod sumber kernel Saya hanya berharap untuk berkongsi pengalaman dan pengalaman saya sendiri dalam menganalisis kod sumber dan memberikan rujukan dan bantuan kepada mereka yang memerlukannya, ia boleh dianggap sebagai untuk industri komputer Terutama dari segi kernel sistem pengendalian, menyumbang usaha sederhana anda sendiri. Tanpa berlengah lagi (ia sudah terlalu panjang berjela, maaf~), izinkan saya berkongsi kaedah analisis kod sumber kernel Linux saya sendiri.

2 Adakah kod sumber kernel sukar

Pada dasarnya, menganalisis kod kernel Linux tidak berbeza dengan melihat kod orang lain, kerana apa yang ada di hadapan anda Secara amnya ia bukan kod yang anda tulis sendiri. Mari kita ambil contoh mudah dahulu. Orang yang tidak dikenali secara rawak memberi anda program dan meminta anda menerangkan reka bentuk fungsi program selepas membaca kod sumber saya fikir ramai orang yang merasakan bahawa kemahiran pengaturcaraan mereka tidak mengapa, kerana selagi mereka boleh Jika anda sabar membaca kodnya dari awal hingga akhir, anda pasti akan menemui jawapannya, dan memang begitu. Jadi sekarang mari kita ubah hipotesis Jika orang ini ialah Linus, dan apa yang dia berikan kepada anda ialah kod modul kernel Linux, adakah anda masih berasa santai? Ramai orang mungkin teragak-agak. Mengapa kod yang diberikan oleh orang yang tidak dikenali kepada anda (tentunya tidak jika Linus mengenali anda, haha~) memberikan kami perasaan yang berbeza? Saya rasa ada sebab berikut:

1. Kod kernel Linux agak misteri kepada "dunia luar", dan ia sangat besar sehingga mungkin terasa mustahil untuk dimulakan apabila ia diletakkan di hadapan anda secara tiba-tiba. Sebagai contoh, ia mungkin datang dari sebab yang sangat kecil-fungsi utama tidak dapat ditemui. Untuk program demo yang mudah, kita boleh menganalisis makna kod dari awal hingga akhir, tetapi kaedah menganalisis kod kernel sama sekali tidak berkesan, kerana tiada siapa yang boleh membaca kod Linux dari awal hingga akhir (kerana ia benar-benar tidak perlu , dan apabila digunakan, Lihat sahaja).

2. Ramai orang juga telah bersentuhan dengan kod perisian besar, tetapi kebanyakannya adalah projek aplikasi Bentuk dan maksud kod berkaitan dengan logik perniagaan yang sering mereka hubungi. Kod kernel adalah berbeza Kebanyakan maklumat yang diproses adalah berkait rapat dengan lapisan bawah komputer. Sebagai contoh, kekurangan pengetahuan yang berkaitan tentang sistem pengendalian, penyusun, pemasangan, seni bina dan lain-lain juga akan menyukarkan membaca kod kernel.

3. Kaedah menganalisis kod kernel tidak cukup munasabah. Berhadapan dengan sejumlah besar kod kernel yang kompleks, jika anda tidak bermula dari perspektif global, adalah mudah untuk terperangkap dalam butiran kod. Walaupun kod kernel adalah besar, ia juga mempunyai prinsip reka bentuk dan seni binanya, jika tidak mengekalkannya akan menjadi mimpi ngeri bagi sesiapa sahaja! Jika kita menjelaskan idea reka bentuk keseluruhan modul kod dan kemudian menganalisis pelaksanaan kod, menganalisis kod sumber mungkin merupakan perkara yang mudah dan menggembirakan.

Ini adalah pemahaman peribadi saya tentang isu-isu ini. Jika anda belum didedahkan kepada projek perisian berskala besar, menganalisis kod kernel Linux mungkin merupakan peluang yang baik untuk mengumpul pengalaman dalam projek berskala besar (sememangnya, kod Linux ialah projek terbesar yang pernah saya dedahkan setakat ini!). Jika anda tidak mempunyai pemahaman yang menyeluruh tentang komputer asas, maka kami boleh memilih untuk mengumpul pengetahuan asas dengan menganalisis dan belajar pada masa yang sama. Kemajuan menganalisis kod mungkin agak perlahan pada mulanya, tetapi apabila pengetahuan terus terkumpul, pemahaman kita tentang "logik perniagaan" kernel Linux akan beransur-ansur menjadi lebih jelas. Perkara terakhir ialah bagaimana untuk memahami kod sumber analisis dari perspektif global Ini juga pengalaman yang saya ingin kongsikan dengan anda.

3 Kaedah analisis kod sumber kernel

3.1 Pengumpulan data

Dari perspektif orang memahami perkara baharu, sebelum meneroka intipati perkara , mesti ada proses memahami perkara baru Proses ini membolehkan kita mempunyai konsep awal tentang perkara baru. Sebagai contoh, jika kita ingin belajar piano, kita perlu terlebih dahulu memahami bahawa bermain piano memerlukan kita mempelajari teori muzik asas, tatatanda yang dipermudahkan, kakitangan dan pengetahuan asas lain, dan kemudian mempelajari teknik bermain piano dan penjarian, dan akhirnya kita sebenarnya boleh mulakan. berlatih piano.

Begitu juga dengan menganalisis kod kernel Mula-mula kita perlu mencari kandungan yang terlibat dalam kod untuk dianalisis. Adakah ia kod untuk penyegerakan dan penjadualan proses, kod untuk pengurusan memori, kod untuk pengurusan peranti, kod untuk permulaan sistem, dsb. Saiz kernel yang besar menentukan bahawa kita tidak boleh menganalisis semua kod kernel sekaligus, jadi kita perlu memberi diri kita pembahagian kerja yang munasabah. Seperti yang diberitahu oleh reka bentuk algoritma, untuk menyelesaikan masalah besar, kita mesti terlebih dahulu menyelesaikan sub-masalah yang terlibat.

Selepas mencari julat kod untuk dianalisis, kami boleh menggunakan semua sumber yang ada untuk memahami keseluruhan struktur dan fungsi umum bahagian kod ini selengkap mungkin.

Dalam fail manakah kod sumber kernel linux diletakkan?

Semua sumber yang disebut di sini merujuk kepada Baidu, enjin carian dalam talian berskala besar Google, buku teks prinsip sistem pengendalian dan buku profesional , atau pengalaman dan maklumat yang diberikan oleh orang lain, malah nama dokumen, ulasan dan pengecam kod sumber yang disediakan oleh kod sumber Linux (jangan memandang rendah penamaan pengecam dalam kod, kadangkala mereka boleh memberikan maklumat penting). Ringkasnya, semua sumber di sini merujuk kepada semua sumber yang ada yang boleh anda fikirkan. Sudah tentu, adalah mustahil untuk kita memperoleh semua maklumat yang kita inginkan melalui bentuk pengumpulan maklumat ini. Kita hanya mahu menjadi selengkap mungkin. Kerana lebih komprehensif maklumat dikumpul, lebih banyak maklumat boleh digunakan dalam proses seterusnya menganalisis kod, dan proses analisis akan menjadi kurang sukar.

Berikut ialah contoh mudah, dengan mengandaikan bahawa kami ingin menganalisis kod yang dilaksanakan oleh mekanisme penukaran frekuensi Linux. Setakat ini kita hanya tahu istilah ini Dari maksud literal, kita boleh meneka secara kasar bahawa ia sepatutnya berkaitan dengan pelarasan frekuensi CPU. Melalui pengumpulan maklumat, kita seharusnya boleh mendapatkan maklumat yang berkaitan berikut:

1. Mekanisme CPUFreq.

2. prestasi, jimat kuasa, ruang pengguna, ondemand, strategi peraturan frekuensi konservatif.

3. /driver/cpufreq/.

4. /document/cpufreq.

5. keadaan P dan keadaan C.

Jika anda boleh mengumpul maklumat ini semasa menganalisis kod kernel Linux, anda sepatutnya "bertuah". Lagipun, maklumat tentang kernel Linux memang tidak sekaya .NET dan JQuery Namun, berbanding lebih sepuluh tahun yang lalu, apabila tiada enjin carian yang berkuasa dan tiada bahan penyelidikan yang relevan, ia sepatutnya dipanggil "Hebat. Zaman menuai"! Melalui "carian" mudah (ia mungkin mengambil masa satu atau dua hari), kami juga menemui direktori fail kod sumber di mana bahagian kod ini terletak, saya perlu mengatakan bahawa maklumat jenis ini adalah "tidak ternilai"!

3.2 Lokasi kod sumber

Daripada pengumpulan data, kami "bertuah" untuk mencari direktori kod sumber yang berkaitan dengan kod sumber. Tetapi ini tidak bermakna kami sedang menganalisis kod sumber dalam direktori ini. Kadangkala direktori yang kami temui mungkin bertaburan, dan kadangkala direktori yang kami temui mengandungi banyak kod yang berkaitan dengan mesin tertentu, dan kami lebih mengambil berat tentang mekanisme utama kod untuk dianalisis berbanding kod khusus yang berkaitan dengan mesin ( Ini akan membantu kita lebih memahami sifat inti). Oleh itu, kita perlu berhati-hati memilih maklumat yang melibatkan fail kod dalam maklumat. Sudah tentu, langkah ini tidak mungkin diselesaikan pada satu masa, dan tiada siapa yang boleh menjamin bahawa semua fail kod sumber yang akan dianalisis boleh dipilih pada satu masa dan tiada satu pun daripada mereka akan terlepas. Tetapi kami tidak perlu bimbang Selagi kami boleh menangkap fail sumber teras yang berkaitan dengan kebanyakan modul, kami secara semula jadi boleh mencari semuanya melalui analisis terperinci kod itu kemudian.

Berbalik kepada contoh di atas, kami membaca dengan teliti dokumentasi di bawah /documentation/cpufreq. Kod sumber Linux semasa akan menyimpan dokumentasi yang berkaitan dengan modul dalam folder dokumentasi direktori kod sumber Jika modul yang akan dianalisis tidak mempunyai dokumentasi, ini sedikit sebanyak akan meningkatkan kesukaran untuk mencari fail kod sumber utama, tetapi ia. tidak akan menyebabkan kita tidak dapat mencarinya Kod sumber yang ingin kita analisis. Dengan membaca dokumentasi, kita sekurang-kurangnya dapat memberi perhatian kepada fail sumber /driver/cpufreq/cpufreq.c. Melalui dokumentasi fail sumber ini, digabungkan dengan strategi modulasi frekuensi yang dikumpul sebelum ini, kami boleh dengan mudah memberi perhatian kepada lima fail sumber cpufreq_performance.c, cpufreq_powersave.c, cpufreq_userspace.c, cpufreq_ondemand dan cpufreq_conservative.c. Adakah semua dokumen yang terlibat telah ditemui? Jangan risau, mulakan analisis daripada mereka dan lambat laun anda akan menemui fail sumber lain. Jika anda menggunakan sourceinsight untuk membaca kod sumber kernel di bawah Windows, kami boleh mencari fail lain freq_table.c, cpufreq_stats.c dan /include/linux/cpufreq dengan mudah melalui fungsi seperti panggilan fungsi dan mencari rujukan simbol, digabungkan dengan analisis kod. h.


Dalam fail manakah kod sumber kernel linux diletakkan?


Ikuti arah aliran maklumat yang dicari, Kami boleh mencari sepenuhnya fail kod sumber yang perlu dianalisis. Langkah mencari kod sumber tidak begitu kritikal, kerana kami tidak perlu mencari semua fail kod sumber, dan kami boleh menangguhkan sebahagian daripada kerja kepada proses menganalisis kod. Kedudukan kod sumber juga penting. Mencari sebahagian daripada fail kod sumber adalah asas untuk menganalisis kod sumber.

3.3 Komen Ringkas

Komen Ringkas

Dalam fail kod sumber yang terletak, analisa setiap pembolehubah, makro, fungsi, struktur, dll. Anggaran makna dan fungsi elemen kod. Sebab mengapa ini dipanggil anotasi mudah tidak bermakna bahawa anotasi berfungsi dalam bahagian ini adalah sangat mudah, tetapi ini bermakna anotasi dalam bahagian ini tidak perlu terlalu terperinci, asalkan ia menerangkan secara kasar maksud elemen kod yang berkaitan. Sebaliknya, kerja di sini sebenarnya adalah langkah paling sukar dalam keseluruhan proses analisis. Oleh kerana ini adalah kali pertama untuk mendalami kod kernel, terutamanya bagi mereka yang menganalisis kod sumber kernel buat kali pertama, sejumlah besar sintaks GNU C yang tidak dikenali dan takrifan makro yang luar biasa akan sangat mengecewakan. Pada masa ini, selagi anda bertenang dan memahami setiap kesukaran utama, anda boleh memastikan bahawa anda tidak akan terperangkap apabila menghadapi kesukaran yang sama pada masa hadapan. Lebih-lebih lagi, pengetahuan kita yang lain berkaitan kernel akan terus berkembang seperti pokok.

Sebagai contoh, penggunaan makro "DEFINE_PER_CPU" akan muncul pada permulaan fail cpufreq.c Pada asasnya, kita boleh memahami maksud dan fungsi makro ini dengan merujuk maklumat. Kaedah yang digunakan di sini pada asasnya sama seperti yang digunakan sebelum ini untuk mengumpul maklumat Selain itu, kami juga boleh menggunakan fungsi go to definition yang disediakan oleh sourceinsight untuk melihat definisinya, atau menggunakan LKML (Linux Kernel Mail List) untuk melihatnya. Ringkasnya, menggunakan semua cara yang mungkin, kita sentiasa boleh mendapatkan makna makro ini - tentukan pembolehubah yang digunakan secara bebas untuk setiap CPU.

Kami tidak berkeras untuk menerangkan ulasan dengan tepat sekali gus (kami tidak perlu memikirkan proses pelaksanaan khusus bagi setiap fungsi, hanya memikirkan maksud fungsi umum), kami menggabungkan yang dikumpul Analisis data dan kod berikutnya secara berterusan menambah baik makna ulasan (komen asal dan penamaan pengecam dalam kod sumber sangat berguna di sini). Melalui anotasi berterusan, rujukan berterusan kepada maklumat, dan pengubahsuaian berterusan makna anotasi.


Dalam fail manakah kod sumber kernel linux diletakkan?


Apabila kami meletakkan semua fail kod sumber terlibat Selepas anotasi mudah, kita boleh mencapai keputusan berikut:

1. Pada asasnya memahami maksud elemen kod dalam kod sumber.

2. Pada asasnya semua fail kod sumber utama yang terlibat dalam modul ini ditemui.

Digabungkan dengan penerangan keseluruhan atau seni bina kod yang akan dianalisis berdasarkan maklumat dan data yang dikumpul sebelum ini, kami boleh membandingkan hasil analisis dengan data untuk menentukan dan menyemak semula pemahaman kami tentang kod. Dengan cara ini, melalui ulasan ringkas, kita boleh memahami struktur utama modul kod sumber secara keseluruhan. Ini juga mencapai tujuan asas anotasi ringkas kami.

3.4 Komen Terperinci

Selepas melengkapkan ulasan ringkas kod, boleh dianggap separuh daripada analisis modul telah selesai, dan kandungan yang selebihnya adalah analisis yang mendalam tentang kod dan pemahaman yang menyeluruh. Komen mudah tidak boleh selalu menerangkan maksud khusus elemen kod dengan sangat tepat, jadi ulasan terperinci sangat diperlukan. Dalam langkah ini, kita perlu menjelaskan perkara berikut:

1. Apabila definisi pembolehubah digunakan.

2. Apabila kod yang ditakrifkan oleh makro digunakan.

3. Maksud parameter fungsi dan nilai pulangan.

4. Aliran pelaksanaan dan hubungan panggilan fungsi.

5. Makna khusus dan keadaan penggunaan medan struktur.

Kita juga boleh memanggil langkah ini sebagai anotasi fungsi terperinci, kerana makna elemen kod di luar fungsi pada asasnya jelas dalam ulasan ringkas. Aliran pelaksanaan dan algoritma fungsi itu sendiri adalah tugas utama bahagian anotasi dan analisis ini.

Sebagai contoh, bagaimana algoritma pelaksanaan dasar cpufreq_ondemand (dalam fungsi dbs_check_cpu) dilaksanakan. Kita perlu menganalisis secara beransur-ansur pembolehubah yang digunakan oleh fungsi dan fungsi yang dipanggil untuk memahami selok-belok algoritma. Untuk hasil terbaik, kami memerlukan carta alir pelaksanaan dan rajah perhubungan panggilan fungsi bagi fungsi kompleks ini, yang merupakan cara ekspresi yang paling intuitif.

Dalam fail manakah kod sumber kernel linux diletakkan?


Melalui ulasan dalam langkah ini, pada dasarnya kita boleh memahami sepenuhnya kod keseluruhan yang akan dianalisis Mekanisme dilaksanakan. Semua kerja analisis boleh dianggap 80% siap. Langkah ini amat kritikal Kita mesti cuba menjadikan maklumat anotasi cukup tepat untuk lebih memahami pembahagian modul dalaman kod yang akan dianalisis. Walaupun kernel Linux menggunakan sintaks makro "module_init" dan "module_exit" untuk mengisytiharkan fail modul, pembahagian sub-fungsi dalam modul adalah berdasarkan pemahaman penuh tentang fungsi modul. Hanya dengan membahagikan modul dengan betul kita boleh mengetahui fungsi luaran dan pembolehubah yang disediakan oleh modul (menggunakan simbol yang dieksport oleh EXPORT_SYMBOL_GPL atau EXPORT_SYMBOL). Selepas itu barulah kita boleh meneruskan ke langkah seterusnya menganalisis kebergantungan pengecam dalam modul.

3.5 Ketergantungan Pengecam Dalaman Modul

Dengan membahagikan modul kod dalam langkah keempat, kita boleh "dengan mudah" menganalisis modul satu demi satu. Secara amnya, kita boleh bermula dari fungsi masuk dan keluar modul di bahagian bawah fail (fungsi yang diisytiharkan oleh "module_init" dan "module_exit" biasanya berada di hujung fail), berdasarkan fungsi yang mereka panggil (fungsi yang ditakrifkan oleh diri kita sendiri atau modul lain) dan fungsi yang digunakan Pembolehubah utama (pembolehubah global dalam fail ini atau pembolehubah luaran modul lain) lukis rajah kebergantungan "fungsi-pembolehubah-fungsi" - kami memanggilnya rajah kebergantungan pengecam.

Sudah tentu, hubungan pergantungan pengecam dalam modul bukanlah struktur pokok yang mudah, tetapi dalam banyak kes ialah hubungan rangkaian yang rumit. Pada masa ini, peranan ulasan terperinci kami pada kod ditunjukkan. Kami membahagikan modul kepada sub-fungsi berdasarkan makna fungsi itu sendiri, dan mengekstrak pepohon kebergantungan pengecam setiap subfungsi.


Dalam fail manakah kod sumber kernel linux diletakkan?


Melalui analisis kebergantungan pengecam, anda boleh Ia jelas menunjukkan fungsi mana yang dipanggil oleh fungsi yang ditakrifkan oleh modul, pembolehubah yang digunakan, dan kebergantungan antara sub-fungsi modul - fungsi dan pembolehubah yang dikongsi, dsb.

3.6 Saling bergantung antara modul

Saling bergantung antara modul

Setelah semua rajah kebergantungan pengecam dalaman modul diisih, mengikut modul yang digunakan Pembolehubah atau fungsi modul lain boleh dengan mudah menentukan kebergantungan antara modul.


Dalam fail manakah kod sumber kernel linux diletakkan?

Hubungan kebergantungan modul kod cpufreq boleh dinyatakan sebagai hubungan berikut.


Dalam fail manakah kod sumber kernel linux diletakkan?

3.7 Gambarajah Seni Bina Modul

Telus Melalui rajah kebergantungan antara modul, status dan fungsi modul dalam keseluruhan kod yang akan dianalisis dapat dinyatakan dengan jelas. Berdasarkan ini, kita boleh mengklasifikasikan modul dan menyusun hubungan seni bina kod tersebut.


Dalam fail manakah kod sumber kernel linux diletakkan?

Seperti yang ditunjukkan dalam rajah pergantungan modul cpufreq, kita boleh melihat dengan jelas Semua modulasi frekuensi modul strategi bergantung pada modul teras cpufreq, cpufreq_stats dan freq_table. Jika kita mengabstrakkan tiga modul bergantung ke dalam rangka kerja teras kod, modul strategi modulasi frekuensi ini dibina pada rangka kerja ini, dan mereka bertanggungjawab untuk berinteraksi dengan lapisan pengguna. Modul teras cpufreq menyediakan pemacu dan antara muka lain yang berkaitan yang bertanggungjawab untuk berinteraksi dengan sistem asas. Oleh itu, kita boleh mendapatkan gambar rajah seni bina modul berikut.


Dalam fail manakah kod sumber kernel linux diletakkan?

Sudah tentu, gambar rajah seni bina bukan penyambungan modul bukan organik, kita juga perlu untuk menggabungkan maklumat yang kami rujuk Untuk memperkayakan maksud gambar rajah seni bina. Oleh itu, butiran gambar rajah seni bina di sini akan berbeza-beza mengikut pemahaman orang yang berbeza. Tetapi makna badan utama rajah seni bina pada asasnya adalah sama. Pada ketika ini, kami telah menyelesaikan semua analisis kod kernel untuk dianalisis.

Cadangan berkaitan: "Tutorial Video Linux"

Atas ialah kandungan terperinci Dalam fail manakah kod sumber kernel linux diletakkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn