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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址: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部分开始内核调试


<think>我们正在讨论在PetaLinux中配置DRM(Direct Rendering Manager)驱动以设置显示分辨率。DRM是Linux内核中用于管理图形显示的子系统的核心部分,它负责与GPU交互和显示输出。 步骤概述: 1. 确认硬件平台和显示接口(如HDMI、DisplayPort、LVDS等) 2. 在PetaLinux工程中配置内核以启用DRM驱动和相应的显示控制器驱动 3. 配置设备树(Device Tree)以描述显示硬件和所需的分辨率 4. 构建并部署镜像 5. 在系统启动后,使用相关工具验证和调整分辨率 详细步骤: ### 1. 硬件确认 首先,需要确认你的硬件平台使用的显示控制器(如Xilinx的DPU、ZynqMP的DisplayPort控制器等)和显示接口类型。 ### 2. 配置Linux内核PetaLinux工程中,使用`petalinux-config -c kernel`进入内核配置菜单。 确保启用DRM驱动和对应的显示控制器驱动。例如,对于Xilinx ZynqMP平台,需要启用: - `DRM` (在`Device Drivers -> Graphics support -> Direct Rendering Manager`中) - `DRM_XLNX` (Xilinx的DRM驱动) - 根据具体接口选择,例如`DRM_XLNX_DP`(DisplayPort)或`DRM_XLNX_DSI`(MIPI DSI)等。 同时,确保启用相关的子模块,如`DRM_KMS_HELPER`、`FRAMEBUFFER_CONSOLE`等。 ### 3. 配置设备树 在设备树中,需要正确配置显示控制器节点和显示时序(timings)。通常,在`system-user.dtsi`文件中添加或修改节点。 例如,设置DisplayPort输出为1920x1080分辨率(60Hz)的示例: ```dts / { ... display: display@0 { compatible = "xlnx,zynqmp-dpsub-1.7"; reg = <0x0 0xfd4a0000 0x0 0x1000>; interrupts = <0 116 4>; clocks = <&dp_aclk>, <&dp_aud_clk>, <&dp_vtc_pixel_clk_in>; clock-names = "dp_apb_clk", "dp_aud_clk", "dp_vtc_pixel_clk_in"; phys = <&dp_phy>; phy-names = "dp-phy"; xlnx,max-lanes = <2>; port { dp_display_out: endpoint { remote-endpoint = <&dp_connector_in>; }; }; }; dp_connector: connector { compatible = "dp-connector"; type = "displayport"; label = "DP"; port { dp_connector_in: endpoint { remote-endpoint = <&dp_display_out>; }; }; display-timings { native-mode = <&timing0>; timing0: timing0 { clock-frequency = <148500000>; hactive = <1920>; vactive = <1080>; hfront-porch = <88>; hback-porch = <148>; hsync-len = <44>; vfront-porch = <4>; vback-porch = <36>; vsync-len = <5>; hsync-active = <1>; vsync-active = <1>; }; }; }; }; ``` 注意:上述代码仅为示例,具体硬件地址、中断号、时钟等需要根据你的硬件设计进行调整。 ### 4. 构建并部署镜像 配置完成后,使用以下命令构建: ```bash petalinux-build petalinux-package --boot --fsbl <fsbl> --fpga <bitstream> --u-boot ``` 然后部署到目标硬件(如SD卡)。 ### 5. 启动后验证 系统启动后,可以使用以下命令查看当前显示模式: ```bash cat /sys/class/drm/card0-<connector>/modes ``` 其中`<connector>`可能是`DP-1`、`HDMI-A-1`等,具体取决于你的连接器名称。 也可以使用`modetest`工具(需要安装)来测试不同的显示模式。 如果分辨率没有自动设置,可以通过内核命令行参数指定,例如在`/boot/extlinux/extlinux.conf`中添加: ``` video=DP-1:1920x1080@60 ``` 注意:以上步骤需要根据具体的硬件平台和显示接口进行调整。 引用:PetaLinux工具文档[^1],Xilinx Wiki[^2] §§相关问题§§ 1. 如何在PetaLinux中配置多显示器支持? 2. 如何调试DRM驱动显示问题? 3. PetaLinux中如何修改帧缓冲(framebuffer)的分辨率?</think>### PetaLinux中DRM显示分辨率配置指南 在PetaLinux中配置DRM(Direct Rendering Manager)显示分辨率需要以下关键步骤: #### 1. **设备树配置** 在`system-user.dtsi`中添加显示控制器节点和时序参数: ```dts / { display: display@0 { compatible = "xlnx,zynqmp-dpsub-1.7"; reg = <0x0 0xfd4a0000 0x0 0x1000>; clocks = <&dp_aclk>, <&dp_aud_clk>; clock-names = "dp_apb_clk", "dp_aud_clk"; phys = <&dp_phy>; phy-names = "dp-phy"; port { dp_display_out: endpoint { remote-endpoint = <&dp_connector_in>; }; }; }; dp_connector: connector { compatible = "dp-connector"; type = "displayport"; label = "DP"; port { dp_connector_in: endpoint { remote-endpoint = <&dp_display_out>; }; }; display-timings { native-mode = <&timing0>; timing0: 1920x1080 { clock-frequency = <148500000>; // 148.5 MHz hactive = <1920>; vactive = <1080>; hfront-porch = <88>; hback-porch = <148>; hsync-len = <44>; vfront-porch = <4>; vback-porch = <36>; vsync-len = <5>; hsync-active = <1>; vsync-active = <1>; }; }; }; }; ``` > 关键参数说明: > - `clock-frequency`: 像素时钟频率(Hz) > - `hactive/vactive`: 有效像素区域 > - 前后沿参数需参考显示器规格书[^1] #### 2. **内核配置** 启用DRM驱动和相关子系统: ```bash petalinux-config -c kernel ``` 确保启用: ``` Device Drivers -> Graphics support -> [*] Direct Rendering Manager (DRM) [*] DRM Support for Xilinx DisplayPort [*] DRM KMS Helper [*] FBDEV Framebuffer Emulation ``` #### 3. **用户空间工具** 安装DRM调试工具: ```bash echo 'IMAGE_INSTALL:append = " libdrm modetest"' >> project-spec/meta-user/conf/user-rootfsconfig petalinux-config -c rootfs ``` #### 4. **验证分辨率** 启动后使用`modetest`检测: ```bash modetest -M xlnx -s <connector_id>@<crtc_id>:<desired_mode> ``` 示例输出: ``` id encoder status name size (mm) modes encoders 35 34 connected DP-1 480x270 1 34 modes: index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot) 0 1920x1080 60 1920 2008 2052 2200 1080 1084 1089 1125 148500 flags: phsync, pvsync; type: driver ``` #### 5. **常见问题处理 - **无显示输出**:检查物理连接和`dmesg | grep drm`日志 - **分辨率不支持**:验证时序参数是否符合EDID数据[^2] - **色彩异常**:检查PHY配置和色深设置(`bpc = <8>`) #### 6. **高级配置 通过内核参数强制分辨率: ```bash video=DP-1:1920x1080@60 ``` 或动态调整: ```bash echo 1920x1080 > /sys/class/drm/card0-DP-1/modes ``` > 注意:不同硬件平台(Zynq-7000/ZynqMP/Versal)的寄存器地址和时钟配置需参考对应文档[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值