u-boot中网络命令 ---- dhcp命令

[u-boot:  v2012.04]   

[Author: Bo Shen <voice.shen@gmail.com>]


在平时使用u-boot通过网络下载linux内核,我们的通常做法是手动设置serverip,ipaddr,然后通tftpboot命令把linux内核下载到指定地址,最后通过bootm命令来启动linux内核。

其实,这一切都可以通过u-boot自带的dhcp命令来实现。需要在configure文件中加入CONFIG_CMD_DHCP。此命令的具体实现在<common/cmd_net.c>与<net/bootp.c>。

dhcp的命令用法如下:

dhcp [loadAddress] [[hostIPaddr:]bootfilename]

例:dhcp 0x20000000 192.168.1.10:uImage

使用这条命令,就不需要设置serverip,ipaddr,以及gateway(如果跨网段)了。

当dhcp成功从dhcp服务器上面拿到ip地址后,其就会从192.168.1.10地址,以tftp的方式获取uImage文件。

但是,使用这条命令有一个需要注意的地方,如果dhcp服务器ACK包中含有bootfilename,则此条命令将会执行失败。

serverip会使用dhcp服务的ip地址,bootfilename使用dhcp服务器返回的命令。

故认为这个是一个bug。请参考下面patch去解决这个问题。

http://article.gmane.org/gmane.comp.boot-loaders.u-boot/130743

------------------------------------------------------------------------------

when using dhcp command with parameters as usage message,
if DHCP server response contains bootfilename, it will overwrite
the dhcp command parameters. So the dhcp command parameters
can not be used.
Using this patch to fix it.
Signed-off-by: Bo Shen <voice.shen <at> gmail.com>
---
 common/cmd_net.c |    1 +
 net/bootp.c      |    3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)


diff --git a/common/cmd_net.c b/common/cmd_net.c
index 65f32bc..9b1e650 100644
--- a/common/cmd_net.c
+++ b/common/cmd_net.c
@@ -221,6 +221,7 @@ static int netboot_common(enum proto_t proto, cmd_tbl_t *cmdtp, int argc,

 case 3:load_addr = simple_strtoul(argv[1], NULL, 16);
  copy_filename (BootFile, argv[2], sizeof(BootFile));
+ setenv ("bootfile", BootFile);

  break;

diff --git a/net/bootp.c b/net/bootp.c
index 9e32476..df9f5eb 100644
--- a/net/bootp.c
+++ b/net/bootp.c
@@ -116,7 +116,8 @@ static void BootpCopyNetParams(Bootp_t *bp)
  memcpy (NetServerEther, ((Ethernet_t *)NetRxPacket)->et_src, 6);
 #endif
  if (strlen(bp->bp_file) > 0)
- copy_filename (BootFile, bp->bp_file, sizeof(BootFile));
+ if (!getenv("bootfile"))
+ copy_filename (BootFile, bp->bp_file, sizeof(BootFile));

  debug("Bootfile: %s\n", BootFile);

-- 
1.7.9.5

------------------------------------------------------------------------------

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值