Linux内核或BIOS如何将PCIe 端点设备内存映射到systems 空间?有什么API可以实现吗?假设在为PCIe端点设备编写Linux设备驱动程序时,如何将PCIe设备内存映射到MMIO空间?还是在枚举期间,设备已经被BIOS映射到MMIO,而我需要做的就是使用ioremap()将设备MMIO重新映射到内核虚拟地址的空间?
平台: Linux on x86
我尝试通过PCI总线将VME地址空间映射到用户空间,这样我就可以在内存上执行常规读/写操作。我用另一个类似的PCI设备做到了这一点:
unsigned long *mapArea(unsigned int barAddr, unsigned int mapSize, int *fd)
{
unsigned long *mem;
*fd = open("/dev/mem", O_RDWR);
if ( *fd<0 ) {
printf("Cannot open /dev/vme_mem\n");
exit(-1
我记得在Agner的出色指南中,64位Linux可以通过寄存器传递6个整数函数参数:
(第8页)
我的职能如下:
void x(signed int a, uint b, char c, unit d, uint e, signed short f);
我需要传递一个额外的无符号的短参数,这将使总共7。但是,我实际上可以从现有的6中得到7的值。
因此,我的问题是,以下哪一项是更好的性能实践:
将已计算的值作为64位Linux上的第7个参数传递。
不是传递已经计算过的值,而是使用现有的6个参数中的一个再次计算它。
所讨论的操作是一个简单的位移位:
unsigned short