为了写一个圆弧补偿的程序,分析了ode,想再深入了解一下,在linuxCNC(emc2)系统仿真,看看它的算法,没有想到源代码安装,有如此庞大的依赖关系库,因为LinuxCNC的资料比较完善。这个软件只有一半的代码开放,内涵一多半代码没有开放,由于项目源于美国国家标准和技术研究院,也可以理解这样的事情。
现介绍一下linuxCNC软件:
LinuxCNC (增强版机械控制)是机床(车床和铣床)的计算机控制系统;
(传统的是计算机数值控制CNC computer numerical control)。
LinuxCNC 是自由软件,且开放源代码, 现行版本认证协议是GPL and LGPL。
LinuxCNC 包括:
多个图形用户界面,包括一个触摸屏
一个G代码解释器,(RS-274机床编程语言)
一个实时具有前瞻性的运动规划系统
低层机械电子操作(比如传感器和电机)
一个易用的“电子测试板“层面的快速生成你设备的独有配置
一个配备梯形图的PLC编程软件
方便的deb格式安装和Live-CD(嵌入linuxCNC的ubuntu光盘)
它不支持CAD制图,或者,G代码生成机械自动生产的公式。
它可以仿真到9轴运动和支持多样界面
在计算机上LinuxCNC软件上可以完成控制可操作真实的伺服(模拟或者PWM脉宽)并配闭环反馈系统
运动控制特点包括: 切削半径和长度补偿,路径偏差限制在允许的误差范围内,车削螺纹,多轴运动同步,合理的进给率,操作者进给极限限制,和常规速度控制。
支持非笛卡尔运动系统是支持用户的运动动力模型,可以支持的结构(机械结构)包括hexapods 六角并连杆系统
(Steward 平台和类似的感念)和 旋转关节系统的运动支持,
比如PUMA 或者SCARA 机器人,(商业名称:工业机器人industrial rotob,学术名称:机械手臂 manipulator)
/* Steward是20世纪60年代德国工程师,最早提出的六自由度装配平台,应用到机械加工上的就是并连杆机床 */
LinuxCNC 运行在Linux的 实时 扩展上, 支持现行的 2.4 & 2.6 内核,实时扩展应用的是RT-Linux 或者 RTAI 补丁。
安装deb格式和刻录Live-CD是比较快的安装方法,但是开发者如果安装它,尤其是一个新系统,那就比较麻烦了,
我写了我安装的过程,希望为开发者节省安装的时间,
系统: debian squeeze, 604 stable version, i586, version, 裸系统,只有gnome,没有autotools.
硬件: hp nx6120 笔记本电脑, intel pentium m.
1, 首先安装gcc, autoconf, autogen, automake, make, libtool,m4, 这几个软件,我安装的方法是synaptic
打开(左上角的菜单),》系统,》系统管理 》 新立得软件包管理器, 或者在终端中进入超级用户,su, 然后输 synaptic
搜索上述软件,并选择,放入安装光盘,选择并点击《 应用 》执行安装。
2, 下载 LinuxCNC源代码,在终端中直接输入以下指令,在当前文件夹新建linuxcnc-dev,把所有代码下载到此文件夹内,
git clone git://git.linuxcnc.org/git/linuxcnc.git linuxcnc-dev
3,开始安装,进入linuxcnc-dev 文件夹,
# cd linuxcnc-dev
然后,查看安装命令,
# ls
查看文件,其中有一个README的文件,可以用查看内容,
# cat README (or, nano README or, vi README)
内容如下:
From the top level directory, switch to the source directory:
cd src
In the source directory, build LinuxCNC:
./configure –enable-run-in-place
[or, if you do not have a realtime kernel:]
./configure –enable-run-in-place –enable-simulator
make clean
make
sudo make setuid
to run the software go back to the top level directory, and issue:
. scripts/rip-environment
linuxcnc
根据提示,我们进入src文件夹,
# cd src
然后开始编译配置文件,输入命令
./configure –enable-run-in-place –enable-simulator
4,出现了问题,就是,依赖mesalib,我们就说说安装MesaLib-7.5.1
下载地址:http://downloads.sourceforge.net/project/mesa3d/MesaLib-7.5.1.tar.gz
Mesa-7.5.1的依赖关系,依赖glib-2.0, 而glib-2.0以来Xorg Libraries,
4.1 Xorg Libraries,
详细的安装参考: Xorg-7.7 (因为此版本支持自动下载和安装多个文件)
http://www.linuxfromscratch.org/blfs/view/svn/x/x7lib.html
Xorg Libraries 以来以下软件,
Fontconfig-2.10.2, Xorg Protocol Headers, libXdmcp-1.1.1, and libxcb-1.9
我安装的时候,按照这个顺序来的,
24. X Window System Environment
* Introduction to Xorg-7.7
* util-macros-1.17
* Xorg Protocol Headers
* makedepend-1.0.4
* libXau-1.0.7
* libXdmcp-1.1.1
* libpthread-stubs-0.3
* xcb-proto-1.8
* libxcb-1.9
* Xorg Libraries
因为我的系统中有xorg一些文件和glib-2.0,系统是debian的,所以都是成熟的应用包,而没有开发软件包,为了混淆,所以,我把所有的安装路径全部选择到/usr/local,
4.1.1, util-macros-1.17
下载地址:
http://xorg.freedesktop.org/releases/individual/util/util-macros-1.17.tar.bz2
ftp://ftp.x.org/pub/individual/util/util-macros-1.17.tar.bz2
./configure $XORG_CONFIG &&
make
make install
这里,我没有设置$XORG_CONFIG $XOR_PREFIX,系统默认的是/usr/local
4.1.2,Xorg Protocol Headers
依赖需要:
util-macros-1.17
建议安装:
Sudo-1.8.6p3 and Wget-1.14 (因为两个程序系统自带,所以没有安装,如果安装,下载代码,安装)
安装好依赖关系以后,执行安装命令,因为是多个文件,这个安装和下载的方法很特殊,基于bash脚本,不过很经典,
4.1.2.1,
命令:
cat > proto-7.7.md5 << "EOF"
1a05fb01fa1d5198894c931cf925c025 bigreqsproto-1.1.2.tar.bz2
98482f65ba1e74a08bf5b056a4031ef0 compositeproto-0.4.2.tar.bz2
998e5904764b82642cc63d97b4ba9e95 damageproto-1.2.1.tar.bz2
4ee175bbd44d05c34d43bb129be5098a dmxproto-2.3.1.tar.bz2
b2721d5d24c04d9980a0c6540cb5396a dri2proto-2.8.tar.bz2
e7431ab84d37b2678af71e29355e101d fixesproto-5.0.tar.bz2
c5f4f1fb4ba7766eedbc9489e81f3be2 fontsproto-2.1.2.tar.bz2
3847963c1b88fd04a030b932b0aece07 glproto-1.4.16.tar.bz2
13c8aedaf98a92e282b7e456c0a5bed9 inputproto-2.2.tar.bz2
677ea8523eec6caca86121ad2dca0b71 kbproto-1.0.6.tar.bz2
ce4d0b05675968e4c83e003cc809660d randrproto-1.4.0.tar.bz2
1b4e5dede5ea51906f1530ca1e21d216 recordproto-1.14.2.tar.bz2
a914ccc1de66ddeb4b611c6b0686e274 renderproto-0.11.1.tar.bz2
cfdb57dae221b71b2703f8e2980eaaf4 resourceproto-1.2.0.tar.bz2
edd8a73775e8ece1d69515dd17767bfb scrnsaverproto-1.2.2.tar.bz2
c3b348c6e2031b72b11ae63fc7f805c2 videoproto-2.3.1.tar.bz2
5f4847c78e41b801982c8a5e06365b24 xcmiscproto-1.2.2.tar.bz2
eaac343af094e6b608cf15cfba0f77c5 xextproto-7.2.1.tar.bz2
120e226ede5a4687b25dd357cc9b8efe xf86bigfontproto-1.2.0.tar.bz2
a036dc2fcbf052ec10621fd48b68dbb1 xf86dgaproto-2.1.tar.bz2
1d716d0dac3b664e5ee20c69d34bc10e xf86driproto-2.1.1.tar.bz2
e793ecefeaecfeabd1aed6a01095174e xf86vidmodeproto-2.3.1.tar.bz2
9959fe0bfb22a0e7260433b8d199590a xineramaproto-1.2.1.tar.bz2
d4d241a4849167e4e694fe73371c328c xproto-7.0.23.tar.bz2
EOF
这个命令的意思是新建一个文件proto-7.7.md5,内容就是这些md5代码和软件包对应的名字,EOF是终端结束cat的命令,文件中没有。
4.1.2.2,
命令:
mkdir proto &&
cd proto &&
grep -v '^#' ../proto-7.7.md5 | awk '{print $2}' | wget -i- -c \
-B http://xorg.freedesktop.org/releases/individual/proto/ &&
md5sum -c ../proto-7.7.md5
意思是在终端的当前文件夹 建立一个新的 proto文件夹, 进入文件夹,捕捉 上层文件夹中的proto-7.7.md5文件,
文件中的md5对应的 网址中的md5文件,并用,wget命令下载全部到proto文件夹,
4.1.2.3,
命令:
as_root()
{
if [ $EUID = 0 ]; then $*
elif [ -x /usr/bin/sudo ]; then sudo $*
else su -c \\"$*\\"
fi
}
export -f as_root
因为安装中的命令有一个环境应用,as_root, 此命令是定义as_root,并且要求以超级用户的身份来安装程序。
bash -e
进入子终端,(我这里没有什么反义,不过还是找此步骤操作)
4.1.2.4,
命令:
for package in $(grep -v '^#' ../proto-7.7.md5 | awk '{print $2}')
do
packagedir=${package%.tar.bz2}
tar -xf $package
pushd $packagedir
./configure $XORG_CONFIG
as_root make install
popd
rm -r $packagedir
done
循环软件包, 捕捉 上层文件夹中proto-7.7.md5文件中的文件名,逐个解压所有的 tar.bz2的文件,然后逐个进入,
执行安装命令./configure $XORG_CONFIG
超级用户 make install
安装完成后删除目录
到此,Xorg Protocol Headers 已经完成安装了,安装的路径是/usr/local, 所以,安装完成后,
为了方便其他程序可以找到此库文件,配置地址很重要,用宏命令 LD_LIBRARY_PATH 和 PKG_CONFIG_PATH 来配置,
4.1.2.5,
LD_LIBRARY_PATH是配置链接库文件的路径,*.so *.a 等后缀的文件地址,我们没有设置$XORG_PREFIX 和 $XORG_CONFIG,
所以默认的是/usr/local, 那么配置LD_LIBRARY_PATH的路径就是 /usr/local/lib
# LD_LIBRARY_PATH=/usr/local/lib
或者
# export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
功能是一样的,查看是否配置成功,必须加$符号,
# echo $LD_LIBRARY_PATH
/usr/local/lib /* 显示这样的地址就是已经配置的地址 */
PKG_CONFIG_PATH是配置*.pc文件的命令,是pkg-config命令的终端环境宏命令,一般软件的库文件都已一个*.pc的文件,内包含相关软件的路径, 头文件和库文件的地址,(比如CFLAGS=/usr/locoal/include LIBS=/usr/local/lib), 而*.pc的文件一般都放在../../lib/pkgconfig 库文件夹中的pkgconfig文件夹中,所以这个地址我们应该多配置几个,用冒号间隔,
# PKG_CONFIG_PATH=/usr/lib/pkgconfig:/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig
其他查看和其他和LD_LIBRARY_PATH一样, 为什么要用/usr/local/share/pkgconfig,因为Xorg Protocol Headers 有一个库文件是安装到了../../share中的。
注意:如果安装过程中出现异样,重新执行命令即可。
4.1.3, makedepend-1.0.4
http://xorg.freedesktop.org/releases/individual/util/makedepend-1.0.4.tar.bz2
依赖 Xorg Protocol Headers, (我们刚刚完成了安装和配置)
安装步骤:
./configure $XORG_CONFIG &&
make
make install
4.1.4, libXau-1.0.7
http://xorg.freedesktop.org/releases/individual/lib/libXau-1.0.7.tar.bz2
依赖 Xorg Protocal Headers
安装步骤:
./configure $XORG_CONFIG &&
make
make install
4.1.4, libXdmcp-1.1.1
http://xorg.freedesktop.org/releases/individual/lib/libXdmcp-1.1.1.tar.bz2
依赖 Xorg Protocal Headers
安装步骤:
./configure $XORG_CONFIG &&
make
make install
4.1.5, libpthread-stubs-0.3
http://xcb.freedesktop.org/dist/libpthread-stubs-0.3.tar.bz2
安装步骤:
./configure –prefix=/usr/local &&
make
make install
4.1.6, xcb-proto-1.8
http://xcb.freedesktop.org/dist/xcb-proto-1.8.tar.bz2
依赖关系: Python-2.7.3
4.1.6.1, Python-2.7.3
http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.xz
依赖关系: (建议安装)expat-2.1.0 and libffi-3.0.11
expat-2.1.0
http://downloads.sourceforge.net/expat/expat-2.1.0.tar.gz
安装步骤:
./configure –prefix=/usr/local &&
make
make install
libffi-3.0.11
ftp://sourceware.org/pub/libffi/libffi-3.0.11.tar.gz
安装步骤:
./configure –prefix=/usr/local &&
make
make install
Python-2.7.3的安装步骤:(注意,所有sed命令,不允许直接复制到终端,否则出现安装错误)
sed -i "s/ndbm_libs = \[\]/ndbm_libs = ['gdbm', 'gdbm_compat']/" setup.py &&
./configure –prefix=/usr/local \
–enable-shared \
–with-system-expat \
–with-system-ffi \
–enable-unicode=ucs4 &&
make
make install &&
chmod -v 755 /usr/local/lib/libpython2.7.so.1.0
如果检测python –version的版本不是2.7.3,链接python2.7 -> python
# ln -sv /usr/local/bin/python2.7 /usr/bin/python
如果出现找不到 libpython2.7.so.1.0, 复制 libpython2.7.so.1.0 到 /usr/lib
# cp /usr/local/lib/libpython2.7.so.1.0 /usr/llib
即可。
4.1.6, xcb-proto-1.8
http://xcb.freedesktop.org/dist/xcb-proto-1.8.tar.bz2
依赖关系: Python-2.7.3, (已经安装,)
安装步骤:
./configure $XORG_CONFIG
make install
4.1.7,libxcb-1.9
http://xcb.freedesktop.org/dist/libxcb-1.9.tar.bz2
以来关系:(只有libxslt-1.1.28没有安装)
libXau-1.0.7, libXdmcp-1.1.1, libpthread-stubs-0.3, libxslt-1.1.28, and xcb-proto-1.8
4.1.7.1,libxslt-1.1.28
http://xmlsoft.org/sources/libxslt-1.1.28.tar.gz
依赖关系: 需要:libxml2-2.9.0
libxml2-2.9.0
http://xmlsoft.org/sources/libxml2-2.9.0.tar.gz
安装步骤:
./configure –prefix=/usr/local –disable-static &&
make
make install
libxslt-1.1.28
安装步骤:
./configure –prefix=/usr/local –disable-static &&
make
make install
4.1.7.1,libxslt-1.1.28
安装步骤:
./configure $XORG_CONFIG –enable-xinput –docdir='${datadir}'/doc/libxcb-1.9 &&
make
make install
4.1.8,Xorg Libraries
依赖关系: (没有安装Fontconfig-2.10.2 )
Fontconfig-2.10.2, Xorg Protocol Headers, libXdmcp-1.1.1, and libxcb-1.9
4.1.8.1,Fontconfig-2.10.2
http://fontconfig.org/release/fontconfig-2.10.2.tar.bz2
依赖关系:(没有安装 FreeType-2.4.11)
FreeType-2.4.11 and either expat-2.1.0 or libxml2-2.9.0
FreeType-2.4.11
http://downloads.sourceforge.net/freetype/freetype-2.4.11.tar.bz2
安装步骤: (注意,所有sed命令的操作不可以复制,否则会出现错误)
sed -i -r 's:.*(#.*SUBPIXEL.*) .*:\1:' \
include/freetype/config/ftoption.h &&
./configure –prefix=/usr –disable-static &&
make
make install
4.1.8.1,Fontconfig-2.10.2
安装步骤:
./configure –prefix=/usr/local \
–sysconfdir=/etc \
–localstatedir=/var \
–docdir=/usr/share/doc/fontconfig-2.10.2 \
–disable-docs \
–disable-static &&
make
make install
4.1.8,Xorg Libraries
安装步骤: (和Xorg Protocol Headers 的安装步骤一样,不再详细解释,)
4,1,8,1,
cat > lib-7.7.md5 << "EOF"
84c66908cf003ad8c272b0eecbdbaee3 xtrans-1.2.7.tar.bz2
78b4b3bab4acbdf0abcfca30a8c70cc6 libX11-1.5.0.tar.bz2
71251a22bc47068d60a95f50ed2ec3cf libXext-1.3.1.tar.bz2
645f83160cf7b562734e2038045106d1 libFS-1.0.4.tar.bz2
471b5ca9f5562ac0d6eac7a0bf650738 libICE-1.0.8.tar.bz2
766de9d1e1ecf8bf74cebe2111d8e2bd libSM-1.2.1.tar.bz2
7a773b16165e39e938650bcc9027c1d5 libXScrnSaver-1.2.2.tar.bz2
a6f137ae100e74ebe3b71eb4a38c40b3 libXt-1.1.3.tar.bz2
a4efff8de85bd45dd3da124285d10c00 libXmu-1.1.1.tar.bz2
7ae7eff7a14d411e84a67bd166bcec1a libXpm-3.5.10.tar.bz2
f39942f2cab379fc9b4c3731bf191b84 libXaw-1.0.11.tar.bz2
678071bd7f9f7467e2fc712d81022318 libXfixes-5.0.tar.bz2
a60e0b5c276d0aa9e2d3b982c98f61c8 libXcomposite-0.4.3.tar.bz2
ee62f4c7f0f16ced4da63308963ccad2 libXrender-0.9.7.tar.bz2
52efa81b7f26c8eda13510a2fba98eea libXcursor-1.1.13.tar.bz2
44774e1a065158b52f1a0da5100cebec libXdamage-1.1.3.tar.bz2
a2a861f142c3b4367f14fc14239fc1f7 libfontenc-1.1.1.tar.bz2
6851da5dae0a6cf5f7c9b9e2b05dd3b4 libXfont-1.4.5.tar.bz2
78d64dece560c9e8699199f3faa521c0 libXft-2.3.1.tar.bz2
2a689ae1089786a6712ce9e2c2c7c7ca libXi-1.6.2.tar.bz2
cb45d6672c93a608f003b6404f1dd462 libXinerama-1.1.2.tar.bz2
0c843636124cc1494e3d87df16957672 libXrandr-1.4.0.tar.bz2
80d0c6d8522fa7a645e4f522e9a9cd20 libXres-1.0.6.tar.bz2
e8abc5c00c666f551cf26aa53819d592 libXtst-1.2.1.tar.bz2
5e1ac203ccd3ce3e89755ed1fbe75b0b libXv-1.0.7.tar.bz2
3340c99ff556ea2457b4be47f5cb96fa libXvMC-1.0.7.tar.bz2
b7f38465c46e7145782d37dbb9da8c09 libXxf86dga-1.1.3.tar.bz2
ffd93bcedd8b2b5aeabf184e7b91f326 libXxf86vm-1.1.2.tar.bz2
782ced3a9e754dfeb53a8a006a75eb1a libdmx-1.1.2.tar.bz2
399a419ac6a54f0fc07c69c9bdf452dc libpciaccess-0.13.1.tar.bz2
19e6533ae64abba0773816a23f2b9507 libxkbfile-1.0.8.tar.bz2
EOF
4,1,8,2
mkdir lib &&
cd lib &&
grep -v '^#' ../lib-7.7.md5 | awk '{print $2}' | wget -i- -c \
-B http://xorg.freedesktop.org/releases/individual/lib/ &&
md5sum -c ../lib-7.7.md5
4,1,8,3
as_root()
{
if [ $EUID = 0 ]; then $*
elif [ -x /usr/bin/sudo ]; then sudo $*
else su -c \\"$*\\"
fi
}
export -f as_root
bash -e
4,1,8,4,
for package in $(grep -v '^#' ../lib-7.7.md5 | awk '{print $2}')
do
packagedir=${package%.tar.bz2}
tar -xf $package
pushd $packagedir
case $packagedir in
libXfont-[0-9]* )
./configure $XORG_CONFIG –disable-devel-docs
;;
libXt-[0-9]* )
./configure $XORG_CONFIG \
–with-appdefaultdir=/etc/X11/app-defaults
;;
* )
./configure $XORG_CONFIG
;;
esac
make
as_root make install
popd
rm -r $packagedir
as_root /sbin/ldconfig
done
如果安装是出现异常,重复操作命令即可。
到此,Xorg Libraries 源代码级别安装完成,参考 www.linuxfromscratch.org.