(3)使用uboot界面通过tftp安装kernel,rootfs

板子已经通过Hitool烧录U-boot。

参数配置

1.单板上电后,敲任意键进入u-boot。设置serverip(即tftp服务器的ip)、ipaddr(单板ip)和ethaddr(单板的MAC地址)。

hisilicon #  setenv serverip 192.168.1.100
hisilicon #  setenv ipaddr 192.168.1.66
hisilicon # setenv gatewayip 192.168.1.1
hisilicon #  setenv netmask 255.255.255.0

2.在板载uboot界面中,烧写映像文件到(nand方式)

在Ubuntu下查看文件大小:

-rwxrw-rw- 1 doctor doctor 113639424 Jan 22  2019 fs_3531D.img
-rwxrw-rw- 1 doctor doctor    361852 Jan 22  2019 u-boot-hi3531D_spi.bin
-rwxrw-rw- 1 doctor doctor   3726090 Jan 22  2019 uImage_3531D

空间分配:

分区大小起始地址截止地址
bootloader1M0x000000000x00100000
kernel4M0x001000000x00500000
rootfs250M0x005000000x00ff00000

以下的操作均基于图示的地址空间分配(开发板默认分配)。

2.1烧写内核

hisilicon # mw.b 42000000 ff 400000 //将0x42000000写为0xff,长度0x400000
hisilicon # nand erase 100000 400000//擦除地址0x100000,长度400000
hisilicon # tftp 42000000 uImage_3531D//下载内核到0x42000000
把0x42000000起始地址,长度为0x400000的内容(内核uImage_3531D)写入nand flash 0x100000(跳过uboot空间)地址位置
hisilicon # nand write 42000000 100000 400000

2.2烧写跟文件系统

hisilicon # mw.b 42000000 ff 8000000
hisilicon # tftp 42000000 fs_3531D.img
hisilicon # nand erase 500000 0xFA00000
hisilicon # nand write 42000000 500000 6c60000

2.3设置系统启动参数

必须正确设置bootargs参数或者烧写bootargs镜像才能保证系统正常启动

hisilicon #  setenv bootcmd 'nand read 0x42000000 0x100000 0x400000;bootm 0x42000000'
hisilicon #  setenv bootargs 'mem=512M console=ttyAMA0,115200 ubi.mtd=2 root=ubi0:ubifs rootflags=sync rootfstype=ubifs rw mtdparts=hinand:1M(boot),4M(kernel),250M(rootfs)'
hisilicon #  saveenv

2.4重启设备

hisilicon # reset

U-boot 相关知识

以上用到的命令

mw(memory write)命令:将内容写到内存中
 .b表示以字节形式查看;
 .w表示以半字形式查看;
 .l表示以字形式查看;
  #of object表示查看长度
  示例: mw.b 42000000 ff 400000 //把内存首地址为0x42000000长度为400000写0xff
printenv:打印相关环境参数
setenv param_name "value":设置环境参数
saveenv:保存环境参数到Flash

bootcmd 和bootargs参数(以下是资料)

U-boot的环境参数中有两个和内核启动相关的参数,bootcmd ,boottargs


自我理解:内核和文件系统启动原理
1、uboot通过工具下载到nand存储区,然后启动uboot后把内核和文件系统也烧写到nand中去,uboot启动后引导内核,内核加载文件系统,中间内核启动时uboot按照存储器地址(实际烧写的物理地址也就是上面烧写到nand存储)找,然后把内核读到RAM上运行,然后内核再根据分区找文件系统。
2、文件系统是纯粹按分区找的,根据分区找到实际文件系统存放的地址。


1,bootcmd

这个参数包含了一些命令,这些命令将在u-boot进入主循环后执行
示例:
启动u-boot后,从nand flash中读内核映像到内存,然后启动内核。
setenv bootcmd 'nand read 0x42000000 0x100000 0x400000;bootm 0x42000000'
或者
bootcmd=boot_logo;nand read 0x42000000 0x100000 0x400000;bootm 0x42000000'
意思是启动u-boot后,执行boot_logo显示logo信息,然后从nand flash中读内核映像到内存,然后启动内核,其实就是引导作用。

2,bootargs

这个参数设置要传递给内核的信息,主要用来告诉内核分区信息和跟文件系统所在的分区。
示例:
setenv bootargs 'mem=512M console=ttyAMA0,115200 ubi.mtd=2 root=ubi0:ubifs rootflags=sync rootfstype=ubifs rw mtdparts=hinand:1M(boot),4M(kernel),250M(rootfs)'
其中:
mem:
整个DDR被划分为两部分:系统内存和mmz。mem表示整个DDR大小,mmz表示mmz区域大小。
需要根据单板配置及内存占用情况合理配置mem和mmz大小
mmz:
格式ddr,0,0,size
size表示整个DDR中预留给MMZ使用的空间大小。
例如mmz=ddr,0,0,300M表示在整个mem中预留300M供MMZ使用,其余分配给系统内存使用
console:
控制台参数。console=ttyAMA0,115200表示使用串口0作为控制台设备 波特率为115200
rootfstype:
根文件系统类型,请根据烧写的文件系统类型配置,此处为ubifs(有的也可能为yaffs2)
这个选项需要跟root一起配合使用:
一般如果根文件系统是ext2的话,有没有这个选项是无所谓的,
但是如果是jffs2,squashfs等文件系统的话,就需要rootfstype指明文件系统的类型,不然会无法挂载根分区.
mtdparts:
SPI Flash和Nand Flash的分区划分 格式 mtdparts=flashtype:size(name),size(name),...,-(others);
flashtype:size(name),size(name),...,-(others)

flashtype表示Flash类型
SPI Flash对应取值hi_sfc,
Nand Flash对应取值hinand
size表示分区大小
name表示分区名称

/------------------------------------------------
要想这个参数起作用,内核中的mtd驱动必须要支持,
即内核配置时需要选上
Device Drivers
—> Memory Technology Device (MTD) support
—> Command line partition table parsing y
/------------------------------------------------

blkdevparts:
eMMC的分区划分,格式 blkdevparts=mmcblk0:size(name),size(name),…,-(others)
size表示分区的大小
当rootfstype为ext3/ext4时,
rootfs分区的大小必须与文件系统镜像大小保持一致
name表示分区名称

3启动参数的设置

假设bootargs的内容为’mem=1G console=ttyAMA0,115200 root=/dev/mtdblock5 rootfstype=yaffs2 mtdparts=hi_sfc:1M(boot);hinand:4M(baseparam),4M(pqparam),4M(logo),8M(kernel),96M(rootfs),-(others) mmz=ddr,0,0,300M’
(在使用mtdparts分区划分时,boot和kernel在什么地方就得对应设置相应的mtdparts或者是blkdevparts
例子:
boot在spi flash, kernel和文件系统在nand flash
mtdparts=hi_sfc:1M;hinand:…)

3.1设置启动参数的命令如下

setenv bootargs 'mem=1G console=ttyAMA0,115200 root=/dev/mtdblock5 rootfstype=yaffs2 mtdparts=hi_sfc:1M(boot);hinand:4M(baseparam),4M(pqparam),4M(logo),8M(kernel),96M(rootfs),-(others) mmz=ddr,0,0,300M'

setenv bootcmd 'nand read 1000000 c00000 800000;bootm 1000000'
bootcmd命令加载内核(物理起始地址为0xc00000,长度为0x800000),到内存0x1000000,然后跳转到0x1000000执行
saveenv
执行了saveenv之后,环境变量会第一次保存到flash中,之后你对环境变量的修改,保存都是基于保存在flash中的环境变量的操作。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值