zoukankan      html  css  js  c++  java
  • ARM linux开发之uboot

    一、操作系统的启动过程

    上电 ---> uboot ---> 加载linux内核 ---> 挂载根文件系统 ---> 执行应用程序

    二、uboot

    • 1.什么是uboot
      uboot其实就是一个通用的引导程序——bootloader。
      boot,完成硬件的初始化,启动硬件平台
      loader,初始化硬件后,加载操作系统。

    U-Boot的工作模式有启动加载模式和下载模式。
    1.启动加载模式是Bootloader的正常工作模式,嵌入式产品发布时,Bootloader必须工作在这种模式下,Bootloader将嵌入式操作系统从FLASH中加载到SDRAM中运行,整个过程是自动的。
    2.下载模式就是Bootloader通过某些通信手段将内核映像或根文件系统映像等从PC机中下载到目标板的FLASH中。用户可以利用Bootloader提供的一些命令接口来完成自己想要的操作。

    • 2.uboot的作用
      1)第一阶段初始化,CPU的初始化,用汇编语言来编写,初始化cache、MMU、时钟、看门狗、DDR3、eMMC...
      2)第二阶段初始化,板级的初始化,一般来说用C语言来编写,初始化串口、网卡、usb、lcd...
      3)提供了很多工具,进入uboot命令行,使用uboot的命令
      4)加载操作系统

    • 3.uboot使用

    1)查看开发板的信息

    GEC6818# bdinfo
    arch_number = 0x000010EA//uboot针对具体硬件平台的ID,若跟linux内核ID不一致,不能启动内核(因为这里开发板使用的是linux系统)
    boot_params = 0x40000100//uboot传递给内存启动参数的地址
    DRAM bank   = 0x00000000//内存通道0
    -> start    = 0x40000000//内存的地址
    -> size     = 0x40000000//内存的大小为1GB
    current eth = unknown//网卡的名字,没识别到网卡
    ip_addr     = 192.168.1.165//网卡的IP地址
    baudrate    = 115200 bps//串口波特率
    TLB addr    = 0x7FFF0000
    relocaddr   = 0x46000000//linux内核执行的地址
    reloc off   = 0x00000000
    irq_sp      = 0x7DF6DF00
    sp start    = 0x43BFFE68
    

    2)查看uboot的环境变量,只要是环境变量,都可以进行自定义

    GEC6818# printenv
    baudrate=115200
    bootargs=lcd=at070tn92 tp=gslx680-linux root=/dev/mmcblk0p2 rw rootfstype=ext4
    bootcmd=ext4load mmc 2:1 0x48000000 uImage;bootm 0x48000000
    bootdelay=3
    bootfile=uImage
    ethaddr=00:e2:1c:ba:e8:60
    ethprime=RTL8211
    fastboot=flash=mmc,2:GECuboot:2nd:0x200,0x78000;flash=mmc,2:2ndboot:2nd:0x200,0x4000;flash=mmc,2:bootloader:boot:0x8000,0x70000;flash=mmc,2:boot:ext4:0x00100000,0x0;
    filesize=41ee8
    gatewayip=192.168.1.1
    ipaddr=192.168.1.165
    netmask=255.255.255.0
    qtcrc=-1489582083
    serverip=192.168.1.164
    stderr=serial
    stdin=serial
    stdout=serial
    
    Environment size: 820/32764 bytes
    

    关键的内容

    • ①.bootargs,启动参数
    bootargs=lcd=at070tn92 tp=gslx680-linux root=/dev/mmcblk0p2 rw rootfstype=ext4
    

    root=/dev/mmcblk0p2,根文件系统在哪里,告诉内核去哪里挂载根文件系统。
    mmcblk0p2
    ---->mmcblk0,emmc电子硬盘0
    ---->p2,partion2,emmc电子硬盘0的分区2
    rw,该文件系统可读写。
    rootfstype=ext4,该文件系统类型为ext4(ext2/ext3,fat32,ntfs)。

    • ②.启动命令
    bootcmd=ext4load mmc 2:1 0x48000000 uImage;bootm 0x48000000
    

    以ext4文件系统去emmc第一个分区加载uImage linux内核镜像,加载到内存地址0x48000000;然后在该地址0x48000000启动linux内核。
    这条命令告诉uboot启动完之后,要干什么动作,通过bootcmd命令进行了解。

    • ③.修改启动延时时间
    GEC6818# setenv bootdelay 5
    GEC6818# saveenv
    Saving Environment to MMC...
    Writing to MMC(2)... done
    
    • ④.修改本地ip地址
    GEC6818# setenv ipaddr 192.168.2.188
    GEC6818# setenv gatewayip 192.168.2.1
    GEC6818# setenv netmask 255.255.255.0
    GEC6818# saveenv
    Saving Environment to MMC...
    Writing to MMC(2)... done
    

    注意:在裸机开发中用tftp下载裸机程序,网络必须要配置好,因为当前的uboot不支持串口下载文件。

    • ⑤.验证配置的ip是否可用
    GEC6818# ping <pc的ip地址>
    

    注意:电脑不能主动ping开发板,因为uboot默认状态下是关闭了网卡。
    ping成功:

    GEC6818# ping 192.168.11.3
    Speed: 100, full duplex
    Using dwmac.c0060000 device
    host 192.168.11.3 is alive
    

    ping失败:

    GEC6818# ping 192.168.11.3
    ping failed; host 192.168.11.3 is not alive
    GEC6818# ping 192.168.11.3
    
    • ⑥.修改服务器ip
    GEC6818# setenv serverip 192.168.2.150
    GEC6818# saveenv
    Saving Environment to MMC...
    Writing to MMC(2)... done
    
    • ⑦.删除环境变量,例如删除sap变量
    #setenv sap 空格键
    #saveenv
    
    • ⑧.通过tftp下载文件到内存
      使用该命令的时候,要注意网络的配置,关闭电脑的防火墙!
      tftp <内存地址> <文件名>
    GEC6818# tftp 0x40000000 led.bin
    Speed: 100, full duplex
    Using dwmac.c0060000 device
    TFTP from server 192.168.11.3; our IP address is 192.168.11.6
    Filename 'led.bin'.
    Load address: 0x40000000
    Loading: #
             261.7 KiB/s
    done
    Bytes transferred = 4572 (11dc hex)
    
    • ⑨.执行某地址存在的二进制文件
      go <内存地址>
    #go 0x40000000
    ## Starting application at 0x40000000 ...
    

    由于裸机程序用到死循环,若想退出当前程序的执行,只能是复位或重新上电!

    • ⑩.uboot模式下复位开发板
    GEC6818# reset
    
    • ⑩①.help,支持的命令
    GEC6818# help
    0       - do nothing, unsuccessfully
    1       - do nothing, successfully
    ?       - alias for 'help'
    base    - print or set address offset
    bdinfo  - print Board Info structure
    boot    - boot default, i.e., run 'bootcmd'
    bootd   - boot default, i.e., run 'bootcmd'
    bootm   - boot application image from memory
    bootp   - boot image via network using BOOTP/TFTP protocol
    cmd     - cmd [command] options...
    cmp     - memory compare
    cp      - memory copy
    crc32   - checksum calculation
    dhcp    - boot image via network using DHCP/TFTP protocol
    drawbmp - darw bmpfile on address 'addr' to framebuffer 
    env     - environment handling commands
    exit    - exit script
    ext4load- load binary file from a Ext4 filesystem
    ext4ls  - list files in a directory (default /)
    ext4write- create a file in the root directory
    fastboot- fastboot- use USB Fastboot protocol
    ......
    
  • 相关阅读:
    一次zabbix的渗透
    Tips
    IPy
    文件读取漏洞路径收集
    argparse
    代码审计之配置
    ctf之加密
    内网渗透中的反弹Shell与端口转发
    利用zip(或者phar)协议进行本地文件包含
    104. 二叉树的最大深度
  • 原文地址:https://www.cnblogs.com/risesource/p/12011092.html
Copyright © 2011-2022 走看看