Запись драйвера, который получает физический адрес памяти и размер буфера из BIOS.Размер этой области составляет, например, 32 МБ.
Задача драйверов теперь заполнить этот буфер данными, которые поступают из буфера пользовательского пространства.
Итак, текущий подход:
virt_addr=ioremap(physical_addr, buffersize);
copy_from_user(virt_addr, userspace_addr, buffersize);
Этот подход работает, но он очень медленный.Есть другой подход, в котором я использую память, выделенную с помощью kmalloc, и если я делаю
copy_from_user(kmalloc_allocated_buffer, userspace_addr, buffersize);
, кажется, что копирование буфера, по крайней мере, в 10 раз быстрее, чем подход с ioremap.Итак, я предполагаю, что я делаю это неправильно, но как я могу сделать это правильно?
Даже попытался ioremeap_wt, чтобы иметь кешированную область записи, но это совсем не ускоряет копирование.