【无标题】

MTK7620 11N 板子 UBOOT软件架构分析

整体组成

  1. TOOLS工具组成,主要是mkimage,主要处理CRC, mkimage本地主机工具是这个模块产物。用于打镜像。
  2. cpu/ralink_soc 这里是Startup Code for MIPS32 CPU-core。 是整个CPU启动的入口。cpu/ralink_soc/start.S。libralink_soc.a是这个模块产物。
  3. 基础库lib_generic,比如压缩,CRC,等工具库。
  4. /board/rt2880 。 主要是FLASH的擦写,内存写入FLASH等驱动能力,以及串口驱动。这类BSP级别的功能实现。
  5. lib_mips , 启动LINUX KERNEL的核心代码,do_bootm_linux。计算KERNEL在MIPS CPU的位置。打印: printf (“\nStarting kernel …\n\n”);
  6. net 网络协议栈,不是驱动,是ARP,DHCP, TFTP等收发协议实现,还包括 一个TFTP命令行,PING命令行。
  7. drivers,包括 网卡驱动,SPI FLASH 驱动,I2C驱动。其他还有USB驱动。
  8. common通用实现,包括 bootm,菜单选择处理

由UBOOT代码查看FLASH 布局

common/cmd_bootm.c
#define CFG_LOAD_ADDR 0x80100000 /* default load address */
上述地址在不指定参数时使用。实际上并不使用。真正的地址=81001000通过打印,
确认:

Transferring control to Linux (at address 81001000) …

    debug ("## Transferring control to Linux (at address %08lx) ...\n",
            (ulong)kernel);
                /*
     * Linux Kernel Parameters:
     *   r3: ptr to board info data
     *   r4: initrd_start or 0 if no initrd
     *   r5: initrd_end - unused if r4 is 0
     *   r6: Start of command line string
     *   r7: End   of command line string
     */
    (*kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end);

启动KERNEL,先计算出KERNEL地址,打印出来是0X81001000内存地址。
然后,把内存地址0X81001000转成一个函数指针,调用该指针,实现代码的JUMP指令并执行效果。

而之前,就把相关的内核代码拷贝到了0X81001000这里!

    if(BootType == '3') {
            char *argv[2];
            sprintf(addr_str, "0x%X", CFG_KERN_ADDR);
            argv[1] = &addr_str[0];
            printf("   \n3: System Boot system code via Flash.\n");
            do_bootm(cmdtp, 0, 2, argv);
    }    
    
    #define PHYS_FLASH_1            0xBCC00000 /* Image1 Bank #1 */
    #define CFG_FLASH_BASE          PHYS_FLASH_1
    #define CFG_BOOTLOADER_SIZE     0x30000

#define CFG_CONFIG_SIZE 0x10000
#define CFG_FACTORY_SIZE 0x10000

    #define CFG_ENV_ADDR            (CFG_FLASH_BASE + CFG_BOOTLOADER_SIZE)

#define CFG_FACTORY_ADDR (CFG_FLASH_BASE + CFG_BOOTLOADER_SIZE + CFG_CONFIG_SIZE)
#define CFG_KERN_ADDR (CFG_FLASH_BASE + (CFG_BOOTLOADER_SIZE + CFG_CONFIG_SIZE + CFG_FACTORY_SIZE))
BCC00000+30000+10000+10000 = BCC50000

打印“Booting image at bc050000 …”
printf (“## Booting image at %08lx …\n”, addr);

FLASH
[ 2.148000] flash manufacture id: ef, device id 40 18
[ 2.156000] W25Q128BV(ef 40180000) (16384 Kbytes)
[ 2.168000] mtd .name = raspi, .size = 0x01000000 (16M) .erasesize = 0x00010000 (64K) .numeraseregions = 0
[ 2.184000] Creating 5 MTD partitions on “raspi”:
[ 2.196000] 0x000000000000-0x000001000000 : “ALL” - 16M
[ 2.204000] 0x000000000000-0x000000030000 : “Bootloader” - 192K
[ 2.216000] 0x000000030000-0x000000040000 : “Config” -64K
[ 2.228000] 0x000000040000-0x000000050000 : “Factory” -64K
[ 2.240000] 0x000000050000-0x000001000000 : “firmware” -16064K
[ 2.252000] 0x00000030a3fb-0x000001000000 : “rootfs” - 13271KBYTE
[ 2.260000] mtd: partition “rootfs” must either start or end on erase block boundary or be smaller than an erase block – forcing read-only
[ 2.288000] mtd: partition “rootfs_data” created automatically, ofs=0x7f0000, len=0x810000
[ 2.304000] 0x0000007f0000-0x000001000000 : “rootfs_data”

BF000000-BF030000 UBOOT
BF030000-BF040000 CONFIG
BF040000-BF050000 FACTORY
BF050000-BF100000 FIRMWARE
BF30A3FB
BF7F0000 -

root@OpenWrt:/proc# cat mtd
dev: size erasesize name
mtd0: 01000000 00010000 “ALL”
mtd1: 00030000 00010000 “Bootloader”
mtd2: 00010000 00010000 “Config”
mtd3: 00010000 00010000 “Factory”
mtd4: 00fb0000 00010000 “firmware”
mtd5: 00cf5c05 00010000 “rootfs”
mtd6: 00810000 00010000 “rootfs_data”

root@OpenWrt:/proc# mount
rootfs on / type rootfs (rw)
/dev/root on /rom type squashfs (ro,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime)
/dev/mtdblock6 on /overlay type jffs2 (rw,noatime)
overlayfs:/overlay on / type overlayfs (rw,noatime,lowerdir=/,upperdir=/overlay)
tmpfs on /dev type tmpfs (rw,nosuid,relatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值