Hi, Le Sun, 16 Mar 2008 00:57:00 +0800, "Peter Teoh" <htmldeveloper@xxxxxxxxx> a écrit : > may be....where is it?? i will continue the search....thank you for > the feedback. Everything starts in sys_init_module() http://lxr.free-electrons.com/source/kernel/module.c#2090 It starts by loading the module using load_module() http://lxr.free-electrons.com/source/kernel/module.c#1650 Which at some points, calls layout_sections(), which computes mod->init_size: 1487 for (m = 0; m < ARRAY_SIZE(masks); ++m) { 1488 for (i = 0; i < hdr->e_shnum; ++i) { 1489 Elf_Shdr *s = &sechdrs[i]; 1490 1491 if ((s->sh_flags & masks[m][0]) != masks[m][0] 1492 || (s->sh_flags & masks[m][1]) 1493 || s->sh_entsize != ~0UL 1494 || strncmp(secstrings + s->sh_name, 1495 ".init", 5) != 0) 1496 continue; 1497 s->sh_entsize = (get_offset(&mod->init_size, s) 1498 | INIT_OFFSET_MASK); 1499 DEBUGP("\t%s\n", secstrings + s->sh_name); 1500 } 1501 if (m == 0) 1502 mod->init_text_size = mod->init_size; 1503 } This loop has the effect of adding in mod->init_size the size of all ELF sections whose name starts with .init. So in load_module(), after the call to layout_sections(), mod->init_size is the size of .init.text + init.data + others .init sections. Back in load_module(), it does: 1852 ptr = module_alloc(mod->init_size); 1853 if (!ptr && mod->init_size) { 1854 err = -ENOMEM; 1855 goto free_core; 1856 } 1857 memset(ptr, 0, mod->init_size); 1858 mod->module_init = ptr; So it allocates a specific memory area for init code and data, which is pointed by mod->module_init. Then, if you look back in sys_init_module(), you see that the init function of the module is called: 2125 if (mod->init != NULL) 2126 ret = mod->init(); And if everything went right during the initialization, the following line is executed: 2145 module_free(mod, mod->module_init); Which frees the init code and data. Sincerly, Thomas -- Thomas Petazzoni, Free Electrons Free Embedded Linux Training Materials on http://free-electrons.com/training (More than 1500 pages!)
Attachment:
signature.asc
Description: PGP signature