乐观 发表于 2015-1-18 11:51:12

IOS编程:嵌进式uCLinux内核启动历程剖析与计划仓酷云

以后一定会坚持多读些相关的书籍,在这里也要感谢一下“清源教育”的老师对我学习中极大的帮助,每次有不懂得问题,都及时得到了他们的回答。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目次下)。实践使用中应依据硬件平台和体系功效,修正相干文件,以准确地引诱体系。
当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历程,完成体系的启动。

值得再次注重的是,在内核启动过程当中,挪用了在文件hardware.h中界说的与硬件有关的信息。基于Linux的嵌进式体系的启动是严峻依附于硬件平台的,在内核启动引诱前,必需依据硬件平台和体系功效,修正需要的文件。本体系中就修正了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。
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在嵌进式体系中的使用必定会愈来愈广。
参考文献:
uCLinux内核源代码包20040408,内核版本2.4.18
《ARM使用体系开辟详解:基于S3C4510B的体系计划》李驹光清华年夜学出书社
《unix历程间通讯》[美]JohnShapleyGray著张宁等译电子产业出书社
《基于Linux嵌进式体系的研讨与完成》盘算机体系使用2004.8
《基于Linux的嵌进式体系的启动计划》电子科技2004.6
原文链接:http://www.mcublog.com/blog/user1/5/archives/2007/20329.html

以后的学习中,一定要多问自己几个为什么,多向有经验的人请教,不要碍于面子。我看重苹果未来的发展,所以我一定要坚持下去,也许别人很容易就学会了的工具,我要学很久,但没关系,因为我始终相信勤能补拙这句话!

爱飞 发表于 2015-1-21 16:22:03

众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。

小魔女 发表于 2015-1-26 17:24:34

首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书

变相怪杰 发表于 2015-1-30 07:34:45

到大三时,学院与我去培训的机构成立了实习基地,并让我们寒假去实习了一段时间,感觉还不错,于是在大四的时候去培训了

因胸联盟 发表于 2015-1-31 07:02:59

中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,

分手快乐 发表于 2015-2-2 11:48:46

首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书

简单生活 发表于 2015-2-6 02:42:56

iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。

若相依 发表于 2015-2-15 03:09:03

要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。

再见西城 发表于 2015-2-15 22:02:13

看《iPhone 4与iPad开发基础教程》,跟着一步步来

admin 发表于 2015-2-22 02:46:43

iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。

透明 发表于 2015-3-6 22:34:22

才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。

若天明 发表于 2015-3-11 01:39:25

学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。

蒙在股里 发表于 2015-3-11 02:06:56

从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,

谁可相欹 发表于 2015-3-13 00:08:27

好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。

仓酷云 发表于 2015-3-18 04:22:44

开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦

乐观 发表于 2015-3-22 05:09:20

近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,

灵魂腐蚀 发表于 2015-4-3 23:18:29

才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。

小妖女 发表于 2015-6-28 22:36:12

以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。

飘灵儿 发表于 2015-6-29 22:34:58

在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解

活着的死人 发表于 2015-7-9 01:17:02

然而,在vmware软件环境下,安装Mac OS X操作系统也是一件非常复杂的事情,而且还有可能花费了大量时间,最后却跑不起来。笔者也是经过了大量的实践,
页: [1]
查看完整版本: IOS编程:嵌进式uCLinux内核启动历程剖析与计划仓酷云