class_create()
-------------------------------------------------
linux-2.6.22/include/linux/device.h
struct class *class_create(struct module *owner, const char *name)
class_create - create a struct class structure
@owner: pointer to the module that is to "own" this struct class
@name: pointer to a string for the name of this class.
在/sys/class/下创建类目录
class_device_create()
-------------------------------------------------
linux-2.6.22/include/linux/device.h
struct class_device *class_device_create(struct class *cls,
struct class_device *parent,
dev_t devt,
struct device *device,
const char *fmt, ...)
class_device_create - creates a class device and registers it with sysfs
@cls: pointer to the struct class that this device should be registered to.
@parent: pointer to the parent struct class_device of this new device, if any.
@devt: the dev_t for the char device to be added.
@device: a pointer to a struct device that is assiociated with this class device.
@fmt: string for the class device's name
cdev_init() — initialize a cdev structure
-------------------------------------------------
linux-2.6.22/include/linux/cdev.h
void cdev_init (struct cdev *cdev,
const struct file_operations *fops);
@cdev: the structure to initialize
@fops: the file_operations for this device
Initializes cdev, remembering fops, making it ready to add to the system with cdev_add.
cdev_add() — add a char device to the system
-------------------------------------------------
linux-2.6.22/include/linux/cdev.h
int cdev_add (struct cdev * p,
dev_t dev,
unsigned count);
@p: the cdev structure for the device
@dev: the first device number for which this device is responsible
@count: the number of consecutive minor numbers corresponding to this device
cdev_add() adds the device represented by @p to the system, making it live immediately. A negative error code is returned on failure.
alloc_chrdev_region() — register a range of char device numbers
-------------------------------------------------
linux-2.6.22/include/linux/cdev.h
int alloc_chrdev_region(dev_t *dev,
unsigned int baseminor,
unsigned int count,
char *name)
@dev: output parameter for first assigned number
@baseminor: first of the requested range of minor numbers(次设备号)
@count: the number of minor numbers required
@name: the name of the associated device or driver
Allocates a range of char device numbers. The major number will be chosen dynamically, and returned (along with the first minor number) in dev. Returns zero or a negative error code.使用alloc_chrdev_region()函数动态获取主设备号。
device_create - creates a device and registers it with sysfs
* @class: pointer to the struct class that this device should be registered to
* @parent: pointer to the parent struct device of this new device, if any
* @devt: the dev_t for the char device to be added
* @drvdata: the data to be added to the device for callbacks
* @fmt: string for the device's name
I2C的设备驱动是通过i2c_add_driver(&my_driver)向i2c-core注册的,my_driver中的核心是detach和attach函数,在attach中通过probe探测到总线上的设备并把设备和
驱动建立连接以完成设备的初始化