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
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
-
sizeof
palauttaasize_t
, joka on tulostettava käyttämällä%zu
. Väärän muotoilijan käyttäminen edellyttää määrittelemätöntä käyttäytymistä. - void * -koko ja koko ei ole välttämättä arkkitehtuuribittileveys. Oletko koskaan kuullut x32 ABI sites.google.com/site/x32abi
- Vastaavasti getconf -a | grep LONG_BIT
- Tämä ei ’ kerro sinulle muusta kuin kääntäjän luonteesta .
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).
ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic.
– wikipediauname -a
jagcc -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