it-swarm-eu.dev

Jak určit architekturu Linuxového jádra?

uname -m dává i686 a uname -m dává výstup i686 i386 ve stroji Red Hat Enterprise Linux Server verze 5.4 (Tikanga). Potřebuji nainstalovat Oracle Database 10g Release 2 do tohoto počítače. Jak tedy mohu rozhodnout, zda je architektura jádra 32bit nebo 64bit?

105
user2914

i386 a i686 jsou 32bitové.
x86_64 je 64-bit

příklad pro 64 bit:

[email protected]:~$ uname -a  
Linux behrooz 2.6.32-5-AMD64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 **x86_64** GNU/Linux

ÚPRAVA:
Viz je moje linux ARM 32 nebo 64 bit? pro ARM

99
Behrooz

Je to jednoduché! Použijte příkaz Arch.

49
PHPst

@ behrooz je správné. Bohužel uname vyžaduje, abyste znát architektury. Vlastně jsem hledal seznam architektur a našel jsem tento článek , který odpovídá vaší otázce. Co se týká uname -m:

x86_64 GNU/Linux označuje, že máte spuštěné 64bitové jádro systému Linux. Pokud použijete příkaz i386/i486/i586/i686, jedná se o 32bitové jádro.

Chcete-li zjistit, zda je hardware schopen spustit 64bitové jádro

grep flags /proc/cpuinfo

Ve výstupu vyhledejte následující (všechny příznaky načtené z tato odpověď stackoverflow pro stejnou otázku)

  • Příznak lm znamená CPU v dlouhém režimu - 64bitový procesor
  • tm příznak znamená Chráněný režim - 32bitový procesor
  • rm flag znamená Real Mode - 16 bit CPU
32
xenoterracide

(ÚPRAVA: tato odpověď je špatná. Díky poznámce @ Lizardxa)

V Bash pomocí přetečení celého čísla:

if ((1<<32)); then
  echo 64bits
else
  echo 32bits
fi

Je to mnohem efektivnější než vyvolání jiného procesu nebo otevření souborů.

21
Luchostein

Pro Debian:

Na mém PC

 ~> dpkg --print-architecture 
 AMD64 
 ~> dpkg --print-cizí-architektury 
 i386 

My Raspberry Pi 2

 ~> dpkg --print-architecture 
 armhf 

Nejjednodušší způsob je spustit:

getconf LONG_BIT

což bude výstup 64 nebo 32 v závislosti na tom, zda je to 32 nebo 64 bitů.

např:

[email protected]:~$ getconf LONG_BIT
64
13
dannyw

použijte syscap z Formake project

syscap umožňuje snímat mnoho vlastností systému a testovat závislosti. Je to přenosný skript Shell.

Získejte architekturu CPU:

syscap info -Arch

Získejte název a verzi jádra:

syscap info -kernel -kernver
2
Alex

Dalším způsobem je zkontrolovat architekturu, pro kterou byl kompilován nějaký systémový soubor

$ file /usr/bin/ld
/usr/bin/ld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
1
minaev

Nebo můžete použít to, co interně dělá příkaz name, pokud chcete implementovat některé věci sami:

#include <sys/utsname.h>
#include <stdio.h>

int main() {
    struct utsname name;
    uname(&name);
    printf("%s\n",name.machine);
    return 0;
}
0
Meow

Zde je další metoda používající uname.

Z man uname:

... -i, --hardware-platform print the hardware platform or "unknown" ...

# uname -i x86_64#

0
clusterdude

Pokud hledáte jednoduchou linii, je to nejspolehlivější řešení, které jsem našel a vrací 64 nebo 2. Nezáleží na tom, zda běžíte ARM nebo ne), a mělo by to fungovat na každém systému pomocí bash nebo sh.

Pozor, předpokládá se, že systém je 32bitový nebo 64bitový. Viz moje vysvětlení níže, pokud potřebujete detekovat 8- 16- nebo nějakou jinou bitovou architekturu.

[$ ((0xffffffff)) -eq -1] && echo 32 || echo 64

Co se tady děje?
Logika je velmi jednoduchá a vše se scvrkává na to, jak počítače ukládají podepsaná celá čísla. 32bitová architektura má pouze 32 bitů, které může použít pro ukládání celých čísel podepsaných, zatímco 64bitová architektura má 64 bitů! Jinými slovy sada celých čísel, která lze uložit, je omezená. Polovina této sady představuje záporná čísla a polovina představuje kladná čísla. Podepsané celé číslo rovné -1 je představováno jako největší číslo, které může být pro danou architekturu uloženo v daném počtu bitů. V 32bitovém systému může být -1 představováno hexadecimální hodnotou 0xFFFFFFFF (což je 32 binárních bitů, všechny se rovnají 1). V 64bitovém systému se 0xFFFFFFFF překládá na 4 294 967 295, základní 10, zatímco 0xFFFFFFFFFFFFFFFF je reprezentace pro -1). Uvidíte, jak by to bylo snadno škálovatelné pro systémy, které jsou také 8- nebo 16bitové, což by se rovnalo -1 při 0xFF a 0xFFFF.

0
b_laoshi