- 论坛徽章:
- 0
|
为了尝试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 |
|