内核版本2.6.34.6
/* Callbacks for bus specific translators */ 50struct of_bus { 51 const char *name; 52 const char *addresses; 53 int (*match)(struct device_node *parent); 54 void (*count_cells)(struct device_node *child, 55 int *addrc, int *sizec); 56 u64 (*map)(u32 *addr, const u32 *range, 57 int na, int ns, int pna); 58 int (*translate)(u32 *addr, u64 offset, int na); 59 unsigned int (*get_flags)(const u32 *addr); 60};
一直奇怪addresses是啥,网上也没有对这个机构的介绍,今天递归查找别的函数的时候,偶然看到内核有
373 * Array of bus specific translators 374 */ 375 376static struct of_bus of_busses[] = { 377#ifdef CONFIG_PCI
378 /* PCI */ 379 { 380 .name = "pci", 381 .addresses = "assigned-addresses", 382 .match = of_bus_pci_match, 383 .count_cells = of_bus_pci_count_cells, 384 .map = of_bus_pci_map, 385 .translate = of_bus_pci_translate, 386 .get_flags = of_bus_pci_get_flags, 387 }, 388#endif /* CONFIG_PCI */ 389 /* ISA */ 390 { 391 .name = "isa", 392 .addresses = "reg", 393 .match = of_bus_isa_match, 394 .count_cells = of_bus_isa_count_cells, 395 .map = of_bus_isa_map, 396 .translate = of_bus_isa_translate, 397 .get_flags = of_bus_isa_get_flags, 398 }, 399 /* Default */ 400 { 401 .name = "default", 402 .addresses = "reg", 403 .match = NULL, 404 .count_cells = of_bus_default_count_cells, 405 .map = of_bus_default_map, 406 .translate = of_bus_default_translate, 407 .get_flags = of_bus_default_get_flags, 408 }, 409};
懂了...
正在整理函数of_address_to_resource的原理。等整理清楚了会贴上了,希望能整理清楚