免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1607 | 回复: 0
打印 上一主题 下一主题

建立git X源码编译环境 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-27 21:23 |只看该作者 |倒序浏览

                                                                                                为了尝试git的intel X driver驱动,需要搭建整个最新的X源码编译环境。主要是因为intel最新的X driver需要支持dixPrive*系列函数,这些函数在xorg-server1.5才有──其实在1.4与1.5的过渡版本中添加的,具体哪个版本没去深究。在他们的主页上说1.3.1以上的X Server就能编译,实际上因为代码更新快的原因,很多文档不可靠了。
本文基于的系统是ArchLinux 2008.3。顺便说一下我对选择发行版的想法:我是有偏好的,但一切以合适为好。ArchLinux适合我的本本使用,主要是它的软件版本新,为了接触最新的X代码,进行测试和开发,我越发感觉到自己的选择是正确的。Slk虽然是我的主要入门版本,最近软件版本采用的也较新,但也许会因要更新某些软件,需要自己去下包,即使有非官方的在线更新工具,也不牢靠。git的X代码中libxcb库需要python2.5才能编译成功,其实Slk12.1是能支持的。genoo由于太费硬盘,还指在台式机上用。
于是使用xorg wiki的git方法,使用脚本建立环境:
#!/bin/sh
PREFIX="/opt/gfx-test"
PKG_CONFIG_PATH=/opt/gfx-test/lib/pkgconfig
MAKE="make -j3"
REPOS="\
git://git.freedesktop.org/git/xorg/util/macros \
git://git.freedesktop.org/git/xorg/proto/x11proto \
git://git.freedesktop.org/git/xorg/proto/damageproto \
git://git.freedesktop.org/git/xorg/proto/xextproto \
git://git.freedesktop.org/git/xorg/proto/fontsproto \
git://git.freedesktop.org/git/xorg/proto/videoproto \
git://git.freedesktop.org/git/xorg/proto/renderproto \
git://git.freedesktop.org/git/xorg/proto/inputproto \
git://git.freedesktop.org/git/xorg/proto/xf86vidmodeproto \
git://git.freedesktop.org/git/xorg/proto/xf86dgaproto \
git://git.freedesktop.org/git/xorg/proto/xf86driproto \
git://git.freedesktop.org/git/xorg/proto/xcmiscproto \
git://git.freedesktop.org/git/xorg/proto/scrnsaverproto \
git://git.freedesktop.org/git/xorg/proto/bigreqsproto \
git://git.freedesktop.org/git/xorg/proto/resourceproto \
git://git.freedesktop.org/git/xorg/proto/compositeproto \
git://git.freedesktop.org/git/xorg/proto/fixesproto \
git://git.freedesktop.org/git/xorg/proto/evieproto \
git://git.freedesktop.org/git/xorg/proto/kbproto \
git://git.freedesktop.org/git/xorg/lib/libxtrans \
git://git.freedesktop.org/git/xorg/lib/libX11 \
git://git.freedesktop.org/git/xorg/lib/libXext \
git://git.freedesktop.org/git/xorg/lib/libxkbfile \
git://git.freedesktop.org/git/xorg/lib/libfontenc \
git://git.freedesktop.org/git/xorg/lib/libXfont \
git://git.freedesktop.org/git/xorg/lib/libXfixes \
git://git.freedesktop.org/git/xorg/lib/libXdamage \
git://git.freedesktop.org/git/xorg/lib/libXv \
git://git.freedesktop.org/git/xorg/lib/libXvMC \
git://git.freedesktop.org/git/xorg/lib/libXxf86vm \
git://git.freedesktop.org/git/xorg/lib/libXinerama \
git://git.freedesktop.org/git/xorg/proto/dri2proto \
git://git.freedesktop.org/git/xorg/proto/glproto \
git://git.freedesktop.org/git/xorg/lib/libpciaccess \
git://git.freedesktop.org/git/pixman \
git://git.freedesktop.org/git/xcb/proto \
git://git.freedesktop.org/git/xcb/pthread-stubs \
git://git.freedesktop.org/git/xcb/libxcb \
git://git.freedesktop.org/git/xorg/proto/randrproto \
git://git.freedesktop.org/git/mesa/drm \
git://git.freedesktop.org/git/mesa/mesa \
git://git.freedesktop.org/git/xorg/xserver \
git://git.freedesktop.org/git/xorg/driver/xf86-input-mouse \
git://git.freedesktop.org/git/xorg/driver/xf86-input-keyboard \
git://git.freedesktop.org/git/xorg/driver/xf86-input-synaptics \
git://git.freedesktop.org/git/xorg/driver/xf86-video-intel"
modules="\
fontsproto \
x11proto \
xextproto \
videoproto \
renderproto \
inputproto \
damageproto \
xf86vidmodeproto \
xf86dgaproto \
xf86driproto \
xcmiscproto \
scrnsaverproto \
bigreqsproto \
resourceproto \
compositeproto \
resourceproto \
evieproto \
kbproto \
fixesproto \
libxtrans \
proto \
pthread-stubs \
libxcb \
libX11 \
libXext \
libxkbfile \
libfontenc \
libXfont \
libXv \
libXvMC \
libXxf86vm \
libXinerama \
libXfixes \
libXdamage \
dri2proto \
glproto \
libpciaccess \
pixman \
randrproto"
init()
{
        for repo in $REPOS; do
                echo "Cloning $repo";
                git clone $repo;
        done
        cd macros
        echo "Building macros"
        ./autogen.sh --prefix="$PREFIX";
        ($MAKE);
        make install
        cd ..
}
update_modules()
{
        for module in $modules; do
                cd $module
                git pull
                cd ..
        done
}
build ()
{
        export ACLOCAL="aclocal -I$PREFIX/share/aclocal"
        export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig"
        for i in $modules; do
                cd $i
                echo ======================
                echo configuring $i
                echo ======================
                ./autogen.sh --prefix="$PREFIX";
                echo ======================
                echo building $i
                echo ======================
                if [ $? -ne 0 ]; then
                        echo "Failed to configure $i."
                        exit
                fi
                ($MAKE);
                make install
                cd ..
        done
        # build drm
        cd drm
        ./autogen.sh --prefix="$PREFIX"  [color="Red"]--enable-udev
        ($MAKE)
        make -C linux-core
        # assuming you're on Linux, otherwise use bsd-core
        make install
        cd ..
#build mesa
        cd mesa
        ./autogen.sh --prefix=$PREFIX --with-driver=dri --disable-glut
        if [ $? -ne 0 ]; then
                echo "Failed to configure Mesa."
                exit
        fi
        ($MAKE)
        make install
        mkdir -p $PREFIX/bin
        install -m755 progs/xdemos/{glxinfo,glxgears} $PREFIX/bin/
        cd ..
#buildxserver
        cd xserver
        ./autogen.sh --prefix=$PREFIX --enable-builtin-fonts
        if [ $? -ne 0 ]; then
                echo "Failed to configure X server."
                exit
        fi
        ($MAKE)
        make install
        chown root $PREFIX/bin/Xorg;
        chmod +s $PREFIX/bin/Xorg
        cd ..
#mouse
        cd xf86-input-mouse
        ./autogen.sh --prefix=$PREFIX
        ($MAKE)
        make install
        cd ..
#keyboard
        cd xf86-input-keyboard
        ./autogen.sh --prefix=$PREFIX
        ($MAKE)
        make install
        cd ..
#synaptics
    cd xf86-input-synaptics
        ./autogen.sh --prefix=$PREFIX
        ($MAKE)
        make install
        cd ..
#intel
        cd xf86-video-intel
        ./autogen.sh --prefix=$PREFIX
        ($MAKE)
        make install
        cd ..
}
case "$1" in
        init)
                init
                ;;
        build)
                build
                ;;
        update)
                update_modules
                ;;
        *)
                echo "Usage: $0 init | build | update"
                exit 3
