基于PLC交通灯控制系统毕业设计_第1页
基于PLC交通灯控制系统毕业设计_第2页
基于PLC交通灯控制系统毕业设计_第3页
基于PLC交通灯控制系统毕业设计_第4页
基于PLC交通灯控制系统毕业设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、PAGE PAGE 32成人高等教育毕业论文(设计)题 目基于PLC交通灯控制系统毕业设计学 院 专 业 年 级 学 习形式 层 次 学 号 姓 名 指导教师 年 月 日西南大学成人高等学历教育毕业论文(设计)指导签专业 层次 年级 级学生姓名 学号 站点 通讯地址重庆市科能高级技工学校邮政编码 学生联系电话 论文题目基于交通灯控制系统毕业设计指导教师 指导教师联系电话 指导教师对选题和提纲的意见指导教师对初稿的意见指导教师的最终评审意见备注基于交通灯控制系统毕业设计 摘要:交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。为了实现交通道路的管理

2、,力求交通管理先进性、科学化。用可编程控制器实现交通灯管制的控制系统,以及该系统软、硬件设计方法,实验证明该系统实现简单、经济,能够有效地疏导交通,提高交通路口的通行能力。分析了现代城市交通控制与管理问题的现状,结合交通的实际情况阐述了交通灯控制系统的工作原理,给出了一种简单实用的城市交通灯控制系统的PLC设计方案。可编程序控制器在工业自动化中的地位极为重要,广泛的应用于各个行业。随着科技的发展,可编程控制器的功能日益完善,加上小型化、价格低、可靠性高,在现代工业中的作用更加突出关键词:PLC可编程控制器、交通型号灯、可靠性高。引 言 可编程控制器(Programmable Controlle

3、r)是计算机家族中的一员,是为工业控制应用而设计制造的。早期的可编程控制器称作可编程逻辑控制器(Programmable Logic Controller),简称PLC,它主要用来代替继电器实现逻辑控制。随着技术的发展,这种装置的功能已经大大超过了逻辑控制的范围,因此,今天这种装置称作可编程控制器,简称PC。但是为了避免与个人计算机(Personal Computer)的简称混淆,所以将可编程控制器简称PLC。一、国内外研究现状 近年来,随着我国经济的发展,城市的交通拥挤问题日趋严重,因此提高城市路网的通行能力、实现道路交通的科学化管理迫在眉睫。PLC可编程控制器是以微处理机为基础发展起来的新

4、型工业控制装置。它以体积小、功能强、可靠性高、以及应用安装方便的优点,很快在我国的工业控制中占据了主导地位,并且还在不断地发展。根据这一发展形势,全国各地高校、各类职业技术学校都将PLC教学纳入教学任务,作为电子、电气、以及工业自动化类专业的一门必修课。基于PLC的以下优势,在十字路口交通系统中得到了广泛的应用:PLC具有很高的可靠性,通常的平均无故障时间都在30万小时以上;2、编程能力强,可以将模糊化、模糊决策和解模糊都方便地用软件来实现;3、抗干扰能力强,目前空中各种电磁干扰日益严重,为了保证交通控制的可靠稳定,我们选择了能够在恶劣的电磁干扰环境下正常工作的PLC;4、近年来PLC的性能价

5、格比有较大幅度的提高,使得实际应用成为可能。最终选择了用可编程的控制器PLC来实现系统功能的设计,完成本次课设的题目。目前,有多种对十字路口交通灯的改良设计,十字路口交通灯控制的设计还存在非常广阔的前景。二、PLC简介根据交通等工艺控制要求和特点,我们采用了日本三菱公司FX2N_48MR。三菱PLC有小型化,高速度,高性能等特点,三菱可编程控制器指令丰富,可以接各种输入,输出扩充设备,有丰富的特殊扩展设备,其中的模拟输入设备和通信设备是系统所必需的,能够方便地联网通信。本系统就是应用可编程控制器(PLC)对十字路口交通控制等实现控制。本系统采用PLC是基于以下四个原因:1、PLC具有很高的可靠

6、性,抗干扰能力。通常的平均无障碍时间都在30万小时以上;2、系统设计周期短,维护方便,改造容易,功能完善,实用性强;3、干扰能力强,具有硬件故障的自我检查功能,目前空中各种电磁干扰日益严重,为了保证交通控制的可靠稳定,我们选择了能够在恶劣的电磁干扰环境下正常工作的PLC; 4、近年来PLC的性能价格比有较大幅度的提高,是的实际应用成为可能。 本课题利用PLC本身的特点,来解决交通灯控制的问题。我们根据控制要求和所学知识画出时序图、顺序功能图,应用梯形图进行编程,并列出指令表。旨在研究PLC在控制中的应用,为推PLC技术研究和应用提供一定的技术支持。 PLC技术在交通等中的应用不仅提高了道路的工

