• tiny4412编译与移植uboot


    tiny4412编译与移植U-Boot

    1.uboot简介

      U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios与MicroBlaze。这也是一套在GNU通用公共许可证之下发布的自由软件。
      U-Boot本质是一个裸机程序,是一种普遍用于嵌入式系统中的开源的Bootloader,作用是用来引导操作系统,以及给开发人员提供测试调试工具。主要负责基本硬件初始化,导启动内核启动。

    2.选择U-Boot理由

      ① 开放源码;
      ② 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
      ③ 支持多个处理器系列,如PowerPC、ARM、x86、MIPS;
      ④ 较高的可靠性和稳定性;
      ⑤ 高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;
      ⑥ 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
      ⑦ 较为丰富的开发调试文档与强大的网络技术支持;

    3.U-Boot主要功能

      系统引导支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统;支持NFS挂载、从FLASH中引导压缩或非压缩系统内核;
      基本辅助功能强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤以Linux支持最为强劲;支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;
      CRC32校验可校验FLASH中内核、RAMDISK镜像文件是否完好;
      设备驱动串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;
      上电自检功能SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号;

    4.U-Boot工作模式

      uboot分为启动加载模式和下载模式。启动模式即为正常工作模式,嵌入式产品发布时必须工作在启动模式,此时uboot可以完成操作系统引导,可以将操作系统从flash中拷贝到sram中运行,整个过程自动完成;下载模式即可完成系统更新,可以通过各种通讯方式将PC端数据拷贝到嵌入式产品中。

    5.U-Boot启动流程

      uboot多数BootLoader都分为stage1和stage2两大部分,U-boot也不例外。stage1主要存放依赖于CPU架构代码,通常是汇编程序。stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。

    • stage1作用
        stage1代码通过存放在start.S中,和CPU架构相关,例如tiny4412的.S文件存放路径:uboot_tiny4412-sdk1506\arch\arm\cpu\armv7。
      在这里插入图片描述
      stage1汇编代码实现功能为:
        1.定义程序入口,一般入口存放在rom的0x0位置。
        2.设置异常向量,初始化内存控制器。
        3.拷贝rom中的程序到ram中,初始化堆栈。
        4.将指针指向到ram中执行。
    • stage2作用
       stage2存放的为C语言代码,这也是整个uboot的主程序。该代码注意实现功能为:
        1.完成基本硬件初始化,如初始化flash;
        2.初始化系统内存分配函数。
        3.如果目标系统拥有 nand 设备,则初始化 nand 设备。
        4.如果目标系统有显示设备,则初始化该类设备。
        5.初始化相关网络设备,填写 ip地址等。
        6.进入命令循环(即整个 boot 的工作循环),接受用户从串口输入的命令,然后进行相应的工作。
      在这里插入图片描述
        tiny4412 从SD卡启动,数据在SD卡中存储格式:
        tiny4412从SD卡启动系统,数据存放是从第一个扇区开始。
      在这里插入图片描述
      在这里插入图片描述
        1~16扇区存放bl1.bin文件,由三星提供。大小为固定8KB。
        17~49扇区存放bl2.bin文件,该扇区用来存放uboot的前14KB代码。
        49~705扇区存放完整uboot文件。
        705~1025扇区存放tzsw.bin签名文件。
        从1025扇区开始存放内核镜像文件,连续写12288个扇区。
        再往后则是根文件系统rootfs
    • 系统启动流程
        在开发板上电时,首先运行的是Exynos本身自带的64KB的flash中的程序,读取签名文件,加载uboot前14kb代码到Exynos本身的256KB的SRAM中运行,实现基本硬件初始化(如初始化外扩内存),接着将完整Uboot拷贝到外扩内存中,将PC指针指向外扩内存。完成flash初始化、网卡初始化,读取内核、加载根文件系统,引导操作系统启动,最终uboot结束本次工作,将CPU使用权交接操作系统,至此,启动启动成功。

    6.U-Boot移植与烧写

    PC端系统:ubuntu18.04
    交叉编译器:arm-linux-gcc

    #解压uboot源码
    [wbyq@wbyq src_pack]$ tar xvf /mnt/hgfs/ubuntu/software_pack/uboot_tiny4412-sdk1506.tar
    [wbyq@wbyq uboot_tiny4412-sdk1506]$ make distclean
    [wbyq@wbyq uboot_tiny4412-sdk1506]$ make clean #清空配置
    [wbyq@wbyq uboot_tiny4412-sdk1506]$ make tiny4412_config #配置开发板
    Configuring for tiny4412 board...
    [wbyq@wbyq uboot_tiny4412-sdk1506]$ make -j8 #编译源码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    6.1 ubunut编译uboot报错

      报错:libz.so.1: cannot open shared object file: No such file or directory
      解决办法:sudo apt-get install lib32ncurses5 sudo apt-get install lib32z1

    6.2 烧写uboot到SD卡

    [wbyq@wbyq uboot_tiny4412-sdk1506]$ cd sd_fuse/ 
    [wbyq@wbyq sd_fuse]$ make  //编译生成mkbl2
    [wbyq@wbyq sd_fuse]$ cd tiny4412/  
    //插上SD卡,烧写U-boot
    [xsw@xsw tiny4412]$ sudo ./sd_fusing.sh /dev/sdb 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    6.3 开发板运行uboot

      将SD卡插到开发板上,选择从SD卡启动,插上串口线。
    在这里插入图片描述
      至此,uboot烧写成功,uboot执行成功,进去uboot命令行,实现数据交互。

  • 相关阅读:
    java-net-php-python-jsp校园招聘管理系统计算机毕业设计程序
    【顺序表的应用-通讯录的实现】
    什么是微格式
    回Mixlab三天,“创造力团队”治好了我的精神内耗
    开源库 Gson 怎么读
    vue、uniapp如何在js中获取scss的变量
    LeetCode(25)验证回文串【双指针】【简单】
    【操作系统】聊聊协程为什么可以支撑高并发服务
    浅谈Coroutine使用方法
    软件测试 -- 自动化测试(Selenium)
  • 原文地址:https://blog.csdn.net/weixin_44453694/article/details/126608765