数字交流伺服系统实验报告_第1页
数字交流伺服系统实验报告_第2页
数字交流伺服系统实验报告_第3页
数字交流伺服系统实验报告_第4页
数字交流伺服系统实验报告_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字交流伺服系统实验报告学院:机械工程学院学号:YJX1101028姓名:马玉华数字交流伺服系统实验报告(标题宋体,3号,加黑,段前段后0.5行)一、实验目的(宋体,小4,加黑,段后0.5行)通过实验深入理解伺服系统的系统结构及工作原理,掌握伺服系统的控制器设计与系统调试方法。(正文:宋体,5号,单倍行距)二、实验内容及结果1. 对系统进行理论分析1)数字伺服伺服系统又称“随动系统”,是属于自动化体系中控制的一种,它是由若干元件和部件组成的、具有功率放大作用的一种自动控制系统,它的输出量总是相当精确地跟随输入量的变化而变化,或者说,它的输出量总是复现输入量。它通常是具有负反馈的闭环控制系统,有

2、的场合也可以采用开环控制系统来实现其功能。随着技术的进步和整个工业的不断发展,伺服驱动技术也取得了极大的进步,伺服系统已经进入了全数字化和交流化的时代。随动系统的基本职能是对信号进行功率放大,保证有足够的能量推动负载(被控对象)按输入信号的规律运动(即输出),并使得输入与输出之间的偏差不超过允许的误差范围。也有一部分伺服系统还必须完成一定距离的自动追踪任务。数字伺服控制系统是一种以数字处理器或计算机为控制器去控制具有连续工作状态的被控对象的闭环控制系统。因此,数字伺服控制系统包括工作于离散状态下的数字计算机和和工作于连续状态下的被控对象两大部分。由于数字控制系统的具有一系列的优越性,但主要体现

3、在数字化的实现,将原来有的硬件伺服控制变成了软件伺服控制,从而使在伺服系统中应用现代控制理论的先进算法如最优控制、人工智能、模糊控制、神经元网络等,成为可能。此外也使得整个伺服系统更加集成化、网络化、智能化和模块化。数字伺服控制系统的输出可以使各种不同的物理量,如速度(包括角速度)控制、位置(包括转角)控制、和运动轨迹控制。其组成部分主要有测量元件、给定元件、比较元件、放大元件、执行元件和校正元件等。由系统所给的仿真控制图可以知道系统属于位置控制系统。其整体分析可知系统有电流环、速度环和位置环构成的三环位置控制系统,其整体控制框图可以如下图所示:图1 位置控制系统的结构框图并且由系统所给定的系

4、统的仿真图可知,系统的速度控制和电流控制部分都已经完成,在本次设计中只需要对位置控制部分的设计控制算法就可。其主要包括控制结构的选择和参数的选取。2)控制结构的选择数字伺服控制系统的分类方式有很多种,按不同的分类方法会得到不同名称的数字伺服控制系统。但由于本实验是为了做出位置外环的控制部分算法,所以这里介绍按照系统控制方式的分法。然后根据其优缺点和试验系统的需要来选取适合的控制方式。按照系统控制方式来分类,可以分为误差控制的数字伺服控制系统和复合控制系统。分别介绍如下。误差控制的数字伺服控制系统,其主要特点是系统的快慢取决于误差信号的大小。当系统的误差信号为零时(即系统输出量与输入给定量完全相

5、等时),系统便处于静止状态。其基本结构形式可以用下图来表示: 图2 误差控制的数字伺服控制系统的基本结构形式误差测量装置又称比较元件或敏感元件,其作用是将系统的输入和输出之间的差值随时的测量出来,并将误差信号转换成电信号送入放大装置。放大装置将误差电压进行必要的变换和功率放大之后,驱动执行元件,使执行元件通过减速器拖动被控对象,按照输入信号的规律运动。校正装置的作用是补偿系统中存在的电磁与机电惯性所引起的滞后作用,是系统的输出信号能瞬时跟随输入信号的变化,以满足系统的动态品质的要求。按误差控制的随动系统具有良好的抗干扰性能。当系统受到外部干扰,是输出量偏离输入量时,通过负反馈作用,使误差测量装

