欢迎加入QQ讨论群258996829
麦子学院 头像
苹果6袋
6
麦子学院

详解uboot之netconsole

发布时间:2016-07-08 15:52  回复:0  查看:3224   最后回复:2016-07-08 15:52  
最近发现uboot下一个很有意思也很实用的功能:netconsole,uboot下的netconsole类似于kernel下的telnet等网络终端功能,将网络作为输入输出的终端,这样就便于我们在PC端通过网络登录设备uboot中运行命令(更准确的说是通过网络向uboot发送命令和接收uboot的反馈信息,netconsole没有登录检查)。 这里给大家写一个 uboot学习教程,帮助大家理解。
kernel下也有netconsole机制,不过由于内核下的console只有write功能(因为内核启动是没有交互的,只有输出信息),因此kernel下netconsole机制其实就是向内核注册提供网络发送数据功能的console_device,具体实现代码在drivers/net/netconsole.c中。 
uboot下的netconsole实现类似于内核,也是向uboot下的console子系统注册新的设备。  
uboot下netconsole的实现在drivers/net/netconsole.c中,大体原理是在drv_nc_init中向uboot下注册stdio_dev设备,其实就是将其加入到uboot中stdio_dev链表中。stdio_dev中实现了读写函数,函数中则实现了向网络中发送数据以及从网络中接收数据。根据之前分析uboot下console实现原理的文章,uboot下默认的console是stdio_dev链表的第一个设备,stdio_init中调用drv_nc_init之前会调用drv_system_init和serial_stdio_init注册了串口的一些stdio设备。因此netconsole不是uboot的默认console。我们可以通过set命令进行设置。
netconsole的使用方法如下: 
1 在uboot的配置头文件中加入netconsole支持,#define CONFIG_NETCONSOLE,重编uboot 
2 启动uboot后首先设备netconsole的服务器ip,set ncip serverip。然后修改uboot下的默认输入输出console,set stdin nc;set stdout nc。uboot进入netonsole模式,此时串口控制台就没有输出了。 
3 在PC端命令行下使用nc命令发送命令和接收uboot输出(uboot下netconsole的默认接收和发送端口都是6666) 
(1)对于windows电脑,运行start /b nc -lup 6666;nc -u 设备ip 6666 
(2)对于linux电脑,运行nc -lup 6666 &;nc -u 设备ip 6666 
之后我们就可以在PC端运行uboot命令了。
uboot下的netconsole可以用来远程执行命令,我们也可以将其与uboot提供的tftpserver功能结合,由PC端程序控制,实现uboot的一个在线升级功能。
原文来自:C博客/kerneler_
您还未登录,请先登录

热门帖子

最新帖子