petalinux(二)开启petalinux内核调试模式

本文介绍如何在PetaLinux环境中配置和启用内核调试功能。通过详细步骤说明如何设置必要的选项,包括KERNEL_DEBUG_INFO和KERNEL_DEBUGGING,以实现基于Xilinx SDK的Linux内核模块的调试。

原文地址:http://www.xilinx.com/support/answers/66853.html

描述

要调试基于Xilinx SDK的Linux内核模块,必须使能 KERNEL_DEBUG_INFO和KERNEL_DEBUGGING。这篇博文全面记录了在Petalinux中是如何处理的。

解决方案

获得基于调试模式的petalinux,需要一些特定的配置设定,

有一些特定的配置需要设置为了获取PetaLinux基于内核调试工作。

完整的配置步骤请参考帮助文件:

SDK Help > Xilinx Software Development Kit (SDK) User Guide > Working with Xilinx System Debugger > System Debugger Supported Design Flows > Attach and Debug using Xilinx System Debugger.

下面是配置基于PetaLinux的Linux内核调试模式所涉及到的步骤:

1)创建一个Zynq Vivado和导出模板项目硬件SDK。

2)创建一个Linux应用程序在SDK Hello World示例并关闭SDK项目,继续Petalinux项目下一步。

3)与下面的命令创建一个petalinux项目:

petalinux-create --type project --template <CPU_TYPE> --name <PROJECT_NAME>

4)到petalinux项目目录下,并运行以下命令:

petalinux-config --get-hw-description=<path-to-directory-which-contains-hardwaredescription-file>

指定hw-description的目录,目录中包含hdf文件(< project_name >的sdk目录在您之前创建Vivado项目)


图1 petalinux-config命令打开的Petalinux menuconfig 视图

5)如图2所示,到达Linux Components Selection  ---> and then to kernel (xlnx-4.0)项,选择remote 选项:


图2

6)接下来我们需要指定完整的内核源代码的路径,该路径可以Xilinx GitHub页面找到。

7)定位到Remote linux-kernel settings  ---> Remote linux-kernel git URL子项,复制后面的链接,粘贴到如图3所示文本框:

https://github.com/Xilinx/linux-xlnx


图3

要调试内核,我们需要完整的xlnx-linux源代码选择remote source ,在petalinux项目的配置阶段,将自动从GitHub下载内核镜像到PetaLinux项目中。

8)接下来需要设置一下boot镜像文件的加载地址偏移量。如下图所示,定位到u-boot Configuration  ---> and set the netboot offset,设置boot的引导偏移量为0 x04000000。有关更多信息,请参考(Xilinx Answer 59853)

注:进入Debug模式后,编译出的image文件会变大,将该尺寸设置大一点是为了避免临时引导区溢出。


图4

9)petalinux-config完成后,保存并退出。

10)接下来进行内核配置:

正如PetaLinux tool的SDK帮助中提到的,设置以下选项,:

CONFIG_DEBUG_KERNEL = y

CONFIG_DEBUG_INFO = y

为此:运行petalinux-config - c kernel 打开内核配置界面:


图5选中 Kernel Hacking 项的内核配置面板

11)定位到Kernel Hacking ---> Kernel Debugging,如图6所示,选中该项:


图6 使能内核调试模式的配置界面

12) 接下来,定位到Compile-time checks and compiler options ---> Compile the kernel with debug info,使能该项


图7 使能DEBUG_INFO项

13)保存并退出内核配置。

14)接下来,需要开启TCF agent服务,它在目标板的Linux内核激活,并在内核调试期间,为我们提供将硬件访问服务。

15)在petalinux项目目录下,运行petalinux-config - c rootfs。您将看到如下对话框:


图8

16)定位到 Debugging  ---> build debugable applications,使能该项

接下 定位到Filesystem Packages  ---> base  --->tcf-agent并使能该项

[*]tcf-agent


图9

17)保存并退出根文件配置菜单。

保存并关闭文件后。所有的内核调试的设置完成。如需要更多信息请参考 (Xilinx Answer 61332) 

