众所周知,MMIO空间被映射(例如,通过/dev/mem,通过调用remap_pfn_range()作为单个PTE来映射,这样就没有struct页面了。
在使用ioremap_wc()时也是这样吗,还是ioremap_wc()创建了一个由页面和许多PTE组成的结构?
操作系统: Linux x86_64
我对内核或系统编程非常陌生,
我有几个关于虚拟记忆的问题。主要涉及静态和运行时,即ELF和加载/链接等,特定于Linux86。
我的理解可能完全错误..。
我知道虚拟内存,它是分裂的1G/3G。在用户模式下进程不能访问PAGE_OFFSET以上的地址- PAGE_OFFSET是虚拟地址.
在静态时间ELF定义过程虚拟空间?
如果ELF定义虚拟地址空间,那么ELF是否也定义了内核虚拟地址空间?多么?我假设内核虚拟地址空间在运行时是动态映射的?
如果内核地址空间映射到进程地址空间,那么为什么进程大小(虚拟)也不包括内核大小?
- When and How this kernel a
这里是我的问题:我想从运行在Linux内核空间中的代码中对数据文件的一部分进行内存映射。我想稍后也从Linux内核空间中运行的代码中撤销相同的内存映射。如何执行这些操作?它们与在用户空间中使用mmap(2)/munmap(2)有何不同?
我试图在没有用户进程的内核空间中做到这一点。
我浏览了网络搜索和Linux内核书籍,包括Bovet和Cesati的"Understanding the Linux Kernel“。一本好书,但没有回答我的问题。
我试图通过读取程序头来定位libc程序段在程序内存中的位置。
在Centos 6上,当我在libc.so.6文件上使用read亲自时,VirtAddr包含在进程内存中加载程序段的正确地址:
[user@centos6 src]$ readelf -l /lib64/libc.so.6 --wide
Elf file type is DYN (Shared object file)
Entry point 0x3032c1ee30
There are 10 program headers, starting at offset 64
Program Headers:
Type