Rumah  >  Artikel  >  Tutorial sistem  >  Memahami kerja persediaan kernel Linux: memahami bahasa C dan sedikit tentang sistem pengendalian

Memahami kerja persediaan kernel Linux: memahami bahasa C dan sedikit tentang sistem pengendalian

王林
王林ke hadapan
2024-02-26 10:31:461019semak imbas

Prakata: Sistem pengendalian (Bahasa Inggeris: Operating System, singkatan: OS) ialah perisian sistem yang menguruskan perkakasan komputer dan sumber perisian Ia juga merupakan teras dan asas sistem komputer. Sistem pengendalian perlu mengendalikan tugas asas seperti mengurus dan mengkonfigurasi memori video, menentukan keutamaan bekalan dan permintaan sumber sistem, mengawal peranti input dan output, rangkaian pengendalian, dan mengurus sistem fail. Sistem pengendalian juga menyediakan antara muka operasi untuk pengguna berinteraksi dengan sistem.

linux内核详解_《linux内核分析》_linux内核什么意思

1. Penyediaan kernel Linux

Mata pengetahuan terbaik untuk persediaan memahami kernel Linux:

Fahami bahasa C

Mengetahui serba sedikit tentang sistem pengendalian

Familiar dengan sebilangan kecil algoritma berkaitan

Fahami seni bina komputer

Ciri kernel Linux:

linux内核什么意思_《linux内核分析》_linux内核详解

linux内核什么意思_《linux内核分析》_linux内核详解

Tugas kernel Linux:

1 Dari perspektif teknikal, kernel adalah lapisan perantaraan antara perkakasan dan perisian. Fungsinya adalah untuk menghantar permintaan jujukan lapisan aplikasi kepada perkakasan dan bertindak sebagai pemacu peringkat bawah untuk meninjau pelbagai peranti dan komponen dalam sistem.

2 Dari peringkat aplikasi, aplikasi tidak mempunyai sambungan dengan perkakasan, hanya dengan kernel adalah tahap paling rendah dalam hierarki yang diketahui oleh aplikasi. Dalam kerja sebenar, kernel merangkumi butiran yang berkaitan.

3. Kernel ialah program pengurusan sumber. Bertanggungjawab untuk memperuntukkan sumber kongsi yang tersedia (masa CPU, ruang cakera, sambungan rangkaian, dll.) kepada pelbagai proses sistem.

4. Kernel adalah seperti perpustakaan, menyediakan satu set arahan berorientasikan sistem. Bagi aplikasi, panggilan sistem sama seperti memanggil fungsi biasa.

Strategi pelaksanaan kernel:

1.Bukar mikro. Fungsi paling asas dilaksanakan oleh inti pusat (kernel mikro). Semua fungsi lain diwakilkan kepada proses bebas yang berkomunikasi dengan inti pusat melalui soket komunikasi yang jelas.

2. Semua kod kernel, termasuk subsistem (seperti pengurusan memori video, pengurusan fail, pemacu peranti) dibungkus ke dalam fail. Setiap fungsi dalam kernel mempunyai akses kepada semua bahagian lain kernel. Pada masa ini menyokong pemuatan dan pemunggahan dinamik (pemotongan) modul. Kernel Linux dilaksanakan berdasarkan strategi ini.

Di manakah mekanisme kernel digunakan?

1. Komunikasi antara proses (ruang alamat diperuntukkan dalam memori maya CPU, dan ruang alamat setiap proses adalah bebas sepenuhnya; bilangan proses yang dilaksanakan pada masa yang sama tidak melebihi bilangan CPU) memerlukan penggunaan mekanisme kernel tertentu.

2. Bertukar antara proses (bilangan proses yang dilaksanakan pada masa yang sama tidak melebihi bilangan CPU) juga memerlukan penggunaan mekanisme kernel.

Penukaran proses juga perlu menyimpan keadaan seperti penukaran tugas FreeRTOS dan meletakkan proses dalam keadaan terbiar/sambung semula.

