嵌入式 U-Boot

7 篇文章 0 订阅
7 篇文章 0 订阅

  uboot 全称 universal boot loader,用来启动操作系统的。

  其实,就是一段比较复杂的单片机代码,用来作为引导程序,它的主要任务是初始化硬件设备,将系统的软硬件环境带到一个合适的状态,再将内核从一个存储介质读入到内存中,然后,跳到内核的入口点去执行,即操作系统(OS)。

    Das U-Boot is an open source, primary boot loader used in embedded devices. It is available for a number of different computer architectures, including 68k, ARM, AVR32, Blackfin, MicroBlaze, MIPS, Nios, PPC, and x86.

    U-Boot是遵循GPL条款的开饭源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核远程许进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。

    U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。

    A boot loader  is a computer program that loads an operation system or some other software for the computer after completion of the self-tests. Within the hard reboot process, it runs after completion of the self-tests, then loads and runs the software. A boot loader is loaded into main memory from persistent memory, such as a hard disk drive or, in some older computers, from a medium such as punched cards, punched tape, or magnetic tape. The boot loader then loads and executes the processes that finalize the boot. Like POST(power-on self-tests) processes, the boot loader code comes from a "hard-wired" and persistent location; if that location is too limited for some reason, that primary boot loader calls a second-stage boot loader or a secondary program loader.

    选择U-Boot的理由:

    ①开放源码

    ②支持多种嵌入式操作系统内核

    ③支持多个处理器系列

    ④较高的可靠性和稳定性

    ⑤高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等

    ⑥丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等

    ⑦较为丰富的开发吊事文档与强大的网络技术支持。

    Boot is short for bootstrap or bootstrap load and devices from the phrase to pull oneself up by one's bootstraps.  

   The importance of Das U-Boot in embedded Linux systems is quite succinctly stated in the book Building Embedded Linux Systems, by Karim Yaghmour, whose text about U-Boot begins, "Though there are quite a few other bootloaders, 'Das U-Boot' the universal bootloader, is arguably the richest, most flexible, and most actively developed open source bootloader available."

   U-Boot 有两种工作模式:启动模式和下载模式。

   U-Boot启动过程属于两个阶段stage1(编译)和stage2(C语言),stage1完成初始化硬件,为stage2准备内存空间,并将stage2的代码复制到内存中,设置好堆栈,然后,跳转到stage2,在stage2中调用内核。


    1.编译生成U-Boot.bin 文件

以mini2440移植U-Boot为例(未经移植的U-Boot不支持mini2440\)

(1)选择要使用的board

make mini2440_config

(2)编译生成u-boot.bin

make CROSS_COMPILE=arm-linux-


    2.U-Boot的使用-基本命令

不通过单板所支持的命令不一定会一样

(1)help用于查看当前单板所支持的所有命令

(2)printenv 查看环境相关变量

(3)setenv 添加、修改、删除环境变量

              setenv name value 修改或添加变量name

              setenv name 删除变量name

(4)saveenv 保持环境变量,将当前的定义的所有环境变量保存到flash

(5)tftp 通过网络下载文件(需要先配置网络)

例如:

   Uboot> setenv ethaddr 12:34:56:78:9A:BC

   Uboot> setenv ipaddr 192.168.2.118

   Uboot> setenv serverip 192.168.2.1 (tftp服务器地址)

   Uboot> tftp 32000000 uImage (把serverip中的服务目录下的uImage通过tftp读入到 0x32000000)

(6) md 显示内存区的内容

md 采用16禁止和ASCII码两种形式来显示存储单元的内容

md 可以采用标识符.l(长字),.w(字), .b(字节)

Uboot> md.w 100000 以字的形式显示在0x100000处的内容

(7)mm 修改内存,地址自动增加

用法 mm[.b, .w, .l]address

mm提供一种互动修改存储器内容的方法,它会显示地址和当前的值,然后,提示用户输入 。如果输入了一个合法的16禁止的值,将会被写入改地址,然后,提示下一个地址。如果没有任何输入值,只是按下回车,那么该地址的内容保持不变。结果输入,则输入空格再回车。

Uboot> mm 100000

(8)flinfo 查看flash扇区信息

(9)protect flash写保护,打开或关闭扇区写保护

用法 protect off|on all 关闭|打开所有扇区的写保护

         protect off|on start end 关闭/打开从start到end扇区的写保护(start和end是指定扇区的地址)

(10)erase 擦除flash扇区

用法 erase start end

在使用cp命令向nor flash 写入数据之前必须要先使用erase命令查除flash,因为nor flash按字节写入时,无法写入1,所以必须通过擦除来写入1.

Uboot> erase 3000 1effff

(11)cp 拷贝数据

用法cp [.b, .w, .l]src_address dst_address len 将内存 src_address 地址处的数据(长度为len)拷贝到dst_address处

cp提供了一种内存与内存,内存与flash之间数据拷贝的方法

Uboot>cp.b 31000000 50000 d0000

(12)go 执行内存中的二进制代码

用法 go addr [arg...]

(13)bootm 执行内存中的二进制代码,要求二进制代码有固定的头文件

(14)bdinfo(简写为bdi)显示开发信息


U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:

(1) 第一阶段的功能

*硬件设备初始化

*加载U-Boot第二阶段代码到RAM空间

*设置好栈

*跳转到第二阶段代码入口

(2)第二阶段的功能

*初始化本阶段使用的硬件设备

*检测系统内存映射

*将内核从Flash读取到RAM中

*为内核设置启动参数

*调用内核


开发板的Boot方式是什么,开发板上电以后是怎么执行的。

一般来说,三星的开发板有三种方式:nand、nor和ram。

具体用哪一种方式启动要看对应的CPU寄存器配置,如,S3C2440的CPU的OM[0:1]这两个引脚。


nand:对于2440来说,CPU是不给nand-flash分配地址空间的,nand-flash只相当于CPU的一个外设,S3C2440做了一个从nand-flash启动的机制。开发板一上电,CPU就自动复制。

nand-flash里面的前4K-Bytes内容到S3C2440内部集成的SDRAM,然后,把4K内容所在的RAM映射到S3C2440的0地址,从0地址开始执行。这4K的内容主要负责下面的这些工作:初始化中断矢量、设定CPU的工作模式为SVC32模式、屏蔽看门狗、屏蔽中断、初始化时钟、把整个U-Boot重定向到外部SDRAM、跳到主要的C函数入口。


nor:早起的时候,利用nor-flash启动的方式比较多,就是把U-Boot少些到nor-flash里面,直接把nor-flash映射到S3C2440的0地址,上电从0地址开始执行。


ram:直接把U-Boot放到外部SDRAM上跑,这一般debug时候用到。


 所有版本的u-boot源代码压缩包都可以在ftp://ftp.denx.de/pub/u-boot/下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值