U-Boot移植(1)--在U-boot中建立自己的开发板
来源:互联网 发布:微信uwp for windows 编辑:程序博客网 时间:2024/05/29 16:40
本人一菜鸟,最近一直在学习嵌入式,接触到uboot移植。本文记载学习过程与心得。如有错误的地方希望大家指点。
对于一个计算机而言,当系统启动加电后,内核启动或应用程序运行之前,首先运行ROM中的一段程序代码,通过这段代码,为最终调用重装系统内核,运行应用程序准备正确的环境,这段代码就是所谓的引导加载程序。
对于ARM中体系结构的CPU说,第一条指令从0x00000000开始执行。在嵌入式开发板中需要把存储器件ROM或者Flash映射到这个地址,而在这个地址处安排的通常就是系统的Bootloader(而嵌入式系统则将固态存储设备比如(Flash)安排在这个地址上,可保证掉电之后Bootloader不丢失),通过这个小程序,可以初始化硬件设备,建立内存空间的映射图,以便最终调用操作系统内核准备好正确的环境。 而Bootloader包含两种不同的操作模式,启动加载模式和下载模式。
1.启动加载程序
这种模式,在上电后,Bootloader从目标机上某一个固态存储设备将操作系统加载到RAM中运行,已正式发布的嵌入式产品的Bootloader显然必须工作在这个模式下。
2.下载模式
目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机(host)下载文件。
Bootloader 启动流程分析
一个嵌入式软件系统可以分为引导加载程序、linux内核、文件系统、用户应用程序四个层次。
从固态存储设备上启动的Bootloader大多采用两阶段,启动过程中分为stage1和stage2:stage1通常用汇编语言编写完成初始化硬件,为stage2准备内存空间,并将stage2复制到内存中,设置堆栈,然后跳转stage2。stage2通常用c语言实现,初始化要使用的硬件(串口,网口等等)、检测系统内存映射、为内核设置启动参数、调用内核。
uboot浅谈
随着Bootloader的发展,对于arm体系结构比较常用的Bootloader 主要有 U-Boot、vivi和Biob.U-boot 从最开始的支持PowerPC,到现在还可以支持MIPS、ARM、X86等体系结构。 UBoot不仅支持嵌入式linux系统的引导,还支持Vxworks,QNX等多种嵌入式操作系统。下载uboot的源代码“ftp://ftp.denx.de/pub/u-boot” 下载解压后,主要目录如下:
主要目录说明:
1. board 包括板子的相关内容(每个板子都以一个子目录出现在当前目录中),主要包含SDRAM,FLASH,网卡驱动等。
2.common 与处理器体系结构无关的通用代码。实现Uboot支持的命令。
3.cpu 与处理器相关的文件,每个子目录都包含 cups,interrupt.c和start.s 。
4.disk Disk驱动分区相关信息代码。
5.doc U-boot的说明文档。
6.drivers 通用设备驱动程序。
U-boot 编译(以OK6410开发板来说)
在网上下载的U-boot并不支持6410开发板,需要进行编译。编译步骤分为两步:配置,编译。
1.下载uboot,解压后进入目录:(我用的是u-boot-2011.03.tar.bz2 版本。)
#tar xjvf u-boot-2011.03.tar.bz2
#cd u-boot-2011.03/
2.在U-boot中建立自己的开发板:
(1) 由于s3c6410和s3c6400的接口资源比较类似,仅在外接设备和CPU的运行频率等方面有些差别。故在board/samsung/下建立自己开发板的项目,取名为smdk6410。 并且将smdk6400文件里的所有内容复制到smdk6410文件内, 进入smdk6410文件夹 smdk6400.c更名为smdk6410.c 打开smdk6410.c文件 将里面6400全改为6410,打开smdk6410文件下的Makfile, 将里面的6400改为6410.
(2) 在修改后的smdk6410.c中,头文件包含 #include <asm/arch/s3c6410.h>的话,因为在文件夹asm/arch中没有s3c6410.h,先暂时使用asm/arch/s3c6400.h或者把asm/arch中的s3c6400.h复制后修改为s3c6410.h
(3) 进入/u-boot-2011.03/nand_spl/board/samsung/smdk6400/的目录,复制smdk6410,粘贴,将副本的smdk6400改名为smdk6410.更改Makefike文件,将里面的6400全部改为6410。
(4) 进人/u-boot-2011.03/include/configs/ 复制smdk6400.h,并将副本改为smdk6410.h。
(5) 打开/u-boot-2011.03/Makefile , 找到CROSS_COMPILE?= 在后面添加arm-linux-
在此Makefile搜索6400,然后跳转到如下图;
复制上面代码 然后粘贴到这段代码后面 把6400改为6410
运行make smdk6410_config
然后在运行make
如果编译失败,提示
这个错误要修改
uboot.lds
nand_spl/u-boot.lds
nand_spl/board/samsung/smdk6410/u-boot.lds
board/samsung/smdk6410/u-boot-nand.lds
加入 _end = .;
在这一行的前面
再次编译就可以成功了 生成uboot.bin文件。
- U-Boot移植(1)--在U-boot中建立自己的开发板
- u-boot-2011.03在TQ2440上的移植(1)--建立自己的demo板
- U-boot 移植 --- 建立自己的目标板
- u-boot-2010.06在TQ2440上的移植--建立自己的demo板
- u-boot-2012.04.01移植到TQ2440(一):建立自己的开发板
- 移植属于自己的6410开发板的U-Boot
- u-boot-2010在s3c2440开发板上的移植
- u-boot移植(二)建立mini2440开发板工程
- U-boot移植到新的开发板1
- U-Boot的移植
- U-Boot 的移植
- u-boot的移植
- U-Boot的移植之(三)实战篇:移植U-Boot到XSBASE270开发板
- U-Boot的移植之(三)实战篇:移植U-Boot到XSBASE270开发板
- U-Boot的移植之(三)实战篇:移植U-Boot到XSBASE270开发板
- U-boot在开发板上移植过程详解(2)---U-boot实现源码分析(第一阶段)
- U-boot在开发板上移植过程详解(3)---U-boot实现源码分析(第二阶段)
- [s3c2416x移植u-boot-2015.10]如何在u-boot工程中取消对NorFlash的支持
- proxool配置
- sqlserver 临时表与表变量
- shell高效获取分割字符串的方法?
- 多线程的程序设计实例分析
- ORACLE
- U-Boot移植(1)--在U-boot中建立自己的开发板
- VC中一个堆破坏的例子
- 继承与聚合
- 为您介绍几款开源的数据挖掘工具
- cout与printf的区别
- linux下C++SocketTCP编程---服务器端
- Ubuntu 12.04 64位 -- eclipse 没有R文件
- Xcode 4.1~4.6 + iOS 5、iOS 6免证书(iDP)开发+真机调试+生成IPA
- 开源项目