基于TFTP方式加载启动Linux内核

 

 

 

 

一、软硬件平台

 

 

1、开发板:创龙AM3359核心板,网口采用RMII形式。

 

2、UBOOT版本:U-Boot-2016.05,采用FDT和DM。

 

3、交换芯片MARVELL的88E6321.

 

二、问题背景

  

    已经基于创龙的3359核心板资料以及UBOOT-2016.05完成了UBOOT的二次开发,实现了网口驱动,在UBOOT命令行中已经能够PING PC,在UBOOT中网口功能正常。

因为Linux下需重点修改调试网口驱动。所以网口暂时不可用,现在准备使SD卡启动UBOOT,加载设备树文件,内核,文件系统。这样做必须多次插拔SD卡,效率低。

想使用SD卡启动后,在命令行中设置通过TFTP启动内核和设备树文件,但还是通过SD卡挂载文件系统(因为NFS不可用),研究具体操作如下

 

三、准备工作

1、在Linux虚拟机上安装好TFTP环境;

2、开发板可以PING通虚拟机。

四、具体步骤

1、 启动开发板

2、 在UBOOT命令行中停住

3、 测试PING通虚拟机

4、 设置如下环境变量

setenv ipaddr 192.168.1.30

setenv serverip 192.168.1.50(Linux虚拟机地址)

setenv loadimage  tftp  0x82000000  zImage

saveenv

reset

五、分析

     使用以上步骤就可以实现从SD卡启动UBOOT,从TFTP加载内核,从SD卡相应分区加载设备树文件,从SD卡相应分区挂接文件系统。启动内核。

     具体看下以下启动参数及环境变量:

/*SD卡启动时,先扫描SD卡是否插入,若检测到SD卡已经插入,则加载SD卡boot分区中的u-boot.img以及zImage内核镜像。加载完成后,运行run args_mmc,加载rootfs分区文件系统,以及设置控制台参数,加载完成后,运行bootz进行从SD卡启动。*/

mmcboot=mmc dev ${mmcdev}; if mmc rescan; then echo SD/MMC found on device ${mmcdev};run envboot; if run loadimage; then run mmcloados;fi;fi;

 

可以看到我们修改了loadimage环境变量,即使用了TFTP方式加载了内核。

同理。可以修改设备树文件的加载方式(loadfdt环境变量)。

 

 

若要恢复为默认的环境变量,在命令行下输入:

U-Boot> env default -a

U-Boot> saveenv

 

posted on 2019-03-23 14:59  lh03061238  阅读(806)  评论(0编辑  收藏  举报

导航