没有合适的资源?快使用搜索试试~ 我知道了~
基于TQ2440开发板uboot移植
5星 · 超过95%的资源 需积分: 10 7 下载量 160 浏览量
2011-05-25
12:06:42
上传
评论
收藏 383KB PDF 举报
温馨提示
试读
48页
详细介绍了uboot的移植,基于TQ2440开发板,介绍sdram,flash的详细移植
资源推荐
资源详情
资源评论
u‐boot 移植详细文档
作者:TekkamanNinja
作者博客:http://tekkman.cublog.cn
整理:CoolborXie
一、BootLoader 的概念和功能
1、嵌入式 Linux 软件结构与分布
在一般情况下嵌入式 Linux 系统中的软件主要分为以下及部分:
(1)引导加载程序:其中包括内部 ROM 中的固化启动代码和 BootLoader 两部分。
而这个内部固化 ROM 是厂家在芯片生产时候固化的,作用基本上是引导 Boot Loader。有的芯片比较复
杂,比如 Omap3,他在 flash 中没有代码的时候有许多启动方式:USB、UART 或以太网等等。而 S3C24x0 则很
简单,只有 Norboot 和 Nandboot。
(2)Linuxkernel 和 drivers。
(3)文件系统。包括根文件系统和建立于 Flash 内存设备之上的文件系统(EXT4、UBI、CRAMFS 等等)。
它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境的载体。
(4)应用程序。用户自定义的应用程序,存放于文件系统之中。
在 Flash 存储器中,他们的一般分布如下:
但是以上只是大部分情况下的分布,也有一些可能根文件系统是 initramfs,被一起压缩到了内核映像里,
或者没有 Bootloader 参数区,等等。
2、在嵌入式 Linux 中为什么要有 BootLoader
在 linux 内核的启动运行除了内核映像必须在主存的适当位置,CPU
还必须具备一定的条件:
1. CPU 寄存器的设置:
R0=0;
R1=MachineID
(即 MachineTypeNumber,定义在 linux/arch/arm/tools/mach‐types);
R2=内核启动参数在 RAM 中起始基地址;
2. CPU 模式:
必须禁止中断(IRQs 和 FIQs);
CPU 必须 SVC 模式;
3. Cache 和 MMU 的设置:
MMU 必须关闭;
指令 Cache 可以打开也可以关闭;
数据 Cache 必须关闭;
但是在 CPU 刚上电启动的时候,一般连内存控制器都没有配置过,根本无法在内存中运行程序,更不可
能处在 Linux 内核的启动环境中。为了初始化 CPU 及其他外设,使得 Linux 内核可以在系统主存中跑起来,并
让系统符合 Linux 内核启动的必备条件,必须要有一个先于内核运行的程序,他就是所谓的引导加载程序(Boot
Loader)。
而 Boot Loader 并不是 Linux 才需要,是几乎所有的运行操作系统的设备都具备的。我们的 PC 的 BOIS 就
是 BootLoader 的一部分(只是前期引导,后面一般还有外存中的各种 BootLoader),对 于 LinuxPC 来说,Boot
Loader=BIOS+GRUB/LILO。
3、BootLoader 的功能和选择
通过上面的讲述,我们可以知道:BootLoader 是在操作系统内核运行之前运行的一段小程序。通过这段
小程序,我们可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系
统内核准备好正确的环境,最后从别处(Flash、以太网、UART)载入内核映像并跳到入口地址。
由于 BootLoader 直接操作硬件,所以她严重依赖于硬件,而且依据所引导的操作系统的不同,也有不同
的选择对于嵌入式世界中更是如此。就 S3C24x0 而言,如果是引导 Linux,一般选用韩国的 mizi 公司设计的
vivi 或者 DENX 软件工程中心的 U‐boot,如果是引导 WinCE,就选用 Eboot。如果是开发 StrongARM 构架下的
LART,就可选用由 Jan‐DerkBakker 和 Erik Mouw 发布的 Blob(Boot LoaderObject)。如果是要引导 eCos 系统,
就可以选用同是 Redhat 公司开发的 Redboot。
所以在嵌入式世界中建立一个通用的 BootLoader 几乎是不可能的,而有可能的是让一个 BootLoader 代
码支持多种不同的构架和操作系统,并让她方便移植。U‐boot 就是支持多平台多操作系统的一个杰出代表。
这也是为什么我喜欢用 U‐boot 的原因,因为如果在开发 S3C2440 时熟悉了 U‐boot,再转到别的平台的时候就
可以很快地完成这个平台下的 U‐boot 移植,而且 U‐ boot
的代码结构越来越合理,对于新功能的添加也十分
容易。
值得一提的是国内的一个开源项目 maxwit 中的 g‐bios 也是一个不错的开源 BootLoader,同样支持多平台。
二、U‐boot 简介
1、U‐boot 的起源
U‐Boot 是 DasU‐Boot 的简称,其含义是 UniversalBootLoader,是遵循 GPL 条款的开放源码项目。一开始
德国 DENX 软件工程中心的 Wolfgang Denk 基于 8xxROM 和 FADSROM 的源码创建了 PPCBoot 工程项目,此后
不断添加处理器的支持。后来,Sysgo Gmbh 把 PPCBoot 移植到 ARM 平台上,创建了 ARMBoot 工程项目。然
后以 PPCBoot 工程和 ARMBoot 工程为基础,创建了 U‐Boot 工程,2002 年 12 月 17 日第一个版本 U‐Boot‐0.2.0
发布,同时 PPCBoot 和 ARMboot 停止维护。而今,U‐Boot 作为一个主流、通用的 Bootloader,成功地被移植
到包括主流的 PowerPC、ARM、X86 、MIPS、NIOS、XScale 等体系结构的上百种开发板,成为功能最多、灵
活性最强,并且开发最积极的开源 BootLoader。目前。U‐Boot 仍然由 DENX 的 WolfgangDenk 维护。
2、U‐boot 的开发情况和资源
一开始 U‐boot 的版本号是由 X.Y.Z 来表示的,从 0.2.0 一直到 1.3.4,之后便开始使用年份加月份的表示方
法,2008.11 到现在的 2010.3 平均每 3 个多月出一个新版本,每次代码的结构和定义都会有一些修正和改进。
我从 1.2.0 开始移植 U‐boot 到 S3C24x0,到现在的 2010.03,发现 U‐boot 的代码越来越规整,功能越来越强,
但是移植的难度反而越来越小,需要修改的地方越来越少。
而对于 U‐boot,不仅仅有主线版本,在 U‐boot 的 Git 代码仓库中还有各个 CPU 构架的分支版本,这些分
支会在一定的时候将修改汇入主线。值得注意的是 U‐boot‐V2,这是下一代的 U‐boot,代码的构架比较新,现
在正处在开发的阶段,但针对 S3C2440 的支持似乎可以了,还没有时间尝试。
下面总结一下关于 U‐boot 源代码的网络资源:
官方链接
德国 DENX 软件工程中心主页
http://www.denx.de/
U-boot 官方主页(注意其中的邮件
列表链接)
http://www.denx.de/wiki/U-Boot/WebHome
U-boot 官方源码 FTP 下载
ftp://ftp.denx.de/pub/u-boot/
U-boot 官方 Git 代码仓库
http://git.denx.de/?p=u-boot.git
针对 S3C2440 的修改
Openmoko 手机的 U-boot 源码 Git
http://git.openmoko.org/?p=u-boot.git;a=shortlog;h=refs/heads/stable
buserror 的 U-boot 源码 Git
(针对 mini2440)
http://repo.or.cz/w/u-boot-openmoko/mini2440.git
我的 U-boot 源码 Git
(针对 mini2440)
http://github.com/tekkamanninja
三、开发环境准备
开发前的准备有以下几个方面:
1、交叉编译工具链的安装。
我在前段时间使用了 Crosstool‐ng 编译出了 forARMv4t 的交叉编译工具,Gcc 的版本是 4.3.2,可以用来编
译最新版的 Linux 内核,当然也可以轻松的编译 U‐Boot.
请看:《用 crosstool‐ng 建立 Linux 交叉编译环境
》
在编译好交叉编译工具链后,关键是要在环境变量的 PATH 中添加编译工具的路径(也就是
arm‐*‐linux‐*‐gcc 所在的路径),在编译时系统才找得到命令。
在 Ubuntu 下的修改方法:
vi~/.profile
并在最后加上:
PATH="<交叉编译工具的路径>:$PATH"
2、网络服务的设置
在使用 U‐boot 的时候常常会用到宿主机的 TFTP 和 NFS 这两种网络服务,所以最好在开发前设置好。我
为了记录以前写过两篇手记,记录这两个服务的安装配置过程,供大家参考。
Ubuntu 下安装配置 NFS 网络服务手记
Ubuntu 下安装配置 TFTP 服务手记
3、串口终端程序
在使用 U‐boot 的时候,必然会用到串口与开发板进行通信,所以串口终端程序必不可少。在 Linux 下的
串口终端程序有 minicom、C‐kermit,还有一个图形化的串口终端:gtkterm。
但是我个人一般比较喜欢用 C‐kermit,因为在 Linux 下是通过串口 kermit 协议传输文件到开发板,就属
C‐kermit 比较好用。
下面我就简单介绍下 C‐kermit 安装配置的大致步骤:
(1)安装 ckermit 程序;
(2)编写 ckermit 的配置文件~/.kermrc。
下面是一个很简单的安装和配置脚本,供大家参考:
#!/bin/sh
echoinstallC‐kermit...
sudoapt‐getinstallckermit
if["$?"="0"]
then
echo"installckermitOK!!"
else
echo"installckermiterror!!!"
#exit1
fi
# 如果是 USB 转串口,就是类似/dev/ttyUSB0 的设备,如果是原生的硬件串口,就是类似/dev/ttyS0 的设备
节点。
#根据你使用的串口,设备节点编号可能有变,你可以 ls/dev/tty*看看你用的到底有什么设备节点。
cat>~/.kermrc<<EOF
setline/dev/ttyUSB0
setspeed115200
setcarrier‐watchoff
sethandshakenone
setflow‐controlnone
robust
setfiletypebin
setfilenameu‐boot.bin
setrecpack1000
setsendpack1000
setwindow5
c
EOF
剩余47页未读,继续阅读
资源评论
- mission0082013-06-28不错 还可以 对我帮助很大
ziyouyu0011
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功