华清远见嵌入式学习day28——bootloader

复习:

1. 嵌入式系统 软硬件组成
    bootloader 
    kernel  window linux vxwork 
    rootfs    挂载根文件系统 
2. 编译工具
    nm  符号表
    addr2line   根据地址 定位到行号
    size     读取段大小
    readelf
    objdump    
    objcopy
    strip 
    strings


***********************************

1. uboot常用命令的使用
    
    1、pri print  printenv
        打印环境变量
      save  saveenv   保存环境便令
        
    2、set  setenv
        设置环境变量 
        set xxxx  "value"    设置环境变量值
        set xxxx        删除环境变量
    
    3、help 帮助信息
        uboot 支持哪些命令
        help go    go 命令使用说明

    4、loadb   loady  loadx
        通过串口 传输数据 
        
    5、tftp
        网络方式下载 数据 
        
    6、go 
        执行 程序
    7、ping
        icmp 
        测试 开发板 和 Ubuntu 是否连通

    8、bootm
        启动 kernel 
        bootm  内核地址  文件系统地址  
        bootm 41000000 
    
    9、mmc
        
        烧写 eMMC
        1. FS6818# tftp 41000000  win-uboot.bin
        2. FS6818# mmc dev 2
        3. FS6818# mmc write 41000000 0 300
        4. FS6818# saveenv    不用 save 
        
        烧写 SD卡
        1. FS6818# tftp 41000000  win-uboot.bin
        2. FS6818# mmc dev 0
        3. FS6818# mmc write 41000000 0 300
        4. FS6818# saveenv    不用 save 
        
        出现 bl1 就可以了  
            bl2 是 uboot
        
        uboot 烧写
        
        mmc info 
        mmc dev [0  2]
        mmc write  内存地址  起始块  块儿个数
        mmc read 内存地址  起始块  块儿个数
        mmc erase   起始块  块儿个数
        mmc list  列出 soc 上 mmc 的适配器个数
    10 环境变量
        set bootcmd "tftp 41000000 uImage;  bootm 41000000"
        
    11 boot 命令 
        让uboot 解析执行 bootcmd 中的命令
    12 reset   re
        重启uboot

2. bootloader作用
    1. 对应硬件有 强依赖 
    2. 初始化硬件 
    3. 引导内核 启动
    当内核启动起来, 它就功成身退, 所占用的内存
    资源, 被内核回收

3. bootloader的种类
    vivi 韩国   redboot 美国  uboot 德国

4. uboot特点
    1、 开源免费软件
    2、 代码框架清晰,容易移植维护
    3、 支持多种架构处理器
    4、 支持开发板种类很多
    5、 含有丰富的命令
    6、 支持多种网络协议
    7、 多种文件系统类型,USB,SD的驱动
    8、 更新活跃,使用者多,有助于解决问题

5. 两种模式
    1. 自启动模式
    2. 交互模式

6. uboot源码获取方式
    1. 通过官方网站 获取 uboot 源码
        http://ftp.denx.de/pub/u-boot/
    2. 从厂商获取 核心板 uboot
        gcc 编译工具, uboot, kernel 

7. uboot 版本选择
    1. 不选择老版本, 维护不方便
    2. 不要 选择 太新的
        不稳定, 新功能知道的人少
    带 rc 公测的,测试
    选择 不带 rc

8. uboot源码,配置与编译
    
    1. 拷贝大 Ubuntu 用 tar -xvf 解压

    2. 交叉 编译工具 配置 
        $ vi Makefile 
        修改顶层Makefile 
         198 ifeq (arm , arm)
         199 CROSS_COMPILE ?= arm-none-linux-gnueabi-                                                                          
         200 endif
    3. 配置  指定 开发板
        $ make fs6818_config
        $ make fs6818_config O=../output
    4. 编译 uboot  必须在 顶层目录 执行 make 
        $ make   /  make all 
        make all -j4   多核编译
        make all V=1

    5. 清除
        $ make clean        # 清除 .o .bin 
        $ make mrproper        # 清除 .o .bin + 配置文件 + 
        $ make distclean    # 清除 .o .bin + 配置文件 +  rm .bak ....

9. 移植的准备工作,获取硬件处理器器信息
    board   fs6818
    SoC     s5p6818
    cpu     armv8     ----  cortex-a53
    arch    arm         架构
    vender  samsung 

10. u-boot 源码目录结构介绍
    arch:     cpu架构相关代码
    arch/arm/
    arch/arm/cpu/
    arch/arm/cpu/arm11  arm9 armv8 armv7
    board:    不同厂商板子相关代码
    board/samsung/:  三星厂商的板子
    driver: 设备驱动代码
    fs:   文件系统
    lib:  解压缩代码,字符串处理,校验代码, 红黑树,快速排序
    net:  网络协议
    common:    命令相关代码
    doc:      文档, 相比Linux内核 的文档太少了
    include:  头文件
    include/configs/   各个开发板的配置头文件  .h 
    scripts:     编译时使用的 Makefile shell 脚本
    dts:     以后的uboot版本也将使用设备树
    disk:    硬盘分区相关代码
    CREDITS:  对uboot的主要贡献者
    boards.cfg:  uboot 都支持哪些板子

11. 配置流程详解
    468 %_config:: outputmakefile
    469     @$(MKCONFIG) -A $(@:_config=)  
    
    @/home/sky/share/u-boot-2014.07/mkconfig -A $(@:_config=) 
    @/home/sky/share/u-boot-2014.07/mkconfig -A fs6818
    
    生成  
        include/config.h
        include/config.mk

12. 动手移植 uboot 
    1. $ vi ./boards.cfg  添加一行
        1146 Active  arm   armv8   s5p6818  hqyj  s5p6818      x6818   -
    2. $ mkdir ./board/hqyj 
    2. $ cp ./board/samsung/s5p6818/ ./board/samsung/common/ ./board/hqyj/  -r
    3. $ cp ./include/configs/fs6818.h ./include/configs/x6818.h 

    4. $ make x6818_config   // 到顶层目录 配置
    5. $ make                  // 到顶层目录 编译

13. 编译流程详解
    见 文档 -->  u-boot配置流程-编译流程详细分析.txt 

14. 芯片的启动流程
    1、BL0 IROM 20K         norflash 
        代码由三星芯片出厂时固化的
        1. 内存地址 0x34000000
        2. 时钟, 初始化ISRAM,SD/eMMC的控制器, 
        3. 读取拨码开关
        4. 跳过SD卡第0块,从第一块读取56k到ISRAM  读到0xFFFF_0000
        5. PC打到ISRAM运行BL1代码 0xFFFF_0000
    2、BL1 ISRAM  64K        
        代码由三星提供bin文件  nsih.txt + S6818_N.bl1 组成bl1
        1. 内存地址 0xFFFF_0000
        2. DDR 初始化 0x40000000 ~ 0x80000000 1G 内存
        3. 从SD卡或者eMMC 读取 自己的代码(蜂鸣器,或者led,uboot)
            从哪里(SD卡 还是eMMC)读,由bl1代码决定
        4. 读到0x43C00000

15. 点亮第一盏LED灯
    1. $ mk6818 pwm.bin nsih.txt S6818_N.bl1 interface.bin
    2. $ cat 512B   pwm.bin  >  win-pwm.bin
    3. FS6818# tftp 41000000 pwm.bin
    4. FS6818# mmc dev 0
    5. FS6818# mmc write 41000000 1 55
    


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值