如何将小于一页大小(4Kb)的linux内核的特定物理地址范围映射到用户空间

如何将小于一页大小(4Kb)的linux内核的特定物理地址范围映射到用户空间,linux,linux-kernel,embedded-linux,Linux,Linux Kernel,Embedded Linux,我正在开发一个类似于用户空间输入/输出驱动程序(Linux内核UIO)的解决方案 我打算将特定物理地址范围(从特定物理地址开始)从内核空间映射到大小为0x100的用户空间,该大小小于一个页面大小(4KB)。我试图通过内核UIO框架解决这个问题,但它(通过mmapfile/dev/UIO的文件操作)至少映射了一个页面。我想要一个解决方案,这样我就可以将确切的特定0x100物理内存映射到用户空间。如果用户空间试图访问超出该0x100范围的内容,则不允许访问。到目前为止,我遇到的解决方案涉及页面级映

我正在开发一个类似于用户空间输入/输出驱动程序(Linux内核UIO)的解决方案


我打算将特定物理地址范围(从特定物理地址开始)从内核空间映射到大小为0x100的用户空间,该大小小于一个页面大小(4KB)。我试图通过内核UIO框架解决这个问题,但它(通过mmapfile/dev/UIO的文件操作)至少映射了一个页面。我想要一个解决方案,这样我就可以将确切的特定0x100物理内存映射到用户空间。如果用户空间试图访问超出该0x100范围的内容,则不允许访问。到目前为止,我遇到的解决方案涉及页面级映射

所以mmaping/dev/ui可以工作,您只想将其限制为0x100字节?从体系结构的角度来看,这是不可能的。您可以尝试限制对它的访问,但这将是一个棘手且容易出错的黑客行为。如果我错了,请纠正我,但brk syscall是否也做了类似的事情,即按照malloc函数的要求提供有限的访问?除了它不映射到特定的物理内存之外。不,
brk()
操作下面的页面,因为它是操作系统和体系结构的属性。您可以设置一个简单的实验,将内存限制在小于页面大小的范围内,并尝试访问其间的地址,这样就不会出现页面错误。