基于到发管理驱动的铁路客运站客服设备在线监测与维护系统的研究_第1页
基于到发管理驱动的铁路客运站客服设备在线监测与维护系统的研究_第2页
基于到发管理驱动的铁路客运站客服设备在线监测与维护系统的研究_第3页
基于到发管理驱动的铁路客运站客服设备在线监测与维护系统的研究_第4页
基于到发管理驱动的铁路客运站客服设备在线监测与维护系统的研究_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、铁路客运站客服设备在线监测与维护系统的研究詹璇,吕晓军,程清波,刘晓燕,李明(中国铁道科学研究院电子计算技术研究所,北京 100081)摘要:本文在分析了目前铁路客运站设备管理的现状和存在的问题后,根据设备在线监测与评估系统的需求分析,阐述了系统的主要业务流程、功能结构、系统设计、实现以及关键技术,最后给出了系统优点。关键词: 客服设备;在线监测;维护管理;到发管理;消息中间件Research and Realization of Online Monitoring and Maintenance System of Passenger Service Equipment in Railway

2、 Station Based on Train Dispatch PlanZhan Xuan,Lv Xiaojun,Cheng Qingbo,Liu Xiaoyan,Li Ming (Institute of Computing Technologies,China Academy of Railway Sciences,Beijing 100081,China)Abstract:According to the requirement analysis of Equipment online Monitoring and Maintenance System, and analysis of

3、 existing equipment management problems in current railway station, this paper expounds the mainbusiness process,the system function structure,system design,realization andkey technology,finally the systems advantages are given.Key Words:passenger service equipment; online monitoring;maintenance and

4、 management;dispatch management;middleware0 引言随着我国高速铁路的快速发展,铁路信息化取得长足的进步。在大规模客运专线建设和既有线改造升级过程中,上线运行的系统越来越多,随着车站自动化程度的不断提升,对设备的依赖性也越来越高。而设备作为支撑信息平台和铁路信息化管理的核心单元,其可靠性、可维修性、安全性直接决定着车站运营组织、安全化生产的好坏。目前,在铁路车站中,购置了大量价格昂贵的服务设施/设备,这些设施/设备来自不同的生产厂家,设备的优劣好坏只有通过工作人员巡检或车站人员通告才能得知,还不能做到实时监测;在遇到春运、暑运等特殊情景下,一些关键的客服

5、设备如引导屏、自动售检票机、查询机等还不能做到事前维修;且设备巡检的劳动强度较大,容易忽略或遗漏问题;目前绝大多数铁路客运站尚未建立一套完善的设备维修体制,维修由外包公司或生产厂家来承担,设备维修完毕后有时不能及时告知车站,造成车站工作人员对设备的好坏优劣心中无数,从而设备的可靠性及安全性不可控制。因此,为了改善这种局面,提高工作人员效率,使工作人员对设备真正心中有数,打造一个智能化、人性化、高效安全、适应现代的铁路生产管理体系,建立设备在线监测与维护管理系统,实时监测设备状态,及时发现故障并上传报警,对设备的故障进行诊断,对设备的质量进行评估,具有重要的应用价值和社会意义。1 系统总体需求该

6、系统的使用对象是与铁路客运站设备管理和使用相关的部门,主要有:综合控制室、技术设备科、设备车间等。(1)实现全站设备的基础信息维护对全站设备的基础数据进行录入、修改,同时提供设备按地点和按分类两种方式查询,对设备有借调用记录的生成借调用记录单,并提供打印功能。(2)实现客服设备的运行状态监测通过制定统一的设备接口规范,自动获取各客服设备(广播、引导、视频监控、自动检票机、查询机等)的在线运行状态情况。(3)实现客服设备故障报警对监测出有故障的设备用不同的颜色进行提示,如故障:红色,异常:灰色,正常:绿色,并生成故障记录单。2 系统业务流程图2.1 主要业务流程(1)设备管理部门设备车间/电算站

7、维护设备基础信息。(2)综控室人员查看设备的在线运行状态。(3)发现故障方式分为四种:设备管理部门巡检发现的故障、综控室人员实时监测发现的设备故障、设备使用部门/干部检查现场发现的故障,发现故障后统一上报设备管理部门设备车间/电算站统一确认。(4)在发现故障后,由车间和使用人员在系统中录入,生成故障记录单。(5)设备在线监测出的故障,自动生成故障记录单。(6)设备车间/电算站审核故障记录单,派工维修。(7)车站管理部门按月度、季度、年度统计设备故障率,形成图表和报表。3 系统功能设计3.1 系统功能结构基于到发驱动的设备在线监测与维护系统包括设备基础信息录入、设备在线监测、设备故障单记录、设备

8、故障统计功能。如下图所示:图3.1 系统功能结构图3.1.1 设备基础信息维护设备基础信息维护包括设备隶属关系配置、基础信息录入、设备信息查询、设备借调用记录。设备隶属关系配置隶属关系配置包括车站区域基础信息配置和部门所属关系配置,配置车站区域基础信息和位置关系,包括售票厅、进站口、候车室、出站口、天桥、地道、站台、风雨棚、消防通道、办公区等,以形成车站区域关系树。配置车站部门所属关系,如客运车间、设备车间、客运科等,以形成部门关系树。设备基础信息录入录入设备基础信息,包括设备名称、设备编号、设备所在区域、设备所在部门、设备类别(安检设备类、售、检票类、导向、广播、查询、监控、电梯、空调、电脑

9、、通讯、桌椅家具、厕卫等)、设备状态(库存、在用、维修、借出、停用、报废等)、设备购入途径(客专公司、铁路局、车务段、车站等)、厂家联系电话、计量单位(个、张、排、支、台、套等)。设备信息查询提供按地点和类别查询设备信息。设备借调用记录生成设备的借调用记录单,包括借调单号、借出日期、借出部门、借出人、接收部门、接收人、是否归还、归还日期、验收人、备注等。3.1.2 设备在线监测设备在线监测是基于2小时内的列车到发计划来实时监测关键设备的运行状态,并以列表和图表方式展示运行状态结果。以列表方式可以清楚直观的看到每趟车在运行图中不同的客服设备的工作状态和显示内容,以图表方式可以看到车站不同区域内的

10、客服设备的工作状态。根据列车的实际到点和发点判断列车到发状态,分为列车未到站、列车到站、列车离站三种到发状态。列车未到站、旅客候车:监测进站大屏、检票屏、候车厅广播、LCD屏、闸机。列车到站:监测站台屏上屏、站台广播。列车离站:站台屏下屏、出站口广播、出站屏、出站闸机。3.1.3 设备故障单记录根据设备在线监测出的结果,有故障的设备会用红色显示,并自动生成故障记录单,设备车间工作人员在点检巡检过程中发现的故障,要手动录入生成设备故障单。设备故障单内容包括:故障设备资料、故障情况说明等。并可以按故障发生时间和故障分类查询故障。故障设备资料:设备编号、设备名称、设备所在地点、制造厂家等。故障情况说

11、明:故障分类(I类、II类、III类、IV类)、故障位置、发生故障经过及现象、故障发生时间、操作人、填写时间、填写人等。故障分类:I级故障(整个系统处于完全瘫痪状态,不能运行);II级故障(系统性能严重下降:包括网络性能明显下降、设备出现故障或软件系统出现非瘫痪性错误等,客户业务运作受到严重影响);III级故障(系统部分设备或者软件出现故障,但整个系统仍可正常运行,客户业务运作受到一定影响);IV级故障(需要硬件、软件产品功能、安装或配置方面的信息和支援,对客户的业务运作几乎没有影响或者根本没有影响)。3.1.4 设备故障统计按设备分类统计出月度、季度、年度内设备故障次数和设备故障时间(按小时

12、计算),并以图表和列表形式展示;对设备进行质量评估,计算出设备的可用性,生成统计报表。建立设备的性能指标,即可用性指标,对设备进行质量评估。设备的可用性分为优、中、劣三等,优:设备停机次数一年不超过1.825天*24h,即可用性在99.5%;中:设备停机次数一年不超过3.825天*24h,即可性在95%;劣:即停机或死机次数一年在30天*24h以上。4关键技术 消息中间件技术4.1.1 消息中间件的结构消息中间件是基于消息传送的中间件,主要功能是在应用程序之间传送消息,这些消息可以在不同的网络协议、不同的计算机系统和不同的应用软件之间传递。到发管理子系统与客服设备在线监测与维护系统之间的协调与