3. Penjadualan proses. Tentukan berapa lama proses itu telah berjalan.

Proses Linux:

1 Menggunakan struktur hierarki, setiap proses bergantung kepada proses induk. Kernel memulakan program init sebagai proses pertama. Proses ini bertanggungjawab untuk operasi permulaan sistem selanjutnya. Proses init ialah akar pokok proses, dan semua proses berasal secara langsung atau tidak langsung daripada proses ini.

2. Pertanyaan melalui arahan pstree. Sebenarnya, proses pertama dalam sistem adalah systemd, bukan init (ini juga titik kekeliruan)

3 Setiap proses dalam sistem mempunyai pengecam unik (ID), dan pengguna (atau proses lain) boleh menggunakan ID untuk mengakses proses tersebut.

Kedua, struktur direktori kod sumber kernel Linux

Kod sumber kernel Linux terdiri daripada tiga bahagian utama:

1. Kod teras kernel, termasuk pelbagai subsistem dan submodul yang diterangkan dalam Bab 3, serta subsistem sokongan lain, seperti pengurusan kuasa, pengamulaan Linux, dll.

2. Kod bukan teras lain, seperti fail perpustakaan (kerana kernel Linux adalah kernel serba lengkap, iaitu, kernel tidak bergantung pada mana-mana perisian lain dan boleh disusun dengan sendirinya), koleksi perisian tegar, KVM ( teknologi mesin maya), dsb.

3. Susun skrip, fail konfigurasi, dokumen bantuan, penyata hak cipta dan fail tambahan lain

Gunakan arahan ls untuk mendengar struktur direktori tingkat atas kod sumber kernel Penerangan khusus adalah seperti berikut:

sertakan/----Fail pengepala kernel perlu disediakan kepada modul luaran (seperti kod ruang pengguna). kernel/----Kod teras kernel Linux, termasuk subsistem penjadualan proses yang diterangkan dalam Bahagian 3.2, dan modul yang berkaitan dengan penjadualan proses. mm/----Subsistem pengurusan memori video (bahagian 3.3). fs/----VFS subsistem (bahagian 3.4). net/----Subsistem rangkaian yang tidak termasuk pemacu peranti rangkaian (bahagian 3.5). ipc/----IPC (komunikasi antara proses) subsistem. arch//----Kod yang berkaitan dengan seni bina, seperti lengan, x86, dsb. arch//mach-----kod berkaitan mesin/papan khusus. arch//include/asm----fail pengepala berkaitan seni bina. arch//boot/dts----fail DeviceTree. init/----Kod yang berkaitan dengan permulaan permulaan sistem Linux. blok/----Menyediakan hierarki peranti blok. bunyi/----Pemandu dan subsistem berkaitan audio boleh dianggap sebagai "subsistem audio". pemacu/----pemandu peranti (dalam Linuxkernel3.10, pemacu peranti menyumbang 49.4% daripada kod). lib/----melaksanakan fungsi perpustakaan yang perlu digunakan dalam kernel, seperti CRC, FIFO, senarai, MD5, dsb. crypto/-----Fungsi perpustakaan yang berkaitan dengan penyulitan dan penyahsulitan. keselamatan/----Menyediakan ciri keselamatan (SELinux). virt/----Menyediakan sokongan untuk teknologi mesin maya (KVM, dll.). usr/----Kod yang digunakan untuk menjana initramfs. perisian tegar/----simpan perisian tegar yang digunakan untuk memacu peranti pihak ketiga. sampel/----Beberapa kod sampel. alatan/----Beberapa alatan biasa, seperti analisis prestasi, ujian kendiri, dsb. Kconfig, Kbuild, Makefile, skrip/----fail konfigurasi, skrip, dsb. digunakan untuk penyusunan kernel. MENYALIN----Penyata Hak Cipta. PENYELENGGARA----Senarai penyelenggara. KREDIT----Senarai penyumbang utama kepada Linux. PELAPORAN-PEPIJAT----Manual pelaporan pepijat. Dokumentasi, README----bantuan, dokumentasi.

