All of lore.kernel.org
 help / color / mirror / Atom feed
From: luan dinh <dinhluanbmt@domain.hid>
To: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Cc: xenomai-help <xenomai@xenomai.org>
Subject: [Xenomai-help] shared library in xenomai ?
Date: Tue, 5 May 2009 23:09:07 -0700 (PDT)	[thread overview]
Message-ID: <431263.25323.qm@domain.hid> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 2933 bytes --]

hi.
My program included :
+ libsock.c
+ demo_use.c
+ Makefile
i build libsock.c as shared library named libmylibra.so ( support my_send() function )
demo_use.c use my_send() and built with -lmylibra option
Thanks for any advise.
Luan Dinh
PS :i also attach the source code of these files 
######### libsock. c###
void demo(void *agr)
{    
    int len,i;
    rt_task_set_periodic(NULL, TM_NOW, 100000000);
    while (1) {       
    rt_task_wait_period(NULL);
    len = send(sock, data, sizeof(data), 0);
        if (len < 0)
    {
        printf("Sent Failed...!\n");
            break;
    }    
    }       
}
/*my_send*/
int my_send()
{    
    struct sched_param param;// = { .sched_priority = 1 };     
      struct sockaddr_ll addr;
      struct ifreq ifr;    
    mlockall(MCL_CURRENT|MCL_FUTURE);    
    if ((sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0) {
            perror("socket cannot be created");
            return 1;
    }
    strncpy(ifr.ifr_name, "rteth0", IFNAMSIZ);
    if (ioctl(sock, SIOCGIFINDEX, &ifr) < 0) {
            perror("cannot get interface index");
            close(sock);
            return 1;
       }
     addr.sll_family   = AF_PACKET;
        addr.sll_protocol = htons(ETH_P_ALL);
    addr.sll_pkttype  = PACKET_OTHERHOST;
        addr.sll_ifindex  = ifr.ifr_ifindex;

        if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
            perror("cannot bind");
            close(sock);
            return 1;
        }
    
    rt_task_create(&demo_task, "mytask", 0, 99, 0);
    rt_task_start(&demo_task, &demo, NULL);      
    return 1;
}

### demo_use.c ###
int main( int argc, char * argv[] )
{
    my_send();
    pause();    
    return 1;    
}

## Makefile ###
CC = gcc
AR = ar cru
SOFLAGS = -shared -Wl
CFLAGS = -I/usr/xenomai/include -I/usr/xenomai/include/posix -D_GNU_SOURCE -D_REENTRANT -D__XENO__ -Wall -g -fPIC -rdynamic -pipe -O2 -fstrict-aliasing
LDFLAGS = -Wl,@/usr/xenomai/lib/posix.wrappers -L/usr/xenomai/lib -lpthread_rt -lpthread -lnative -lrt -lstdc++ -ldl
LINKER = $(CC)
LINT = lint -c
RM = /bin/rm -f
LIBOBJS =  libsock.o 
TARGET =  libmylibra.so \
        test 
all: $(TARGET)
libmylibra.so: $(LIBOBJS)
    $(LINKER) $(SOFLAGS) -o $@ $^ -lc
test: demo_use.o
    $(LINKER) $(LDFLAGS) $^ -L. -lmylibra -o $@
clean:
    @( $(RM) *.o vgcore.* core core.* $(TARGET) )
# make rule
%.o : %.cpp
    $(CC) $(CFLAGS) -c $^ -o $@    

Please post an excerpt of your code exposing this issue (the library
part, and the program part).

You should note that compiling libraries or programs for Xenomai usually
involves compilation flags obtained with xeno-config.

You should also note that "send()" is a glibc function, so calling a
function with the same name is a bad idea.

-- 
                                                 Gilles.



      

