浏览代码

Improved X server autoconfiguration process

Added modesetting and framebuffer drivers as fallbacks.
Modesetting has precedence over VESA.

Minor video DRM-related kernel enhancements.
Maxim Kammerer 12 年之前
父节点
当前提交
371b073c40
共有 3 个文件被更改,包括 33 次插入24 次删除
  1. 30 21
      src/etc/init.d/xconfig
  2. 2 2
      src/root/config/linux-3.9.9-hardened.config
  3. 1 1
      src/root/helpers/gen-efi

+ 30 - 21
src/etc/init.d/xconfig

@@ -7,7 +7,6 @@ silentflag=/var/run/nologo
 xorgdir=/etc/X11
 xorglog=/var/log/Xorg.0.log
 xorgdrv=/usr/lib/xorg/modules/drivers
-xorgdrvtype=native
 
 amixerrst=/usr/local/bin/reset-mixer
 asoundrc=/etc/asound.conf
@@ -62,28 +61,21 @@ start() {
     if get_bootparam 'nox'; then
         ewarn Skipping X server configuration
     else
-        # Temporarily mount native/VESA/fbdev-only drivers directory if requested
-        if get_bootparam 'xvesa'; then
-            ewarn Forcing VESA X server driver
-            xorgdrvtype=vesa
-        elif get_bootparam 'xfb'; then
-            ewarn Forcing framebuffer X server driver
-            xorgdrvtype=fbdev
-        elif get_bootparam 'xkms'; then
-            ewarn Forcing modesetting X server driver
-            xorgdrvtype=modesetting
-        fi
-        mount -rB ${xorgdrv}.${xorgdrvtype} ${xorgdrv}
-
-        ebegin Configuring X server
+        ebegin "Configuring X server"
         rm -f ${xorgdir}/xorg.conf.new
-        HOME=${xorgdir} Xorg -configure 2>/dev/null
-        if [ ! -e ${xorgdir}/xorg.conf.new  -a  ${xorgdrvtype} = native ]; then
-            ewarn Falling back to VESA X server driver
-            umount ${xorgdrv} && mount -rB ${xorgdrv}.vesa ${xorgdrv}
-            HOME=${xorgdir} Xorg -configure 2>/dev/null
+
+        if   get_bootparam 'xvesa'; then
+            tryxconf vesa        ewarn  "[fallback] VESA X server driver"
+        elif get_bootparam 'xfb';   then
+            tryxconf fbdev       ewarn  "[fallback] Framebuffer X server driver"
+        elif get_bootparam 'xkms';  then
+            tryxconf modesetting ewarn  "[fallback] Modesetting X server driver"
+        else
+            tryxconf native      einfo  "Native X server driver"
+            tryxconf modesetting ewarn  "[fallback] Modesetting X server driver"
+            tryxconf vesa        ewarn  "[fallback] VESA X server driver"
+            tryxconf fbdev       ewarn  "[fallback] Framebuffer X server driver"
         fi
-        umount ${xorgdrv}
 
         # Empty last line means no section writing was stopped in the middle
         if [ -e ${xorgdir}/xorg.conf.new ]  &&  [ "`tail -1 ${xorgdir}/xorg.conf.new`" = "" ]; then
@@ -97,3 +89,20 @@ start() {
         eend $?
     fi
 }
+
+
+tryxconf() {
+    local drvtype="$1" msgtype="$2" msg="$3"
+
+    if [ ! -e ${xorgdir}/xorg.conf.new ]; then
+        eindent
+        ${msgtype} "${msg}"
+
+        # Temporarily bind-mount specific drivers directory
+        mount -rB ${xorgdrv}.${drvtype} ${xorgdrv}
+        HOME=${xorgdir} Xorg -configure 2>/dev/null
+        umount ${xorgdrv}
+
+        eoutdent
+    fi
+}

+ 2 - 2
src/root/config/linux-3.9.9-hardened.config

@@ -2938,13 +2938,13 @@ CONFIG_DRM_SIS=m
 CONFIG_DRM_VIA=m
 CONFIG_DRM_SAVAGE=m
 CONFIG_DRM_VMWGFX=m
-# CONFIG_DRM_VMWGFX_FBCON is not set
+CONFIG_DRM_VMWGFX_FBCON=y
 CONFIG_DRM_GMA500=m
 CONFIG_DRM_GMA600=y
 CONFIG_DRM_GMA3600=y
 CONFIG_DRM_UDL=m
 # CONFIG_DRM_AST is not set
-# CONFIG_DRM_MGAG200 is not set
+CONFIG_DRM_MGAG200=m
 CONFIG_DRM_CIRRUS_QEMU=m
 # CONFIG_VGASTATE is not set
 CONFIG_VIDEO_OUTPUT_CONTROL=m

+ 1 - 1
src/root/helpers/gen-efi

@@ -29,7 +29,7 @@ modules_io="search hashsum gcry_sha256 read"
 modules="${modules_core} ${modules_fs} ${modules_boot} ${modules_arch} ${modules_io}"
 
 
-# Building a memdisk (see grub2-mkstandalone (Savannah: #36772))
+# Building a memdisk (see grub2-mkstandalone (Savannah: #36772, #39796))
 memdisk() {
     local out="$1" arch="$2" mods="$3"
     local build=`mktemp -d`