7、作效率,同时,PLC本身还具有通讯联网功能,将同一条道路上的信号灯组成一局域网进行统一调度管理,可缩短车辆通行等候时间,实现科学化管理,将来更现实一种能够根据流量变化情况自适应控制的交通灯。三、交通灯信号控制系统(一) 十字路口交通灯控制实际情况1、南北主干道:直行绿 27S、直行绿闪3S、左转绿 10S 、左转绿闪 3S、 黄2S 、红 45S; 2、东西人行道:红 45S、绿 27S、绿闪3S 、红 60S; 3、东西主干道:红 45S、直行绿 27S、 直行绿闪3S、左转绿 10S 、左转绿闪 3S、黄2S; 4、南北人行道:绿27S 、绿闪3S、红 60S; 5、循环控制方式;6、交通

8、灯变化顺序表(单循环周期90秒)。(二)南北向(列)和东西向(行)主干道南北向(列)和东西向(行)主干道均设有直行绿灯27S,直行绿灯闪亮3S,左行绿灯10S,左转绿闪3S,黄灯2S和红灯45S。当南北主干道红灯点亮时,东西主干道应依次点亮直行绿灯,直行绿灯闪,左转绿灯,左转绿灯闪亮和黄灯;反之,当东西主干道红灯点亮时,南北主干道依次点亮直行绿灯,直行绿灯闪,左转绿灯,左转绿灯闪亮和黄灯。(三)南北向和东西向人行道南北向和东西向人行道均设有通行绿灯和禁行红灯。南北人行道通行绿灯应在南北主干道直行绿灯点亮时点亮,当南北主干道直行绿灯闪亮时南北行人道绿灯也要对应闪亮,其它时间为红灯。东西人行道通行

9、绿灯于东西主干道直行绿灯点亮时点亮,当东西主干道直行绿灯闪亮是东西行人道绿灯也要对应闪亮,其它时间为红灯。(四)结合十字路口交通灯的路况模拟控制实验 在PLC交通灯模拟模块中,主干道东西南北每面都有3个控制灯,分别为: 禁止通行灯 (亮时为红色) 准备禁止通行灯 (亮时为黄色) 直通灯 (亮时为绿色)另外行人道东西南北每面都有2个控制灯,分别为: 禁止通行灯 (亮时为红色) 直通灯 (亮时为绿色) 结合十字路口交通灯实际情况设计交通灯模拟控制系统如下:当交通灯系统启动开关接通时。1、南北向(列)和东西向(行)主干道 南北向(列)和东西向(行)主干道均设有绿灯 10S,绿灯闪亮2S(亮0.1 灭

10、0.1),黄灯2S和红灯14S。当南北主干道红灯点亮时,东西住干道应依次点亮绿灯,绿灯闪亮,黄灯,反之,当东西主干道红灯点亮时,南北主干道依次点亮绿灯,绿灯闪,黄灯。2、南北向和东西向行人道 南北向和东西向行人道均设为通行绿灯和禁行红灯。南北人行道通行绿灯应在南北主干道绿灯点亮时点亮,当南北主干道绿灯闪亮和黄灯点亮时南北行人道绿灯也要对应闪亮,其它时间为红灯。东西行人道通行绿灯于东西主干道绿灯点亮是点亮,当东西主干道绿灯闪亮和黄灯点亮时东西行人道绿灯也要对应闪亮,其它时间为红灯。3、盲人安全通道控制和手动控制车流量除此之外另设两个功能,使用10个脉冲开关。实现让盲人可以方便通过十字路口和手动控

11、制车流量。其中8个安装在人行道的两边当东西方向行走的盲人要过马路的时候,按下脉冲开关东西向行人道绿灯亮起,南北向主干道红灯闪亮,延迟10秒恢复原来的控制系统。南北向脉冲开关对应东西向功能相同,另外两个脉冲开可以控制车流量,当东西向主干道等待车量较多的时候,按下东西向控制脉冲开关,东西向主干道延长绿灯点亮时间到15秒。东西向行人道绿灯也要对应延长。南北向脉冲开关对应东西向功能相同。流程图启动开关启动开关东西绿灯亮东西绿灯闪东西黄灯亮东西红灯亮东西主干道10S2S2S14S南北红灯亮南北绿灯亮南北绿灯闪南北黄灯亮南北主干道14S10S2S2S启动开关南北红灯亮南北绿灯南北绿灯闪14S10S4S东西

12、绿灯亮东西绿灯闪东西红灯亮10S4S14S东西行人道南北行人道结束结束交通灯模拟控制系统流程图启动开关启动开关按下脉冲开关原来控制循环系统行人道绿灯点亮,主干道红灯闪亮结束YN启动开关按下脉冲开关对应方向绿灯点亮时间延长到15秒,另一方向红灯点亮延长到15秒再次按下启动开关按此次控制方式进行循环原来方式控制系统结束YNYN手动控制车流量流程图四、可编程控制器程序设计(一) 可编程控制器选择 本次交通灯设计用的是来自OMRON的CPM1A-30CDR-A可编程控制器。产品规格:CPM1A CPU单元CPM1A在编程环境等方面,它不仅具备了以往的小型PLC所具有的功能,尽可能使安装空间最小化,并实

13、现了具有10点-100点输入输出点数的弹性构成。而且还可 连接可编程控制终端,创造了尚无前例的灵活运用。它不仅可以替代继电器控制柜,就是作为小型控制器或在传感器应用中,亦能适应生产现场不同的需求AC电源输入,继电器输出,能加扩展单元。1、十字路口交通灯模拟控制时序图和此行人道相交叉的主干道红灯启动和此行人道相交叉的主干道红灯启动行人道绿灯2S10S盲人脉冲按键控制时序图启动启动南北红东西绿东西黄东西红南北绿南北黄10S2S2S10S2S2S14S10S2S2SONOFF十字路口主干道交通灯模拟控制时序图南北红南北红东西绿东西黄东西红南北绿南北黄152S2S10S2S2S14S152S2S东西向

14、绿灯延时时序图启动OFFON2、可编程控制器I/O端口分配启动开关0000停止开关0001东西主干道绿灯1000东西主干道黄灯1001东西主干道红灯1002南北主干道绿灯1003南北主干道黄灯1004南北主干道红灯1005东西行人道绿灯1100东西行人道红灯1101南北行人道绿灯1102南北行人道红灯1103东西向绿灯延迟控制按钮0004南北向绿灯延迟控制按钮0005东西盲人脉冲按钮0003南北盲人脉冲按钮0002 PLC0000000110001001100210031004100511001101110211030002000300040005交通灯控制PLC I/O端口3、程序设计0LD

15、 00001OR 203002AND-NOT 00013AND-NOT 200004OUT 203005LD 203006AND-NOT 200017AND-NOT 202038OUT 203019LD 2030110OR TIM 00511OR TIM 02712OR 2000013AND-NOT TIM 00214AND-NOT 2010315AND-NOT 000116OUT 2000017TIM 000 #10018TIM 001 #12019TIM 002 #14020LD TIM 00221OR 2000122OR TIM 01823AND-NOT TIM 00524AND-NOT

16、 000125AND-NOT 2020326OUT 200127TIM 003 #10028TIM 004 #12029TIM 005 #14030LD 000431OR 2010032AND-NOT 000033AND-NOT 000534AND-NOT 000135OUT 2010036LD 2010037AND 2010538OUT 2010239LD TIM 00540OR TIM 02741OUT 2010542LD 2010243OR 2010344AND-NOT 000145AND-NOT TIM 01846OUT 2010347TIM 016 #15048TIM 017 #17

17、049TIM 018 #19050LD 000551OR 2020052AND-NOT 000153AND-NOT 000054AND-NOT 000455OUT 2020056LD TIM 00257LD TIM 01858OUT 2020559LD TIM 2020060AND 2020561OUT 2020262LD 2020263OR 2020364AND-NOT 000165AND-NOT 02766OUT 2020367TIM 025 #150 68TIM 026 #17069TIM 027 #19070LD 2000071AND-NOT TIM 00072LD 2010373AN

18、D-NOT TIM 01674OR LD75AND-NOT 000176OUT 2000277LD TIM 00078AND-NOT TIM 00179LD TIM 01680AND-NOT TIM 01781OR LD 82AND-NOT 2000483AND-NOT 000184OUT 2000385TIM 006 #00286LD TIM 00687OR TIM 00888OR TIM 01089OR TIM 00990OR 2000491AND-NOT TIM 00792AND-NOT 000193OUT 2000494TIM 007 #00295LD 2000296OR 200039