[Faedah Artikel] Editor mengesyorkan kumpulan pertukaran teknologi kernel Linuxnya sendiri: [865977150] telah menyusun beberapa buku pembelajaran dan bahan video yang saya rasa lebih baik dan berkongsinya dalam fail kumpulan Jika perlu, anda boleh menambahkannya sendiri. ! ! 100 orang pertama yang menyertai kumpulan akan menerima pakej maklumat teras tambahan bernilai 699 (termasuk tutorial video, e-buku, projek praktikal dan kod)

《linux内核分析》_linux内核详解_linux内核什么意思

linux内核详解_《linux内核分析》_linux内核什么意思

3. Analisis ringkas seni bina kernel Linux

《linux内核分析》_linux内核详解_linux内核什么意思

Rajah 1 hierarki sistem Linux

Bahagian hadapan ialah ruang pengguna (atau aplikasi). Di sinilah aplikasi pengguna melaksanakan. Di bawah ruang pengguna ialah ruang kernel, dan kernel Linux terletak di sini. GNUCLibrary (glibc) juga ada di sini. Ia menyediakan soket panggilan sistem untuk menyambung ke kernel, dan juga menyediakan mekanisme untuk menterjemah antara aplikasi ruang pengguna dan kernel. Ini penting kerana aplikasi ruang kernel dan pengguna menggunakan ruang alamat yang dilindungi yang berbeza. Setiap proses ruang pengguna menggunakan ruang alamat mayanya sendiri, manakala kernel menduduki ruang alamat yang berasingan.

Inti Linux boleh ditakrifkan lagi kepada 3 lapisan. Bahagian hadapan ialah soket panggilan sistem, yang melaksanakan beberapa fungsi asas, seperti baca dan tulis. Di bawah soket panggilan sistem ialah kod kernel, yang boleh ditakrifkan dengan lebih tepat sebagai kod kernel bebas seni bina. Kod ini adalah biasa kepada semua seni bina pemproses yang disokong oleh Linux. Di bawah kod ini adalah kod yang bergantung kepada seni bina, membentuk apa yang biasanya dipanggil BSP (BoardSupportPackage). Kod ini berfungsi sebagai pemproses dan kod khusus platform untuk seni bina tertentu.

Inti Linux melaksanakan banyak sifat seni bina yang penting. Pada tahap yang lebih tinggi atau lebih rendah, kernel ditakrifkan ke dalam subsistem. Linux juga boleh dilihat secara keseluruhan, kerana ia menyepadukan semua perkhidmatan asas tersebut ke dalam kernel. Ini berbeza daripada seni bina mikrokernel yang pertama akan menyediakan beberapa perkhidmatan asas, seperti komunikasi, I/O, memori dan pengurusan proses yang lebih khusus dimasukkan ke dalam lapisan mikrokernel. Setiap teras mempunyai kelebihannya sendiri, tetapi ini tidak dibincangkan di sini. Dengan peredaran masa, kernel Linux telah menjadi lebih cekap dari segi memori video dan penggunaan CPU, dan sangat stabil. Dan perkara yang paling menarik tentang Linux ialah ia masih mempunyai mudah alih yang baik walaupun saiz dan kerumitannya. Linux disusun untuk dijalankan pada sejumlah besar pemproses dan platform dengan kekangan dan keperluan seni bina yang berbeza. Contoh balas ialah Linux boleh dijalankan pada pemproses yang mempunyai unit pengurusan memori grafik (MMU), atau ia boleh dijalankan pada pemproses yang tidak menyediakan MMU.

Port uClinux kernel Linux menyediakan sokongan untuk bukan MMU.

linux内核什么意思_《linux内核分析》_linux内核详解Rajah 2 Seni bina kernel Linux