esac
在/opt/gfx-test目录下建立git-src目录,进入目录,把上面的内容保存为xgit.sh文件。chmod +x, 运行:
./xgit.sh init
git clone代码;
完成后,运行:
./xgit.sh build
进行编译。
测试:
  • rmmod i915 #I just use Intel
  • rmmod drm
  • insmod /linux-core/drm.ko
  • insmod /linux-core/i915.ko
  • export LD_LIBRARY_PATH=/opt/gfx-test/lib
  • startx -- /opt/gfx-test/bin/Xorg -verbose # make sure you have a ~/.xinitrc with what you want to run
    基本上是copy xorg wiki上的操作。
    可实际中,理论总是与实践有差别的。
    最新的intel X driver中,内存管理采用GEM而不是以前的TTM,所以对默认的没打patch内核,不会把i915的内核模块编译出来。
    所以需要寻找包含GEM patch的内核。
    git clone git://people.freedesktop.org/~anholt/linux-2.6 drm-gem-merge
    cd drm-gem-merge
    git branch -r
    git checkout origin/drm-gem-merge
    参考链接2的做法在ArchLinux下不再有效,我跟着它绕过弯路:-(
    可能是git版本导致,要好好看看git的使用方法了。
    参考链接:
    1. http://www.x.org/wiki/Development/git
    2. http://ge.ubuntuforums.com/showthread.php?s=74b4b4982c8503ae3a23dc42987c3d1b&t=890843
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/6547/showart_1269214.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP