GNU/Linux >> Belajar Linux >  >> Linux

Linux – Apakah Kernel Perlu Dikompilasi di Lingkungan Dev yang Sama Dengan Userspace?

Katakanlah userspace saya (paket) dikompilasi dengan gcc 4.7 dan libc6 2.13 (Debian Mengi)

Dapatkah saya mengkompilasi kernel linux di lingkungan dev yang berbeda, seperti gcc 6.3 dan libc6 2.24 (yaitu, di bawah Debian Stretch) ?

Saya tahu bahwa tidak seperti paket, kernel tidak ditautkan dengan pustaka dinamis apa pun. Jadi secara teoritis, seharusnya tidak ada bedanya gcc . yang mana dan libc itu dikompilasi di bawah.

Apakah ini benar ?
Bisakah saya mengalami masalah saat melakukan ini ?
Mungkinkah ada beberapa ketidaksesuaian yang disebabkan oleh gcc yang berbeda versi?

Di sisi lain, gcc . yang lebih baru memiliki beberapa fitur menarik, keamanan yang lebih baik. Jadi mungkin, kernel harus dikompilasi dengan gcc terbaru ?

Jawaban yang Diterima:

Seperti yang Anda tunjukkan, pustaka C yang digunakan tidak berdampak pada kernel, kernel tidak menggunakan pustaka C. (Ada dampak tidak langsung, karena ini digunakan untuk membangun alat yang digunakan kernel selama proses pembuatannya, tetapi itu sangat kecil kemungkinannya untuk memengaruhi hasil akhirnya.)

Kernel dapat dibangun dengan berbagai versi kompiler yang berbeda; menurut dokumentasinya, hanya membutuhkan GCC 3.2 atau lebih baru. Anda juga akan menemukan bahwa perlu beberapa saat bagi kernel untuk secara resmi mendukung versi terbaru GCC, dan lebih lama lagi bagi kernel distribusi untuk menggunakannya. Misalnya, paket kernel Debian Linux menggunakan GCC 6, dan bahkan memiliki paket khusus untuk menyediakan versi kompiler yang benar (linux-compiler-gcc-6-x86 di amd64 dan i386 ). Tidak ada hubungan antara kompiler yang digunakan untuk kernel dan kompiler yang digunakan untuk ruang pengguna (juga tidak perlu menggunakan kompiler yang sama untuk semua ruang pengguna — program lama yang dibuat dengan GCC 3 atau bahkan 2 masih bekerja pada sistem modern).

Versi kompiler yang lebih baru memang menyediakan lebih banyak fitur keamanan, tetapi GCC 6 cukup baik untuk sebagian besar jika tidak semua fitur keamanan yang digunakan di kernel.


Linux
  1. Apakah Linux memerlukan pembersihan sesekali?

  2. Seberapa Portabel /dev/stdin, /dev/stdout Dan /dev/stderr?

  3. Linux – Apa Arti Huruf 'u' Di /dev/urandom?

  1. Bagaimana kernel Linux menentukan urutan panggilan __init?

  2. Apakah kernel Linux memiliki fungsi utama?

  3. Dereferensi NULL-pointer kernel Linux di memset dari kzalloc

  1. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  2. Mengapa Linux mencantumkan drive NVMe sebagai /dev/nvme0 bukan /dev/sda?

  3. Mengapa Linux harus memiliki `/dev/cdrom` dan `/media/cdrom`?