Komponen utama kernel Linux ialah: soket panggilan sistem, pengurusan proses, pengurusan memori, sistem fail maya, tindanan rangkaian, pemacu peranti dan kod berkaitan seni bina perkakasan.

(1) Soket panggilan sistem

Lapisan SCI menyediakan mekanisme individu untuk melaksanakan panggilan fungsi dari ruang pengguna ke kernel. Seperti yang dibincangkan di atas, soket ini bergantung kepada seni bina, walaupun dalam keluarga pemproses yang sama. SCI sebenarnya adalah perkhidmatan pemultipleksan dan demultiplexing fungsi yang sangat berguna. Anda boleh menemui pelaksanaan SCI dalam ./linux/kernel dan bahagian yang bergantung kepada seni bina dalam ./linux/arch.

(2) Pengurusan proses

Tumpuan pengurusan proses ialah pelaksanaan proses. Dalam kernel, proses sedemikian dipanggil benang dan mewakili virtualisasi pemproses individu (kod benang, data, tindanan dan daftar CPU). Dalam ruang pengguna, istilah proses biasanya digunakan, tetapi pelaksanaan Linux tidak membezakan antara kedua-dua konsep ini (proses dan benang). Kernel menyediakan antara muka pengaturcaraan aplikasi (API) melalui SCI untuk mencipta proses baharu (fungsi fork, exec atau PortableOperatingSystemInterface[POSIX]), menghentikan proses (bunuh, keluar), dan berkomunikasi serta menyegerakkan antara mereka (mekanisme isyarat atau Kemudian POSIX ).

Pengurusan proses juga termasuk pengendalian keperluan untuk berkongsi CPU antara proses yang aktif. Kernel melaksanakan jenis algoritma penjadualan baharu yang beroperasi dalam tempoh masa yang tetap tanpa mengira bilangan utas yang bersaing untuk CPU. Algoritma ini dipanggil penjadual O(1) Nama bermaksud masa yang diperlukan untuk menjadualkan berbilang utas adalah sama dengan masa yang diperlukan untuk menjadualkan satu utas. Penjadual O(1) juga boleh menyokong berbilang pemproses (dipanggil berbilang pemproses simetri atau SMP). Anda boleh mencari kod sumber untuk pengurusan proses dalam ./linux/kernel dan kod sumber yang bergantung kepada seni bina dalam ./linux/arch.

(3) Pengurusan memori video

Satu lagi sumber penting yang diuruskan oleh kernel ialah memori video. Untuk meningkatkan kecekapan, jika memori video maya diurus oleh perkakasan, memori video diuruskan mengikut format halaman memori video yang dipanggil (4KB untuk kebanyakan seni bina). Linux termasuk kaedah untuk menguruskan memori video yang tersedia, serta mekanisme perkakasan yang digunakan untuk pemetaan kimia dan maya. Walau bagaimanapun, pengurusan memori video perlu mengurus lebih daripada penimbal 4KB sahaja. Linux menyediakan perwakilan konkrit penimbal 4KB, seperti pengagih papak. Mod pengurusan memori ini menggunakan penimbal 4KB sebagai asas, kemudian memperuntukkan struktur daripadanya, dan menjejaki penggunaan halaman memori, seperti halaman memori yang penuh, halaman yang tidak digunakan sepenuhnya dan halaman yang kosong. Ini membolehkan mod melaraskan penggunaan memori video secara dinamik berdasarkan keperluan sistem. Untuk menyokong penggunaan memori video oleh berbilang pengguna, kadangkala memori video yang tersedia digunakan. Atas sebab ini dalam kernel Linux, halaman boleh dialihkan keluar dari memori video dan diletakkan ke dalam pemacu c. Proses ini dipanggil bertukar kerana halaman ditukar dari memori video ke cakera keras. Kod sumber untuk pengurusan memori video boleh didapati dalam ./linux/mm.

