uboot如何实现flash启动uImage和rootfs

时间:2021-02-04 16:28:40
uboot如何实现flash启动uImage和rootfs
我现在已经实现了uboot通过tftp方式下载PC虚拟机redhat下uImage文件;系统启动成功;加载nfs文件系统,启动成功。
配置如下:
//保证uImage文件存在于主机/tftpboot目录下;保证rootfs文件存在于主机/temp目录下;nfs方式启动rootfs系统
[u-boot@MINI2440]# setenv bootcmd tftp 31000000 uImage \; bootm 31000000  //中间有两个空格
[u-boot@MINI2440]# setenv bootargs noinitrd root=/dev/nfs rw nfsroot=192.168.0.1
01:/temp/rootfs ip=192.168.0.105:192.168.0.101::255.255.255.0 console=ttySAC0,11
5200 init=/linuxrc mem=64M   //没有分行分段,是一句话

现在我需要实现重新上电后,不需要重新tftp下载,直接从flash启动uImage,文件系统yaffs也在flash中
另外我有几个问题
1.下载uImage到指定的flash地址 命令怎么实现?norflash or nandflash,地址一般是多少
2.我的文件系统名为rootfs,如何下载rootfs到flash? rootfs是yaffs or cramfs (supervivi下我是用mkyaffs2img) 下载地址如何设置
3.我的bootargs bootcmd又该怎么设置?

9 个解决方案

#1


设置bootcmd参数就可以了
setenv bootcmd 'cp.b f0000000 70800000 380000; bootm 70800000'

首先还是先tftp到内存,下面随便举个例子
#tftp 70800000 uImage
//写到norflash
#cp.b f0000000 70800000 300000
(cp [.b, .w, .l] source target count)
这里的f0000000是norflash的起始地址
//写到nand
#nand write 70800000 0 300000
(nand write - addr off|partition size)

文件系统写到哪里需要与内核里面的分区地址对应,那样才好设置启动参数
#setenv bootargs root=/dev/mtdblock4 rootfstype=jffs2 rw console=ttymxc1,115200 init=/linuxrc video=mxcfb0:dev=vga,800x600M@60,if=RGB24这个是我用的jffs2的,其他的基本差不多,改一下类型就可以,然后就是注意root=文件系统所在的分区

以上只作参考。

#2



nand flash uboot启动Linux系统 问题

