Bu sayfada, cihazda kullanılan çekirdek sayfası boyutunu elde etmenin farklı yolları listelenmektedir. Cihaza bağlanmak için adb
simgesini kullanabilirsiniz.
$ adb shell
Programlama kodu kullanma
C++'ta getpagesize(2)
tercih edilir:
# include <unistd.h>
...
... = getpagesize();
Java'da sistem yapılandırmasını kullanabilirsiniz:
import android.system.Os;
import android.system.OsConstants;
... = Os.sysconf(OsConstants._SC_PAGE_SIZE);
getconf komutunu kullanma
Sayfa boyutunu almak için getconf
komutunu kullanın. Sayfa boyutu aşağıdaki gibi gösterilir:
$ getconf PAGE_SIZE
4096
/proc//smaps sahte dosyasını kullanma
Sahte dosyadaki KernelPageSize
alanı /proc/<pid>/smaps
, sayfa boyutunu aşağıdaki gibi gösterir:
$ grep KernelPageSize /proc/1/smaps
KernelPageSize: 4 kB
LD_SHOW_AUXV=1 bağlayıcı işaretini kullanın
Yürütülmek üzere olan programın yardımcı vektörünü yazdırmak için LD_SHOW_AUXV
işaretini kullanın. AT_PAGESZ
alanı, sayfa boyutunu içerir ve şu şekilde gösterilir:
$ 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
/proc/config.gz sahte dosyasını kullanma
Sözde dosyada
/proc/config.gz
sayfa boyutu için çekirdek yapılandırmasını kontrol edin. Sayfa boyutu için olası yapılandırmalar şunlardır:
CONFIG_ARM64_4K_PAGES=y
: Çekirdek, 4.096 baytlık sayfalar kullanır.CONFIG_ARM64_16K_PAGES=y
: Çekirdek 16384 baytlık sayfalar kullanır.CONFIG_ARM64_64K_PAGES=y
: Çekirdek, 65536 baytlık sayfalar kullanır.
$ zcat /proc/config.gz | grep "CONFIG_ARM64_[164K]*_PAGES=y"
CONFIG_ARM64_16K_PAGES=y
Yardımcı vektörü kullanma
Bir program yürütüldüğünde çekirdek, yardımcı vektörü dinamik bağlayıcı tarafından kullanılan sayfa boyutu gibi bilgilerle ayırır ve başlatır. Yardımcı vektör, sahte dosyadan (
/proc/<pid>/auxv
) okunabilir. 1. süreçteki yardımcı vektörün sayfa boyutu aşağıdaki gibi gösterilebilir:
$ od -N8 -j56 -td8 -An /proc/1/auxv
4096
Nerede:
od
, dosyaları onaltılık, ondalık veya diğer biçimlerde boşaltır.-N8 -j56
, 56. baytla başlayan 8 baytıAT_PAGESZ
ile eşleşen dosyaya boşaltır.-td8
, değeri 8 baytlık ondalık tam sayı olarak biçimlendirir.-An
, adresini değil yalnızca değeri gösterir.
Çekirdek görüntüsünden okuma
Sayfa boyutunu belirlemek için çekirdek görüntüsünün başlığını okuyabilirsiniz. Bu, önyükleyicide hangi tür çekirdeği önyüklediğinizi bilmeniz gerektiğinde kullanışlıdır.
Sayfa boyutu, çekirdek başlığının 25. baytında yer alır:
$ 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
Bu örnekte değer 0x0C = 0000 1100b
'dır. 1. bitin değeri 0
, 2. bitin değeri ise 1
'dir. Bu iki biti okuduğumuzda ondalık olarak 10b
veya 2
elde ederiz. Bu bitlerin değerine göre çekirdek sayfa boyutunu belirleyebilirsiniz:
0
- Belirtilmedi1
- 4 KB2
- 16 KB3
- 64 KB
Daha fazla bilgi için Linux çekirdeği belgelerine bakın.