我正在 Debian Stretch 上编译我自己的内核 (4.4.x),并且我想将我的 radeon 显卡的固件包含在内核中,这样就不需要从用户空间加载。
CONFIG_FIRMWARE_IN_KERNEL
CONFIG_EXTRA_FIRMWARE
我已将固件文件安装到/lib/firmware/
apt-get install firmware-amd-graphics
如何找出我的特定图形卡需要包含哪些固件文件?
VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Oland GL [FirePro W2100]
我假设我需要以下一些固件文件:
/lib/firmware/radeon/oland_*.bin
但哪些?
一般来说,找出特定硬件/驱动程序需要哪些固件文件的过程是什么?
答案1
Gentoo 维基Radeon 文章描述如何将固件包含到内核二进制文件中。本文还包括一个表格,列出了每个 GPU 型号所需的固件二进制文件。为您FirePro W2100(厄兰芯片组) 该表列出了以下固件二进制文件:
radeon/oland_ce.bin radeon/oland_mc.bin radeon/oland_me.bin
radeon/oland_pfp.bin radeon/oland_rlc.bin radeon/oland_smc.bin
radeon/TAHITI_uvd.bin
dmesg| grep "direct-loading firmware"
检查系统上使用的内核日志应该会告诉您自动加载了哪些固件:
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/OLAND_pfp.bin
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/OLAND_me.bin
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/OLAND_ce.bin
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/OLAND_rlc.bin
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/OLAND_mc2.bin
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/OLAND_smc.bin
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/TAHITI_uvd.bin
我想这个方法是用来收集 gentoo wiki 中的表所用的数据的。
在构建期间要包含在内核映像中的固件是使用配置的CONFIG_EXTRA_FIRMWARE
选项。构建系统查找额外固件的目录是使用CONFIG_EXTRA_FIRMWARE_DIR
选项配置的。
如何包含固件二进制文件,步骤如下:
您需要将 radon 驱动程序(和直接渲染管理器)直接构建到内核中,而不是作为模块。需要从文件系统加载模块。
配置
CONFIG_EXTRA_FIRMWARE_DIR
为/lib/firmware
,位置分布将二进制映像安装到。这样您就不需要复制固件二进制文件。列出 中的固件文件
CONFIG_EXTRA_FIRMWARE
,多个文件用空格分隔。
使用菜单配置:
直接将 radeon 驱动程序构建到内核。
Device Drivers ---> Graphics support ---> <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---> <*> AMD GPU
包括固件
Device Drivers ---> Generic Driver Options ---> [*] Include in-kernel firmware blobs in kernel binary (radeon/... radeon/...) (/lib/firmware) Firmware blobs root directory