19、7AND-NOT 000198AND-NOT 2000999OUT 1000100LD TIM 001101AND-NOT TIM 002102LD TIM 017103AND-NOT TIM 018104OR LD105AND-NOT 20009106AND-NOT 0001107OUT 1001108LD 20000109AND-NOT TIM 002110LD 20103111AND-NOT TIM 018112OR LD113AND-NOT 20009114AND-NOT 0001115OUT 1103116LD20000117AND-NOT TIM 002118LD 20103119

20、AND-NOT TIM 018120OR LD121AND-NOT 20103122AND-NOT 0001123OUT 20015124LD 20015125OR 20014126AND-NOT 0001127OUT 1005128LD 20001129AND-NOT TIM 003130LD 20203131AND-NOT TIM 025132OR LD133AND-NOT 0001134OUT 20005135LD TIM 003136AND-NOT TIM 004137LD TIM025138AND-NOT TIM 026139OR LD140AND-NOT 20004141AND-N

21、OT 0001142OUT 20006143TIM 008 #002144LD 20005145OR 20006146AND-NOT 20013147AND-NOT 0001148OUT 1003149LD TIM 004150AND-NOT TIM 005151LD TIM 026152AND-NOT TIM 027153OR LD154AND-NOT 0001155AND-NOT 20013156OUT 1101157LD 20001158AND-NOT TIM 005159LD 20203160AND-NOT TIM 027161OR LD162AND-NOT 20013163AND-N

22、OT 0001164OUT 1101165LD 20001166AND-NOT TIM 005167LD 20203168AND-NOT TIM 027169OR LD170AND-NOT 0001171AND-NOT 20009172OUT21000173LD 21000174OR 20011175AND-NOT 0001176OUT 1002177LD TIM 001178AND-NOT TIM 002179LD TIM 017180AND-NOT TIM 018181OR LD 182AND-NOT 20004183AND-NOT 0001184OUT 20007185TIM 009 #

23、002186LD TIM 004187AND-NOT TIM 005188LD TIM 026189AND-NOT TIM 027190OR LD191AND-NOT 20004192AND-NOT 0001193OUT 20008194TIM 010 #2195LD 20007196OR 20003197OR 20002198OR 20013199AND-NOT 0001200OUT 1100201LD 20008202OR 20005203OR 20006204OR 20009205AND-NOT 0001206OUT 1102207LD 0002208OR 20009209AND-NOT

24、 TIM 011210OUT 20009211TIM 011 #100212LD 20009213AND-NOT 20010214OUT 20011215TIM 012 #010216LD TIM 012217OR TIM 015218OR 20010219AND-NOT TIM 013220OUT 20010221TIM 013 #010222LD 0003223OR 20013224AND-NOT TIM 014225OUT 20013226TIM 014 #100227LD 20013228AND-NOT 20010229OUT 20014230TIM 015 #010231END215

25、216217218219220221222223224225参考文献1廖常初著.PLC基础及应用.第2版.北京:机械工业出版社.20073三菱电机.FX3U,FX3UC微型可编程控制器编程手册.20054.三菱电机.FX1S,FX1N,FX2N,FX2NC编程手册.2002附录资料:不需要的可以自行删除 busybox详解制作根文件系统详解制作根文件系统 一、FHS(Filesystem Hierarchy Standard)标准介绍当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规

26、定。该标准规定了根目录下各个子目录的名称及其存放的内容:目录名存放的内容/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用来提供内

27、核与进程信息的虚拟文件系统,由内核自动生成目录下的内容/sys用来提供内核与设备信息的虚拟文件系统,由内核自动生成目录下的内容/mnt文件系统挂接点,用于临时安装文件系统/tmp临时性的文件,重启后将自动清除制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括:编译安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录 利用交叉编译工具链,构建/lib目录 手工构建/etc目录 手工构建最简化的/dev目录 创建其它空目录 配置系统自动生成/proc目录 利用udev构建完整的/dev目录 制作根文件系统的jffs2映像文件 下面就来详细

28、介绍这个过程。二、编译安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录这些目录下存储的主要是常用命令的二进制文件。如果要自己编写这几百个常用命令的源程序,my god, 这简直是一个噩梦!好在我们有嵌入式Linux系统的瑞士军刀busybox,事情就简单很多。1、从 HYPERLINK / / 下载busybox-1.7.0.tar.bz22、tar xjvf busybox-1.7.0.tar.bz2解包3、修改Makefile文件175 ARCH ?= arm176 CROSS_COMPILE ?= arm-linux- 4、make menuconf

