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)”一章),但是我没弄清楚发生了什么。
尝试过的解决方案:
- 插入 CLI 内核指令“iomem=relaxed”,如驱动程序自述文件的第 6 项所指出的 github repository;
- 将内核配置“CONFIG_BLK_DEV_CS5535=y”替换为“CONFIG_BLK_DEV_CS5536=y”。
None 他们工作了。
Xorg 版本:1.20.14
Geode 驱动版本:2.11.20
有没有人遇到过类似的问题?有谁知道发生了什么事吗?
我接下来会尝试修改内核配置参数,但是有很多,我不知道哪一个与问题有关。
启用内核选项“CONFIG_X86_IOPL_IOPERM”后问题已解决。
我在阅读 this post 后找到了这个解决方案。
我使用 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)”一章),但是我没弄清楚发生了什么。
尝试过的解决方案:
- 插入 CLI 内核指令“iomem=relaxed”,如驱动程序自述文件的第 6 项所指出的 github repository;
- 将内核配置“CONFIG_BLK_DEV_CS5535=y”替换为“CONFIG_BLK_DEV_CS5536=y”。
None 他们工作了。
Xorg 版本:1.20.14
Geode 驱动版本:2.11.20
有没有人遇到过类似的问题?有谁知道发生了什么事吗?
我接下来会尝试修改内核配置参数,但是有很多,我不知道哪一个与问题有关。
启用内核选项“CONFIG_X86_IOPL_IOPERM”后问题已解决。
我在阅读 this post 后找到了这个解决方案。