Kernel Linux

Dijelaskan Makefile Kernel Linux

Dijelaskan Makefile Kernel Linux
Dalam pengembangan perangkat lunak, proses membuat dan mengelola repositori kode besar dapat menjadi sangat kompleks dengan mudah.

Untuk mengelola dan mengurangi kerumitan ini, pengembang perangkat lunak mengatur kode dalam file kecil yang ditautkan ke modul tertentu. Pengembang dapat mengkompilasi masing-masing file ini secara terpisah dan kemudian menautkannya bersama-sama untuk membuat perangkat lunak akhir yang dapat dieksekusi.

Contohnya adalah proyek C yang terdiri dari file kode sumber di .ekstensi c dan antarmuka perangkat lunak di .h ekstensi. Setiap file sumber dikompilasi bersama dengan file header untuk dibuat. o objek dihubungkan bersama menggunakan perpustakaan, sehingga membuat file yang dapat dieksekusi.

Untuk melakukan proses ini, pengembang perangkat lunak menggunakan alat, seperti Make, untuk mengotomatiskan proses pembuatan dan dependensi file yang diperlukan. Manfaatkan Makefiles untuk mengelola perilaku proses kompilasi.

Alat Make GNU menyediakan seperangkat aturan dan konvensi yang digunakan untuk membuat Makefile dan mengurangi kerumitan dalam meningkatkan efisiensi.

Dalam tutorial ini, kita akan membahas Makefile Kernel Linux, khususnya Kconfig dan Kbuild.

Sebelum kita mulai, ada baiknya untuk dicatat bahwa artikel ini tidak berpura-pura mengajarkan segala sesuatu tentang sistem Kernel Build. Namun, kami memberikan ikhtisar tingkat tinggi tentang membangun gambar dan modul vmlinux.

Jika Anda menginginkan informasi di luar cakupan tutorial ini, kami merekomendasikan sumber daya berikut untuk informasi yang lebih baik:

https://linkfy.ke/goMakefilesDocs

https://linkfy.ke/gnuMake

Kernel Makefiles: Gambaran Umum

Kernel Build System, juga disebut sistem konfigurasi, adalah alat penting-bagi mereka yang membutuhkannya-yang telah ada untuk sementara waktu. Namun, tidak semua orang akan menggunakan sistem ini; bahkan driver dan pengembang perangkat lunak tingkat rendah lainnya jarang menggunakannya. Karena Anda membaca ini, itu berarti Anda ingin tahu lebih banyak tentang Sistem Pembuatan Kernel.

Jadi, kita akan membahas bagaimana Kernel dikompilasi dan membahas sistem Kbuild dan Kconfig sehingga Anda dapat memahaminya dengan lebih baik.

Kernel Makefile memiliki lima komponen inti:

  1. Makefile: Ini adalah file make teratas yang terletak di root sumber.
  2. arch/$(ARCH) Makefile: Ini adalah lengkungan Makefile; itu bertindak sebagai suplemen untuk Makefile teratas.
  3. .konfigurasi: Ini adalah file konfigurasi Kernel.
  4. Script/Makefile.*: Ini mendefinisikan aturan yang ditetapkan untuk semua kbuild Makefiles.
  5. Kbuild Makefile: Ada sekitar 500 kbuild Makefile, dan tidak mudah dibaca. Pertimbangkan file seperti:

https://obat mujarab.bootlin.com/linux/latest/source/scripts/Kbuild.termasuk

Kconfig

File Kconfig berisi modul yang membantu saat menggunakan make *config. Ini membantu Kernel membuat konfigurasi selektif, menciptakan modularitas dan kemampuan penyesuaian untuk proses pembuatan Kernel.

Ada berbagai target konfigurasi yang ditentukan oleh sistem Kconfig. Anda dapat menggunakan bantuan make untuk melihat target yang tersedia. Target ini diproses oleh berbagai program yang disediakan oleh Kernel selama proses pembuatan.

Beberapa target Kconfig antara lain:

membuat linux-windriver.gconfig
membuat linux-windriver.xconfig

CATATAN: Untuk menggunakan gconfig dan xconfig, Anda harus menginstal alat pengembangan QT di sistem host.

Pertimbangkan hal berikut:

Cuplikan kode defconfig dari sumber berikut:

https://obat mujarab.bootlin.com/linux/v5.9/sumber/skrip/kconfig/Makefile#L98

