Re: Sysfs class attribute problem
-----Original Message----- From: kernelnewbies-bounces@kernelnewbies.org [mailto:kernelnewbies- bounces@kernelnewbies.org] On Behalf Of kernelnewbies- request@kernelnewbies.org Sent: Wednesday, June 20, 2012 11:33 PM To: kernelnewbies@kernelnewbies.org Subject: Kernelnewbies Digest, Vol 19, Issue 39
Send Kernelnewbies mailing list submissions to kernelnewbies@kernelnewbies.org
To subscribe or unsubscribe via the World Wide Web, visit http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies or, via email, send a message with subject or body 'help' to kernelnewbies-request@kernelnewbies.org
You can reach the person managing the list at kernelnewbies-owner@kernelnewbies.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of Kernelnewbies digest..."
Today's Topics:
1. RE: A confusion about invoking my syscall (Jeff Haran) 2. Re: Sysfs class attribute problem (Jeshwanth Kumar N K Jeshu)
----------------------------------------------------------------------
Message: 1 Date: Wed, 20 Jun 2012 16:58:30 +0000 From: Jeff Haran <jharan@bytemobile.com> Subject: RE: A confusion about invoking my syscall To: ?? <wangzhe5004@gmail.com> Cc: kernelnewbies <kernelnewbies@kernelnewbies.org> Message-ID: <4AB110E2FA959F41AC8480E84516371105B80D@HQ-EX01.bytemobile.com> Content-Type: text/plain; charset="iso-2022-jp"
From: ?? [mailto:wangzhe5004@gmail.com] Sent: Wednesday, June 20, 2012 1:16 AM To: Jeff Haran Cc: kernelnewbies Subject: Re: A confusion about invoking my syscall
2012/6/20 Jeff Haran <jharan@bytemobile.com<mailto:jharan@bytemobile.com>>
From: ?? [mailto:wangzhe5004@gmail.com<mailto:wangzhe5004@gmail.com>] Sent: Monday, June 18, 2012 9:32 PM To: Jeff Haran Cc: kernelnewbies Subject: Re: A confusion about invoking my syscall
2012/6/19 Jeff Haran <jharan@bytemobile.com<mailto:jharan@bytemobile.com>>
From: kernelnewbies-bounces@kernelnewbies.org<mailto:kernelnewbies- bounces@kernelnewbies.org> [mailto:kernelnewbies- bounces@kernelnewbies.org<mailto:kernelnewbies- bounces@kernelnewbies.org>] On Behalf Of ?? Sent: Monday, June 18, 2012 6:40 PM To: kernelnewbies Subject: A confusion about invoking my syscall
Hello everyone:
I append a simple syscall in kernel. and the function is as follows:
asmlinkage long sys_mysyscall(long data) { printk("This is my syscall!\n"); return data; }
and i test it sucessfully in user space . and the test program:
#include <linux/unistd.h> #include <syscall.h> #include <sys/types.h> #include <stdio.h>
int main(void) { long n = 0,m = 0,pid1,pid2; n = syscall(345,190);// #define __NR_mysyscall 345 printf("n = %ld\n",n); pid1 = syscall(SYS_getpid); //getpid printf("pid = %ld\n",pid1); pid2 = syscall(20); //getpid printf("pid = %ld\n",pid2); return 0; } and the result: n = 190 pid = 4097 pid = 4097
but if the test program is: #include <linux/unistd.h> #include <syscall.h> #include <sys/types.h> #include <stdio.h>
int main(void) { long n = 0,m = 0,pid1,pid2; n = syscall(345,190);// #define __NR_mysyscall 345 printf("n = %ld\n",n); m = syscall(SYS_mysyscall,190); printf("m = %ld\n",m); pid1 = syscall(SYS_getpid); //getpid printf("pid = %ld\n",pid1); pid2 = syscall(20); //getpid printf("pid = %ld\n",pid2); return 0; } and the result: wanny@wanny-C-Notebook-XXXX:~/syscall/src$ gcc test1.c test1.c: In function ?main?: test1.c:13:14: error: ?SYS_mysyscall? undeclared (first use in this function) test1.c:13:14: note: each undeclared identifier is reported only once for each function it appears in
why i can't invoke my syscall with "SYS_mysyscall"?
Thanks in advance! Because it appears you never defined the symbol SYS_mysyscall. I think so,but where shoud i defne the symbol SYS_mysyscall ? and where is the symbol SYS_getpid defined? On my system /usr/include/bits/syscall.h, which is being included in your program because it includes syscall.h. 83 #define SYS_getpid __NR_getpid ?so SYS_getpid is replaced by __NR_getpid. and __NR_getpid was defined in the kernel(arch/x86/include/asm/unistd_32.h). and my syscall was also defined there.#define SYS_mysyscall __NR_mysyscall, i don't kown why it doesn't works.
My sources contain no reference to SYS_mysyscall nor __NR_mysyscall, so I assume you?ve added them to the Linux include files that you built your module from.
User space programs like your main() program above generally aren?t going to include Linux source tree include files. When you include <syscall.h> from a user space program in a typical development environment, the compiler is by default going to look for syscall.h in /usr/include, not in the Linux source tree where presumably you?ve made your modifications. Of course you can always tell the compiler to look there using the -I command line option to gcc, if you want to. The usual practice however is to keep kernel code and user code include files completely separate. That means some duplication of effort, like having to define SYS_mysyscall in two different places, but that?s the usual practice because most people aren?t building kernels and thus haven?t installed the kernel source include files.
Jeff Haran
participants (1)
-
Pranay Kumar Srivastava