This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

如何将U-boot烧录到Nand中?如何用tftp,nfs加载内核和文件系统?



硬件平台是 XAM335x的SKEVM板子。

开发主机上安装的是ubuntu14.04。

SDK是 PROCESSOR-SDK-LINUX-AM335X 02_00_00_00。

1,运行了SDK下面的setup.sh,创建了/tftpboot,以及targetNFS目录了。

2,在sdk的更目录make都是成功的。

然后我也可以用做卡的方式把我自己编译的kernel, uboot以及系统带的 targetNFS目录下的文件系统,写到SD卡中。而且能够通过SD卡正常启动。

现在我想脱离SD卡启动方式。

1,所以要先把U-boot烧录到Nand中,(这里我不知道怎么下载。请告诉我下载方法。)

2,然后开机进入U-boot命令,设置好开发板IP以及serverip等配置。

3,通过tftp命令 (tftp c0008000 zImage-am335x-evm.bin)命令,串口段打印一大串###,也没报错,好像是下载内核成功了。(这里请问下,tftp命令里的地址 0xc0008000是否正确?应该用什么地址?)

4,NFS下载文件系统,(这一步我也不知道怎么做,网上有命令 setenv bootargs root=/dev/nfs rw nfsroot=$serverip:$rootpath ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off console=ttyS0,115200等等命令我也知道正确与否。请告诉我正确的方法,谢谢。

  • 我找了这篇文档看了下  http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User%27s_Guide#UART

    1,实验了其中的用TeraTerm 通过UART往板子里传送u-boot.bin以及u-boot.img的方式。但是总是在传送u-boot.bin时卡在31%的位置不动了。然后我用sdk里自带的u-boot-am335x-evm.img和u-boot-spl.bin-am335x-evm文件往板子传输,虽然没卡住,但是传完u-boot-am335x-evm.img后板子还是往外打印4个C,而不是像文档中说的会出现“U-Boot# ”。

    所以烧录也不成功,请问是为什么?

    2,然后我又试着通过插SD的方式进到Uboot命令后,出现“U-Boot# ”时,通过tftp分别下载u-boot-am335x-evm.img和u-boot-spl.bin-am335x-evm这两个文件到板子上,然后通过nand write的方式写到板子上去。

    但是问题来了,不管是nand eraser命令还是nand write命令都会报 no devices available的错误。

    请问是为什么?


  • 启动的时候uboot有没有找到nand呢?

  • 下面是刚刚启动到进入uboot命令行时的log. 

    U-Boot SPL 2015.07 (Oct 07 2015 - 14:27:57)
    reading args
    spl_load_image_fat_os: error reading image args, err - -1
    reading u-boot.img
    reading u-boot.img


    U-Boot 2015.07 (Oct 07 2015 - 14:27:57 -0400)

    Watchdog enabled
    I2C: ready
    DRAM: 256 MiB
    NAND: 0 MiB
    MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
    reading uboot.env

    ** Unable to read "uboot.env" from mmc0:1 **
    Using default environment

    Net: <ethaddr> not set. Validating first E-fuse MAC
    cpsw, usb_ether
    Hit any key to stop autoboot: 0
    U-Boot#

  • 刚刚看了下硬件,我们这个板子确实不带nand,只有SD来存内核文件。

    然后我想问下。对于没有nand的这款板子,我能用TFTP和NFS下载内核和文件系统吗?

    不然我每次调试,每次改了内核文件之后,都要重新做卡,很耗时间。

    请帮我解答下,谢谢。

  • 您可以参考 http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User%27s_Guide 

  • 你好,这个文档我看过没有我想要的内容。

    我现在通过TFTP加载kernel的方法如下,但是还是不成功。请帮我检查下。

    另外我这个板子是不带nand的,只有SD卡来存东西。

    我的方法如下:

    u-boot#setenv ipaddr 192.168.1.20
    u-boot#setenv serverip 192.168.1.100

    u-boot# setenv bootcmd ‘tftp 30800000 uImage; bootm’

    同时用U-boot/tool下的 mkimage工具将我的zImage 转成uImage了,并将uImage放在我的tftpboot目录下了。

    sudo mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008000 -n "linux kerner" -d /opt/ti-processor-sdk-linux-am335x-evm-02.00.00.00/board-support/prebuilt-images/zImage-am335x-evm.bin uImage

    然后执行boot命令。

    u-boot# boot

    发现kernel是下载下来了,但是就是引导启动不了。 请帮我看看啊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    log如下:

    U-Boot# boot
    link up on port 0, speed 100, full duplex
    Using cpsw device
    TFTP from server 192.168.1.100; our IP address is 192.168.1.20
    Filename 'uImage'.
    Load address: 0x80000000
    Loading: #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    ###############################################
    1016.6 KiB/s
    done
    Bytes transferred = 3232560 (315330 hex)
    ## Booting kernel from Legacy Image at 80000000 ...
    Image Name: linux kerner
    Created: 2015-12-17 9:00:02 UTC
    Image Type: ARM Linux Kernel Image (uncompressed)
    Data Size: 3232496 Bytes = 3.1 MiB
    Load Address: 30008000
    Entry Point: 30008000
    Verifying Checksum ... OK
    Loading Kernel Image ... data abort
    pc : [<8ff85d38>] lr : [<8ff63dab>]
    reloc pc : [<80832d38>] lr : [<80810dab>]
    sp : 8ef32bb0 ip : 00000000 fp : 30008000
    r10: 00000000 r9 : 8ef32ed8 r8 : 00010000
    r7 : 00010000 r6 : 003052f0 r5 : 80000040 r4 : 00000000
    r3 : 80010040 r2 : 30007fff r1 : 80000041 r0 : 30008000
    Flags: Nzcv IRQs off FIQs on Mode SVC_32
    Resetting CPU ...

    resetting ...

    U-Boot SPL 2015.07 (Oct 07 2015 - 14:27:57)
    reading args
    spl_load_image_fat_os: error reading image args, err - -1
    reading u-boot.img
    reading u-boot.img


    U-Boot 2015.07 (Oct 07 2015 - 14:27:57 -0400)

    Watchdog enabled
    I2C: ready
    DRAM: 256 MiB
    NAND: 0 MiB
    MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
    reading uboot.env
    Net: cpsw, usb_ether
    Hit any key to stop autoboot: 0
    cpsw Waiting for PHY auto negotiation to complete........

  • 请问您用的是什么版本的sdk? ezsdk 6.0 还是processor sdk 2.0。

    如果您用的是processor sdk 2.0,那么没必要把zImage转成uImage, 可以参考http://processors.wiki.ti.com/index.php/Linux_Kernel_Users_Guide#Compiling_the_Kernel, 关于uboot,可以参考 

    http://processors.wiki.ti.com/index.php/Linux_Core_U-Boot_User%27s_Guide

    没有nand没关系,uboot会读取板子上的eeprom来判断板子类型,再判断是否要把uboot的环境变量放到nand flash。

  • 如果您不熟悉device tree,可以参考我们的ezsdk 6.0,这个在我给您的slides中是有的。