Применимость к ArmSoM и источник
Справочный материал для адаптации ArmSoM, переведённый с китайского V1.0.0. Область исходника: RK3588, Linux 5.10. Английский PDF отсутствует; английская, русская и немецкая версии полностью переведены с китайского. Немецкая использует те же изображения, что английская статья. Конкретные платы ArmSoM, SDK/BSP и сочетания драйверов не подтверждены и аппаратно не проверены. Сверьте SoC, карту памяти платы, SDK/BSP, конфигурацию ядра и реализацию драйвера. Код, адреса, журналы и числа — примеры исходника, а не результаты тестов ArmSoM.
Редакционные примечания · ArmSoM Docs · Rockchip Linux
Исходник описывает диагностику утечек DMA-BUF, ошибок потока данных и отображения памяти. Технических рисунков нет; вымышленные не добавлены.
| SoC исходника | Ядро исходника |
|---|---|
| RK3588 | Linux 5.10 |
1. Введение
DMABUF — структура буфера для общей памяти мультимедийных устройств. Дескриптор fd DMABUF позволяет разделять память между процессами: zero-copy повышает производительность, асинхронный доступ уменьшает связанность модулей.
2. Изменения Linux для отладки DMABUF
2.1 DMABUF_DEBUG
Исходный BSP поддерживает DMABUF debug начиная с Linux-5.10. Измените arch/arm64/configs/rockchip_defconfig:
CONFIG_DMABUF_DEBUG=y
После включения макроса каждому DMABUF назначается имя по умолчанию pid+taskname длиной 16 символов. Пример:
416-allocator@4.
2.2 DMABUF_PROCFS
Исходный BSP поддерживает DMABUF procfs начиная с Linux-5.10. Измените arch/arm64/configs/rockchip_defconfig:
CONFIG_RK_DMABUF_PROCFS=y
Включение создаёт узел rk_dmabuf в /proc/ со следующими узлами отладки. Комментарии блока сохранены из китайского исходника:
dev # 显示所有DMABUF已经attach的device
sgt # 显示所有DMABUF的ScatterListTable,显示其IOVA
size # 显示所有DMABUF的total size
peak # 显示所有DMABUF的total size的峰值
Узлы: dev — присоединённые устройства; sgt — ScatterListTable и IOVA; size — общий размер; peak — его максимум.
2.3 DMABUF_DEBUG_ADVANCED
Подфункция DMABUF procfs получает физические адреса памяти DMABUF. Измените arch/arm64/configs/rockchip_defconfig:
CONFIG_DMABUF_DEBUG_ADVANCED=y
После включения все DMABUF проходят attach/map через fake device для получения sgt. Это помогает /proc/rk_dmabuf_sgt показывать все IOVA. Путь сохранён дословно; сверьте его с работающим BSP.
3. Вопросы и ответы
3.1 Утечка DMABUF при воспроизведении видео на RK3588?
Включите отладочные макросы и проверьте память при входе на главный экран:
console:/ # cat /proc/rk_dmabuf/size
Total: 65552 KiB
Воспроизведите видео, завершите просмотр, удалите историю и вернитесь на главный экран:
console:/ # cat /proc/rk_dmabuf/size
Total: 83948 KiB
3.2 Пиковое потребление DMABUF при воспроизведении видео на RK3588?
Через узел отладки mpp проверьте суммарную память DMABUF воспроизведения:
console:/ # cat /proc/mpp_service/sessions-summary
fdc38100.rkvdec-core Total: 699760 KiB
Проверьте пиковую память через узел отладки DMABUF:
console:/ # cat /proc/rk_dmabuf/peak
Peak: 1544 MiB
Сбросьте пик в ноль и повторите наблюдение:
console:/ # echo 0 > /proc/rk_dmabuf/peak