1. defconfig: $(obj)/conf
2. ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)),)
3. @$(kecho) "*** Konfigurasi default didasarkan pada '$(KBUILD_DEFCONFIG)'"
4. $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. lain
6. @$(kecho) "*** Konfigurasi default didasarkan pada target '$(KBUILD_DEFCONFIG)'"
7. $(Q)$(MEMBUAT) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG)
8. berakhir jika
9.
10. %_defconfig: $(obj)/conf
11. $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@)
14.
15. %.konfigurasi: $(obj)/conf
16. $(if $(call configfiles),, $(error Tidak ada konfigurasi untuk target ini pada arsitektur ini))
17. $(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .konfigurasi $(file konfigurasi)
18. $(Q)$(MEMBUAT) -f $(srctree)/Makefile olddefconfig

Cuplikan kode Oldconfig dari sumber berikut:

https://obat mujarab.bootlin.com/linux/v5.9/sumber/skrip/kconfig/conf.c#L694

1. kasus olddefconfig:
2. bawaan:
3. istirahat;
4.
5.
6. if (input_mode == saveefconfig)
7. if (conf_write_defconfig(defconfig_file))
8. fprintf(stderr, "n*** Kesalahan saat menyimpan defconfig ke: %s\n\n",
9. defconfig_file);
10. kembali 1;
11.
12. lain jika (input_mode != listnewconfig && input_mode != helpnewconfig)
13. jika (!no_conf_write && conf_write(NULL))
14. fprintf(stderr, "\n*** Kesalahan saat menulis konfigurasi.\n\n");
15. keluar(1);
16.
17.
18. /*
19. * Buat otomatis.conf jika tidak ada.
20. * Ini mencegah GNU Make 4.1 atau lebih tua dari memancarkan
21. * "include/config/auto.conf: Tidak ada file atau direktori seperti itu"
22. * di Makefile tingkat atas
23. *
24. * syncconfig selalu membuat atau memperbarui otomatis.conf karena itu
25. * digunakan selama pembuatan.
26. */
27. if (conf_write_autoconf(sync_kconfig) && sync_kconfig)
28. fprintf(stderr,
29. "\n*** Kesalahan selama sinkronisasi konfigurasi.\n\n");
30. kembali 1;
31.
32.
33. kembali 0;
34.

Ada banyak target di sistem Kconfig. Beberapa yang umum termasuk config dan menuconfig.

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

https://obat mujarab.bootlin.com/linux/terbaru/sumber/skrip/kconfig

https://obat mujarab.bootlin.com/linux/latest/source/scripts/kconfig/Makefile

Proses pertama biasanya membaca file Kconfig di direktori root, yang digunakan untuk membangun database konfigurasi awal. Saat proses berlanjut, database diperbarui saat membaca file dalam urutan berikut:

.konfigurasi
/lib/modules/$(Shell,uname-r)/.konfigurasi
/etc/kernel-config
/boot/config-$(Shell,uname-r)
ARCH_DEFCONFIG
lengkungan/$(ARCH)/defconfig

.file config kemudian dijatuhkan ke syncconfig, yang menerima .file konfigurasi sebagai input. Ini memproses file dan file output, yang kemudian diklasifikasikan ke dalam berbagai kategori seperti:

File Kbuild

Hampir semua file Kernel adalah Kbuild Makefiles yang menggunakan infrastruktur Kbuild, yang merupakan fitur make rekursif. Recursive Make adalah cara menggunakan alat Make sebagai perintah di Makefile. Rekursi sangat berguna saat menyusun proyek besar.

Kbuild bekerja dengan mengacu pada semua file yang kami sebutkan di bagian di atas.

Sistem Kbuild membangun komponennya menggunakan Makefile teratas yang menyertakan Arch Makefiles dengan nama arch/$(ARCH)/Makefile di file konfigurasi. Secara rekursif turun ke subdirektori yang memanggil Make pada komponen menggunakan rutinitas di skrip/Makefile.*. Kbuild kemudian membangun objek yang berdekatan dan menghubungkannya ke objek, menciptakan vmlinux.

Untuk mempelajari lebih lanjut tentang sintaks yang digunakan di Kbuild Makefiles, lihat dokumentasi.

Perhatikan skrip berikut.

https://github.com/torvalds/linux/blob/master/scripts/link-vmlinux.SH

File objek o yang digunakan untuk membuat vmlinux dikompilasi terlebih dahulu di masing-masing bawaannya .file sebagai var KBUILD_VMLINUX_INIT,MAIN,LIBS. Ini disusun dalam vmlinux.

https://github.com/torvalds/linux/blob/master/scripts/Makefile.membangun

Kesimpulan

Dalam panduan ini, kami melihat sistem Kbuild dan Kconfig di sistem pembuatan Kernel dan cara kerjanya. Seperti yang kami sebutkan di awal tutorial, topik yang dibahas sangat luas dan tidak dapat dicakup dalam satu tutorial.

Tutorial OpenTTD
OpenTTD adalah salah satu game simulasi bisnis paling populer di luar sana. Dalam game ini, Anda perlu membuat bisnis transportasi yang luar biasa. Na...
SuperTuxKart untuk Linux
SuperTuxKart adalah judul hebat yang dirancang untuk memberi Anda pengalaman Mario Kart gratis di sistem Linux Anda. Ini cukup menantang dan menyenang...
Pertempuran untuk Tutorial Westnoth
The Battle for Wesnoth adalah salah satu game strategi open source terpopuler yang bisa kamu mainkan saat ini. Tidak hanya game ini telah dikembangkan...