我有一个嵌入式系统,要求我从闪存中提取MAC地址,并在启动时将其传递给以太网接口。传统上我已经在init脚本中修改了对ifconfig的调用,只是将从闪存中取出的MAC作为hw ether
参数传递。
我正在使用的系统使用connman来处理网络连接。嵌入式系统将始终具有单个以太网连接,其中一个匹配的MAC地址采用自定义格式的闪存。 connman用于接口可用时更改,因此有一个动态系统来处理上下接口和配置它是有帮助的。
是否有可能将MAC传递给connman以类似于之前使用ifconfig的方式使用,如果是,如何使用?
或者可以将MAC作为引导参数传递给内核,以便connman永远不必了解这一点?我可以在U-Boot中将MAC拉出闪存,但以太网设备不能用于U-Boot。
答案 0 :(得分:1)
或者可以将MAC作为引导参数传递给内核,以便connman永远不必知道这个吗?
是的,你可以使用U-Boot的ethaddr
环境变量来做到这一点。
查看U-Boot Environment Variables以获取有关变量的文档。
相关文档摘要:
ethaddr:第一个/唯一的以太网接口的以太网MAC地址(在Linux中为= eth0)。 该变量只能设置一次(通常在电路板制造期间)。一旦设置完毕,U-Boot就拒绝删除或覆盖该变量。
可能就像运行以下命令来设置环境变量并保存它一样简单(当然替换你的MAC地址):
setenv ethaddr 11:22:33:44:55:66
saveenv
如果您的U-Boot启动线中尚未使用ethaddr
,那么您需要做的不仅仅是上述操作。有关如何在系统上配置此功能的示例,请查看How to set a fixed MAC address in a LeopardBoard DM36x。
以上网站最终使用的ethaddr
启动命令:
setenv bootcmd 'setenv bootargs \${bootargs} davinci_emac.ethaddr=\${ethaddr}; nboot 0x82000000 0 \${kerneloffset}'