Re: RTAI module: rtai functions undefined

Paolo Mantegazza <[email protected]>
Newsgroups gmane.linux.real-time.rtai
Message-ID <VI1PR06MB147101434B4BF97D25EAE68990A00@VI1PR06MB1471.eurprd06.prod.outlook.com>
First of all, you should complete what you report by typing dmesg after your insmod failure and inform us of the symbols names that are missing, dmesg will print them.

A further suggestion of mine is to download the showroom CVS from gna.org, copying a suitable making script you'll find in the directories of "showroom/v3.x/kernel".

Paolo
________________________________________
From: Rtai [[email protected]] on behalf of Junhong Liu [[email protected]]
Sent: Friday, February 19, 2016 7:21 PM
To: [email protected]
Subject: [Rtai] RTAI module: rtai functions undefined

Hello! I have met problems with building modules.

I am using 3.10.32-rtai on Ubuntu 14.04 LTS.
"#rtai-config --linux-dir" gives: /usr/src/linux;
"# rtai-config --prefix" gives: /usr/realtime;
"#rtai-config --lxrt-cflags" gives: -I. -I/usr/realtime/include -Wall -Wstrict-prototypes -pipe;
"#rtai-config --lxrt-ldflags" gives: -L/usr/realtime/lib -llxrt -lpthread;
"#rtai-config --module-cflags" gives: -I. -I/usr/realtime/include -D_FORTIFY_SOURCE= -ffast-math -mhard-float;
"#rtai-config --module-cxxflags" gives: -I. -I/usr/realtime/include -fno-rtti -fno-exceptions -fno-strength-reduce -pipe -fno-use-cxa-atexit -D_FORTIFY_SOURCE=0 -ffast-math -mhard-float;

Files "rtProcess.c" and "Makefile" are in directory "/home/huapeng/Yritys/RT/E1_Kern".

1. "rtProcess.c" is very short after minimization:

// ------ rtProcess.c ----- define MODULE

#include <linux/kernel.h> /* Needed for KERN_INFO */
#include <linux/module.h>  /*Needed by all modules*/
#include <linux/moduleparam.h>
#include <linux/init.h> /* Needed for the macros */
#include <linux/stat.h>
#include <linux/proc_fs.h>
#include <linux/stringify.h>
#include <asm/io.h>
#include <linux/errno.h>   /*EINVAL, ENOMEN*/

/* The following header files required to make use of RTAI: give us
access to the functions and data structues within RTAI */
#include <asm/rtai.h> // RTAI configuration switches
#include <rtai_sched.h>
#include <rtai_sem.h>  // RTAI semaphores
#include <rtai_fifos.h>
#include <rtai_proc_fs.h>

MODULE_LICENSE("GPL");

#define TICK_PERIOD 1000000
#define TASK_PRIORITY 1
#define STACK_SIZE 1024
#define FIFO 0
#define PI 3.1415

RT_TASK rt_task; // define rtai task
int counter;

 int rtprocess_init(void) // entry point
{
    int retval;
    retval =1;
    // ---1---
    rt_set_oneshot_mode();
    start_rt_timer(1); // the execution starts
    // ---1---
    printk("Hello in INIT!\n");

    return 0;
}

 void rtprocess_exit(void)
{
     // ---2---
    stop_rt_timer(); rt_busy_sleep(10000000);
    // ---2---

    printk("Goodbye and EXIT!---!\n");
    return;
}

module_init(rtprocess_init);
module_exit(rtprocess_exit);

2. The file "Makefile":
# Makefile
EXTRA_CFLAGS += -I/usr/realtime/include   \
        -D__IN_RTAI__

KBUILD_EXTRA_SYMBOLS := $(shell rtai-config --prefix)/modules/Module.sysmvers

# To build modules outside of the kernel tree, we run "make"
# in the kernel source tree; the Makefile these then includes this
# Makefile once again.
# This conditional selects whether we are being included from the
# kernel Makefile or not.
ifeq ($(KERNELRELEASE),)

    # Assume the source tree is where the running kernel was built
    # You should set KERNELDIR in the environment if it's elsewhere
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    # The current directory is passed to sub-makes as argument
    PWD := $(shell pwd)

modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

.PHONY: modules modules_install clean

else
    # called from kernel build system: just declare what our modules are
    obj-m := rtProcess.o

endif

3. If there is no rtai-related functions, everything went fine, as explained in the following
3.1 While commenting all the lines between the "---1---" and "---2---", there is no rtai-related function.
I did the make,  at
 "root@huapeng-GA-990XA-UD3:/home/huapeng/Yritys/RT/E1_Kern# make",
 everything went fine, and the following message came:

make -C /lib/modules/3.10.32-rtai/build M=/home/huapeng/Yritys/RT/E1_Kern modules
make[1]: Entering directory `/usr/src/linux-headers-3.10.32-rtai'
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-headers-3.10.32-rtai'
root@huapeng-GA-990XA-UD3:/home/huapeng/Yritys/RT/E1_Kern#

3.2 Then I did "insmod" as
"root@huapeng-GA-990XA-UD3:/home/huapeng/Yritys/RT/E1_Kern# insmod rtProcess.ko",
no warning came; then I checked by
"root@huapeng-GA-990XA-UD3:/home/huapeng/Yritys/RT/E1_Kern# dmesg|tail",
and there came the sound message:
"[35090.977185] Hello in INIT!"
Remove my module at "root@huapeng-GA-990XA-UD3:/home/huapeng/Yritys/RT/E1_Kern# by command "rmmod" as
 "root@huapeng-GA-990XA-UD3:/home/huapeng/Yritys/RT/E1_Kern# rmmod rtProcess.ko",
came no warnings,
and by
"root@huapeng-GA-990XA-UD3:/home/huapeng/Yritys/RT/E1_Kern#dmesg|tail",
the right message came:
 "[35204.587710] Goodbye and EXIT!---!"

4. Added the rtai-related lines into use, i.e., the lines between the "---1---" and "---2---" are in use, used the same operations as in step 3.
4.1 I did the make at the root by
"root@huapeng-GA-990XA-UD3:/home/huapeng/Yritys/RT/E1_Kern# make",
then comes the message on screen as follows:

make -C /lib/modules/3.10.32-rtai/build M=/home/huapeng/Yritys/RT/E1_Kern modules
make[1]: Entering directory `/usr/src/linux-headers-3.10.32-rtai'
  CC [M]  /home/huapeng/Yritys/RT/E1_Kern/rtProcess.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: "rt_busy_sleep" [/home/huapeng/Yritys/RT/E1_Kern/rtProcess.ko] undefined!
WARNING: "stop_rt_timer" [/home/huapeng/Yritys/RT/E1_Kern/rtProcess.ko] undefined!
WARNING: "start_rt_timer" [/home/huapeng/Yritys/RT/E1_Kern/rtProcess.ko] undefined!
WARNING: "rt_set_oneshot_mode" [/home/huapeng/Yritys/RT/E1_Kern/rtProcess.ko] undefined!
  CC      /home/huapeng/Yritys/RT/E1_Kern/rtProcess.mod.o
  LD [M]  /home/huapeng/Yritys/RT/E1_Kern/rtProcess.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.10.32-rtai'
root@huapeng-GA-990XA-UD3:/home/huapeng/Yritys/RT/E1_Kern#

As I saw that the operation "make" produced a new "rtProcess.ko".

4.2 I did "insmod" the new rtProcess.ko by
"root@huapeng-GA-990XA-UD3:/home/huapeng/Yritys/RT/E1_Kern# insmod rtProcess.ko"
and a message appeared as the following:
"
insmod: ERROR: could not insert module rtProcess.ko: Unknown symbol in module
root@huapeng-GA-990XA-UD3:/home/huapeng/Yritys/RT/E1_Kern#
"

What changes should I make in order that my RTAI module would work? I am desperately need  help (I also tried to subscribe to the rtai list but I am not sure what has happened ).

Thank you  very much!
_______________________________________________
Rtai mailing list
[email protected]
https://mail.rtai.org/cgi-bin/mailman/listinfo/rtai
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.