rebuild kernel add syscall

Gilboa Davara gilboad at gmail.com
Mon Mar 14 10:21:08 UTC 2011


On Sun, 2011-03-13 at 21:51 +0800, xinyou yan wrote:
> It is a homework .  Use a kernel spcae as a char decieve
> Which can offer  open write and so on.
> 
> I just  use a   char buffer[128] in kernel space.
> 

As a general rule, using static parameters in kernel space is considered
hazardous; nevertheless, a 128 bytes is relatively safe.

> Then i have some ideas.
> I can use kernel space as char device. I can also use  kernel spcae as
> a file system?  Could it be ?

I'm not sure what you mean.
But in general, yes, you could register a character device that has
read/write/seek operations on a memory buffer. (Preferably, dynamically
allocated memory buffer)
A relatively simple (and easy to understand / implement) example is
the /proc file system. (Search for create_proc_entry in the kernel code)

> If  memory  can be a filesystem  . Can  i use a file  to   simulate  。
> It just  not be taken as a file . Like something
> we store file  in it.
> 
> 
> 
> 
> 
> 2011/3/13 Gilboa Davara <gilboad at gmail.com>:
> > On Thu, 2011-03-10 at 15:17 +0800, xinyou yan wrote:
> >> I want to and a new syscall
> >> 1  add
> >> .long sys_mysyscall
> >> in        arch/x86/kernel/syscall_table_32.S
> >>
> >> 2    add
> >>        #define   __NR_mysyscall   341
> >> in    arch/x86/include/asm/unistd_32.
> >>
> >> 3.    add
> >>
> >> asmlinkage int sys_mysyscall(char* sourceFile,char* destFile)
> >> {
> >>     int source=sys_open(sourceFile,O_RDONLY,0);
> >>     int dest=sys_open(destFile,O_WRONLY|O_CREAT|O_TRUNC,0600);
> >>     char buf[1024];
> >>     mm_segment_t fs;
> >>     fs = get_fs();
> >>     set_fs(get_ds());
> >>     int nread;
> >>
> >>     if(source>0 && dest>0)
> >>     {
> >>             while((nread=sys_read(source,buf,1024)) > 0)
> >>                        sys_write(dest,buf,read);
> >>     }
> >>     else
> >>     {
> >>              printk("Error!");
> >>     }
> >>     sys_close(source);
> >>     sys_close(dest);
> >>     set_fs(fs);
> >>     return 0;
> >> }
> >> in  kerrnel/sys.c
> >>
> >> 4. make menuconfig
> >> 5. make  all
> >> 6  make  modules_install
> >>
> >> reboot
> >>
> >>
> >> Now I want just do it one time
> >> How can i make sure the  new syscall here is mysyscall  work fine  ?
> >
> > Are you locked on using syscalls?
> > Unless you really require syscalls, I'd imagine that it's far easier to
> > use ioctl's instead (doesn't require a custom kernel), and use
> > filp_open / filp_close / file->read / file->write to access files from
> > within kernel space.
> >
> > Two more things:
> > 1. I'd avoid using stack based allocations in kernel mode. (Down to 8KB
> > in certain situations)
> > 2. Always check error codes.
> >
> > - Gilboa
> >
> > --
> > users mailing list
> > users at lists.fedoraproject.org
> > To unsubscribe or change subscription options:
> > https://admin.fedoraproject.org/mailman/listinfo/users
> > Guidelines: http://fedoraproject.org/wiki/Mailing_list_guidelines
> >





More information about the users mailing list