版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计(论文)论文题目:基于PLC的物料分拣系统设计
教学点:指导老师职称:学生姓名:学号:专业:
摘
要
自动分拣系统是指能够识别物品属性并对物品进行分类传输的自动系统。自动分拣系统由传输供件同步导入装置、识别及控制系统、机械分拣机构及信息处理系统等组成。
本文主要介绍在自动生产线上通过PLC控制为核心,MCGS组态软件为监控软件,变频器、传感器和电磁阀为电气元件,气缸和电动机为动力设备来实现物料的分拣,然后把物料运输到生产线上。设计目的就是为企业减少劳动力,增加生产速度,大大加大企业的经济效益。我使用功能分析法,文献研究法,观察法
,来对这一项目进行研究。研究的结果证明了自动分拣系统可以根据企业生产线的各种需要对物料进行分拣,具有较大的经济和社会意义。
关键词:
PLC
、变频器
、
物料分拣
Abstract
Automatic
sorting
system
is
able
to
identify
the
item
attributes
and
items
for
the
automatic
classification
of
transmission
system.
Automatic
sorting
system
for
by
the
transmission
synchronization
import
composition
of
the
device,
to
identify
and
control
systems,
mechanical
sorting
institutions
and
information
processing
systems,
etc.
This
paper
describes
the
automatic
production
line
PLC
control
MCGS
configuration
software
for
the
monitoring
software,
inverter,
sensors
and
solenoid
valves,
electrical
components,
cylinder
and
motor-powered
equipment
to
achieve
the
sorting
of
materials,
then
transport
the
materials
toproduction
line.
The
design
goal
is
for
companies
to
reduce
labor,
increase
production
speed,
and
greatly
increase
the
economic
efficiency
of
enterprises.
I
use
functional
analysis,
documentary
research,
observation,
study
of
this
project.
The
study
shows
that
automatic
sorting
system
based
on
the
production
line
a
variety
of
materials
are
sorted,
have
greater
economic
and
social
significance.
Keywords
:PLC、inverter、material、sorting目录TOC\o"1-3"\h\u第一章可编程序控制器 第一章可编程序控制器
第一节PLC的发展历史在可编程序控制器诞生之前,是以继电器、接触器为主体的控制系统广泛应用于工业生产。1968年,为适应生产需要,美国通用汽车公司提出一种新型工业控制器。1969年,美国数字设备公司研制出世界上第一台可编程逻辑控制器,目的是取代继电器,这打开了新的控制技术发展的大门。紧接着美国MODICON公司也开发出同门的控制器。1971年,日本从美国引进这项技术,也研制出日本第一台可编程序控制器。1973年,西欧一些国家也相继开发出他们的可编程序控制器。我国则在1977年成功研制出以1个微处理器MC14500为核心的可编程序控制器,并用于工业生产。PLC大约经历四个阶段:
(1)初级阶段:第一代PLC取代继电器,主要功能是逻辑运算和计时、计数功能。CPU由中小规模数字集成电路构成。第一代只采用了梯形图语言作为编程方式,尽管有些枯燥,但却形成了工厂的编程标准。
(2)扩展阶段:从20世纪70年代到70年代末期,PLC的扩展功能包括数据的传送、数据的比较和运算、模拟量的运算等功能。
(3)通讯阶段:20世纪70年代末期到80年代中期,PLC的产品与计算机相连,但是各个厂家联系不密切,独自经营,所以PLC迅速扩散到其他行业。
(4)开放阶段:20世纪80年代中期开始,
PLC在开放功能上取得较大发展。主要在通信系统的开放,使各厂商的产品可以通信。此外,PLC开始采用标准化软件系统,增加高级语言编程,并完成了编程语言的标准化工作。这一阶段的产品主要有西门子公司的S7系列,AB公司的PLC-5,SLC500、德维森的V80和PPC11,加拿大ONLINE
CONTROL公司与合控电气公司所开发的OPENPLC等。
PLC在以后的发展方向可以概括为:
(1)发展简易、经济的小型、微型PLC;
(2)致力于提高功能性价比;
(3)能研制出功能强大、系统庞大、技术完善的PLC。
第二节PLC的定义和特点
一、PLC的定义
可编程序控制器简称PLC,是一种专门为在工业环境下应用而设计的数字运算操作的电子装置。它采用可以编制程序的存储器,用来在其内部存储执行逻辑运算、顺序运算、计时、计数和算术运算等操作的指令,并能通过数字式或模拟式的输入和输出,控制各种类型的机械或生产过程。PLC及有关的外围设备都应按照易于与工业控制系统形成一个整体,易于扩展其功能的原则而设计。
二、PLC的特点
(1)可靠性高、抗干扰能力强;
(2)编程简单、易于掌握;
(3)功能强、通用性好;
(4)设计、安装容易、维护工作量少;
(5)体积小、重量轻、功耗低。
第三节PLC的基本结构和基本原理
一PLC的基本结构
图1.1
PLC的基本组成
PLC的基本组成:
(1)中央处理单元;
(2)存储器;
(3)输入/输出接口;
(4)电源及外部设备。
二、PLC的工作原理
当PLC运行后,工作过程分为三个阶段:输入采样、用户程序执行和输出刷新。完成三个阶段称作一个扫描周期。在整个运行期间,PLC的CPU以一定的扫描速度重复执行上述三个阶段。第二章物料分拣系统的工作过程和设备选择第一节物料分拣系统的工作过程1、按下启动按钮X0,物料台检测到有物料,则变频器驱动电机,使圆盘转动,再由圆盘通道和机械手把物料送到物料分拣带上检测,以上动作实现了上料的过程。
2、把物料送到检测台。如果在4秒钟内检测不到物料,红灯闪烁,否则绿灯闪烁,机械手、电动机和变频器不动作,整个系统停止。当检测到物料时,物料提升到上限时,机械手臂先伸出,手爪夹紧物料后,手臂提升,再缩回,然后右旋,手臂伸出,下降,松开物料,手臂再提升,缩回,再回到左旋初始位置。
3、分拣台上光电传感器检测到物料时,启动传送带;当电感传感器检测到金属物质的物料时,活塞1伸出推动物料进入料槽再缩回;当到电容传感器检测到非金属的物料时,活塞2伸出推动物料进入料槽再缩回。当物料台再次检测到物料时,循环以上动作。
4、物料传输是通过机械手和三相异步电动机及变频器来实现,机械手可通过伸出,下降,夹紧物料,提升,缩回等动作将物料从物料台送到传输带上,而三相异步电动机启动传送带的动作及变频器改变传输带的速度。
5、在传输带上,光电传感器是启动传输带运行的信号,用电容传感器和电感传感器来分拣传输带上的物料,电感传感器可检测金属物质的物料,电容传感器可检测非金属的物料。这是实现分拣的动作。
第二节物料分拣系统的设备选择
一、三菱PLC的选型I/O点数估算时应考虑适当的余量,通常根据统计的输入输出点数,再增加10%~20%的可扩展余量后,作为输入输出点数估算数据。根据物料分拣系统的工作过程可知,系统的输入信号有19个,输出信号有16,因此选三菱FX2N-48MR。
表2.1
I/O分配表二、三菱变频器的选择
在实践中常常将机械设备根据负载转矩特性不同,分为如下三类:
(1)恒转矩负载;
(2)恒功率负载;
(3)流体类负载。2、根据负载特性选取适当控制方式的三菱变频器
三菱变频器的控制方式主要分为:V/f控制,包括开环和闭环;矢量控制,包括无速度传感器和带速度传感器控制;直接转矩控制;几种种方式的优缺点如下:(1)V/f开环控制
优点:结构简单,调节容易,可用于通用鼠笼型异步电机;
缺点:低速力矩难保证,不能采用力矩控制,调速范围小;
主要采用场合:一般的风机,泵类节能调速或一台变频器带多台电机传动场合。(2)V/f闭环控制
优点:结构简单,调速精度比较高,可用于通用性异步电机;
缺点:低速力矩难保证,不能采用力矩控制,调速范围小,要增加速度传感器;
主要采用场合:用于保持压力,温度,流量,PH定值等过程场合。
(3)无速度传感器的矢量控制
优点:不需要速度传感器,力矩响应好、结构简单,速度控制范围较广;缺点:需要设定电机参数,须有自动测试功能;
采用场合:一般工业设备,大多数调速场合。
(4)带有速度传感器的矢量控制
优点:力矩控制性能良好,力矩响应好,调速精度高,速度控制范围大;缺点:需要正确设定电机参数,需要自动测试功能,要高精度速度传感器;使用场合:要求精确控制力矩和速度的高动态性能应用场合。
(5)直接转矩控制
优点:不需要速度传感器,力矩响应好,结构较简单,速度控制范围较大;
缺点:需要设定电机参数,须有自动测试功能;
采用场合:要求精确控制力矩的高动态性能应用场合,如起重机、电梯、轧机等。
根据物料分拣系统可知,我们可选三菱FR-E500。
三菱FR-E500介绍:
(1)功率:7.5KW;
简易磁通矢量控制方式,实现1Hz时输出转矩达120%;
柔性PWM,实现低噪音运行;
内置PID,变频器/工频切换和可以实现多泵循环运行功能;
内置RS485通讯口;
使用长寿命元器件;ID,15段速度等功能选择。
三菱FR-E500特点:
(1)更省能源;
(2)环保,寿命长,维护简单;
(3)最适用风扇;
(4)操作简单,网路化;
(5)适用全球化;
(6)丰富多彩的功能。
三、气动控制和执行元件
气动控制元件是控制气体压力、流量及运动方向的元件,如各种阀类;能完成一定逻辑功能的元件,如气动逻辑元件。气动控制元件按功能分为压力控制阀、流量控制阀和方向控制阀。
1、电磁阀
气动电磁阀工作原理:气动电磁阀里有密闭的腔,在的不同位置开有通孔,气动电磁阀的每个孔都通向不同的油管,腔中间是阀,两面是两块电磁铁,哪面的磁铁线圈通电阀体就会被吸引到哪边。气动电磁阀通过控制阀体的移动来档住或漏出不同的排油的孔,而进油孔是常开的,液压油就会进入不同的排油管,然后通过气动电磁阀的油的压力来推动油刚的活塞,这样通过控制气动电磁阀的电磁铁的电流就控制了整个电磁阀的机械运动。
气动电磁阀是用来控制流体的自动化基础元件,属于执行器;气动电磁阀并不限于液压,气动;气动电磁阀用于控制液压流动方向,工厂的机械装置一般都由液压钢或电磁阀来控制。
图2.1
直动式电磁阀原理图图2.1表示
(五路二位)直动式电磁阀(常断型)结构的简单剖面图及工作原理。起始状态,1,2进气;4,5排气;线圈通电时,静铁芯产生电磁力,使先导阀动作,压缩空气通过气路进入阀先导活塞使活塞启动,在活塞中间,密封圆面打开通道,1,4进气,2,3排气;当断电时,先导阀在弹簧作用下复位,恢复到原来的状态。
本设计可以采用二位二通的气动电磁阀,它操作轻便,又能快速实现气缸的正反转,易于实现自动化,因此应用广泛。
2、气缸
引导活塞在其中进行直线往复运动的圆筒形金属机件。工质在发动机气缸中通过膨胀将热能转化为机械能;气体在压缩机气缸中接受活塞压缩而进步压力。涡轮机、旋转活塞式发动机等的壳体通常也称“气缸”。气缸的应用领域:印刷(张力控制)、半导体(点焊机、芯片研磨)、自动化控制、机器人等等。英文名:cylinder。
气缸-气缸种类
气压传动中将压缩气体的压力能转换为机械能的气动执行元件。气缸有作往复直线运动的和作往复摆动的两类。作往复直线运动的气缸又可分为单作用、双作用、膜片式和冲击气缸
4种。
气缸的作用:将压缩空气的压力能转换为机械能,驱动机构作直线往复(运动、摆动和旋转运动。
气缸的分类:直线运动往复运动的气缸、摆动运动的摆动气缸、气爪等。气缸的结构:气缸是由缸筒、端盖、活塞、活塞杆和密封件组成。
当传感器检测到物料时,活塞运动,然后自动缩回,所以我们可以选单作用气缸。
第三节传感器
(1)光电式传感器
光电式传感器,基于光电效应的传感器,在受到可见光照射后即产生光电效应,将光信号转换成电信号输出。它除能测量光强之外,还能利用光线的透射、遮挡、反射、干涉等测量多种物理量,如尺寸、位移、速度、温度等,因而是一种应用极广泛的重要敏感器件。光电测量时不与被测对象直接接触,光束的质量又近似为零,在测量中不存在摩擦和对被测对象几乎不施加压力。因此在许多应用场合,光电式传感器比其他传感器有明显的优越性。其缺点是在某些应用方面,光学器件和电子器件价格较贵,并且对测量的环境条件要求较高。
(2)电感式传感器
电感式传感器是利用电磁感应把被测的物理量如位移,压力,流量,振动等转换成线圈的自感系数和互感系数的变化,再由电路转换为电压或电流的变化量输出,实现非电量到电量的转换。(3)电容式传感器
电容式传感器也常常被人们称为电容式物位计,电容式物位计的电容检测元件是根据圆筒形电容器原理进行工作的,电容器由两个绝缘的同轴圆柱极板内电极和外电极组成,在两筒之间充以介电常数为e的电解质时,两圆筒间的电容量为C=2∏eL/lnD/d,式中L为两筒相互重合部分的长度;D为外筒电极的直径;d为内筒电极的直径;e为中间介质的电介常数。在实际测量中D、d、e是基本不变的,故测得C即可知道液位的高低,这也是电容式传感器具有使用方便,结构简单和灵敏度高,价格便宜等特点的原因之一。
第三章物料分拣系统的设计图
第一节PLC外部端子接线图图3.1
PLC外部接线图如图3.1,当PLC投入运行时,按下启动,给出XO信号,物料通过圆盘升到上限,给出信号X11;在通过机械手一系列动作,给出X7、X5、X3、X4信号;传送到传送带时,光电传感器动作,给出X22信号;当有物料时,电机使传送带动作;电感传感器动作时,给出X20信号,让电磁阀动作推动气缸动作,给出X14、X15信号;电容传感器动作时,给出X21信号,让电磁阀动作推动气缸动作,给出X16、X17信号。
第二节变频器端子接线图
图3.2
变频器端子接线图如图3.2,L1,L2,L3接三相交流电,PE接地;U,V,W接三相电机;STF,RM端子接PLC端子Y21;SD端子接COM5。第三节步进梯形图
图3.3
步进梯形图
如图3.3,给出启动信号,整个系统开始运行。光电传感器开始检测物料,圆盘动作传送到底,机械手开始动作,把物料送到检测带上,传送带动作。在运输过程中,电感传感器有检测时,气缸1动作;电容传感器有检测时,气缸2动作。第四节PLC梯形图图3.5梯形图
程序运行过程分析如图3.5,按下启动按钮X0,物料驱动电机,这时Y0接通;此时光电传感器检测物料,X13动作,物料被圆盘提升,此时Y1接通;当上升到限位时,X11动作,此时接通Y2,机械手臂伸出,伸到限位时,X5动作,此时接通Y4,手爪下降;下降到限位时,X10动作,X2也动作,此时接通Y15,手爪抓紧;然后手臂缩回并到达限位,X6、Y3动作;这时手臂右旋并到达限位,X4和Y7动作;当机械手将物料送到分拣台时,光电传感器动作,X22动作,此时接通Y21,电机带动传送带,传送带动作,物料运动;当电感传感器动作时,X20动作,接通Y11,气缸推动物料,然后气缸缩回,Y10动作;当电容传感器动作时,X21动作,此时接通Y12,气缸推动物料,然后气缸缩回,接通Y13;整个系统结束,当需要急停时,按下X1,系统就会停止。
第四章物料分拣系统的组态技术
第一节组态技术概述一、组态定义
组态软件是一种面向工业自动化的通用数据采集和监控软件,也称人机界面。用于数据采集与过程控制的专用软件。
二、组态发展20世纪40年代,多数工业处于手工状态,人们凭经验和手工控制生产过程。50年代后,一些工厂企业的生产实现仪表化和自动化。生产过程中的关键参数普遍采用仪表进行显示。进入60年代,随着工业生产和电子技术的不断发展,开始大量采用气动、电动单元组合仪表对关键参数进行指示,计算机控制系统开始应用于控制,实现数字控制和设定值控制。70年代,随着计算机开发、应用和普及,对全厂或整个工艺流程的集中控制成为可能。
世界上第一款组态软件InTouch在20世纪80年代中期由美国Wonderware公司开发。组态软件根据其提供的各种软件模块可以积木式搭建人机监控界面,不仅提高了自动化系统的开发速度,也保证了自动化应用的成熟性和可靠性。
当前的组态软件有国外的InTouch、Ifix、Citect、Wincc、RSView32、TraceMode,国内的组态王、力控、WebAccess、MCGS、开物、易控、杰控、世纪星及紫金桥组态软件等。
第二节组态技术功能和优点一、组态软件的功能
(1)读写不同类型的PLC、仪表、智能模块和板卡,采集工业现场的各种信号,对工业现场进行监视和控制。
(2)可以以图形和动画等直观形象的方式呈现工业现场信息。
(3)可以将控制系统中的紧急工况及时通知给相关人员,使之及时掌控系统运行情况。
(4)可以对工业现场的数据进行逻辑运算和数字运算等处理,并将结果返回给控制系统。
(5)可以对控制系统得到的数据进行记录存储。
(6)可以将工程运行的状况、实时数据、历史数据、警告和外部数据库中的数据以及统计运算结果制成报表,供运行和管理人员参考。
(7)可以将不同系统数据联系和整合在一起。
(8)可以网络实现分布式监控,实现复杂的远程监控。
(9)可以根据需要干预生产现场或过程。
二、组态软件的优点
功能强大;
简单易学;
扩展性好;
实时多任务。三、组态软件画面
图4.1组态画面
如图4.1,当物料检测灯变成绿灯时,整个系统开始运行,否则灯变红,系统停止。系统运行时,转盘和机械手动作,把物料送到检测通道,传送带指示灯亮。当检测到金属物体时,灯变绿,然后电磁阀动作,电磁阀灯变绿,带动气缸,推动物料。当检测到非金属物体时,灯变绿,然后电磁阀动作,灯变绿,带动气缸,推动物料。
结束语本文详细介绍了根据实际生产需要,采用PLC设计出了物料分拣系统,并用组态作为监控软件。物料分拣系统在现代自动化生产中具有很大的实用价值。在设计之前阅读了大量资料和文献,还请教了老师,从阅读资料中学到很多知识非常宝贵。在设计中遇到很多困难,比如说程序的设计、设备的选型、担心系统出现问题、设计是否合理、是否受到外界干扰、通讯能不能成功等。设计上一定有不完美的地方,物料分拣系统还需进步的改进,提高系统的优越性、可靠性。
谢辞
本文是在老师的悉心指导和精心培养下完成的。老师严谨的治学态度、缜密的思维方式、踏实的工作作风和对事业的执着以及对我的教导给我留下了深的印象,并使我终身受益。谨此对杨老师表达衷心的感谢和崇高的敬意。
参考文献
1.刘爱华.传感器原理与应用技术,[C].北京:人民邮电出版社。2009。
2.陆艺,郭斌,潘小旺,范伟军.
[N]仪器仪表学报。2011。
3.黄金凤,张进,李占贤,孙淑惠.PLC与变频器间的通信实现[J].工矿自动化,2007。
4.柳贵国.检测技术及应用,北京:电子工业出版社。2006。
5.使用手册三菱变频调速手册FR-F700.
6.王艳秋.电机及电机拖动,北京:化学工业出版社。2005。
7.杨永平.液压与气动技术基础,北京:化学工业出版社。2001。
8.袁秀英.组态控制技术,北京:电子工业出版社。2003。
9.吴志强,鲁晓春.物流设施与设备,北京:清华大学出版社。2005。10.常斗南.可编程控制器,北京:机械工业出版社。1998。附录资料:不需要的可以自行删除busybox详解制作根文件系统详解制作根文件系统一、FHS(FilesystemHierarchyStandard)标准介绍当我们在linux下输入ls
/的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。该标准规定了根目录下各个子目录的名称及其存放的内容:目录名存放的内容/bin必备的用户命令,例如ls、cp等/sbin必备的系统管理员命令,例如ifconfig、reboot等/dev设备文件,例如mtdblock0、tty1等/etc系统配置文件,包括启动文件,例如inittab等/lib必要的链接库,例如C链接库、内核模块/home普通用户主目录/rootroot用户主目录/usr/bin非必备的用户程序,例如find、du等/usr/sbin非必备的管理员程序,例如chroot、inetd等/usr/lib库文件/var守护程序和工具程序所存放的可变,例如日志文件/proc用来提供内核与进程信息的虚拟文件系统,由内核自动生成目录下的内容/sys用来提供内核与设备信息的虚拟文件系统,由内核自动生成目录下的内容/mnt文件系统挂接点,用于临时安装文件系统/tmp临时性的文件,重启后将自动清除
制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括:编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录利用交叉编译工具链,构建/lib目录手工构建/etc目录手工构建最简化的/dev目录创建其它空目录配置系统自动生成/proc目录利用udev构建完整的/dev目录制作根文件系统的jffs2映像文件下面就来详细介绍这个过程。二、编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录这些目录下存储的主要是常用命令的二进制文件。如果要自己编写这几百个常用命令的源程序,mygod,这简直是一个噩梦!好在我们有嵌入式Linux系统的瑞士军刀——busybox,事情就简单很多。1、从/下载busybox-1.7.0.tar.bz22、tarxjvfbusybox-1.7.0.tar.bz2解包3、修改Makefile文件175ARCH
?=arm
176CROSS_COMPILE
?=arm-linux-4、makemenuconfig配置busyboxbusybox配置主要分两部分。第一部分是BusyboxSettings,主要编译和安装busybox的一些选项。这里主要需要配置:1)、BuildOptions--BuildBusyBoxasastaticbinary(nosharedlibs),表示编译busybox时,是否静态链接C库。我们选择动态链接C库。2)、InstallationOptions--Appletslinks(assoft-links)--(X)assoft-links,表示安装busybox时,将各个命令安装为指向busybox的软链接还是硬链接。我们选择软链接。3)、InstallationOptions--(/work/nfs_root/fs_mini3)BusyBoxinstallationprefix,表示busybox的安装位置。我们选择/work/nfs_root/fs_mini34)BusyboxLibraryTuning。保留Commandlineediting以支持命令行编辑;保留Historysize以支持记忆历史命令;选中Tabcompletion和Usernamecompletion以支持命令自动补全第二部分是Applets,他将busybox的支持的几百个命令分门别类。我们只要在各个门类下选择想要的命令即可。这里我们基本保持默认设置。1)选中NetworkingUtilities--httpd下的Enable-u<user>option,以启用http服务器的功能allowstheservertorunasaspecificuser5、编译busyboxmake6、安装busyboxmakeinstall安装完成后,可以看到在/work/nfs_root/fs_mini3目录下生成了binsbinusr/binusr/sbin目录,其下包含了我们常用的命令,这些命令都是指向bin/busybox的软链接,而busybox本身的大小不到800K:dennis@dennis-desktop:/work/nfs_root/fs_mini3$ls
bin
linuxrc
sbin
usr
dennis@dennis-desktop:/work/nfs_root/fs_mini3$
ls-lbin
total740
lrwxrwxrwx1dennisdennis
72010-04-0323:57addgroup->busybox
lrwxrwxrwx1dennisdennis
72010-04-0323:57adduser->busybox
lrwxrwxrwx1dennisdennis
72010-04-0323:57ash->busybox
-rwxr-xr-x1dennisdennis7496322010-04-0323:57busybox
lrwxrwxrwx1dennisdennis
72010-04-0323:57cat–>busybox而普通PC机上的ls命令就有差不多80K的大小:dennis@dennis-desktop:/work/nfs_root/fs_mini3$ls-l/bin/ls
-rwxr-xr-x1rootroot780042007-09-2920:51/bin/lsbusybox以它娇小的身躯容纳了数以百计的命令代码,实在是让人佩服不已,其不愧嵌入式系统瑞士军刀之美誉。据说,busybox的作者身患绝症,这更让人钦佩GNU开源软件的作者们。三、利用交叉编译工具链,构建/lib目录光有应用程序(命令)是不够的,因为应用程序本身需要使用C库的库函数,因此还必需制作forARM的C库,并将其放置于/lib目录。mygod,要自己写C库的源代码吗?不用!还记得交叉编译工具链的3个组成部分吗?交叉编译器、forARM的C库和二进制工具。哈哈,forARM的C库是现成的,我们只需要拷贝过来就可以了。遗憾的是:整个C库目录下的文件总大小有26M。而我们根文件系统所在分区不过区区16M而已,根本放不下。怎么办呢?dennis@dennis-desktop:/work/nfs_root/fs_mini3$du-s--si/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib
26M
/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib需要C库目录下所有的文件吗?no,absolutelyno!让我们来分析一下glibc库目录下内容的组成。该目录下的子目录和文件共分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库函数的代码,因此执行时需要动态链接库加载器来为它加载相应的C库文件,所以第6类文件是需要拷贝的。除此之外,第5类文件当然要拷贝。但第5类文件的大小也相当大。dennis@dennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$du-c--si*.so*7.2M
total需要全部拷贝吗?非也,非也!其实,需要哪些库完全取决于要运行的应用程序使用了哪些库函数。如果我们只制作最简单的系统,那么我们只需要运行busybox这一个应用程序即可。通过执行dennis@dennis-desktop:/work/nfs_root/fs_mini3$arm-linux-readelf-abin/busybox|grep'Shared'
0x00000001(NEEDED)
Sharedlibrary:[libcrypt.so.1]
0x00000001(NEEDED)
Sharedlibrary:[libm.so.6]
0x00000001(NEEDED)
Sharedlibrary:[libc.so.6]可知:busybox只用到了3个库:通用C库(libc)、数学库(libm)、加密库(libcrypt),因此我们只需要拷贝这3个库的库文件即可。但是每个库都有4个文件,4个文件都要拷贝吗?当然不是。dennis@dennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ls-llibcrypt[.-]*
-rwxr-xr-x1dennisdennis307002008-01-2205:32libcrypt-2.3.6.so
-rw-r--r--1dennisdennis231182008-01-2205:32libcrypt.a
lrwxrwxrwx1dennisdennis
132008-12-2215:38libcrypt.so->libcrypt.so.1
lrwxrwxrwx1dennisdennis
172008-12-2215:38libcrypt.so.1->libcrypt-2.3.6.so
dennis@dennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ls-llibm[.-]*
-rwxr-xr-x1dennisdennis
7790962008-01-2205:31libm-2.3.6.so
-rw-r--r--1dennisdennis11342822008-01-2205:32libm.a
lrwxrwxrwx1dennisdennis
92008-12-2215:38libm.so->libm.so.6
lrwxrwxrwx1dennisdennis
132008-12-2215:38libm.so.6->libm-2.3.6.so
dennis@dennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ls-llibc[.-]*
-rwxr-xr-x1dennisdenni01-2205:48libc-2.3.6.so
-rw-r--r--1dennisdennis27682802008-01-2205:31libc.a
-rw-r--r--1dennisdennis
1952008-01-2205:34libc.so
lrwxrwxrwx1dennisdennis
132008-12-2215:38libc.so.6->libc-2.3.6.so4个文件中的.a文件是静态库文件,是不需要拷贝的。另外3个文件是:实际的共享链接库:libLIBRARY_NAME-GLIBC_VERSION.so。当然需要拷贝。主修订版本的符号链接,指向实际的共享链接库:libLIBRARY_NAME.so.MAJOR_REVISION_VERSION,程序一旦链接了特定的链接库,将会参用该符号链接。程序启动时,加载器在加载程序前,会检索该文件。所以需要拷贝。与版本无关的符号链接,指向主修订版本的符号连接(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并记录在案(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个实际的共享链接库)以及动态链接库加载器(1个符号链接和1个实体文件)。步骤如下:dennis@dennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$mkdir/work/nfs_root/fs_mini3/libdennis@dennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$cp
libcrypt-*/work/nfs_root/fs_mini3/lib
dennis@dennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$cp-llibcrypt.so.*/work/nfs_root/fs_mini3/lib
dennis@dennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$cp
libm-*/work/nfs_root/fs_mini3/lib
dennis@dennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$cp-llibm.so.*/work/nfs_root/fs_mini3/lib
dennis@dennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$cp
libc-*/work/nfs_root/fs_mini3/lib
dennis@dennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$cp-llibc.so.*/work/nfs_root/fs_mini3/libdennis@dennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$cp-lld-*/work/nfs_root/fs_mini3/lib四、手工构建/etc目录/etc目录存放的是系统程序的主配置文件,因此需要哪些配置文件取决于要运行哪些系统程序。即使最小的系统也一定会运行1号用户进程init,所以我们至少要手工编写init的主配置文件inittab。busybox的inittab文件的语法、语义与传统的SYSV的inittab有所不同。inittab文件中每个条目用来定义一个需要init启动的子进程,并确定它的启动方式,格式为<id>:<runlevel>:<action>:<process>。例如:ttySAC0::askfirst:-/bin/sh<id>表示子进程要使用的控制台,若省略则使用与init进程一样的控制台<runlevel>表示运行级别,busyboxinit程序这个字段没有意义<action>表示init进程如何控制这个子进程sysinit:系统启动后最先执行,只执行一次,init进程等待它结束后才继续执行其它动作wait:系统执行完sysinit条目后执行,只执行一次,init进程等待它结束后才继续执行其它动作once:系统执行完wait条目后执行,只执行一次,init进程不等待它结束respawn:启动完once进程后,init进程监测发现子进程退出时,重新启动它askfirst:启动完respawn进程后,与respawn类似,不过init进程先输出”PleasepressEntertoactivatethisconsole“,等用户输入回车后才启动子进程shutdown:当系统关机时restart:Busybox中配置了CONFIG_FEATURE_USE_INITAB,并且init进程接收到SIGUP信号时执行,先重新读取、解析/etc/inittab文件,再执行restart程序ctrlaltdel:按下ctrl+alt+del键时执行,不过在串口控制台中无法输入它<process>表示进程对应的二进制文件。如果前面有-号,表示该程序是“可以与用户进行交互的”我们制作最简单的/etc/inittab文件,其内容如下:::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount-a–r制作最简单的脚本程序文件/etc/init.d/rcS,其内容如下:#!/bin/sh
ifconfigeth07修改shell脚本文件/etc/init.d/rcS的权限,以使其可被执行:#chmoda+x/etc/init.d/rcS五、手工构建最简化的/dev目录在linux机器上,执行ls
/dev可看到几百个设备文件,我需要手工创建它们吗?maybe,我只需要手工创建几个设备文件!我怎么知道我应该创建哪几个设备文件呢?管它呢,先看看开发板上可爱的linux的反应再说。启动Linux操作系统,显示:VFS:Mountedroot(nfsfilesystem).
Freeinginitmemory:112K
Warning:unabletoopenaninitialconsole.这说明,内核已经成功挂载根文件系统,但却未能成功启动第1个用户进程init。通过错误消息“unabletoopenaninitialconsole”搜索内核源代码,找到init/main.c文件。748staticintnoinlineinit_post(void)
749{
750
free_initmem();
751
unlock_kernel();
752
mark_rodata_ro();
753
system_state=SYSTEM_RUNNING;
754
numa_default_policy();
755
756
if(sys_open((constchar__user*)"/dev/console",O_RDWR,0)<0)
757
printk(KERN_WARNING"Warning:unabletoopenaninitialconsole.\n");
758
759
(void)sys_dup(0);
760
(void)sys_dup(0);
761
762
if(ramdisk_execute_command){
763
run_init_process(ramdisk_execute_command);
764
printk(KERN_WARNING"Failedtoexecute%s\n",
765
ramdisk_execute_command);
766
}
767
768
/*
769
*Wetryeachoftheseuntilonesucceeds.
770
*
771
*TheBourneshellcanbeusedinsteadofinitifweare
772
*tryingtorecoverareallybrokenmachine.
773
*/
774
if(execute_command){
775
run_init_process(execute_command);
776
printk(KERN_WARNING"Failedtoexecute%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("Noinitfound.
Trypassinginit=optiontokernel.");
785}显然,内核错误是由175行不能打开/dev/console所致。通过查看已经安装好的linux机器的/dev/console设备文件,可知其是字符设备文件,主设备号为5,次设备号为1:dennis@dennis-desktop:/work/nfs_root/fs_mini3/etc$ls-l/dev/console
crw1rootroot5,12010-04-0808:40/dev/console因此,我们使用下面的命令创建它:dennis@dennis-desktop:/work/nfs_root/fs_mini3/dev$sudomknodconsolec51还需要创建其它设备文件吗?只有天知道!再看看linux的反应。VFS:Mountedroot(nfsfilesystem).
Freeinginitmemory:112K
init:can'topen'/dev/null':Nosuchfileordirectory这次我们有经验了,如法炮制,创建/dev/null设备文件:dennis@dennis-desktop:/work/nfs_root/fs_mini3/dev$sudomknodnullc13再次重启开发板上的linux,显示VFS:Mountedroot(nfsfilesystem).
Freeinginitmemory:112K
initstarted:BusyBoxv1.7.0(2010-04-0323:53:55CST)
startingpid229,tty'':'/etc/init.d/rcS'PleasepressEntertoactivatethisconsole.
startingpid231,tty'':'/bin/sh'
#哈哈,我们成功了,终于可以K歌去了。六、创建其它空目录K完歌回来,继续战斗。dennis@dennis-desktop:/work/nfs_root/fs_mini3$mkdirhomerootprocsystmpmntvar再次重启动开发板上的linux。咦,似乎有些问题。VFS:Mountedroot(nfsfilesystem).
Freeinginitmemory:112K
initstarted:BusyBoxv1.7.0(2010-04-0323:53:55CST)
startingpid229,tty'':'/etc/init.d/rcS'PleasepressEntertoactivatethisconsole.
startingpid231,tty'':'/bin/sh'
#ps
PID
Uid
VSZStatCommand
#ps竟然看不到任何进程的存在!让我想想。对了,ps的机制是通过查看/proc中的内容来获得进程信息的。那么,目前/proc里有哪些内容呢?#ls/proc
#竟然空空如野!这可如何是好?七、配置系统自动生成/proc目录其实/proc是用来提供内核与进程信息的虚拟文件系统,由内核自动生成目录下的内容。不过需要我们设置一下,将/etc/init.d/rcS修改为:#!/bin/sh
ifconfigeth07
mount-tprocnone/proc对于mount-tprocnone/proc的解释:通常情况下mount命令应该写为mount–text2/dev/hdb1/proc。但由于现在挂载的/proc是虚拟文件系统,它不与任何物理硬盘分区相对应,因此在表示物理硬盘分区的位置用占位符none来表示。重启开发板上的linux,显示成功了:PleasepressEntertoactivatethisconsole.
startingpid232,tty'':'/bin/sh'
#ps
PID
Uid
VSZStatCommand
10
3088S
init
20
SW<[kthreadd]
30
SWN[ksoftirqd/0]
40
SW<[events/0]
50
SW<[khelper]
410
SW<[kblockd/0]
420
SW<[ksuspend_usbd]
450
SW<[khubd]
470
SW<[kseriod]
590
SW
[pdflush]
600
SW
[pdflush]
610
SW<[kswapd0]
620
SW<[aio/0]
1770
SW<[mtdblockd]
2260
SW<[rpciod/0]
2320
3092S
-sh
2330
3092R
ps
#八、利用udev构建完整的/dev目录高兴地插入U盘,内核显示识别到了U盘:#usb1-1:newfullspeedUSBdeviceusings3c2410-ohciandaddress2
usb1-1:notrunningattopspeed;connecttoahighspeedhub
usb1-1:configuration#1chosenfrom1choice
scsi0:SCSIemulationforUSBMassStoragedevices
scsi0:0:0:0:Direct-Access
Teclast
CoolFlash
0.00PQ:0ANSI:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海南省-2023年-网格员-下半年笔试真题卷
- 技工学校开学安全教育
- 中秋节商家活动方案样本(5篇)
- 制鞋行业中的品牌建设与市场推广考核试卷
- 旅游设施评定分离管理办法
- 信息技术资产维护与更新
- 机器学习工程师聘用合同
- 酒水行业合同销售经理聘用
- 外籍顾问合作协议模板
- 住宅楼地下室防水合同
- 2024年定制:医疗软件开发与定制服务合同
- 《金属材料与热处理(第8版)》中职全套教学课件
- 2024年《高等数学2》教案设计:案例分析与启示
- 2023年药品流通行业运行统计分析报告
- 校企共建项目合同违约条款
- 中小学教师如何做课题研究设计课件
- 《1.6.1 余弦定理》说课稿
- 急诊医学测试试题及答案
- 2024年广州铁路(集团)公司招聘468人易考易错模拟试题(共500题)试卷后附参考答案
- 第四单元两、三位数除以一位数(单元测试)-2024-2025学年三年级上册数学苏教版
- 2024年保安员证考试题库及答案(共240题)
评论
0/150
提交评论