在调试V4L2过程中需要用网络传输文件,将添加网络功能的过程记录在此。这里以ZYNQ为例。
首先需要在VIVADO中勾选以太网如下,
注意这里不要忘记勾选MDIO,需要通过这个接口与PHY芯片进行通信。
完成了硬件搭建并生成了BIT文件之后,用XILINX SDK生成设备树文件。打开SDK后点击,Xilinx -> Repositories后如下,
将XILINX提供的设备树包路径添加到上面,然后点击OK。完成后点击File -> New -> Board Support Package如下,
选中device tree,点击Finish。
生成完设备树文件后,我们重点关注下pcw.dtsi中gem0如下,
&gem0 {
phy-mode = "rgmii-id";
status = "okay";
xlnx,ptp-enet-clock = <0x69f6bcb>;
};
phy-mode指定了SOC和PHY进行数据交互的接口;status变为了okay,因为我们在VIVADO中激活了网口;xlnx,ptp-enet-clock作用未知,不用管它,不影响使用。
除此之外,我们还需要在system-top.dts中添加如下内容,
&gem0 {
phy-handle = <&phy0>;
local-mac-address = [00 0a 35 00 1e 53];
phy0:phy@1 {
device_type = "ethernet-phy";
reg = <0x1>;
};
};
local-mac-address是MAC地址;phy-handle是指定与其连接的PHY芯片的设备节点,这个节点就是它的子节点phy0,该节点中device_type用来指定设备类型,固定为"ethernet-phy";reg用来给出PHY芯片的地址,我用的PHY是RTL8211E,其地址为0x1,不同的PHY芯片地址可能不同。这里可能会有一个疑问,在PHY节点中并没有compatible属性,用来指定与其对应的驱动代码,我猜测,可能通过MDIO接口读取PHY芯片中的寄存器就可以知道其型号和厂家,并调用不同的PHY驱动代码。
完成设备树的编辑后,在内核代码中的xilinx_zynq_defconfig中查看相应的PHY是否勾选上,比如我用的REALTEK公司的PHY,就需要确保如下配置被勾选,
CONFIG_REALTEK_PHY=y
完成后,进行编译,然后运行,可以在开机的打印信息中看到如下内容,
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 28 (00:0a:35:00:1e:53)
RTL8211E Gigabit Ethernet e000b000.ethernet-ffffffff:01: attached PHY driver [RTL8211E Gigabit Ethernet]
说明内核通过MDIO接口读出了芯片型号。
开机后可以通过ifconfig配置网络如下,
ifconfig eth0 192.168.10.5 netmask 255.255.255.0
然后用ifconfig -a查看是否配置成功,并可以通过ping看看和电脑是否能通,这里可能需要先关闭防火墙再ping。
接下来用tftp传输文件,打开tftp64,将current direcrory路径改为与ZYNQ进行通信的目录,也就是说,要发送给ZYNQ的文件需要拷贝到这里,从ZYNQ接收的文件也会存在这里。如果想把文件传给ZYNQ,就在终端输入如下内容,
tftp -g -l b.txt -r a.txt 192.168.10.7
上面的意思是将电脑端的a.txt传给ZYNQ并命名为b.txt,后面跟的是电脑端ip地址。如果想上传文件给电脑端,就在终端输入如下内容,
tftp -p -r b.txt -l a.txt 192.168.10.7
上面的意思是将ZYNQ端的a.txt传给电脑端并命名为b.txt。