Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7575195
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 30, 20262026-05-30T16:37:35+00:00 2026-05-30T16:37:35+00:00

I have two kernel modules (say modA and modB). modA exports a symbol with

  • 0

I have two kernel modules (say modA and modB). modA exports a symbol with EXPORT_SYMBOL(symA) and modB uses it. I have the header modA.h for modA:

...
extern void symA(int param);
...

and in modB.c:

#include "modA.h"
...
static int __init modB_init(void)
{
    symA(10);
}
...

If i insmod modB all works fine, my modB is correctly linked in the kernel and the function symA is correctly called. However when i build modB the compiler raises a warning: symA is undefined. An LKM is an ELF relocatable so why the compiler raises this warning? How can be this removed?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-30T16:37:36+00:00Added an answer on May 30, 2026 at 4:37 pm

    This issue (and how to compile correctly in this case) is explained in http://www.kernel.org/doc/Documentation/kbuild/modules.txt

    Sometimes, an external module uses exported symbols from another
    external module. kbuild needs to have full knowledge of all symbols
    to avoid spitting out warnings about undefined symbols. Three
    solutions exist for this situation.

    NOTE: The method with a top-level kbuild file is recommended but may
    be impractical in certain situations.

    Use a top-level kbuild file If you have two modules, foo.ko and
    bar.ko, where foo.ko needs symbols from bar.ko, you can use a
    common top-level kbuild file so both modules are compiled in the
    same build. Consider the following directory layout:

      ./foo/ <= contains foo.ko       ./bar/ <= contains bar.ko
    
      The top-level kbuild file would then look like:
    
      #./Kbuild (or ./Makefile):          obj-y := foo/ bar/
    
      And executing
    
          $ make -C $KDIR M=$PWD
    
      will then do the expected and compile both modules with         full
    

    knowledge of symbols from either module.

    Use an extra Module.symvers file When an external module is built,
    a Module.symvers file is generated containing all exported symbols
    which are not defined in the kernel. To get access to symbols from
    bar.ko, copy the Module.symvers file from the compilation of bar.ko
    to the directory where foo.ko is built. During the module build,
    kbuild will read the Module.symvers file in the directory of the
    external module, and when the build is finished, a new
    Module.symvers file is created containing the sum of all symbols
    defined and not part of the kernel.

    Use “make” variable KBUILD_EXTRA_SYMBOLS If it is impractical to
    copy Module.symvers from another module, you can assign a space
    separated list of files to KBUILD_EXTRA_SYMBOLS in your build file.
    These files will be loaded by modpost during the initialization of
    its symbol tables.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have two Linux kernels with me. One is the Android Linux Kernel and
I have some question about linux-kernel, let's assume that I have two threads in
Situation I have the following Sitecore Lucene config: New index, type=Sitecore.Search.Index, Sitecore.Kernel Contains two
I'm writing a tiny kernel with c++11 and have two instances with the same
Have two folders with approx. 150 java property files. In a shell script, how
I have two applications written in Java that communicate with each other using XML
I have two arrays of animals (for example). $array = array( array( 'id' =>
I have two arrays of System.Data.DataRow objects which I want to compare. The rows
I have two elements: <input a> <input b onclick=...> When b is clicked, I
I have two identical tables and need to copy rows from table to another.

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.