Apa perbedaan antara "pilih" vs "tergantung" di kernel Linux Kconfig?

11

Apa perbedaan dalam dependensi antara selectdan depends ondalam file kernel Kconfig?

config FB_CIRRUS
tristate "Cirrus Logic support"
depends on FB && (ZORRO || PCI)
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
---help---
This enables support for Cirrus Logic GD542x/543x based boards on
Amiga: SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum.

Dalam contoh di atas, bagaimana FB_CIRRUShubungannya berbeda FB && (ZORRO || PCI)dari yang seharusnya FB_CFB_FILLRECT, FB_CFB_COPYAREAdan FB_CFB_IMAGEBLIT?

Memperbarui

Saya perhatikan bahwa depend ontidak terlalu banyak melakukan dalam hal urutan kompilasi.

Sebagai contoh. Keberhasilan membangun AppB tergantung pada LibB yang terhubung secara statis yang akan dibangun terlebih dahulu. Pengaturan depends on LibBdi Kconfig untuk AppB tidak akan memaksa LibB dibangun terlebih dahulu. Pengaturan select LibBakan.

TheMeaningfulEngineer
sumber

Jawaban:

17

depends onmenunjukkan simbol harus dipilih secara positif ( =y) agar opsi ini dapat dikonfigurasi. Misalnya, depends on FB && (ZORRO || PCI)berarti FBharus telah dipilih, dan (&&) salah satu ZORROatau (||) PCI. Untuk hal-hal seperti make menuconfig, ini menentukan apakah suatu opsi akan disajikan atau tidak.

selectsecara positif menetapkan simbol. Misalnya, select FB_CFB_FILLRECTakan berarti FB_CFB_FILLRECT=y. Ini memenuhi potensi ketergantungan dari beberapa opsi konfigurasi lainnya. Perhatikan bahwa kernel kernel tidak menyarankan penggunaan ini untuk simbol "terlihat" (yang dapat dipilih / tidak dipilih oleh pengguna) atau untuk simbol yang memiliki ketergantungan, karena itu tidak akan diperiksa.

Referensi: https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt

goldilocks
sumber
3

depends berarti bahwa opsi hanya muncul di menu jika prasyaratnya (konstruksi boolean di belakangnya) terpenuhi.

selectberarti bahwa, ketika pengguna memilih opsi ini, opsi yang diberikan sebagai argumen untuk selectakan dipilih secara otomatis.

mirabilos
sumber
1

Yang saya suka pikirkan adalah sebagai:

  • selectadalah "bagian" dari depends, karena ketika hanya ada satu ketergantungan yang mungkin untuk suatu fitur.

    Karena hanya ada satu ketergantungan yang mungkin, selectpilih saja opsi itu secara otomatis, dan menghemat pekerjaan Anda secara eksplisit memilih ketergantungan secara manual terlebih dahulu.

    Otomatisasi ini adalah apa yang Anda peroleh dari pembatasan subset karena hanya memiliki satu ketergantungan yang mungkin.

  • depends lebih umum, dan berfungsi pada kasus di mana fitur bergantung pada antarmuka yang memiliki beberapa implementasi.

    Misalnya, pada 4.15, ada 2 implementasi BPF: Klasik dan Diperpanjang.

    Oleh karena itu, BPF_JITfitur ini tergantung pada setidaknya satu implementasi yang diaktifkan:

    config BPF_JIT
        depends on HAVE_CBPF_JIT || HAVE_EBPF_JIT
    

    Karena ada dua implementasi yang mungkin untuk BFP_JIT, Kconfig tidak dapat memilih yang benar secara otomatis.

    Kadang-kadang saya berharap saya bisa mengatakan: "jika tidak ada dependensi yang terpenuhi, pilih yang ini secara default", itu akan memungkinkan untuk mengotomatiskan hal-hal lebih lanjut.

Ada juga "sesuatu yang menyembunyikan opsi lain pada menuconfig" efek, tetapi ini hanya bulu :-)

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
sumber