1. ZYNQ+linux网口调试笔记(3)PL-ETH
在ZYNQ上使用gigE Vision协议的网络接口相机。
第一步:调通PS侧网口GEM0(Xilinx BSP默认配好)。
第二步:调通PS侧网口GEM1(见前一篇文档:开发笔记(1))。
第三步:调通PL侧网口(本文阐述)。
第四步:在PL侧网口上验证Jumbo Frame特性,并在应用层适配gigE Vision协议。
根据《xapp1082》可知,PL侧的PHY支持1000Base-X和SGMII两种配置,这两种配置对应两种不同的PHY引脚接口(连接到MAC)。而我们的hdf文件使用的是1000Base-X的配置。
关于网口的Linux驱动,我们在官网找到一份资料: Xilinx Wiki - Zynq PL Ethernet 。资料很长,我们只看与我们相关的2.4.1 PL Ethernet BSP installation for 1000Base-X”这一章节就可以了。
首先导入FPGA设计同事提供的hdf文件:
在弹出的图形界面里,进入Subsystem AUTO Hardware Settings——Ethernet Settings——Primary Ethernet,确认可以看到PL侧网络设备axi_ethernet_0,说明hdf文件里已包含了必要的网口硬件信息:
上图中被选中的网口将成为Linux上的设备eth0。这里我们默认选择ps7_ethernet_0,即使用GEM0作为首选网口。
启用Xilinx AXI Ethernet驱动
进入Device Drivers -- Network device support – 选中Xilinx AXI Ethernet(以及Xilinx Ethernet GEM,这是PS侧网口的驱动)
进入Networking support – 选中 Random ethaddr if unset
进入Device Drivers -- Network device support -- PHY Device support and infrastructure – 启用Drivers for xilinx PHYs
进入~~~~Device Drivers -- DMA Engine Support -– 禁用~~~~Xilinx AXI DMAS Engine~~~ (对应的配置项名为 ~~ CONFIG_XILINX_DMA ~~~)
注意: Xilinx Wiki里对设备树节点的引用有误(&axi_ethernet),导致编译报错,应改为&axi_ethernet_0。
注:PL-ETH驱动所在路径:<project>/build/tmp/work-shared/plnx_arm/kernel-source/drivers/net/ethernet/xilinx/xilinx_axienet_main.c和xilinx_axienet_mdio.c。对应的内核配置项为CONFIG_NET_VENDOR_XILINX和CONFIG_XILINX_AXI_EMAC。
启用ethtool和tcpmp(调试用,非必须):
然后将生成的BOOT.BIN和image.ub拷贝到SD卡根目录下,将SD卡插入板子上,上电运行。
上电后,使用ifconfig eth1查看网口信息,观察MAC地址与设置的一致,且ifconfig eth1 192.168.1.11 up没有报错。
测试网络通路:ping PC是通的。说明网口工作正常。
Linux下eth1(即PL-ETH)的MAC地址有误
问题描述:
开机打印:
注意:
MAC地址是错的,驱动里解析出的是GEM0的MAC地址。
试验发现,即使在system-user.dtsi里不写local-mac-address,也照样解析出的是GEM0的MAC。
而将system-user.dtsi里的local-mac-address改名为pl-mac-address,并将驱动里解析的字符串也对应更改为pl-mac-address,则可以正确解析出来:
Passing MAC address to kernel via Device Tree Blob and U-Boot:
http://zedboard.org/content/passing-mac-address-kernel-device-tree-blob
通过更改u-boot环境变量和设备树,为每个板子设置一个独特的MAC地址:
https://www.xilinx.com/support/answers/53476.html
U-Boot里的环境变量ethaddr会覆盖掉设备树里pl-eth的local-mac-addr字段,从而影响Linux启动后的网卡MAC地址;
但U-Boot里的环境变量ipaddr不会对Linux启动后的配置产生任何影响。因为设备树里根本就没有关于IP地址的配置。
phy-mode怎么会是sgmii?查了下官方的提供的BSP里,也是“sgmii”。说明这个没问题。具体原因不清楚。
@TODO: 设备树里的中断号的顺序如何影响功能?
为何读出来的IRQ号不对呢?这是因为这里读到的不是硬件的中断号,而是经过系统映射之后的软件IRQ number。两者不具有线性关系。
关于中断号的疑问:
Linux上的网口eth0、eth1的顺序,似乎是按照phy地址从小到大来排布的。
Xilinx xapp1082-zynq-eth.pdf (v5.0) July 16, 2018
https://www.xilinx.com/support/documentation/application_notes/xapp1082-zynq-eth.pdf
Xilinx Wiki - Zynq PL Ethernet:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841633/Zynq+PL+Ethernet
Xilinx Wiki - Linux Drivers:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841873/Linux+Drivers
Xilinx Wiki - Linux Drivers - Macb Driver:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver
Xilinx Wiki - Zynq Ethernet Performance:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841743/Zynq+Ethernet+Performance
查到关于Jumbo frame MTU的定义,当前值为9000,可否改大一些?
驱动源码里关于jumbo frame的说明:
设置MTU为9000,发现ping包最大长度只能设为ping 192.168.1.10 -s 1472
https://lore.kernel.org/patchwork/patch/939535/
【完】
2. 如何用linux建立eth1
cp ifcfg-eth0 ifcfg-eth1
然后 vi ifcfg-eth1
按照 里面的 参数 设置 就可以
最简单 方法 如果你有 安装upset
用upset吧
3. 新安装的Linux系统,没有eth0
1、用ifconfig eth0 up命令开启下网卡。
#ifconfig eth0 up
2、更改eth0配置:
#vi/etc/sysconfig/network-scripts/ifcfg-eth0下显示:
DEVICE=eth0
ONBOOT=no //开机启动网卡
BOOTPROTO=static
IPADDR=192.168.1.8 //自己设置有效ip地址
NETMASK=255.255.255.0 //子网掩码
GATEWAY=192.168.1.1 //有效网关地址
HWADDR=00:0C:29:96:38:F8
注意其中的ONBOOT=no将其改为yes,网卡激活。
3、重启服务。
#service network restart
重启后配置生效。
4. linux配置中eth0和eth1做什么用的
都是上网用的,只是名称不同。
eth0,eht1相当于windows的本地连接1本地连接2,就是告诉你现在又两块网卡,一块叫eth0,另一块叫eth1。
例如:
目录etc/sysconfig/network-scripts下面,ifcfg-eth0就代表eth0的配置,把文件改成了eth1,文件内容做下修改, 那就是eth1了。
当然,这种配置方法并不适用于所有的linux系统,但对RHEL是适用的。
使用注意事项
子网卡在这里并不是实际上的网络接口设备,但是可以作为网络接口在系统中出现,如eth0:1、eth1:2这种网络接口。它们必须要依赖于物理网卡,虽然可以与物理网卡的网络接口同时在系统中存在并使用不同的IP地址,而且也拥有它们自己的网络接口配置文件。但是当所依赖的物理网卡不启用时(Down状态)这些子网卡也将一同不能工作。
如果将一个物理网卡通过vconfig命令添加到多个VLAN当中去的话,就会有多个VLAN虚拟网卡出现,他们的信息以及相关的VLAN信息都是保存在/proc/net/vlan/config这个临时文件中的,而没有独自的配置文件。它们的网络接口名是eth0.1、eth1.2这种名字。
5. 如何在Linux中为eth0增加一个路由
Linux下网卡命名规律:eth0,eth1。第一块以太网卡,第二块。lo为环回接口,它的IP地址固定为127.0.0.1,掩码8位。它代表你的机器本身。1、ifconfig是查看网卡的信息ifconfig[Interface]Interface是可选项,如果不加此项,则显示系统中所有网卡的信息。如果添加此选项则显示所指定的网卡信息.例如:ifconfigeth0eth0Linkencap:EthernetHWaddr00:0C:29:F3:3B:F2inetaddr:192.168.0.10Bcast:192.168.0.255Mask:255.255.255.:1500Metric:1RXpackets:78errors:0dropped:0overruns:0frame:0TXpackets:104errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:100RXbytes:11679(11.4Kb)TXbytes:14077(13.7Kb)Interrupt:10Baseaddress:0x1080可以看到:第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)第二行:网卡的IP地址、子网、掩码第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节第四、五行:接收、发送数据包情况统计第七行:接收、发送数据字节数统计信息。(1)配置eth0的IP地址,同时激活该设备。#ifconfigeth0192.168.1.10netmask255.255.255.0up(2)配置eth0别名设备eth0:1的IP地址,并添加路由。#ifconfigeth0:1192.168.1.3#routeadd–host192.168.1.3deveth0:1(3)激活设备。#ifconfigeth0:1up(4)禁用设备。#ifconfigeth0:down(5)查看指定的网络接口的配置。#ifconfigeth0(6)查看所有的网络接口配置。#ifconfig2、route命令来配置并查看内核路由表的配置情况例如:(1)添加到主机的路由。#routeadd–host192.168.1.2deveth0:0#routeadd–host10.20.30.148gw10.20.30.40(2)添加到网络的路由。#routeadd–net10.20.30.40netmask255.255.255.248eth0#routeadd–net10.20.30.48netmask255.255.255.248gw10.20.30.41#routeadd–net192.168.1.0/24eth1(3)添加默认网关。#routeadddefaultgw192.168.1.1(4)查看内核路由表的配置。#route(5)删除路由。#routedel–host192.168.1.2deveth0:0#routedel–host10.20.30.148gw10.20.30.40#routedel–net10.20.30.40netmask255.255.255.248eth0#routedel–net10.20.30.48netmask255.255.255.248gw10.20.30.41#routedel–net192.168.1.0/24eth1#routedeldefaultgw192.168.1.1对于1和2两点可使用下面的语句实现:Ifconfigeth0172.16.19.71netmask255.255.255.0Route0.0.0.0gw172.16.19.254Servicenetworkrestart3、traceroute命令显示数据包到达目的主机所经过的路由例如:#traceroute.cn4、ping命令来测试网络的连通性例如:#ping.cn#ping–c4192.168.1.125、netstat命令来显示网络状态信息
6. linux配置中eth0和eth1做什么用的
是一种光纤以太网接口卡,按照以太网通信协议进行信号传输。一般通过光缆与光纤以太网交换机连接。
Eth0和eth1用于区分网卡名。它们的含义与windows本地连接1和本地连接2相同。
这里的子网卡不是一个实用的网络接口,但是它可以作为一个集合接口在系统中闪现,比如eth0:1,eth1:2。
(6)linux同步以太坊扩展阅读:
Linux操作系统嵌入了TCP/IP协议栈,协议软件具有路由转发功能。路由和转发依赖于在主机中安装多个网卡作为路由器。
当某一网卡接收到度包时,系统内核会根据度包的目的IP地址查询路由表,然后根据查询结果将度包发送到另一网卡,最后通过该网卡发送度包。主机的进程是路由器的核心功能。
路由功能是通过修改Linux内核参数来实现的。sysctl命令用于配置和显示/proc/sys目录中的内核参数。
出于安全原因,Linux内核默认禁止数据包路由和转发。在Linux系统中,有临时和永久两种方法启用转发功能。
7. linux怎么配置eth0
eth0和eth1这是网卡设备,只是个名称不必纠结,不是那谁说的一个普通网卡一个无线网卡,他什么都不懂。
通常服务器会有多个网卡的,所以就有eth0 eth1 eth2 这样的名称,
而且在一些系统中对于无线网卡会命名为wlan0 wlan1。。。。
具体的你可以看看目录etc/sysconfig/network-scripts下面,
ifcfg-eth0就代表eth0的配置,你把文件改成了eth1,文件内容做下修改, 那就是eth1了。。
当然,这种配置方法并不适用于所有的linux系统,但对RHEL是适用的。
8. linux 怎么重新载入eth0
临时解决方法一:
使用命令ifconfig eth0 192.168.1.x可以正常设置eth0的IP,该方法仅为临时处理办法,系统重启后即失效了。
永久解决方法二:
1、在/etc/sysconfig/network-scripts/目录下新建ifcfg-eth0文件;
2、正确设置ifcfg-eth0的DEVICE、BOOTPROTO、ONBOOT、IPADDR、GATEWAY、DNS1、DOMAIN、NETMASK、NETWORK、NAME等等,比如:
DEVICE=eth0 物理设备名称
IPADDR=192.168.1.x IP地址
NETMASK=255.255.255.0 子网掩码
NETWORK=192.168.1.0 指定网络,通过IP地址和子网掩码自动计算得到
GATEWAY=192.168.1.1 网关地址
BROADCAST=192.168.1.255 广播地址,通过IP地址和子网掩码自动计算得到
ONBOOT=[yes|no] 引导时是否激活设备
USERCTL=[yes|no] 非ROOT用户是否可以控制该设备
BOOTPROTO=[none|static|bootp|dhcp] 引导时不使用协议|静态分配|BOOTP协议|dhcp协议
HWADDR=00:13:D3:27:9F:80 MAC地址
NAME=eth0 名称
3、经过以上设置,正常情况下是可以成功的,如果仍有问题,在文件/etc/rc.d/rc.local最后加入ifup eth0(/etc/rc.local脚本是在所有其它初始化脚本执行完毕后执行)。
4、重启电脑,OK。
其它网络控制命令:
ifdown eth0、ifconfig eth0 down //关闭网络
ifup eth0、ifconfig eth0 up //开启网络
-------------------------------------------------------
设置DNS 配置文件位置/etc/resolv.conf
-------------------------------------------------------
service network start //启动网络服务
service network stop //停止网络服务
srvice network restart //重启网络服务
service network status //查看网络服务状态
9. linux系统怎么挖以太坊
如何使用Linux系统挖矿,要使用到哈鱼矿工的服务,只需要两步,就可以在Linux系统上挖矿。
打开 网站,输入手机号,选择你要使用多少CPU来挖矿,默认为使用50%的CPU进行挖矿,点击生成你的专属命令并复制
只需要两步,你就可以在Linux系统上挖矿,你所挖的钱只需要到哈鱼矿工网站上,输入你的手机号即可提现。
10. linux双网卡 如何配置实现 eth0与eth1的通信. eth0的IP是10.*.*.* eth1的IP是192.*.*.*
打开本机的路由功能 1.永久打开vim /etc/sysctl.conf 修改参数net.ipv4.ip_forward = 1 sysctl -p
2.临时打开(每次重启机器就不在生效) echo 1 > /proc/sys/net/ipv4/ip_forward
然后互相ping一下试试