[首页]
[文章]
[教程]
首页
Web开发
Windows开发
编程语言
数据库技术
移动平台
系统服务
微信
设计
布布扣
其他
数据分析
首页
>
其他
> 详细
CONTEX-A8 uboot移植
时间:
2015-05-16 02:31:48
阅读:
331
评论:
0
收藏:
0
[点我收藏+]
在进行U-Boot移植之前,我们会用到一些有关S5PV210的知识,在这里简单的给大家介绍一下~
硬件平台:OK210开发板
U-Boot:2011.06
---------------------------------第一部分-----------------------------------
S5pv210是一个32位精简指令集、低功耗、高性能的cortex-a8处理器,它属于armv7架构。
上边的这张图,显示了S5PV210处理器的整体框图。从这张图中我们可以了解到210的主要功能,这些小的模块共同构成了210处理器。
首先说一说CPU核心部分,CPU的主频可以达到800M或1GHz,我们可以通过配置U-Boot源码中对应控制主频的宏来进行主频的选择。U-boot默认的主频是1GHz。CPU的核心部分还有512KB的高速缓存。还有NEON,NEON它是ARM内部集成的可以实现复杂算法的模块,比如说图像的智能分析,数学上的运算等都是通过NEON来实现的。
左上角是系统外设,这一部分主要是一些低速设备。其中:
RTC是实时时钟,负责系统时间的控制;
PLL是锁相环,主要起倍频作用;
Timer with PWM是定时器模块;
Watching Timer是看门狗,看门狗主要是在应用程序跑飞或者系统死机一段时间之后,将系统重启。看门狗在实际的项目中是要打开的。
DMA(24ch)是24通道的DMA控制器。如果没有DMA的话,数据是通过CPU传给内存,再由内存传给系统外设的;有了DMA之后,数据可以不通过CPU。比如音频数据通过DMA控制通道直接传到内存中。DMA可以控制外设数据与外设数据、外设数据与内存数据、内存数据与内存数据之间的传输,这样可以有效的提升系统的工作效率。6410中也有DMA,只是没有210的多;
Keypad(14x8):14x8的键盘接口;
TS-ADC(12Bit/10ch):12位的数模转换,有些电阻屏的触摸功能就是由他来实现的;
左下角是外部总线模块。从这个模块可以看到210支持IIS、AC97和PCM这样的音频标准接口;
HSMMC/SDx4:4路MMC总线,可以接SD卡、TF卡和SDIO接口;
USB Host2.0/OTG2.0:210支持USB Host 2.0,和师傅实际测试了一下,USB Host2.0的传输速度大概是12~16M/s;
UARTx4:4路串口;
IICx3:3路IIC总线,一些常用的电容屏的触摸芯片,重力传感器就是接在了IIC总线上;
HS-SPIx2:2路SPI总线;
GPIO:GPIO接口;
下边中间的是电源管路模块,如果在做手机或者平板电脑类的产品的话,一般会用到,他的作用是通过软件动态调节CPU功耗,一般是通过升高或降低,打开或者关闭电压的方式来调节功耗的;
右下角是存储接口模块,以前听到Memory总会幼稚的认为是内存的意思,其实并不是这样,Memory其实是存储的意思;
S5PV210的NAND支持SLC和MLC两种,SLC的稳定性由于MLC,同等容量的SLC价格高于MLC;
它还支持16位硬件ECC。由于nand flash的工艺问题,在数据读取的过程中可能会出现位错误,这时就需要Ecc来检查和纠正了;
210 常用的芯片是LPDDR2和DDR2,这里的LP就是low power的意思,就是低功耗~
右上角部分就是210强大的多媒体功能模块了;
首先是摄像头接口;
MFC多媒体格式转换模块,主要的任务就是视频文件的编解码;具有30帧/s的处理能力,支持H.263/H.264/MPEG4编码和解码;
支持2D/3D图形引擎;
HDMI,高清数字多媒体接口;
JPEG主要用于图片文件的硬件编码,原始数据通过JPEG编码生成jpg格式文件;
最后是LCD控制器;
中间的Multi layer AHB/AXI Bus是高速总线,CPU内部各个模块与CPU就是通过这个高速总线来实现通讯的。
--------------------------------------第二部分---------------------------------------
简单的了解了210处理器之后呢,就开始进行U-Boot的移植了。说到U-Boot,肯定会有不少朋友产生疑问,什么是U-Boot?U-Boot的功能是什么呢?其实啊,这个U-Boot它就是universal bootloader,也就是通用的bootloader。它存在于nandflash或者SD卡中,它是在开机上点之后,操作系统起来之前用来引导的一个程序。U-boot 的主要作用是进行内存的初始化、CPU的初始化、串口初始化等一系列的初始化工作,完成这些之后,再将操作系统加载到内存中,从而运行起来。
U-Boot 源码文件下包括一些目录文件和文本文件,这些文件可分为”与平台相关的文件”和”与平台无关的文件”,其中common文件夹下的文件就是与平台无关的文件;与平台相关的文件又分为CPU级相关的文件和与板级相关的文件:arch目录下的文件就是与CPU级相关的文件,而board、drivers、include等文件夹下的文件都是与板级相关的文件。我们在移植的过程中,需要修改的文件也就是这些与平台相关的文件。
U-Boot 的移植过程主要包括以下四个步骤:
1.下载U-Boot源码
2.修改相应的文件代码
3.编译U-Boot
4.烧写到开发板上,运行
下面是移植2011.06版本到210处理器上时修改(或添加)的文件:
以下文件均为与CPU级相关的文件
uboot2011.06/arch/arm/cpu/armv7/start.s
uboot2011.06/arch/arm/cpu/armv7/Makefile
uboot2011.06/arch/arm/include/asm/arch-s5pc1xx/hardware.h
uboot2011.06/arch/arm/lib/board.c
uboot2011.06/arch/arm/lib/Makefile
uboot2011.06/arch/arm/config.mk
以下文件均为与板级相关的文件
uboot2011.06/board/samsung/OK210/tools/mkv210_image.c
uboot2011.06/board/samsung/OK210/lowlevel_init.S
uboot2011.06/board/samsung/OK210/mem_setup.S
uboot2011.06/board/samsung/OK210/OK210.c
uboot2011.06/board/samsung/OK210/OK210_val.h
uboot2011.06/board/samsung/OK210/mmc_boot.c
uboot2011.06/board/samsung/OK210/Makefile
uboot2011.06/drivers/mtd/nand/s5pc1xx_nand.c
uboot2011.06/drivers/mtd/nand/Makefile
uboot2011.06/include/configs/OK210.h
uboot2011.06/include/s5pc110.h
uboot2011.06/include/s5pc11x.h
uboot2011.06/spl/Makefile
uboot2011.06/boards.cfg
uboot2011.06/config.mk
uboot2011.06/Makefile
在这里简单的说明一下我选择2011.06版本的uboot 进行移植的原因,在自己平时在各个论坛、贴吧中的了解,发现大家对2011.06版本的讨论相对来说多一些,所以选择的这个版本。在这里我想自己试一下U-Boot移植的过程也希望能给大家有一些帮助。
另外呢,附件提供的移植参考目录是在原始U-boot-2011.06版本基础上进行的修改,把修改的文件单独拿出来,方便大家使用对比工具查看我修改了哪些内容,当然移植参考目录里面,并不是所有的文件都是从U-boot-2011.06拷贝出来的,有些文件是从U-boot-1.3.4拷贝的:目录board/samsung/OK210下面的mmcboot.c 文件,从SD启动U-Boot必须含有该文件,三星官方提供的U-boot-1.3.4源码包含有该文件,我们直接拷贝过来就可以了。
下面的内容是我在移植uboot的时候师傅给我总结的移植思路(贴出来和大家一起分享一下~~):
移植过程就是在新的U-Boot代码中增加CPU级和Board级代码,使之能够在开发板上面运行。
1.看一下源代码里面是否有CPU级相关代码,比如S5PV210是ARMV7架构,看一下CPU目录下面是否有ARMV7的目录,因为U-Boot已经是嵌入式平台里面应用很广泛的Bootloader了,所以基本上都已经有了CPU级相关代码。
2.下一步就是查看板级相关代码了。一款主流CPU发布的时候,厂商一般都会提供官方开发板,比如S5PV210发布的时候三星公司提供了官方开发板,使用的U-Boot是1.3.4版本,三星在U-Boot官方提供的1.3.4基础上面进行了改进,比如增加SD卡启动和NandFlash启动相关代码 等等。在移植新版本的U-Boot到开发板的时候,我们需要看一下U-Boot代码里面是否已经含有了板级代码,如果已经有了,就不需要自己改动了,编译以后就可以使用,而有的时候在较新的U-Boot代码里面,是不含有这些板级支持包的,这个时候就需要增加自己的板级包了。
3.板级包的增加需要参考CPU官方提供的U-Boot代码,因为我们移植的是最小功能的U-Boot,让U-Boot能够运行起来即可,所以只需要抓最关键的代码,比如系统时钟的配置,DDR2内存的初始化代码,调试串口的初始化等,这些代码是需要参考U-Boot1.3.4的,不需要我们自己去写每一行,但是需要我们知道U-Boot 能够在S5PV210上面运行起来,必须做的工作。
--------------------------------------------------------------------------------------------------------------------------------------第三部分--------------------------------------------------------------------------------------------------------
下面开始切入主题:进行我们U-Boot的移植过程吧~
首先进行第一步,下载工作:输入U-Boot下载的地址,找到自己要下载的U-Boot版本,点击开始下载,下载完成之后开始解压。
U-Boot下载之后压缩包的压缩方式是.tar.bz2的,所以解压命令为tar jzvf **.tar.bz2
而我们平时经常解压的压缩包为.tar.gz格式的,所以它的解压命令为tar zxvf **.tar.gz。
这两个解压命令只有一个参数的差别,容易搞混的友友们需要重点注意喽~!
解压之后进入文件夹,可以看到之前给大家介绍的目录结构类似的文件夹和文本文件,然后就按照板子的配置进行相应文件的修改了~
在修改的过程中,用到最多的一个宏定义就是CONFIG_SPL_BUILD,这个宏定义的主要作用就是生成BL1文件,提到BL1文件肯定又会有朋友产生疑问,在这里就这个BL1文件给大家简单的介绍一下:
BL1文件是一段外部代码,存放在SD卡或者nandflash上,大小为8K;
除了BL1文件,还有BL0和BL2文件。
BL0文件是存放在CPU内部IROM中的一段固化代码,CPU上点之后,首先去运行BL0文件。
BL2文件是完整的U-Boot代码。
这三个文件之间的关系就是:BL0运行时会将BL1拷贝到CPU的IRAM中,然后执行BL1;BL文件执行起来之后会先进行内存的初始化,之后将BL2文件拷贝到外部内存中,也就是我现在手中这个210 板子的DDR2中。
移植过程最主要的就是代码的修改与文件的配置了,大家可以根据我所提供的这些内容进行代码的完善与修改。
修改完成之后开始编译工作,两个命令:
make OK210_config
make
编译的过程中会生成两个重要的文件,一个是BL1文件,另一个就是uboot文件。编译完成之后将这些内容烧写到SD卡中,烧写的命令如下:
1.dd bs=512 seek=1 if=/dev/zero of=/dev/sdb count=2048
2.dd bs=512 iflag=dsync oflag=dsync if=spl/OK210-spl.bin of=/dev/sdb seek=1
3.dd bs=512 iflag=dsync oflag=dsync if=u-boot.bin of=/dev/sdb seek=49
在这里值得说明几点:
dd命令是linux下非常有用的一个命令,作用就是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换;
命令中的sdb是SD卡的设备名称,在不同的电脑上可能名称是不一样的,所以大家在烧写的过程中一定要注意这个设备名称;
烧写到SD卡中,一定要了解一下SD卡的分区,下面是我自己画的一张有关SD卡分区的图,大家可以简单了解一下它的分区情况:
Sdcard 分区介绍:
在这里可以看到,SD卡一块的大小为512B,第一块为保留块,紧接着的8K存放BL1,所以BL1烧写的起始块标号为1,这也就是第二条烧写命令中seek=1的来源了;接下来存放环境变量,有的资料中将环境变量与BL1文件总结为BL1文件,不过这是的BL1文件就不再是8K大小了,而是加上环境变量的大小共24K了,也就是48块;之后存放BL2文件,也就是uboot.bin,起始块标号49。最后的部分是我们自己的拷贝空间了。
大概了解了这个分区之后,这个烧写命令想必大家也了解的差不多了。然后输入这些烧写命令进行文件烧写,注意这里的命令是在源码的目录文件下输入的,不然的话找不到对应的文件。
烧写完成,将SD卡插到开发板上,设置板子为SD卡启动,然后打开超级终端,配置好之后将板子上电,如果板子正常启动了,说明我们的移植工作顺利完成了。如果没有启动起来,那么就要检查一下哪一步出现了问题,然后继续开始回去查看相应的U-Boot源码。
----------------------------------------第四部分-------------------------------------
在这一部分,主要给大家介绍一下210的启动方式。
首先了解一下s5pv210支持的启动方式:
其中我们用的最多的是nandflash启动和SD卡启动。
其中我们用的最多的是nandflash启动和SD卡启动。
在上图中可以看出,第一启动方式中先工作的是IROM,他做了一些初始化工作,之后就是启动方式的选择,通过设置拨码开关的状态来确定启动方式。这里以SD卡启动为例,选择了SD卡启动,进入下一个流程:校验和,也就是检验文件传输过程中是否有数据传输错误,如果有的话第一启动就失败了,进入第二启动;如果传输无误,那么第一启动继续,BL1开始工作,初始化内存,加载BL2到外部内存等等,之后BL2运行起来,初始化内存、CPU、串口等等,加载操作系统,最后操作系统运行起来。第一启动方式启动成功。
如果第一启动方式启动失败,那么进入第二启动方式,来看一下第二启动方式的启动流程:
IROM的工作和第一启动方式相同,第一启动在文件传输过程中出现错误之后进入第二启动方式,如果校验和检验无误,那么接下来就是BL1,BL2和操作系统依次运行起来,最终板子启动成功;如果启动第二启动方式之后检查校验和有误,那么第二启动方式失败,进入串口启动,串口启动如果还是白,就进入USB启动,如果USB启动还失败的话,那么启动就失败了。
CONTEX-A8 uboot移植
原文:http://blog.chinaunix.net/uid-29270124-id-5028706.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年09月23日 (328)
2021年09月24日 (313)
2021年09月17日 (191)
2021年09月15日 (369)
2021年09月16日 (411)
2021年09月13日 (439)
2021年09月11日 (398)
2021年09月12日 (393)
2021年09月10日 (160)
2021年09月08日 (222)
最新文章
更多>
2021/09/28 scripts
2022-05-27
vue自定义全局指令v-emoji限制input输入表情和特殊字符
2022-05-27
9.26学习总结
2022-05-27
vim操作
2022-05-27
深入理解计算机基础 第三章
2022-05-27
C++ string 作为形参与引用传递(转)
2022-05-27
python 加解密
2022-05-27
JavaScript-对象数组里根据id获取name,对象可能有children属性
2022-05-27
SQL语句——保持现有内容在后面增加内容
2022-05-27
virsh命令文档
2022-05-27
教程昨日排行
更多>
1.
list.reverse()
2.
Django Admin 管理工具
3.
AppML 案例模型
4.
HTML 标签列表(功能排序)
5.
HTML 颜色名
6.
HTML 语言代码
7.
jQuery 事件
8.
jEasyUI 创建分割按钮
9.
jEasyUI 创建复杂布局
10.
jEasyUI 创建简单窗口
友情链接
汇智网
PHP教程
插件网
关于我们
-
联系我们
-
留言反馈
- 联系我们:wmxa8@hotmail.com
© 2014
bubuko.com
版权所有
打开技术之扣,分享程序人生!