




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PAGE PAGE 37单元测试分析报告1引言1.1编写目的本文档对天津农合行稽核监督及操作风险监控系统的单元测试进行分析总结,读者主要面向参与本项目的开发人员和测试人员,另外还有天津农合行相关领导和专家。1.2背景项目来源传统上,银行的风险指信贷风险和市场风险,在操作风险管理上较为落后。当前对操作风险的预防主要放在监督中心,现有的监督软件只能做到通过分散地挑选一部分凭证来对流水进行核实,对于没有凭证的业务不能进行监控。对整个业务的综合分析,只能通过人工的方式凭业务人员的自身素质进行简单判断,若要对需复杂计算、大数据量分析后才能得到的风险信息,就需要运用计算机手段来实现。原先由人工进行监督,只
2、能对凭证进行全面监督,无法根据业务重要性区分监督重点。近年来银行内部人作案层出不穷,由于这些人熟悉银行制度、系统的漏洞,作案手段有很强的连续性和隐蔽性,通常一般监督难以发现。现阶段,部分银行还存在以下问题:凭证保存不便,查阅困难。凭证经过事后监督后送回网点,由网点分散保管,占据了行内存放凭证的空间,查阅凭证费时费力,要递送凭证纸张,浪费时间,并且由于经常查阅导致凭证损坏。整个事后监督操作比较分散,不适应前台业务整合和核算一体化的管理要求。人工审票重点不突出。一般由事后监督人员手工翻阅部分传票,无法选择高风险业务进行重点监督。人工审票需要具有较高素质、较多经验的监督人员,这样对监督人员要求高,人
3、员培训也要花费很大的开销。不能实现基于历史交易统计和关联交易分析。目前各家银行在风险的防范上均采取了各种措施,包括主业务系统内部实现的基于交易的控制,以及基于当天业务数据的简易的分析,但是随着目前高智商犯罪的增加,做案分子专门找制度的漏洞,使得每一笔业务本身都是正确的,而只有基于大量业务的统计和关联交易进行分析时才发现。对风险缺乏制度化的整套管理制度。风险模型的提出和建立、风险的生成和查询、风险的处理、风险的打印、风险的核销和落实没有制度化的方法来保证,效率低下。风险的响应不及时。一般地,70的风险案件需要查找到原始凭证或者凭证的图像,但是目前的银行凭证的管理和风险的分析属于两个不同的部门,使
4、得即使发现了风险,等到落实查找时已经过去了许多天,不能及时减少风险带来的损失。有效地管理和方便地调阅庞大的交易流水信息和凭证影像信息,高效监督并及时发现操作方面的风险日益受到银行各级领导的重视,为了适应行内前台业务整合和核算一体化的管理要求,达到减员增效和提高监督质量的目的,建立一套完善的、自动化程度高、扩展性强的集流水勾对、帐务处理、稽核和统计分析、决策支持的全新的监督系统已迫在眉睫。为了解决银行面临的以上问题,信雅达公司提供的综合事后监督系统引入了OCR光学识别技术,集凭证录入、图像处理、智能识别、数据核对、海量存储、精确查询、重点监督于一体的计算机辅助管理系统,实现了凭证档案的缩微,并在
5、实现凭证影像精确索引的基础上,建立业务处理风险预警监督中心,结合影像和流水实现对业务的重点监督,替代银行原有的手工监督和账务监督的模式,逐步实现了事后监督的自动化。该项目的可行性研究,正是基于这样一种背景,为统一影像技术的应用范围、应用模式、业务需求、技术方案和加强该项技术的应用管理而提出来的。委托单位天津农合行;开发单位信雅达系统工程股份有限公司;主管部门天津农合行业务监控中心、天津农合行信息技术中心1.3定义CMM软件能力成熟度模型OCR光学字符识别CSBANK IPS天津农合行稽核监督及操作风险监控系统1.4参考资料1 天津农合行产品业务需求书2 CMM软件规范,信雅达质量管理部,201
6、0.4.183 天津农合行稽核监督及操作风险监控系统需求规格说明,项目组,2004 天津农合行稽核监督及操作风险监控系统概要设计说明书V1.0.0,项目组,20095 天津农合行稽核监督及操作风险监控系统数据库结构说明书V1.0.0,项目组,20092单元测试项目及结果2.1 扫描程序单元测试计划标识扫描.粗索引录入模块组件功能项完成粗索引的录入针对概要/详细设计文件名稽核监督及操作风险监控系统项目概要设计说明书V1.0.0物理文件名BatchInputInfo.h, BatchInputInfo.c编号1.001 程序设计人员陈时康测试人员王勇、王品测试目的正确显示粗索引信息,并检验用户输入
7、的有效性测试内容描述检查用户是否输入了网点号或柜员号,是否有输入项为空输入期望有一个为空的输入项功能处理期望描述无法通过检验,错误信息为粗索引信息不能为空输出期望粗索引信息不能为空单元测试结果实际输入数据柜员为空实际处理情况描述用户点击确定按钮后,程序检验,发现柜员为空,弹出柜员不能为空的提示信息实际输出柜员不能为空测试结论正常 单元测试计划标识扫描.扫描模块和生成索引文件组件功能项取得图像,并正确显示针对概要/详细设计文件名稽核监督及操作风险监控系统项目概要设计说明书V1.0.0物理文件名Dyinput.h ,Dyinput.c;view,h,view.c ;xvcsview.h,xvcsv
8、iew.c编号1.002 程序设计人员陈时康测试人员王勇、王品测试目的能取得图像,并正确显示测试内容描述扫描图像输入期望在试图中显示功能处理期望描述输出期望正确显示单元测试结果实际输入数据实际凭证实际处理情况描述取得凭证图像实际输出取得凭证图像,并在视图中显示测试结论正常 单元测试计划标识扫描.凭证登记模块组件功能项完成用户扫描的凭证登记针对概要/详细设计文件名稽核监督及操作风险监控系统项目概要设计说明书V1.0.0物理文件名c;view,h,view.c ;xvcsview.h,xvcsview.c,userdefine.h,userdefine.cpp,voucherchk.c编号1.00
9、3 程序设计人员陈时康测试人员王勇、王品测试目的登记一个柜员的凭证,在提交的时候进行核对。测试内容描述扫描员登记一批凭证,输入期望大于实际的凭证数功能处理期望描述在提交的是后提示用户,凭证登记数不对输出期望有提示单元测试结果实际输入数据登记100张,实际扫描99张实际处理情况描述在提交的时候提示用户实际输出提示用户,凭证等记数不对测试结论正常 单元测试计划标识InputDevice.ini配置组件功能项对配置文件进行配置,检验扫描程序是否正常读取参数针对概要/详细设计文件名稽核监督及操作风险监控系统项目概要设计说明书V1.0.0物理文件名ImageInputSysSet.cpp.cpp, Im
10、ageInputSysSet.cpp.h,View.cpp,View.h编号1.004 程序设计人员陈时康测试人员王勇、王品测试目的检验配置信息是否被正确读取测试内容描述修改配置文件InputDevice.ini启动扫描程序输入期望正确的配置信息功能处理期望描述按配置项目读取配置参数输出期望将配置信息取入内存中单元测试结果实际输入数据InputDevice.ini实际处理情况描述按配置项目读取参数实际输出参数被读入内存中测试结论正常 单元测试计划标识调用XVCS进行扫描处理组件功能项完成调用XVCS,并接收XVCS提交的数据针对概要/详细设计文件名稽核监督及操作风险监控系统项目概要设计说明书V
11、1.0.0物理文件名XvcsSysSet.cpp,XvcsSysSet.h,XvcsView.cpp,XvcsView.h编号1.005 程序设计人员陈时康测试人员王勇、王品测试目的检验扫描程序与XVCS的接口测试内容描述打开扫描程序,自动调用XVCS扫描员登记、扫描一批凭证,完成扫描,扫描程序接收XVCS提交图像数据输入期望登记一批图像,扫描图像,提交功能处理期望描述程序自动调用XVCS,扫描完成后,提交给扫描程序输出期望扫描程序成功获取XVCS提交图像单元测试结果实际输入数据登记扫描20张影像,并提交实际处理情况描述XVCS被成功调用实际输出扫描程序成功获取了XVCS提交的影像测试结论正常
12、 2.2 自动处理单元测试计划标识自动识别组件功能项完成版面识别,OCR识别以及流水勾对针对概要/详细设计文件名稽核监督及操作风险监控系统项目概要设计说明书V1.0.0物理文件名AutoProcess.cpp AutoProcess.hFormRecog.cpp FormRecog.hOCRRecog.cpp OCRRecog.MainFrm.cpp MainFrm.h单元测试子项001 编号2.001 程序设计人员张海军、王勇测试人员王勇、王品测试目的是否能够识别出图象的版面名称测试内容描述对于20091021采集到的图象进行版面识别输入期望采集到的图象数据功能处理期望描述对于输入的图象能够
13、进行正确的版面识别输出期望正确的图象版面识别结果单元测试结果实际输入数据20040412采集到的图象数据实际处理情况描述首先从数据库中取得图象数据,然后进行版面识别实际输出大部分都是正确的版面识别结果测试结论正常单元测试子项002编号2.002 程序设计人员张海军、王勇测试人员王勇、王品测试目的是否能够对不同的版面进行正确的OCR识别测试内容描述对于20091021采集的图象进行版面识别以后,对于不同的版面识别结果进行相应的OCR识别输入期望图象数据,版面名称,以及相应的OCR识别信息功能处理期望描述对于不同版面名称的图象,进行不同区域的图象进行抠取,进行正确的OCR识别输出期望得到正确的OC
14、R识别结果单元测试结果实际输入数据20091021采集的图象和OCR识别后的版面名称以及OCR识别信息实际处理情况描述对于图象进行了相关的图象抠取和相应的手写体以及打印体识别实际输出大部分都是正确的OCR识别结果,一部分由于识别版面的一些干扰,导致识别有误测试结论正常单元测试子项003编号2.003 程序设计人员张海军、王勇测试人员王勇、王品测试目的是否能够进行正确的流水勾对测试内容描述对于20091021采集到的图象经过版面识别以及OCR处理以后,进行流水勾对输入期望版面识别结果,和OCR处理结果功能处理期望描述根据版面名称,帐号金额等信息与流水进行勾对输出期望流水勾对成功单元测试结果实际输
15、入数据20091021采集到的图象版面识别后的版面名称以及OCR识别结果实际处理情况描述与流水进行了相应的勾对实际输出大部分勾对成功,还有一些由于版面名称以及OCR识别有误导致勾对失败测试结论正常单元测试子项004编号2.004 程序设计人员张海军、王勇测试人员王勇、王品测试目的检验题头识别测试内容描述对于没有表格线条特征的版面,是否可以通过题头识别来确定版面输入期望无表格线条特征版面(具有题头特征)题头配置参数功能处理期望描述根据题头配置参数,程序调用SYDFormMatch.dll题头识别接口,对图像进行识别输出期望正确的版面名称单元测试结果实际输入数据20091021采集到的图象实际处理
16、情况描述对于表格线条特征没有识别出的图像,进入题头识别功能,并调用SYDFormMatch.dll进行题头识别实际输出大部分版面打印清晰的图像,能够通过题头识别获得版面类型测试结论正常单元测试子项005编号2.005 程序设计人员张海军、王勇测试人员王勇、王品测试目的检验线条颜色混淆识别测试内容描述对于版面表格线条特征相似,颜色不同的版面进行区分输入期望线条颜色混淆配置易混淆图像凭证功能处理期望描述调用SydClrDeal.dll,分析凭证图像的颜色信息,根据线条颜色配置,获取正确的版面名称输出期望正确的版面名称单元测试结果实际输入数据20091021采集到的图象实际处理情况描述对于已经配置易
17、混淆特征的影像,调用SysClrDeal.dll分析表格线条特征,并可以返回分析后的版面名称实际输出大部分配置正确的图像,能够通过颜色识别获得版面类型测试结论正常2.3 流水导入单元测试计划标识CSBANKIPS.DataArchive.CMainFrame 组件功能项流水导入(下载流水、配置方案、流水导入)针对概要/详细设计文件名稽核监督及操作风险监控系统项目概要设计说明书V1.0.0物理文件名目录:CSBANKIPSDataImport单元测试子项001编号3.001 程序设计人员陈时康测试人员王品测试目的下载流水文件测试内容描述用设定的用户连接FTP服务器,下载流水文件到本地指定目录输入
18、期望正确的用户信息功能处理期望描述正确的用户,成功登陆到FTP服务器,并下载流水文件输出期望成功下载流水文件单元测试结果实际输入数据FTP:52,user:csbank,password:cs实际处理情况描述成功连接到FTP服务器,显示出服务器上的文件列表,选择流水文件,成功下载到指定目录实际输出下载流水文件到指定目录d:workflow测试结论正确单元测试子项002编号3.002 程序设计人员陈时康测试人员王品测试目的配置流水导入方案测试内容描述针对建行流水数据,配置导入方案输入期望各种配置信息功能处理期望描述成功保存方案到数据库中输出期望保存方案成功单元测试结果实际输入数据各种配置信息实际
19、处理情况描述按照向导设置各种配置信息实际输出数据库中成功保存配置方案测试结论正确编号3.003 程序设计人员陈时康测试人员王品测试目的导入流水测试内容描述按照配置方案导入流水数据输入期望流水文件与配置方案相符合功能处理期望描述导入的流水达到配置方案的要求输出期望流水导入正确单元测试结果实际输入数据选择流水文件、导入方案实际处理情况描述按照导入方案将流水数据导入到数据库中实际输出流水数据导入达到预期期望测试结论正确2.4 人工处理单元测试计划标识MaualProcess.CmainFrame组件功能项完成主要主框架,人工处理主程序针对概要/详细设计文件名稽核监督及操作风险监控系统项目概要设计说明
20、书V1.0.0物理文件名MainFrm.cppMainFrm.h编号4.001 程序设计人员王勇 测试人员王勇、王品测试目的检查差错处理函数是否正确调用差错处理子系统,并保存差错信息测试内容描述当程序界面选中差错图像时,点击差错菜单,则调用OnCheckinerror()函数。系统进入该函数,并判断,当前是否选中差错图像,如果选中,则调用WriteError()函数,进入差错登记流程,否则退出。输入期望选择图像,点击菜单响应该函数功能处理期望描述可以进入差错登记流程,并正确登记差错输出期望差错处理成功单元测试结果实际输入数据没有选择图像,直接点击菜单响应该函数实际处理情况描述当程序界面选中差错
21、图像时,点击差错菜单,则调用OnCheckinerror()函数。系统进入该函数,同时判断,当前没有差错图像(或差错流水),则直接退出。当程序界面选中差错流水时,点击差错菜单,则调用OnCheckinerror()函数。系统执行该函数,同时判断,当前没有差错流水(或差错图像),则直接退出。实际输出根据差错类型进入不同差错登记流程测试结论正常编号4.002程序设计人员王勇 测试人员王勇、王品测试目的检查主附件调整是否正常测试内容描述调用AdjustPSLevel(int nIndex, int nPSLevel, CString strOtherInfo=”)函数,输入参数序号、主附件标志、其他
22、信息后,凭证被调整为主件、电子凭证、附件、一般附件。首先判断该张图像是否被删除,如果是,则退出,返回-1,再判断该图像是否为背面,如果时,则退出,返回-1。然后调整主附件关系,将该凭证设置为相应的主附件。输入期望NIndex=0,nPSLevel=9,strOtherInfo=”功能处理期望描述第一张凭证被设置为电子凭证输出期望1单元测试结果实际输入数据NIndex=0,nPSLevel=1,strOtherInfo=”实际处理情况描述首先判断该张图像没有被删除,再判断该图像不是背面。然后调整主附件关系,将该凭证调节为主件,并返回1。实际输出1测试结论正常单元测试结果实际输入数据NIndex=
23、1,nPSLevel=1,strOtherInfo=”实际处理情况描述首先判断该张图像没有被删除,然后判断该图像是背面。直接返回-1实际输出-1测试结论正常编号4.003程序设计人员王勇 测试人员王勇、王品测试目的从数据库读取图像文件的索引信息,并从文件服务中取临时图像文件测试内容描述调用GetImageTempFile(CDSDatabase * pDb, CString strTableName, CString strSerialNo,CString strBatchId, CString& strFileName, BOOL bFlag)传入相应的数据库指针,表名,图像序列号,批次号,
24、文件名信息,能够将图像保存至strFileName文件中输入期望PDb传入业务库指针,strTableName传入批次表名,strSerialNo传入图像序号StrBatchId输入存在于表中的批次,strFileName=”C:CS_IMG.JPG”功能处理期望描述能够输出图像至文件”C:CS_IMG.JPG”输出期望1单元测试结果实际输入数据PDb=pBusiDB,strTableName=”bp_tmpbatch_tb”,strSerialNo=“43234StrBatchId=“20091103345032”,strFileName=”C:CS_IMG.JPG”实际处理情况描述从表中读
25、取凭证的序列号43234的图像信息,连接文件服务,将得到的信息提交给文件服务,文件服务提取该图像文件,并另存至”C:CS_IMG.JPG”实际输出1测试结论正常单元测试计划标识MaualProcess.ZyFunction组件功能项完成人工处理用到的公用函数针对概要/详细设计文件名稽核监督及操作风险监控系统项目概要设计说明书V1.0.0物理文件名ZyFunction.cppZyFunction.h编号4.004程序设计人员王勇 测试人员王勇、王品测试目的测试人工处理程序写文件日志是否正常测试内容描述调用WriteLogFile(CString strMsg,CString strLogPath
26、)函数将打开文件strLogPath,并将信息strMsg写入该文件,标志时间信息最后关闭该文件。如果无法打开文件,则返回-1输入期望strMsg=”CS_TEST”,strLogPath=”C:CS_TEST.log”功能处理期望描述能够在文件”C:CS_TEST.log”中输入文件”CS_TEST”输出期望1单元测试结果实际输入数据strMsg=”CS_TEST”,strLogPath=”CSBANKCS_TEST.log”实际处理情况描述由于共享网络路径CSBANK断开着文件系统无法打开该网络路径下CSBANKCS_TEST.log文件则直接返回错误-1实际输出-1测试结论正常2.5 主
27、附件核对单元测试计划标识CSBANKIPS.PSubPrimary.CMainFrame 组件功能项主附件核对(主附件判断、重点监督判断)针对概要/详细设计文件名稽核监督及操作风险监控系统项目概要设计说明书V1.0.0物理文件名目录:CSBANKpsub单元测试子项001编号5.001 程序设计人员陈时康、王勇测试人员王勇、王品测试目的主附件判断测试内容描述按照预定义的规则以及配置的主附件判断条件表判断图像的主附件关系输入期望无功能处理期望描述正确判断图像的主附件关系输出期望正确判断图像的主附件关系单元测试结果实际输入数据无实际处理情况描述成功进行主附件关系判断实际输出主附件关系判断结果正确测
28、试结论正确单元测试子项002编号5.002 程序设计人员陈时康、王勇测试人员王勇、王品测试目的重点监督判断测试内容描述按照配置的重点监督业务表判断图像是否需要重点监督输入期望无功能处理期望描述按照配置的重点监督业务表判断图像是否需要重点监督输出期望重点监督标志设置正确单元测试结果实际输入数据无实际处理情况描述成功判断图像是否需要重点监督实际输出重点监督标志设置正确测试结论正确2.6 差错处理单元测试计划标识差错登记. ErrorSheetBras组件功能项本模块负责验证C/S差错登记接口针对概要/详细设计文件名稽核监督及操作风险监控系统项目概要设计说明书V1.0.0物理文件名ErrorBook
29、InDlg.h ErrorSheetBras.hErrorBookInDlg.cpp ErrorSheetBras.cpp单元测试子项001 编号6.001 程序设计人员王勇测试人员王勇测试目的检验图像差错登记测试内容描述输入差错的类型、发生日期、机构号、柜员号及状态等信息,要求能够正确显示在差错登记界面,并可以成功登记入差错表中输入期望通过结构体ERRORSTRUCT传入业务日期、发生机构、发生柜员等信息功能处理期望描述通过接口输入的差错类型、业务日期等信息可以正确地反映在差错登记页面上,同时可以输入补充信息,在开始登记时,将所有信息写入差错表中输出期望登记差错成功标志单元测试结果实际输入数
30、据差错类型:影像系统发生日期:=20091111 and =20091107 and =20091109 and occur_date 0,则返回true输入期望dwPageID=1001000功能处理期望描述能够正确判断,该模板是否已经获得版面特征信息输出期望True单元测试结果实际输入数据dwPageID=1001000实际处理情况描述根据传入的模板ID1001000,查询到该版面的版面类型,并返回成功实际输出true测试结论正常单元测试计划标识FormStudioDT.CFormStudioDTView组件功能项设置浮动区域针对概要/详细设计文件名稽核监督及操作风险监控系统项目概要设计说
31、明书V1.0.0物理文件名FloatField.cppFloatField.h编号10.003程序设计人员王勇 测试人员王勇、王品测试目的测试当前鼠标是否在浮动区域上划过测试内容描述调用PointOverFloatField(CPoint pt)pt为当前鼠标的点(屏幕坐标)输入期望鼠标划过界面的动作,不经过浮动区域功能处理期望描述首先获得图像的偏移位置,求得鼠标相对于图像的相对位置,然后调用IsPointInRect(pt,rc),判断该点是否在浮动区域矩形范围内,如果在,则返回true,否则返回false输出期望false单元测试结果实际输入数据鼠标划过界面的动作,不经过浮动区域实际处理情
32、况描述首先获得图像的偏移位置,求得鼠标相对于图像的相对位置,然后调用IsPointInRect(pt,rc),判断该点不在浮动区域矩形范围内,则返回false实际输出false测试结论正常单元测试结果实际输入数据鼠标划过界面的动作,经过浮动区域实际处理情况描述首先获得图像的偏移位置,求得鼠标相对于图像的相对位置,然后调用IsPointInRect(pt,rc),判断该点在浮动区域矩形范围内,则返回true实际输出true测试结论正常2.11 系统配置单元测试计划标识CSBANKIPS.DataArchive.CMainFrame 组件功能项系统配置(数据库初始化、系统参数配置)针对概要/详细设
33、计文件名稽核监督及操作风险监控系统项目概要设计说明书V1.0.0物理文件名目录:CSBANKIPSsunsysconfigue单元测试子项001编号11.001 程序设计人员陈时康测试人员王品测试目的数据库初始化测试内容描述完成系统初始化的系列操作,包括创建各个数据库、数据表,导入初始化的数据输入期望脚本正确功能处理期望描述成功创建数据库、数据表,初始化数据输出期望成功创建数据库、数据表,初始化数据单元测试结果实际输入数据正确的脚本实际处理情况描述数据库、数据表顺利创建,初始化数据导入成功实际输出数据库初始化成功测试结论正确单元测试子项002编号11.002 程序设计人员陈时康测试人员王品测试
34、目的系统参数配置测试内容描述配置各种系统参数输入期望正确的参数信息功能处理期望描述方便输入参数信息,并成功保存参数信息到数据库中输出期望保存参数信息成功单元测试结果实际输入数据正确的参数信息:data_flag,12,重控子系统实际处理情况描述在字典表中插入记录,输入上述参数信息,保存到数据库中实际输出成功保存信息测试结论正确3分析摘要本项目的单元测试基本以每一个系统程序开发人员为单位,在以单元测试计划的文档指导下,文档所提及的测试范围以及测试需求都得到比较好的贯彻。同样,由于把单元测试分散在每个程序员的开发编码过程中,有利于提高代码的质量,减少了代码中可能存在错误隐患。每个程序员对自己开发的
35、代码是最熟悉的,所以通过这种自己开发,自己测试的方式,可以养成程序员良好的编码习惯。综上所述,这次项目的单元测试满足了项目对软件质量的要求,并且已经可以进行下一阶段系统、集成测试。4测试资源消耗(无)附录资料:不需要的可以自行删除 busybox详解制作根文件系统详解制作根文件系统 一、FHS(Filesystem Hierarchy Standard)标准介绍当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。该标准规定了根目录下各个子目录的名称及其存放的内容:目录名存放的内容/
36、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用来提供内核
37、与设备信息的虚拟文件系统,由内核自动生成目录下的内容/mnt文件系统挂接点,用于临时安装文件系统/tmp临时性的文件,重启后将自动清除制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括:编译安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录 利用交叉编译工具链,构建/lib目录 手工构建/etc目录 手工构建最简化的/dev目录 创建其它空目录 配置系统自动生成/proc目录 利用udev构建完整的/dev目录 制作根文件系统的jffs2映像文件 下面就来详细介绍这个过程。二、编译安装busybox,生成/bin、/sbin、/us
38、r/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配置busyboxbusybox配置主要分两部分。第一部分是Busyb
39、ox 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的软链接还是硬链接。我们选择软链接。3)、Installation Options - (/work/
40、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的支持的几百个命令分门别类。我们只要在各个门类下选择想要的命令即可。这里我们基本保持默认设置。1)选中Networking U
41、tilities - 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-desktop:/work/nfs_root/fs_mini3$ lsb
42、in 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 - busybox-rwxr-xr-x 1 dennis dennis 7496
43、32 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以它娇小的身躯容纳了数以百计的命令代码,实在是让人佩服不已,其不愧嵌入式系统瑞士军刀之美誉。据说,busybox的作者身患绝症,这更让人钦佩
44、GNU开源软件的作者们。 三、利用交叉编译工具链,构建/lib目录 光有应用程序(命令)是不够的,因为应用程序本身需要使用C库的库函数,因此还必需制作for ARM的C库,并将其放置于/lib目录。my god,要自己写C库的源代码吗?不用!还记得交叉编译工具链的3个组成部分吗?交叉编译器、for ARM的C库和二进制工具。哈哈,for ARM的C库是现成的,我们只需要拷贝过来就可以了。遗憾的是:整个C库目录下的文件总大小有26M。而我们根文件系统所在分区不过区区16M而已,根本放不下。怎么办呢? dennisdennis-desktop:/work/nfs_root/fs_mini3$ du
45、 -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),在链接库文件时这些文件会被用到,比如他们列出了当前库文件所依赖的其它库文件,程序运行时无需这些文件 gconv目录,里面是各种链接脚本,在编译应用程序时,他们
46、用于指定程序的运行地址,各段的位置等 静态库文件(.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/tools/gcc-3.4.5-glibc-2.3.6/arm-linu
47、x/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.10 x00000001 (NEEDED) Shared library
48、: 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 dennis dennis 30700 2008-01-22 05:32 libc
49、rypt-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.4.5-glibc-2.3.6/arm-linux/lib$ ls -l
50、 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.sodennisdennis-desktop:/work/tools/gc
51、c-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 15:38 libc.so.6 - libc-2.3.6.so 4个文件中
52、的.a文件是静态库文件,是不需要拷贝的。另外3个文件是: 实际的共享链接库:libLIBRARY_NAME-GLIBC_VERSION.so。当然需要拷贝。 主修订版本的符号链接,指向实际的共享链接库:libLIBRARY_NAME.so.MAJOR_REVISION_VERSION,程序一旦链接了特定的链接库,将会参用该符号链接。程序启动时,加载器在加载程序前,会检索该文件。所以需要拷贝。 与版本无关的符号链接,指向主修订版本的符号连接(libc.so是唯一的例外,他是一个链接命令行:libLIBRARY_NAME.so,是为编译程序时提供一个通用条目)。这些文件在程序被编译时会被用到,但在
53、程序运行时不会被用到,所以不必拷贝它。关于共享库的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.
54、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$ mkdir /work/nfs_root/fs_mini3/lib dennis
55、dennis-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.5-glibc-2.3.6/arm-linux/lib$ cp libm-
56、* /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-desktop:/work/tools/gcc-3.4.5-glibc-2.
57、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,所以我们至少要手工编写init的主配置文件inittab。busybox的inittab文件的
58、语法、语义与传统的SYSV的inittab有所不同。 inittab文件中每个条目用来定义一个需要init启动的子进程,并确定它的启动方式,格式为:。例如:ttySAC0:askfirst:-/bin/sh 表示子进程要使用的控制台,若省略则使用与init进程一样的控制台 表示运行级别,busybox init程序这个字段没有意义 表示init进程如何控制这个子进程 sysinit:系统启动后最先执行,只执行一次,init进程等待它结束后才继续执行其它动作 wait:系统执行完sysinit条目后执行,只执行一次,init进程等待它结束后才继续执行其它动作 once:系统执行完wait条目后执
59、行,只执行一次,init进程不等待它结束 respawn:启动完once进程后,init进程监测发现子进程退出时,重新启动它 askfirst:启动完respawn进程后,与respawn类似,不过init进程先输出” Please press Enter to activate this console“,等用户输入回车后才启动子进程 shutdown:当系统关机时 restart:Busybox中配置了CONFIG_FEATURE_USE_INITAB,并且init进程接收到SIGUP信号时执行,先重新读取、解析/etc/inittab文件,再执行restart程序 ctrlaltdel:
60、按下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脚本文件/etc/init.d/rcS的权限,以使其可被执行:# chmod
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学生旅游协议书
- 设施农用地转用协议书
- 物联网金融AI应用行业深度调研及发展项目商业计划书
- 房屋代保管协议书
- 电路板镀金工艺行业跨境出海项目商业计划书
- 増股东投资协议书
- 证券审计AI应用行业跨境出海项目商业计划书
- 乡村徒步与自行车道行业跨境出海项目商业计划书
- 高端果蔬分析仪行业跨境出海项目商业计划书
- 私人承包混凝土协议书
- 基于ABB工业机器人自动化搬运工作站的设计
- 小儿积食健康宣教知识讲座
- 商超便利店行业分析报告
- 导游讲解员暨景区(点)讲解员大赛评分表
- 供应商审核检查表(铸造类专用)
- 高级护理实践智慧树知到课后章节答案2023年下浙江中医药大学
- 2价HPV疫苗接种知情同意书
- 2023-2024学年宝鸡市数学六年级第一学期期末统考试题含答案
- EXCEL-化学锚栓计算书
- 管道酸洗钝化记录
- 师德师风负面清单及整改台账
评论
0/150
提交评论