LINUX.ORG.RU

вопрос про initcall

 


0

1

задался я вопросом, как определить по исходному коду, что вот эта функция будет раньше вызвана, чем другая, которые находятся в сексции .initcall.init ядра? т.е. как определяется последовательность добавления указателей на функции через семейство макросов __initcall ?

Чем меньше номер, тем раньше вызывается initcall. В пределах одного номера правил нет, очередность зависит от того, как ядро слинкуется.

#define pure_initcall(fn)               __define_initcall("0",fn,0)
#define core_initcall(fn)               __define_initcall("1",fn,1)
#define core_initcall_sync(fn)          __define_initcall("1s",fn,1s)
#define postcore_initcall(fn)           __define_initcall("2",fn,2)
#define postcore_initcall_sync(fn)      __define_initcall("2s",fn,2s)
#define arch_initcall(fn)               __define_initcall("3",fn,3)
#define arch_initcall_sync(fn)          __define_initcall("3s",fn,3s)
#define subsys_initcall(fn)             __define_initcall("4",fn,4)
#define subsys_initcall_sync(fn)        __define_initcall("4s",fn,4s)
#define fs_initcall(fn)                 __define_initcall("5",fn,5)
#define fs_initcall_sync(fn)            __define_initcall("5s",fn,5s)
#define rootfs_initcall(fn)             __define_initcall("rootfs",fn,rootfs)
#define device_initcall(fn)             __define_initcall("6",fn,6)
#define device_initcall_sync(fn)        __define_initcall("6s",fn,6s)
#define late_initcall(fn)               __define_initcall("7",fn,7)
#define late_initcall_sync(fn)          __define_initcall("7s",fn,7s)
ttnl ★★★★★
()
Ответ на: комментарий от ttnl

спасибо за ответ, вопрос как раз и был, как слинкуются в пределах одного номера.

т.е. получается, что непонятно, как однозначно определить последовательноть вызова, кроме как посмотреть map файл?! а есть какая нибудь команда, которая легко и просто показала бы по адресам название функций, чтобы определить последовательность из vmlinux?

kabanchik
() автор топика
Ответ на: комментарий от kabanchik

В рамках одной директории порядок линковки зависит от порядка строк в Makefile. Смотри,например, коммент в файле drivers/md/Makefile:

# Note: link order is important.  All raid personalities
# and must come before md.o, as they each initialise 
# themselves, and md.o may use the personalities when it 
# auto-initialised.

Соответственно, то же самое с директориями, сначала полностью одна директория, потом полностью другая, и их порядок зависит от вышерасположенного Makefile.

На практике так, но полагаться на этот порядок не советую — дурной стиль. К тому же все может измениться в любой момент.

ttnl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.