烧写uboot

前言

一般嵌入式 会用 flash 作为 uboot 的容器

所以烧写uboot 就是将 uboot 的二进制程序写入 flash 

而烧写flash 需要 flash 驱动,所以烧写成功,肯定存在flash驱动.

1/在裸板上烧写uboot

大多都是利用了板端的jtag接口(不包括hitool和烧写器),利用 将PC端的 软件将 uboot文件传递给jtag接口,然后板端将得到的数据直接烧写到flash中.
这个过程中 其实是分步骤的一般是
1.将flash驱动及烧写算法通过jtag接口写入内存 
2.将数据写入内存 
3.执行算法将内存中的数据写入flash.
  • 通过jlink套件(利用jtag接口)
    
    套件包括软件(jlink软件和jflash软件)和硬件(jlink)
    
    1/硬件联通
    2/jlink软件
        //testwspeed 
        //speed 115200
    3/jflash软件
        //配置 .jflash 文件
        //connect program
       - 注意: 需要jlink套件 支持该soc,即有相应的 .jflash 文件,或者自己编写这个文件. 

  • 烧写器(直接和flash芯片交互)

    烧写器大多需要将芯片吹下来放到烧写器上烧写,浪费时间和生命.但有些烧写器支持不用吹下来的烧写.

    这个过程中 其实是分步骤的一般是 1.烧写器启动 2.将数据写入烧写器内存 3. 烧写器调用驱动(烧写器固件中)将内存中的数据写入flash.

    所以要烧写器固件支持烧写改款flash

  • 芯片厂商提供的软件

这个过程中 其实是分步骤的一般是 1.芯片从bootrom启动(芯片中固化了bootrom,只要是芯片出厂就会固化,注意,不是uboot) 2.等待上位机的连接 3.连接成功 4.上位机通过接口(看芯片厂商提供什么接口)发送数据到内存. 5.bootrom调用bootrom 中的驱动将内存中的数据写入flash

所以这个方式也需要芯片厂商提供的 bootrom 支持 什么 flash.肯定要支持接口驱动程序(例如串口)

烧写方式还有另一种可能 1.芯片从bootrom启动(芯片中固化了bootrom,只要是芯片出厂就会固化,注意,不是uboot) 2.等待上位机的连接 3.连接成功 4.上位机通过接口(看芯片厂商提供什么接口)发送数据(一般是uboot)到内存. 5.交付控制权给uboot,uboot启动 6.uboot 开始自己烧写自己(目前启动的uboot)到flash

这种方式不需要芯片厂商提供的 bootrom flash.但肯定要支持接口驱动程序(例如串口),另外uboot 肯定要支持该 flash

	海思厂商
  - hitool(通过串口)
    
    hitool是海思提供的一个工具,用来通过串口实现和海思的芯片交互 

    海思的芯片里面有一个bootrom

    1/可以通过boot_sel、bootrom、NFBOOT_PIN 管脚配置从bootrom启动
    2/启动之后,会对串口进行检测,如果有数据发来,会接收数据并写到sram,根据数据初始化sdram,然后初始化内存,并重定位uboot,然后从内存启动
    3/主机发送flash烧写命令给从内存启动的uboot
    4/uboot将内存中的数据烧写到flash

    注意:

    1/boot_sel、bootrom、NFBOOT_PIN配置从bootrom启动

    2/uboot支持所对应的ddr,因为要烧写到sdram里面,所以肯定要初始化
    
    3/串口一定保证能正常使用

    4/uboot必须支持flash,因为要烧写uboot到flash
jz2440提供的工具
 (通过jtag)
 - oflash软件 和 硬件openjtag
 - oflash 是基于s3c2440的jz2440做的通过jtag接口烧写软件的软件
 - 要配套openjtag



2/通过uboot烧写uboot

烧写方式一般是 1.芯片从uboot启动 2.uboot 通过接口接收数据放入内存(接口可以是串口,网络,usb) 3. uboot 调用uboot 自身的 flash驱动 写flash
  • 串口
    loady
  • 网络
    tftp
    nfs
  • usb接口
  - dnw
    - dnw是三星推出的一个工具,通过usb传输文件的一个工具
    - 使用三星提供的一个uboot启动,并设置其uboot等待usb接口来的数据
    - 用dnw工具将uboot.bin从pc机上传送给板端的USB接口.
    - 板端接收usb接口的数据并放入内存,直至接收完成.
    - uboot将内存中的uboot.bin烧入flash


3/通过文件系统烧写uboot

flash 一般有分区 uboot bootargs kernelImage rootfs ,此时需要调用 linux内核的flash 驱动程序将 uboot 分区 擦除,并写入另一个uboot. 如果linux 能挂载文件系统成功,即能启动成功,肯定有该 flash 的驱动程序.但是如果 写 一个新的 flash 就不好说了.
在linux的shell中烧写uboot/kernel

mtd write命令是自定义的烧写flash命令。
1/
//烧写uboot ,/dev/mtd0 是bootloader 的特定分区
 mtd write u-boot.bin /dev/mtd0 

2/
//烧写kernel, mtd1 是kernel的特定分区
mtd write vmlinux.elf /dev/mtd1

3/
//重启
reboot 
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值