inode number

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

 



Hi,
When the inode of a file is created?Whether on creation time or at opening time.
Because I am writing a driver and testing it.
After inserting the module i am creating a file at /dev/ eith major number same as the module's major number using mknod.
Then i am seeng the inode number by
ls -i
It is giving some number.
Next In a test file i opened a file.In my actual driver's open function i am printing the i node number.But it is not the same as that before.

Why is that difference?will you please tell me.
My driver's code is written below.



#ifndef __KERNEL__
   #define __KERNEL__
#endif

#ifndef MODULE
   #define MODULE
#endif

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

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("BASIC CHAR DEVICE 1");
MODULE_AUTHOR("RAJA");

#define MODULENAME "chardev_1"
#define MOD_INC_USE_COUNT
#define MOD_DEC_USE_COUNT

dev_t devno;
static int __init init_module1(void);
static void __exit exit_module1(void);

int open_chardev1(struct inode *, struct file *);

struct file_operations fops = {
   .owner = THIS_MODULE,
   .open = open_chardev1
};

static int __init init_module1()
{
   printk("Hello World!\n");
   devno = register_chrdev(0,MODULENAME,&fops);
   if(devno < 0)
       printk("Unable To Create Character Device\n ");
   else
printk("Character Device Is Created With Major Number : %d\n ",devno);
   printk("Major Number : %d\n ",MAJOR(devno));
   printk("Minor Number : %d\n ",MINOR(devno));
   return devno;
}


int open_chardev1(struct inode *inode, struct file *file)
{
   printk("Entered Into open function\n");
   printk("Flags : %d\n",file->f_flags);
   printk("Inode Number : %d\n",file->f_dentry->d_inode);
   printk("Device Number : %d\n",inode->i_rdev);
   printk("Major Number : %d\n",imajor(inode));
   printk("Minor Number : %d\n",iminor(inode));
    printk("Device Number : %d\n",MKDEV(imajor(inode),iminor(inode)));
   MOD_INC_USE_COUNT;
   return 0;
}


static void __exit exit_module1()
{
   printk("Cruel World ! Bye\n");
   unregister_chrdev(devno,MODULENAME);

}




module_init(init_module1);
module_exit(exit_module1);


--
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