在Ubuntu 22.04 上 编译 Xorg

因为想调试一下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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值