این صفحه روشهای مختلف دریافت اندازه صفحه هسته مورد استفاده در دستگاه را فهرست میکند. برای اتصال به دستگاه، میتوانید adb استفاده کنید.
$ adb shell
استفاده از کدهای برنامه نویسی
در C++، getpagesize(2) ترجیح دهید:
# include <unistd.h>
...
... = getpagesize();
در جاوا، میتوانید از پیکربندی سیستم استفاده کنید:
import android.system.Os;
import android.system.OsConstants;
... = Os.sysconf(OsConstants._SC_PAGE_SIZE);
از دستور getconf استفاده کنید
برای دریافت اندازه صفحه، از دستور getconf استفاده کنید، که به صورت زیر نشان داده شده است:
$ getconf PAGE_SIZE
4096
از /proc/ استفاده کنید شبه فایل smaps/
فیلد KernelPageSize در شبه فایل /proc/<pid>/smaps اندازه صفحه را به صورت زیر نشان میدهد:
$ grep KernelPageSize /proc/1/smaps
KernelPageSize: 4 kB
از پرچم پیوند دهنده LD_SHOW_AUXV=1 استفاده کنید
از پرچم LD_SHOW_AUXV برای چاپ بردار کمکی برنامهای که قرار است اجرا شود استفاده کنید. فیلد AT_PAGESZ شامل اندازه صفحه است که به صورت زیر نشان داده شده است:
$ 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 استفاده کنید
پیکربندی هسته برای اندازه صفحه را در شبه فایل /proc/config.gz بررسی کنید. پیکربندیهای ممکن برای اندازه صفحه عبارتند از:
-
CONFIG_ARM64_4K_PAGES=y: هسته از صفحات ۴۰۹۶ بایتی استفاده میکند. -
CONFIG_ARM64_16K_PAGES=y: هسته از صفحات ۱۶۳۸۴ بایتی استفاده میکند. -
CONFIG_ARM64_64K_PAGES=y: هسته از صفحات ۶۵۵۳۶ بایتی استفاده میکند.
$ zcat /proc/config.gz | grep "CONFIG_ARM64_[164K]*_PAGES=y"
CONFIG_ARM64_16K_PAGES=y
استفاده از بردار کمکی
وقتی یک برنامه اجرا میشود، هسته، بردار کمکی را با اطلاعاتی مانند اندازه صفحه که توسط پیونددهنده پویا استفاده میشود، اختصاص داده و مقداردهی اولیه میکند. بردار کمکی را میتوان از شبه فایل /proc/<pid>/auxv خواند. اندازه صفحه از بردار کمکی فرآیند ۱ را میتوان به صورت زیر نشان داد:
$ od -N8 -j56 -td8 -An /proc/1/auxv
4096
کجا:
- دستور
odفایلها را در قالبهای هگزادسیمال، دسیمال یا سایر قالبها نمایش میدهد. -
-N8 -j56هشت بایت را که از آفست ۵۶ شروع میشوند، در فایل مربوطه، که مربوط بهAT_PAGESZاست، ذخیره میکند. -
-td8 مقدار را به صورت یک عدد صحیح اعشاری ۸ بایتی قالببندی میکند. -
-Anباعث میشود فقط مقدار نمایش داده شود، نه آدرس آن.
خواندن از یک تصویر هسته
شما میتوانید سربرگ تصویر هسته را بخوانید تا اندازه صفحه را تعیین کنید. این در بوت لودر مفید است، اگر نیاز دارید بدانید چه نوع هسته ای را بوت میکنید.
اندازه صفحه در بایت بیست و پنجم هدر هسته است:
$ 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
در این مثال، مقدار 0x0C = 0000 1100b است. بیت 1 مقدار 0 و بیت 2 مقدار 1 را دارد. با خواندن این دو بیت، 10b یا 2 را به صورت اعشاری دریافت میکنیم. بر اساس مقدار این بیتها، میتوانید اندازه صفحه هسته را تعیین کنید:
-
0- نامشخص -
1تا ۴ کیلوبایت -
2- ۱۶ کیلوبایت -
3- ۶۴ کیلوبایت
برای اطلاعات بیشتر، به مستندات هسته لینوکس مراجعه کنید.