EDN首页   博客首页

2

关于投票
嵌入式操作系统开发实践之如何实现BOOTLOADER
 

嵌入式操作系统开发实践之 如何实现BOOTLOADER

文章整理: 龙人嵌入式事业部 (armodmlr)

1.之所以要实现一个 嵌入式操作系统 专用的BOOTLOADER,一是为了更好的移植和自身的升级,二是为了方便 嵌入式 操作系统 的调试,当然,你完全可以将这部分所要实现的与操作系统相关的功能集成到操作系统中去

2.确定一个简单的BOOTLOADER所要完成的功能:我们这里只需要完成两个主要功能,一是将操作系统加载到内存中去运行,二是将自己和操作系统内核固化到ROM存储区(这里的ROM可以是很多设备,比如嵌入式芯片中的FLASH,PC机上的软盘,U盘,硬盘等)

3.BOOTLOADER的编写:

第一步:要进行相关硬件的初使化,比如在at91rm9200这块 嵌入式 开发 上(以后都使用这一款芯片,主要是我对这款芯片比较熟悉,嘿嘿),大概要做接下来的几方面的工作,其一:将CPU模式切换进系统模式,关闭系统中断,关闭看门狗,根据具体情况进行内存区域映射,初始化内存控制区,包括所使用的内存条的相关参数,刷新频率等,其二:设定系统运行频率,包括使用外部晶振,设置CPU频率,设置总线频率,设置外部设备所采用的频率等。其三:设置系统中断相关,包括定时器中断,是否使用FIQ中断,外部中断等,还有就是中断优先级设置,这里只实现两个优先级,只有时钟中断高一级,其它都一样,而中断向量初始化时都将这些中断向量指向0x18处,并关闭这里的所有中断,如果板子还接有诸如FLASH设备的话,还需要设置诸如FLASH相关操制寄存器,其四:需要关闭CACHE,到此为止, ARM 芯片 相关内容就完成初始化了

第二步:中断向量表,ARM的中断与PC机芯片的中断向量表有一点差异,嵌入式设备为了简单,当发生中断时,由CPU直接跳入由0x0开始的一部分区域(ARM芯片自身决定了它中断时就会跳入0x0开始的一片区域内,具体跳到哪个地址是由中断的模式决定的,一般用到的就是复位中断,FIQ,IRQ中断,SWI中断,指令异常中断,数据异常中断,预取指令异常中断),而当CPU进入相应的由0x0开始的向量表中时,这就需要用户自己编程接管中断处理程序了,这就是需要用户自己编写中断向量表,中断向量表里存放的就是一些跳转指令,比如当CPU发生一个IRQ中断时,就会自动跳入到0x18处,这里就是用户自己编写的一个跳转指令,假如用户在此编写了一条跳转到0x20010000处的指令,那么这个地址就是一个总的IRQ中断处理入口,一个CPU可能有多个IRQ中断,在这个总的入口处如何区分不同的中断呢?就由用户编程来决定了,具体实现请参见以后相关部分,中断向量表的一般用一个vector.S文件,当然,如何命名那是你自己的喜爱,但有一点需要声明,那就是在链接时一定要将它定位在0x0处

嵌入式  嵌入式系统开发   嵌入式操作系统  嵌入式开发板  BOOTLOADER

第三步:设置堆栈,一般使用三个栈,一个是IRQ栈,一个是系统模式下的栈(系统模式下和用户模式共享寄存器和内存空间,这主要是为了简单),设置栈的目的主要是为了进行函数调用和局部变量的存放,不可能全用汇编,也不可能不用局部变量

第四步:将自己以后的代码段和数据段全部拷贝至内存,并将BSS段清零

第五步:进行串口的初始化(主要是为了与用户交互,进行与PC机的文件传输),FLASH的初始化这里在FLASH中存放BOOT和内核),FLASH驱动的编写(这里的驱动有别于平常所说的驱动,由于FLASH不像SDRAM,只要设定了相关控制器之后就可以直接读写指定地址的数据,对FLASH的写操作是一块一块数据进行,而不是一个字节一个字节地写,具体请查阅相关资料)

