onko Linux ARM 32- tai 64-bittinen?

Intelin alla, jonka tiedän voivani tarkastella uname -m -tulosta saadaksesi tietää, onko käyttöjärjestelmäni 32 vai 64-bittinen, mutta ARM: n alla tämä antaa:

armv7l 

Johdin johtopäätökseen

file /usr/bin/ls 

että olen 32-bittisessä käyttöjärjestelmässä, mutta mistä tiedän tämän helpommalla tavalla?

Kommentit

  • varsi 7 on 32-bittinen . ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic. – wikipedia
  • @richard arvasin niin, mutta mikä sitten on 64-bittisen variantin nimi?
  • I Don ’ ei ole pääsyä ARM-koneelle, mutta mikä on uname -a ja gcc -v? Ne voivat olla hyödyllisiä.
  • Announced October 2011, ARMv8-A (often called ARMv8 although not all variants are 64-bit such as ARMv8-R) represents a fundamental change to the ARM architecture. It adds a 64-bit architecture, named "AArch64", and a new "A64" instruction set. AArch64 provides user-space compatibility with ARMv7-A ISA, the 32-bit architecture, therein referred to as "AArch32" and the old 32-bit instruction set, now named "A32" ARM announced their Cortex-A53 and Cortex-A57 cores on 30 October 2012. fi.wikipedia.org/wiki/ARM_architecture#64.2 F32-bittinenarkkitehtuuri
  • Arm oli viimeinen 32-bittisestä prosessorista, joka meni 64-bittiseksi (lukuun ottamatta kuolleita). Suurin osa meni 64-bittiseksi ja kuoli sitten huonon markkinoinnin takia – olettaen, että b etter riittää. Intel x86 oli toiseksi viimeinen, vaikka AMD lisäsi 64-bittisen.

Vastaa

Siellä ovat useita porrastuksia, koska voit käyttää 32-bittistä tai sekoitettua käyttöjärjestelmää 64-bittisellä CPU: lla. Katso 64-bittinen ydin, mutta kaikki 32-bittiset ELF-suoritettavat käynnissä olevat prosessit, miten tämä on? yksityiskohtaisesta keskustelusta (kirjoitettu x86: lle, mutta suurin osa siitä pätee myös virittää).

Suorittimen malli löytyy kohdasta /proc/cpuinfo. Esimerkiksi:

$ cat /proc/cpuinfo Processor : ARMv7 Processor rev 10 (v7l) 

ARMv7 (ja alla) on 32-bittinen. ARMv8 esittelee 64-bittisen komentojoukon.

Jos haluat nähdä, tukeeko järjestelmäsi 64-bittisiä binaareja, tarkista ytimen arkkitehtuuri :

$ uname -m armv7l 

64-bittisessä prosessorissa näet merkkijonon, joka alkaa armv8 (tai uudempi) ), jos uname -prosessi itsessään on 32-bittinen prosessi, tai aarch64, jos se on 64-bittinen prosessi. (Katso myös https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )

Kommentit

  • En kiistä vastaustasi, mutta valitettavasti android on LINUX, joten oletetaan, että joskus on jokin komento, JOTKA, joka näyttää sen paikallisesti eikä lukea joidenkin sivujen ohjeet
  • @THESorcerer Android käyttää Linux-ydintä, mutta se ei ole Linux-järjestelmä. Siinä ei ole Linux-käyttäjän maa-työkaluja (vain hyvin pieni osajoukko). Androidissa 64-bittinen tuki on mielestäni yhdenmukaista peruskäyttöjärjestelmässä, joten cat /proc/$$/maps kertoo, onko järjestelmä 64- vai 32-bittinen ADB-komentoriviltä.
  • Uskon, että Raspberry Pi 3, joka on ARMv8 (CRC, ei valinnaista salausta), raportoi armv7l, vaikka sen ARMv8. Joten olen ’ melko varma, että väärästä suorittimesta ilmoitetaan.
  • @jww Jos se ilmoittaa armv7l, se tarkoittaa, että ’ käytät 32-bittistä ydintä uudelleen. Voit ajaa 32-bittisen ytimen 64-bittisellä suorittimella. Jos haluat tietoja suorittimesta, lue /proc/cpuinfo.
  • uname -m palauttaa vain ” aarch64 ”. / proc / cpuinfo ei ’ t myös sisällä prosessorin nimeä.

Vastaa

Kuten richard huomauttaa, armv7 -muunnelmat ovat kaikki 32-bittisiä, joten turhaa tarraa armv7-32 ei ole jne.

Linux-järjestelmässä voit helposti, vaikkakaan ei todella lopullisesti, tarkistaa tarkistamalla yleisen suoritettavan tiedoston:

> which bash /bin/bash > file /bin/bash /bin/bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV) ... 

Sanon ”ei lopullisesti”, koska 32-bittisiä suoritettavia tiedostoja on mahdollista ajaa 64-bittisessä järjestelmässä.

Kohdassa /proc tai /sys; /proc/cpuinfo -lähtö voi antaa merkittäviä vihjeitä. Jos jostain syystä tarvitset automaattista tarkistusta, ”mallinimi” -kenttään yhdistetyn taulukon luominen näyttää olevan yksi mahdollinen menetelmä (muut kentät, kuten ”malli”, ”prosessoriperhe” jne. Näyttävät valinnaisilta – ne eivät ” ei näy lainkaan Broadcom 2708 ARMv6 -prosessorilla).

Kommentit

  • Joten armv7l on 32-bittinen?
  • @bakalolo Lue kysymys ja hyväksytty vastaus hitaasti;)

Vastaa

Asenna ”lshw” -paketti .

# lshw ... description: Computer product: Raspberry Pi 3 Model B Rev 1.2 width: 32 bits ... 

vastaus

Näyttää siltä, että useimmat tavat nähdä bittimäärä on jotenkin tiedä, että arm7 = 32-bittinen ja vaikka se voi olla totta, mutta entäs

pi@rpi9:~ $ getconf LONG_BIT 32 

Ja jos haluat etsiä prosessorimallia, käytän normaalisti arch

root@rpi4:~# tr "\0" "\n" </proc/device-tree/model;arch Raspberry Pi Model B Rev 2 armv6l pi@rpi9:~ $ tr "\0" "\n" </proc/device-tree/model;arch Raspberry Pi 3 Model B Rev 1.2 armv7l 

Kommentit

  • getconf LONG_BIT on hyvin suoraviivainen

Vastaa

Kokeile seuraavaa.

 // -*- compile-command: "gcc -Wall -o sizeof sizeof.c && ./sizeof" -*- #include <stdio.h> #include <limits.h> #define size(t) { t x; printf("%s:\t%3lu bit\n", #t, CHAR_BIT * sizeof x); } int main (int argc, char *argv[]) { size(char); size(short); size(int); size(long); size(void*); return 0; }  

Osoitteen koko on void*.

Kommentit

vastaus

Älä välitä sitä 64-bittisestä tietokoneesta. Se on Allwinner H8 , noita on kaksinkertainen ARM-7. 8 ydintä, 64 bittiä, powervr, sgx 544, kaksinkertaisella nopeudella (700 MHz).

Joten ei, se voi olla 64-bittinen. Vain käyttöjärjestelmä voi olla 32.

Kommentit

  • mistä löysit, että OP ’ käyttää Allwinner H8: ta? Arkkitehtuuri on armv7l, joka ei selvästikään ole 64-bittinen yksi
  • ’ on parempi osoittaa tapa löytää haluamasi tiedot järjestelmän sisältä sen sijaan, että käyttäisit kolmatta -puoluetiedot ulkoisista lähteistä. Tämä sopii paremmin kommentiksi kuin vastaukseksi (tästä syystä kaikki alas-äänestykset).

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *