Welcome to the Linux Foundation Forum!

Working with third party fork of linux kernel

First let me say: this is not your problem. It is mine and Xilinx's problem.

The code is here: https://github.com/Xilinx/linux-xlnx

It is based on version 6.1.0 of the official kernel repo.

I'm debugging the displayport output of a Xilinx MPSOC development board (specifically the Avnet UltraZed EV Carrier Board).

The display port out works on boot up once in a while. There are very few messages in dmesg when it doesn't work.

The code I am debugging is custom and written by Xilinx engineers. It is written to be kernel modules, but was by default set to be compiled in.

I changed the code to [M] so I could delay loading it until after boot to help with timing and to make debugging the code easier. (also because I thought there might be a race condition that is handled by the time the system is booted)

Changing to [M]odule required MODULE_LICENSE to be added to three C source codes and around 60 EXPORT_SYMBOL directives to be added.

However, after doing all that the kernel won't compile and because I'm a kernel novice I don't know what's going on. Here are the compiler errors:

  1. LD [M] drivers/gpu/drm/xlnx/zynqmp-dpsub.ko
  2. LD .tmp_vmlinux.kallsyms1
  3. ld: Unexpected GOT/PLT entries detected!
  4. ld: Unexpected run-time procedure linkages detected!
  5. ld: ID map text too big or misaligned
  6. ld: drivers/gpu/drm/display/drm_dp_mst_topology.o: in function `drm_dp_mst_duplicate_state':
  7. /usr/src/linux/drivers/gpu/drm/display/drm_dp_mst_topology.c:4951: undefined reference to `__drm_atomic_helper_private_obj_duplicate_state'
  8. ld: drivers/gpu/drm/display/drm_dp_mst_topology.o: in function `drm_dp_delayed_destroy_work':
  9. /usr/src/linux/drivers/gpu/drm/display/drm_dp_mst_topology.c:4937: undefined reference to `drm_kms_helper_hotplug_event'
  10. ld: drivers/gpu/drm/display/drm_dp_mst_topology.o: in function `drm_dp_mst_up_req_work':
  11. /usr/src/linux/drivers/gpu/drm/display/drm_dp_mst_topology.c:3979: undefined reference to `drm_kms_helper_hotplug_event'
  12. ld: drivers/gpu/drm/display/drm_dp_mst_topology.o: in function `drm_dp_mst_link_probe_work':
  13. /usr/src/linux/drivers/gpu/drm/display/drm_dp_mst_topology.c:2689: undefined reference to `drm_kms_helper_hotplug_event'
  14. make[1]: *** [scripts/Makefile.vmlinux:34: vmlinux] Error 1
  15. make: *** [Makefile:1236: vmlinux] Error 2

I have checked and those references are defined in actual headers and in c code. I verified the the .o files have at least the text of those references.

I'm hoping one of you will have mercy on a newb and help me out.

I'm using gcc:

  1. ultrazed ~ # gcc -v
  2. Using built-in specs.
  3. COLLECT_GCC=gcc
  4. COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-unknown-linux-gnu/12/lto-wrapper
  5. Target: aarch64-unknown-linux-gnu
  6. Configured with: /var/tmp/portage/sys-devel/gcc-12.3.1_p20230526/work/gcc-12-20230526/configure --host=aarch64-unknown-linux-gnu --build=aarch64-unknown-linux-gnu --prefix=/usr --bindir=/usr/aarch64-unknown-linux-gnu/gcc-bin/12 --includedir=/usr/lib/gcc/aarch64-unknown-linux-gnu/12/include --datadir=/usr/share/gcc-data/aarch64-unknown-linux-gnu/12 --mandir=/usr/share/gcc-data/aarch64-unknown-linux-gnu/12/man --infodir=/usr/share/gcc-data/aarch64-unknown-linux-gnu/12/info --with-gxx-include-dir=/usr/lib/gcc/aarch64-unknown-linux-gnu/12/include/g++-v12 --with-python-dir=/share/gcc-data/aarch64-unknown-linux-gnu/12/python --enable-languages=c,c++,fortran --enable-obsolete --enable-secureplt --disable-werror --with-system-zlib --enable-nls --without-included-gettext --disable-libunwind-exceptions --enable-checking=release --with-bugurl=https://bugs.gentoo.org/ --with-pkgversion='Gentoo 12.3.1_p20230526 p2' --with-gcc-major-version-only --enable-libstdcxx-time --enable-lto --disable-libstdcxx-pch --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --disable-multilib --disable-fixed-point --enable-libgomp --disable-libssp --disable-libada --disable-cet --disable-systemtap --disable-valgrind-annotations --disable-vtable-verify --disable-libvtv --without-zstd --without-isl --enable-default-pie --enable-default-ssp
  7. Thread model: posix
  8. Supported LTO compression algorithms: zlib
  9. gcc version 12.3.1 20230526 (Gentoo 12.3.1_p20230526 p2)

Answers

  • Posts: 2
    edited July 2023

    So I'm learning more about Kconfig. I think I found an issue related to this.

    The Xilinx GPU driver is using select DRM_KMS_HELPER in it's Kconfig, which is setting DRM_KMS_HELPER=m which causes the Makefile to exclude the very files that are needed.

    1. #
    2. # Modesetting helpers
    3. #
    4.  
    5. drm_kms_helper-y := drm_bridge_connector.o drm_crtc_helper.o \
    6. drm_encoder_slave.o drm_flip_work.o \
    7. drm_probe_helper.o \
    8. drm_plane_helper.o drm_atomic_helper.o \
    9. drm_kms_helper_common.o \
    10. drm_simple_kms_helper.o drm_modeset_helper.o \
    11. drm_gem_atomic_helper.o \
    12. drm_gem_framebuffer_helper.o \
    13. drm_atomic_state_helper.o drm_damage_helper.o \
    14. drm_format_helper.o drm_self_refresh_helper.o drm_rect.o
    15. drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o
    16. drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o
    17. obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o

    I'm trying to figure out how to get DRM_KMS_HELPER=y but google hasn't shown me the light yet.

    Can someone point me the right direction?

    Nevermind I changed Makefile to assign this: drm_kms_helper-($CONFIG_DRM_KMS_HELPER)) and it still generated the same error messages.

Welcome!

It looks like you're new here. Sign in or register to get started.
Sign In

Welcome!

It looks like you're new here. Sign in or register to get started.
Sign In

Categories

Upcoming Training