6、置的输出的误差电压,执行元件推动被控对象回到与输入相对应的位置,即将系统输出量自动的调整到允许的误差范围内,这是按误差控制(又称反馈控制)的极大优点。但其缺点也很明显,是负反馈削弱了系统的放大倍数,降低了系统的快速性,且系统精度的进一步提高也受到这种结构形式的制约,因为提高精度需要增大系统开环放大系数和增加积分环节,这样又会影响系统的稳定性。复合控制系统,即按照输入信号微分和系统误差综合控制的系统。它的特点是系统的运动取决于输入信号的变化率(包括输入速度和加速度)和系统误差信号的综合作用。复合控制系统的基本结构形式可以用小下图来表示:图3 复合控制系统的基本控制结构 如果按系统误差及输入信号的

7、一阶或一阶与二阶微分来控制系统,则可以大大的提高系统的精度与快速性,而又不影响系统的稳定性,保留了单纯按照误差控制的全部优点。这就是复合控制系统,为了详细的表示出复合系统这种优势,可以做如下推导: 在按误差控制的闭环系统基础上并联一个输入信号n阶微分的正顺馈通道,则组成了复合控制系统。即系统的执行元件受系统误差信号和输入信号的n阶微分综合控制,如下图所示,图中是系统输入信号,是系统的输出信号,Wr(S)是n阶微分装置,W1(S)W2(S)W3(S)及其反馈是原有按误差控制的闭环系统。 图4 带有正顺馈通道的复合控制系统结构采用复合控制后,系统的输出为:将系统误差代入上式,则得:也即是:所以可得

8、系统的闭环传函为: (1)系统的误差传函为: (2)当微分装置的结构参数满足: (3)当微分装置的结构参数满足3式时,则及,即及。这说明系统的输出完全复现输入,没有过渡过程,系统具有无穷大的通频带,不管输入信号如何变化,系统的误差式中为0.此外,原有按照误差控制的闭环系统传函为: (4) 由1式和4式可知,采用复合控制后,系统的特征方程没有变化,即并联输入信号的n阶微分装置后不影响原有系统的稳定性。所以,从原理结构上讲,复合控制系统要比单纯采用按误差控制系统的闭环系统要优越的多,是一种比较理想的随动系统。 综上所论述本系统中的,位置控制结构选择为复合控制系统。微分环节采用一阶微分结构,即Wr(

9、S)为一阶结构;W1(S)采用PID控制结构。PID控制的调节思路大致可描述如下。参数KP、Ti、Td的大小会对系统的动态特性有很大的影响,比例调节参数KP加大,提高系统的开环增益,减小系统的稳态误差,KP偏大,震荡次数加多,调节时间变长,当KP太大时,系统不稳定。积分调节能消除系统的稳态误差,提高控制系统的控制精度,但积分调节通常使系统稳定性下降,Ti越小积分作用越强,系统将不稳定。Ti越大积分作用越弱,对系统稳定性能的不利影响减少,但消除净差的时间增加。微分调节可以改善系统动态特性,参数Td偏大、偏小时,超调量都较大,而且调节时间较长。所以当参数KP 、Ti、Td合适时,系统才可以得到满意

10、的动态特性和稳定特性。2. 伺服系统仿真实验图5为系统的整体仿真结构图,而系统所要求设计的位置控制器部分如图6所示。图5数字伺服系统的整体仿真结构图图6 位置环控制器结构设计位置环控制器结构图6所示,其结构整体上采用复合控制系统,即结合对系统误差信号和输入信号的微分来共同控制系统。系统仿真时的参数设置如下所示PID controller1:kp=2.5,ki=0.3,kd=0.25;PID controller2:kp=0,ki=0,kd=0.1;1)阶跃信号输入: 3000mil 调节时间0.5s,静差0.5mil,%3mil,振荡11.5次; 图6 阶跃信号时系统输出曲线 图7 阶跃信号时

