U-boot和Kernel(二):U-boot

本文主要探讨基于orangePi的U-boot移植,U-boot的命令等。

u-boot简介

        1、uboot是裸机程序,需要编译成bin文件,然后烧写,才能启动系统。
        2、uboot是bootloader的一种,作用是启动操作系统和初始化DDR。
        3.Linux在DDR运行。Image,设备树放在SD、EMMC、NAND、SPI FLASH等外置存储。
        4.uboot初始化ddr,将Image和设备树拷到DDR中,然后启动,uboot程序结束。

u-boot移植      

固件设备:orangePi_zero2(h616)
ubuntu:22.04

安装依赖包

apt-get install libgtk2.0-0:i386 libxtst6:i386 gtk2-engines-murrine:i386 lib32stdc++6 libxt6:i386 libdbus-glib-1-2:i386 libasound2:i386 zlib1g-dev libssl-dev pip bison flex swig sunxi-tools make -y

安装交叉编译工具

tar -xvf gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf.tar.xz

添加交叉编译环境

vim ~/.bashrc

export ARCH=arm64
export PATH=/root/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH
export CROSS_COMPILE=aarch64-linux-gnu-

source ~/.bashrc

编译生成bl31.bin

unzip arm-trusted-firmware-master.zip

cd arm-trusted-firmware-master

make PLAT=sun50i_h616 DEBUG=1 bl31

编译uboot

tar -jxvf u-boot-2023.07.tar.bz2

cd u-boot-2023.07

make  BL31=/root/arm-trusted-firmware-master/build/sun50i_h616/debug/bl31.bin orangepi_zero2_defconfig

make  BL31=/root/arm-trusted-firmware-master/build/sun50i_h616/debug/bl31.bin

烧写

dd if=/root/u-boot-2023.07/u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

远程工具串口连接

uboot命令

基础
        bdinfo:查看开发板基础信息
        version:查看uboot版本
        print/printenv:打印环境变量
        set/setenv:设置(删除)环境变量
        save/saveenv:保存环境变量
        reset:重启
        poweroff:关机


内存地址
        md:打印内存值
        md [.b, .w, .l, .q] address [# of objects]
        b:byte(1字节),w:word(2字节),l:long(4字节)
        address:起始地址,后跟字节长度
        nm:修改指定内存地址的数据
        nm [.b, .w, .l, .q] address
        mm:递归修改指定内存地址的数据
        mm [.b, .w, .l, .q] address

=> md.l 40000000 1
40000000: 12345678                             
=> nm.l 40000000
40000000: 12345678 ? aa0003f4
40000000: aa0003f4 ? q
=> md.l 40000000 1
40000000: aa0003f4

        mw:指定的数据填充内存
        mw [.b, .w, .l, .q] address value [count]
        value:数据 count:数据的长度

=> md.l 40000000 4
40000000: aa0003f4 aa0103f5 aa0203f6 aa0303f7
=> mw.l 40000000 0123456789 10
=> md.l 40000000 4
40000000: 01234567 01234567 01234567 01234567

        cp将原地址数据复制到目标地址
        cp [.b, .w, .l, .q] source target count

=> md.l 40000000 1
40000000: 12345678
=> md.l 80000000 1
80000000: aa0003f4
=> cp  40000000 80000000 1
=> md.l 80000000 1
80000000: 12345678

        cmp:比较两个地址段数据
        cmp [.b, .w, .l, .q] addr1 addr2 count


        mmc info 设备的信息
        mmc rescan [mode] 扫描开发板上MMC设备,包括EMMC和SD卡
        mmc list 查看开发板MMC设备
        mmc dev 切换当前MMC设备:mmc dev [dev] [part]
        [dev]切换MMC设备号,[part]分区号
        mmc part查看分区
        mmc read 读取mmc设备数据

网络
        ipaddr:地址
        serverip:tftp服务器地址
        dhcp:自动获取地址
        ping:查看网络

启动
        boot:读取环境变量bootcmd启动Linux
        bootz:启动 zImage 
        bootm: 启动 uImage 
        Image为内核映像文件
        zImage为映像压缩文件
        uImage是uboot映像文件,在zImage前加上64字节头,说明内核的版本、加载位置、生成时间、大小等信息


        nand scrub:擦除整个NAND,擦除bad block标记。
        nand erase addr1 count:擦除NAND,count擦除字节数
        nand write addr offset count:内存数据写入NAND,offset是偏移地址
        nand read addr offset count :NAND数据读取到内存
        nand bad:测试NAND FLASH坏块       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值