Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <linux/init.h>
- #include <linux/module.h> /** needed by all modules **/
- #include <linux/kernel.h> /** This is for KERN_ALERT **/
- #include <linux/fs.h>
- #include <linux/cdev.h>
- /** for putuser **/
- #include <asm/uaccess.h>
- MODULE_LICENSE("SJ BSD/GPL");
- static struct cdev SimpleDevs[2];
- static int simple_major = 0;
- static ssize_t sj_read(struct file *filp,
- char *buffer, /* The buffer to fill with data */
- size_t length, /* The length of the buffer */
- loff_t *offset);
- static int sj_open(struct inode *inode, struct file *file);
- static struct file_operations fops = {
- .read = sj_read,
- //.write = sj_write,
- .open = sj_open,
- //.release = sj_release
- };
- static ssize_t sj_read(struct file *filp,
- char *buffer, /* The buffer to fill with data */
- size_t length, /* The length of the buffer */
- loff_t *offset) /* Our offset in the file */
- {
- char msg[1024] = "Hello SJ_read";
- copy_to_user( buffer, msg, sizeof(msg) );
- return sizeof(msg);
- }
- static void simple_setup_cdev(struct cdev *dev, int minor,
- struct file_operations *fops)
- {
- int err, devno = MKDEV(simple_major, minor);
- dev = cdev_alloc();
- cdev_init(dev, fops);
- dev->owner = THIS_MODULE;
- dev->ops = fops;
- err = cdev_add (dev, devno, 1);
- /* Fail gracefully if need be */
- if (err)
- printk (KERN_NOTICE "Error %d adding simple%d", err, minor);
- }
- static int sjDevInit(void)
- {
- int result;
- dev_t dev;
- printk("Device Init now..");
- /** int alloc_chrdev_region(dev_t *dev, unsigned int firstminor,unsigned int count, char *name); **/
- /** dev -> The dev_t variable type,which will get the major number that the kernel allocates. **/
- /**The same name will appear in /proc/devices. **/
- result = alloc_chrdev_region(&dev, 0, 1, "simple");
- if( result < 0 )
- {
- printk("Error in allocating device");
- return -1;
- }
- // printk("simple_major ..");
- simple_major = MAJOR(dev);
- printk("simple_major number is %d ..rn",simple_major );
- /* Now set up two cdevs. */
- simple_setup_cdev(SimpleDevs, 0, &fops);
- simple_setup_cdev(SimpleDevs + 1, 1, &fops);
- return 0;
- }
- static void sjDevRel(void)
- {
- printk("Releasing Simple Devsrn");
- cdev_del(SimpleDevs);
- }
- static int sj_open(struct inode *inode, struct file *file)
- {
- printk("Kernel..Sj_open ..I am openedrn");
- return 0;
- }
- module_init(sjDevInit);
- module_exit(sjDevRel);
- err = cdev_add (dev, devno, 1);
- /* Fail gracefully if need be */
- if (err)
- printk (KERN_NOTICE "Error %d adding simple%d", err, minor);
- kobject_uevent(&dev->kobj, KOBJ_ADD);
- kobject_uevent(&SimpleDevs[0]->kobj, KOBJ_REMOVE);
- printk("Releasing Simple Devsrn");
- cdev_del(SimpleDevs[0]);
- char event[] = "DISK_RO=1";
- char *envp[] = { event, NULL };
- if (!ro)
- event[8] = '0';
- kobject_uevent_env(&disk_to_dev(gd)->kobj, KOBJ_CHANGE, envp);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement