Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    [Happy Hacking Nezha Board] 小孩子才做选择,我全都要 BOOT

    MR Series
    1
    2
    1784
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      liangdi LV 4 last edited by

      乘胜追击

      前面完成引导 rt-smart 后, 开始继续其他功能的研究.

      常规我们使用 raspberry pi 以及其他 Linux 系统的时候, 一般我们的 kernel 等信息都是放在 /boot 目录下的,大多数会格式化成独立的一个分区.

      那么我们就照着这个方向去改造哪吒板子, 目前已经初见成效了, 我做了一个 demo 的 image , 供大家测试, 后续 RVBoards 会发布正式的 Debian 版本.

      • 下载地址: d1-multi-kernel

      说明

      镜像前面几个 1-3 分区是全志的预留的几个分区,占用空间很间,这里不去动他.

      第 4 分区是 vfat 格式的 boot 分区, kernel 和 dtbo 等文件存放在这里面

      demo 镜像 boot 分区文件说明

      • overlay : 存放 dtb overlay 文件
      • boot_debian.img debian 内核
      • boot_tina.img tina 内核
      • config.txt 引导配置文件
      • rt-smart rt-smart 执行程序

      config.txt 配置说明

      配置示例

      # mode 
      # 0 boot bare metal bin
      # 1 boot linux kernel
      mode=1
      bin=rt-smart
      kernel=boot_debian.img
      
      # dtb overlay
      # load overlay/${dtoverlay}.dtbo
      dtoverlay=test-overlay
      
      # uboot vars
      # for debian
      mmc_root=/dev/mmcblk0p6
      # for tina
      #mmc_root=/dev/mmcblk0p5
      

      详细说明

      • mode:

        配置引导模式 0 为引导二进制程序 1 为引导linux 内核 (目前这个版本的 内核文件需要使用 mkbootimage 打包生成,就是 tina sdk 中 pack 命令生成的 boot.img 文化)

      • bin

        mode=0 的时候引导的文件

      • kernel

        mode=1 的时候引导的文件

      • dtoverlay

        dtb overlay 配置, 将会加载 overlay/${dtoverlay}.dtbo 这个文件,后续将会支持多个文件加载

      • mmc_root

        这个是作为 bootargs 中 root 参数传递给内核的,告诉内核 root 在什么分区,默认是 /dev/mmcblk0p5 , demo 镜像中有多个内核,多个 rootfs ,所以需要配置一下.

      • 注意

        • 配置项"="两边不能有空格
        • config.txt 是作为 uboot 的环境变量加载的,可以配置其他变量覆盖 uboot 内部的变量

      原理

      主要就是利用 uboot 的 fatload 这个指令,从 mmc 中 vfat 文件系统中加载指定文件到内存中使用.

      用到相关的指令 fatload, env import ,fdt 等

      核心配置

      # demo 镜像中的 
      bootcmd=run boot_check setargs_mmc boot_mmc
      # 其中 setargs_mmc 是全志默认的,设置 mmc 加载的 bootrags 的指令
      
      # boot_check 检测 mmc 是否启用,然后加载 config.txt 文件,再加载 dtbo 文件
      boot_check=run card_init;mmcinfo;mmc part;fatload mmc ${mmc_dev}:${mmc_boot_part} 47000000 config.txt;env import -t 47000000 ${filesize}; test -n "$dtoverlay" && fatload mmc ${mmc_dev}:${mmc_boot_part} 48000000 overlay/${dtoverlay}.dtbo; fdt apply 48000000
      
      # boot_mmc 就是根据 mode 引导不同系统了
      boot_mmc=if test ${mode} -eq 0; then fatload mmc ${mmc_dev}:${mmc_boot_part} 45000000 ${bin}; go 45000000; else fatload mmc ${mmc_dev}:${mmc_boot_part} 45000000 ${kernel}; bootm 45000000; fi
      
      

      原理和实现其实很简单, 后续还可以继续改进,支持多个 dtbo 加载, tftp 加载(方便快速调试) 等等.

      后记

      完成多系统引导就这么简单了, 后续文章我会再写一个 dtb overlay 的 demo.
      注意事项: demo 镜像中, debain 的 rootfs 大小太小,更大空间,需要自行处理一下.

      L 1 Reply Last reply Reply Quote Share 0
      • L
        liangdi LV 4 @liangdi last edited by

        @liangdi 在 [Happy Hacking Nezha Board] 小孩子才做选择,我全都要 BOOT 中说:

        下载
        更快的下载地址

        http://2020-sd-static.qianguatech.com/d1-multi-kernel.zip

        1 Reply Last reply Reply Quote Share 0
        • Referenced by  Kirin Kirin 
        • 1 / 1
        • First post
          Last post

        Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

        行为准则 | 用户协议 | 隐私权政策