29、ig配置busyboxbusybox配置主要分两部分。第一部分是Busybox Settings,主要编译和安装busybox的一些选项。这里主要需要配置:1)、Build Options - Build BusyBox as a static binary (no shared libs),表示编译busybox时,是否静态链接C库。我们选择动态链接C库。2)、Installation Options - Applets links (as soft-links) - (X) as soft-links,表示安装busybox时,将各个命令安装为指向busybox的软链接还是硬链接。我们选择

30、软链接。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以支持记忆历史命令;选中Tab completion和Username completion以支持命令自动补全 第二部分是Applets,他将busybox的支持的几百个命令分门别类。我们只要在各个门类下选择

31、想要的命令即可。这里我们基本保持默认设置。1)选中Networking Utilities - httpd下的Enable -u option,以启用http服务器的功能allows the server to run as a specific user5、编译busyboxmake6、安装busyboxmake install安装完成后,可以看到在/work/nfs_root/fs_mini3目录下生成了binsbinusr/binusr/sbin目录,其下包含了我们常用的命令,这些命令都是指向bin/busybox的软链接,而busybox本身的大小不到800K:dennisdennis

32、-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 dennis dennis 7 2010-04-03 23:57 adduser - busyboxlrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 ash - b

33、usybox-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 /bin/ls-rwxr-xr-x 1 root root 78004 2007-09-29 20:51 /bin/ls busybox以它娇小的身躯容纳了数以百计的命令代码,实在是让人佩服不已,其不愧

34、嵌入式系统瑞士军刀之美誉。据说,busybox的作者身患绝症,这更让人钦佩GNU开源软件的作者们。 三、利用交叉编译工具链,构建/lib目录 光有应用程序(命令)是不够的,因为应用程序本身需要使用C库的库函数,因此还必需制作for ARM的C库,并将其放置于/lib目录。my god,要自己写C库的源代码吗?不用!还记得交叉编译工具链的3个组成部分吗?交叉编译器、for ARM的C库和二进制工具。哈哈,for ARM的C库是现成的,我们只需要拷贝过来就可以了。遗憾的是:整个C库目录下的文件总大小有26M。而我们根文件系统所在分区不过区区16M而已,根本放不下。怎么办呢? dennisdenni

35、s-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库目录下内容的组成。该目录下的子目录和文件共分8类: 目标文件,如crtn.o,用于gcc链接可执行文件 libtool库文件(.la),在链接库文件时这些文件会被用到,比如他们列出了当前库文件所依赖的其它库文件,程序运行

36、时无需这些文件 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类文件的大小也相当大。dennisdennis-desktop:/work

37、/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_mini3$ arm-linux-readelf -a bin/busybox | grep Shared0 x00000001 (NEEDED) Shared library: libcrypt.so

38、.10 x00000001 (NEEDED) Shared library: libm.so.60 x00000001 (NEEDED) Shared library: libc.so.6 可知:busybox只用到了3个库:通用C库(libc)、数学库(libm)、加密库(libcrypt),因此我们只需要拷贝这3个库的库文件即可。但是每个库都有4个文件,4个文件都要拷贝吗?当然不是。 dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ ls -l libcrypt.-*-rwxr-xr-x 1 denn

39、is 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 dennis dennis 17 2008-12-22 15:38 libcrypt.so.1 - libcrypt-2.3.6.sodennisdennis-desktop:/work/tools/gcc-3

40、.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-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.

41、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:31 libc.a-rw-r-r- 1 dennis dennis 195 2008-01-22 05:34 libc.solrwxrwxrwx 1 dennis dennis 13 2008-12-22

42、15:38 libc.so.6 - libc-2.3.6.so 4个文件中的.a文件是静态库文件,是不需要拷贝的。另外3个文件是: 实际的共享链接库:libLIBRARY_NAME-GLIBC_VERSION.so。当然需要拷贝。 主修订版本的符号链接,指向实际的共享链接库:libLIBRARY_NAME.so.MAJOR_REVISION_VERSION,程序一旦链接了特定的链接库,将会参用该符号链接。程序启动时,加载器在加载程序前,会检索该文件。所以需要拷贝。 与版本无关的符号链接,指向主修订版本的符号连接(libc.so是唯一的例外,他是一个链接命令行:libLIBRARY_NAME.s

43、o,是为编译程序时提供一个通用条目)。这些文件在程序被编译时会被用到,但在程序运行时不会被用到,所以不必拷贝它。关于共享库的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这个

44、记录,然后沿着主修订版本的符号链接(libm.so.6 - libm-2.3.6.so)找到实际的共享链接库libm-2.3.6.so,从而将其与hello作动态链接。可见,与版本无关的符号链接是供编译器使用的,主修订版本的符号链接是供动态链接库加载器使用的,而实际的共享链接库则是供应用程序使用的。通过以上分析,我们只需要拷贝3个库(每个库各1个主修订版本的符号链接和1个实际的共享链接库)以及动态链接库加载器(1个符号链接和1个实体文件)。步骤如下:dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ mkd

45、ir /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/arm-linux/lib$ cp -l libcrypt.so.* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.

46、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-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp libc-* /work/nfs_root/fs_mini3/libdennisdennis-d

47、esktop:/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_mini3/lib 四、手工构建/etc目录 /etc目录存放的是系统程序的主配置文件,因此需要哪些配置文件取决于要运行哪些系统程序。即使最小的系统也一定会运行1号用户进程init,所以我们至少要手工编

48、写init的主配置文件inittab。busybox的inittab文件的语法、语义与传统的SYSV的inittab有所不同。 inittab文件中每个条目用来定义一个需要init启动的子进程,并确定它的启动方式,格式为:。例如:ttySAC0:askfirst:-/bin/sh 表示子进程要使用的控制台,若省略则使用与init进程一样的控制台 表示运行级别,busybox init程序这个字段没有意义 表示init进程如何控制这个子进程 sysinit:系统启动后最先执行,只执行一次,init进程等待它结束后才继续执行其它动作 wait:系统执行完sysinit条目后执行,只执行一次,ini

49、t进程等待它结束后才继续执行其它动作 once:系统执行完wait条目后执行,只执行一次,init进程不等待它结束 respawn:启动完once进程后,init进程监测发现子进程退出时,重新启动它 askfirst:启动完respawn进程后,与respawn类似,不过init进程先输出” Please press Enter to activate this console“,等用户输入回车后才启动子进程 shutdown:当系统关机时 restart:Busybox中配置了CONFIG_FEATURE_USE_INITAB,并且init进程接收到SIGUP信号时执行,先重新读取、解析/e

50、tc/inittab文件,再执行restart程序 ctrlaltdel:按下ctrl+alt+del键时执行,不过在串口控制台中无法输入它 表示进程对应的二进制文件。如果前面有-号,表示该程序是“可以与用户进行交互的”我们制作最简单的/etc/inittab文件,其内容如下::sysinit:/etc/init.d/rcS:askfirst:-/bin/sh:ctrlaltdel:/sbin/reboot:shutdown:/bin/umount -a r 制作最简单的脚本程序文件/etc/init.d/rcS,其内容如下: #!/bin/shifconfig eth0 7修改shell脚本

51、文件/etc/init.d/rcS的权限,以使其可被执行:# chmod a+x /etc/init.d/rcS五、手工构建最简化的/dev目录 在linux机器上,执行ls /dev可看到几百个设备文件,我需要手工创建它们吗?maybe,我只需要手工创建几个设备文件!我怎么知道我应该创建哪几个设备文件呢?管它呢,先看看开发板上可爱的linux的反应再说。 启动Linux操作系统,显示: VFS: Mounted root (nfs filesystem).Freeing init memory: 112KWarning: unable to open an initial console.

52、这说明,内核已经成功挂载根文件系统,但却未能成功启动第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_rodata_ro();753 system_state = SYSTEM_RUNNING;754 numa_default_policy();755 756 if (sys_open(const char _u

53、ser *) /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_init_process(ramdisk_execute_command);764 printk(KERN_WARNING Failed to execute %sn,765 ramdisk_execute

54、_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 (execute_command) 775 run_init_process(execute_command);776 printk(KERN_WARNING Failed to execute %s. At

55、tempting 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 found. Try passing init= option to kernel.);785 显然,内核错误是由175行不能打开/dev/console所致。通过查看已经安装好的linux机器的/dev/co

56、nsole设备文件,可知其是字符设备文件,主设备号为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:dennisdennis-desktop:/work/nfs_root/fs_mini3/dev$ dennisdennis-desktop:/work/nfs_root/fs_mini3/dev$ sudo mknod

57、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设备文件:dennisdennis-desktop:/work/nfs_root/fs_mini3/dev$ sudo mknod null c 1 3 再次重启开发板上的linux,显示 VFS: Mounted root (nf

58、s 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/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)star

温馨提示

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

评论

0/150

提交评论