Bootloader and Uboot compiled, c…

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

  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 so on)

                            为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. 执行:make smdk2410_config               (例子)
  2. 进行编译生成u-boot.bin:make CROSS_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 ethaddr 12:34:56:78:9A:BC     (网卡物理地址)

               setenv ipaddr 123.456.1.1                   (开发板IP地址)

               setenv serverip 123.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).protect on 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,要为nor flash按字节写入时,无法写入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 tftp 31000000 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 NULL s3c24x0

arm:CPU架构.

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

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

NULL :开发者.

s3c24x0 :片上系统.

 

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

mkdir -p board/mini2440

cp -rf board/smdk2410/*   board/mini2440

 

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

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

 

4.配置开发板.

make mini2440_config

 

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

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

 

6.烧写U-Boot.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值