18)最后,就是到PetaLinux项目根目录,petalinux-build构建PetaLinux项目、采用如下命令,基于zynq_fsbl.elf建立BOOT.bin,生成的文件存放在images/linux目录中:

petalinux-package --boot --fsbl <FSBL image> --fpga <FPGA bitstream> --u-boot < U-boot.elf>

19)接下来就是,遵循SDK Kernel Debugging部分开始内核调试


PetaLinux系统中调试和排查网络接口(如`eth0`)驱动程序问题时,通常涉及多个层面,包括硬件连接、设备树配置、内核驱动、网络配置以及日志分析等。以下是一个系统化的调试流程和方法: ### 3.1 检查网络接口状态与日志信息 在启动系统后,首先确认网络接口是否被正确识别: ```bash ip link show ``` 如果`eth0`存在但无法`up`,可以使用以下命令查看系统日志: ```bash dmesg | grep eth0 ``` 在日志中可能会看到类似如下信息: ``` macb e000b000.ethernet eth0: unable to generate target frequency: 125000000 Hz ``` 该信息表明MAC控制器无法生成期望的时钟频率。这通常与设备树中配置的`phy-mode`、`clock-frequency`或外部PHY芯片的兼容性有关[^1]。 ### 3.2 核对设备树配置 在PetaLinux工程中,设备树(`.dts`)文件定义了网络接口的硬件参数。检查设备树中对应GEM控制器节点的配置是否正确,例如: ```dts &gem0 { status = "okay"; phy-mode = "rgmii-id"; fixed-link { speed = <1000>; full-duplex; }; }; ``` - `phy-mode`应与硬件连接方式匹配(如`mii`、`rmii`、`rgmii`等)。 - 如果使用外部PHY,确保`phy`子节点正确指向PHY地址,并且`phy-mode`设置正确。 - 如果使用固定链接(如直接连接MAC到RGMII接口),则需要配置`fixed-link`属性。 ### 3.3 验证PHY设备识别 系统启动过程中,Linux内核会尝试探测连接的PHY设备。可以通过以下命令确认是否成功识别PHY: ```bash ethtool -p eth0 ``` 如果PHY未被识别,可能是以下原因: - 设备树中未正确配置PHY地址或接口模式。 - 硬件连接错误(如MDIO总线未连接)。 - PHY驱动未加载或不支持特定型号。 查看内核是否加载了对应的PHY驱动: ```bash lsmod | grep phy ``` 常见PHY驱动包括`stmmac`、`at803x`、`micrel`等。 ### 3.4 使用`ethtool`调试网络接口 `ethtool`是调试网络接口的重要工具。可以使用它查看当前接口的链路状态、速率、双工模式等: ```bash ethtool eth0 ``` 如果链路状态为`Link detected: no`,则可能是硬件连接或PHY配置问题。可以尝试手动设置速率和双工模式: ```bash ethtool -s eth0 speed 100 duplex full autoneg off ``` ### 3.5 内核驱动与模块加载 Zynq平台的以太网驱动通常为`stmmac`或`macb`驱动程序。检查驱动是否加载: ```bash lsmod | grep stmmac ``` 如果没有加载,可以尝试手动加载: ```bash modprobe stmmac ``` 如果驱动加载失败,可能需要检查内核配置是否启用了对应驱动(如`CONFIG_STMMAC`、`CONFIG_MACB`等)。 ### 3.6 网络协议栈与IP配置测试 确认网络接口可以正常收发数据包: ```bash ping -I eth0 192.168.1.1 ``` 也可以使用`tcpdump`抓包分析: ```bash tcpdump -i eth0 ``` ### 3.7 日志与调试信息增强 在调试过程中,可以启用内核的网络调试选项以获取更详细的日志信息。在PetaLinux工程中,编辑内核配置: ```bash petalinux-config -c kernel ``` 启用以下选项: - `CONFIG_NET_DEBUG` - `CONFIG_MACB_DEBUG` - `CONFIG_STMMAC_DEBUG` 保存配置后重新编译并部署系统。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值