(4)Sistem Fail Maya

linux内核什么意思_《linux内核分析》_linux内核详解

Sistem Fail Maya (VFS) ialah aspek yang sangat berguna bagi kernel Linux kerana ia menyediakan perwakilan antara muka universal untuk sistem fail. VFS menyediakan lapisan pertukaran antara SCI dan sistem fail yang disokong oleh kernel (lihat Rajah 4).

linux内核详解_linux内核什么意思_《linux内核分析》

Rajah 3 hierarki sistem fail Linux

Dalam VFS, ia adalah perwakilan API biasa bagi fungsi seperti buka, tutup, baca dan tulis. Di bawah VFS ialah perwakilan sistem fail, yang mentakrifkan kaedah pelaksanaan fungsi peringkat rendah. Ia adalah pemalam untuk sistem fail tertentu (lebih daripada 50 daripadanya). Kod sumber untuk sistem fail boleh didapati dalam ./linux/fs. Di bawah lapisan sistem fail ialah cache penimbal, yang menyediakan set fungsi biasa untuk lapisan sistem fail (bebas daripada sistem fail tertentu). Lapisan caching ini mengoptimumkan akses kepada peralatan kimia dengan mengekalkan data untuk satu tempoh masa (atau pra-mengambil data kemudian untuk menyediakannya apabila diperlukan). Di bawah cache penimbal ialah pemacu peranti yang melaksanakan soket untuk peranti kimia tertentu.

(5) Timbunan Rangkaian

Timbunan rangkaian direka bentuk untuk mengikuti seni bina berlapis kontrak simulasi itu sendiri. Ingat bahawa Protokol Internet (IP) ialah kontrak lapisan rangkaian teras yang mendasari kontrak pengangkutan (biasanya dikenali sebagai kontrak kawalan penghantaran atau TCP). Di dalam TCP ialah lapisan soket, yang dipanggil melalui SCI. Lapisan soket ialah API standard subsistem rangkaian, yang menyediakan soket pengguna untuk pelbagai kontrak rangkaian. Daripada akses bingkai mentah kepada Unit Data Kontrak IP (PDU) kepada TCP dan Protokol Datagram Pengguna (UDP), lapisan soket menyediakan cara piawai untuk mengurus sambungan dan menyampaikan data antara pelbagai titik akhir. Kod sumber rangkaian dalam kernel boleh didapati dalam ./linux/net.

(6) Pemacu Peranti

Sejumlah besar kod dalam kernel Linux terdapat dalam pemacu peranti, yang boleh menjalankan peranti perkakasan tertentu. Pokok sumber Linux menyediakan subdirektori pemacu, yang selanjutnya ditakrifkan sebagai pelbagai peranti yang disokong, seperti Bluetooth, I2C, bersiri, dsb. Kod untuk pemacu peranti boleh didapati dalam ./linux/drivers.

(7) Kod bergantung kepada seni bina

Walaupun Linux sebahagian besarnya bebas daripada seni bina yang dijalankan, dan terdapat elemen yang mesti dipertimbangkan untuk seni bina itu beroperasi dengan betul dan mencapai kecekapan yang lebih tinggi. Subdirektori ./linux/arch mentakrifkan bahagian kod sumber kernel yang bergantung kepada seni bina, yang mengandungi pelbagai subdirektori khusus seni bina (bersama-sama membentuk BSP). Untuk sistem desktop biasa, direktori x86 digunakan. Setiap subdirektori seni bina mengandungi banyak subdirektori lain, dan setiap subdirektori memfokuskan pada aspek tertentu kernel, seperti but, kernel, pengurusan memori, dll. Kod yang bergantung kepada seni bina ini boleh didapati dalam ./linux/arch.

