Kernel Linux

Dijelaskan Makefile Kernel Linux

Dijelaskan Makefile Kernel Linux
Dalam pembangunan perisian, proses membuat dan mengurus repositori kod besar dapat menjadi sangat kompleks dengan mudah.

Untuk mengurus dan mengurangkan kerumitan ini, pembangun perisian menyusun kod dalam fail kecil yang menghubungkan ke modul tertentu. Pembangun boleh menyusun setiap fail ini secara berasingan dan kemudian menghubungkannya bersama-sama untuk membuat perisian akhir yang dapat dilaksanakan.

Contohnya ialah projek C yang terdiri daripada fail kod sumber di .c sambungan dan antara muka perisian di .sambungan l. Setiap fail sumber dikumpulkan bersama dengan fail tajuk untuk dibuat. o objek dihubungkan bersama menggunakan perpustakaan, dengan itu membuat fail yang boleh dilaksanakan.

Untuk melakukan proses ini, pembangun perisian menggunakan alat, seperti Make, untuk mengotomatisasi proses build dan dependensi fail yang diperlukan. Buat menggunakan Makefiles untuk mengurus tingkah laku proses penyusunan.

Alat GNU Make menyediakan sekumpulan peraturan dan konvensi yang digunakan untuk membuat Makefiles dan mengurangkan kerumitan dalam meningkatkan kecekapan.

Dalam tutorial ini, kita akan membincangkan Linux Kernel Makefiles, secara khusus Kconfig dan Kbuild.

Sebelum kita memulakan, ada baiknya kita perhatikan bahawa artikel ini tidak berpura-pura mengajar segala-galanya mengenai sistem Kernel Build. Walau bagaimanapun, kami memberikan gambaran umum tahap tinggi untuk membina imej dan modul vmlinux.

Sekiranya anda mahukan maklumat di luar skop tutorial ini, kami mengesyorkan sumber berikut untuk mendapatkan maklumat yang lebih baik:

https: // linkfy.ke / goMakefilesDocs

https: // linkfy.ke / gnuMembuat

Kernel Makefiles: Gambaran Keseluruhan

Sistem Pembuatan Kernel, juga disebut sistem konfigurasi, adalah alat penting - bagi mereka yang memerlukannya - yang telah lama wujud. Walau bagaimanapun, tidak semua orang akan menggunakan sistem ini; malah pemacu dan pembangun perisian tahap rendah lain jarang menggunakannya. Oleh kerana anda membaca ini, ini bermaksud anda ingin mengetahui lebih lanjut mengenai Sistem Pembinaan Kernel.

Oleh itu, kita akan membincangkan bagaimana Kernel disusun dan membincangkan sistem Kbuild dan Kconfig supaya anda dapat memahaminya dengan lebih baik.

Kernel Makefile mempunyai lima komponen teras:

  1. Makefile: Ini adalah fail membuat teratas yang terletak di akar sumber.
  2. arch / $ (ARCH) Makefile: Ini adalah lengkungan Makefile; ia bertindak sebagai tambahan untuk Makefile teratas.
  3. .konfigurasi: Ini adalah fail konfigurasi Kernel.
  4. Skrip / Makefile.*: Ini menentukan peraturan yang ditetapkan untuk semua Makefiles kbuild.
  5. Kbuild Makefiles: Terdapat kira-kira 500 kfk Makefiles, dan mereka sangat mudah dibaca. Pertimbangkan fail seperti:

https: // elixir.butlin.com / linux / terkini / sumber / skrip / Kbuild.merangkumi

Kconfig

Fail Kconfig mengandungi modul yang membantu ketika menggunakan make * config. Ia membantu Kernel membuat konfigurasi selektif, mewujudkan modulariti dan penyesuaian untuk proses pembuatan Kernel.

Terdapat pelbagai sasaran konfigurasi yang ditentukan oleh sistem Kconfig. Anda boleh menggunakan bantuan membuat untuk melihat sasaran yang tersedia. Sasaran ini diproses oleh pelbagai program yang disediakan oleh Kernel semasa proses pembinaan.

Beberapa sasaran Kconfig termasuk:

buat linux-windriver.gconfig
buat linux-windriver.xconfig

NOTA: Untuk menggunakan gconfig dan xconfig, anda harus memasang alat pengembangan QT pada sistem host.

Pertimbangkan perkara berikut:

Ringkasan kod Defconfig dari sumber berikut:

https: // elixir.butlin.com / linux / v5.9 / sumber / skrip / kconfig / Makefile # L98