[-- Attachment #1.2: Type: text/html, Size: 4990 bytes --]

[-- Attachment #2: libsock.c --]
[-- Type: text/plain, Size: 2112 bytes --]

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/mman.h>

#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netpacket/packet.h>
#include <net/ethernet.h>
#include <net/if.h>
#include <arpa/inet.h>

#include <native/task.h>
#include <native/timer.h>

#include <errno.h>
#include <pthread.h>
#include <string.h>
#include <netinet/ether.h>

#include "libsock.h"

unsigned char buffer[1514];
unsigned char data[60] =
{0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x64,0x67,0x69,0x73,0x6E,0x88,0xA4,0x21,0x10,
		0x0C,0x00,0x00,0x00,0x01,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
		0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x30,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
 int sock;
RT_TASK demo_task;



void sockprintf()
{
	printf("this is Sockprintf...!\n");
}

void demo(void *agr)
{
	
	int len,i;
	rt_task_set_periodic(NULL, TM_NOW, 100000000);

	while (1) {       
	rt_task_wait_period(NULL);
	len = send(sock, data, sizeof(data), 0);
        if (len < 0)
	{
		printf("Sent Failed...!\n");
            break;
	}
	
    }	
		
}

void catch_signal(int sig)
{
	close(sock);
}

int my_send()
{
	
	struct sched_param param;// = { .sched_priority = 1 };	 
	  struct sockaddr_ll addr;
	  struct ifreq ifr;	
	mlockall(MCL_CURRENT|MCL_FUTURE);	
	if ((sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0) {
	        perror("socket cannot be created");
	        return 1;
	}
	strncpy(ifr.ifr_name, "rteth0", IFNAMSIZ);
	if (ioctl(sock, SIOCGIFINDEX, &ifr) < 0) {
        	perror("cannot get interface index");
        	close(sock);
        	return 1;
   	}
	 addr.sll_family   = AF_PACKET;
        addr.sll_protocol = htons(ETH_P_ALL);
	addr.sll_pkttype  = PACKET_OTHERHOST;
        addr.sll_ifindex  = ifr.ifr_ifindex;

        if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
            perror("cannot bind");
            close(sock);
            return 1;
        }
	
	rt_task_create(&demo_task, "mytask", 0, 99, 0);
	rt_task_start(&demo_task, &demo, NULL);	
	pause();
	rt_task_delete(&demo_task);
	return 1;
}

[-- Attachment #3: demo_use.c --]
[-- Type: text/plain, Size: 490 bytes --]

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/mman.h>

#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netpacket/packet.h>
#include <net/ethernet.h>
#include <net/if.h>
#include <arpa/inet.h>

#include <native/task.h>
#include <native/timer.h>

#include <errno.h>
#include <pthread.h>
#include <string.h>
#include <netinet/ether.h>

#include "testdom.hpp"
#include "libsock.h"

int main( int argc, char * argv[] )
{
	my_send();
	pause();	
	return 1;	
}

[-- Attachment #4: Makefile --]
[-- Type: application/octet-stream, Size: 1165 bytes --]

CC = gcc
AR = ar cru
#CFLAGS = -Wall -D_REENTRANT -D_GNU_SOURCE -g -fPIC
SOFLAGS = -shared -Wl
#LDFLAGS = -lstdc++

CFLAGS = -I/usr/xenomai/include -I/usr/xenomai/include/posix -D_GNU_SOURCE -D_REENTRANT -D__XENO__ -Wall -g -fPIC -rdynamic -pipe -O2 -fstrict-aliasing
LDFLAGS = -Wl,@/usr/xenomai/lib/posix.wrappers -L/usr/xenomai/lib -lpthread_rt -lpthread -lnative -lrt -lstdc++ -ldl


LINKER = $(CC)
LINT = lint -c
RM = /bin/rm -f

ifeq ($(origin version), undefined)
	version = 0.4
endif

#--------------------------------------------------------------------

LIBOBJS =  libsock.o 


TARGET =  libmylibra.so \
		test 

#TARGET =  test
#--------------------------------------------------------------------

all: $(TARGET)

#libmylibra.so: $(LIBOBJS)
#	$(LINKER) $(SOFLAGS) $^ -o $@ -lc

libmylibra.so: $(LIBOBJS)
	$(LINKER) $(SOFLAGS) -o $@ $^ -lc


#$(TARGET): $(LIBOBJS)
#	$(LINKER) $(LDFLAGS) $(LIBOBJS) -o $(TARGET)
test: demo_use.o
	$(LINKER) $(LDFLAGS) $^ -L. -lmylibra -o $@
clean:
	@( $(RM) *.o vgcore.* core core.* $(TARGET) )

#--------------------------------------------------------------------

# make rule
%.o : %.cpp
	$(CC) $(CFLAGS) -c $^ -o $@	

             reply	other threads:[~2009-05-06  6:09 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-06  6:09 luan dinh [this message]
2009-05-06  6:27 ` [Xenomai-help] shared library in xenomai ? Gilles Chanteperdrix
  -- strict thread matches above, loose matches on Subject: below --
2009-05-05  6:36 luan dinh
2009-05-05  7:55 ` Gilles Chanteperdrix
2009-05-05  5:45 luan dinh
2009-05-05  5:54 ` Thomas Lockhart

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=431263.25323.qm@domain.hid \
    --to=dinhluanbmt@domain.hid \
    --cc=gilles.chanteperdrix@xenomai.org \
    --cc=xenomai@xenomai.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.