Jika kemudahalihan dan kecekapan kernel Linux tidak cukup baik, Linux juga menyediakan beberapa ciri lain yang sukar untuk diklasifikasikan di dalamnya. Sebagai sistem pengendalian pengeluaran dan perisian sumber terbuka, Linux ialah platform yang baik untuk menguji kontrak baharu dan penambahbaikannya. Linux menyokong rangkaian protokol rangkaian yang luas, termasuk TCP/IP klasik, serta sambungan kepada rangkaian berkelajuan tinggi (kurang daripada 1Gigabit Ethernet [GbE] dan 10GbE). Linux juga boleh menyokong kontrak seperti Kontrak Penghantaran Kawalan Aliran (SCTP), yang menyediakan lebih banyak ciri perantaraan daripada TCP (dan merupakan pengganti kepada kontrak lapisan pengangkutan). Linux juga merupakan kernel dinamik, menyokong penambahan atau pemadaman dinamik komponen perisian. Dikenali sebagai modul kernel yang boleh dimuatkan secara dinamik, ia boleh dimasukkan atas permintaan pada masa but (modul pada masa ini diperlukan untuk peranti tertentu) atau oleh pengguna pada bila-bila masa.

Salah satu penambahbaikan terkini pada Linux ialah keupayaannya untuk digunakan sebagai sistem pengendalian (dipanggil hypervisor) untuk sistem pengendalian lain. Baru-baru ini, perubahan telah dibuat pada kernel yang dipanggil Mesin Maya berasaskan Kernel (KVM). Perubahan ini membolehkan soket baharu untuk ruang pengguna, yang membolehkan sistem pengendalian lain berjalan di atas kernel yang didayakan KVM. Selain menjalankan contoh Linux yang lain, Microsoft Windows juga boleh dimaya. Satu-satunya sekatan ialah pemproses asas mesti menyokong arahan virtualisasi baharu.

Empat, perbezaan antara seni bina Linux dan struktur kernel

1. Apabila ditanya tentang seni bina Linux (iaitu, bagaimana sistem Linux distrukturkan), kita boleh menjawabnya dengan merujuk kepada gambar di sebelah kanan: Dari perspektif yang besar, seni bina Linux boleh dibahagikan kepada dua bahagian:

《linux内核分析》_linux内核什么意思_linux内核详解2. Sebab mengapa seni bina Linux dibahagikan kepada ruang pengguna dan ruang kernel:

1) CPU moden biasanya melaksanakan mod kerja yang berbeza,

Ambil ARM sebagai contoh: ARM melaksanakan 7 mod kerja Dalam mod yang berbeza, arahan yang CPU boleh laksanakan atau daftar yang diakses adalah berbeza:

.

Ambil (2) X86 sebagai contoh: X86 melaksanakan 4 tahap kebenaran yang berbeza, Ring0-Ring3;

2) Oleh itu, dari perspektif CPU, Linux membahagikan sistem kepada dua bahagian untuk melindungi keselamatan kernel

3. Ruang pengguna dan ruang kernel adalah dua keadaan pelaksanaan program yang berbeza Kami boleh menyelesaikan pemindahan dari ruang pengguna ke ruang kernel melalui "panggilan sistem" dan "gangguan perkakasan"

.

4. Struktur kernel Linux (perhatikan perbezaan antara seni bina LInux dan struktur kernel Linux)

linux内核什么意思_linux内核详解_《linux内核分析》

5. Mekanisme platform dipacu Linux

Berbanding dengan mekanisme device_driver tradisional mekanisme platformdriver Linux ini, kelebihan yang sangat ketara ialah mekanisme platform mendaftarkan sumbernya sendiri ke dalam kernel dan diuruskan oleh kernel Apabila menggunakan sumber tersebut dalam pemacu, piawaian yang disediakan oleh platform_device digunakan dan gunakan soket. Ini meningkatkan kebebasan pemandu dan pengurusan sumber, tetapi mempunyai kemudahalihan dan keselamatan yang lebih baik. Berikut ialah gambarajah skema hierarki pemandu SPI Bas SPI dalam Linux boleh difahami sebagai bas yang diambil daripada pengawal SPI:

linux内核什么意思_《linux内核分析》_linux内核详解

Seperti pemandu tradisional, mekanisme platform juga dibahagikan kepada tiga langkah:

1 Peringkat pendaftaran bas:

Kernel_init()→do_basic_setup()→driver_init()→platform_bus_init()→bus_register(&platform_bus_type) dalam fail main.c semasa pemulaan permulaan kernel mendaftarkan bas platform (bas maya, platform_bus).

2. Peringkat peralatan:

Apabila mendaftarkan peranti, Platform_device_register()→platform_device_add()→(pdev→dev.bus=&platform_bus_type)→device_add(), sekali gus melampirkan peranti pada bas maya.

3 Peringkat pendaftaran pemandu:

Platform_driver_register()→driver_register()→bus_add_driver()→driver_attach()→bus_for_each_dev(), lakukan __driver_attach()→driver_probe_device() untuk setiap peranti yang tergantung pada platformbus maya, dan tentukan drv→bus→match() Whecution berjaya, pada masa ini, laksanakan platform_match→strncmp(pdev→name,drv→name,BUS_ID_SIZE) melalui penunjuk jam tangan Jika ia sepadan, panggil really_probe (sebenarnya jalankan platform_driver→probe(platform_device) peranti yang sepadan.) untuk memulakan. pengesanan sebenar Jika siasatan berjaya, peranti terikat kepada pemandu.

Ia boleh dilihat dari dalam bahawa mekanisme platform akhirnya memanggil tiga fungsi utama bus_register(), device_add(), dan driver_register().

Struktur Platform_device menerangkan peranti struktur platform, yang mengandungi struktur peranti biasa structdevicedev; (Perhatikan bahawa nama ini mestilah sama dengan platform_driver.driveràname sebelum ini, sebabnya akan dijelaskan lebih awal.)

Perkara yang paling penting dalam struktur ini ialah struktur sumber, itulah sebabnya mekanisme platform diperkenalkan.

Sebab mengapa nama harus sama:

《linux内核分析》_linux内核详解_linux内核什么意思

Pemandu yang disebutkan di dalamnya akan memanggil fungsi bus_for_each_dev() semasa mendaftar, dan melakukan __driver_attach()→driver_probe_device() untuk setiap peranti yang tergantung pada platformbus maya, ujian awal dev dan drv akan dilakukan padanan, fungsi yang ditunjuk oleh drv->bus->match dipanggil. Dalam fungsi platform_driver_register, drv->driver.bus=&platform_bus_type, jadi drv->bus->match ialah platform_bus_type→match, iaitu fungsi platform_match.

adalah untuk membandingkan nama dev dan drv Jika mereka sama, mereka akan melangkah ke dalam fungsi really_probe(), jadi mereka akan melangkah ke fungsi probe yang ditulis sendiri untuk pemadanan selanjutnya. Oleh itu, dev→name dan driver→drv→name mesti diisi dengan sama semasa permulaan.

Jenis pemacu yang berbeza mempunyai fungsi padanan yang berbeza Pemacu platform ini membandingkan nama dev dan drv Adakah anda masih ingat padanan dalam pemacu USB? Ia membandingkan ProductID dan VendorID.

Ringkasan peribadi faedah mekanisme Platform:

1. Sediakan bas jenis_bas ​​platform, dan tambahkan peranti SOC bukan jenis bas ini pada bas maya ini. Akibatnya, model pemandu peranti bas boleh dipopularkan.

2. Sediakan struktur data jenis platform_device dan platform_driver, membenamkan struktur data peranti dan pemacu tradisional ke dalamnya, tetapi menambahkan ahli sumber untuk disepadukan dengan mudah dengan pemuat but dan kernel baharu seperti OpenFirmware yang memindahkan sumber peranti secara dinamik.

Enam, seni bina kernel Linux

Memandangkan kernel Linux bersifat monolitik, ia menggunakan ruang terbesar dan mempunyai kerumitan tertinggi berbanding jenis kernel lain. Ini adalah ciri reka bentuk yang menimbulkan sedikit kontroversi pada hari-hari awal Linux, tetapi masih membawa beberapa kelemahan reka bentuk yang sama yang wujud dalam satu kernel.

linux内核什么意思_《linux内核分析》_linux内核详解

Untuk menangani kecacatan ini, satu perkara yang telah dilakukan oleh pembangun kernel Linux ialah menjadikan modul kernel boleh dimuatkan dan tidak dimuatkan pada masa jalan, bermakna anda boleh menambah atau mengalih keluar ciri kernel secara dinamik. Selain menambah keupayaan perkakasan pada kernel, ini boleh termasuk modul untuk menjalankan proses pelayan, seperti virtualisasi peringkat rendah, tetapi ia juga boleh menggantikan keseluruhan kernel tanpa memerlukan but semula komputer dalam kes individu.

Bayangkan jika anda boleh menaik taraf kepada pek perkhidmatan Windows tanpa perlu but semula...

linux内核详解_《linux内核分析》_linux内核什么意思

Tujuh, modul kernel

Bagaimana jika Windows sudah memasang semua pemacu yang tersedia, dan anda hanya perlu menghidupkan pemacu yang anda perlukan. Ini pada asasnya yang dilakukan oleh modul kernel untuk Linux. Modul kernel, juga dikenali sebagai modul kernel boleh dimuatkan (LKM), diperlukan untuk memastikan kernel berfungsi dengan semua perkakasan tanpa menggunakan semua memori video yang tersedia.

linux内核详解_linux内核什么意思_《linux内核分析》

Modul biasanya menambah fungsi seperti peranti, sistem fail dan panggilan sistem pada kernel asas. Sambungan fail lkm ialah .ko dan biasanya disimpan dalam direktori /lib/modules. Oleh kerana ciri-ciri modul, anda boleh menyesuaikan kernel dengan mudah dengan menetapkan modul untuk memuatkan atau tidak memuatkan menggunakan arahan menuconfig pada permulaan, mengedit fail /boot/config, atau memuatkan dan memunggah modul secara dinamik menggunakan arahan modprobe.

Modul pihak ketiga dan sumber tertutup tersedia dalam beberapa pengedaran, seperti Ubuntu, yang mungkin sukar dipasang secara lalai kerana kod sumber modul tersebut tidak tersedia. Pembangun perisian (iaitu nVidia, ATI, dll.) tidak menyediakan kod sumber, sebaliknya membina modul mereka sendiri dan menyusun fail .ko yang diperlukan untuk pengedaran. Malah, modul sedemikian adalah percuma seperti bir, tetapi ia tidak bebas seperti pertuturan dan oleh itu tidak termasuk dalam beberapa pengedaran kerana penyelenggara merasakan ia "mencemarkan" kernel dengan menyediakan perisian bukan percuma.

Inti bukan ajaib, tetapi ia penting untuk mana-mana komputer yang berfungsi dengan baik. Kernel Linux berbeza daripada OSX dan Windows kerana ia mengandungi pemacu peringkat kernel dan membolehkan banyak perkara berfungsi "di luar kotak". Mudah-mudahan anda akan mengetahui lebih lanjut tentang cara perisian dan perkakasan berfungsi bersama-sama dan fail yang diperlukan untuk memulakan komputer anda.

Kesimpulan: Kuasa kepentingan adalah tidak terhingga. Minat boleh membawa semangat Jika kerja boleh digabungkan dengan minat, akan wujud semangat untuk bekerja Dengan cara ini, kerja bukan hanya kerja, tetapi juga sejenis keseronokan.

Atas ialah kandungan terperinci Memahami kerja persediaan kernel Linux: memahami bahasa C dan sedikit tentang sistem pengendalian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:itcool.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam