Bootloader and Uboot compiled, c…

来源:互联网 发布:js导出csv 编辑:程序博客网 时间:2024/05/17 23:45

一个嵌入式系统从软件角度来看分为三个层次:

  1. 引导加载程序:包括固化在固件(firmware)中的boot程序(可选)和Bootloader两大部分.
  2. Linux内核:特定的嵌入式平台的定制内核.
  3. 文件系统:包括了系统命令和应用程序.

 

一个同时装有Bootloader内核的启动参数,内核映像和根文件系统映像的固态存储设备:

Bootloader <wbr>and <wbr>Uboot <wbr>compiled, <wbr>commonly <wbr>used <wbr>commands, <wbr>configuration <wbr>and <wbr>installation

Bootloader:操作系统运行之前的一段小程序.

                     初始化硬件设备.

                     将引导操作系统进入内存中.

 

移植:

  1. 不同的CPU体系结构都有不同的BOOTLOADER.
  2. 即使基于同一种CPU而构建的,但如果它们的硬件资源或配置不一样的,也不可取.(板级配置不同)

 

流程:Bootloader的启动可分为单阶段和多阶段.(大多采用两阶段)

 

两阶段:stage1:完成初始化硬件.(CPU,寄存器 and soon)

                            为stage2准备内存空间.

                           将stage2的代码从硬盘中读取,读入内存中.

                           设置堆栈,然后跳入C入口.(stage2)

             stage2:初始化硬件.(串口,网卡 and so on)

                            将内核映像和根文件系统映像从flash读到RAM中.

                           调用内核.

 

Uboot:一种bootlader.

  1. 支持多种嵌入式CPU.(MIPS,X86,ARM,XScale)
  2. 支持多种体统.(Linux,Vxworks,QNX)

 

目录结构:Board:和开发板有关的文件.

                 Common:实现Uboot支持命令.

                 Cpu:与特定CPU架构相关的代码.

                 Disk:磁盘支持.

                 Doc:文档目录.

                 Drivers:驱动.

                 Fs:文件系统.

                 Include:头文件,目录下configs目录与配置有关.

                 Net:网络协议.

                 Tools:生成Uboot工具.mkimage,crc and so on.

Uboot编译:

  1. 执行:makesmdk2410_config              (例子)
  2. 进行编译生成u-boot.bin:makeCROSS_COMPILE=arm-linux-...           (arm-linux-....:路径)

 

常用命令:(Uboot提供丰富的命令集,不同单板支持不一样)

1.help:可用于查看当前单板所支持命令.

2.printenv:查看环境变量.   例:printenv     查看全部.

                                                    printenv  name    (name 环境变量名称)

3.setenv:添加,修改,删除环境变量.

                添加:setenv file 123

                修改:setenv file 456

                删除:setenv file

4.saveenv:保存环境变量.   (新添加的环境变量是在内存中,断电后消失.保存入flash)

文件下载:tftp,串口下载.

              setenv ethaddr12:34:56:78:9A:BC    (网卡物理地址)

              setenv ipaddr123.456.1.1                  (开发板IP地址)

              setenv serverip123.456.1.10              (tftp服务器地址 虚拟机)

下载例子:

tftp下载:

                tftp 32000000 uImage:把server服务器中目录下的uImage文件通过tftp下载到

                                                       0x32000000处.

串口下载:

                loadb 31000000:通过超级终端文件发送.      (不推荐,慢)

内存操作:

5.md:显示内存区的内容.           md[ .b , .w , .l ]  address

         例子:md.b  31000000            八  十六 三十二进制(默认)

6.mm:修改内存,地址自动递增.       mm[ .b , .w , .l ]  address

(如果想结束输入,则输入空格,然后回车)

7.flinfo:查看flash扇区信息.

8.protect:Flash写保护.  (地址一定要为扇区边界,否则会报错)

                (1).protect off all :关闭所有扇区写保护.

                 (2).protecton all :打开所有扇区写保护.

                (3).protect off start end :关闭扇区写保护. 从start至end地址.

                (4).protect on start end :打开扇区写保护. 从start至end地址.

9.erase:擦除flash扇区.        erase  start end

(使用cp命令想Nor型flash写入数据之前必须先使用erase命令擦出flash,要为norflash按字节写入时,无法写入1,所以必须通过擦出来写入1)

例子:erase  30000  1effff

 

10.数据拷贝.  (内出<<===>>flash)

cp[ .b , .w , .l]  saddress  daddress   len

例子:cp.b 31000000 50000   d0000

将内存地址0x31000000处的数据(长度为0xd0000)拷贝到地址0x50000处.

 

执行程序:

11.go:执行内存中的二进制代码.

用法:go addr  [arg...]

12.bootm:执行内存中的二进制代码.

用法:bootm[addr[arg...]]

区别:Bootloader <wbr>and <wbr>Uboot <wbr>compiled, <wbr>commonly <wbr>used <wbr>commands, <wbr>configuration <wbr>and <wbr>installation

 

开发板信息:

13.bdinfo:显示开发板信息.(内存地址和大小,时钟频率,MAC地址 and so on)

 

自动启动:(小技巧)   setenv bootdelay seconds(设置倒数的秒数)

设置自动启动:setenv bootcmd tftp31000000 uImage \; bootm 31000000

                        saveenv

 

U-boot -------- 移植

板级设备的配置文件位于:include/configs/<board_name>.h

(<board_name>用相应的BOARD定义代替) 例子:smdk2410.h

移植的方法:分析U-boot已经支持的开发板,选择出硬件配置最接近的开发板.

                    原则:MCU相同的开发板,如果没,就选择MPU相同的.

步骤:

1.在顶层Makefile的开发板添加新的配置选项.

smdk2410_config:             unconfig

          @./mkconfig$(@:_config=) arm arm920t smdk2410 NULL s3c24x0

参考上面两行:添加:

mini2440_config:             unconfig

 

          @./mkconfig$(@:_config=) arm arm920t mini2440 NULLs3c24x0

arm:CPU架构.

arm920t :CPU类型,(对应cpu/arm920t目录)

mini2440:开发板型号,(对应board/mini2440目录)

NULL :开发者.

s3c24x0:片上系统.

 

2.在board目录创建一个属于新开发板的目录.

mkdir -pboard/mini2440

cp -rfboard/smdk2410/*  board/mini2440

 

3.未开发版添加新的配置文件,然后在修改重点,主要

cp include/configs/smdk2410.h include/configs/mini2440.h

 

4.配置开发板.

makemini2440_config

 

5.编译U-Boot   (获取U-Boot映像)

makeCROSS_COMPILE=arm-linux-....        (arm-linux-.... 为完整路径)

 

6.烧写U-Boot.

0 0