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

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

硬件平台是 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等等命令。

如果nand flash大小没问题,建议这样试试:

nand scrub -y 0xc000000 0x4000000

详情请查看u-boot中的cmd_nand.c文件中相关部分:

/*

* Syntax is:

* 01 2 34

* nand erase [clean] [off size]

*/

if (strncmp(cmd, "erase", 5) == 0 || strncmp(cmd, "scrub", 5) == 0) {

nand_erase_options_t opts

/* "clean" at index 2 means request to write cleanmarker */

int clean = argc >2 &&!strcmp("clean", argv[2])

int scrub_yes = argc >2 &&!strcmp("-y", argv[2])

int o = (clean || scrub_yes) ? 3 : 2

int scrub = !strncmp(cmd, "scrub", 5)

int spread = 0

int args = 2

const char *scrub_warn =

"Warning: "

"scrub option will erase all factory set bad blocks!\n"

" "

"There is no reliable way to recover them.\n"

" "

"Use this command only for testing purposes if you\n"

" "

"are sure of what you are doing!\n"

"\nReally scrub this NAND flash? <y/N>\n"

if (cmd[5] != 0) {

if (!strcmp(&cmd[5], ".spread")) {

spread = 1

} else if (!strcmp(&cmd[5], ".part")) {

args = 1

} else if (!strcmp(&cmd[5], ".chip")) {

args = 0

} else {

goto usage

}

}

/*

* Don't allow missing arguments to cause full chip/partition

* erases -- easy to do accidentally, e.g. with a misspelled

* variable name.

*/

if (argc != o + args)

goto usage

printf("\nNAND %s: ", cmd)

/* skip first two or three arguments, look for offset and size */

if (arg_off_size(argc - o, argv + o, &dev, &off, &size) != 0)

return 1

nand = &nand_info[dev]

memset(&opts, 0, sizeof(opts))

opts.offset = off

opts.length = size

opts.jffs2 = clean

opts.quiet = quiet

opts.spread = spread

if (scrub) {

if (!scrub_yes)

puts(scrub_warn)

if (scrub_yes)

opts.scrub = 1

else if (getc() == 'y') {

puts("y")

if (getc() == '\r')

opts.scrub = 1

else {

puts("scrub aborted\n")

return -1

}

} else {

puts("scrub aborted\n")

return -1

}

}

ret = nand_erase_opts(nand, &opts)

printf("%s\n", ret ? "ERROR" : "OK")

return ret == 0 ? 0 : 1

}

你只能通过NandFlash控制器访问NandFlash,即是只要知道Nand控制器的寄存器地址即可。NandFlash 不是一个RamLike的器件。Uboot放入nand中,在nand的0地址开始存放,移植时候需要注意页对齐,这样Uboot才可以可以通过StepingStone引导。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7909194.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存