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 -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/