11、系统误差曲线 系统的调节时间为0.45秒左右,超调为7mil,系统在最终稳定后净差0.5mil,无明显振荡。2)斜坡信号输入: (1)低速:20mil/s 误差2mil,无爬行现象; 图8 低速斜坡信号时系统输出曲线 图9 低速斜坡信号时系统误差曲线 斜坡信号低速输入时,由图18可知,系统无爬行现象,系统在开始时误差较大,但也要比-0.5mil要小,系统在最终稳定后误差小于0.2满足设计要求。 (2)高速:1500mil/s 误差2mil; 图10 高速斜坡信号时系统输出曲线 图11 高速斜坡信号时系统误差曲线 高速斜坡信号输入时,系统仍然无爬行现象。但系统的最终误差较大近10.3)正弦信号输

12、入: 周期6.28s,幅值1000mil 最大误差2mil,由齿隙引起的跳变1mil。 图12 正弦信号时系统输出曲线 图13 正弦信号时系统误差曲线 有图12可知,此时系统整体上能够使输出能够很好的跟随正弦给定信号,虽然在幅值上的给随效果很好,但是在相位上还是有很细小的误差,这个可以在系统的误差曲线上看出来其幅值近20.有待提高。 图14 正弦信号、有齿轮间隙时的系统误差曲线 图15 正弦信号、无齿轮间隙时系统误差曲线 通过对图14和图15的比较可以知道,系统在有无齿轮间隙的作用在系统误差信号上的表现主要为:当系统有齿轮间隙时的误差曲线在等于零之后会出现类似与毛刺的曲线形状曲线,而在没有齿轮

13、间隙时就不会出现这种毛刺。并且若系统所加的正弦信号幅值相对于齿轮间隙较小时,会导致对系统误差曲线的毛刺现象更加明显,也会使这时系统的输出曲线出现折线形式的波形。图16就是正弦信号幅值为1,而系统的齿轮间隙仍然为4时的系统输出曲线,但系统已经不能够很好的跟随给定信号了。图16 低幅值、大齿轮间隙时的系统输出信号跟随输入信号的曲线三、结果分析1、调试结果分析说明;在仿真实验系统中,对PID参数调节时,知道控制部分的各个功能后,在仿真实验系统中,在参数接近实验要求时,固定某一参数,对另一参数微调,进而找出另一参数最优时的参数值,然后固定这两个参数,调节第三个参数;但是由于系统是对三种不同输入都有一定

14、的性能要求,这就使得在调解时,在各个不同输入时的各个状态之间切换调节,已选择系统整体最优时的参数作为最终参数值。当系统仍然不能够满足要求时,考虑调节前馈中的微分系统,继而使得系统能够满足要求。在上面的调节过后,能够得出不同信号在系统下的相应曲线和系统的误差曲线,继而能够充分的分析系统的整体性能。并且可以从有输出误差曲线上的有无毛刺,来判断系统中的齿轮间隙的影响也能够充分的分析出来。在实际的系统实验中,由于各种干扰因素的影响,系统的性能指标不太稳定,对PID参数进行调节的同时,考虑对前馈微分环节进行调节。并且系统的齿轮间隙的影响在实际系统中可以更加明显的显现出来。2、结合调试结果,简述控制器的作

15、用及调试方法。系统整体上采用复合控制系统,即按照输入信号微分和系统误差综合控制的系统。它的特点是系统的运动取决于输入信号的变化率(包括输入速度和加速度)和系统误差信号的综合作用。其可以大大的提高系统的精度与快速性,而又不影响系统的稳定性,保留了单纯按照误差控制的全部优点。其中误差信号采用PID控制的方式,其作用和调节方式主要体现在以下几个方面:(1)比例(P)调节成比例地反映控制偏差,偏差一旦产生,比例调节立即发挥作用,以减少偏差,但不能消除偏差,使得系统存在净差。增大Kp可以提高系统开环增益,减小净差,提高系统的控制精度;但Kp过大,会降低系统动态质量,是系统不稳定。(2)积分(I)调节主要

