当前位置:首页>Linux>如何在嵌入式Linux系统中添加对LAN9512的驱动支持

如何在嵌入式Linux系统中添加对LAN9512的驱动支持

  • 2026-09-02 19:10:55
如何在嵌入式Linux系统中添加对LAN9512的驱动支持

@

  • 在嵌入式Linux系统中添加对LAN9512的驱动支持
    • 在Linux内核中添加LAN9512驱动的支持
    • 查看Linux内核中关于LAN951x驱动设备树DTS绑定的指导文档
    • 在目标板设备树描述文件中添加LAN9512驱动的支持
  • 检查LAN9512设备的工作
    • 查看Linux内核启动信息

本文将基于Microchip SAMA5D2 Xplained开发板,详细介绍如何为嵌入式Linux系统添加对Microchip LAN951x - USB转以太网芯片的支持。

记得关注、点赞与收藏

在嵌入式Linux系统中添加对LAN9512的驱动支持

在Linux内核中添加LAN9512驱动的支持

make menuconfig -> Device Drivers -> Network device support -> USB Network Adapters -> Multi-purpose USB Networking Framework -> SMSC LAN95XX based USB 2.0 10/100 ethernet devices,保存并退出配置

查看Linux内核中关于LAN951x驱动设备树DTS绑定的指导文档

在Linux-5.10内核的Documents下,关于device tree绑定的帮助文档并没有LAN951x的相关文档,但是在稍后的内核版本中,可以找到相关的指导文档。

我们打开smsc95xx.c驱动源码文件,找到关于LAN9512/14的对应的vendor id和product id,如下图红框所标注部分。

在目标板设备树描述文件中添加LAN9512驱动的支持

我们打将在SAMA5D27这颗处理器的USB端口1中,添加对LAN9512的支持,打开对应的设备树文件,找到对应的USB端口描述,添加红框所示的部分。

#address-cells = <1>;#size-cells = <0>;/* The hub port where LAN951x is connected */ethernet@1 { compatible = "usb424,ec00"; /* Microchip LAN951x */ reg = <1>;     /* USB port number */ /* Optional: assign a fixed MAC address */local-mac-address = [56 13 27 94 ac 82];};
  • 修改保存并重新编译生成新的dtb文件,在Microchip MPU开发中,需要将dtb文件和其他内核等文件一起进行打包生成新的itb文件,具体操作过程可以参考过去发的一些文章。

检查LAN9512设备的工作

查看Linux内核启动信息

将LAN9512的评估板通过USB接到SAMA5D27 USB端口1,并重新给系统上电,可以看到USB端口已经识别到LAN9512的设备信息。

usb 1-2.1: new high-speed USB device number 3 using atmel-ehciusb 1-2.1: New USB device found, idVendor=0424, idProduct=ec00, bcdDevice= 2.00usb 1-2.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0smsc95xx v2.0.0EXT4-fs (mmcblk1p2): re-mounted. Opts: (null)libphy: smsc95xx-mdiobus: probedsmsc95xx 1-2.1:1.0 eth0: register 'smsc95xx' at usb-500000.ehci-2.1, smsc95xx USB 2.0 Ethernet, 3a:02:ad:2d:56:7a

将LAN9512评估板上的扩展网口接交换机芯片,可以看到看到网络链接已经link up,表示与交换机建立起物理连接。

Starting network: udhcpc: started, v1.33.1SMSC LAN8700 usb-001:003:01: attached PHY driver [SMSC LAN8700] (mii_bus:phy_addr=usb-001:003:01, irq=POLL)smsc95xx 1-2.1:1.0 eth0: hardware isn't capable of remote wakeupsmsc95xx 1-2.1:1.0 eth0: Link is Downudhcpc: sending discoversmsc95xx 1-2.1:1.0 eth0: Link is Up - 100Mbps/Full - flow control offIPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

查看LAN9512的网络信息。

# ifconfig eth0eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500        inet 192.168.1.101  netmask 255.255.255.0  broadcast 255.255.255.255        inet6 fe80::fc3c:77ff:fe4a:ec63  prefixlen 64  scopeid 0x20<link>        ether fe:3c:77:4a:ec:63  txqueuelen 1000  (Ethernet)        RX packets 503  bytes 28907 (28.2 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 2724  bytes 226356 (221.0 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

最后我们可以查看下USB 1端口的中断统计计数。

# cat /proc/interrupts | grep -E "ehci|ohci|usb" 18:          0  atmel-aic5  42 Level     atmel_usba_udc 19:     144694  atmel-aic5  41 Level     ehci_hcd:usb1, ohci_hcd:usb2 80:          0      GPIO  31 Edge      atmel_usba_udc

最新文章

随机文章