13、通信是以中间件为接口进行消息传送的,中间件主要管理两个子系统之间的数据计算资源和网络通讯。两个子系统与消息中间件的通信使用Socket连接,由消息中间件建立监听Socket,随时查看客户端是否有请求,如果客户端有请求的话立刻予以响应,建立对话连接,将接收到的数据处理后执行数据库操作,然后返回给客户端。其结构如下图所示:图4.1 消息中间件的组织结构消息中间件由两大部分组成:设备接口、客户端通信部分。设备接口部分集成了各种设备的接口,负责与各种设备通信,每隔2分钟获取设备的状态,再写入数据库;客户端通信部分负责与到发管理和设备管理之间的通信,接收这两个系统之间的查询、访问,然后与数据库交互,执行

14、查询操作,再返回给客户端,同时管理消息队列和消息优先级的控制等。首先,到发管理子系统根据列车的实际到点与发点判断列车运行状态,未到站、到站和离站,根据三种状态下监测的关键的设备类别,如列车未到站、旅客候车情况下监测进站大屏、检票屏、候车厅广播、LCD屏、闸机;列车到站要监测站台屏上屏、站台广播;列车离站时监测站台屏下屏、出站口广播、出站屏、出站闸机;然后通过Socket通信向消息中间件发送设备串码,设备串码中标识了设备类别码和设备位置编号,消息中间件在接收到信息后进行解析,向数据库发送数据查询请求,将查询结果通过Socket通信方式发送至设备在线监测与维护系统并显示。其流程如下图所示:图4.2

15、 消息中间件流程图4.1.2 消息模型到发管理子系统通过Socket通信方式向消息中间件发送消息,消息由消息头和消息体组成。消息头包括消息的识别信息,如消息类型、主题和优先级等,消息体则是实际的传输数据,如车次、列车状态、设备类别码、设备位置码、设备名称、消息优先级等。消息采用XML格式。如下所示的消息体表示车次为G87,列车状态为未到站,监测的设备为进站大屏(用1表示)和LCD屏(用3表示),位置代号分别为112和113,优先级均为1。 4.1.3 消息队列设计消息队列是面向消息中间件的数据结构,消息队列是一片存储缓冲区,队列中可以存放一条或多条消息。在该系统中,消息队列分为请求队列和应答队

16、列。到发管理发送的消息都存放在请求队列中,消息中间件发送给系统的应答消息都放在应答队列中。每个队列都是一个双向链表,一个队列中可以有多条消息,消息从队列头部出队,从尾部入队。消息入队和出队可以并行操作,互不干扰。一次只能发送或取出一条消息。每个队列都采用FIFO原理。如下图所示:图4.3 消息队列队列的具体设计是queue类,是一个线程安全类。当向队列中读写消息时,必须保持线程间同步。如果在队列为空时从队列中取消息,队列会自动阻塞,直到有新的消息入队为止。当队列填满时,能够自动扩张。所以创建时可以指定队列的容量。如果队列满,则抛出异常,删除即将到来的消息。如果不指定,队列会自动扩张,永远不会出

17、现队列满的情况。当队列关闭时,任何读写行为都会产生异常。根据系统生成的2小时之内的到发计划,系统会生成多个队列。每个队列里放5条消息。每个队列对应一个优先级,该优先级与队列中的所有消息的优先级相同,队列的优先级按到发计划的到点时间的先后从大到小排序。每个消息被接收以后,根据消息自身的优先级将其放入对应的队列中。每个队列分配一个权值,表明每次为该队列服务时该队列所获得的服务资源数。所有的队列都要放入服务池中进行处理,消息排队过程有如下特点:服务池中有N个队列,各个队列相互独立的。消息有m个优先级,消息队列有m个,每个队列对应的消息优先级为k。当m=1时,只有一个队列,权值w=1。用于存放优先级为

18、k的消息,其对应的权值为。T:一个队列服务的时间。:一个循环中为服务的时间。则=*T。排队工作原理如下:首先检测,如果0,则转入2);如果=0,则转入3)。为队列服务,持续时间为t,直到下列之一发生:=0且t,转入3)。t,服务完当前队列,转入3)。k=k+1。km,转入1)km,k=1转入1)如下图所示:图4.4 消息排队原理5 系统优点设备在线监测与维护管理系统采用Oracle作为数据库环境,C#为开发语言,系统采用C/S结构。所开发的系统具有以下优点:(1)实现了从故障录入-故障派单-故障处理-故障验收的一体化闭环管理,优化了业务流程,实时跟踪故障处理状态。(2)采用了消息中间件技术实现

