edj*_*edj 4 linux mac-address u-boot
我的公司构建的定制硬件数量如此之少,以至于购买一整块 MAC 地址在经济上没有意义。如果有的话,我可以将什么芯片设计到我的嵌入式 Linux 板中,以便在启动时自动分配一个全球唯一的 MAC 地址?
我已经搜索了对 MAC 芯片和 EUI-48 芯片的 Linux 和 u-boot 驱动程序支持,但结果是空的。MicroChip 部件号 24AA02E48 是一个 I2C 芯片,它拥有一个适合作为 MAC 地址的 EUI-48 地址。还有 DS2502-48,一个串行 1-wire 芯片,我们以前通过编写一个单独的 u-boot 应用程序来读取它的 MAC 地址,并将其分配给 U-Boot ethaddr 环境变量,但这是一个手册我想消除的步骤。1-wire 时间太紧以至于 u-boot 应用程序有时无法正确读取 MAC 地址,因此我们从未完全自动化该过程。
是否有任何 Linux 或 u-boot 驱动程序可以配置为在启动时自动读取 MAC 地址芯片?
据我所知,你根本不需要芯片。MAC 标准允许您生成“本地管理”MAC 地址,该地址不能保证全局唯一性。对于像您这样的小型制造商来说,这几乎总是足够好的,这就是标准允许的原因。
只要确保在选择数字时遵循这些标准,例如将 U/L 位设置为“1”以保证它不能匹配注册地址(U/L 位 ==“0”)。生成有效本地 MAC 地址的“tl;dr”方式是使前三对“02:00:00:”和后三对随机十六进制数字;但如果您正在构建硬件,我建议您花时间阅读标准或至少阅读维基百科页面。
如果在伪随机数字中发生巧合冲突,请尽可能为客户提供更改默认 MAC 选择的方法。即使你有注册地址,让客户更改它仍然是好的。有时,管理员会以更轻松的方式调整 MAC,使路由和/或负载平衡更容易,而且有时他们需要避开认为可以硬编码“00:00:00:00:00:”的人生成的 MAC: 00" 或选择 12 个随机十六进制数字。
至于从 Linux 驱动程序或 U-Boot 读取 MAC,我不了解您的设备,但我发现使用 U-Boot 最容易,因为它在较低级别工作。U-Boot 将它找到的 MAC 存储在环境变量“ethaddr”、“eth1addr”和“eth2addr”中。命令“printenv”是查看它们的一种方式。下面是一个刚好在我面前的董事会的例子:
U-Boot# printenv ethaddr eth1addr eth2addr
ethaddr=98:5d:ad:43:dd:38
eth1addr=98:5d:ad:43:dd:3a
## Error: "eth2addr" not defined
Run Code Online (Sandbox Code Playgroud)
U-Boot 命令“bdinfo”也可能有用。再次从我面前的董事会:
U-Boot# bdinfo
arch_number = 0x0000106E
boot_params = 0x80000100
DRAM bank = 0x00000000
-> start = 0x80000000
-> size = 0x20000000
eth0name = cpsw
ethaddr = 98:5d:ad:43:dd:38
current eth = cpsw
ip_addr = <NULL>
baudrate = 115200 bps
TLB addr = 0x9FFF0000
relocaddr = 0x9F753000
reloc off = 0x1EF53000
irq_sp = 0x9F332F38
sp start = 0x9F332F28
Run Code Online (Sandbox Code Playgroud)
U-Boot 甚至包括一个可选的“gen_eth_addr”工具来生成有效的本地管理地址。这是一个使用示例,摘自他们的 wiki 页面:https : //www.denx.de/wiki/DULG/WhereCanIGetAValidMACAddress
$ make tools/gen_eth_addr
cc tools/gen_eth_addr.c -o tools/gen_eth_addr
$ tools/gen_eth_addr
ba:d0:4a:9c:4e:ce
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5987 次 |
| 最近记录: |