博客
关于我
Uboot 网络加载并启动Linux - 基于移植好的网络功能
阅读量:569 次
发布时间:2019-03-07

本文共 1828 字,大约阅读时间需要 6 分钟。

前言

在开发过程中,已经成功实现了DM9621网卡的移植工作。接下来,将重点介绍基于Uboot的网络命令集应用,包括通过tftpboot加载内核和设备树等内容,最后实现通过网络环境加载并启动Linux系统。


使能DM9621网卡

说明

由于DM9621网卡是基于USB接口实现的,因此默认情况下Uboot通信默认是不启用的。为了让网卡正常工作,需要手动启动USB功能并启用DM9621网卡。

步骤

在Uboot Shell中执行以下命令:

u-boot # usb start
u-boot # usb reset

此时会显示类似以下信息:

u-boot # usb start
starting USB...
USB0: USB EHCI 1.00
scanning bus 0 for devices...
1 USB Device(s) found

接着设置相关的环境变量:

u-boot # setenv ethaddr 00:d8:1c:04:55:60
u-boot # saveenv

注意事项:

刚烧录的Uboot环境变量中没有ethaddr,这意味着在启用网卡时会显示如下警告信息:

Warning: dm9601_eth using MAC address from ROM

这属于正常现象,只需手动设置ethaddr环境变量即可,即可完成网卡的合法化设置。


网络命令使用

ping命令

在成功设置网卡功能后,可以通过ping命令验证网络连接状态。以下是示例命令:

u-boot # ping 192.168.1.1
u-boot # ping 192.168.1.141

此时如果能接收回复,说明网络已经正常工作。

tftpboot命令

通过tftpboot命令可以从指定地址的TFTP服务器下载文件。以下是常见使用示例:

u-boot # tftpboot 0x40007000 uImage
u-boot # tftpboot 0x41000000 exynos4412-itop-elite.dtb

注意事项:

tftpboot命令允许将指定文件加载到指定的内存地址中。在本文中,已经完成了对内核文件uImage和设备树文件(exynos4412-itop-elite.dtb)的获取和加载。


网络加载内核

在成功完成tftpboot操作后,只需要通过bootm命令启动内核即可。以下是启动示例:

u-boot # bootm 0x40007000 - 0x41000000

说明:

  • 0x40007000:内核映像的加载地址
  • 0x41000000:设备树blob的加载地址

启动完成后,Linux系统将从指定地址加载并继续运行。


自动加载与引导

为了节省手动操作的繁琐,可以通过设置bootcmd环境变量实现自动化启动。在完成以上操作后,请执行以下命令:

u-boot # setenv bootcmd 'usb start; usb reset; tftpboot 0x40007000 uImage; tftpboot 0x41000000 exynos4412-itop-elite.dtb; bootm 0x40007000 - 0x41000000; boot'
u-boot # saveenv

接着设置bootargs以指定根文件系统和其他启动参数:

u-boot # setenv bootargs root=/dev/mmcblk1p1 rw
u-boot # setenv bootargs rootfstype=ext4

或者如果需要使用NFS挂载根文件系统,则设置如下:

u-boot # setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.140:/home/jason/rootfs ip=192.168.1.141:192.168.1.140:192.168.1.1:255.255.255.0:itop:eth0:off rootfstype=ext4
u-boot # saveenv

完成环境变量设置后,重启系统即可无需手动操作即可完成完整的Linux启动流程。


结语

通过以上步骤,您已经成功实现了基于DM9621网卡的网络加载和系统启动。接下来的开发工作中,可以根据实际需求进一步优化系统性能和功能优化。祝您在技术探索的道路上碰撞出见解!

转载地址:http://kvdjz.baihongyu.com/

你可能感兴趣的文章
Netty中集成Protobuf实现Java对象数据传递
查看>>
Netty工作笔记0006---NIO的Buffer说明
查看>>
Netty工作笔记0011---Channel应用案例2
查看>>
Netty工作笔记0013---Channel应用案例4Copy图片
查看>>
Netty工作笔记0014---Buffer类型化和只读
查看>>
Netty工作笔记0020---Selectionkey在NIO体系
查看>>
Vue踩坑笔记 - 关于vue静态资源引入的问题
查看>>
Netty工作笔记0025---SocketChannel API
查看>>
Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
查看>>
Netty工作笔记0050---Netty核心模块1
查看>>
Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
查看>>
Netty工作笔记0077---handler链调用机制实例4
查看>>
Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
查看>>
Netty常见组件二
查看>>
netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
查看>>
Netty核心模块组件
查看>>
Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
查看>>
Netty源码—2.Reactor线程模型一
查看>>
Netty源码—4.客户端接入流程一
查看>>
Netty源码—4.客户端接入流程二
查看>>