ARMS3C2410X启动及工作模式切换的研究与应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. 4 初始化存储系统
嵌入式系统为了保持良好的性价比 ,会采用多种 存储 器 。在 S3C2410 中 , 采 用 了 4MB 的 Flash 和 64MB 的 SDRAM。在系统复位时 ,所有的程序和数 据都保存在 Flash 中 , RAM 中是不存放代码和数据 的 。因此 ,在系统复位时应该首先从 Flash中开始执 行 。但与 RAM 相比 , Flash的数据宽度小 ,访问速度 慢 ,会影响整个系统的响应速度 ,而且中断向量表的 内容保存在 Flash中不能修改 。所以采用另一种方 法配置存储器系统 , 即在系统运行过程中 , 使地址 0x0处为 RAM ,这要通过对系统进行地址重映射来 实现 。为了重映射之后能提供正确的中断入口地址 , 在重映 射 之 前 就 必 须 把 中 断 和 异 常 向 量 表 拷 贝 到 RAM 中 。
2. 3 CPU的初始化 [ 2]
MRS R0, CPSR B IC R0, R0, #MODE_MASK ;清除 CPSR中对应的 CPU 模 式位 ORR R0, R0, #MODE_SUP ;设置 supervisor模式位 ORR R0, R0, # INLOCK ;确保 IRQ / F IQ 中断被禁止 M SR CPSR_cxsf, R0 ;设置新的 CPSR参考值
屏蔽看门狗 :
LDR R0, =W TCON
LDR R1, = 0x0
STR R1, [ R0 ]
另外还有设置 PLL 稳定输出时间 。 S3C2410中有 3个时钟 ,为了降低功耗一般设置 CPU 工作频率 F IN = 10MHz, Fout = 90MHz,设置时钟 对所有的片内外设有效 。关闭 MMU 的工作 。
B reset ;系统上电后进入复位操作 , @0x00000000 ldr pc, _undefined_ instruction ;处理未定义中断模式 , @ 0x00000004 ldr pc, _software_interrup t ;处理软件中断 , @0x00000008
ldr pc, _ p refetch _ abort ; 处 理 指 令 预 取 中 止 , @
78
计 算 机 与 现 代 化
2008年第 12期
接等通信手段从主机下载内核映像和根文件系统映像 ,然后 保存到目标机上的 Flash类固态存储设备中 。
如图 1所示 ,一般初始化启动代码的流程为 : stage1:
(1)设置入口指针 ; (2)设置异常中断向量表 ; (3) CPU 的初始化 ; (4)初始化存储系统 ; (5) RW 数据段的拷贝 , ZI数据段的建立 ; (6)初始化堆栈指针 。 stage2: (1)初始化硬件设备 ; (2)检测系统内存映射 ; (3)装载内核映像 ; (4)配置内核参数 ; (5)调用内核 。
对于嵌入式应用系统和具有操作系统支持的应 用系统来说 ,相同运行环境初始化部分的工作是不同 的 。对于由操作系统支持的应用系统来说 ,在操作系 统启动时将会初始化系统运行环境 。操作系统在加 载应用程序后 ,将控制权转交到应用程序的 main ( ) 函数 ,然后运行库中的 main ( )初始化应用程序 。然 而 BootLoader 的实现依赖于 CPU 的体系结构 ,因此 BootLoader 一 般 都 分 为 stage1 和 stage2 两 部 分 。 stage1用汇编语言实现 ,一般放在 start. s文件中 ,主 要内容是与 CPU 硬件相关的代码 ;而 stage2 则用 C 语言来实现 ,以实现更复杂的功能 ,同时也增加代码 可读性和可移植性 。
Boo tloade r是在操作系统内核运行前的一段小程 序 ,它的作用类似 PC上的 B IOS,用于初始化目标板 硬件 ,给嵌入式操作系统提供板上硬件资源信息 。但 由于 BootLoader与处理器的体系结构和具体嵌入式 板级设备配置密切相关 ,所以没有通用的 BootLoader 可以直接应用于各种嵌入式系统中 ,因此 BootLoader 成为 L inux的嵌入式系统设计中的一个关键问题 。
( 2 )装载 内核 映 像 和 根 文 件 系 统 映 像 对 于 内 核 映像 [ 4 ] 。
在这一阶段首先要规划出内核映像和根文件系 统映像所占用的内存范围 。在内存的顶端为 L inux 内核的启动参数和内核页表分配 32kB 内存空间 。
而文件系统映像 ,则拷贝至 0x00100000 处 。由 于内核映像和文件系统映像存储在 NAND Flash中因 此需要使用一次读取一块的方法读取数据 。装载内 核映像和文件系统映像完成以后 , SDRAM 的布局如 图 2所示 。
Study and Applica tion Ba sed on Boot and Sh iftW ork ing M ode of ARM S3C2410X System
GUO Lei1 , TAO M ing2
(1. Computer Center of Nanchang University, Nanchang 330031, China; 2. CCCC Guangzhou D redging Co. L td. , Guangzhou 510221, China)
0 引 言
1 ARM 初始化启动代码的流程
ARM (Advanced R ISC M achines)处理器具有高性 能 、低功耗的特征 ,在无线设备 、蓝牙技术 、消费电子 和汽车等领域取得巨大成功 。 S3C2410X是 Sam sung 公司生产的基于 ARM9 架构的微处理器 。而 L inux 以其丰富的源码开放的系统软件支持 、网络协议支持 和应用程序 ,降低了软件成本 ,提高了系统兼容性 ,使 得越来越多的嵌入式系统运行 L inux并使得整个嵌 入式系统获得了完整的构架 。
2008年第 12期 文章编号 : 100622475 (2008) 1220077203
计算机与现代化 J ISUANJ I YU X IANDA IHUA
总第 160期
ARM S3C2410X 启动及工作模式切换的研究与应用
郭 磊 1 ,陶 明 2
(1. 南昌大学计算中心 ,江西 南昌 330031; 2. 中交广州航道局有限公司 ,广东 广州 510221)
图 1 ARM 初始化启动代码的流程
2 BootL oader 的 stage1
2. 1 设置入口点 Bootloader首先必须定义入口点 ,而且整个应用
程序只有一个入口 点 , 通 常这 个入 口点 放在 ROM ( FFra Baidu bibliotekash)的 0x0 地址 。 2. 2 设置中断 /异常向量表
中断 /异常向量表是用于处理异常情况的 。当系 统运行时 ,异常可能会随时发生 ,为了保证处理器在 发生异常时不至于落入未知状态 ,在程序设计中首先 要考虑异常处理 。ARM 的中断 /异常向量表在 0 地 址开始的 32B 空间里 。当其中的某个异常发生时 , 首先要保存当前 PC和 CPSR寄存器的值 ,然后将 PC 指向相应的异常向量处 ,每个异常向量处放置了一个 跳转指令 ,跳转到相应的异常处理程序 。当异常处理 完成以后 ,恢复到主程序继续执行 。具体实现程序如 下:
0x0000000c ldr pc, _data_abort ;处理数据访问中止 , @0x00000010 ldr pc, _not_used ;未使用 , @0x00000014 ldr pc, _irq ;处理 IRQ 中断 , @0x00000018 ldr pc, _fiq ;处理 F IQ 中断 , @0x0000001c
大多数 Bootloader都包含两种不同的操作模式 :
(1)启动加载模式 :即 Bootloader从目标机上的某个固态 存储设备上将操作系统加载到 RAM 中运行 ,整个过程并没有 用户的介入 。
(2)下载模式 :目标机上的 Bootloader通过串口或网络连
收稿日期 : 2007212219 基金项目 :江西省教育厅科技计划资助项目 (赣教技字 2007 25号 ) 作者简介 :郭磊 (19832) ,男 ,江西赣州人 ,南昌大学计算中心硕士研究生 ,研究方向 :软件工程 ,嵌入式系统应用与开发 ;陶明 (19842) ,男 ,江西南昌人 ,中交广州航道局有限公司助工 ,研究方向 :软件开发与应用 。
摘要 :介绍了 ARM S3C2410X启动及工作模式切换的过程 ,重点讨论了 ARM 2L inux嵌入式系统的启动流程 ,并给出了 BootLoader的实例 。 关键词 : ARM; L inux; BootLoader; 嵌入式系统 中图分类号 : TP332. 3 文献标识码 : A
Flash数据结构的初始化如下 :
typedef stuct { long size; / 3 容量大小 3 / short sector_count ; / 3 擦除单元 3 / long flash_id ; / 3 厂商代码 3 / long start[ CFG_MAX_FLASH _SECT ]; / 3 物理扇区起始 地址 3 / char p rotect[ CFG_MAX_FLASH _SECT ]; / 3 扇区保护状 态3 / } flash_info_t;
图 2 SDRAM 的布局
(3)配置内核的启动参数 。 将内核映像和文件系统映像装载到 SDRAM 中 以后 , 就 可 以 准 备 启 动 L inux 内 核 了 。在 嵌 入 式 L inux系统中 ,通常需要由 BootLoader配置的启动参 数有 :内核启动参数在内存中的起始地址等信息 ;内 核系统的内存映射情况 ; 调用内核命令行参数字符 串 ;映像 (压缩格式 ) 以及它的大小 ; 内核解压后大 小。 (4)调用内核 。 BootLoader调用 L inux内核的方法是直接跳转到 内核的第一条指令处 。在跳转时 ,需禁止所有中断 ( IRQ 和 F IQ ) 、CPU 工作在 SVC模式 、关闭 MMU、数 据 Cache关闭 。当 BootLoader运行在下载模式的时 候 ,必须初始化网络接口 ,然后将内核映像和文件系 统映像通过网络接口下载到 SDRAM 中 ,然后将它们 固化到 NAND Flash中 ;最后调用内核 。
2. 5 初始化堆栈 、使能异常中断
ARM 处理器 7种运行模式都有自己独立的堆栈 指针 ,在系统初始化的时候要对每种模式下的 SP进 行初始化 ,使其指向该运行模式的堆栈空间 。对每种
2008年第 12期
郭磊等 : ARM S3C2410X 启动及工作模式切换的研究与应用
79
模式进行堆栈初始化都要进入相应的模式 ,然后再给 SP赋值 。还应关闭 F IQ 及 IRQ 中断 ,可以通过设置 CPSR寄存器的第 6、7 位来实现 。在系统初始化完 成之前不要对用户模式的堆栈进行初始化 ,因为用 户模式不能对 CPSR进行操作 ,处理器也就不能转换 到其他的模式中 ,可能会对程序执行造成影响 。
硬件屏蔽中断 :
LDR R0, = INTM SK LDR R1, = 0Xffffffff ;初始值 STR R1, [ R0, #0 ] ;屏蔽中断
LDR R0, = INTSUBM SK ; Interrup t sub mask LDR R1, = 0X7FF ;初始值
STR R1, [ R0 ]
Abstract: The p rocess of boot and shift working mode of ARM S3C2410X system is p resented. A BootLoader of ARM - L inux sys2 tem is discussed emphatically. And the app lication of this kind of BootLoader is demonstrated w ith an examp le. Key words:ARM; L inux; BootLoader; embedded system
3 BootL oader的 stage2
(1) Stage2阶段包括初始化本阶段要使用的外 围设备 ,检测系统内存映射 ,将映像和根文件系统映 像从 Flash中搬运到 RAM 空间中 ,为内核设置启动 参数 ,调用内核来实现启动过程 。内存映射就是在整 个物理地址空间中有哪些地址范围被分配用来寻址 系统的 RAM 单元 。通常 CPU 会预留出足够的地址 空间给系统 RAM ,而检测系统内存映射的目的就是 要知道 CPU 预留的全部 RAM 地址空间中的哪些被 真正映射到 RAM 地址单元 。
嵌入式系统为了保持良好的性价比 ,会采用多种 存储 器 。在 S3C2410 中 , 采 用 了 4MB 的 Flash 和 64MB 的 SDRAM。在系统复位时 ,所有的程序和数 据都保存在 Flash 中 , RAM 中是不存放代码和数据 的 。因此 ,在系统复位时应该首先从 Flash中开始执 行 。但与 RAM 相比 , Flash的数据宽度小 ,访问速度 慢 ,会影响整个系统的响应速度 ,而且中断向量表的 内容保存在 Flash中不能修改 。所以采用另一种方 法配置存储器系统 , 即在系统运行过程中 , 使地址 0x0处为 RAM ,这要通过对系统进行地址重映射来 实现 。为了重映射之后能提供正确的中断入口地址 , 在重映 射 之 前 就 必 须 把 中 断 和 异 常 向 量 表 拷 贝 到 RAM 中 。
2. 3 CPU的初始化 [ 2]
MRS R0, CPSR B IC R0, R0, #MODE_MASK ;清除 CPSR中对应的 CPU 模 式位 ORR R0, R0, #MODE_SUP ;设置 supervisor模式位 ORR R0, R0, # INLOCK ;确保 IRQ / F IQ 中断被禁止 M SR CPSR_cxsf, R0 ;设置新的 CPSR参考值
屏蔽看门狗 :
LDR R0, =W TCON
LDR R1, = 0x0
STR R1, [ R0 ]
另外还有设置 PLL 稳定输出时间 。 S3C2410中有 3个时钟 ,为了降低功耗一般设置 CPU 工作频率 F IN = 10MHz, Fout = 90MHz,设置时钟 对所有的片内外设有效 。关闭 MMU 的工作 。
B reset ;系统上电后进入复位操作 , @0x00000000 ldr pc, _undefined_ instruction ;处理未定义中断模式 , @ 0x00000004 ldr pc, _software_interrup t ;处理软件中断 , @0x00000008
ldr pc, _ p refetch _ abort ; 处 理 指 令 预 取 中 止 , @
78
计 算 机 与 现 代 化
2008年第 12期
接等通信手段从主机下载内核映像和根文件系统映像 ,然后 保存到目标机上的 Flash类固态存储设备中 。
如图 1所示 ,一般初始化启动代码的流程为 : stage1:
(1)设置入口指针 ; (2)设置异常中断向量表 ; (3) CPU 的初始化 ; (4)初始化存储系统 ; (5) RW 数据段的拷贝 , ZI数据段的建立 ; (6)初始化堆栈指针 。 stage2: (1)初始化硬件设备 ; (2)检测系统内存映射 ; (3)装载内核映像 ; (4)配置内核参数 ; (5)调用内核 。
对于嵌入式应用系统和具有操作系统支持的应 用系统来说 ,相同运行环境初始化部分的工作是不同 的 。对于由操作系统支持的应用系统来说 ,在操作系 统启动时将会初始化系统运行环境 。操作系统在加 载应用程序后 ,将控制权转交到应用程序的 main ( ) 函数 ,然后运行库中的 main ( )初始化应用程序 。然 而 BootLoader 的实现依赖于 CPU 的体系结构 ,因此 BootLoader 一 般 都 分 为 stage1 和 stage2 两 部 分 。 stage1用汇编语言实现 ,一般放在 start. s文件中 ,主 要内容是与 CPU 硬件相关的代码 ;而 stage2 则用 C 语言来实现 ,以实现更复杂的功能 ,同时也增加代码 可读性和可移植性 。
Boo tloade r是在操作系统内核运行前的一段小程 序 ,它的作用类似 PC上的 B IOS,用于初始化目标板 硬件 ,给嵌入式操作系统提供板上硬件资源信息 。但 由于 BootLoader与处理器的体系结构和具体嵌入式 板级设备配置密切相关 ,所以没有通用的 BootLoader 可以直接应用于各种嵌入式系统中 ,因此 BootLoader 成为 L inux的嵌入式系统设计中的一个关键问题 。
( 2 )装载 内核 映 像 和 根 文 件 系 统 映 像 对 于 内 核 映像 [ 4 ] 。
在这一阶段首先要规划出内核映像和根文件系 统映像所占用的内存范围 。在内存的顶端为 L inux 内核的启动参数和内核页表分配 32kB 内存空间 。
而文件系统映像 ,则拷贝至 0x00100000 处 。由 于内核映像和文件系统映像存储在 NAND Flash中因 此需要使用一次读取一块的方法读取数据 。装载内 核映像和文件系统映像完成以后 , SDRAM 的布局如 图 2所示 。
Study and Applica tion Ba sed on Boot and Sh iftW ork ing M ode of ARM S3C2410X System
GUO Lei1 , TAO M ing2
(1. Computer Center of Nanchang University, Nanchang 330031, China; 2. CCCC Guangzhou D redging Co. L td. , Guangzhou 510221, China)
0 引 言
1 ARM 初始化启动代码的流程
ARM (Advanced R ISC M achines)处理器具有高性 能 、低功耗的特征 ,在无线设备 、蓝牙技术 、消费电子 和汽车等领域取得巨大成功 。 S3C2410X是 Sam sung 公司生产的基于 ARM9 架构的微处理器 。而 L inux 以其丰富的源码开放的系统软件支持 、网络协议支持 和应用程序 ,降低了软件成本 ,提高了系统兼容性 ,使 得越来越多的嵌入式系统运行 L inux并使得整个嵌 入式系统获得了完整的构架 。
2008年第 12期 文章编号 : 100622475 (2008) 1220077203
计算机与现代化 J ISUANJ I YU X IANDA IHUA
总第 160期
ARM S3C2410X 启动及工作模式切换的研究与应用
郭 磊 1 ,陶 明 2
(1. 南昌大学计算中心 ,江西 南昌 330031; 2. 中交广州航道局有限公司 ,广东 广州 510221)
图 1 ARM 初始化启动代码的流程
2 BootL oader 的 stage1
2. 1 设置入口点 Bootloader首先必须定义入口点 ,而且整个应用
程序只有一个入口 点 , 通 常这 个入 口点 放在 ROM ( FFra Baidu bibliotekash)的 0x0 地址 。 2. 2 设置中断 /异常向量表
中断 /异常向量表是用于处理异常情况的 。当系 统运行时 ,异常可能会随时发生 ,为了保证处理器在 发生异常时不至于落入未知状态 ,在程序设计中首先 要考虑异常处理 。ARM 的中断 /异常向量表在 0 地 址开始的 32B 空间里 。当其中的某个异常发生时 , 首先要保存当前 PC和 CPSR寄存器的值 ,然后将 PC 指向相应的异常向量处 ,每个异常向量处放置了一个 跳转指令 ,跳转到相应的异常处理程序 。当异常处理 完成以后 ,恢复到主程序继续执行 。具体实现程序如 下:
0x0000000c ldr pc, _data_abort ;处理数据访问中止 , @0x00000010 ldr pc, _not_used ;未使用 , @0x00000014 ldr pc, _irq ;处理 IRQ 中断 , @0x00000018 ldr pc, _fiq ;处理 F IQ 中断 , @0x0000001c
大多数 Bootloader都包含两种不同的操作模式 :
(1)启动加载模式 :即 Bootloader从目标机上的某个固态 存储设备上将操作系统加载到 RAM 中运行 ,整个过程并没有 用户的介入 。
(2)下载模式 :目标机上的 Bootloader通过串口或网络连
收稿日期 : 2007212219 基金项目 :江西省教育厅科技计划资助项目 (赣教技字 2007 25号 ) 作者简介 :郭磊 (19832) ,男 ,江西赣州人 ,南昌大学计算中心硕士研究生 ,研究方向 :软件工程 ,嵌入式系统应用与开发 ;陶明 (19842) ,男 ,江西南昌人 ,中交广州航道局有限公司助工 ,研究方向 :软件开发与应用 。
摘要 :介绍了 ARM S3C2410X启动及工作模式切换的过程 ,重点讨论了 ARM 2L inux嵌入式系统的启动流程 ,并给出了 BootLoader的实例 。 关键词 : ARM; L inux; BootLoader; 嵌入式系统 中图分类号 : TP332. 3 文献标识码 : A
Flash数据结构的初始化如下 :
typedef stuct { long size; / 3 容量大小 3 / short sector_count ; / 3 擦除单元 3 / long flash_id ; / 3 厂商代码 3 / long start[ CFG_MAX_FLASH _SECT ]; / 3 物理扇区起始 地址 3 / char p rotect[ CFG_MAX_FLASH _SECT ]; / 3 扇区保护状 态3 / } flash_info_t;
图 2 SDRAM 的布局
(3)配置内核的启动参数 。 将内核映像和文件系统映像装载到 SDRAM 中 以后 , 就 可 以 准 备 启 动 L inux 内 核 了 。在 嵌 入 式 L inux系统中 ,通常需要由 BootLoader配置的启动参 数有 :内核启动参数在内存中的起始地址等信息 ;内 核系统的内存映射情况 ; 调用内核命令行参数字符 串 ;映像 (压缩格式 ) 以及它的大小 ; 内核解压后大 小。 (4)调用内核 。 BootLoader调用 L inux内核的方法是直接跳转到 内核的第一条指令处 。在跳转时 ,需禁止所有中断 ( IRQ 和 F IQ ) 、CPU 工作在 SVC模式 、关闭 MMU、数 据 Cache关闭 。当 BootLoader运行在下载模式的时 候 ,必须初始化网络接口 ,然后将内核映像和文件系 统映像通过网络接口下载到 SDRAM 中 ,然后将它们 固化到 NAND Flash中 ;最后调用内核 。
2. 5 初始化堆栈 、使能异常中断
ARM 处理器 7种运行模式都有自己独立的堆栈 指针 ,在系统初始化的时候要对每种模式下的 SP进 行初始化 ,使其指向该运行模式的堆栈空间 。对每种
2008年第 12期
郭磊等 : ARM S3C2410X 启动及工作模式切换的研究与应用
79
模式进行堆栈初始化都要进入相应的模式 ,然后再给 SP赋值 。还应关闭 F IQ 及 IRQ 中断 ,可以通过设置 CPSR寄存器的第 6、7 位来实现 。在系统初始化完 成之前不要对用户模式的堆栈进行初始化 ,因为用 户模式不能对 CPSR进行操作 ,处理器也就不能转换 到其他的模式中 ,可能会对程序执行造成影响 。
硬件屏蔽中断 :
LDR R0, = INTM SK LDR R1, = 0Xffffffff ;初始值 STR R1, [ R0, #0 ] ;屏蔽中断
LDR R0, = INTSUBM SK ; Interrup t sub mask LDR R1, = 0X7FF ;初始值
STR R1, [ R0 ]
Abstract: The p rocess of boot and shift working mode of ARM S3C2410X system is p resented. A BootLoader of ARM - L inux sys2 tem is discussed emphatically. And the app lication of this kind of BootLoader is demonstrated w ith an examp le. Key words:ARM; L inux; BootLoader; embedded system
3 BootL oader的 stage2
(1) Stage2阶段包括初始化本阶段要使用的外 围设备 ,检测系统内存映射 ,将映像和根文件系统映 像从 Flash中搬运到 RAM 空间中 ,为内核设置启动 参数 ,调用内核来实现启动过程 。内存映射就是在整 个物理地址空间中有哪些地址范围被分配用来寻址 系统的 RAM 单元 。通常 CPU 会预留出足够的地址 空间给系统 RAM ,而检测系统内存映射的目的就是 要知道 CPU 预留的全部 RAM 地址空间中的哪些被 真正映射到 RAM 地址单元 。