我正在尝试从 NAS 挂载一个分区,其块大小为 65536 字节,这超过了我的发行版预编译内核内存分页大小 4KiB,因此我无法正常挂载它。
我需要更改哪些内核编译参数才能获得足够大的内存分页大小?在 x86-64 架构下可行吗?
make xconfig
编辑:除非我错过了它,否则似乎没有它的选项。
从page_types.h
下面arch\x86\include\asm
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))`
它看起来不可配置。我可以直接将这个数字改为 16,它可能会发出漂亮的爆炸声并摧毁东京。我可能会在今晚晚些时候尝试一下。
答案1
从page_types.h
下面arch\x86\include\asm
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))
将 12 改为 16 会导致
arch/x86/kernel/head64.c: In function ‘x86_64_start_kernel’:
arch/x86/kernel/head64.c:71: error: negative width in bit-field ‘<anonymous>’
make[2]: *** [arch/x86/kernel/head64.o] Error 1
因为这只是模块偏移的健全性检查代码,所以更改内存分页大小似乎会产生很多意想不到的副作用,这将使事情变得不那么简单。我想我只能寻找另一个可以运行的架构了。:(
以下是支持 64KiB 或更大页面大小的架构列表:ia64、mips、pa-risc、powerpc、sh、sparc64。因此,我最好的选择似乎是找到一台旧的 PPC Mac。
答案2
您需要更改内核页面大小。不建议这么做,但我认为是可行的。
但这与您的架构无关。(即,如果可能的话,可以用您的架构来完成,如果不能,那不是因为您的架构)