因为想调试一下Xorg的代码, 确定一下是不是 X client的问题,所以需要编译Xorg的代码.
步骤:
1 下载xorg的源代码 (参考: ow to Install xorg-server-source)
jenkins@rico-fast:~$ sudo apt-get update --fix-missing
jenkins@rico-fast:~$ sudo apt-get -y install xorg-server-source
jenkins@rico-fast:~$ cp /usr/src/xorg-server.tar.xz .
jenkins@rico-fast:~$ tar -xf xorg-server.tar.xz
jenkins@rico-fast:~$ cd xorg-server/
jenkins@rico-fast:~/xorg-server$ head ChangeLog
commit 85397cc2efe8fa73461cd21afe700829b2eca768
Author: Povilas Kanapickas <povilas@radix.lt>
Date: Mon Jan 3 00:23:30 2022 +0200
xserver 21.1.3
Signed-off-by: Povilas Kanapickas <povilas@radix.lt>
commit 001feb6692b77254db6a4906a82fa1bdadfd7b85
Author: Adam Jackson <ajax@redhat.com>
jenkins@rico-fast:~/xorg-server$ /usr/lib/xorg/Xorg -version
X.Org X Server 1.21.1.3
X Protocol Version 11, Revision 0
Current Operating System: Linux rico-fast 5.15.0-58-generic #64-Ubuntu SMP Thu Jan 5 11:43:13 UTC 2023 x86_64
Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-58-generic root=UUID=f9e87616-4d12-45d9-a93f-72aed6772521 ro quiet splash
xorg-server 2:21.1.3-2ubuntu2.5 (For technical support please see http://www.ubuntu.com/support)
Current version of pixman: 0.40.0
Before reporting problems, check http://wiki.x.org
to make sure that you have the latest version.
jenkins@rico-fast:~/xorg-server$
2 安装编译依赖库 (参考: Building the X Window System from Source)
jenkins@rico-fast:~/xorg-server$ sudo apt install -y git
jenkins@rico-fast:~/xorg-server$ sudo apt install -y meson autoconf automake autopoint make libtool libtool-bin pkg-config
jenkins@rico-fast:~/xorg-server$ sudo apt install -y yacc bison byacc flex gcc gettext gperf m4 libncurses5 libncurses5-dev
jenkins@rico-fast:~/xorg-server$ sudo apt install -y perl intltool libpng++-dev libpng-dev llvm libtalloc2 libtalloc-dev zlib-gst zlib1g zlib1g-dev libgbm1 libgbm-dev libmtdev1 libmtdev-dev libudev0 libudev1 libudev-dev
jenkins@rico-fast:~/xorg-server$ sudo apt install -y libgcrypt20 libgcrypt20-dev libcrypto++-dev libcrypto++-utils libcrypto++8 libmd0 libmd-dev
jenkins@rico-fast:~/xorg-server$ sudo apt install -y fontconfig libfreetype-dev libfreetype6 libfreetype6-dev libfontenc1 libfontenc-dev libxfont2 libxfont-dev
jenkins@rico-fast:~/xorg-server$ sudo apt install -y asciidoc asciidoc-base asciidoc-common asciidoc-dblatex asciidoc-fop doxygen xmlto xsltproc
jenkins@rico-fast:~/xorg-server$ sudo apt install -y mesa-common-dev mesa-utils mesa-utils-bin libpixman-1-0 libpixman-1-dev libxcb-xkb-dev libxcb-xkb1 libxkbcommon-dev libxkbcommon-tools libxkbcommon-x11-0 libxkbcommon-x11-dev libxkbcommon0 libxkbfile-dev libxkbfile1 libxshmfence1 libxshmfence-dev libevdev-dev libevdev-tools libevdev2 libevdevplus-dev
jenkins@rico-fast:~/xorg-server$ sudo apt install -y libxcvt-dev libxcvt0 xcvt libepoxy-dev libepoxy0
jenkins@rico-fast:~/xorg-server$ sudo apt install -y libbsd-dev libbsd0 dbus libdbus-1-3 libdbus-1-dev libsystemd-dev libsystemd0 libxext-dev libxext6 libselinux1 libselinux1-dev libaudit-dev libaudit1 libxcb-xinput-dev libxcb-xinput0 libxcb-damage0-dev libxcb-damage0 libxcb-sync-dev libxcb-sync1
3 编译 Xorg
对 meson.build 做如下修改, 否则会遇到编译问题
jenkins@rico-fast:~/xorg-server$ git diff
diff --git a/meson.build b/meson.build
index 9ea7e1d..03f10bf 100644
--- a/meson.build
+++ b/meson.build
@@ -15,10 +15,12 @@ add_global_arguments('-fno-strict-aliasing', language : 'c')
add_global_arguments('-fvisibility=hidden', language : 'c')
add_global_link_arguments('-fvisibility=hidden', language : 'c')
if cc.get_id() == 'gcc' or cc.get_id() == 'clang'
test_wflags = [
- '-Wall',
+ '-Wwarning_level=0',
'-Wpointer-arith',
'-Wmissing-declarations',
'-Wformat=2',
@@ -41,7 +43,6 @@ if cc.get_id() == 'gcc' or cc.get_id() == 'clang'
'-Werror=sequence-point',
'-Werror=return-type',
'-Werror=trigraphs',
- '-Werror=array-bounds',
'-Werror=write-strings',
'-Werror=address',
'-Werror=int-to-pointer-cast',
jenkins@rico-fast:~/xorg-server$ rm build/ -rf; meson ./build
jenkins@rico-fast:~/xorg-server$ ninja -C build
jenkins@rico-fast:~/xorg-server$ ll build/hw/xfree86/Xorg
-rwxrwxr-x 1 jenkins jenkins 14359472 4月 4 19:01 build/hw/xfree86/Xorg*
4 替换 Xorg
4.1 单独替换 Xorg 失败
jenkins@rico-fast:~/xorg-server$ sudo mv /usr/lib/xorg/Xorg /usr/lib/xorg/Xorg-inbox
jenkins@rico-fast:~/xorg-server$ sudo strip build/hw/xfree86/Xorg -o /usr/lib/xorg/Xorg-new
jenkins@rico-fast:~/xorg-server$ cd /usr/lib/xorg/
jenkins@rico-fast:/usr/lib/xorg$ sudo ln -s Xorg-new Xorg
jenkins@rico-fast:~/xorg-server$ sudo service gdm restart
jenkins@rico-fast:~$ journalctl -af | grep gdm -i
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: (EE) Failed to load module "modesetting" (module does not exist, 0)
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: (II) LoadModule: "fbdev"
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: (WW) Warning, couldn't open module fbdev
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: (EE) Failed to load module "fbdev" (module does not exist, 0)
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: (II) LoadModule: "vesa"
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: (WW) Warning, couldn't open module vesa
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: (EE) Failed to load module "vesa" (module does not exist, 0)
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: (EE) No drivers available.
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: (EE)
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: Fatal server error:
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: (EE) no screens found(EE)
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: (EE)
4月 04 19:11:10 rico-fast /usr/libexec/gdm-x-session[38762]: Please consult the
4.2 安装所有编译的包成功
jenkins@rico-fast:/usr/lib/xorg$ sudo rm Xorg
jenkins@rico-fast:/usr/lib/xorg$ sudo ln -s Xorg-inbox Xorg
jenkins@rico-fast:/usr/lib/xorg$ cd ~/xorg-server/build/
jenkins@rico-fast:~/xorg-server/build$ sudo ninja install
...
Installing hw/xfree86/Xorg to /usr/local/bin
Installing hw/xfree86/dixmods/libwfb.so to /usr/local/lib/x86_64-linux-gnu/xorg/modules
Installing hw/xfree86/dixmods/libshadow.so to /usr/local/lib/x86_64-linux-gnu/xorg/modules
Installing hw/xfree86/dixmods/libglx.so to /usr/local/lib/x86_64-linux-gnu/xorg/modules/extensions
Installing hw/xfree86/exa/libexa.so to /usr/local/lib/x86_64-linux-gnu/xorg/modules
Installing hw/xfree86/fbdevhw/libfbdevhw.so to /usr/local/lib/x86_64-linux-gnu/xorg/modules
Installing hw/xfree86/glamor_egl/libglamoregl.so to /usr/local/lib/x86_64-linux-gnu/xorg/modules
...
Installing hw/xfree86/drivers/modesetting/modesetting_drv.so to /usr/local/lib/x86_64-linux-gnu/xorg/modules/drivers
Installing /home/jenkins/xorg-server/build/xorg-server.pc to /usr/local/lib/x86_64-linux-gnu/pkgconfig
Installing /home/jenkins/xorg-server/xorg-server.m4 to /usr/local/share/aclocal
Running custom install script '/usr/bin/sh -c ln -fs Xorg ${DESTDIR}/usr/local/bin/X'
jenkins@rico-fast:~/xorg-server/build$
jenkins@rico-fast:~/xorg-server/build$ sudo service gdm restart
jenkins@rico-fast:~$ journalctl -af | grep gdm -i
...
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (II) modeset(0): Modeline "1024x768"x0.0 78.75 1024 1040 1136 1312 768 769 772 800 +hsync +vsync (60.0 kHz e)
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (II) modeset(0): Modeline "1024x768"x0.0 75.00 1024 1048 1184 1328 768 771 777 806 -hsync -vsync (56.5 kHz e)
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (II) modeset(0): Modeline "1024x768"x0.0 65.00 1024 1048 1184 1344 768 771 777 806 -hsync -vsync (48.4 kHz e)
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (II) modeset(0): Modeline "832x624"x0.0 57.28 832 864 928 1152 624 625 628 667 -hsync -vsync (49.7 kHz e)
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (II) modeset(0): Modeline "800x600"x0.0 49.50 800 816 896 1056 600 601 604 625 +hsync +vsync (46.9 kHz e)
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (II) modeset(0): Modeline "800x600"x0.0 50.00 800 856 976 1040 600 637 643 666 +hsync +vsync (48.1 kHz e)
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (II) modeset(0): Modeline "1152x864"x0.0 108.00 1152 1216 1344 1600 864 865 868 900 +hsync +vsync (67.5 kHz e)
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (II) modeset(0): Modeline "1280x960"x0.0 108.00 1280 1376 1488 1800 960 961 964 1000 +hsync +vsync (60.0 kHz e)
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (II) modeset(0): Modeline "1280x1024"x0.0 108.00 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync (64.0 kHz e)
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (II) modeset(0): Modeline "1024x768"x0.0 115.50 1024 1072 1104 1184 768 771 775 813 +hsync -vsync (97.6 kHz e)
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (II) modeset(0): Modeline "1440x900"x0.0 88.75 1440 1488 1520 1600 900 903 909 926 +hsync -vsync (55.5 kHz e)
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (II) modeset(0): Modeline "1680x1050"x0.0 119.00 1680 1728 1760 1840 1050 1053 1059 1080 +hsync -vsync (64.7 kHz e)
4月 04 19:31:39 rico-fast /usr/libexec/gdm-x-session[59351]: (--) modeset(0): HDMI max TMDS frequency 300000KHz