精华内容
下载资源
问答
  • UBOOT

    2021-03-13 14:38:47
    主要说明了什么是ubootuboot编译、uboot的烧写。结合正点原子阿尔法开发板进行实验。

    本博客是本人自己学习正点原子阿尔法开发板时本着好记性不如烂笔头的心情进行的笔记整理,所以会有不少内容与其教学资料相互重叠。如有侵权行为请立即联系我删除博客,感兴趣者可以百度左盟主开源的教学资料进行具体的学习。


    一、何为uboot?

    Uboot的作用就如同电脑开机时进入BIOS界面一样,起到的是引导系统启动的作用,同时也可以利用Uboot进行系统固件的刷新,升级API。

    1. uboot是一个裸机程序,比较复杂。

    2. uboot,就是一个bootloader,作用就是用于启动Linux或其他系统。
      Uboot最主要的工作就是初始化DDR。因为Linux是运行在DDR里面的。一般Linux镜像zlmage(ulmage)+设备树(.dtb)存放在SD、EMMC、NAND、SPI FLASH等等外置存储区域。
      这里就牵扯到一个问题,需要将Linux镜像从外置flash拷贝到DDR中,再去启动。

    3. 要启动 Linux,需要先将 Linux 镜像文件拷贝到 DRAM 中,如果使用到设备树的话也需要将设备树拷贝到 DRAM 中。可以从 EMMC 或者 NAND 等存储设备中将 Linux 镜像和设备树文件拷贝到 DRAM,也可以通过 nfs 或者 tftp 将 Linux 镜像文件和设备树文件下载到 DRAM 中。不管用那种方法,只要能将 Linux 镜像和设备树文件存到 DRAM 中就行,然后使用 bootz 命令来启动

    Uboot的主要目的就是为系统的启动做准备。
    Uboot,不仅仅能启动Linux,也可以启动其他系统,比如vxworkS.。Linux不仅仅能通过uboot启动。
    uboot,是个通用的bootloader,他支持多种架构。

    Uboot获取:

    1、首先就是uboot官网。缺点就是支持少,比如某一款具体芯片驱动等不完善。
    uboot 官网
    2.SOC 厂商会从 uboot官网下载某一个版本的uboot,然后在这个版本的uboot上加入相应的SOC 以及驱动。这就是SOC 厂商定制版的uboot。NXP官方的I.MX6ULL EVK板子。
    NXP维护的uboot
    3、做开发板的厂商,开发板会参考SOC厂商的板子。开发板必然会和官方的板子不一样。因此开发板厂商又会去修改SOC 厂商做好的uboot,以适应自己的板子。

    二、U-Boot初次编译

    整体流程:

    1. 安装 ncurses 库
    sudo apt-get install libncurses5-dev
    
    1. 解压uboot源码
    tar -vxjf uboot-imx-2016.03-2.1.0-g4475ea1-v1.3.tar.bz2
    
    1. 清除工程
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
    
    1. 配置uboot
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
    
    1. 编译uboot内核
    make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
    
    V=1打印编译过程;
    -j12:使用 12 核来编译 uboot;
    

    过程优化:
    1、编译UBOOT的时候需要先配置
    2、编译完成以后就会生成一个u-boot.bin。必须向u-boot.bin添加头部信息。Uboot编译最后会通过/tools/mkimage 软件添加头部信息,生成u-boot.imx。
    3、如果配置过uboot,那么一定要注意shell脚本会清除整个工程,那么配置的文件也会被删除,配置项也会被删除掉。
    新建名为 mx6ull_alientek_emmc.sh 的 shell 脚本文件,然后在里面输入如下内容:

    #!/bin/bash
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr256_nand_defconfig
    make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4
    

    烧写时使用./mx6ull_alientek_emmc.sh即可执行脚本中的三条命令。

    4.为了方便开发.建议直接在uboot顶层Makefile里面设置好ARCH 和CORSS_COMPILE这两个变量的值。

    # set default to nothing for native builds
    ifeq ($(HOSTARCH),$(ARCH))
    CROSS_COMPILE ?=
    endif
      
    ARCH ?= arm
    CROSS_COMPILE ?= arm-linux-gnueabihf-
    

    三、 U-Boot 烧写与启动

    uboot 编译好以后就可以烧写到板子上使用了,这里我们跟前面裸机例程一样,将 uboot烧写到 SD 卡中,然后通过 SD 卡来启动来运行 uboot。使用 imxdownload 软件烧写,命令如下:

    chmod 777 imxdownload //给予 imxdownload 可执行权限,一次即可
    ./imxdownload u-boot.bin /dev/sdb 
    //将bin文件通过imxdownload添加头部信息后烧写到SD卡挂载点
    
    展开全文
  • uboot

    2020-01-07 10:59:56
    uboot 属于bootloader的一种,是用来引导启动内核的,它的最终目的就是,从flash中读出内核,放到内存中,启动内核. 所以,由上面描述的,就知道,UBOOT需要具有读写flash的能力。 uboot是怎样引导启动内核的? ...

    uboot 属于bootloader的一种,是用来引导启动内核的,它的最终目的就是,从flash中读出内核,放到内存中,启动内核.

    所以,由上面描述的,就知道,UBOOT需要具有读写flash的能力。

    uboot是怎样引导启动内核的?

    uboot刚开始被放到flash中,板子上电后,会自动把其中的一部分代码拷到内存中执行,这部分代码负责把剩余的uboot代码拷到内存中,然后uboot代码再把kernel部分代码也拷到内存中,并且启动,内核启动后,(先是VFS)挂着根文件系统,执行应用程序。

    uboot启动的内核为uImage,这种格式的内核是由两部分组成:真正的内核和内核头部组成,头部中包括内核中的一些信息,比如内核的加载地址,入口地址。

     

    uboot启动的大过程是怎么样的?

    uboot启动主要分为两个阶段,主要在start.s文件中,第一阶段主要做的是硬件的初始化,包括,设置处理器模式为SVC模式,关闭看门狗,屏蔽中断,初始化sdram,设置栈,设置时钟,从flash拷贝代码到内存,清除bss段等,bss段是用来存储静态变量,全局变量的,然后程序跳转到start_arm_boot函数,宣告第一阶段的结束

    第二阶段比较复杂,做的工作主要是1.从flash中读出内核。2.启动内核。start_arm_boot的主要流程为,设置机器id,初始化flash,然后进入main_loop,等待uboot命令,uboot要启动内核,主要经过两个函数,第一个是s=getenv("bootcmd"),第二个是run_command(s...),所以要启动内核,需要根据bootcmd环境变量的内容启动,bootcmd环境变量一般指示了从某个flash地址读取内核到启动的内存地址,然后启动,bootm。

    uboot启动的内核为uImage,这种格式的内核是由两部分组成:真正的内核和内核头部组成,头部中包括内核中的一些信息,比如内核的加载地址,入口地址。

    uboot在接受到启动命令后,要做的主要是,1,读取内核头部,2,移动内核到合适的加载地址,3,启动内核,执行do_bootm_linux

    do_bootm_linux主要做的为,1,设置启动参数,在特定的地址,保存启动参数,函数分别为setup_start_tag,setup_memory_tag,setup_commandline_tag,setup_end_tag,根据名字我们就知道具体的段内存储的信息,memory中为板子的内存大小信息,commandline为命令行信息,

    2,跳到入口地址,启动内核

    启动的函数为the_kernel(0,bd->bi_arch_number,bd->bi_boot_param)

    bd->bi_arch_number为板子的机器码,bd->bi_boot_param为启动参数的地址

     

    计算机系统的组成部件非常多,不同的计算机系统组成部件也不同。但是所有的计算机系统运行时需要的主要核心部件都是3个东西:CPU + 外部存储器(Flash/硬盘) + 内部存储器(DDR SDRAM/SDRAM/SRAM)。而一般的PC机启动过程为:PC上电后先执行BIOS程序(实际上PC的BIOS就是NorFlash),BIOS程序负责初始化DDR内存,负责初始化硬盘,然后从硬盘上将OS镜像读取到DDR中,然后跳转到DDR中去执行OS直到启动(OS启动后BIOS就无用了)。{这里NORFLASH不就是硬盘吗?不是而是MBR,主板上的程序}

    嵌入式系统和PC机的启动过程几乎没有两样,只是BIOS成了uboot,硬盘成了Flash。

    uboot本质上是一个裸机程序(不是操作系统),一旦uboot开始SoC就会单纯运行uboot(意思就是uboot运行的时候别的程序是不可能同时运行的),一旦uboot结束运行则无法再回到uboot(所以uboot启动了内核后uboot自己本身就死了,要想再次看到uboot界面只能重启系统。重启并不是复活了刚才的uboot,重启只是uboot的另一生)

    uboot的入口和出口。uboot的入口就是开机自动启动,uboot的唯一出口就是启动内核。uboot还可以执行很多别的任务(譬如烧录系统),但是其他任务执行完后都可以回到uboot的命令行继续执行uboot命令,而启动内核命令一旦执行就回不来了。

    总结:uboot的一切都是为了启动内核。

    uboot本身是一个开源项目,由若干个.c文件和.h文件组成,配置编译之后会生成一个uboot.bin,这就是uboot这个裸机程序的镜像文件。然后这个镜像文件被合理的烧录到启动介质中拿给SoC去启动。也就是说uboot在没有运行时表现为uboot.bin,一般躺在启动介质中。

    uboot运行时会被加载到内存中然后一条指令一条指令的拿给CPU去运行。

    uboot的命令式shell界面

    1)普通的裸机程序运行起来就直接执行了,执行时效果和代码有关。

    2)有些程序需要和人进行交互,于是乎程序中就实现了一个shell(shell就是提供人机交互的一个界面,回想ARM裸机全集第十六部分),uboot就实现了一个shell。

    注意:shell并不是操作系统,和操作系统一点关系都没有。linux中打开一个终端后就得到了一个shell,可以输入命令回车执行。uboot中的shell工作方式和linux中的终端shell非常像(其实几乎是一样的,只是命令集不一样。譬如linux中可以ls,uboot中ls就不识别)。

    环境变量就是运行时的配置属性。

    展开全文
  • UBoot

    2018-01-01 21:44:07
    uboot是用来干什么的,有什么作用? uboot 属于bootloader的一种,是用来引导启动内核的,它的最终目的就是,从flash中读出内核,放到内存中,启动内核 所以,由上面描述的,就知道,UBOOT需要具有读写flash...
    uboot是用来干什么的,有什么作用?
    

    uboot 属于bootloader的一种,是用来引导启动内核的,它的最终目的就是,从flash中读出内核,放到内存中,启动内核

    所以,由上面描述的,就知道,UBOOT需要具有读写flash的能力。

    uboot是怎样引导启动内核的?

    uboot刚开始被放到flash中,板子上电后,会自动把其中的一部分代码拷到内存中执行,这部分代码负责把剩余的uboot代码拷到内存中,然后uboot代码再把kernel部分代码也拷到内存中,并且启动,内核启动后,挂着根文件系统,执行应用程序。

    uboot启动的大过程是怎么样的?

    uboot启动主要分为两个阶段,主要在start.s文件中,第一阶段主要做的是硬件的初始化,包括,设置处理器模式为SVC模式,关闭看门狗,屏蔽中断,初始化sdram,设置栈,设置时钟,从flash拷贝代码到内存,清除bss段等,bss段是用来存储静态变量,全局变量的,然后程序跳转到start_arm_boot函数,宣告第一阶段的结束。

    第二阶段比较复杂,做的工作主要是1.从flash中读出内核。2.启动内核。start_arm_boot的主要流程为,设置机器id,初始化flash,然后进入main_loop,等待uboot命令,uboot要启动内核,主要经过两个函数,第一个是s=getenv("bootcmd"),第二个是run_command(s...),所以要启动内核,需要根据bootcmd环境变量的内容启动,bootcmd环境变量一般指示了从某个flash地址读取内核到启动的内存地址,然后启动,bootm。

    uboot启动的内核为uImage,这种格式的内核是由两部分组成:真正的内核和内核头部组成,头部中包括内核中的一些信息,比如内核的加载地址,入口地址。

    uboot在接受到启动命令后,要做的主要是,1,读取内核头部,2,移动内核到合适的加载地址,3,启动内核,执行do_bootm_linux

    do_bootm_linux主要做的为,1,设置启动参数,在特定的地址,保存启动参数,函数分别为setup_start_tag,setup_memory_tag,setup_commandline_tag,setup_end_tag,根据名字我们就知道具体的段内存储的信息,memory中为板子的内存大小信息,commandline为命令行信息,

    2,跳到入口地址,启动内核

    启动的函数为the_kernel(0,bd->bi_arch_number,bd->bi_boot_param)

    bd->bi_arch_number为板子的机器码,bd->bi_boot_param为启动参数的地址


    展开全文
  • uboot移植,uboot手册

    2019-03-28 22:28:22
    imx287uboot移植s3c2440uboot移植,非常全面的总结资料,加上uboot手册
  • uboot详解 uboot详解

    热门讨论 2011-05-10 10:39:43
    uboot详解 uboot详解 uboot详解 uboot详解
  • 本课程为uboot学习的第12部分,从uboot官网下载的uboot开始进行移植,基本涉及到uboot移植的方方面面。本课程的目标不只是让大家理解uboot的代码结构和移植方法,更重要的在于实战演练和对大家移植时功力的提升和...
  • Smart210 uboot

    2020-09-29 22:45:33
    smart210 uboot,之前下载很多的uboot网络功能都有问题,后用国嵌版本的uboot,且使用路由器(非开发板和PC直连的方式)实现tftp功能,将uboot烧写进nandflash
  • 本期课程为uboot学习的前导课程,主要目标是向大家引入uboot并让大家学会使用uboot,包括uboot的工作方式、环境变量、常用命令、uboot和主机的网络连接等。学完本课程将可以使用uboot(虽然还不懂原理)
  • uboot

    1.__u_boot_cmd_start以及__u_boot_cmd_end两个变量在代码只有一处出现,这两个变量是通过链接脚本传进来的。
    2.使用nand read.jffs2中的.jffs2是因为使用这种格式不需要页对齐,比较方便。
    3.flash上存储的内核:头部+真正的内核
    头部中的两个重要的参数:
    ih_load:表示加载地址,即内核运行时应该放在哪里
    ih_ep:表示入口地址,运行内核时需要跳转到的地址
    注释:因为头部有这两个参数,所以下载内核到内存中的位置没有关系,内核都会被移动到加载地址;加载的时候指的是真正的内核加载的地址,而不包括头部;头部大小为64字节。
    4.使用do_bootm_linux启动系统:这时候uboot会帮助内核设置启动参数(内核和uboot之间的交互方法:在某个地址按某种格式(TAG格式)存放一些数据);跳转到入口地址去启动内核。
    注释:跳到入口函数的过程:theKernel赋值;调用theKernel函数。
    5.交互的参数:
    setup_start_tag:size、tag、flag、pagesize、rootdev
    setup_memory_tags:size、flag、size、start(0x3000 0000)
    setup_commandline_tag:size、tag
    setup_end_tag:0、0
    6.theKernel函数的三个参数解析:
    第一个参数为0
    第二个参数:bd->bi_arch_number是机器ID(2410和2440的机器ID不同)。
    第三个参数:bd->bi_boot_parasm是uboot和内核交互数据的首地址。
    7.直接输入boot命令,实际上是调用bootcmd中的两条语句来启动内核。

    展开全文
  • Uboot学习资料

    2018-10-22 18:16:09
    uboot的学习文档,包括了uboot移植,uboot源码分析,uboot的Makefile分析,linux移植等等内容,适合作为uboot的学习参考。
  • uboot初识

    2020-12-03 11:29:41
    uboot初识 一. 什么是uboot  1.1. uboot的由来  1.1.1.uboot是SourceForge上的开源项目  1.1.2.uboot就是由一个人发起,然后由整个网络上所有感兴趣的人共同维护发展而来的一个bootloader(与linux相似)。 ...
  • 深入了解uboot

    2019-03-12 13:46:30
    深入了解uboot系统,用比较通俗易懂的方式了解uboot技术
  • uboot的命令体系-2.8.uboot源码分析4

    千人学习 2016-02-25 22:06:36
    本课程为uboot学习的第8部分,主要讲解uboot的命令体系。分析了uboot的命令定义和实现的方法,教大家自己向uboot中添加自定义命令等。目标是让大家深入理解uboot的命令原理及使用。
  • uboot编译

    2019-12-27 11:33:42
    uboot编译uboot编译步骤清除工程配置uboot编译ubootuboot编译shell脚本创建shell文件赋予xxx_uboot.sh文件可执行权限执行xxx_uboot.sh文件编译 uboot编译步骤 清除工程 make ARCH=arm CROSS_COMPILE=arm-linux-...
  • 前段时间使用TI的am4378芯片,发现系统在SD卡启动的时候,启动文件使用的是MLO和uboot.img;而Norflash和eMMC启动的时候使用的是 uboot-spl.bin和uboot.bin,有如下疑问: 1. MLO和Uboot-spl.bin有什么区别?uboot....
  • Linux-uboot-学习笔记(8):uboot启动内核 uboot启动时,在执行到theKernel指针时即跳转到内核执行,也就标志着uboot的结束。在此之前uboot要进行内核启动的最后准备:从内核镜像的部署位置将内核搬移到DDR中,校验...
  • 本课程为uboot学习的第11部分,以三星官方版本uboot为原材料来进行移植,适配我们的X210开发板。本课程的目标是对前面uboot分析的课程进行综合从而完成uboot的移植。
  • uboot的环境变量-2.9.uboot源码分析5

    千人学习 2016-02-25 22:15:11
    本课程为uboot学习的第9部分,主要讲解uboot的环境变量的实现原理和环境变量在内存中、SD卡中的存储方法。结合环境变量相关的几个命令的代码分析,目的是让大家对uboot的环境变量设计思路有深入理解,从而更深入掌握...
  • uboot 编译

    2018-07-08 14:52:25
    uboot 编译
  • uboot.patch

    2018-11-22 22:39:06
    uboot.patch文件解决友善提供的uboot只能打印ok,而无法启动问题,tiny4412 SDK1611适用
  • uboot移植

    2020-08-12 10:00:34
    选择芯片厂商版本的uboot进行移植学习 uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar NXP : I.MAX6ull uboot初次编译 首先在 Ubuntu 中安装 ncurses 库,否则编译会报错,安装命令如下: sudo apt-get install libncurses...
  • uboot初探

    千次阅读 2018-10-04 15:05:38
    总结:  1 uboot其实就是个大程序,大的裸机程序  2 uboot 和Linux内核不一样,他没有多任务调度运行的机制,不能实现任务调度等操作系统应用功能...uboot起初是为powerpc开发的启动程序,uboot是个bootloade...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,506
精华内容 9,402
关键字:

uboot