[ 教学 ] 如何查看您的 ATI 显卡是否被已安装内核中的开源 Radeon 驱动支持?


#1

好吧,又是一个比较少见的例子。用于这个帖子:

《华硕 K550DP 问题》:華碩 k550dp 問題

考虑到新手装机的时候可能会有需要,于是单独提出来做个小教学:

假如我有一款 ATI 显卡,我基本上可以叫上它的名字,比如 ATI Mobility Radeon HD 8670m。

但是我怎么才能知道某个版本的 openSUSE 或者别的发行版的内核是否支持它呢?

先说好,Google 在这个问题上是帮不了你的(我搜索一个早上得出的惨痛结论)。

应该这么做:

  1. 确定显卡的 PCI ID:

lspci -nn

你可能会得到这样的结果:

00:1f.3 SMBus [0c05]: Intel Corporation 82801H (ICH8 Family) SMBus Controller [8086:283e] (rev 03)

好吧这其实是个系统管理总线(SMBus),显卡应该是 VGA (compatible) Controller 或者 Display Controller,但我不是没有 ATI 显卡么…

在这个的最后面你会看到 8086:283e 这样的字符串,不要以为是乱码哦,它是唯一的。

前四位 8086 叫做制造商 ID(Vendor ID),后四位叫做设备 ID(Device ID),比如 1014:003E 其实很精确地告诉了你它是一个 IBM 出品的 16/4 令牌环(一种加密设备)。

具体参考维基百科:http://en.wikipedia.org/wiki/Peripheral_Component_Interconnect (超长你肯定读不完)

然后一次偶然告诉我说其实 Linux 内核就是用这东西来说明它支持什么设备的 :frowning:

  1. 找到存放支持设备列表的文件:

当时我主要是想从 kernel changelog 里面找它添加了什么新设备,就是人肉查找,这样。

然后偶然在 linuxtoy 的一篇文章的引用里面看到了这个网站:

kernelnewbies.org/

于是进去,点击左边的 kernel changelog - Drivers and architectures,

它让继续点,于是到了这个页面:

kernelnewbies.org/Linux_3.11-DriversArch

有个 graphics,里面有 radeon 的项目。咦,后面还有 commit 链接?

点一下。

git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=26e2235d5f0d3d30c6d9e7cabd37ce38da35ce5d

好吧,linus 我抓住你了。

也就是说所有的 radeon 设备列表都写在

/usr/src/linux/include/drm/drm_pciids.h(如果没有的话,装个 kernel-devel)

看你系统上没安装的内核支持的设备可以去这里:

git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/refs/tags

点内核版本旁边的 commit,然后点那个 tree,之后就是 include/drm/drm_pciids.h 这样。

  1. 匹配!

它里面的东西是这样的:

{0x1002, 0x4145, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300},

我们甚至不需要知道这条是什么显卡,因为我们看它的第一行

#define radeon_PCI_IDS

就知道肯定跟 pci id 有关系,于是:

0x1002 其实就是制造商 ID 的另一种表示法,0x4145 就是设备 ID 的另一种表示法。

于是

sudo grep -r " 你的设备 ID" /usr/src/linux/include/drm/drm_pciids.h

命令行有返回就是当前内核支持,没返回就是不支持。

Enjoy!


華碩 k550dp 問題
#2

看來要學的還很多……
經過一番查找,果然沒能在 drm_pciids.h 發現需要的,不出意外的確有暫時不支援的設備。

學習了。