19、了在线监测,大大减少了客户端和服务器端的计算压力,跨平台的移植性强。(3)采用了流程可配置的数据字典设计,避免了当系统管理需求变化时而不断的去修改表和程序。(4)建立设备的性能指标,对设备进行质量评估,给领导者提供决策依据。6 总结本文根据设备在线监测与维护管理系统的需求分析,阐述了系统的主要业务流程、功能结构、系统设计、实现以及关键技术,实现了设备基础信息的维护、根据到发计划驱动实时监测客服设备运行状态、跟踪故障管理状态,实现故障发现、故障录入、故障派工、故障维修、故障回填签收的一体化流程管理,为综控室值班员提供决策依据。参考文献:1李建华.设备状态监测与故障诊断技术综述J.广东化工,200

20、9,200(36):1682赵艳平,姚冠新,陈骏.设备管理与维修M.北京:化学工业出版社,2006:14-18.3郭云飞,黄东.基于B/S模式的多层结构的电厂设备管理系统的设计J.计算机与现代化,2004(12):119-121.4丰田和夫.IT时代预知维修技术的动向J.中国设备工程,2002(12):50-52.5刘建勇.机电设备的故意障维修与设备保养探讨J.科技向导,2011.12(33):51-52.6 段其昌,钟安勇,吴正东.基于数据推送组建 B/S 模式虚拟仪器测试系统J. 仪器仪表学报, 2007,28(4):220223.7 唐川.中间件技术在金融中间业务信息系统中的应用研究J微

21、计算机信息,2006(6):153- 155.8 Lingel K. Security Requirements for Message-oriented Middleware./PDF/MomSecure.pdf, 2001-06附录资料:不需要的可以自行删除 busybox详解制作根文件系统详解制作根文件系统 一、FHS(Filesystem Hierarchy Standard)标准介绍当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。该标准规定了根目录下各个子目录的名称及

22、其存放的内容:目录名存放的内容/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用来提供内核与进程信息的虚拟文件系统,由内核自动生成

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

24、生成/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 menuconfig配置busybox HYPERLINK

25、 /y1meas5zrVyWRApB-3amnI3XoX1uejYB25KKj1kpqxTRhOGgR_PuwGIQD9zdV3d5uvhNok3Z_YMczeZUopvoGEQES1yAumIZZZ14T5WFiL1BGGc7xrEbBCPe_ET2gFHV8nhyRPim0l3Fnss0hvRQ7UWWA/image4%2066DF829F.png busybox配置主要分两部分。第一部分是Busybox Settings,主要编译和安装busybox的一些选项。这里主要需要配置:1)、Build Options - Build BusyBox as a static binary (no

26、 shared libs),表示编译busybox时,是否静态链接C库。我们选择动态链接C库。2)、Installation Options - 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)Busyb

27、ox Library Tuning。保留Command line editing以支持命令行编辑;保留History size以支持记忆历史命令;选中Tab completion和Username completion以支持命令自动补全 第二部分是Applets,他将busybox的支持的几百个命令分门别类。我们只要在各个门类下选择想要的命令即可。这里我们基本保持默认设置。1)选中Networking Utilities - httpd下的Enable -u option,以启用http服务器的功能allows the server to run as a specific user5、编译b

28、usyboxmake6、安装busyboxmake install安装完成后,可以看到在/work/nfs_root/fs_mini3目录下生成了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

29、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 - 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命

30、令就有差不多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以它娇小的身躯容纳了数以百计的命令代码,实在是让人佩服不已,其不愧嵌入式系统瑞士军刀之美誉。据说,busybox的作者身患绝症,这更让人钦佩GNU开源软件的作者们。 三、利用交叉编译工具链,构建/lib目录 光有应用程序(命令)是不够的,因为应用程序本身需要使用C库的库函数,因此还必需制作for ARM的C库,并将其放置于/lib

31、目录。my god,要自己写C库的源代码吗?不用!还记得交叉编译工具链的3个组成部分吗?交叉编译器、for ARM的C库和二进制工具。哈哈,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