16、用于消除净差,属于无差调节;但是的稳定性作用比P调节要差。总体上来说:适量增大积分会减小振荡周期,减小调节时间。(3)微分(D)调节反映偏差的变化趋势,并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正,从而加快系统的动作速度,减小调节时间。但增大比例会使系统振荡不稳定。然后是前馈部分,由于其是采用的微分环节,所以其具有微分调节的一般特性,其可以表示出调节量的变化速度(包括其大小和方向),这样就使得调节器能够根据调节量的变化速度来确定控制量的一个特性,而不是等到调节量出现很大的偏差后才开始动作,进而赋予调节器某种程度的预见性。在知道控制部分的以上功能后,在仿真实验系统中,对PID参数调

17、节时,在参数接近实验要求时,固定某一参数,对另一参数微调,进而找出另一参数最优时的参数值,然后固定这两个参数,调节第三个参数;但是由于系统是对三种不同输入都有一定的性能要求,这就使得在调解时,在各个不同输入时的各个状态之间切换调节,已选择系统整体最优时的参数作为最终参数值。3、结合系统调试,分析实际系统与仿真之间的差别。其实要分析仿真和实际系统之间的差别,我们可以从仿真系统的着手处加以分析说明。我们知道仿真是在将实际系统的各个部分进行简化,进而抓住主要特征,忽略次要特征的情况下的,对真实系统的一种模拟。由于真实系统往往是非常复杂的,这样决定了仿真系统虽然可以通过一些手段逼近真实的实际系统,但永

18、远都会和实际系统之间存在着差异。这可能体现在系统部件的非线性转变,电磁干扰等多方面的影响。但仿真系统总能够给真实的系统设计指导一定的方向,有着不可代替的作用。下面从两个方面说明下实际系统。伺服系统的刚度描述了系统抗扭矩干扰的能力,实际系统的刚度比较难于衡量,这是由于实际系统的干扰往往难于量化,对于一个伺服系统来说,高的刚度能够达到较好的伺服性能; 在仿真时,则不需要考虑这方面的问题。伺服系统的抗噪音能力描述了系统对噪音源的放大程度,噪音干扰会导致系统发热、振荡,扭矩波动和杂音等不良的现象。在实际系统中,对参数的调整也会受到电机噪声的影响。同样这些特征在仿真中仍然不给予考虑。但总体上来说,就如同

19、前面所总结的一样,虽然仿真系统与实际系统有差别,但其对真实系统的建立有着很重要的知道作用。四、学习心得请结合课程内容和实验进行总结。通过此次伺服系统的仿真和实际系统的实验,让我对伺服系统、特别是位置控制的伺服系统在其结构、控制方式等方面有了更加深刻的理解。也让我更加的认识到了伺服系统的重要作用,高效率的伺服系统总能够很好的让系统的输出很好的跟随着输入信号,进而复现给定信号,控制系统使得系统按照需要的特点进行运转。本次实验中,主要面对的是控制器的设计,更加让我熟悉了PID调节中其参数的设计选择,也对伺服系统的控制结构有了较为深刻的认识。但是我也认识到了伺服系统虽然较为常用的一类控制但是其仍然是属

20、于自动控制系统中的一种,在现实的伺服系统设计中总是结合到了自动控制和现代控制理论中的知识。随着社会的发展和科技的不断进步现在的伺服系统控制逐渐由模拟化和直流化的阶段向着数字化和交流化的方向发展。比如伺服电机控制器由于可以对电机实现精确的力矩控制,其速度控制和位置控制可以直接通过数字控制来实现。其性能好,反应速度快和稳定性高,有助于提高生产率。此外由于以前所学专业与现在专业的不同,这让我在学习伺服系统时有很大的困难,特别是在做实验的过程中更让自己感到了学习知识的匮乏,但也激发了自己继续学习的动力。提醒自己在以后的学习中更加努力的去学习知识,充实自己。扩充自己的知识面,争取让自己的知识能够较为全面

