linux-2.6.33/__register_chrdev()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#t07b9271]
#backlinks
*説明 [#ga1ecee9]
-パス: [[linux-2.6.33/fs/char_dev.c]]
-FIXME: これは何?
--説明
**引数 [#c55b4bfd]
-unsigned int major
--
-unsigned int baseminor
--
-unsigned int count
--
-const char *name
--
-const struct file_operations *fops
--
--[[linux-2.6.33/file_operations]]
**返り値 [#sab63e11]
-int
--major に 0 を指定(自動的に割り当て)したとき、
成功時はデバイスのメジャー番号が返ります。
major に 0 以外を指定(明示的に割り当て)したとき、
成功時は 0 が返ります。
いずれも失敗したときは負のエラー番号が返ります。
**参考 [#v5fac2b0]
*実装 [#kda7cf99]
/**
* __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 *name,
const struct file_operations *fops)
{
struct char_device_struct *cd;
struct cdev *cdev;
int err = -ENOMEM;
-
--[[linux-2.6.33/char_device_struct]]
-
--[[linux-2.6.33/cdev]]
-
--[[linux-2.6.33/ENOMEM]]
cd = __register_chrdev_region(major, baseminor, count, ...
if (IS_ERR(cd))
return PTR_ERR(cd);
-
--[[linux-2.6.33/__register_chrdev_region()]]
-
--[[linux-2.6.33/IS_ERR()]]
-
--[[linux-2.6.33/PTR_ERR()]]
cdev = cdev_alloc();
if (!cdev)
goto out2;
-
--[[linux-2.6.33/cdev_alloc()]]
cdev->owner = fops->owner;
cdev->ops = fops;
kobject_set_name(&cdev->kobj, "%s", name);
-
--[[linux-2.6.33/kobject_set_name()]]
err = cdev_add(cdev, MKDEV(cd->major, baseminor), count);
if (err)
goto out;
-
--[[linux-2.6.33/cdev_add()]]
-
--[[linux-2.6.33/MKDEV()]]
cd->cdev = cdev;
return major ? 0 : cd->major;
out:
kobject_put(&cdev->kobj);
-
--[[linux-2.6.33/kobject_put()]]
out2:
kfree(__unregister_chrdev_region(cd->major, baseminor, ...
return err;
-
--[[linux-2.6.33/kfree()]]
}
*コメント [#f3d7e97f]
終了行:
*参照元 [#t07b9271]
#backlinks
*説明 [#ga1ecee9]
-パス: [[linux-2.6.33/fs/char_dev.c]]
-FIXME: これは何?
--説明
**引数 [#c55b4bfd]
-unsigned int major
--
-unsigned int baseminor
--
-unsigned int count
--
-const char *name
--
-const struct file_operations *fops
--
--[[linux-2.6.33/file_operations]]
**返り値 [#sab63e11]
-int
--major に 0 を指定(自動的に割り当て)したとき、
成功時はデバイスのメジャー番号が返ります。
major に 0 以外を指定(明示的に割り当て)したとき、
成功時は 0 が返ります。
いずれも失敗したときは負のエラー番号が返ります。
**参考 [#v5fac2b0]
*実装 [#kda7cf99]
/**
* __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 *name,
const struct file_operations *fops)
{
struct char_device_struct *cd;
struct cdev *cdev;
int err = -ENOMEM;
-
--[[linux-2.6.33/char_device_struct]]
-
--[[linux-2.6.33/cdev]]
-
--[[linux-2.6.33/ENOMEM]]
cd = __register_chrdev_region(major, baseminor, count, ...
if (IS_ERR(cd))
return PTR_ERR(cd);
-
--[[linux-2.6.33/__register_chrdev_region()]]
-
--[[linux-2.6.33/IS_ERR()]]
-
--[[linux-2.6.33/PTR_ERR()]]
cdev = cdev_alloc();
if (!cdev)
goto out2;
-
--[[linux-2.6.33/cdev_alloc()]]
cdev->owner = fops->owner;
cdev->ops = fops;
kobject_set_name(&cdev->kobj, "%s", name);
-
--[[linux-2.6.33/kobject_set_name()]]
err = cdev_add(cdev, MKDEV(cd->major, baseminor), count);
if (err)
goto out;
-
--[[linux-2.6.33/cdev_add()]]
-
--[[linux-2.6.33/MKDEV()]]
cd->cdev = cdev;
return major ? 0 : cd->major;
out:
kobject_put(&cdev->kobj);
-
--[[linux-2.6.33/kobject_put()]]
out2:
kfree(__unregister_chrdev_region(cd->major, baseminor, ...
return err;
-
--[[linux-2.6.33/kfree()]]
}
*コメント [#f3d7e97f]
ページ名: