【发布时间】:2018-10-18 16:17:34
【问题描述】:
驱动程序通过 ioctl 接口公开其 API。
ioctl 调用的参数是一个内存缓冲区,它的地址 必须与操作系统页面大小对齐。
例如,C 中的分配会调用 valloc(或 posix_memalign)
像这样简单的 Perl 缓冲区分配:
$buffer = "\0" x BUFFER_SIZE ;
还不够,因为很可能是标量的起始地址 不会与操作系统页面大小对齐。
有没有简单的方法来实现这一点?
注意:我将缓冲区转换为 C 地址,如下所示:
my $c_address = unpack('Q', pack('P', $buffer));
谢谢! 埃亚尔
【问题讨论】:
-
只要分配
BUFFER_SIZE * 2,就可以在缓冲区中找到一页内存。 -
你也许还可以使用(古老的)Mmap 模块