硬件平台: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启动还失败的话,那么启动就失败了。
在这里我只是简单的给大家描述一下,要想具体了解的话,还是要看手册的,一会儿我会上传附件给大家分享这些手册的内容,有兴趣的朋友们可以仔细研究一下的~
写到这里,帖子的内容也就差不多了,这一次的文字好多啊,码字码的手都快僵了,可能会有不太准确的地方,还请各位前辈多多指教。小女子在此先谢过啦*^__^*
23 个解决方案
#1
#2
貌似发了2次?
#3
up,楼主威武
#4
好贴
#5
妹子 好贴啊
我想请教一个问题,就是关于BL1的问题
我手上有一个华天正的210开发板 用的uboot也是1.3.4版本的,按照你的图该uboot首先生成uboot.bin(这个没问题),然后通过某个工具截取BL1
我想请教:
1、这个截取的过程发生在哪里(是顶层Makefile里面吗),能否指出具体的代码
2、截取出来的BL1应该是单独的某个文件吧,我也不知道是哪个文件(从你的文章里面看出是OK210-spl.bin)
3、我的开发板在从SD卡启动时,往SD卡里面烧写Uboot时,用的是moviNAND_Fusing_Tool_v2.0.exe工具,往里面导入程序时,只是导入了u-boot.bin,并没有说要导入BL1,这是为什么呢
我想请教一个问题,就是关于BL1的问题
我手上有一个华天正的210开发板 用的uboot也是1.3.4版本的,按照你的图该uboot首先生成uboot.bin(这个没问题),然后通过某个工具截取BL1
我想请教:
1、这个截取的过程发生在哪里(是顶层Makefile里面吗),能否指出具体的代码
2、截取出来的BL1应该是单独的某个文件吧,我也不知道是哪个文件(从你的文章里面看出是OK210-spl.bin)
3、我的开发板在从SD卡启动时,往SD卡里面烧写Uboot时,用的是moviNAND_Fusing_Tool_v2.0.exe工具,往里面导入程序时,只是导入了u-boot.bin,并没有说要导入BL1,这是为什么呢
#6
挖 女神好厉害,,
#7
附件在哪里呢?
#8
很好很详细
#9
文章很好。很详细。
#10
uboot不错,我搞过,加过启动画面。
#11
不管什么都是菜鸟想学嵌入式开发,,,怎么能得偿所愿?
#12
S5PV210板子上刚刚跑起来,就是那个bootloader里设置了bootcmd为movi read kernel 20008000,bootm 20008000这两句怎么不自动执行啊。。还要我手动搞定。。求解。。
#13
好吧。。逗号。。应该是分号。。。
#14
#15
我也玩ok210板,还没搞起来,做完后也来发贴
#16
不错不错。
楼主用的是nandflash?
我用的S5pv210+EMMC(sandisk iNand )4G/8G
最近准备召集人一起移植uboot和kernel以及android4.2
现在硬件已经做出来,有兴趣的访问以下博客
http://blog.csdn.net/gooogleman/article/details/8830576
楼主用的是nandflash?
我用的S5pv210+EMMC(sandisk iNand )4G/8G
最近准备召集人一起移植uboot和kernel以及android4.2
现在硬件已经做出来,有兴趣的访问以下博客
http://blog.csdn.net/gooogleman/article/details/8830576
#17
写的不错,受教了,谢谢。
#18
你好:
非常感谢你的分享,我有几个问题想请教,在你的博客中有关于SD卡分区的介绍,我想进一步了解或咨询一下,你烧写MLO、u-boot.bin、uImage的时候是如何确定他们在SD中块位置?还是可以随意存放?谢谢。如果可以请多指教。我的QQ:52397968.邮箱:52397968@qq.com
非常感谢你的分享,我有几个问题想请教,在你的博客中有关于SD卡分区的介绍,我想进一步了解或咨询一下,你烧写MLO、u-boot.bin、uImage的时候是如何确定他们在SD中块位置?还是可以随意存放?谢谢。如果可以请多指教。我的QQ:52397968.邮箱:52397968@qq.com
#19
现在该用4412了吧,还用210吗
#20
学习下!!!正在玩210
#21
#22
“大概了解了这个分区之后,这个烧写命令想必大家也了解的差不多了。然后输入这些烧写命令进行文件烧写,注意这里的命令是在源码的目录文件下输入的,不然的话找不到对应的文件。”
美女博主,请问怎么分区啊?
美女博主,请问怎么分区啊?
#23
真是够了,直接把飞凌网站上的学习资料整过来。。。。。。。。。。http://www.witech.com.cn/news/Article_Show.asp?ArticleID=432
#1
#2
貌似发了2次?
#3
up,楼主威武
#4
好贴
#5
妹子 好贴啊
我想请教一个问题,就是关于BL1的问题
我手上有一个华天正的210开发板 用的uboot也是1.3.4版本的,按照你的图该uboot首先生成uboot.bin(这个没问题),然后通过某个工具截取BL1
我想请教:
1、这个截取的过程发生在哪里(是顶层Makefile里面吗),能否指出具体的代码
2、截取出来的BL1应该是单独的某个文件吧,我也不知道是哪个文件(从你的文章里面看出是OK210-spl.bin)
3、我的开发板在从SD卡启动时,往SD卡里面烧写Uboot时,用的是moviNAND_Fusing_Tool_v2.0.exe工具,往里面导入程序时,只是导入了u-boot.bin,并没有说要导入BL1,这是为什么呢
我想请教一个问题,就是关于BL1的问题
我手上有一个华天正的210开发板 用的uboot也是1.3.4版本的,按照你的图该uboot首先生成uboot.bin(这个没问题),然后通过某个工具截取BL1
我想请教:
1、这个截取的过程发生在哪里(是顶层Makefile里面吗),能否指出具体的代码
2、截取出来的BL1应该是单独的某个文件吧,我也不知道是哪个文件(从你的文章里面看出是OK210-spl.bin)
3、我的开发板在从SD卡启动时,往SD卡里面烧写Uboot时,用的是moviNAND_Fusing_Tool_v2.0.exe工具,往里面导入程序时,只是导入了u-boot.bin,并没有说要导入BL1,这是为什么呢
#6
挖 女神好厉害,,
#7
附件在哪里呢?
#8
很好很详细
#9
文章很好。很详细。
#10
uboot不错,我搞过,加过启动画面。
#11
不管什么都是菜鸟想学嵌入式开发,,,怎么能得偿所愿?
#12
S5PV210板子上刚刚跑起来,就是那个bootloader里设置了bootcmd为movi read kernel 20008000,bootm 20008000这两句怎么不自动执行啊。。还要我手动搞定。。求解。。
#13
好吧。。逗号。。应该是分号。。。
#14
#15
我也玩ok210板,还没搞起来,做完后也来发贴
#16
不错不错。
楼主用的是nandflash?
我用的S5pv210+EMMC(sandisk iNand )4G/8G
最近准备召集人一起移植uboot和kernel以及android4.2
现在硬件已经做出来,有兴趣的访问以下博客
http://blog.csdn.net/gooogleman/article/details/8830576
楼主用的是nandflash?
我用的S5pv210+EMMC(sandisk iNand )4G/8G
最近准备召集人一起移植uboot和kernel以及android4.2
现在硬件已经做出来,有兴趣的访问以下博客
http://blog.csdn.net/gooogleman/article/details/8830576
#17
写的不错,受教了,谢谢。
#18
你好:
非常感谢你的分享,我有几个问题想请教,在你的博客中有关于SD卡分区的介绍,我想进一步了解或咨询一下,你烧写MLO、u-boot.bin、uImage的时候是如何确定他们在SD中块位置?还是可以随意存放?谢谢。如果可以请多指教。我的QQ:52397968.邮箱:52397968@qq.com
非常感谢你的分享,我有几个问题想请教,在你的博客中有关于SD卡分区的介绍,我想进一步了解或咨询一下,你烧写MLO、u-boot.bin、uImage的时候是如何确定他们在SD中块位置?还是可以随意存放?谢谢。如果可以请多指教。我的QQ:52397968.邮箱:52397968@qq.com
#19
现在该用4412了吧,还用210吗
#20
学习下!!!正在玩210
#21
#22
“大概了解了这个分区之后,这个烧写命令想必大家也了解的差不多了。然后输入这些烧写命令进行文件烧写,注意这里的命令是在源码的目录文件下输入的,不然的话找不到对应的文件。”
美女博主,请问怎么分区啊?
美女博主,请问怎么分区啊?
#23
真是够了,直接把飞凌网站上的学习资料整过来。。。。。。。。。。http://www.witech.com.cn/news/Article_Show.asp?ArticleID=432