GNU/Linux >> Znalost Linux >  >> Linux

Linux – Musí být jádro kompilováno ve stejném vývojovém prostředí jako uživatelský prostor?

Řekněme, že můj uživatelský prostor (balíčky) jsou zkompilovány pomocí gcc 4.7 a libc6 2.13 (Debian Wheezy)

Mohu zkompilovat linuxové jádro v jiném vývojovém prostředí, jako je gcc 6.3 a libc6 2.24 (tj. pod Debian Stretch) ?

Vím, že na rozdíl od balíčků není jádro spojeno s žádnými dynamickými knihovnami. Teoreticky by tedy neměl být rozdíl, který gcc a libc byl zkompilován pod.

Je to pravda?
Mohl bych se dostat do problémů, když to udělám?
Mohly by být nějaké nekompatibility způsobené různými gcc verze?

Na druhou stranu novější gcc má některé zajímavé funkce, lepší zabezpečení. Možná by tedy jádro mělo být zkompilováno s nejnovějším gcc ?

Přijatá odpověď:

Jak jste zdůraznili, použitá knihovna C nemá žádný dopad na jádro, jádro nepoužívá knihovnu C. (Je to nepřímý dopad, protože se používá k vytváření nástrojů, které jádro používá během procesu sestavování, ale je extrémně nepravděpodobné, že to ovlivní konečný výsledek.)

Jádro lze sestavit s řadou různých verzí kompilátoru; podle své dokumentace potřebuje pouze GCC 3.2 nebo novější. Zjistíte také, že může chvíli trvat, než jádro oficiálně podpoří nejnovější verze GCC, a ještě déle, než je použije distribuční jádro. Například balíček Debian Linux kernel používá GCC 6 a dokonce má vyhrazené balíčky, které poskytují správnou verzi kompilátoru (linux-compiler-gcc-6-x86 na amd64 a i386 ). Neexistuje žádné spojení mezi kompilátorem používaným pro jádro a kompilátorem používaným pro uživatelský prostor (ani není nezbytně nutné používat stejný kompilátor pro celý uživatelský prostor — staré programy sestavené s GCC 3 nebo dokonce 2 stále fungují na moderních systémech).

Novější verze kompilátoru poskytují více bezpečnostních funkcí, ale GCC 6 je dost dobrý pro většinu, ne-li pro všechny bezpečnostní funkce používané v jádře.


Linux
  1. Linux:Rozdíl mezi /dev/console, /dev/tty a /dev/tty0?

  2. Jak přenosné jsou /dev/stdin, /dev/stdout a /dev/stderr?

  3. Linux – Jak se linuxové jádro srovnává s architekturami mikrokernelu?

  1. Linux – Jsou různá jádra Linux/unix zaměnitelná?

  2. Co znamená __init v kódu jádra Linuxu?

  3. Jak linuxové jádro určuje pořadí volání __init?

  1. Má jádro Linuxu hlavní funkci?

  2. Jaká je výhoda kompilace vlastního linuxového jádra?

  3. Jaké je srovnání linuxového jádra s mikrokernelovými architekturami?