1. defconfig: $ (obj) / konf
2. ifneq ($ (wildcard $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Konfigurasi lalai didasarkan pada '$ (KBUILD_DEFCONFIG)'"
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. yang lain
6. @ $ (kecho) "*** Konfigurasi lalai berdasarkan sasaran '$ (KBUILD_DEFCONFIG)'"
7. $ (Q) $ (MAKE) -f $ (srctree) / Makefile $ (KBUILD_DEFCONFIG)
8. endif
9.
10. % _defconfig: $ (obj) / konf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configfiles = $ (wildcard $ (srctree) / kernel / config / $ @ $ (srctree) / arch / $ (SRCARCH) / config / $ @)
14.
15. %.config: $ (obj) / konf
16. $ (if $ (call configfiles) ,, $ (ralat Tidak ada konfigurasi untuk sasaran ini pada seni bina ini))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / skrip / kconfig / merge_config.sh-m .config $ (configfiles)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig

Snapshot kod Oldconfig dari sumber berikut:

https: // elixir.butlin.com / linux / v5.9 / sumber / skrip / kconfig / conf.c # L694

1. kes olddefconfig:
2. lalai:
3. rehat;
4.
5.
6. jika (input_mode == saveefconfig)
7. jika (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Ralat semasa menyimpan defconfig ke:% s \ n \ n",
9. defconfig_file);
10. pulangan 1;
11.
12. lain jika (input_mode != listnewconfig && input_mode != helpnewconfig)
13. sekiranya (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Ralat semasa menulis konfigurasi.\ n \ n ");
15. jalan keluar (1);
16.
17.
18. / *
19. * Buat automatik.conf jika ia tidak wujud.
20. * Ini menghalang GNU Make 4.1 atau lebih tua daripada mengeluarkan
21. * "sertakan / config / auto.conf: Tiada fail atau direktori seperti itu "
22. * di Makefile peringkat teratas
23. *
24. * syncconfig selalu membuat atau mengemas kini secara automatik.conf kerana ia
25. * digunakan semasa membina.
26. * /
27. jika (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "\ n *** Ralat semasa penyegerakan konfigurasi.\ n \ n ");
30. pulangan 1;
31.
32.
33. pulangan 0;
34.

Terdapat banyak sasaran dalam sistem Kconfig. Beberapa yang biasa termasuk konfigurasi dan menuconfig.

Seperti disebutkan, target diproses oleh berbagai program dalam sistem host, baik menyediakan GUI atau baris perintah. Anda boleh mencari alat Kconfig di / scripts / Kconfig di sumber kernel.

https: // elixir.butlin.com / linux / terkini / sumber / skrip / kconfig

https: // elixir.butlin.com / linux / terkini / sumber / skrip / kconfig / Makefile

Proses pertama biasanya adalah membaca fail Kconfig di direktori root, yang digunakan untuk membina pangkalan data konfigurasi awal. Semasa proses berlanjutan, pangkalan data dikemas kini ketika membaca fail mengikut urutan berikut:

.konfigurasi
/ lib / modul / $ (shell, uname-r) /.konfigurasi
/ etc / kernel-config
/ boot / config - $ (shell, uname-r)
ARCH_DEFCONFIG
arch / $ (ARCH) / defconfig

.file config kemudian dijatuhkan ke syncconfig, yang menerima .fail konfigurasi sebagai input. Ia memproses fail dan mengeluarkan fail, yang kemudian diklasifikasikan ke dalam pelbagai kategori seperti:

Fail Kbuild

Hampir semua fail Kernel adalah Kbuild Makefiles yang menggunakan infrastruktur Kbuild, yang merupakan ciri pembuatan rekursif. Recursive Make adalah cara menggunakan alat Make sebagai arahan dalam Makefile. Rekursi sangat berguna semasa menyusun projek besar.

Kbuild berfungsi dengan merujuk kepada semua fail yang kami sebutkan di bahagian di atas.

Sistem Kbuild membina komponennya menggunakan Makefile teratas yang merangkumi lengkungan Makefiles dengan nama arch / $ (ARCH) / Makefile dalam fail konfigurasi. Secara rekursif turun ke subdirektori yang menggunakan Make on komponen menggunakan rutin dalam skrip / Makefile.*. Kbuild kemudian membina objek bersebelahan dan menghubungkannya ke objek, mencipta vmlinux.

Untuk mengetahui lebih lanjut mengenai sintaks yang digunakan dalam Kbuild Makefiles, rujuk dokumentasi.

Pertimbangkan skrip berikut.

https: // github.com / torvalds / linux / blob / master / skrip / link-vmlinux.sh

Fail objek o yang digunakan untuk membuat vmlinux disusun terlebih dahulu dalam bawaan masing-masing .fail sebagai var KBUILD_VMLINUX_INIT, MAIN, LIBS. Ini disusun dalam vmlinux.

https: // github.com / torvalds / linux / blob / master / skrip / Makefile.membina

Kesimpulannya

Dalam panduan ini, kami melihat sistem Kbuild dan Kconfig dalam sistem binaan Kernel dan bagaimana ia berfungsi. Seperti yang kami sebutkan di awal tutorial, topik yang dibincangkan luas dan tidak dapat dibahas dalam satu tutorial.

Butang tetikus tengah tidak berfungsi pada Windows 10
The butang tetikus tengah membantu anda menelusuri halaman web dan skrin yang panjang dengan banyak data. Sekiranya ia berhenti, anda akan menggunakan...
Cara menukar butang tetikus Kiri & Kanan pada PC Windows 10
Sudah menjadi kebiasaan bahawa semua peranti tetikus komputer dirancang secara ergonomik untuk pengguna tangan kanan. Tetapi ada peranti tetikus yang ...
Tiru klik Tetikus dengan melayang menggunakan Mouse Tanpa Klik di Windows 10
Menggunakan tetikus atau papan kekunci dalam keadaan salah penggunaan berlebihan boleh menyebabkan banyak masalah kesihatan, termasuk ketegangan, sind...