Sponsored Content
Full Discussion: Use of cdev_alloc function
Top Forums Programming Use of cdev_alloc function Post 302881316 by kg_gaurav on Saturday 28th of December 2013 12:44:33 AM
Old 12-28-2013
Code Use of cdev_alloc function

I'm creating a char device I'm initiating my cdev as below
Code:
dev=cdev_alloc(); //dev is struct cdev* declare with global scope
if(dev)
{
cdev_init(dev,&file_ops);//file_ops is struct file_operations declared with global scope
}

This code works well. But we know that cdev_alloc and cdev_init both can inititates struct cdev alone. So i thought to use cdev_init to initiate and i used below code
Code:
cdev_init(dev,&file_ops)

Now here comes my problem. When i'm initializing with cdev_init alone i'm unable to unload my module, as i'm cleaning up struct cdev with function `cdev_del()` which is throwing error. But what error i don't know

Please help. I'll provided further code if needed.

Last edited by kg_gaurav; 12-28-2013 at 01:55 AM.. Reason: content didn't get posted
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Passing global variable to a function which is called by another function

Hi , I have three funcions f1, f2 and f3 . f1 calls f2 and f2 calls f3 . I have a global variable "period" which i want to pass to f3 . Can i pass the variable directly in the definition of f3 ? Pls help . sars (4 Replies)
Discussion started by: sars
4 Replies

2. Shell Programming and Scripting

Return a value from called function to the calling function

I have two scripts. script1.sh looks -------------------------------- #!/bin/bash display() { echo "Welcome to Unix" } display ----------------------------- Script2.sh #!/bin/bash sh script1.sh //simply calling script1.sh ------------------------------ (1 Reply)
Discussion started by: mvictorvijayan
1 Replies

3. Shell Programming and Scripting

SHELL SCRIPT Function Calling Another Function Please Help...

This is my function which is creating three variables based on counter & writing these variable to database by calling another function writeRecord but only one record is getting wrote in DB.... Please advise ASAP...:confused: function InsertFtg { FTGSTR="" echo "Saurabh is GREAT $#" let... (2 Replies)
Discussion started by: omkar.sonawane
2 Replies

4. Shell Programming and Scripting

After exit from function it should not call other function

Below is my script that is function properly per my conditions but I am facing one problem here that is when one function fails then Iy should not check other functions but it calls the other function too So anyone can help me how could i achieve this? iNOUT i AM GIVING TO THE... (1 Reply)
Discussion started by: rohit22hamirpur
1 Replies

5. Programming

How to step in one function after the function be executed in gdb?

In gdb, I can call one function with command "call", but how can I step in the function? I don't want to restart the program, but the function had been executed, gdb will execute next statement, and I don't know how to recall the function. (4 Replies)
Discussion started by: 915086731
4 Replies

6. Shell Programming and Scripting

Help to Modify File Name in each function before calling another function.

I have a script which does gunzip, zip and untar. Input to the script is file name and file directory (where file is located) I am reading the input parameters as follows: FILENAME=$1 FILEDIR=$2 I have created 3 functions that are as follows: 1) gunzip file 2) unzip file... (2 Replies)
Discussion started by: pinnacle
2 Replies

7. Shell Programming and Scripting

Passing variable value in a function to be used by another function

Hello All, I would like to ask help from you on how to pass variable value from a function that has been called inside the function. I have created below and put the variables in " ". Is there another way I can do this? Thank you in advance. readtasklist() { while read -r mod ver... (1 Reply)
Discussion started by: aderamos12
1 Replies

8. Shell Programming and Scripting

Will files, creaetd in one function of the same script will be recognized in another function?

Dear All. I have a script, which process files one by one. In the script I have two functions. one sftp files to different server the other from existing file create file with different name. My question is: Will sftp function recognize files names , which are created in another... (1 Reply)
Discussion started by: digioleg54
1 Replies

9. Shell Programming and Scripting

Need help on awk for printing the function name inside each function

Hi, I am having script which contains many functions. Need to print each function name at the starting of the function. Like below, functionname() { echo "functionname" commands.... } I've tried like below, func=`grep "()" scriptname | cut -d "(" -f1` for i in $func do nawk -v... (4 Replies)
Discussion started by: Sumanthsv
4 Replies

10. Shell Programming and Scripting

Function - Make your function return an exit status

Hi All, Good Day, seeking for your assistance on how to not perform my 2nd, 3rd,4th etc.. function if my 1st function is in else condition. #Body function1() { if then echo "exist" else echo "not exist" } #if not exist in function1 my all other function will not proceed.... (4 Replies)
Discussion started by: meister29
4 Replies
MAKE_DEV(9)						   BSD Kernel Developer's Manual					       MAKE_DEV(9)

NAME
make_dev, make_dev_cred, make_dev_credf, make_dev_alias, destroy_dev, destroy_dev_sched, destroy_dev_sched_cb, destroy_dev_drain, dev_depends -- manage cdev's and DEVFS registration for devices SYNOPSIS
#include <sys/param.h> #include <sys/conf.h> struct cdev * make_dev(struct cdevsw *cdevsw, int unit, uid_t uid, gid_t gid, int perms, const char *fmt, ...); struct cdev * make_dev_cred(struct cdevsw *cdevsw, int unit, struct ucred *cr, uid_t uid, gid_t gid, int perms, const char *fmt, ...); struct cdev * make_dev_credf(int flags, struct cdevsw *cdevsw, int unit, struct ucred *cr, uid_t uid, gid_t gid, int perms, const char *fmt, ...); struct cdev * make_dev_alias(struct cdev *pdev, const char *fmt, ...); void destroy_dev(struct cdev *dev); void destroy_dev_sched(struct cdev *dev); void destroy_dev_sched_cb(struct cdev *dev, void (*cb)(void *), void *arg); void destroy_dev_drain(struct cdevsw *csw); void dev_depends(struct cdev *pdev, struct cdev *cdev); DESCRIPTION
The make_dev_credf() function creates a cdev structure for a new device. It also notifies devfs(5) of the presence of the new device, that causes corresponding nodes to be created. Besides this, a devctl(4) notification is sent. The device will be owned by uid, with the group ownership as gid. The name is the expansion of fmt and following arguments as printf(9) would print it. The name determines its path under /dev or other devfs(5) mount point and may contain slash '/' characters to denote subdirectories. The permissions of the file specified in perms are defined in <sys/stat.h>: #define S_IRWXU 0000700 /* RWX mask for owner */ #define S_IRUSR 0000400 /* R for owner */ #define S_IWUSR 0000200 /* W for owner */ #define S_IXUSR 0000100 /* X for owner */ #define S_IRWXG 0000070 /* RWX mask for group */ #define S_IRGRP 0000040 /* R for group */ #define S_IWGRP 0000020 /* W for group */ #define S_IXGRP 0000010 /* X for group */ #define S_IRWXO 0000007 /* RWX mask for other */ #define S_IROTH 0000004 /* R for other */ #define S_IWOTH 0000002 /* W for other */ #define S_IXOTH 0000001 /* X for other */ #define S_ISUID 0004000 /* set user id on execution */ #define S_ISGID 0002000 /* set group id on execution */ #define S_ISVTX 0001000 /* sticky bit */ #ifndef _POSIX_SOURCE #define S_ISTXT 0001000 #endif The cr argument specifies credentials that will be stored in the si_cred member of the initialized struct cdev. The flags argument alters the operation of make_dev_credf(). The following values are currently accepted: MAKEDEV_REF reference the created device MAKEDEV_NOWAIT do not sleep, may return NULL MAKEDEV_WAITOK allow the function to sleep to satisfy malloc MAKEDEV_ETERNAL created device will be never destroyed The MAKEDEV_WAITOK flag is assumed if none of MAKEDEV_WAITOK, MAKEDEV_NOWAIT is specified. The dev_clone(9) event handler shall specify MAKEDEV_REF flag when creating a device in response to lookup, to avoid race where the device created is destroyed immediately after devfs_lookup(9) drops his reference to cdev. The MAKEDEV_ETERNAL flag allows the kernel to not acquire some locks when translating system calls into the cdevsw methods calls. It is responsibility of the driver author to make sure that destroy_dev() is never called on the returned cdev. For the convenience, use the MAKEDEV_ETERNAL_KLD flag for the code that can be compiled into kernel or loaded (and unloaded) as loadable module. The make_dev_cred() function is equivalent to the call make_dev_credf(0, cdevsw, unit, cr, uid, gid, perms, fmt, ...); The make_dev() function call is the same as make_dev_credf(0, cdevsw, unit, NULL, uid, gid, perms, fmt, ...); The make_dev_alias() function takes the returned cdev from make_dev() and makes another (aliased) name for this device. It is an error to call make_dev_alias() prior to calling make_dev(). The cdev returned by make_dev() and make_dev_alias() has two fields, si_drv1 and si_drv2, that are available to store state. Both fields are of type void *. These are designed to replace the unit argument to make_dev(), which can be obtained with dev2unit(). The destroy_dev() function takes the returned cdev from make_dev() and destroys the registration for that device. The notification is sent to devctl(4) about the destruction event. Do not call destroy_dev() on devices that were created with make_dev_alias(). The dev_depends() function establishes a parent-child relationship between two devices. The net effect is that a destroy_dev() of the parent device will also result in the destruction of the child device(s), if any exist. A device may simultaneously be a parent and a child, so it is possible to build a complete hierarchy. The destroy_dev_sched_cb() function schedules execution of the destroy_dev() for the specified cdev in the safe context. After destroy_dev() is finished, and if the supplied cb is not NULL, the callback cb is called, with argument arg. The destroy_dev_sched() function is the same as destroy_dev_sched(cdev, NULL, NULL); The d_close() driver method cannot call destroy_dev() directly. Doing so causes deadlock when destroy_dev() waits for all threads to leave the driver methods. Also, because destroy_dev() sleeps, no non-sleepable locks may be held over the call. The destroy_dev_sched() family of functions overcome these issues. The device driver may call the destroy_dev_drain() function to wait until all devices that have supplied csw as cdevsw, are destroyed. This is useful when driver knows that destroy_dev_sched() is called for all instantiated devices, but need to postpone module unload until destroy_dev() is actually finished for all of them. SEE ALSO
devctl(4), destroy_dev_drain(9), dev_clone(9), devfs(5) HISTORY
The make_dev() and destroy_dev() functions first appeared in FreeBSD 4.0. The function make_dev_alias() first appeared in FreeBSD 4.1. The function dev_depends() first appeared in FreeBSD 5.0. The functions make_dev_credf(), destroy_dev_sched(), destroy_dev_sched_cb() first appeared in FreeBSD 7.0. BSD
September 5, 2010 BSD
All times are GMT -4. The time now is 05:45 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy