|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
以后一定会坚持多读些相关的书籍,在这里也要感谢一下“清源教育”的老师对我学习中极大的帮助,每次有不懂得问题,都及时得到了他们的回答。0弁言
32位ARM嵌进式处置用具有高功能、低功耗、高性价比的特征,已被普遍使用于消耗电子产物、无线通讯、把持和收集通讯等范畴。uCLinux是专门为无MMU处置器计划的嵌进式操纵体系,已撑持ARM、Motorola等微处置器。今朝接纳ARM+uCLinux作为嵌进式体系的一种开辟形式十分广泛。
一个基于uCLinux的完全的嵌进式体系由三个部分构成,即体系引诱程序Bootloader、uCLinux操纵体系内核和文件体系。嵌进式体系的启动引诱手艺是嵌进式体系开辟的一个难点,体系启动引诱的乐成与反对定了使用程序的运转情况是不是能准确创建,体系启动乐成是使用准确运转的条件。而uCLinux内核的启动历程也是个中主要一环,剖析uCLinux的启动历程,能够加速体系启动速率、准确创建使用情况。本文要研讨的就是uCLinux操纵体系内核的启动历程。
1体系简介
本体系接纳SamSung公司的Arm7TDMI内核的S3C4510B处置器,次要使用其壮大的收集功效,与PC机举行收集通讯。该体系的次要功效是使用串口监测一种智能电表,将取得的数据经由过程Internet传给PC机,由PC机再做进一步的处置,将终极了局出现给用户。
硬件平台包含一个以ARM为内核的处置器、存储器利用2MB的Flash和16MB的SDRAM,内部接口除通讯的串口,还外接了一个以太网接口,以撑持S3C4510B的收集功效。软件平台由以下部分构成:体系引诱程序Bootloader、嵌进式操纵体系内核、文件体系。
依据内核是不是紧缩和内核是不是在当地实行,uCLinux一般有两种启动体例:flash当地实行体例和紧缩内核加载体例。本体系接纳第二种启动计划,即内核的紧缩映象固化到flash上,体系启动时在内存中解压,然后在内存中实行,这类启动体例比拟第一种体例运转速率更快。
2uCLinux内核启动历程的完成
可将ARM+uCLinux体系的启动历程总结为以下几个阶段:(1)PC指向复位地点出口处,即0x0H处的Bootloader代码。Bootloader完成一些基础的初始化,将体系的软硬件情况带到一个符合的形态;(2)Bootloader将把持权交给操纵体系内核的引诱程序后,入手下手uCLinux内核的加载;(3)uCLinux内核加载引诱完成,启动init历程,完成体系的引诱历程。
本体系的启动计划接纳uCLinux自带的引诱程序加载内核。在内核启动过程当中次要挪用这几个文件:head.S(在linux-2.4.xarcharmnommuootcompressed目次下)、main.c(在linux-2.4.xinitinit目次下)、simpleinit.c(在userinit目次下)[1]。实践使用中应依据硬件平台和体系功效,修正相干文件,以准确地引诱体系。
当Bootloader将把持权交给内核的引诱程序时,第一个实行的程序就是head.S,它完成了加载内核的年夜部合作作;misc.c则供应加载内核所必要的子程序,个中解压内核的子程序是head.S挪用的主要程序,别的内核的加载还须晓得体系的硬件信息,该硬件信息在hardware.h中界说并被head.S所援用。本体系中内核的启动流程如所示。
<br>
本体系中,head.S起首设置S3C4510B的体系存放器SYSCFG、初始化体系的Flash、SDRAM和总线把持存放器,将Flash和SDRAM的地点局限分离设置为0x0-0x1fffff和0x1000000-0x1ffffff;依据本体系的功效特性,从头界说了中止优先级和I/O口的设置;为了进步内核的运转速率,将2M的内核映像文件从Flash拷贝到SDRAM;经由过程操纵一些体系存放器,举行体系的存储重视映照,将Flash和SDRAM的地点区间分离重映照为0x1000000-0x11fffff和0x0-0xffffff;然后初始化体系仓库;接着挪用misc.c中的函数decompress_kernel,对拷贝到SDRAM的内核映像文件举行解紧缩;最初跳转到实行挪用内核函数call_kernel,挪用call_kernel函数实践上是实行main.c中的start_kernel函数,该函数完成的功效包含处置器布局的初始化、中止的初始化、准时器的初始化、历程相干的初始化和内存初始化等初始化事情;最初内核创立一个init线程,在该线程中挪用init历程,完成体系的启动[1][2]。
值得再次注重的是,在内核启动过程当中,挪用了在文件hardware.h中界说的与硬件有关的信息。基于Linux的嵌进式体系的启动是严峻依附于硬件平台的,在内核启动引诱前,必需依据硬件平台和体系功效,修正需要的文件[2]。本体系中就修正了hardware.h中的flash、SDRAM的把持存放器ROMCON0、DRAMCON0和SYSCFG等。
uCLinux启动时,运转一个叫做init的程序,它是由操纵体系启动的用户级历程,由它来启动前面的义务,包含多用户情况、收集等。init历程的举动是在函数simpleinit.c中界说的,以是可依据体系的功效定制init历程的举动,如在本体系中到场了串口把持程序,还能够使用printk函数打印出需要的调试信息。当init历程启动时,它读取一个运转把持文件rc和一个设置文件inittab。在嵌进式使用中,一样平常必要在操纵体系运转起来后立即运转用户的特定程序,为此可思索修正这两个文件。本体系中就是得当地修正了inittab文件和rc文件,以使体系启动后即运转一些特定历程。在程序inittab.c中修正inittab文件,然后经由过程向init历程发送SIGHUP旌旗灯号,即kill(1,SIGHUP),使init历程从头读取设置文件inittab[3]。
inittab.c文件中的部分代码以下:
FILE*pFile;
if((pFile=fopen("/etc/inittab","w"))!=NULL){
fprintf(pFile,"pollmeter:unknown:/bin/pollmeter");
fprintf(pFile,"netcomm:unknown:/bin/netcomm");
……
}
......
kill(1,SIGHUP);//init历程的ID即是1
……
在启动过程当中另有一个主要的链接剧本文件,在该文件中指了然内核的出口地点。
总之,uCLinux的启动历程也较庞大,个中要挪用很多文件,要能准确的启动uCLinux操纵体系,就必需依据硬件平台和体系功效,修正相干的源代码文件。
3停止语
本文剖析了内核的启动引诱历程,并依据使用体系的特性修正了启动代码和需要的相干文件,完成了uCLinux内核的准确引诱。实践使用标明,本体系的启动计划准确牢靠。本文的剖析计划办法对嵌进式Linux的开辟有很年夜的自创代价,信任Linux在嵌进式体系中的使用必定会愈来愈广[4]。
参考文献:
[1]uCLinux内核源代码包20040408,内核版本2.4.18
[2]《ARM使用体系开辟详解:基于S3C4510B的体系计划》李驹光清华年夜学出书社
[3]《unix历程间通讯》[美]JohnShapleyGray著张宁等译电子产业出书社
[4]《基于Linux嵌进式体系的研讨与完成》盘算机体系使用2004.8
[5]《基于Linux的嵌进式体系的启动计划》电子科技2004.6
原文链接:http://www.mcublog.com/blog/user1/5/archives/2007/20329.html
以后的学习中,一定要多问自己几个为什么,多向有经验的人请教,不要碍于面子。我看重苹果未来的发展,所以我一定要坚持下去,也许别人很容易就学会了的工具,我要学很久,但没关系,因为我始终相信勤能补拙这句话! |
|