21、的发展。最后,也对老师在课程的学习和课程实验中的指导表示感谢。我们能够完成这份不是很优秀的报告,和您的关心指导有着莫大的关联,再次感谢老师。也祝老师工作顺利,身体健康。参考文献1.随动系统,曾乐生、施妙和编著,北京工业出版社,19882.伺服系统实用技术,肖英奎等编,化学工业出版社,20043.数字伺服控制系统与设计,卢志刚等编著,机械工业出版社,20074伺服技术,厉虹等主编,国防工业出版社,20085.MATLAB自动控制系统设计,张德丰等编著,机械工业出版社,2010附录资料:不需要的可以自行删除 busybox详解制作根文件系统详解制作根文件系统 一、FHS(Filesystem Hi

22、erarchy Standard)标准介绍当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。该标准规定了根目录下各个子目录的名称及其存放的内容:目录名存放的内容/bin必备的用户命令,例如ls、cp等/sbin必备的系统管理员命令,例如ifconfig、reboot等/dev设备文件,例如mtdblock0、tty1等/etc系统配置文件,包括启动文件,例如inittab等/lib必要的链接库,例如C链接库、内核模块/home普通用户主目录/rootroot用户主目录/usr/b

23、in非必备的用户程序,例如find、du等/usr/sbin非必备的管理员程序,例如chroot、inetd等/usr/lib库文件/var守护程序和工具程序所存放的可变,例如日志文件/proc用来提供内核与进程信息的虚拟文件系统,由内核自动生成目录下的内容/sys用来提供内核与设备信息的虚拟文件系统,由内核自动生成目录下的内容/mnt文件系统挂接点,用于临时安装文件系统/tmp临时性的文件,重启后将自动清除制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括:编译安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录 利用交叉编译工具链

24、,构建/lib目录 手工构建/etc目录 手工构建最简化的/dev目录 创建其它空目录 配置系统自动生成/proc目录 利用udev构建完整的/dev目录 制作根文件系统的jffs2映像文件 下面就来详细介绍这个过程。二、编译安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录这些目录下存储的主要是常用命令的二进制文件。如果要自己编写这几百个常用命令的源程序,my god, 这简直是一个噩梦!好在我们有嵌入式Linux系统的瑞士军刀busybox,事情就简单很多。1、从 HYPERLINK / / 下载busybox-1.7.0.tar.bz22、tar xj

25、vf busybox-1.7.0.tar.bz2解包3、修改Makefile文件175 ARCH ?= arm176 CROSS_COMPILE ?= arm-linux- 4、make menuconfig配置busyboxbusybox配置主要分两部分。第一部分是Busybox Settings,主要编译和安装busybox的一些选项。这里主要需要配置:1)、Build Options - Build BusyBox as a static binary (no shared libs),表示编译busybox时,是否静态链接C库。我们选择动态链接C库。2)、Installation Op

26、tions - Applets links (as soft-links) - (X) as soft-links,表示安装busybox时,将各个命令安装为指向busybox的软链接还是硬链接。我们选择软链接。3)、Installation Options - (/work/nfs_root/fs_mini3) BusyBox installation prefix,表示busybox的安装位置。我们选择/work/nfs_root/fs_mini34)Busybox Library Tuning。保留Command line editing以支持命令行编辑;保留History size以支

27、持记忆历史命令;选中Tab completion和Username completion以支持命令自动补全 第二部分是Applets,他将busybox的支持的几百个命令分门别类。我们只要在各个门类下选择想要的命令即可。这里我们基本保持默认设置。1)选中Networking Utilities - httpd下的Enable -u option,以启用http服务器的功能allows the server to run as a specific user5、编译busyboxmake6、安装busyboxmake install安装完成后,可以看到在/work/nfs_root/fs_min

28、i3目录下生成了binsbinusr/binusr/sbin目录,其下包含了我们常用的命令,这些命令都是指向bin/busybox的软链接,而busybox本身的大小不到800K:dennisdennis-desktop:/work/nfs_root/fs_mini3$ lsbin linuxrc sbin usrdennisdennis-desktop:/work/nfs_root/fs_mini3$ ls -l bintotal 740lrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 addgroup - busyboxlrwxrwxrwx 1 d

29、ennis dennis 7 2010-04-03 23:57 adduser - busyboxlrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 ash - busybox-rwxr-xr-x 1 dennis dennis 749632 2010-04-03 23:57 busyboxlrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 cat busybox 而普通PC机上的ls命令就有差不多80K的大小: dennisdennis-desktop:/work/nfs_root/fs_mini3$ ls -l

