记录一些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, 0) 26 27 bam_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ, 28 "slimbus_bam_irq"); 29 等价于: platform_get_resource(pdev, IORESOURCE_IRQ, 1)