u-boot如何加载linux_arm-linux-gcc可以编译u-boot - CSDN
  • u-boot加载Linux过程

    2015-11-10 17:32:28
    之前学习完了u-boot的启动,本文主要讲u-bootlinux内核的运行做了哪些准备工作。总结u-boot的作用,主要就是初始化硬件设备和写入linux的启动参数。下面对两个主要作用作说明。 1.初始化 首先了解在u-boot启动前,...

        

        之前学习完了u-boot的启动,本文主要讲u-boot为linux内核的运行做了哪些准备工作。总结u-boot的作用,主要就是初始化硬件设备、写入linux的启动参数以及加载linux内核。下面对这几个主要作用作说明。


    1.初始化(TQ210开发板)

    首先了解在u-boot启动前,BL0完成的工作:

    1禁止看门狗
    2.初始化指令cache
    3.
    初始化栈、堆
    4.初始化块设备拷贝函数
    5.初始化PLL( 锁相环)、设置系统时钟
    6.根据OM引脚配置,从指定的外部存储器拷贝BL1到内部SRAM
    7. 校验BL1的校验和


    BL1(u-boot-spl) 中初始化时钟、DRAM控制器。


    2.写入linux启动参数

        u-boot给linux参数是通过将参数以约定的格式放在内存中,然后u-boot将这个存放这个参数的内存地址传递给linux内核。

        u-boot启动后,会自动执行其环境变量里bootcmd代表的命令,在执行这个命令前,可以添加一个延时,在这段时间内可以通过设定的按键来中止自动执行bootcmd,这个延时的长短由CONFIG_BOOTDELAY决定,但也可以设置环境变量来改变它(对于其它环境变量也是这样)。当CONFIG_BOOTDELAY等于0时,可以通过定义CONFIG_ZERO_BOOTDELAY_CHECK来中止自动执行过程,但按键必须在启动前按下。

        u-boot传递给linux的参数是通过bootargs来传递的,在执行bootm前必须设置好bootargs,然后在bootcmd里添加bootm命令。

        bootm的工作是根据bootargs写入参数并将linux内核拷贝到运行的位置。写入的格式参照3.2.4 设置内核的启动参数》 章节和U-Boot与Linux内核的交互,写入的位置在内存的0-0x4000这个范围内,0x4000-0x8000存放的是内核页表,这些地址在内核中有相关的宏定义,这也是为什么内核的加载地址一般为0x****8000的原因。在参数写入完成后,将寄存器R0赋值为0,R1赋值为机器号, R2赋值为启动参数数据结构的首地址。


    3.加载linux内核

        调用bootm命令时,需要传入一个参数,这个参数代表的是将内核放到什么地方,那从什么地方去读内核文件呢?是通过u-boot分区别表,简单的说就是u-boot指定一块存储空间为kernel分区,并把内核映像放到该分区里,加载的时候就直接从这里读取了,详细请看http://blog.sina.com.cn/s/blog_95268f5001013e50.html。

        找到内核映像(uImage)后,读取它的前0x40个字节,得到loadaddr 和entry point两个地址,这两个地址是在制作uImage时指定的,u-boot会对这几个地址作判断。最后跳转到linux处,将控制权移交给linux。


            



               

    展开全文
  • 而在实际的嵌入式系统中都是通过BootLoader加载Linux镜像,然后再去运行。 嵌入式BootLoader 功能类似PC中的BIOS,用以检测硬件是否正常。 加载操作系统镜像到RAM 设置不同启动方式 NOR/NAND Flash启动 从SD卡启动...

    在前面的实验中,我们都是直接运行Linux内核。而在实际的嵌入式系统中都是通过BootLoader加载Linux镜像,然后再去运行。

    嵌入式BootLoader

    • 功能类似PC中的BIOS,用以检测硬件是否正常。
    • 加载操作系统镜像到RAM
    • 设置不同启动方式
      • NOR/NAND Flash启动
      • 从SD卡启动
      • BootLoader从网络加载内核启动

    下面将介绍QEMU从Ubuntu加载镜像然后启动。


    一、U-BOOT编译

    1、下载U-BOOT

    <官网>下载,也可以从我的<网盘>直接下载,提取码:lrd6 。【建议下载网盘里的】

    下载完毕拖曳到虚拟机目录./QEMU中,并输入tar jxvf u-boot-2017.05.tar.bz2进行解压!

    2、修改Makfile

    ①、进入解压后的目录,修改Makefile文件,输入vi Makefile

    和之前的一样,我们需要修改交叉编译器的相关变量值。在vi的一般模式下,输入/CORSS_COMPILE进行查找。

    我的u-boot-2017.05在249行添加内容CROSS_COMPILE ?= arm-linux-gnueabi-,保存退出。

    在这里插入图片描述

    行号,可以在一般模式下,然后输入:set nu进行显示。

    vim永久显示行号配置

    要想每次都显示,可以进入输入vi /etc/vim/vimrc,然后再文件末尾添加set nu,保存退出即可!

    ②、修改config.mk,输入vi config.mk

    修改25行为:ARCH := arm

    在这里插入图片描述

    3、修改配置文件

    输入make vexpress_ca9x4_defconfig

    在这里插入图片描述

    4、编译

    ①、输入make -j4

    在这里插入图片描述
    完成后
    在这里插入图片描述
    ②、验证U-boot是否可用

    输入qemu-system-arm -M vexpress-a9 -m 512M -nographic -kernel u-boot

    注意:出现这个倒计时的时候按下任意键直接进入,不要让它自启动,我们还没有完全配置完成,让它自启动的话会出错的。
    在这里插入图片描述

    按下任意按键之后会出现
    在这里插入图片描述

    输入print ipaddr,若成功打印IP地址,说明安装的没有问题。否则需要再找问题!

    二、QEMU网络功能配置

    一般来说QEMU可以通过NAT方式与虚拟机进行连接,但是虚拟机也是通过NAT与我们主机PC进行连接的,进而外网不能访问虚拟机。若开发板也采用这种方式,造成实际虚拟机访问不了QEMU。

    1、安装依赖包,apt install uml-utilities bridge-utils

    2、查看tun设备文件

    输入ls /dev/net,可看到Ubuntu16.04已经默认有一个tun文件。

    3、查看网络配置

    输入ifconfig
    在这里插入图片描述

    我的对应网口是ens33,IP地址是192.168.112.142

    4、修改配置文件

    ①、输入vi /etc/network/interfaces

    在其中添加如下内容

    auto ens33
     
    auto br0
    iface br0 inet dhcp
    bridge_ports ens33
    
    

    在这里插入图片描述
    ②、在/etc目录下添加qemu-ifupqemu-ifdown

    qemu-ifup内容如下

    #!/bin/sh
    
    echo sudo tunctl -u $(id -un) -t $1
    sudo tunctl -u $(id -un) -t $1
    
    echo sudo ifconfig $1 0.0.0.0 promisc up
    sudo ifconfig $1 0.0.0.0 promisc up
    
    echo sudo brctl addif br0 $1
    sudo brctl addif br0 $1
    
    echo brctl show
    brctl show
    
    sudo ifconfig br0 192.168.112.142 
    

    qemu-ifdown内容如下

    #!/bin/sh
    
    echo sudo brctl delif br0 $1
    sudo brctl delif br0 $1
    
    echo sudo tunctl -d $1
    sudo tunctl -d $1
     
    echo brctl show
    brctl show
    
    

    在这里插入图片描述

    ③、上面两个修改和添加完成后,输入reboot进行重启!

    重启后输入ifconfig,可发现已经生成虚拟网口br0,这个就是以后的虚拟开发本与主机host通信接口。

    在这里插入图片描述

    三、使用U-boot引导内核镜像

    前提

    • 需要将内核编译为uImage格式
    • 需要指定uImage的加载地址
    • 编译时指定:$ make LOADADDR=0x60003000 uImage -j4

    1、进入linux内核所在目录,cd /home/clay/QEMU/linux-4.4.195/

    2、指定U-boot加载内核地址

    ①、输入make LOADADDR=0x60003000 uImage -j4

    在这里插入图片描述

    ②、查看uImage是否生成,输入ls arch/arm/boot

    在这里插入图片描述

    四、TFTP工具安装

    1、安装tftp工具:apt install tftp-hpa tftpd-hpa xinetd

    2、修改配置文件,输入vi /etc/default/tftpd-hpa

    修改文件内容如下所示:

    # /etc/default/tftpd-hpa
     
    TFTP_USERNAME="tftp"
    TFTP_DIRECTORY="/home/clay/QEMU/tftpboot"
    TFTP_ADDRESS="0.0.0.0:69"
    TFTP_OPTIONS="-l -c -s"
    

    在这里插入图片描述

    3、在/home/clay/QEMU/下,创建tftpboot文件夹

    在这里插入图片描述

    然后设置其权限为最高权限,输入chmod 777 tftpboot
    在这里插入图片描述

    4、重启tftp服务

    输入/etc/init.d/tftpd-hpa restart

    在这里插入图片描述

    5、拷贝文件到tftpboot文件夹

    ①、拷贝三个文件

    • uImage
      • cp -r /home/clay/QEMU/linux-4.4.195/arch/arm/boot/uImage .
    • u-boot
      • cp -r /home/clay/QEMU/u-boot-2017.05/u-boot .
    • vexpress-v2p-ca9.dtb
      • cp -r /home/clay/QEMU/linux-4.4.195/arch/arm/boot/dts/vexpress-v2p-ca9.dtb .

    在这里插入图片描述

    ②、新建脚本boot-uboot.sh ,并添加可执行权限,然后写入代码如下。

    qemu-system-arm \
    	-M vexpress-a9 \
    	-kernel u-boot  \
    	-nographic  \
    	-m 512M  \
    	-net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
    	-sd a9rootfs.ext3
    
    

    在这里插入图片描述

    展开全文
  • Linux u-boot加载过程

    2014-03-05 19:20:20
    Linux u-boot加载过程 ----基于freescale i.MX6 近期做项目需要修改u-boot,刚好趁机研究一把linux u-boot。 以前没接触过u-boot,所以学习只能从头开始。 既然是从头开始, 那就从u-boot的加载过程起步吧。 ...

    Linux u-boot加载过程
    ----基于freescale i.MX6

    近期做项目需要修改u-boot,刚好趁机研究一把linux u-boot。

    以前没接触过u-boot,所以学习只能从头开始。
    既然是从头开始, 那就从u-boot的加载过程起步吧。

    本文主要包括以下内容:
    1、cpu如何开始加载u-boot。
    2、加载u-boot时的初期处理。
    3、如何跳转到c代码。
    c代码中的处理过程,以及后续处理,本文不作介绍。

    做我们这个行当的,都知道程序需要跑在内存上(能够XIP的flash除外,此处不作介绍)。
    但刚上电时,cpu并不知道它连了些什么东西,甚至连没连接内存也不知道,另外想在内存上执行,也总要把程序加载到内存才行。
    如此看来,机器上电的处理比想象的要复杂不少!习惯了开机只是按下开关,想不到还有这么多东东隐藏在背后!!!
    那么,程序到底是如何开始跑的呢?
    启动过程一般在cpu的参考手册中都有介绍,我这边就不作详细介绍,但相关的部分,会稍微提一下。
    上电后,cpu内部会做一些检查,如电压是否稳定,启动模式等等,之后会从地址0x00000000开始执行命令。
    从地址0x00000000开始,一般是cpu的rom code,也就是cpu芯片上写死的。
    rom code开始执行,会作很多处理,会处理什么呢?cpu厂商很清楚,呵呵。
    其实,多数处理可以看看参考手册中的启动时序。
    我们关心的:根据启动模式,确定启动设备;然后对启动设备进行验证,并进行初步初始化。
    (也就是参考手册中有很多地方会说的,在启动过程中是什么样子,例如始终是 XX M,启动过程之后是另外一个样子,例如时钟变为 YY M)
    初始化好了,然后就是去加载我们的程序了,也就是从启动设备上读取我们的程序。
    从哪儿开始读取呢,当然是有道道的。参考手册中一般会指定各种启动设备中程序存放的地址。如i.MX6中,若从emmc启动,会从emmc的0x400 bytes地址开始读取程序(1K bytes的地方).
    读过来的是个什么东东呢?直接可以跑的程序?
    不是,参考手册中有说明。
    i.MX6中读到的是一个IVT(image vector table)结构体,结构体的定义肯定是规定好的,不然rom code怎么知道如何解析该结构体?
    i.MX6中对IVT结构体的定义:
    header
    entry: Absolute address of the first instruction to execute from the image
    reserved1: Reserved and should be zero
    dcd: Absolute address of the image DCD. The DCD is optional so this field may be set to NULL if no DCD is required. See
    Device Configuration Data (DCD) for further details on DCD.
    boot data: Absolute address of the Boot Data
    self: Absolute address of the IVT. Used internally by the ROM
    csf: Absolute address of Command Sequence File (CSF) used by the HAB library. See High Assurance Boot (HAB) for
    details on secure boot using HAB. This field must be set to NULL when not performing a secure boot
    reserved2: Reserved and should be zero

    我们关系以下几个:
    entry: 入口函数,在程序中指定,如:ENTRY(_start)
    dcd: Device Configuration Data, 设备配置数据,用来配置设备的。因为刚上电,设备的参数都是默认的,不能达到最优效果,甚至有些设备不进行初始化根本就无法工作。
    那怎么办呢?就需要在使用这些设备之前,进行一些设置,如内存等等。
    dcd中可以设置如下这些东东:
    Address range                                      Start address       Last Address
    IOMUX Control (IOMUXC) registers     0x020E0000        0x020E3FFF
    CCM register set                                   0x020C4000        0x020C7FFF
    ANADIG registers                                 0x020C8000        0x020C8FFF
    MMDC register set                                0x021B0000        0x021B7FFF
    IRAM Free Space                                 0x00907000        0x00937FF0
    EIM                                                       0x08000000        0x0FFEFFFF
    DDR                                                      0x10000000        0xFFFFFFFF
    DCD中命令的格式这儿就不介绍了,参考手册中有详细说明。

    来看看IVT定义的例子吧:

    .section ".text.flasheader", "x"
     b _start
     .org CONFIG_FLASH_HEADER_OFFSET
     
    ivt_header:       .word 0x402000D1 /* Tag=0xD1, Len=0x0020, Ver=0x40 */
    app_code_jump_v:  .word _start
    reserv1:          .word 0x0
    dcd_ptr:          .word dcd_hdr
    boot_data_ptr:   .word boot_data
    self_ptr:         .word ivt_header
    app_code_csf:     .word 0x0
    reserv2:          .word 0x0



    在该例子中,入口函数为_start,在start.S中定义;dcd_hdr 指向dcd image,在flashheader.S中定义;IVT结构体也定义在flashheader.S中;
    boot_data是个结构体,定义在flashheader.S中:

    boot_data:        .word TEXT_BASE
    image_len:        .word _end_of_copy  - TEXT_BASE + CONFIG_FLASH_HEADER_OFFSET
    plugin:           .word 0x0



    TEXT_BASE定义在config.mk中:

     TEXT_BASE = 0x27800000



    CONFIG_FLASH_HEADER_OFFSET,看字面意思,就是flash header的偏移地址,flash header? 我们前面有个flashheader.S难道就是这个?
    看了下其定义:

     #define CONFIG_FLASH_HEADER_OFFSET 0x400



    原来就是flash header在启动设备上的偏移地址,也就IVT结构体在启动设备中的偏移。
    _end_of_copy的定义在u-boot.lds中定义,应该就是u-boot结束的地方。
    image_len为 _end_of_copy  - TEXT_BASE还可以理解,为什还要加个CONFIG_FLASH_HEADER_OFFSET?
    难道是rom code是按照image len从启动设备的开始地址加载u-boot,所以要包含CONFIG_FLASH_HEADER_OFFSET??
    另外在.text.flasheader段定义的地方有下面一行代码:

     .org CONFIG_FLASH_HEADER_OFFSET



    难道是.text.flasheader段的头部故意空出来了CONFIG_FLASH_HEADER_OFFSET个bytes的空间?
    看了下System.map,有如下:

    27800400 t ivt_header



    其中27800000是u-boot加载地址,而IVT开始的地方,即ivt_header在u-boot加载地址偏移CONFIG_FLASH_HEADER_OFFSET(0x400)的地方。
    注意,这儿说的是加载地址,也就是内存中的地址,不是在启动设备上存储的地址。

    知道了IVT的定义,并且知道rom code是从启动设备的固定地址来加载IVT,那么是如何将IVT放到启动设备的固定地址的呢?
    我们知道,u-boot是被写到了启动设备的固定地址,也就是说,只要IVT结构体在u-boot的头部,就能够保证rom code能够加载到IVT。
    的确是这样的,IVT在flashheader.S的头部,而flashheader.o又在u-boot的头部,所以IVT就在u-boot的头部。
    这是通过u-boot.lds来实现的:
    (u-boot.lds文件不长,干脆全列出来吧)

    OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
    OUTPUT_ARCH(arm)
    ENTRY(_start)
    SECTIONS
    {
     . = 0x00000000;
    
     . = ALIGN(4);
     .text    :
     {
       /* WARNING - the following is hand-optimized to fit within */
       /* the sector layout of our flash chips! XXX FIXME XXX */
       board/freescale/mx6dl_14cytmap/flash_header.o (.text.flasheader)
       cpu/arm_cortexa8/start.o
       drivers/mmc/libmmc.a  (.text)
       /* 其他 text 段*/
    
       *(.text)
     }
    
     . = ALIGN(4);
     .rodata : { *(.rodata) }
    
     . = ALIGN(4);
     .data : { *(.data) }
    
     . = ALIGN(4);
     .got : { *(.got) }
    
     . = .;
     __u_boot_cmd_start = .;
     .u_boot_cmd : { *(.u_boot_cmd) }
     __u_boot_cmd_end = .;
    
     . = ALIGN(4);
     _end_of_copy = .; /* end_of ROM copy code here */
     __bss_start = .;
     .bss : { *(.bss) }
     _end = .;
    }
    



    从u-boot.lds可知,flashheader.o在代码段的首部,并且代码段在最前面,因此就保证了前面所说的IVT在启动设备上的固定位置。

    rom code最初加载了哪些东东呢?
    rom code根据启动设备的偏移地址,首先把uboot加载到iRame。
    然后开始解析IVT结构体。
    之后找到DCD所在的地址(在IVT)中,逐条执行DCD命令。主要是初始化内存等。
    之后呢,找到entry函数,也就是IVT结构体中的entry成员,对应到上面的例子是_start函数,开始执行。
    _start函数中start.S中定义:

    .globl _start
    _start: b reset
     ldr pc, _undefined_instruction
     ldr pc, _software_interrupt
     ldr pc, _prefetch_abort
     ldr pc, _data_abort
     ldr pc, _not_used
     ldr pc, _irq
     ldr pc, _fiq
     ...



     
    可见_start的第一句就跳转到了reset。之后是一些异常处理的东东。
    再看看reset,也在start.S中。
    reset的名称是自定义的,有些地方称为start_code。
    reset主要完成以下工作:
    1、set the cpu to SVC32 mode
    2、初始化cpu的一些东东,如果需要的话
    3、如果有必要,重新定位u-boot。其实就是判断启动地址,即_start的地址,与加载地址,即TEXT_BASE是否相同,如果不同,则将uboot从启动地址copy到加载地址。
    4、设置stack、bss、irq、fiq,其实就是在内存中留出来一些空间。
    5、看是否需要配置MMU。
    6、最后:

     ldr pc, _start_armboot @ jump to C code



     将_start_armboot加载到pc寄存器,pc寄存器保存的是吓一条指令的地址,所以也就是跳到_start_armboot执行。
    _start_armboot定义:

    _start_armboot: .word start_armboot



    start_armboot 是c代码中定义的函数。在代码Board.c中定义。
    终于从汇编出来了。

     

    展开全文
  • 嵌入式启动概述  嵌入式boot loader  功能类似于PC的BIOS、硬件检测是否正常  加载操作系统镜像到RAM  设置不同的启动方式  常见的启动方式 ... BootLoader从网络加载Linux内核启动 U-boot编译  ...

    嵌入式启动概述

        嵌入式boot loader

            功能类似于PC的BIOS、硬件检测是否正常

           加载操作系统镜像到RAM

           设置不同的启动方式

        常见的启动方式

            NOR/NAND flash启动

            从SD卡启动

            BootLoader从网络加载Linux内核启动

    U-boot编译

        下载源码

            从GitHub下载地址点我

        修改

            Makefile找CROSS_COMPILE

                CROSS_COMPILE ?= arm-linux-gnueabi-

            config.mk找ARCH

                ARCH ?= arm

        编译     

    make -j4

        实验Uboot     

    qemu-system-arm -M vexpress-a9 -m 512M -nographic -kernel u-boot

           

            启动成功

    QEMU网络功能配置

        配置QEMU与主机的网络连接

            采用桥接的网络连接与Host通信

            需要主机内核tun/tap模块支持

        配置

            主机安装工具包:apt-get install uml-utilities bridge-utils

            创建tun设备文件(自动会创建)

                

            修改/etc/network/interface文件,重启生效,添加

    auto br0
    
    iface br0 inet dhcp
    
     bridge_ports ens33

            创建/etc/qemu-ifup和/etc/qemu-ifdown文件

            /etc/qemu-ifup

    #!/bin/sh
    
    echo sudo tunctl -u $(id -un) -t $1
    sudo tunctl -u $(id -un) -t $1
    
    echo sudo ifconfig $1 0.0.0.0 promisc up
    sudo ifconfig $1 0.0.0.0 promisc up
    
    echo sudo brctl addif br0 $1
    sudo brctl addif br0 $1
    
    echo brctl show
    brctl show
    
    sudo ifconfig br0 192.168.33.135 
    

            /etc/qemu-ifdown

    #!/bin/sh
    
    echo sudo brctl delif br0 $1
    sudo brctl delif br0 $1
    
    echo sudo tunctl -d $1
    sudo tunctl -d $1
     
    echo brctl show
    brctl show
    

    内核配置编译

        使用U-boot引导内核镜像

            将内核变异为UImage格式

            需要制定uImage的加载地址

            编译时指定

    make LOADADDR=0x60003000 uImage -j4

            

    主机TFTP工具安装

        安装tftp工具:apt-get install tftp-hpa tftpd-hpa xinetd

        修改配置文件

            vim /etc/default/tftpd-hpa

    TFTP_USERNAME="tftp"
    
    TFTP_DIRECTORY="/home/tftpboot"
    
    TFTP_ADDRESS="0.0.0.0:69"
    
    TFTP_OPTIONS="-l -c -s"

        创建tftp目录:mkdir /home/tftpboot  chmod 777 tftpboot/

        重启tftp服务:/etc/init.d/tftpd-hpa restart

    两种引导方式

        自动引导

        1、修改include/configs/vexpress_common.h

            先搜索BOOTCOMMAND

            然后修改

    #define CONFIG_BOOTCOMMAND \
    
            "tftp 0x60003000 uImage;tftp 0x60500000 vexpress-v2p-ca9.dtb; \
    
            setenv bootargs 'root=/dev/mmcblk0 console=ttyAMA0'; \
    
            bootm 0x60003000 - 0x60500000; "

            在再下面添加

    /*Netmask*/
    
    #define CONFIG_IPADDR 192.168.1.128
    
    #define CONFIG_NETMASK 255.255.255.0
    
    #define CONFIG_SERVERIP 192.168.1.70

            注意:此处CONFIG_SERVERIP为tftp主机即我们的主机的ip

            CONFIG_IPADDR为同网段内随便一个IP就可以

        2、编译

            进入u-boot文件夹     

    make vexpress_ca9x4_defconfig
    make -j4

        3、将必要的文件移到tftpboot

            包括编译生成的u-boot、编译生成的uImage、vexpress-v2p-ca9.dtb、启动脚本

            

        4、修改启动脚本

    qemu-system-arm \
    
            -M vexpress-a9 \
    
            -m 512m \
    
            -kernel u-boot \
    
            -nographic \
    
            -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
    
            -sd /home/gyy/work/qemu/rootfs.ext3

        5、运行启动脚本启动

            

            会自动从tftp服务器下载uImage和vexpress-v2p-ca9.dtb并写入正确位置

            

           到此启动成功

    手动引导

        自动引导适合我们自己学习时使用,一次配好就不用管了每次启动只要执行启动脚本就可以了,但是往往开发中是不一定能够使用自动引导的,我们需要进入u-boot后手动从tftp服务器下载内核并加载,以下为手动加载的方法

        在未加载时按下回车进入手动模式

        

        设置开发板地址:setenv ipaddr 192.168.1.128

        查看开发板地址:print ipaddr

        

        设置tftp服务器地址:setenv serverip 192.168.1.70

        设置bootargs:saveenv bootargs  'root=/dev/mmcblk0 console=ttyAMA0'

        下载uImage:tftp 60003000 uImage

            

        下载dtb文件:tftp 60500000 vexpress-v2p-ca9.dtb

            

        启动:bootm 60003000 - 60500000

           

            启动成功

    修改u-boot的Makefile实现自动复制到tftpboot

        

        在u-boot的Makefile中找到此位置添加cp u-boot /home/tftpboot,在u-boot生成完成后拷贝

        

        

        可以看到实现了拷贝功能

    展开全文
  • 1、在前面的两篇文章中,都是直接加载linux内核,在实际的嵌入式系统...2、使用u-boot加载linux内核: 从http://ftp.denx.de/pub/u-boot/下载u-boot,解压。 进入到-boot目录执行编译: sudo make ARCH=arm CRO...
  • U-Boot U-Boot的版本选择 U-Boot的下载地址:/pub/u-boot的索引 进入到U-Boot的下载页面,发现U-Boot的版本众多: 那怎么选取U-Boot的版本呢?够用就行。 本文芯片选择S5PV210,U-Boot版本选择u-boot-2010.12版本。...
  • 想学习嵌入式,没米买开发板?买了开发板“折腾”不起来?遇到开发板的各种问题解决不了?...移植U-bootLinux内核、使用busybox制作根文件系统、挂载NFS文件系统、在开发板上开发应用和内核驱动...
  • 使用u-boot引导linux的启动过程 在使用u-boot引导linux的过程中,需要进行一系列的步骤,以下从内核映像的制作开始概述linux的整个启动过程。...#mkimage –n “linux-2.6.26.5” –A arm –O linux
  • 转自 http://blog.csdn.net/njuitjf/article/details/20563867 这篇文章让我明白...Linux u-boot加载过程 ----基于freescale i.MX6 近期做项目需要修改u-boot,刚好趁机研究一把linux u-boot。 以前没接触过u-bo
  • DENX U-BootLinux使用手册 出自http://coosign.blogchina.com/1318487.html 1. 概要 2. 绪论 3. 嵌入式Linux开发工具套件 3.1 获取ELDK 3.2 初始安装 4. 系统设置 4.1 设置串口 4.2 配置...
  • u-boot启动流程分析

    2019-02-18 09:32:37
    u-boot的启动流程是指从cpu上电开机执行u-bootu-boot成功加载完操作系统的过程。这一过程可以分为两个阶段,各个阶段的功能如下: 第一阶段的功能: 硬件设备初始化; 加载u-boot第二阶段的代码到RAM空间; ...
  • 这一期我们使用QEMU来模拟运行U-Boot,大家对U-Boot应该都不陌生,相当于Linux的学前班,U-Boot的数据结构定义和驱动模型定义都采用Linux风格,在研究Linux内核前分析一下U-Boot会大有裨益。  记得第一次用物理...
  •   U-boot是嵌入式Linux操作系统中运行的第一个程序(可将U-boot和内核看做是两个不同的程序),其终极目的是引导加载内核进而使Linux操作系统运行起来,。如果U-boot出现问题 ,操作系统就无法启动,所以对于U-...
  • U-BOOT启动linux的过程

    2017-09-11 13:20:09
    uboot启动linux的过程  一、概述  linux内核镜像常见到的有两种形式,zImage和uImage。这两种文件的格式稍有差别,所以启动这两种格式的内核镜像也会有所不同。目前,uboot只支持启动uImage类型的镜像,对zImage...
  • 实验二 u-boot的烧写及使用 【实验目的】 了解u-boot的常用命令和linux内核的引导。 【实验环境】 1、 ubuntu 12.04发行版 2、 u-boot-2010.03 3、 FS4412平台 4、 交叉编译器 arm-none-linux-gnueabi-...
  • 目录(?)[+] ...U-Boot启动第一阶段代码分析U-Boot启动第二阶段代码分析U-Boot启动Linux过程U-Boot添加命令的方法及U-Boot命令执行过程     -------------------------------------------
  • 交叉编译工具:arm-linux-gnueabihf- 学习目标:生成 BOOT.bin 文件 一、下载u-boot源码 在第一篇文章Zynq-7000系列之linux开发学习笔记:开发前准备(一)中已经提供过u-boot的下载链接,这...
  • 这周翻了翻u-boot-Xilinx的源码,结合着网上看的对cortexA8、A9的u-boot的源码分析,再结合自己在Xilinx上下的u-boot源码,试着对u-boot的启动流程进行一下分析,也给自己理一下思路。 u-boot源码的目录结构: ...
  • ――U-boot如何引导Linux内核启动?   Sailor_forever sailing_9806@163.com 转载请注明 http://blog.csdn.net/sailor_8318/archive/2008/08/05/2773412.aspx   【摘要】本节介绍了U-boot使用Go或bootm启动...
  • 一、基本环境 二、qemu 安装 三、开发板简介 四、编译 Linux 内核和 dtb 文件 ...六、使用 u-boot 加载 Linux 内核 七、挂载 NFS 文件系统 八、完善根文件系统 九、在虚拟板上运行应用和内核驱动...
1 2 3 4 5 ... 20
收藏数 36,130
精华内容 14,452
关键字:

u-boot如何加载linux