30、 /bin/ls-rwxr-xr-x 1 root root 78004 2007-09-29 20:51 /bin/ls busybox以它娇小的身躯容纳了数以百计的命令代码,实在是让人佩服不已,其不愧嵌入式系统瑞士军刀之美誉。据说,busybox的作者身患绝症,这更让人钦佩GNU开源软件的作者们。 三、利用交叉编译工具链,构建/lib目录 光有应用程序(命令)是不够的,因为应用程序本身需要使用C库的库函数,因此还必需制作for ARM的C库,并将其放置于/lib目录。my god,要自己写C库的源代码吗?不用!还记得交叉编译工具链的3个组成部分吗?交叉编译器、for ARM的C库和二进制工

31、具。哈哈,for ARM的C库是现成的,我们只需要拷贝过来就可以了。遗憾的是:整个C库目录下的文件总大小有26M。而我们根文件系统所在分区不过区区16M而已,根本放不下。怎么办呢? dennisdennis-desktop:/work/nfs_root/fs_mini3$ du -s -si /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib26M /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib 需要C库目录下所有的文件吗?no,absolutely no! 让我们来分析一下glibc库目录下内容的组成

32、。该目录下的子目录和文件共分8类: 目标文件,如crtn.o,用于gcc链接可执行文件 libtool库文件(.la),在链接库文件时这些文件会被用到,比如他们列出了当前库文件所依赖的其它库文件,程序运行时无需这些文件 gconv目录,里面是各种链接脚本,在编译应用程序时,他们用于指定程序的运行地址,各段的位置等 静态库文件(.a),例如libm.a,libc.a 动态库文件 (.so、.so.0-9*) 动态链接库加载器ld-2.3.6.so、ld-linux.so.2 其它目录及文件很显然,第1、2、3、4、7类文件和目录是不需要拷贝的。由于动态链接的应用程序本身并不含有它所调用的C库函数

33、的代码,因此执行时需要动态链接库加载器来为它加载相应的C库文件,所以第6类文件是需要拷贝的。除此之外,第5类文件当然要拷贝。但第5类文件的大小也相当大。dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ du -c -si *.so* 7.2M total 需要全部拷贝吗?非也,非也!其实,需要哪些库完全取决于要运行的应用程序使用了哪些库函数。如果我们只制作最简单的系统,那么我们只需要运行busybox这一个应用程序即可。通过执行 dennisdennis-desktop:/work/nfs_root/fs

34、_mini3$ arm-linux-readelf -a bin/busybox | grep Shared0 x00000001 (NEEDED) Shared library: libcrypt.so.10 x00000001 (NEEDED) Shared library: libm.so.60 x00000001 (NEEDED) Shared library: libc.so.6 可知:busybox只用到了3个库:通用C库(libc)、数学库(libm)、加密库(libcrypt),因此我们只需要拷贝这3个库的库文件即可。但是每个库都有4个文件,4个文件都要拷贝吗?当然不是。 de

35、nnisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ ls -l libcrypt.-*-rwxr-xr-x 1 dennis dennis 30700 2008-01-22 05:32 libcrypt-2.3.6.so-rw-r-r- 1 dennis dennis 23118 2008-01-22 05:32 libcrypt.alrwxrwxrwx 1 dennis dennis 13 2008-12-22 15:38 libcrypt.so - libcrypt.so.1lrwxrwxrwx 1 den

36、nis dennis 17 2008-12-22 15:38 libcrypt.so.1 - libcrypt-2.3.6.sodennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ ls -l libm.-*-rwxr-xr-x 1 dennis dennis 779096 2008-01-22 05:31 libm-2.3.6.so-rw-r-r- 1 dennis dennis 1134282 2008-01-22 05:32 libm.alrwxrwxrwx 1 dennis dennis 9 2008

37、-12-22 15:38 libm.so - libm.so.6lrwxrwxrwx 1 dennis dennis 13 2008-12-22 15:38 libm.so.6 - libm-2.3.6.sodennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ ls -l libc.-*-rwxr-xr-x 1 dennis dennis 1435660 2008-01-22 05:48 libc-2.3.6.so-rw-r-r- 1 dennis dennis 2768280 2008-01-22 05:3

