From: george anzinger <george@mvista.com>
To: BalaKrishna Mallipeddi <bkmallipeddi@yahoo.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: Problem : While adding a new system call to Montavista Linux on PPC architecture
Date: Tue, 03 Jun 2003 01:52:55 -0700 [thread overview]
Message-ID: <3EDC61E7.3060806@mvista.com> (raw)
In-Reply-To: <20030602070446.39795.qmail@web10708.mail.yahoo.com>
BalaKrishna Mallipeddi wrote:
> Hi,
> While adding a new System call in Montavista linux
> on ppc architecture i am getting error:
>
> I implemented the system call and compiled the kernel.
> The kernel is compiled succesfully. While testing the
> system call by writing a user program i am getting
> error as ollows:
>
> test_syscall.c: In function `rfs_open':
> test_syscall.c:4: `__NR_rfs_open' undeclared (first
> use in this function)
> test_syscall.c:4: (Each undeclared identifier is
> reported only once
> test_syscall.c:4: for each function it appears in.)
>
>
> How I implemented the system call is as follows:
> All the paths i have given is from the montavista
> Linux source tree.
> 1) Call Implementation:
> I coded my system call in the directory "kernel"
> of the Linux source tree with the name "rfs_open.c".
>
> The system call is as follows:
>
> #include <linux/rfs_open.h>
As written here, there is nothing in the above file that the kernel
needs. rfs_open.h should not be in the kernel tree, but in user land
and included by the user program. More usually, you would build a
library file with the system call in it and link with that. When you
build the library you need the kernel headers you refer to in
rfs_open.h. Once you have built the library with the call stub, you
no longer need to refer to the kernel headers (which is a good thing).
>
> asmlinkage int
> sys_rfs_open(void)
> {
> printk("I am rfs_open\n");
> return 0;
> }
>
> 2) Added a library function:
> I added my library function in the directory
> "include/linux" with the name "rfs_open.h". The
> function is as follows:
>
> #ifndef _LINUX_RFS_OPEN_H
> #define _LINUX_RFS_OPEN_H
>
>
> #include <linux/linkage.h>
> #include <linux/unistd.h>
>
>
> _syscall0(int,rfs_open);
>
>
> #endif
As above, this should not be in the kernel, but in user land.
>
> 3) Got the system call number:
> I assigned a number to my system call in the file
> unistd.h in the directory "include/asm", where "asm"
> links to "asm-ppc". The line added in unistd.h is as
> follows:
> #define __NR_rfs_open 208
>
> 4) Created entry in the System call table:
> I created an entry in the System Call table which
> is in the file misc.S( for i386 architecture this
> System call table is in entry.S) in the directory
> "arch/ppc/kernel/misc.S" The line added in misc.S is
> as follows:
> .long sys_rfs_open
I assume you made sure that the .long is in the same call number slot
(i.e. 208).
>
> 5) Updated the Makefile for my system call to be
> compiled and linked in to the kernel. After updating
> it is as follows:
> export-objs = signal.o sys.o kmod.o context.o
> ksyms.o pm.o exec_domain.o \
> printk.o cpufreq.o trace.o rfs_open.o
You don't need to export the call name unless you want to be able to
call it directly from a module, NOT a good idea.
>
>
> obj-y = sched.o fork.o exec_domain.o panic.o
> printk.o \
> module.o exit.o itimer.o info.o time.o softirq.o
> resource.o \
> sysctl.o acct.o capability.o ptrace.o timer.o user.o
> \
> signal.o sys.o kmod.o context.o rfs_open.o
>
> 6) I compiled the kernel and it is successfully
> compiled.
>
> 7) My system call testing program looks as follows:
>
> #include <sys/syscall.h>
> #include <stdio.h>
> #include <errno.h>
> _syscall0(int,rfs_open);
replace the above line with an include of your rfs_open.h file.
>
> int main()
> {
> rfs_open();
> return(0);
> }
>
> I am greatful if any one help me.
>
> Thanks & regards
> BalaKrishna Mallipeddi.
>
> =====
> BalaKrishna Mallipeddi
> Member Technical Staff Software
> Innomedia Technologies Pvt. Ltd.,
> #3278, 12th Main, HAL 2nd stage,
> Bangalore-560008,
> INDIA
> Phone : 5278389 + 123
>
--
George Anzinger george@mvista.com
High-res-timers: http://sourceforge.net/projects/high-res-timers/
Preemption patch: http://www.kernel.org/pub/linux/kernel/people/rml
prev parent reply other threads:[~2003-06-03 8:39 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-06-02 7:04 Problem : While adding a new system call to Montavista Linux on PPC architecture BalaKrishna Mallipeddi
2003-06-03 8:52 ` george anzinger [this message]
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=3EDC61E7.3060806@mvista.com \
--to=george@mvista.com \
--cc=bkmallipeddi@yahoo.com \
--cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox