首页 > 其他分享 >Uboot移植(二)

Uboot移植(二)

时间:2024-03-21 21:56:29浏览次数:25  
标签:fatload Uboot dtb run 移植 fi mmc fdt

参考资料:https://www.bilibili.com/video/BV12E411h71h?p=30&vd_source=432ba293ecfc949a4174ab91ccc526d6  

1、bootcmd

bootcmd保存了着 uboot 的默认命令,uboot倒计时结束之后就会执行bootcmd中的命令。这些命令一般都是用来启动Linux内核的,比如将EMMC或者flash中的Linux内核镜像和设备树文件加载到DDR中,然后启动Linux内核。 NXP官方设置的CONFIG_BOOTCOMMAND如下:
#define CONFIG_BOOTCOMMAND \
    run findfdt;" \
    mmc dev ${mmcdev};" \    // $(mmcdevc) = 1,切换到emmc
    mmc dev ${mmcdev}; if mmc rescan; then " \    // 如果能扫描出来emmc,则从emmc启动,否则从net启动
        if run loadbootscript; then " \
            run bootscript; " \
        else " \
            if run loadimage; then " \
                run mmcboot; " \
            else run netboot; " \
            fi; " \
        fi; " \
    else run netboot; fi"

"mmcboot=echo Booting from mmc ...; " \
    "run mmcargs; " \
    "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
        "if run loadfdt; then " \
            "bootz ${loadaddr} - ${fdt_addr}; " \
        "else " \
            "if test ${boot_fdt} = try; then " \
                "bootz; " \
            "else " \
                "echo WARN: Cannot load the DT; " \
            "fi; " \
        "fi; " \
    "else " \
        "bootz; " \
    "fi;\0" \

"findfdt="\
"if test $fdt_file = undefined; then " \
"if test $board_name = EVK && test $board_rev = 9X9; then " \
        "setenv fdt_file imx6ull-9x9-evk.dtb; fi; " \
    "if test $board_name = EVK && test $board_rev = 14X14; then " \
        "setenv fdt_file imx6ull-14x14-evk.dtb; fi; " \
    "if test $fdt_file = undefined; then " \
        "echo WARNING: Could not determine dtb to use; fi; " \
"fi;\0" \ 

loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};    // 展开mmcdev = 1,mmpart = 1,loadaddr = 0x80800000,script = boot.scr,boot.src不存在

loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image};    // 展开就是loadimage=fatload mmc 1:1 0x80800000 zImage

loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file};    // 展开后就是loadfdt=fatload mmc 1:1 0x83000000 imx6ull-14x14-evk.dtb
findfdt根据board_name和board_rev设置fdt_file的环境变量,也就是dtb文件名字 根据上面的分析,从EMMC中读取zImage和dtb,总的就是下面的4行:
mmc dev 1                                         //切换到 EMMC
fatload mmc 1:1 0x80800000 zImage                 //读取 zImage 到 0x80800000 处
fatload mmc 1:1 0x83000000 imx6ull-14x14-evk.dtb  //读取设备树到 0x83000000 处
bootz 0x80800000 - 0x83000000                     //启动 Linux
所以,在自己的移植的Uboot中,可以如下设置:
#define CONFIG_BOOTCOMMAND \
     "mmc dev 1;" \
     "fatload mmc 1:1 0x80800000 zImage;" \
     "fatload mmc 1:1 0x83000000 imx6ull-alientek-emmc.dtb;" \
     "bootz 0x80800000 - 0x83000000;"
或者直接在Uboot中设置bootcmd的值,这个值就是保存到EMMC中的,即:
setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000;'
 

2、bootargs

bootargs是为了启动Linux内核
mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot}
其中console=ttymxc0,baudrate=115200,mmcroot=/dev/mmcblk1p2 rootwait rw,所以上面展开之后就是:
mmcargs=setenv bootargs console= ttymxc0, 115200 root= /dev/mmcblk1p2 rootwait rw
可以看出环境变量 mmcargs 就是设置 bootargs 的值为“console= ttymxc0, 115200 root= /dev/mmcblk1p2 rootwait rw”,bootargs 就是设置了很多的参数的值,这些参数 Linux 内核会使用到,常用的参数有: 1、console console=ttymxc0,115200 :设置 ttymxc0(也就是串口 1)作为 Linux 的终端,并且串口波特率设置为 115200。 2、root root 用来设置根文件系统的位置,root=/dev/mmcblk1p2 用于指明根文件系统存放在mmcblk1 设备的分区 2 中。root 后面有“rootwait rw”,rootwait 表示等待 mmc 设备初始化完成以后再挂载,否则的话 mmc 设备还没初始化完成就挂载根文件系统会出错的。rw 表示根文件系统是可以读写的,不加rw 的话可能无法在根文件系统中进行写操作,只能进行读操作。 3、rootfstype 此选项一般配置 root 一起使用,rootfstype 用于指定根文件系统类型,如果根文件系统为ext 格式的话此选项无所谓。如果根文件系统是ramf、yaffs等文件系统的话就需要设置此选项,指定根文件系统的类型。 4、rdinit rdinit=/linuxrc: 指定了 init 程序的路径为 /linuxrc,init 程序是系统启动时的第一个用户空间进程。 5、boot_delay boot_delay=32: 设置了引导延迟时间为 32 秒,在 U-Boot 启动后会等待 32 秒再继续引导内核。 6、loglevel loglevel=8: 设置了内核日志级别为 8,用于控制内核消息的输出级别。

标签:fatload,Uboot,dtb,run,移植,fi,mmc,fdt
From: https://www.cnblogs.com/lethe1203/p/18088319

相关文章

  • Uboot移植
    一个开发板运行uboot,DDR或者DRAM,串口,SD/EMMC等驱动要存在。这些基本要和原厂一样的 nxp官方uboot下载地址:https://github.com/Freescale/u-boot-fslcnxp官方imx6系统板子介绍:https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/i-mx-applications-......
  • Uboot启动Linux内核
    参考资料来源:https://www.bilibili.com/video/BV12E411h71h?p=22&vd_source=432ba293ecfc949a4174ab91ccc526d6正点原子Linux驱动开发指南 image全局变量:在bootm.c中,存在一个全局变量bootm_headers_timages;/*pointerstoos/initrd/fdtimages*/结构体定......
  • 飞凌RK3568开发板移植Qt5.9.8
    1、安装Ubuntu18.04虚拟机,并开启root登录2、gcc环境搭建从官方提供的网盘资料OK3568-C_ForlinxDesktop20.04_用户资料_R3(更新日期:20231201),解码\Linux\源码\OK3568-linux-source,在prebuilts文件夹将gcc拷贝到虚拟机(Ubuntu18.04)的/usr/local目录下 设置环境变量,修改/etc/pr......
  • Uboot Makefile分析(一)
    学习资料来源:https://www.bilibili.com/video/BV12E411h71h?p=11&vd_source=432ba293ecfc949a4174ab91ccc526d6 VERSION=2016PATCHLEVEL=03SUBLEVEL=EXTRAVERSION=NAME=版本信息 MAKEFLAGS+=-rR--include-dir=$(CURDIR)+=表示追加,-rR表示禁止......
  • Uboot功能
    Uboot功能Uboot(Universalbootloader)就是一个裸机程序,用于启动内核。不过相较于单片机程序更加复杂相关知识补充Uboot:UniversalbootloaderXIP:CPU可以直接发出地址信号读取Flash/RAM,执行指令(可以看成直接在Flash/RAM中运行);此类Flash/RAM称为XIP设备非XIP:有时程序从SD卡......
  • Uboot命令的使用
    学习资料:https://www.bilibili.com/video/BV12E411h71h?p=6&vd_source=432ba293ecfc949a4174ab91ccc526d6https://blog.csdn.net/x777777x/article/details/136444785 记录一次uboot启动log打印:U-Boot2016.03(Mar182024-01:07:08+0800)//编译时间2024/03/180......
  • STM32_LVGL移植流程及注意事项
    STM32——LVGL移植流程及注意事项下载源码(lvgl8.2):点击git下载.源码精简lvgl-8.2​|build:使用Cmake工具编译的相关文件​|demos:lvgl官方的测试demos​|docs:lvgl文档​......
  • Uboot基本知识
    c参考视频:https://video.100ask.net/p/t_pc/course_pc_detail/column/p_63ff16eae4b07b055838a303Uboot本质上就是一个裸驱 Uboot基本概念:uboot就是一个bootloader,作用就是用于启动linuxkernel或者其他系统。uboot最主要的工作就是初始化DDR,因为linux是运行在DDR里面的。对......
  • stm32F103 移植Free RTOS
    #stm32F103移植FreeRTOS1.下载FreeRTOS源码[官网下载](http://www.freertos.org)[代码托管网站下载](https://sourceforge.net/projects/freertos/files/FreeRTOS)2.FreeRTOS文件介绍进入Source文件夹进入portable文件夹进入RVDS3.FreeRTOS移......
  • STM32移植完FATFS的ROM不够解决方法
    1.移植完FatFs之后会有语言包的支持,在map文件中也可以查看到也就是cc936.c这个文件现在cc936占用ROM大约为175030,在本项目中不需要中文支持所以取消掉即可,取消方法如下第一种方法(通过CubeMX配置的代码)不要使能中文文件名称就好了,记得改这个 第二种方法(库函数或者HAL库没有......