38、1 libc.a-rw-r-r- 1 dennis dennis 195 2008-01-22 05:34 libc.solrwxrwxrwx 1 dennis dennis 13 2008-12-22 15:38 libc.so.6 - libc-2.3.6.so 4个文件中的.a文件是静态库文件,是不需要拷贝的。另外3个文件是: 实际的共享链接库:libLIBRARY_NAME-GLIBC_VERSION.so。当然需要拷贝。 主修订版本的符号链接,指向实际的共享链接库:libLIBRARY_NAME.so.MAJOR_REVISION_VERSION,程序一旦链接了特定的链接库,将会参用

39、该符号链接。程序启动时,加载器在加载程序前,会检索该文件。所以需要拷贝。 与版本无关的符号链接,指向主修订版本的符号连接(libc.so是唯一的例外,他是一个链接命令行:libLIBRARY_NAME.so,是为编译程序时提供一个通用条目)。这些文件在程序被编译时会被用到,但在程序运行时不会被用到,所以不必拷贝它。关于共享库的2个符号链接的作用的特别说明:当我们使用gcc hello.c -o hello -lm编译程序时,gcc会根据-lm的指示,加头(lib)添尾(.so)得到libm.so,从而沿着与版本无关的符号链接(libm.so - libm.so.6)找到libm.so.6并记录

40、在案(hello的ELF头中),表示hello需要使用libm.so.6这个库文件所代表的数学库中的库函数。而当hello被执行的时候,动态链接库加载器会从hello的ELF头中找到libm.so.6这个记录,然后沿着主修订版本的符号链接(libm.so.6 - libm-2.3.6.so)找到实际的共享链接库libm-2.3.6.so,从而将其与hello作动态链接。可见,与版本无关的符号链接是供编译器使用的,主修订版本的符号链接是供动态链接库加载器使用的,而实际的共享链接库则是供应用程序使用的。通过以上分析,我们只需要拷贝3个库(每个库各1个主修订版本的符号链接和1个实际的共享链接库)以及

41、动态链接库加载器(1个符号链接和1个实体文件)。步骤如下:dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ mkdir /work/nfs_root/fs_mini3/lib dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp libcrypt-* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/a

42、rm-linux/lib$ cp -l libcrypt.so.* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp libm-* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp -l libm.so.* /work/nfs_root/fs_mini3/libdennisdennis-deskto

43、p:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp libc-* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp -l libc.so.* /work/nfs_root/fs_mini3/lib dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp -l ld-* /work/nfs_root/fs

44、_mini3/lib 四、手工构建/etc目录 /etc目录存放的是系统程序的主配置文件,因此需要哪些配置文件取决于要运行哪些系统程序。即使最小的系统也一定会运行1号用户进程init,所以我们至少要手工编写init的主配置文件inittab。busybox的inittab文件的语法、语义与传统的SYSV的inittab有所不同。 inittab文件中每个条目用来定义一个需要init启动的子进程,并确定它的启动方式,格式为:。例如:ttySAC0:askfirst:-/bin/sh 表示子进程要使用的控制台,若省略则使用与init进程一样的控制台 表示运行级别,busybox init程序这个字

45、段没有意义 表示init进程如何控制这个子进程 sysinit:系统启动后最先执行,只执行一次,init进程等待它结束后才继续执行其它动作 wait:系统执行完sysinit条目后执行,只执行一次,init进程等待它结束后才继续执行其它动作 once:系统执行完wait条目后执行,只执行一次,init进程不等待它结束 respawn:启动完once进程后,init进程监测发现子进程退出时,重新启动它 askfirst:启动完respawn进程后,与respawn类似,不过init进程先输出” Please press Enter to activate this console“,等用户输入回

46、车后才启动子进程 shutdown:当系统关机时 restart:Busybox中配置了CONFIG_FEATURE_USE_INITAB,并且init进程接收到SIGUP信号时执行,先重新读取、解析/etc/inittab文件,再执行restart程序 ctrlaltdel:按下ctrl+alt+del键时执行,不过在串口控制台中无法输入它 表示进程对应的二进制文件。如果前面有-号,表示该程序是“可以与用户进行交互的”我们制作最简单的/etc/inittab文件,其内容如下::sysinit:/etc/init.d/rcS:askfirst:-/bin/sh:ctrlaltdel:/sbin

