




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/学号:课课程论文题目移植关键技术分析学院信息工程学院专业电子信息工程班级姓名指导教师2017年6月6日
移植关键技术分析1简介(1)在嵌入式操作系统中,是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像那样的固件程序(注,有的嵌入式也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由来完成。是嵌入式系统在加电后执行的第一段代码,在它完成和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。[1]
对于嵌入式系统,是基于特定硬件平台来实现的。因此,几乎不可能为所有的嵌入式系统建立一个通用的,不同的处理器架构都有不同的。不但依赖于的体系结构,而且依赖于嵌入式系统板级设备的配置。对于2块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的程序也能运行在另一块板子上,一般也都需要修改的源程序。反过来,大部分仍然具有很多共性,某些也能够支持多种体系结构的嵌入式系统。例如,就同时支持、、和X86等体系结构,支持的板子有上百种。通常,它们都能够自动从存储介质上启动,都能够引导操作系统启动,并且大部分都可以支持串口和以太网接口。在专用的嵌入式板子运行系统已经变得越来越流行。一个嵌入式系统从软件的角度看通常可以分为四个层次:1、引导加载程序。包括固化在固件()中的代码(可选),和两大部分。2、内核。特定于嵌入式板子的定制内核以及内核的启动参数。3、文件系统。包括根文件系统和建立于内存设备之上文件系统。通常用来作为。4、用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式有:和等。通常,是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的几乎是不可能的。尽管如此,我们仍然可以对归纳出一些通用的概念来,以指导用户特定的设计与实现。(2)启动方式上电后会从某个地址开始执行。比如结构的会从000000取第一条指令,而结构的则从地址0x0000000开始。嵌入式开发系统中,需要把存储器件或等映射到这个地址,就存放在这个地址的开始处,这样一上电就可以执行。在开发时,通常需要使用各种命令操作,一般通过串口来连接和开发板,可以在串口上输入各种命令,观察运行结果等。这也只是对开发人员才有意义,用户使用产品时是不用接口接串口来控制的。从这个观点来看,可以分为以下两种操作模式1)启动加载模式(模式)上电后,从板子上的某个固态存储设备上将操作系统加载到上运行,整个过程并没有用户的介入。产品发布时,工作在这种模式下。2)下载模式(模式)在这种模式下,开发人员可以使用各种命令通过,通过串口连接或网络设备等通信手段从主机下载文件,将他们直接放在内存运行或是烧入类固态存储设备中。像或等这样功能强大的通常支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。比如在启动时处于正常的启动加载模式,但是,他会延时若干秒,等待终端用户按下任意键,而将切换到下载模式下。如果在指定时间内没有用户按键,则继续启动内核。(3)启动过程的启动过程可以分为单阶段、多阶段两种。通常多阶段的能提供更为复杂的功能及更好的可移植性,从固态存储设备上启动的大多都是两阶段的启动过程,第一阶段使用汇编来实现,它完成一些依赖于体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用C语言来实现,这样可以实现更复杂的功能,而且代码会有更好的可读性和可移植性。一般而言,这两个阶段完成的功能可以如下分类。第一阶段的功能硬件设备初始化为加载第二阶段代码准备空间复制第二阶段代码到空间中设置好栈跳转到第二阶段的C入口点在第一阶段进行的硬件初始化一般包括:关闭、关中断、设置速度和时钟频率、初始化等。这些都不是必须的,甚至将第二阶段的代码复制到空间中也不是必须的,对于等存储设备,完全可以直接在上面执行代码。只不过执行效率会相比中大大降低。第二阶段的功能初始化本阶段要使用到的硬件设备检测系统内存映射将系统内核映像和根文件系统映像从读到空间中。为内核设置启动参数调用内核为了方便开发,至少要初始化一个串口以便程序员与进行交互。所谓检测内存映射,就是确定板子上使用了多少内存、他们的地址空间是什么。由于嵌入式开发中多是针对某类板子进行编写,所以可以根据板子的情况直接设置,不需要考虑可以适用于各类情况的复杂算法。上的内核映像有可能是经过压缩的,在读到之后,还需要进行解压。对于有自解压功能的内核,不需要来进行解压。将根文件系统复制到中,这不是必须的。这取决于是什么类型的根文件系统以及内核访问它的方法。将内核放到适当的位置后,直接跳入到它的入口点即可调用内核。
2常用命令(1)的常用命令方法进入控制界面后,可以运行各种命令,比如下载文件到内存,擦除、读写,运行内存、、中的程序,查看、修改、比较内存中的数据等。使用各种命令时,可以使用其开头的若干字母代替他。比如命令,可以使用t、、、等字母代替,只要其它命令不以这些字母开头即可。当运行一个命令后,如果他是可重复执行的(代码中使用定义这个命令时,第三个参数是1)若想再次运行可以直接输入回车。接收的数据都是16进制的,输入时可省略前缀0x。1)帮助命令运行命令可以看到命令中所有命令的作用,如果要查看某个命令的使用方法,可以运行“命令名”来查看。2)下载命令支持串口下载、网络下载,相关命令有:、、、和、。前几个串口命令使用的方法类似,以命令为例,他的使用方法为[][]。“[]”表示里面的参数可以省略,表示文件下载后存放的内存地址,则表示使用的波特率。如果参数省略,则表示使用当前的波特率。如果参数省略,存放的地址为配置文件中定义的宏。命令使用协议从服务器下载文件,服务器的地址为环境变量,他的使用方法为[][]。表示文件下载后存放的内存地址,表示要下载的文件的名称。若省略,存放的地址为配置文件中定义的宏;若省略,则使用开发板的地址构造一个文件名,比如开发板为192.168.1.17,则默认的文件名为C0A800711。命令使用协议下载命令,用法为[][]。其中表示服务器地址。3)内存操作命令常用的命令有:查看内存命令、修改内存命令、填充内存命令、复制命令。这些命令都可以带上后缀“”“”“”表示以字节、字、双字为单位进行操作。其中,命令用法为[][]。表示以字节、字、双字为单位,显示从地址开始的个内存数据。命令的用法为[]。表示以字节、字、双字为单位,从地址处开始修改内存数据,执行命令后,输入新数据并回车后,地址会自动增加,按退出。命令用法为[]。表示以字节、字、双字为单位,从源地址开始的内存复制个数据到目的地的内存。4)操作命令常用的命令有查看命令的命令、加/解写保护命令、擦除命令。由于的接口与一般内存相似,所以一些内存命令可以在上使用,比如读时可以使用、命令,写时则可以使用命令。直接运行即可看到的信息,有的型号、容量、各扇区的开始地址、是否只读等信息。对于只读的扇区,在擦除、烧写他之前,要先解除写保护。命令的常用格式为,擦除的地址为。,表示擦除所有。操作命令操作命令只有一个:。根据不同参数进行不同的操作,比如擦除、读取、烧写等。,查看的信息。[][],擦除。表示要擦除的开始偏移地址的长度,若省略,则表示要擦除整个。[2],表示从开始的内存中,读或写个字节数据,是否加后缀2的区别是操作时的校验方法不同。,将偏移地址的一个扇区的数据打印出来,包括数据。
3移植开发板2410的配置适用于大多数S3C2440开发板,或者只需要极少数的修改即可使用。但是目前中没有S3C2440的支持,需要进行移植。2410开发板已经支持芯片29800,本身也已经支持2文件系统映像的烧写。下面一步一步移植。(1)同时支持S3C2410和S3C24401)新建一个开发板的相应目录和文件为了不破坏原来的代码,在目录下将2410复制为10024x0目录,并将10024x02410改名为10024x0。在目录下建立一个配置文件10024x0。还要修改两个,首先在顶层中增加如下两行:10024x0:@$()$()320t10024x0s3c24x0然后在10024x0中进行如下修改(因为前面将2410文件改名为10024x0了):改为10024x02)修改的配置的初始化在的第一阶段完成,就是在10024x0文件中设置存储控制器。检查一下6的设置:位宽为32,宏B6刚好为32,无需改变;另外还要根据设置的刷新参数,主要是寄存器。由于开发板的设为100,需要根据芯片的具体参数重新计算寄存器的值。代码修改如下:1261113/*15.660,(2048+1-15.6*60)*/改为1260x4f4/*7.8125100*/对于其它,比如网卡芯片8900所在的2,原来的配置刚好匹配,无需更改;而对于1、2、4、5、7,在中并没有使用到他们外接的设备,无需理会。3)增加对S3C2440的支持S3C2440是S4C2410的改进版,他们的操作基本相似。不过在系统时钟设置。控制器的操作等方面有一些小差别,他们的、计算公式不一样,、和的分频化设置也不一样,这在下面的代码中可以看到控制器的差别在增加对支持时讲述。对于S3C2410开发板,将设为200,分频比为1:2:4;对于S3C2440开发板,将设为400,分频比为1:4:8。还将设为48,即为48,以在内核中支持控制器。首先修改10024x02410中的函数,下面是修改后的代码。(见附录代码1)上面的代码针对S3C2410、S3C2440分别定义了、寄存器的值。开发板输入时钟为12。针对S3C2410、S3C2440分别使用不同的宏设置系统时钟。(见附录代码2)最后一步:获取系统时钟的函数针对S3C2410、S3C2440的不同进行修改。在后面设置串口波特率时需要初始化串口时,会调用函数。前面的函数在识别出S3C2410或S3C2440后,设置了机器类型:→→,后面的函数可以通过它来分辨是S3C2410还是S3C2440.首先要在程序的开头增加如下一行,这样才可以使用变量。;S3C2410和S3C2440的、计算公式不一样,所以函数也需要修改。由于分频系数的设置方法不一样,、也需要被修改。对于S3C2410,沿用原来的计算方法,分支中是S3C2440的代码。(见附录代码3)现在重新执行”10024x0”和””生成的文件既可以运行于2410开发板也可以运行于2440开发板。将他烧入后启动,就可以在串口工具中看到提示信息,可以输入各种命令操作了。4)选择型号所使用的开发板中型号为29800,而在下载的配置文件10024x0中的默认型号为29400。需要进行修改。0400 1 /*a400*/800 1 /*a800*/修改好对的支持后,重新编译:、,运行后可以在串口中看到如下字样::1现在可以使用、等命令通过串口下载文件,然后使用、命令擦除、烧写了,其效率高于好几倍。(2)支持串口协议命令需要配合下的工具使用,命令通过串口协议来传输文件。下的超级终端虽然支持,但他的使用界面不好用。为了方便在下的开发,现在增加对的支持,即增加一个命令。依照的实现来编写代码,首先要使用宏来增加命令。(见代码4)其次,在函数增加对命令的处理分支。也是依照来实现。(见代码5)在第288行调用函数,他是依照实现的一个新函数。①首先在文件开头增加函数声明,然后复制函数为函数,稍作修改。②将局部函数组命名为,并在后面使用到的地方统一做修改,这只是为了与函数名称一致。③的值从改为重新编译烧写后,就可以使用命令下载文件了。(3)支持网卡芯片8900使用串口来传输文件的速率太低,现在增加对网卡芯片8900的支持。由于网卡芯片8900的连接方式与2410完全一样,所以现在的中已经支持8900了,他的驱动程序为8900。只要在控制界面中稍加配置就可以使用网络功能。使用网络之前,先配置开发板地址、地址、服务器地址,比如可以在中执行以下命令:192.168.1.1708:00:3e:26:0a:5b192.168.1.11然后就可以使用或命令下载文件了,注意服务器上要开启或服务。比如可以使用如下命令将文件下载到内存0x30000000中:0x30000000或0x30000000192.168.1.57可以修改配置文件,让网卡各个默认的值就是上面的值。首先,8900接在S3C2410、S3C2440的3,位宽为16,使用、信号,在设置存储控制器时要先设置好3。代码在10024x0中。B3 0x0 /*0*/B3 0x3 /*4*/B3 0x7 /*14*/B3 0x1 /*1*/B3 0x0 /*0*/B3 0x3/*6*/B3 0x0 /**/接下来还要确定8900的基地址。这在配置文件10024x0中定义:8900 1 /*a8900*/8900 0x19000300890016 1/**/网卡8900的访问基址为0x19000000,之所以再便宜0x300是由他的特性决定的。最后,还是在配置文件10024x0中定义8900的各个默认地址。 08:00:3e:26:0a:5b255.255.255.0 192.168.7.17 192.168.7.11如果要增加命令,还可以在配置文件10024x0的宏中增加。(见代码6)(4)支持1.16中对的支持有新旧两套代码,新代码在目录下,旧代码在目录下。文档对这两套代码有所说明:使用旧代码代码需要定义更多的宏,而新代码移植自内核2.6.12更加智能,可以自动识别更多型号的。目前之所以还保留旧的技能,是因为两个目标板、使用系统,他们还依赖于旧代码。当相关功能移植到新代码中后,旧的代码将从中除去。要让支持,首先在配置文件10024x0的宏中增加。然后选择使用哪套代码:在配置文件中定义宏则使用旧代码,否则使用新代码。使用旧代码时,需要实现中使用到的各种宏新代码的移植没有现成的文档,可以在配置文件宏10024x0的中增加后就编译代码,然后一个一个解决出现的错误。或者增加如下3个宏。在的驱动程序中,设备是逻辑上的概念,表示一组相同结构、访问函数相同的芯片。若开发板中只有一个芯片,故设备数为1,芯片数为1。011修改配置后再次编译,现在只有一个错误,函数未定义,调用函数的过程为的初始化入口函数函数在的中被调用;函数在中实现,它调用相同文件中的函数;函数先调用函数来初始化设备,最后才是统一的识别过程。从函数的名称就可以知道他是平台/开发板相关的函数,需要自己编写。本书在9203c24x0目录下新建一个文件,在里面针对S3C2410、S3C2440实现了统一的函数。在编写函数的之前,需要针对S3C2410、S3C2440控制器的不同来定义一些数据结构和函数。在3c24x0文件中增加2440数据结构。在3c2410文件中仿照S3C2410函数S3C2440函数。文件中分别针对S3C2410、S3C2440实现了最底层访问函数,并进行了一些硬件的设置(比如时序、使能控制器等)。新的代码对的封装做得很好,只要向上提供底层初始化函数来设置好平台/开发板相关的初始化、提供底层接口即可。最后,只要将新建的文件编入中就可以擦除、读写了。如下修改9203c24x0文件即可。修改前:=i2\修改后:=i2\现在可以使用新编译的烧写内核映像到去了。(5)修改默认配置参数以方便使用前面移植网卡芯片8900时,已经设置过默认地址等。为了使用时减少一些,现在修改配置文件10024x0,增加默认配置参数,其中一些在移植过程中已经增加的项也再次说明。1)启动参数增加如下三个宏:11 "30"2)自启动命令增加如下两个宏: 2 "20x300070;0x300070"3)默认网络设置根据具体网络环境增加、修改下面四个宏 08:00:3e:26:0a:5b255.255.255.0 192.168.7.17 192.168.7.11
4心得体会作为嵌入式操作系统内核运行前运行的第一段代码,其重要性不言而喻。但由于搭载嵌入式操作系统的板子各有其硬件配置,所以不能使用同一套代码去启动嵌入式操作系统,需要对其进行相应的修改即移植后才能用来启动对应的板子。在移植中首先要明确的是已有的代码中的配置文件同你手上的板子的配置有什么不同。通过修改、修改系统时钟、选择型号等步骤完成移植的第一步(可以进行修改系统默认配置参数以备方便的使用)。然后根据需要选择相应的配置进行修改移植,如对串口协议支持,网卡8900支持,烧写文件系统映像的支持,的支持等等。通过本次论文,我查阅了大量资料,学到了很多课堂上没有的知识,特别是由于对嵌入式操作系统的不熟悉,我在学习中碰到了很多困难,所幸在与同学的探讨之后终于顺利完成本次论文,理解了移植其方法和意义,可以说受益匪浅。
5参考文献[1]王志英.嵌入式系统原理与设计.北京:高等教育出版社,2007.11[2]徐端全.嵌入式系统原理与设计.北京:北京航空航天大学出版社,2009.9[3]陈文智,王总辉.嵌入式系统原理与设计.北京:清华大学出版社,2011.5[4]胡尔佳.深入理解.机械工业出版社,2016.7[5]李建祥.嵌入式系统开发入门宝典.北京:清华大学出版社,2016.4
6附录代码1:增加对S3C2410、S3C2440系统时钟的宏定义/*S3C2440:=(2*m*)/(p*2^s),=(m*)/(p*2^s)*m=M(M)+8,p=P(P)+2*/S3C2440400((0x5c<<12)|(0x01<<4)|(0x01))S3C2440200((0x5c<<12)|(0x01<<4)|(0x02))S3C2440100((0x5c<<12)|(0x01<<4)|(0x03))S3C244096((0x38<<12)|(0x02<<4)|(0x01))S3C244048((0x38<<12)|(0x02<<4)|(0x02))S3C2440(0x05)|(1<<3))/*=1:4:8,=2*/S3C24401880x04/*=1:8:8*/S3C2440188((0<<8)|(1<<9))/*=1:8:8*//*=16.9344*/S3C244039916 ((0x6e<<12)|(0x03<<4)|(0x01))S3C24404816((60<<12)|(4<<4)|(2))/*S3C2410:=(m*)/(p*2^s)*m=M(M)+8,p=P(P)+2*/S3C2410200((0x5c<<12)|(0x04<<4)|(0x00))S3C241048((0x28<<12)|(0x01<<4)|(0x02))S3C24100x03/*=1:2:4*/代码2:系统时钟设置函数(){S3C24X0*=S3C24X0();S3C24X0*=S3C24X0();/**/>=0x007;>=0x00044555;>=0x000007;>=0;>=0x0000;>=0;>=0x0000;>=0;>=0x0000;>=0x000055;>=0x000000;>=095;>=0x0000;>=0x002;>=0x000007;/*S3C2410S3C2440,.100*/(3C2410){/*2410*/>>=2410;}{/*2440*/>>=3C2440;}/**/>>=0x30000100;0();();0;}代码3:由于分频系数的设置方法不一样,、也需要被修改。增加对S3C2440的、函数。S3C2440(1<<0)S3C2440(3<<1)S3C24401(0<<1)S3C24402(1<<1)S3C24404_8(2<<1)S3C24403_6(3<<1)S3C2440(1<<3)S3C2440(0<<0)S3C2440(1<<4)S3C24403(1<<8)S3C24404(1<<9)S3C2440(1<<12)/**/(){S3C24X0*=S3C24X0();;;=1;/*S3C2410S3C2440,.100*/(3C2410)((>&0x2)?()/2:());{=>;=>;/**/(&S3C2440){S3C24401:=1;;S3C24402:=2;;S3C24404_8:=(&S3C24404)?8:4;;S3C24403_6:=(&S3C24403)?6:3;;}-((>&0x2)?()/2:());()/;}}/**/(){S3C24X0*=S3C24X0();;;=1;/*S3C2410S3C2440,.100*/(3C2410)((>&0x1)?()/2:());{=>;=>;/**/(&S3C2440){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025苏教版七年级编程基础教学计划
- 公司日常运营管理改进计划
- 饮料、酒及酒精专用原辅料项目安全评估报告
- 幼儿园新冠疫情防控计划
- 农业及生物工程技术推广服务项目安全评估报告
- 旅游纪念品推介书
- 2025年幼儿园体育活动安全工作计划
- 第三方软件项目风险评估报告
- 台式钻床操作规程
- 2025通讯行业设施综合检修计划
- 生物会考试题及答案
- 2025年哈尔滨传媒职业学院单招职业技能测试题库新版
- 2025届武汉市二调数学质量分析正式版【课件】
- PLC应用技术课件 任务20 S7-1200 PLC控制步进电机
- 2025至2030年中国合成闸瓦数据监测研究报告
- 2025年山东省职教高考《英语》高频必练考试题库400题(含答案)
- DeepSeek原理与效应+DeepSeek深度分析解读
- 老年骨质疏松性疼痛诊疗与管理中国专家共识2024解读课件
- 湖北省新八校协作体2024-2025学年高三下学期2月联考数学试题 含解析
- 2025年四级作文预测
- 拆除工程专项施工方案和技术措施
评论
0/150
提交评论