LINUX设备树的of_类的API寻找

linux设备树的of_类的API寻找
授人以鱼不如授人以渔,那么,拿人以鱼不如学人以渔

base
作用:基本api
文件:drivers/of/base.c基本的api
例子:

/**  在设备树的设备节点中通过name来寻找
 *    of_find_node_by_name - Find a node by its "name" property   
 *    @from:    The node to start searching from or NULL, the node
 *        you pass will not be searched, only the next one
 *        will; typically, you pass what the previous call
 *        returned. of_node_put() will be called on it
 *    @name:    The name string to match against
 *
 *    Returns a node pointer with refcount incremented, use
 *    of_node_put() on it when done.
 */
struct device_node *of_find_node_by_name(struct device_node *from,
    const char *name)
/** 在设备树的设备节点中通过path来寻找
 *    of_find_node_by_path - Find a node matching a full OF path
 *    @path:    The full path to match
 *
 *    Returns a node pointer with refcount incremented, use
 *    of_node_put() on it when done.
 */
struct device_node *of_find_node_by_path(const char *path)
/** 检查设备是否可用
 *  of_device_is_available - check if a device is available for use
 *
 *  @device: Node to check for availability
 *
 *  Returns 1 if the status property is absent or set to "okay" or "ok",
 *  0 otherwise
 */
int of_device_is_available(const struct device_node *device)
/** 读一个 u64 的整型变量
 * of_property_read_u64 - Find and read a 64 bit integer from a property
 * @np:        device node from which the property value is to be read.
 * @propname:    name of the property to be searched.
 * @out_value:    pointer to return value, modified only if return value is 0.
 *
 * Search for a property in a device node and read a 64-bit value from
 * it. Returns 0 on success, -EINVAL if the property does not exist,
 * -ENODATA if property does not have a value, and -EOVERFLOW if the
 * property data isn't large enough.
 *
 * The out_value is modified only if a valid u64 value can be decoded.
 */
int of_property_read_u64(const struct device_node *np, const char *propname,
             u64 *out_value)
/** 读字符串变量
 * of_property_read_string - Find and read a string from a property
 * @np:        device node from which the property value is to be read.
 * @propname:    name of the property to be searched.
 * @out_string:    pointer to null terminated return string, modified only if
 *        return value is 0.
 *
 * Search for a property in a device tree node and retrieve a null
 * terminated string value (pointer to data, not a copy). Returns 0 on
 * success, -EINVAL if the property does not exist, -ENODATA if property
 * does not have a value, and -EILSEQ if the string is not null-terminated
 * within the length of the property data.
 *
 * The out_string pointer is modified only if a valid string can be decoded.
 */
int of_property_read_string(struct device_node *np, const char *propname,
                const char **out_string)


address
作用:与地址有关的操作
文件:drivers/of/address.c
例子:

/** 内存映射
 * of_iomap - Maps the memory mapped IO for a given device_node
 * @device:    the device whose io range will be mapped
 * @index:    index of the io range
 *
 * Returns a pointer to the mapped memory
 */
void __iomem *of_iomap(struct device_node *np, int index)
/**
 * of_address_to_resource - Translate device tree address and return as resource
 *
 * Note that if your address is a PIO address, the conversion will fail if
 * the physical address can't be internally converted to an IO token with
 * pci_address_to_pio(), that is because it's either called to early or it
 * can't be matched to any host bridge IO space
 */
int of_address_to_resource(struct device_node *dev, int index,
               struct resource *r)


device
作用:与设备有关的操作
文件:drviers/of/device.c

/**
 * of_match_device - Tell if a struct device matches an of_device_id list
 * @ids: array of of device match structures to search in
 * @dev: the of device structure to match against
 *
 * Used by a driver to check whether an platform_device present in the
 * system is in its list of supported devices.
 */
const struct of_device_id *of_match_device(const struct of_device_id *matches,
                       const struct device *dev)


fdt
作用:用来处理设备树(Flattened Device Tree)的数据格式
文件:drviers/of/fdt.c

/**
 * of_fdt_is_compatible - Return true if given node from the given blob has
 * compat in its compatible list
 * @blob: A device tree blob
 * @node: node to test
 * @compat: compatible string to compare with compatible list.
 *
 * On match, returns a non-zero value with smaller values returned for more
 * specific compatible values.
 */
int of_fdt_is_compatible(struct boot_param_header *blob,
              unsigned long node, const char *compat)


irq
作用:处理中断操作
文件:drviers/of/irq.c

/**
 * of_irq_init - Scan and init matching interrupt controllers in DT
 * @matches: 0 terminated array of nodes to match and init function to call
 *
 * This function scans the device tree for matching interrupt controller nodes,
 * and calls their initialization functions in order with parents first.
 */
void __init of_irq_init(const struct of_device_id *matches)
/**
 * of_irq_count - Count the number of IRQs a node uses
 * @dev: pointer to device tree node
 */
int of_irq_count(struct device_node *dev)


另外一些
以上只是举例,不代表最重要,还有一些其他的操作,全部在路径drivers/of下面
有:i2c处理相关、mtd处理相关、网络相关、pci相关、平台相关等。

罗列一下:

address.c
base.c
device.c
fdt.c
irq.c
of_i2c.c
of_mdio.c
of_mtd.c
of_net.c
of_pci.c
of_pci_irq.c
platform.c


总结
找对方向,一切都好说

发布了56 篇原创文章 · 获赞 37 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/weixin_42096901/article/details/103532151