记录一些Linux Device Drivers中常用的API。

Linux官方提供的内核文档:

1、 最新版: https://www.kernel.org/doc/html/latest/

2、 4.10: https://www.kernel.org/doc/html/v4.10/

3、 Understanding the Linux Virtual Memory Manager 或者查看PDF版本


一、内存分配

1.    void *devm_kmalloc(struct device *dev, size_t size, gfp_t gfp)

2、 void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp)

3、 void devm_kfree(struct device *dev, void *p)

4、 struct resource *platform_get_resource(struct platform_device *dev, unsigned int type, unsigned int num)
5、 int platform_get_irq(struct platform_device *dev, unsigned int num)
6、 struct resource *platform_get_resource_byname(struct platform_device *dev, unsigned int type, const char *name)
7、 int platform_get_irq_byname(struct platform_device *dev, const char *name)
示例(4、5、6、7几个API的调用):

 1 设备树:
 2         reg = <0x15240000 0x2c000>,
 3             <0x15204000 0x20000>;
 4         reg-names = "slimbus_physical", "slimbus_bam_physical";
 5         interrupts = <0 291 0>, <0 292 0>;
 6         interrupt-names = "slimbus_irq", "slimbus_bam_irq";
 7 
 8 驱动:
 9 
10     struct resource        *bam_mem;
11     struct resource        *slim_mem;
12     struct resource        *irq, *bam_irq;
13 
14 
15     slim_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
16                         "slimbus_physical");
17         等价于: platform_get_resource(pdev, IORESOURCE_MEM, 0)
18 
19     bam_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
20                         "slimbus_bam_physical");
21         等价于: platform_get_resource(pdev, IORESOURCE_MEM, 1)
22 
23     irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
24                         "slimbus_irq");
25         等价于: platform_get_resource(pdev, IORESOURCE_IRQ, 026 
27     bam_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
28                         "slimbus_bam_irq");
29         等价于: platform_get_resource(pdev, IORESOURCE_IRQ, 1
View Code

相关文章: