好吧,又是一个比较少见的例子。用于这个帖子:
《华硕 K550DP 问题》:華碩 k550dp 問題
考虑到新手装机的时候可能会有需要,于是单独提出来做个小教学:
假如我有一款 ATI 显卡,我基本上可以叫上它的名字,比如 ATI Mobility Radeon HD 8670m。
但是我怎么才能知道某个版本的 openSUSE 或者别的发行版的内核是否支持它呢?
先说好,Google 在这个问题上是帮不了你的(我搜索一个早上得出的惨痛结论)。
应该这么做:
- 确定显卡的 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 内核就是用这东西来说明它支持什么设备的
- 找到存放支持设备列表的文件:
当时我主要是想从 kernel changelog 里面找它添加了什么新设备,就是人肉查找,这样。
然后偶然在 linuxtoy 的一篇文章的引用里面看到了这个网站:
于是进去,点击左边的 kernel changelog - Drivers and architectures,
它让继续点,于是到了这个页面:
kernelnewbies.org/Linux_3.11-DriversArch
有个 graphics,里面有 radeon 的项目。咦,后面还有 commit 链接?
点一下。
好吧,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 这样。
- 匹配!
它里面的东西是这样的:
{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!