(通信与信息系统专业论文)基于superh架构的android系统移植与设计.pdf_第1页
(通信与信息系统专业论文)基于superh架构的android系统移植与设计.pdf_第2页
(通信与信息系统专业论文)基于superh架构的android系统移植与设计.pdf_第3页
(通信与信息系统专业论文)基于superh架构的android系统移植与设计.pdf_第4页
(通信与信息系统专业论文)基于superh架构的android系统移植与设计.pdf_第5页
已阅读5页,还剩60页未读, 继续免费阅读

(通信与信息系统专业论文)基于superh架构的android系统移植与设计.pdf.pdf 免费下载

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

文档简介

摘要 近年来,伴随着智能型手机的崛起,手机操作系统也逐渐受到重视。以前 手机操作系统大多是手机厂商自行研发且封闭的系统;自g o o g l e 公司开始涉足 手机市场,并着手开发一个完全免费开放的手机操作系统平台a n d r o i d ,全球相 关企业和高校界争先相研究a n d r o i d 系统的开发及应用【l 】【2 1 。 a n d r o i d 系统官方目前只提供对a r m 平刽8 】【9 】【1 0 1 2 1 1 的支持3 3 1 1 3 4 1 1 3 6 1 ,有能力 移植a n d r o i d 系统到非a r m 平台的厂商通常不愿公开移植的步骤和代码。目前 针对a n d r o i d 系统移植尤其是非a r m 硬件架构移植的文献非常稀缺口7 】【3 8 】【3 9 】,故 急需开展非a r m 硬件架构的移植工作。而s u p e r h 6 j 【7 j 是一款r e n e s a sr i s c 嵌入 式微处理器核,是一个有代表性的非a r m 硬件架构。针对以上现状,本文研究 并实现了基于s u p e r h 架构的a n d r o i d 系统移植。 本文主要的工作集中以下几个部分: 论文在分析a n d r o i d 系统与s u p e r h 架构的基础上,提出了u b o o t 、内核、 a n d r o i d 层次化分析及移植思路; 在系统启动内核前,有许多工作要做。例如:需要将硬件设置为稳定状态, 需要将内核加载入主存等,故本文首先以u b o o t 为例分析并实现b o o t l o a d e r 移 植; 在进入a n d r o i d 系统前,必须先启动内核。移植工作量最大的部分是驱动移 植,而内核同驱动密切相关,故本文在分析并实现u b o o t 移植后分析并实现内 核驱动移植,在这部分以三个常用的模块为例实现驱动移植; 内核引导后,不同的系统进入各自的i n i t 进程,进而开始运行用户空间软件。 本文在这部分重点分析并实现c o p y b i t 硬件加速功能,该移植工作涉及用户空间 及内核空间的多个方面,而目前鲜有文献分析论述这部分内容,故本为对该部 分给予了详尽的分析。 在描述移植理论和技术的章节中,本文详细分析了代码的组织结构,逻辑 框架和移植思路。经过将近一年的努力,移植工作已经告一段落。目前使用的 r 2 r 开发板已经可以运行的l i n u x 系统,也可以进入到a n d r o i d 的启动界面,移 植的预期目标完成。 关键词:s u p e r h ;a n d r o i d ;移植;内核 a b s t r a c t i nr e c e n ty e a r s ,a l o n gw i t ht h er i s eo fs m a r tp h o n e s ,m o b i l ep h o n eo p e r a t i n g s y s t e mh a sg r a d u a l l yt a k e ns e r i o u s l y m o s to f t h em o b i l ep h o n eo p e r m i n gs y s t e mi s t h em o b i l ep h o n em a n u f a c t u r e r so w nr & da n dc l o s e ds y s t e m ;s i n c eg o o g l eb e g a n t og e ti n v o l v e di nt h em o b i l ep h o n em a r k e t ,a n ds t a r t e dt od e v e l o pac o m p l e t e l yf r e e a n do p e nm o b i l eo p e r a t i n g s y s t e mp l a t f o r m ,a n d r o i d ,g l o b a lc o m p a n i e s a n d u n i v e r s i t i e ss e c t o rc o m p e t e dp h a s et os t u d yt h ed e v e l o p m e n to ft h ea n d r o i ds y s t e m a n da p p l i c a t i o n t h ea n d r o i ds y s t e mo f f i c i a ls u p p o r tf o rt h ea r m p l a t f o r mh a st h ea b i l i t yt o t r a n s p l a n t a t i o na n d r o i ds y s t e mt oan o n a r mp l a t f o r m s ,m a n u f a c t u r e r sa l eu s u a l l y r e l u c t a n tt oo p e nt h ep o r t a b l es t e p sa n dc o d e f o rt h et r a n s p l a n t a t i o no ft h ea n d r o i d s y s t e me s p e c i a l l yn o n a r ma r c h i t e c t u r e st r a n s p l a n tl i t e r a t u r e i sv e r ys c a r c e ,i ti s u r g e n tt oc a r r yo u tt h et r a n s p l a n t a t i o no fn o n - a r ma r c h i t e c t u r e s s u p e r hi s 岛 r e n e s a sr i s ce m b e d d e dm i c r o p r o c e s s o rc o r e ,i sar e p r e s e n t a t i v eo fn o n - a r m a r c h i t e c t u r e s a b o v et h es t a t u sq u o ,r e s e a r c ha n dt r a n s p l a n t a t i o na n d r o i ds y s t e m b a s e do nt h es u p e r ha r c h i t e c t u r e t h em a i nw o r ko ft h i sp a p e rf o c u so nt h ef o l l o w i n gs e c t i o n s : p a p e r sb a s e do na n a l y s i so ft h ea n d r o i ds y s t e ma n dt h es u p e r ha r c h i t e c t u r e , u b o o t ,k e r n e l ,a n d r o i d - l e v e la n a l y s i sa n dt r a n s p l a n t a t i o ni d e a s ; b e f o r et h es y s t e mt ob o o tt h ek e r n e l ,t h e r ea l eal o to fw o r kt od o s u c ha s : h a r d w a r en e e d st ob es e tt oa s t e a d ys t a t e ,t h en e e dt ol o a dt h ek e r n e li n t om a i n s t o r a g e ,t h i sp a p e rf i r s tu b o o t ,f o re x a m p l et oa n a l y z ea n da c h i e v eb o o t l o a d e r t r a n s p l a n t a t i o n ; i n t ot h ea n d r o i ds y s t e m ,y o um u s tf i r s tb o o tt h ek e r n e l t h el a r g e s tp a r to ft h e t r a n s p l a n tw o r k l o a dd r i v et r a n s p l a n t a t i o n ,t h ek e r n e li sc l o s e l yr e l a t e dt ot h es a m e d r i v e ,s ot h ea n a l y s i sa n dt h ek e r n e l d r i v e rt r a n s p l a n t a t i o na n da c h i e v eu b o o t t r a n s p l a n t a t i o n ; a f t e rt h ek e r n e lb o o tt h es y s t e mi n t ot h ei n i tp r o c e s s ,a n dt h e nb e g a nt or u n u s e r - s p a c e s o f t w a r e t h ea n a l y s i si nt h i sp a r to ft h ef o c u sa n da c h i e v ec o p y b i t h a r d w a r ea c c e l e r a t i o n ,t h et r a n s p l a n ti n v o l v e sm a n ya s p e c t so ft h eu s e rs p a c ea n d k e r n e ls p a c e ,t h ec u r r e n th a sb e e na n a l y z e da n dd i s c u s s e dt h i sp a r t ,t h i si st h ep a r tt o g i v ead e t a i l e da n a l y s i s i nt h es e c t i o nd e s c r i b i n gt h et h e o r ya n dt e c h n o l o g yo ft r a n s p l a n t a t i o n ,ad e t a i l e d a n a l y s i s o ft h eo r g a n i z a t i o n a ls t r u c t u r eo ft h ec o d e ,t h el o g i c a lf r a m e w o r ka n d t r a n s p l a n t a t i o ni d e a s a f t e rn e a r l yay e a ro fe f f o r t ,t h et r a n s p l a n th a sc o m e t oa ne n d i c u r r e n t l yu s et h er 2 rd e v e l o p m e n tb o a r dc a nr u nt h el i n u xs y s t e m ,c a l la l s ob e e n t e r e di n t ot h ea n d r o i db o o ts c r e e n ,t h ee x p e c t e dt a r g e tc o m p l e t i o nt r a n s p l a n t k e y w o r d s :s u p e r h ;a n d r o i d ;p o r t i n g ;k e r n e l 武汉理工大学硕士学位论文 1 1 研究背景 第一章绪论 a n d r o i d 是一种以l i n u x 内核为基础的开放源代码操作系统,主要用于便携 设备。目前a n d r o i d 系统一般只能运行于a r m 处理器【3 】【4 】【5 】【4 2 】【4 3 1 ,而s u p e r h 是 一种性价比、体积小、功耗低的3 2 位的r i s c 嵌入式微处理器。s u p e r h 架构的 主要应用范围在消费电子、汽车电子、通信设备等领域。 目前r e n e s a s ( s u p e r h 架构所属的公司) 推出的s u p e r h 开发工具链仅可运行在 w i n d o w s 系统;目标机的b s p ( 板级支持包) 仅支持w i n c e 、p l t r o n 等r t o s ( 实 时操作系统) ,尚无a n d r o i d 系统的b s p 。 1 2 研究意义 s u p e r h 架构对l i n u x 的支持较弱,故没有可运行在l i n u x 平台的硬件调试环 境【4 】【7 】,而a n d r o i d 移植与底层密切相关,故本文分析出了一套行之有效的移植 和引导方案。 整个移植工作包括三个部分的内容:b o o t l o a d e r 移植、内核移植、a n d r o i d 户空间移植。这三个部分的代码量较大,为了便于分析,本文在首先在析代码目 录结构的基础上提出层次化结构,然后针对选择部分与有代表性的部分分析并实 现移植。 a n d r o i d 用户空间最底层的h a l ( 硬件抽象层) 代码和内核有较强的关系,它 是a n d r o i d 上层代码运行的基础。a n d r o i di n i t 进程大部分代码集中在h a l ,而 h a l 的移植需要内核提供相关支持。h a l 的移植涉及的层次较多,故本文末尾 以c o p y b i t 模块为例分析并实现h a l 层移植。 1 3 可行性分析 经调研,a n d r o i d 系统的移植工作有很强的可行性,也有很强的挑战性 【1 1 】f 1 9 】【2 0 1 1 4 6 1 。a n d r o i d 底层使用l i n u x 内核,理论上只要能移植到l i n u x 系统的硬 件平台都可成功移植a n d r o i d ,故具有较强的可行性;g o o g l e 在设计a n d r o i d 系统之初,考虑到嵌入式系统中的各种限制裁剪了许多l i n u x 系统非常低层的库 ( 例如l i b c 等) ,并扩展( 或增强) 了内核中的许多驱动,这使得a n d r o i d 的移植工 武汉理工大学硕士学位论文 作同普通l i n u x 移植有很大的差异,故有较强的挑战性。a n d r o i d 系统的移植可 以参考l i n u x 移植( 在国内已经很成熟) ,但是部分不能照搬。 现阶段关于a n d r o i d 系统移植的文献资料非常少,国内仅有几篇文献。而这 些文献全部基于a r m 架构,g o o g l e 官方对a r m 架构的研究已经比较完善,故 在a r m 架构上的移植工作需求不是那么强烈。经调研,发现国内对r e n e s a s 公 司s u p e r h 架构平台的研究相当滞后。深入调查r e n e s a s 公司及其产品后,发现 r e n e s a s 公司的官方文档和技术手册十分详细,这些文档已经足够进一步开展基 于r e n e s a s 平台的移植工作。 1 4 研究内容 基于上述背景,本论文集中讨论以下问题: 1 4 1 移植平台 本文采用的s u p e r h 架构硬件平台为s h m o b i l er 2 r 开发板( 后文简称为r 2 r 平台) ,主机工具链【1 3 】【1 8 】【2 2 】【2 3 】【2 4 】【2 6 】使用d e b i a i l 6 【2 5 1 ,本文限于篇幅不做分析 i l i l 1 5 1 1 6 j i l 刀 1 4 2u b o o t 移植设计 在硬件上电后,内核运行前需要进行配置系统时钟、初始化s d r a m 时序、 关闭看门狗、读入内核等操作f 1 2 】【1 5 】1 2 9 】【4 1 1 。这些操作需要使用b o o t l o a d e r ( 启 动引导器) 来完成,b o o t l o a d e r 的成功运行是系统进入下一阶段的条件,故本文 第二章以u b o o t 为例分析并解决b o o t l o a d e r 移植过程中涉及的相关问题,提出 了u b o o t 的移植的实现方案。 1 4 3 内核移植设计 l i n u x 内核代码规模庞大【1 4 1 0 6 1 1 2 7 1 1 2 8 】【3 0 1 ,而且代码十分精巧,所以很难完全 分析所有代码。故本文首先根据内核目录结构提出内核层次结构,然后根据层次 结构找到与移植工作相关的目录,最后以这些目录中某些模块为例具体分析并设 计移植方案【3 1 3 5 】。 1 4 4a n d r o i d 用户空间移植设计 本文在研究a n d r o i d 移植方案时,首先分析a n d r o i d 系统层次结构,然后以 r e n e s a s 平台c o p y b i th a l 模块硬实现为例分析a n d r o i d 系统特有的一些模块移 2 武汉理工大学硕士学位论文 植。在移植工作开展期间,这部分内容尚无相关文献资料。 1 5 移植方案设计 本文在进行a n d r o i d 系统移植时,首先分别分析u b o o t 、内核、a n d r o i d 用 户空间层次化结构;然后依据该层次化结构找出它们与移植密切相关的代码;最 后跟踪这部分代码,依据硬件特性修改代码,完成移植工作。 本文在测试移植成果时,使用的系统引导方案如图1 1 。 启动r 2 r 平台 ( 启动u b o o t ) 、i , t r p 下载内核 、 , 启动内核 、 , l 启动i n i 进程 、, i 加载a n d m i d g 户空闻 图1 1 引导方案 引导系统前首先编译修改后的u b o o t 代码,利用r e n e s a s 烧写器将b i n 文件 ( 编译结构) 烧写至r 2 r 平台的引导扇区;然后编译修改后的内核,并将内核镜像 拷贝到移植主机的t f t p 目录;最后编译a n d r o i d 文件系统并将它拷贝入u 盘。依 据图1 ,系统上电后会首先启动u b o o t ,在u b o o t 中分别下载、启动内核;然后 内核会到u 盘中读取i n i t 文件并启动i n i t 进程;最后,i n i t 进程会加载a n d r o i d 用户空间。 1 6 论文结构 第一章为本章,介绍了本文的背景、意义、工作内容及移植方案; 第二章介绍u b o o t 移植,首先根据代码目录结构提出代码层次结构,然后由 层次结构中的部分代码分析初始化流程,最后实现r 2 r 平台u b o o t 移植; 第三章介绍内核移植,本章首先根据代码目录结构提出代码层次结构,然后 由层次结构中的部分代码分析内核引导,最后实现多个模块驱动的移植; 第四章介绍a n d r o i d 用户空间移植,本章首先根据代码目录结构提出代码层 次结构,然后介绍a n d r o i di n i t 进程,最后以c o p y b i th a l 硬实现为例分析a n d r o i d 移植。 武汉理工大学硕士学位论文 第二章u b o o t 移植的设计与实现 硬件上电后,内核运行前需要执行配置系统时钟、初始化s d r a m 时序、关 闭看门狗、读入内核等操作。这些操作需使用b o o t l o a d e r ( 启动引导器) 来完成, b o o t l o a d e r 的成功运行是系统进入下一阶段的条件,故本文首先以u b o o t 为例分 析移植过程中的涉及的相关问题,提出了u b o o t 的移植的实现方案。 本文首先根据代码目录结构提出代码层次结构,然后由层次结构中的部分代 码分析初始化流程,最后实现r 2 r 平台u b o o t 移植。 2 1 u b o o t 目录结构分析 本文使用的u b o o t 为2 0 0 9 0 1 版本,其根目录下文件夹内容如表2 1 。 表2 1u b o o t 目录结构 目录。,特性 说明 不同的电路板的相关( 即使c p u 相同) ,例如s m d k 2 4 1 0 、 b o a r d 开发板相关 s b c 2 4 1 0 x c p u 对应不同的c o u ,在该目下有进一步的细分,例如 架构相关 a r m 9 2 0 t 下有:a t 9 1 r m 9 2 0 0 、s 3 c 2 4 x o 等 1 i bx x x某一架构下的通用文件 头文件和开发板的配置文件,开发板的配置文件位于 i n c l u d e c o n f i g s 目录下,u b o o t 中没有内核编译时类 i n c l u d e 似的m a k em e n u c o n f i g 命令做可视化的配置。在修改配 通用函数 置配置项时需要手动修改配置文件中的宏定义 1i b g e n e r i c 通用的库,例如p r i n t f 函数 u b o o t 命令行值得命令实现,一般都是对下层驱动的封 c 0 m m o n 装 d i s k硬盘文件系统的相关工具 各类具体设备的驱动程序,该目录类似内核目录的 d r i v e r s d r i v e r 子目录的内容。各种架构可以通用,使用这些 驱动时需要配置相关宏定义 f s 设备驱动程序 文件系统实现,该目录实现了各种常用的文件系统 h a n ds p ln a n df la s h 相关文件,u b o o t 以前一般从r o m ,n o r f l a s h 等设备启动,2 0 0 9 o l 版本现在已经可以支持从 o n e n a n d i p l n a n df 1 a s h 启动,但是支持的种类还不是很多。 n e t 各种网络协议 p o s t 上电自检程序 d o c 文档u b o o t 开发、使用文档 使用u b o o t 编写上层应用程序( 不加载内核) 的a p i 接口a p la p i 接口 a p i e x a m p l e s 示例程序 上层应用程序示例( 使用a p i ) e x a m p l e 上层应用程序示例( 不使用a p i ) t o o l s 工具制作各种u b o o t 镜像的工具 下面根据表2 1 给出u b o o t 层次结构如图2 1 。 4 武汉理工大学硕士学位论文 个 i ia # _ _ e x a m p l c ll t c1 应用层 l 个 i l 剐 i 栅o n接口层 l i b _ g e n e r i c 山 一 、 盎 p o s t l d i s k l 驱动层 上 i 咖删li 抵r si n e t li 盘 个 架构层 ib 。删il c 印i | l i 啦ii i i l c 山 图2 1u b o o t 层次结构 应用层:最上层的两个目录为应用层,在不引导任何内核的情况下,该层可 以使u b o o t 作为一个微型的“操作系统 运行。 接口层:由于u b o o t 支持的硬件设备具有多样性,为了使应用层代码具有通 用性,需要对驱动层中的代码抽象出通用的接口。接口层的代码提供了这些抽象。 驱动层:该层的目录是u b o o t 移植工作中的重点,当需要使u b o o t 支持某个 新硬件驱动都是在驱动层中做相应的增加和修改。在本文的r 2 r 平台移植过层中 不存在这个问题,u b o o t 中有移植需要网卡驱动。本文只需要修改u b o o t 代码配 置,使能网卡驱动即可。 架构层:该层的内容和处理器架构、硬件板密切相关,每一款c p u 和每一 块开发板都需要有对应的文件。由于c p u 和开发板的多样性,该层不可能包含 有所有的c p u 和开发板。如果自己的c p u 不在该目录中,那么可以找一块和自 己c p u 类似的c p u 相应文件,参考移植。本层中,常见架构至少都会有一块移 植好的c p u 。对于自制板的对应文件,需要自己编写。本文移植的r 2 r 平台就 是如此,需要针对r 2 r 平台特点编写。 经过上文的分析,明确了u b o o t 移植工作的重点位于架构层,架构层代码的 主线是u b o o t 的引导,下面分析并实现基于r 2 r 平台的u b o o t 引导。 2 2 u b o o t 的架构层移植设计 在a n d r o i d 项目的移植过程中,每开始移植一项内容时,由于代码和硬件不 对应,不太可能初始化成功。所以,需要详细分析架构层引导。 5 武汉理工大学硕士学位论文 在编译过程中链接脚本h 6 1 4 7 】【5 0 1 定义了整个u b o o t 的入口,以下代码引自: b o a r d r e n e s a s e c o v e c u b o o o t 1 d s : o u t p u 名r c h ( s h ) e n t i 己y ( _ _ s t a r t ) 其中e n t r y 宏定义了u b o o t 的入口地址。在整个u b o o t 工程中搜寻s t a r t 可以找到以下文件:c p u s h 4 s t a r t s 。如果使用其他架构的c p u ,例如a r m 架构 在c p u a r m 目录中会有类似文件。为了便于分析将c p u s h 4 s t a r t s 文件部分代码 陈述如下: g l o b a l _ s t a r t s t a r t : m o v 1 _ l o w l e v e l _ i n i t ,r 0 1 0 0 : b s r f r 0 n o p 省略 m o v 1 _ s h _ g e n e r i c _ i n i t ,r 0 j s t r 0 n o p 重点关注有_ l o w l e v e l _ i n i t 、_ s h _ g e n e r i c _ i n i t 的两句代码,s t a r t s 在两处调用 了这两个函数,u b o o t 初始化的大部分工作都在这两个函数中完成,他们比较复 杂,之后再分析,先看看省略号中的部分: m o v 1 一b s s s t a r t ,r 4 m o v 1 _ b s s _ e n d ,r 5 m o v 拌0 r 1 3 :m o v 1 r l , r 4 户b s s 段初始化书 a d d f 4 ,r 4 c m p h sr 5 ,r 4 b f 3 b m o v 1 | d _ i n i t ,r 1 3 严全局数据段初始化幸 m o v 1s t a c ki n i t ,r 1 5 宰栈段初始化幸 m o v 1 _ s h _ g e n e r i c _ i n i t ,r o j s r r o n o p 以上代码完成c 语言的运行时( r u n t i m e ) 的初始化,在这段代码执行后,才能 6 武汉理工大学硕士学位论文 执行c 语言编写的源码。由此我们也可以得_ l o w l e v e l _ i n i t 函数必须使用汇编 的结论。下面先分析l o w l e v e li n i t 函数。该函数位于: b o a r d r e n e s a s e c o v e c l o w l e v e l i n i t s 如果使用其他开发板,例如s 3 c 6 4 0 0 架构在b o a r d s a m s u n g s m d k 6 4 0 0 目录中 会有类似文件。查看b o a r d r e n e s a s e c o v e c l o w l e v e l i n i t s 文件的源码,我们会发 现其中只有一句代码起作用: # i n c l u d e ”h a r d - s e t u p s ” 下面查看该目录中的h a r d s e t u p s 文件,节选部分文件如下: l i s t ”d i s a b l ew a t c h d o g ” e w0 x a 4 5 2 0 0 0 4 ,0 x a 5 0 7 省略 l i s t ”d i s a b l em m u e d0 x f f 0 0 0 010 ,0 x 0 0 0 0 0 0 0 4 省略 l i s t ”c p g e d0 x a 415 0 0 2 4 ,0 x 0 0 0 0 4 0 0 0 省略 l i s t ”b s c e d0 x f f 8 0 0 0 2 0 ,0 x a 5 a 5 0 0 0 0 省略 l i s t ”s e t u ps d r a m ” e d0 x f d 0 0 0 1 0 8 ,o x 0 0 0 0 0 1 8 1 省略 l i s t ”s e t u pc a c h e ” e do x f f 0 0 0 01c ,o x o o o 0 0 9 0 b 省略 上面的代码是整个u b o o t 最开始运行的代码,主要完成关看门狗,配置总线 ( b s c ) ,配置缓存等操作。其中的e d 、e w 等命令由b o a r d r e n e s a s e c o v e c i | 录的 中的h a r d s e t u p c m d 定义,该文件将常用的汇编指令序列定义为e d 、e w 等简化 的形式。 指令流退出l o w l e v e li n i t 函数后,再次进入c p u s h 4 s t a r t s 文件进行c 语言 运行时( r u n t i m e ) 环境的初始化,这部分工作主要是分配堆内存和栈内存。完成 堆和栈的初始化之后进入s h _ g e n e r i c _ i n i t 函数,该函数是整个u b o o t 初始化的框 架,下面将详细分析其结构。 7 武汉理工大学硕士学位论文 s h _ g e n e r i e _ i n i t 函数的定义位于l i b s h b o a r d e 文件,其他架构( 例如a r m ) 有类似函数位于l i b a r m b o a r d c 文件中。为了便于分析节选b o a r d c 文件中的部 分代码如附录。 附录a 代码是整个b o a r d c 文件的框架,也就是整个u b o o t 初始化的框架。 代码中最重要的是一个数组i n i t _ s e q u e n e e 和一个函数调用i n i t _ f n c _ p t r 。数组 i n i t _ s e q u e n c e 中的每个元素是一个函数指针,每个函数指针都在s h _ g e n e r i c _ i n i t 函数中的f o r 循环中依次调用( 回调) 。i n i t _ s e q u e n c e 中的最后一个元素是n u l l , 使得f o r 循环的条件不满足从而退出f o r 循环。之后,系统后进入一个“死循环 , 该循环中的m a i n _ l o o p o 就是u b o o t 正常工作时的主循环。下面简单分析一下 m a i n _ l o o p o 函数。该函数位于:c o m m o n m a i n e 文件。 卜 幸m a i nl o o pf o rm o n i t o rc o m m a n dp r o c e s s i n g 卑| f o r ( ;) l e n = r e a d l i n e ( c o n f i q s y s _ p r o m p t ) ; f l a g = o ;产a s s u m en os p e c i a lf l a g sf o rn o w 幸 i f ( 1 e n 0 ) s t r c p y ( 1 a s t e o m m a n d ,c o n s o l e _ b u f f e r ) ; e l s ei f ( 1 e n 一0 ) f l a gl - c m d _ f l a g _ r e p e a t ; i f ( 1 e n 一一1 ) p u t s ( ” h a ”) ; e l s e r e = r u n c o m m a n d ( 1 a s t e o m m a n d ,f l a g ) ; i f ( r e 该循环读取键盘键入的命令,并且执行它。该循环对应于u b o o t 实际工作时 我们键入命令后,u b o o t 响应命令,实际上这个循环式u b o o t 工作时的主循环。 到了这里整个u b o o t 的初始化流程已经介绍完毕,这里还有两点需要补充: 8 武汉理工大学硕士学位论文 第一点是:一l o w l e v e l i n i t 、_ s h _ g e n e r i c _ i n i t 两个函数定义时名字前没有下划 线,而调用时有下划线,实际上他们是同一个函数。在定义和调用时的这个差异 是由编译器为满足符号解析时做出的处理,使用纯c 语言编程时不会出现这个 问题。在有c 语言和汇编混合编程时,c 语言中的函数和汇编对应的“函数 ( 函 数入口地址的标签) 会有一个下划线的差异。 第二点是:在l i bs h b o a r d c 文件中,数组i n i ts e q u e n c e 中的元素已经被初 始化为了:c p u 、 等元素,而这些元素是在哪里定义_ i n i t b o a r di n i tb o a r dl a t ei n i t 的呢? 首先我们需要搞清楚这些元素是些什么东西。节选部分代码如下: t y p e d e fi n t ( i n i tf n ct 1 ( v o i d ) ; 一一“- r i n i t f n c t 率i n i t s e q u e n c e 】= 省略 有以上代码,我们知道数组i n i ts e q u e n c e 中的每个元素是一个函数指针,指 向该函数的入口地址。那么我们下面就需要寻找这些函数的定义了,一般说来, l i b s h 目录中的文件会定义绝大部分函数,c p u 相关的函数会定义在c p u s h 4 q b , 而板级相关的函数会定义与b o a r d r e n e s a s 中,其他架构的代码结构类似。由于本 次移植使用的板子c p u 相关的代码u b o o t 中已经包含,但是板级相关的代码并不 匹配,所以需要在b o a r d r e n e s a s e c o v e c 目录定义需要的几个函数。 经过以上的分析,我们对u b o o t 的初始化流程应该有了一定的认识,移植 u b o o t 的思路也就清晰了。 下面将u b o o t 的初始化流程总结在表2 2 。 表2 2u b o o t 初始化序列 函数名所属文件作用 s t a r t c p u s h 4 s t a r t s 调用一l o w l e v e l i n i t 函数 1 、关看门狗; l o w l e v e li n i tb o a r d r e n e s a s e c o v e c l o w l e v e li n i t 。s 2 、配置总线( b s c ) 3 、安装缓存 1 、cr u n t i m e 初始化 s t a r t c p u s h 4 s t a r t s 2 、调用一s h g e n e r i c i n i t 1 、调用初始化序列 s h _ g e n e r i c _ i n i t l i bs h b o a r d c 2 、调用主循环( m a i n l o o p ) m i a n _ l o o p c o m m o n m a i n c 执行键入的命令 表2 2 中的所有函数都在前文中作出说明,最重要的是初始化序列,该序列 是整个u b o o t 引导过程的主体,移植时的主要工作也沿着该序列进行,是分析 u b o o t 移植的重点。 9 武汉理工大学硕士学位论文 2 3 u b o o t 移植设计的技术分析 前一小节详细分析了u b o o t 的初始化流程,在移植u b o o t 时的基本思路是跟 随程序执行的流程,查看到哪一步后系统的状态与预期不一致,定位出问题所在 以便修改代码。 根据上一节的分析结果,本文将u b o o t 初始化时的流程整理为表( 位于下一 节) 。读者在阅读本节时可以参照该表。u b o o t 最先运行的代码位于 b o a r d r e n e s a s e c o v e c l o w l e v e l i n i t s 。 在实际使用u b o o t 的过程中需要使用网卡的功能,而根据网卡电路 l a n 9 1 c 1 1 1 1 挂载在系统的b s c 总线上,故在l o w l e v e li n i t 函数中需要配置b s c 总线的时序,使用的开发板为r 2 r 使用的总线区域为b s c 6 a 。 之后进入初始化序列,本文将r 2 r 的管腿配置( p f c 模块) 放在 b o a r d r e n e s a s e :c o v e c e c o v e c c 文件中的b o a r di n i t 函数中。另外,由于u b o o t 的 打印输出使用串口,而串口在u b o o t 的初始化序列中初始化,故只有面一部分的 初始化函数可以观察到打印信息。 针对r 2 r 平台,大段的代码修改只有这两个部分。还有一个文件需要做相应 的修改,该文件为:i n c l u d e c o n f i 皆 e c o v e c h 。u b o o tt 程中没有类似于k e r n e l 中 的k c o n f i g 系统,它针对每一块开发板提供一个配置文件,u b o o t 源码中没有本 文使用的r 2 r 开发板,故使用与其相近的c c o v c c 开发板的配置文件。该文件定 义了u b o o t 中使用的功能和驱动,该文件的具体编写方法参阅u b o o t 源码文档 r e a d m e ,该文档详述了配置文件中每一个宏定义的含义以及使用方法。 2 4 小结 移植u b o o t 时最大的难点在分析u b o o t 架构层的引导,目前还没有全面论述 这部分内容的文献。本章首先分析论述了u b o o t 的目录结构和代码层次,之后总 结u b o o t 初始化流程,最后提出了针对r 2 r 平台的移植方案。 由于a n d r o i d 系统使用l i n u x 内核,下一章将分析基于r 2 r 平台l i n u x 内核 驱动的移植。 1 0 武汉理工大学硕士学位论文 第三章内核驱动移植设计与实现 第二章,已经能成功移植u b o o t ,本章分析并实现内核驱动移植。首先分析 内核的目录结构,提出内核层次结构;之后总结一下内核移植常用技巧【1 5 】【1 6 1 1 刀; 最后以及各具体硬件为例分析内核驱动的移植,对内核移植的细节做一个全面的 分析。 3 1 内核目录结构层次化分析 本文移植的k e r n e l 为2 6 3l 版本,内核目录结构如表3 1 。 根据表3 1 ,给出内核的分层结构。 iiiil o p e n w r i t er e a di o e t lc l o s e 个 vvvvv 一 i i 拟文f s 件系统 l 接口层 i 小 丁 i 进譬理i i 网警制i 内 核 驱动层 上 架然关il 内需理ll 抓倦b 黝l o c k 层s 咖i n, 图3 1k e m e l 层次结构 内核代码按照功能内核可以分为:进程管理、内存管理、文件系统、设备控 制、网络功能等几大模块【2 6 1 4 4 1 。每个模块的规模都很大,移植时我们主要关注 的部分属于设备控制中的驱动部分,每一块开发板的硬件结构都不一样,需要针 对硬件增加或修改驱动。 图3 1 把内核分为两层,下层为驱动层、上层为虚拟文件系统层。这两层分 别对应内核的两大功能,驱动层对下层硬件进行管理;虚拟文件层为上层l i n u x 应用程序提供接口。 经过本节的分析,我们对内核的层次有了一定的认识,下一小节将分析内核 武汉理工大学硕士学位论文 代码的一些特点和技巧。 表3 - l 内核目录结构 目录名描述 体系结构相关的代码,对于内核支持的每个架构的c p u ,该目 a r c h 录下都有一个对应的子目录。例如:a r c h a r m 、a r c h j 3 8 6 、 a r c h s h 。 b l o c k 块设备的通用函数 通常加密解密算法( 如a e s 、s h a 等) ,还有一些压缩和c r c 校验 c r y p t o 算法 d o c u m e n t a tio n内核文档 设备驱动的主要

温馨提示

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

评论

0/150

提交评论