Re: problem in initilisation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks to Suvidh, Mandeep, MohanLal and Megharaj for helping me out.

When I changed the device name to have "eth" in it, it got identified as ethernet device.

-Ravi

Suvidh Mathur wrote:

ya true, my mistake. its just strncmp, so string "eth" anywhere
in the name should suffice.


19/04/2004 3:03 PM To: "Suvidh Mathur" <Suvidh.Mathur@lntinfotech.com>, "Ravi Kumar" <ravivsn@rocsys.com> cc: <kernelnewbies@nl.linux.org> From: "Mandeep Singh Sandhu" <mandeep_sandhu@infosys.com> Subject: RE: problem in initilisation



i don't think so, i have named my device "mss-eth"
and it works fine!

- /dev/mandeep


-----Original Message----- From: kernelnewbies-bounce@nl.linux.org [mailto:kernelnewbies-bounce@nl.linux.org]On Behalf Of Suvidh Mathur Sent: Monday, April 19, 2004 2:22 PM To: Ravi Kumar Cc: kernelnewbies@nl.linux.org Subject: Re: problem in initilisation



Ravi,

I dont know about the divert code, but it seems that ethernet device
identification is done on the first 3 letters of the device name, i.e.
your device must be named "eth"xxx. Check alloc_divert_blk in dv.c
HTH



19/04/2004 1:18 PM
To: Suvidh Mathur <Suvidh.Mathur@lntinfotech.com>
cc: kernelnewbies@nl.linux.org
From: Ravi Kumar <ravivsn@rocsys.com>
Subject: Re: problem in initilisation




Suvid, Thanks for the information. Now, I allocated memory and the problem seems to be with identification as ethernet device.

dmesg shows the below info

divert: not allocating divert_blk for non-ethernet device testdev0
Unable to handle kernel paging request at virtual address 0180040e
printing eip:
c01f64a4
*pde = 00000000
Oops: 0000
testdriver i810_audio ac97_codec soundcore mousedev input i810 agpgart
autofs
CPU:    0
EIP:    0010:[<c01f64a4>]    Tainted: PF
EFLAGS: 00210296

EIP is at __rta_fill [kernel] 0x64 (2.4.18-14)
eax: 0000000a   ebx: 00000004   ecx: 00000001   edx: c7e21c60
esi: 0180040e   edi: c187b060   ebp: 00000008   esp: c676fe1c
ds: 0018   es: 0018   ss: 0018
Process insmod (pid: 1056, stackpage=c676f000)
Stack: 00000000 c0154a30 00000001 0000000a 00000000 c7ba4a00 c034192d
c7e21c60
      c01f6a6f c7e21c60 0000000a 00000004 0180040e c0341928 00000f10
      c0341960
      00000010 c187b000 000005dc c7e21c60 c7ba4a00 00000010 ffffffff
      c01f6ced
      Call Trace: [<c0154a30>] alloc_inode [kernel] 0xa0 (0xc676fe20))
      [<c01f6a6f>] rtnetlink_fill_ifinfo [kernel] 0x37f (0xc676fe3c))
      [<c01f6ced>] rtmsg_ifinfo [kernel] 0x5d (0xc676fe78))
      [<c01f6f7f>] rtnetlink_event [kernel] 0x2f (0xc676fea4))
      [<c012613d>] notifier_call_chain [kernel] 0x2d (0xc676feb4))
      [<c01f2585>] register_netdevice [kernel] 0x115 (0xc676fed0))
      [<c8e5d2f4>] init_module [testdriver] 0x130 (0xc676feec))
      [<c8e5d526>] .rodata [testdriver] 0x86 (0xc676fef4))
      [<c011bf79>] sys_init_module [kernel] 0x4d9 (0xc676ff1c))
      [<c8e5d060>] test_open [testdriver] 0x0 (0xc676ff20))
      [<c8e5d060>] test_open [testdriver] 0x0 (0xc676ff58))
      [<c010910f>] system_call [kernel] 0x33 (0xc676ffc0))


Code: f3 a5 f6 c3 02 74 02 66 a5 f6 c3 01 74 01 a4 8b 5c 24 10 8b



Thanks in advance, -Ravi



Suvidh Mathur wrote:



Hi,
At first glance, I could not find where you have allocated your netdevice
structure. The struct test_struct contains a pointer to net_device, but
where are you allocating it?

Regards,



19/04/2004 10:53 AM
To: kernelnewbies@nl.linux.org
cc:
From: Ravi Kumar <ravivsn@rocsys.com>
Subject: problem in initilisation



HI,
I wrote one character device which should create network device. When I
do insmod it gave a segmentation fault and lsmod shows initializing.

A dmesg shows:

EIP is at init_module [testdriver] 0xa6 (2.4.18-14)
eax: 00000000   ebx: ffffffea   ecx: c05b6000   edx: c8e7f4d3
esi: 00000000   edi: 00000000   ebp: c672df18   esp: c672df00
ds: 0018   es: 0018   ss: 0018
Process insmod (pid: 9922, stackpage=c672d000)
Stack: 00200206 ffffffff 00002f3f c05b6940 00000000 00000000 c8e7f000
c011bf79
     c8e7f060 08075228 00000908 00000000 080756f4 0000052c 00000060
     00000060
     0000000a c05b6c40 c6231000 c6e7e000 00000060 c8def000 c8e7f060
     00000968
     Call Trace: [<c011bf79>] sys_init_module [kernel] 0x4d9
(0xc672df1c))
     [<c8e7f060>] test_open [testdriver] 0x0 (0xc672df20))
     [<c8e7f060>] test_open [testdriver] 0x0 (0xc672df58))
     [<c010910f>] system_call [kernel] 0x33 (0xc672dfc0))


Code: c7 40 34 fe f0 e7 c8 83 ec 08 68 d4 f4 e7 c8 8b 45 f4 ff 30



I am attaching the code, pls help me to solve this problem. Thanks a lot, -Ravi

#ifndef __KERNEL__
#   define __KERNEL__
#endif

#ifndef MODULE
#  define MODULE
#endif

#define DEVNAME "testdev"

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/slab.h>

#include <linux/netdevice.h>
#include <linux/if_ether.h>



int test_open(struct inode *,struct file *);
int test_release(struct inode *,struct file*);


struct test_struct{ struct net_device *dev; char name[IFNAMSIZ]; };



struct file_operations test_fop={
llseek:     NULL,
read:       NULL,
write:      NULL,
ioctl:      NULL,
open:       test_open,
release:    test_release,
};



int test_open(struct inode *inode, struct file *filep)
{
     MOD_INC_USE_COUNT;
     return 0;
}

int test_release(struct inode *inode, struct file *filep)
{
     MOD_DEC_USE_COUNT;
     return 0;
}

int testdev_open(struct net_device *dev)
{
     MOD_INC_USE_COUNT;
     return 0;
}

int testdev_close(struct net_device *dev)
{
     unregister_netdev(dev);
     MOD_DEC_USE_COUNT;
     return 0;
}

static int test_init_dev(struct net_device *dev)
{
     struct test_struct *c;

     dev->priv = kmalloc(sizeof(struct net_device),GFP_KERNEL);
     if(!dev->priv)
     {
printk(KERN_ERR "out of memory while allocating to dev->priv\n");
return -ENOMEM;
     }
     c = (struct test_struct *)dev->priv;
     if(!c)
return -ENODEV;

memset(c,0,sizeof(struct test_struct));
c->dev = dev;
ether_setup(dev);

     dev->open  = testdev_open;
     dev->stop  = testdev_close;
     dev->mtu   = ETH_DATA_LEN;
     dev_init_buffers(dev);
     return 0;
}


int init_module(void) { int result,i;

      struct test_struct *pTestStruct;
      result = register_chrdev(16,"test",&test_fop);
      if( result < 0 ){
printk(KERN_WARNING "test: cant get major\n");
return result;
}
pTestStruct = (struct test_struct *)kmalloc(sizeof( struct
test_struct),GFP_KERNEL);
     if(!pTestStruct)
     {
printk(KERN_ERR "failed to allocate memory\n");
return -ENOMEM;
     }

      memset((void *)pTestStruct,0,sizeof(pTestStruct));
      sprintf(pTestStruct->name, DEVNAME);
      //pTestStruct->dev->priv = pTestStruct;
      pTestStruct->dev->init = test_init_dev;

     i = dev_alloc_name(pTestStruct->dev,"testdev%d");
     if(i < 0 )
     {
printk(KERN_ERR "cant allocate device\n");
return -ENODEV;
     }
     i = register_netdevice((pTestStruct->dev));
     if( i < 0 )
printk(KERN_ERR "register netdevice failed\n");

return 0;
}

void cleanup_module(void)
{

unregister_chrdev(16,"test");
}







(Attachments removed)




























This email may contain confidential or privileged information for the
intended recipient(s). If you are not the intended recipient, please do


not


use or disseminate the information, notify the sender and delete it from
your system. Thanks




































This email may contain confidential or privileged information for the intended recipient(s). If you are not the intended recipient, please do not use or disseminate the information, notify the sender and delete it from your system. Thanks


-- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/





























This email may contain confidential or privileged information for the
intended recipient(s). If you are not the intended recipient, please do not
use or disseminate the information, notify the sender and delete it from
your system. Thanks







--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux