linux-4.4.1/__register_chrdev()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#q45d85cf]
#backlinks
*説明 [#we3e1abe]
-パス: [[linux-4.4.1/fs/char_dev.c]]
-FIXME: これは何?
--説明
**引数 [#ta6e64a9]
-unsigned int major
--
-unsigned int baseminor
--
-unsigned int count
--
-const char *name
--
-const struct file_operations *fops
--
--[[linux-4.4.1/file_operations]]
**返り値 [#a307ffb7]
-int
--
**参考 [#adf5c706]
*実装 [#c7f0595f]
/**
* __register_chrdev() - create and register a cdev occu...
* @major: major device number or 0 for dynamic allocation
* @baseminor: first of the requested range of minor num...
* @count: the number of minor numbers required
* @name: name of this range of devices
* @fops: file operations associated with this devices
*
* If @major == 0 this functions will dynamically alloca...
* its number.
*
* If @major > 0 this function will attempt to reserve a...
* major number and will return zero on success.
*
* Returns a -ve errno on failure.
*
* The name of this device has nothing to do with the na...
* /dev. It only helps to keep track of the different ow...
* your module name has only one type of devices it's ok...
* of the module here.
*/
int __register_chrdev(unsigned int major, unsigned int b...
unsigned int count, const char *na...
const struct file_operations *fops)
{
struct char_device_struct *cd;
struct cdev *cdev;
int err = -ENOMEM;
-
--[[linux-4.4.1/char_device_struct]]
--[[linux-4.4.1/cdev]]
cd = __register_chrdev_region(major, baseminor, ...
if (IS_ERR(cd))
return PTR_ERR(cd);
-
--[[linux-4.4.1/__register_chrdev_region()]]
--[[linux-4.4.1/IS_ERR()]]
--[[linux-4.4.1/PTR_ERR()]]
cdev = cdev_alloc();
if (!cdev)
goto out2;
-
--[[linux-4.4.1/cdev_alloc()]]
cdev->owner = fops->owner;
cdev->ops = fops;
kobject_set_name(&cdev->kobj, "%s", name);
-
--[[linux-4.4.1/kobject_set_name()]]
err = cdev_add(cdev, MKDEV(cd->major, baseminor)...
if (err)
goto out;
-
--[[linux-4.4.1/cdev_add()]]
--[[linux-4.4.1/MKDEV()]]
cd->cdev = cdev;
return major ? 0 : cd->major;
out:
kobject_put(&cdev->kobj);
-
--[[linux-4.4.1/kobject_put()]]
out2:
kfree(__unregister_chrdev_region(cd->major, base...
return err;
-
--[[linux-4.4.1/kfree()]]
--[[linux-4.4.1/__unregister_chrdev_region()]]
}
*コメント [#a2039537]
終了行:
*参照元 [#q45d85cf]
#backlinks
*説明 [#we3e1abe]
-パス: [[linux-4.4.1/fs/char_dev.c]]
-FIXME: これは何?
--説明
**引数 [#ta6e64a9]
-unsigned int major
--
-unsigned int baseminor
--
-unsigned int count
--
-const char *name
--
-const struct file_operations *fops
--
--[[linux-4.4.1/file_operations]]
**返り値 [#a307ffb7]
-int
--
**参考 [#adf5c706]
*実装 [#c7f0595f]
/**
* __register_chrdev() - create and register a cdev occu...
* @major: major device number or 0 for dynamic allocation
* @baseminor: first of the requested range of minor num...
* @count: the number of minor numbers required
* @name: name of this range of devices
* @fops: file operations associated with this devices
*
* If @major == 0 this functions will dynamically alloca...
* its number.
*
* If @major > 0 this function will attempt to reserve a...
* major number and will return zero on success.
*
* Returns a -ve errno on failure.
*
* The name of this device has nothing to do with the na...
* /dev. It only helps to keep track of the different ow...
* your module name has only one type of devices it's ok...
* of the module here.
*/
int __register_chrdev(unsigned int major, unsigned int b...
unsigned int count, const char *na...
const struct file_operations *fops)
{
struct char_device_struct *cd;
struct cdev *cdev;
int err = -ENOMEM;
-
--[[linux-4.4.1/char_device_struct]]
--[[linux-4.4.1/cdev]]
cd = __register_chrdev_region(major, baseminor, ...
if (IS_ERR(cd))
return PTR_ERR(cd);
-
--[[linux-4.4.1/__register_chrdev_region()]]
--[[linux-4.4.1/IS_ERR()]]
--[[linux-4.4.1/PTR_ERR()]]
cdev = cdev_alloc();
if (!cdev)
goto out2;
-
--[[linux-4.4.1/cdev_alloc()]]
cdev->owner = fops->owner;
cdev->ops = fops;
kobject_set_name(&cdev->kobj, "%s", name);
-
--[[linux-4.4.1/kobject_set_name()]]
err = cdev_add(cdev, MKDEV(cd->major, baseminor)...
if (err)
goto out;
-
--[[linux-4.4.1/cdev_add()]]
--[[linux-4.4.1/MKDEV()]]
cd->cdev = cdev;
return major ? 0 : cd->major;
out:
kobject_put(&cdev->kobj);
-
--[[linux-4.4.1/kobject_put()]]
out2:
kfree(__unregister_chrdev_region(cd->major, base...
return err;
-
--[[linux-4.4.1/kfree()]]
--[[linux-4.4.1/__unregister_chrdev_region()]]
}
*コメント [#a2039537]
ページ名: