基于Buildroot的Zedboard平台AXI-GPIO配置与使用问题咨询
问题1:AXI-GPIO模块在Linux中无法识别的解决方法
你的预期是对的:每个AXI-GPIO实例应该对应一个gpiochip设备,所以理论上会出现gpiochip1和gpiochip2。以下是可能的错误点和解决步骤:
1. 检查设备树节点的正确性
确保你添加的AXI-GPIO节点属性完全匹配Vivado设计中的配置,示例正确节点格式如下:
axi_gpio_0: gpio@41200000 { compatible = "xlnx,axi-gpio-1.00.a"; // 匹配你的AXI-GPIO IP版本 reg = <0x41200000 0x10000>; // 地址范围必须和Vivado中分配的一致(从XSA文件查看) interrupt-parent = <&intc>; interrupts = <0 29 4>; // 中断号对应XSA文件中的配置 gpio-controller; #gpio-cells = <2>; xlnx,all-inputs = <0x1>; // 对应你的GPIO0是输入模式 xlnx,gpio-width = <0x1>; // 引脚宽度,你的设计是1路输入 xlnx,is-dual = <0x0>; // 非双通道模式 }; axi_gpio_1: gpio@41210000 { compatible = "xlnx,axi-gpio-1.00.a"; reg = <0x41210000 0x10000>; interrupt-parent = <&intc>; interrupts = <0 30 4>; gpio-controller; #gpio-cells = <2>; xlnx,all-outputs = <0x1>; // 对应你的GPIO1是输出模式 xlnx,gpio-width = <0x1>; xlnx,is-dual = <0x0>; };
重点核对:
reg的地址和长度必须与Vivado导出的XSA文件中AXI-GPIO的地址空间一致compatible字符串的版本号要匹配你的IP核版本xlnx,all-inputs/xlnx,all-outputs要对应你的GPIO方向配置
2. 确认内核已开启AXI-GPIO驱动
在Buildroot中执行make linux-menuconfig,进入内核配置界面:
- 找到
Device Drivers -> GPIO Support -> Xilinx GPIO support - 确保该选项被设为内置(
=y)或模块(=m),如果是模块,启动后需手动加载xilinx_gpio模块(insmod xilinx_gpio.ko)
3. 验证设备树编译与加载
- 修改DTS后,执行
make重新编译Buildroot,确保output/images/zynq-zed.dtb是修改后的版本 - 启动板卡后,通过串口日志搜索
xlnx,axi-gpio,如果看到类似gpiochip1: registered GPIOs 32-32的日志,说明内核已识别设备;如果没有,说明设备树未被正确加载或节点配置有误
4. 排查地址冲突
检查Vivado设计中AXI-GPIO的地址范围是否与PS端其他外设(如以太网、UART)重叠,确保地址空间分配唯一
问题2:添加PL设计后以太网失效的解决方法
以太网失效的核心原因是PL设计或FSBL配置破坏了PS端以太网外设的MIO引脚、时钟或复位配置,解决步骤如下:
1. 检查MIO引脚配置
在Vivado中打开你的PL+PS设计:
- 进入PS的MIO配置界面,确保以太网对应的MIO引脚(Zedboard以太网使用MIO16-MIO27)未被PL占用,且配置为以太网功能
- 禁止将以太网MIO引脚复用为PL的EMIO或其他功能
2. 验证时钟与复位配置
- 确保PS端以太网所需的GT时钟未被PL设计修改或干扰,时钟树配置需保留以太网外设的时钟路径
- 检查PL设计中的复位信号是否影响PS端以太网外设的正常工作
3. 重新生成FSBL与XSA文件
- 确保XSA文件包含完整的PS外设配置(未禁用以太网控制器)
- 基于最新的XSA文件重新生成FSBL,保证FSBL能正确配置PS的MIO、时钟等参数
4. 调试串口日志
启动板卡后,搜索串口日志中的以太网相关信息,比如eth0、PHY关键字,若出现could not get PHY id等错误,说明MIO引脚配置错误;若出现时钟初始化失败,说明时钟配置被破坏
内容的提问来源于stack exchange,提问作者Amir
相关产品推荐
相关产品推荐