第六步:等待一定的秒数,来接收用户进行输入,如果在指定的秒数内用户未输入任何字符,那么BOOT就开始在FLASH中的指定位置(可以由自己指定,这么做主要是为了简单)读取内核的所有数据到内存中(具体是内存中的什么位置由自己指定,也可以采用LINUX之类的做法,就是在内存的起始位置加上一个0x8000处),将跳转到内核的第一条代码处);如果用户在指定的秒数内键入了字符(这主要是为了方便开发,如果开发定型之后完全可以不要这段代码),那么就在串口与用户进行交互,接受用户在串口输入的命令,比如用户要求下载文件在FLASH中指定的位置等,具体内容可参考U-BOOT之类的开源项目到这里为止,BOOT部分已完成,这个BOOT非常简单,仅仅只是将PC机上传下来的文件固化到FLASH中,然后再将FLASH中的操作系统内核部分加载进内存中,并将CPU的控制权交给操作系统,下一页开始讲解如何写一个最简单的操作系统,呵,到现在才开始切入正题呢!!!!

深圳龙人嵌入式事业部 在为公司提供嵌入式ARM解决方案和OEM/ODM研发服务的同时提供 ARM开发板 (ARM9开发板和ARM7开发板)、ARM9核心板、ARM9学习板、ARM工控板及ARM仿真器ARM开发工具等嵌入式产品。网址: http://www.szarm.com

系统分类: 嵌入式
用户分类: 嵌入式系统和嵌入式开发
标签: 无标签
来源: 原创
发表评论 阅读全文(228) | 回复(0)

2

关于投票
在基于ARM7的嵌入式系统上开发USB接口
 

在基于ARM7的嵌入式系统上开发USB接口

文章整理: 龙人嵌入式事业部 (armodmlr)

本文介绍了在基于 ARM7 的嵌入式系统上开发USB接口的详细内容。项目使用 ARM7(MCU处理器)和PDIUSBD12(USB芯片)完成了U 盘的开发。主要内容涉及  USB 接口 的盘开发过程中所涉及的技术内容;重点介绍项目调试方法与步骤;并附上了 龙人 在开发此项目过程中的一些心得与体会。

龙人嵌入式研发中心 自成立以来, 一直坚持以技术为根本,以质量和服务求发展 ,专注于 嵌入式 底层应用技术的研究和开发,公司凭借多年耕耘所积累的专业技术和经验精心服务于客户,是电子产品制造厂商的最佳合作伙伴。

龙人 嵌入式研发中心 提供的服务有: 为客户提供专业的 嵌入式开发 (包括嵌入式软件和嵌入式硬件);面向行业用户提供ARM嵌入式解决方案;销售高品质的 ARM嵌入式开发板 (包括 ARM9系列开发板 ARM7系列开发板 、单片机开发板等 )、ARM嵌入式开发工具(如ARM仿真器、ARM编程器等)及ARM教学系统、ARM工控主板等。

一、项目背景 

1.1  PC接口简介 

1.2  USB接口分析 

1.3  USB器件的选择 

1.4  Mass Storage协议与 FAT16 

二、项目主要组成部分 

2.1  USB的端点 

2.2  Mass Storage协议 

2.3  Bulk-Only传输协议

2.4  SCSI 指令集

2.4  FAT16 文件系统

2.4.1  FAT文件系统结构

2.4.2  硬盘结构

2.4.3  Flash盘的 FAT结构

2.5  Flash的读写

嵌入式系统  嵌入式开发 ARM7 USB接口  ARM嵌入式

三、项目开发调试过程

3.1  硬件电路和基本程序结构

3.2  U盘调试的主要步骤和内容

3.3  检查 USB器件工作与否

3.4  提供描述符

3.5  Mass Storage协议 

3.6  SCSI 命令集

3.7  Flash的读写

四、总结 

具体内容请登录 龙人嵌入式系统开发网站 下载。

系统分类: ARM
用户分类: 嵌入式系统和嵌入式开发
标签: 无标签
来源: 原创
发表评论 阅读全文(101) | 回复(0)
Total , Page /