Xorg 在自定义映像中崩溃

Xorg crashing in custom image

我使用 yocto 系统(branch dunfell)为 advantech PCM-9375 板生成了图像。

结果使用 Xorg 作为视频管理器,但是,由于安装了 geode 驱动程序,应用程序崩溃了。

我调试了一下,发现是在调用驱动函数LXReadMSR时崩溃的,参数addr=0x80002000h, lo=0xbffff994 and hi=0xbffff998。最后两个是指针,它们的内容分别是:5136和0。 下面的片段是 gdb 的回溯:

(gdb) bt
#0  0xb7693ba7 in LXReadMSR (hi=0xbffff998, lo=0xbffff994, addr=2147491840) at ../../xf86-video-geode-2.11.20/src/lx_driver.c:131
#1  LXReadMSR (addr=2147491840, lo=0xbffff994, hi=0xbffff998) at ../../xf86-video-geode-2.11.20/src/lx_driver.c:126
#2  0xb7681eef in msr_create_geodelink_table (gliu_nodes=0xb76b2880 <gliu_nodes>) at ../../xf86-video-geode-2.11.20/src/cim/cim_msr.c:199
#3  0xb7682400 in msr_init_table () at ../../xf86-video-geode-2.11.20/src/cim/cim_msr.c:82
#4  0xb7693282 in LXPreInit (pScrni=0x6a79e0, flags=0) at ../../xf86-video-geode-2.11.20/src/lx_driver.c:349
#5  0x00480986 in InitOutput (pScreenInfo=0x688280 <screenInfo>, argc=12, argv=0xbffffc44) at ../../../../xorg-server-1.20.14/hw/xfree86/common/xf86Init.c:522
#6  0x00444525 in dix_main (argc=12, argv=0xbffffc44, envp=0xbffffc78) at ../../xorg-server-1.20.14/dix/main.c:193
#7  0x0042d89b in main (argc=12, argv=0xbffffc44, envp=0xbffffc78) at ../../xorg-server-1.20.14/dix/stubmain.c:34

查看 documentation of the processor,我发现 addr 指向 GLD_MSR_CAP 寄存器(文档中的“6.6.1.1 GLD Capabilities MSR (GLD_MSR_CAP)”一章),但是我没弄清楚发生了什么。

尝试过的解决方案:

None 他们工作了。

Xorg 版本:1.20.14

Geode 驱动版本:2.11.20

有没有人遇到过类似的问题?有谁知道发生了什么事吗?

我接下来会尝试修改内核配置参数,但是有很多,我不知道哪一个与问题有关。

启用内核选项“CONFIG_X86_IOPL_IOPERM”后问题已解决。

我在阅读 this post 后找到了这个解决方案。