47、/reboot:shutdown:/bin/umount -a r 制作最简单的脚本程序文件/etc/init.d/rcS,其内容如下: #!/bin/shifconfig eth0 7修改shell脚本文件/etc/init.d/rcS的权限,以使其可被执行:# chmod a+x /etc/init.d/rcS五、手工构建最简化的/dev目录 在linux机器上,执行ls /dev可看到几百个设备文件,我需要手工创建它们吗?maybe,我只需要手工创建几个设备文件!我怎么知道我应该创建哪几个设备文件呢?管它呢,先看看开发板上可爱的linux的反应再说。 启动Linux操作系统,显示: VF

48、S: Mounted root (nfs filesystem).Freeing init memory: 112KWarning: unable to open an initial console. 这说明,内核已经成功挂载根文件系统,但却未能成功启动第1个用户进程init。通过错误消息“unable to open an initial console”搜索内核源代码,找到init/main.c文件。748 static int noinline init_post(void)749 750 free_initmem();751 unlock_kernel();752 mark_roda

49、ta_ro();753 system_state = SYSTEM_RUNNING;754 numa_default_policy();755 756 if (sys_open(const char _user *) /dev/console, O_RDWR, 0) 0)757 printk(KERN_WARNING Warning: unable to open an initial console.n);758 759 (void) sys_dup(0);760 (void) sys_dup(0);761 762 if (ramdisk_execute_command) 763 run_i

50、nit_process(ramdisk_execute_command);764 printk(KERN_WARNING Failed to execute %sn,765 ramdisk_execute_command);766 767 768 /*769 * We try each of these until one succeeds.770 *771 * The Bourne shell can be used instead of init if we are772 * trying to recover a really broken machine.773 */774 if (e

51、xecute_command) 775 run_init_process(execute_command);776 printk(KERN_WARNING Failed to execute %s. Attempting 777 defaults.n, execute_command);778 779 run_init_process(/sbin/init);780 run_init_process(/etc/init);781 run_init_process(/bin/init);782 run_init_process(/bin/sh);783 784 panic(No init fou

52、nd. Try passing init= option to kernel.);785 显然,内核错误是由175行不能打开/dev/console所致。通过查看已经安装好的linux机器的/dev/console设备文件,可知其是字符设备文件,主设备号为5,次设备号为1: dennisdennis-desktop:/work/nfs_root/fs_mini3/etc$ ls -l /dev/consolecrw- 1 root root 5, 1 2010-04-08 08:40 /dev/console 因此,我们使用下面的命令创建它: HYPERLINK mailto:dennisde

53、nnis-desktop:/work/nfs_root/fs_mini3/dev$ dennisdennis-desktop:/work/nfs_root/fs_mini3/dev$ sudo mknod console c 5 1 还需要创建其它设备文件吗?只有天知道!再看看linux的反应。 VFS: Mounted root (nfs filesystem).Freeing init memory: 112Kinit: cant open /dev/null: No such file or directory 这次我们有经验了,如法炮制,创建/dev/null设备文件:dennisde

54、nnis-desktop:/work/nfs_root/fs_mini3/dev$ sudo mknod null c 1 3 再次重启开发板上的linux,显示 VFS: Mounted root (nfs filesystem).Freeing init memory: 112Kinit started: BusyBox v1.7.0 (2010-04-03 23:53:55 CST)starting pid 229, tty : /etc/init.d/rcS Please press Enter to activate this console.starting pid 231, tt

55、y : /bin/sh# 哈哈,我们成功了,终于可以K歌去了。六、创建其它空目录K完歌回来,继续战斗。dennisdennis-desktop:/work/nfs_root/fs_mini3$ mkdir home root proc sys tmp mnt var再次重启动开发板上的linux。咦,似乎有些问题。VFS: Mounted root (nfs filesystem).Freeing init memory: 112Kinit started: BusyBox v1.7.0 (2010-04-03 23:53:55 CST)starting pid 229, tty : /etc/init.d/rcS Please press Enter to activate this console.starting pid 231, tty : /bin/s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论