linux驱动probe相关函数笔记

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探测到总线上的设备并把设备和
驱动建立连接以完成设备的初始化

你可能感兴趣的:(linux,String,struct,Class,Numbers,structure)