Auf dieser Seite werden die verschiedenen Möglichkeiten zum Abrufen der im Gerät verwendeten Kernel-Seitengröße aufgeführt. Sie können adb
verwenden, um eine Verbindung zum Gerät herzustellen.
$ adb shell
Programmiercode verwenden
In C++ wird getpagesize(2)
bevorzugt:
# include <unistd.h>
...
... = getpagesize();
In Java können Sie die Systemkonfiguration verwenden:
import android.system.Os;
import android.system.OsConstants;
... = Os.sysconf(OsConstants._SC_PAGE_SIZE);
getconf-Befehl verwenden
Verwenden Sie den Befehl getconf
, um die Seitengröße abzurufen. Das wird so dargestellt:
$ getconf PAGE_SIZE
4096
Die Pseudodatei /proc//smaps verwenden
Das Feld KernelPageSize
in der Pseudodatei /proc/<pid>/smaps
enthält die Seitengröße, wie unten dargestellt:
$ grep KernelPageSize /proc/1/smaps
KernelPageSize: 4 kB
Linker-Flag LD_SHOW_AUXV=1 verwenden
Mit dem Flag LD_SHOW_AUXV
können Sie den Hilfsvektor des Programms ausgeben, das ausgeführt werden soll. Das Feld AT_PAGESZ
enthält die Seitengröße, die so dargestellt wird:
$ LD_SHOW_AUXV=1 ls
AT_SYSINFO_EHDR 0x7250460000
AT_MINSIGSTKSZ 4720
AT_HWCAP 0b11111111111111111111111111111111
AT_PAGESZ 4096
AT_CLKTCK 100
AT_PHDR 0x5fda1e0040
AT_PHENT 56
AT_PHNUM 12
AT_BASE 0x72502f8000
AT_FLAGS 0
AT_ENTRY 0x5fda210000
AT_UID 0
AT_EUID 0
AT_GID 0
AT_EGID 0
AT_SECURE 0
AT_RANDOM 0x7fc59d66f8
AT_HWCAP2 0b100011001111111111
AT_EXECFN "/system/bin/ls"
AT_PLATFORM "aarch64"
data dev. init vendor
Die Pseudodatei „/proc/config.gz“ verwenden
Prüfen Sie die Kernelkonfiguration für die Seitengröße in der Pseudodatei /proc/config.gz
. Folgende Konfigurationen für die Seitengröße sind möglich:
CONFIG_ARM64_4K_PAGES=y
: Der Kernel verwendet 4.096 Byte große Seiten.CONFIG_ARM64_16K_PAGES=y
: Der Kernel verwendet 16.384 Byte große Seiten.CONFIG_ARM64_64K_PAGES=y
: Der Kernel verwendet 65.536-Byte-Seiten.
$ zcat /proc/config.gz | grep "CONFIG_ARM64_[164K]*_PAGES=y"
CONFIG_ARM64_16K_PAGES=y
Hilfsvektor verwenden
Wenn ein Programm ausgeführt wird, weist der Kernel dem Hilfsvektor Informationen wie die Seitengröße zu und initialisiert ihn damit. Diese Informationen werden vom dynamischen Linker verwendet. Der Hilfsvektor kann aus der Pseudodatei /proc/<pid>/auxv
gelesen werden. Die Seitengröße aus dem Hilfsvektor von Prozess 1 kann so dargestellt werden:
$ od -N8 -j56 -td8 -An /proc/1/auxv
4096
Dabei gilt:
od
gibt Dateien im Hexadezimal-, Dezimal- oder anderen Formaten aus.-N8 -j56
schreibt die 8 Byte ab dem Offset 56 in die Datei, wasAT_PAGESZ
entspricht.-td8
formatiert den Wert als dezimale 8‑Byte-Ganzzahl.-An
bewirkt, dass nur der Wert und nicht die Adresse angezeigt wird.
Aus einem Kernel-Image lesen
Sie können den Header eines Kernel-Images lesen, um die Seitengröße zu ermitteln. Dies ist im Bootloader nützlich, wenn Sie wissen müssen, welcher Kerneltyp gebootet wird.
Die Seitengröße befindet sich im 25. Byte des Kernel-Headers:
$ file Image
Image: Linux kernel ARM64 boot executable Image, little-endian, 16K pages
$ hexdump -C Image -n 48
00000000 4d 5a 40 fa ff 7f 7b 14 00 00 00 00 00 00 00 00 |MZ@...{.........|
00000010 00 00 64 02 00 00 00 00 0c 00 00 00 00 00 00 00 |..d.............|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030
In diesem Beispiel ist der Wert 0x0C = 0000 1100b
. Bit 1 hat den Wert 0
und Bit 2 den Wert 1
. Wenn wir diese beiden Bits lesen, erhalten wir 10b
oder 2
in dezimaler Form. Anhand des Werts dieser Bits können Sie die Kernel-Seitengröße ermitteln:
0
– Nicht angegeben1
– 4 KB2
– 16 KB3
– 64 KB
Weitere Informationen finden Sie in der Dokumentation zum Linux-Kernel.