编写一个从BIOS获取物理内存地址和缓冲区大小的驱动程序。该区域例如大小为32 MB。
现在驱动程序工作是用来自用户空间缓冲区的数据填充该缓冲区。
所以当前的方法是:
virt_addr=ioremap(physical_addr, buffersize);
copy_from_user(virt_addr, userspace_addr, buffersize);
此方法有效,但速度非常慢。还有另一种方法,我使用kmalloc分配的内存,如果执行
copy_from_user(kmalloc_allocated_buffer, userspace_addr, buffersize);
复制缓冲区似乎比使用ioremap的方法快至少10倍。所以我想我做错了,但是我怎么做对呢?
甚至尝试过ioremeap_wt拥有一个直写式高速缓存区域,但这根本不能加快复制速度。