1.要想nand flash方式启动Linux,是不是要先把uboot下载到nand flash中,如何操作?
(通过H-JTAG下载uboot.bin到mini2440 nand flash ???
  还是在norflash uboot启动后,#cp.b )

2.把uImage拷贝到nand flash中
先#tftp 31000000 uImage (把宿主机中的uImage通过网络tftp方式下载到mini2440内存地址31000000)
然后#nand write 31000000 0 300000  (nand write - addr off|partition size)
我如何确认uImage size的大小??? (300000)

[u-boot@MINI2440]# nand write 31000000 0 300000

NAND write: device 0 offset 0x0, size 0x300000
Writing at 0x20000 -- NAND write to offset 64 failed 0
0 bytes written: ERROR
这又是怎么回事??? (ERROR)

3.设置bootcmd参数
[u-boot@MINI2440]# setenv bootcmd 'cp.b xxxx 31000000 300000(size); bootm 31000000'
xxxx处,应该为nand flash中uImage的地址,如何确认这个地址???
size的大小,如何确认??? (300000)

4.关于rootfs
我在宿主机制作了根文件rootfs
我是不是要把rootfs写到nand flash,如何操作??? (先tftp .img再nand write? addr 和 size 如何确定)

5.
是不是nand flash中有了uImage和rootfs,bootcmd参数正确就可以从nand flash正常启动系统了???

#3


从 nand 启动:首先通过某种方式(很多),将 kernel 、rootfs 写入 nand 分区,然后设置从 nand 启动(修改 u-boot )

具体操作已经记不清了,关于 mini2440 的资料网上太多了,学会 Google

#4


在nor flash启动uboot,如何对NandFlash进行分区,查看分区

#5


Flash 的分区在 u-boot 和 内核的文件中都有,和板子相关的那个文件

#6


把uImage拷贝到nand flash中
先#tftp 31000000 uImage (把宿主机中的uImage通过网络tftp方式下载到mini2440内存地址31000000)
然后#nand write 31000000 0 300000  (nand write - addr off|partition size)
我如何确认uImage size的大小??? (300000)

#7


nanf flash内,有好几个分区,
一个分区,存储着uboot   (需要先tftp uboot.bin到内存,再从内存cp.b到指定nand flash分区)
一个分区,存储着uImage (需要先tftp uImage到内存,再从内存cp.b到指定nand flash分区)
一个分区,存储着rootfs    (需要先tftp ???什么格式的,到内存,再从内存cp.b到指定nand flash分区)
是不是都具备了,才可以从nand flash启动?

nand flash分区信息,在内核arch/arm/plat-s3c24xx/common-smdk.c中?
Flash 的分区在 u-boot 和 内核的文件中都有,应该是依据哪个分区了?uboot中nand flash分区信息代码位置

#8


是不是按照下图所示操作,先mkyaffs2image rootfs rootfs.yaffs. uboot如何实现flash启动uImage和rootfs

#9


rootfs’  在uboot里面设置一下启动参数 

#1


设置bootcmd参数就可以了
setenv bootcmd 'cp.b f0000000 70800000 380000; bootm 70800000'

首先还是先tftp到内存,下面随便举个例子
#tftp 70800000 uImage
//写到norflash
#cp.b f0000000 70800000 300000
(cp [.b, .w, .l] source target count)
这里的f0000000是norflash的起始地址
//写到nand
#nand write 70800000 0 300000
(nand write - addr off|partition size)

文件系统写到哪里需要与内核里面的分区地址对应,那样才好设置启动参数
#setenv bootargs root=/dev/mtdblock4 rootfstype=jffs2 rw console=ttymxc1,115200 init=/linuxrc video=mxcfb0:dev=vga,800x600M@60,if=RGB24这个是我用的jffs2的,其他的基本差不多,改一下类型就可以,然后就是注意root=文件系统所在的分区

以上只作参考。

#2



nand flash uboot启动Linux系统 问题

1.要想nand flash方式启动Linux,是不是要先把uboot下载到nand flash中,如何操作?
(通过H-JTAG下载uboot.bin到mini2440 nand flash ???
  还是在norflash uboot启动后,#cp.b )

2.把uImage拷贝到nand flash中
先#tftp 31000000 uImage (把宿主机中的uImage通过网络tftp方式下载到mini2440内存地址31000000)
然后#nand write 31000000 0 300000  (nand write - addr off|partition size)
我如何确认uImage size的大小??? (300000)

[u-boot@MINI2440]# nand write 31000000 0 300000

NAND write: device 0 offset 0x0, size 0x300000
Writing at 0x20000 -- NAND write to offset 64 failed 0
0 bytes written: ERROR
这又是怎么回事??? (ERROR)

3.设置bootcmd参数
[u-boot@MINI2440]# setenv bootcmd 'cp.b xxxx 31000000 300000(size); bootm 31000000'
xxxx处,应该为nand flash中uImage的地址,如何确认这个地址???
size的大小,如何确认??? (300000)

4.关于rootfs
我在宿主机制作了根文件rootfs
我是不是要把rootfs写到nand flash,如何操作??? (先tftp .img再nand write? addr 和 size 如何确定)

5.
是不是nand flash中有了uImage和rootfs,bootcmd参数正确就可以从nand flash正常启动系统了???

#3


从 nand 启动:首先通过某种方式(很多),将 kernel 、rootfs 写入 nand 分区,然后设置从 nand 启动(修改 u-boot )

具体操作已经记不清了,关于 mini2440 的资料网上太多了,学会 Google

#4


在nor flash启动uboot,如何对NandFlash进行分区,查看分区

#5


Flash 的分区在 u-boot 和 内核的文件中都有,和板子相关的那个文件

#6


把uImage拷贝到nand flash中
先#tftp 31000000 uImage (把宿主机中的uImage通过网络tftp方式下载到mini2440内存地址31000000)
然后#nand write 31000000 0 300000  (nand write - addr off|partition size)
我如何确认uImage size的大小??? (300000)

#7


nanf flash内,有好几个分区,
一个分区,存储着uboot   (需要先tftp uboot.bin到内存,再从内存cp.b到指定nand flash分区)
一个分区,存储着uImage (需要先tftp uImage到内存,再从内存cp.b到指定nand flash分区)
一个分区,存储着rootfs    (需要先tftp ???什么格式的,到内存,再从内存cp.b到指定nand flash分区)
是不是都具备了,才可以从nand flash启动?

nand flash分区信息,在内核arch/arm/plat-s3c24xx/common-smdk.c中?
Flash 的分区在 u-boot 和 内核的文件中都有,应该是依据哪个分区了?uboot中nand flash分区信息代码位置

#8


是不是按照下图所示操作,先mkyaffs2image rootfs rootfs.yaffs. uboot如何实现flash启动uImage和rootfs

#9


rootfs’  在uboot里面设置一下启动参数