32、-linux/lib 需要C库目录下所有的文件吗?no,absolutely no! 让我们来分析一下glibc库目录下内容的组成。该目录下的子目录和文件共分8类: 目标文件,如crtn.o,用于gcc链接可执行文件 libtool库文件(.la),在链接库文件时这些文件会被用到,比如他们列出了当前库文件所依赖的其它库文件,程序运行时无需这些文件 gconv目录,里面是各种链接脚本,在编译应用程序时,他们用于指定程序的运行地址,各段的位置等 静态库文件(.a),例如libm.a,libc.a 动态库文件 (.so、.so.0-9*) 动态链接库加载器ld-2.3.6.so、ld-linux.s

33、o.2 其它目录及文件很显然,第1、2、3、4、7类文件和目录是不需要拷贝的。由于动态链接的应用程序本身并不含有它所调用的C库函数的代码,因此执行时需要动态链接库加载器来为它加载相应的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 需要全部拷贝吗?非也,非也!其实,需要哪些库完全取决于要运行的应用程序使用了哪些库函数。如果我们只制作最简单的系统,那么我们

34、只需要运行busybox这一个应用程序即可。通过执行 dennisdennis-desktop:/work/nfs_root/fs_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)

35、、加密库(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 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 denni

36、s 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.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

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

38、: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 15:38 libc.so.6 - libc-2.3.6.so 4个文件中的.a文件是静态库文件,是不需要拷贝的。另外3个文件是: 实际的共享链接库:libLIBRARY_NAME-GLIBC_VERSION.so。当然需要拷贝。 主修订版本的符号链接,指向实际的共

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

40、尾(.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作动态链接。可见,与版本无关的符号链接是供编译器使用的,主修订版本的符号链接是供动态链接库加载器使用的,而实际

41、的共享链接库则是供应用程序使用的。通过以上分析,我们只需要拷贝3个库(每个库各1个主修订版本的符号链接和1个实际的共享链接库)以及动态链接库加载器(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_

42、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.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/li

43、b$ 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-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/

44、gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp -l ld-* /work/nfs_root/fs_mini3/lib 四、手工构建/etc目录 /etc目录存放的是系统程序的主配置文件,因此需要哪些配置文件取决于要运行哪些系统程序。即使最小的系统也一定会运行1号用户进程init,所以我们至少要手工编写init的主配置文件inittab。busybox的inittab文件的语法、语义与传统的SYSV的inittab有所不同。 inittab文件中每个条目用来定义一个需要init启动的子进程,并确定它的启动方式,格式为:。例如:ttySAC0:askfirst:-

45、/bin/sh 表示子进程要使用的控制台,若省略则使用与init进程一样的控制台 表示运行级别,busybox init程序这个字段没有意义 表示init进程如何控制这个子进程 sysinit:系统启动后最先执行,只执行一次,init进程等待它结束后才继续执行其它动作 wait:系统执行完sysinit条目后执行,只执行一次,init进程等待它结束后才继续执行其它动作 once:系统执行完wait条目后执行,只执行一次,init进程不等待它结束 respawn:启动完once进程后,init进程监测发现子进程退出时,重新启动它 askfirst:启动完respawn进程后,与respawn类似

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

47、其内容如下::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脚本文件/etc/init.d/rcS的权限,以使其可被执行:# chmod a+x /etc/init.d/rcS五、手工构建最简化的/dev目录 在linux机器上,执行ls /dev可看到几百个设备文件,我需要手工创建它们吗?maybe,我只需要手工创建几个设备文

48、件!我怎么知道我应该创建哪几个设备文件呢?管它呢,先看看开发板上可爱的linux的反应再说。 启动Linux操作系统,显示: VFS: 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_p

49、ost(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 _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

50、 (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_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 a

51、re772 * 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. Attempting 777 defaults.n, execute_command);778 779 run_init_process(/sbin/init);780 run_init_process(/etc/init);781 run_init_process(/

52、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/console设备文件,可知其是字符设备文件,主设备号为5,次设备号为1: dennisdennis-desktop:/work/nfs_root/fs_mini3/etc$ ls -l /dev/consolecrw- 1 root root 5, 1 2010-04

53、-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 console c 5 1 还需要创建其它设备文件吗?只有天知道!再看看linux的反应。 VFS: Mounted root (nfs filesystem).Freeing init memory: 112Kinit: cant open /dev/null:

54、 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 (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

55、 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)starting pid 229, tty : /etc/init.d/rcS Please press Enter to activate this console.starting pid 231, tty :

温馨提示

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

评论

0/150

提交评论