У меня есть встроенное устройство Linux с 2 ГБ оперативной памяти. В моем дереве устройств и аргументах загрузки ядра я настроил систему на использование только нижнего 1 ГБ ОЗУ.
Поскольку устройство представляет собой SoC IntelFPGA, верхняя область ОЗУ записывается из структуру FPGA.
С помощью специального драйвера устройства Linux я сопоставляю верхнюю область пользовательскому пространству с помощью функции remap_pfn_range. (Моя полная функция драйвера mmap показана ниже).
Это работает так, как ожидалось. Но теперь я пытаюсь использовать инфраструктуру нулевого копирования для отправки данных по TCP на другой компьютер. В текущей реализации я использую функцию записи без нулевого копирования и высокой загрузки ЦП.
Когда я пытался использовать функцию отправки с флаг MSG_ZEROCOPY, приложение пользовательского пространства больше не работает, и send возвращает код ошибки 14, Неверный адрес.
Теперь Я пытаюсь обновить ядро Linux, но не уверен, какой тип функции ядра, которую мне нужно использовать? Я использую ядро 6.6.
static int my_mmap(struct file* filp, struct vm_area_struct* vma)
{
struct mem_dev *hm = (struct mem_dev *)filp->private_data;
unsigned long off = vma->vm_pgoff offset + off) >> PAGE_SHIFT;
unsigned long vsize = vma->vm_end - vma->vm_start;
unsigned long psize = hm->size - off;
printk("my_mmap called.\n");
if (vsize > psize) {
printk("my_mmap out of region...\n");
return -EINVAL;
}
printk("my_mmap remap_pfn_range, virt 0x%lx, phys 0x%lx\n",
vma->vm_start, pfn);
if (remap_pfn_range(vma,
vma->vm_start,
pfn,
vsize,
vma->vm_page_prot)) {
printk("my_mmap remap_pfn_range failed.\n");
return -EAGAIN;
}
vma->vm_ops = &simple_remap_vm_ops;
simple_vma_open(vma);
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... nel-module
Используйте MSG_ZEROCOPY в сочетании с mmap и пользовательским модулем ядра. ⇐ Linux
1731941984
Anonymous
У меня есть встроенное устройство Linux с 2 ГБ оперативной памяти. В моем дереве устройств и аргументах загрузки ядра я настроил систему на использование только нижнего 1 ГБ ОЗУ.
Поскольку устройство представляет собой SoC IntelFPGA, верхняя область ОЗУ записывается из структуру FPGA.
С помощью специального драйвера устройства Linux я сопоставляю верхнюю область пользовательскому пространству с помощью функции remap_pfn_range. (Моя полная функция драйвера mmap показана ниже).
Это работает так, как ожидалось. Но теперь я пытаюсь использовать инфраструктуру нулевого копирования для отправки данных по TCP на другой компьютер. В текущей реализации я использую функцию записи без нулевого копирования и высокой загрузки ЦП.
Когда я пытался использовать функцию отправки с флаг MSG_ZEROCOPY, приложение пользовательского пространства больше не работает, и send возвращает код ошибки 14, Неверный адрес.
Теперь Я пытаюсь обновить ядро Linux, но не уверен, какой тип функции ядра, которую мне нужно использовать? Я использую ядро 6.6.
static int my_mmap(struct file* filp, struct vm_area_struct* vma)
{
struct mem_dev *hm = (struct mem_dev *)filp->private_data;
unsigned long off = vma->vm_pgoff offset + off) >> PAGE_SHIFT;
unsigned long vsize = vma->vm_end - vma->vm_start;
unsigned long psize = hm->size - off;
printk("my_mmap called.\n");
if (vsize > psize) {
printk("my_mmap out of region...\n");
return -EINVAL;
}
printk("my_mmap remap_pfn_range, virt 0x%lx, phys 0x%lx\n",
vma->vm_start, pfn);
if (remap_pfn_range(vma,
vma->vm_start,
pfn,
vsize,
vma->vm_page_prot)) {
printk("my_mmap remap_pfn_range failed.\n");
return -EAGAIN;
}
vma->vm_ops = &simple_remap_vm_ops;
simple_vma_open(vma);
return 0;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79200423/use-msg-zerocopy-in-combination-with-mmap-and-custom-kernel-module[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия