LINUX.ORG.RU

Видимость функций

 ,


0

2

OpenWrt: в ядре есть cfg80211, скомпилен как модуль ядра, так же есть драйвер который скомпилен как модуль ядра. Необходимо сделать так, что бы драйвер видел функции модуля cfg80211. Как сделать?

Ответ на: комментарий от anonymous

«Unknown symbol» с названием функции при загрузке модуля ядра.

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

первым делом попробовал, но почему то не помогло.

С функциями из ядра, работает нормально. А вот с функцией из модуля ядра (cfg80211) такой фокус не прошел.

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

depmod ты, конечно же, делал? Или тоже на лоровских какеров понадеялся?

anonymous
()

Во-первых, собирай модуль правильно, чтобы modprobe отрабатывал. Проверь, что cfg80211 загружен.
Во-вторых, проверь конфигу ядра - возможно, cfg80211 целиком или какие-то функции, которые ты вызываешь не компилируются.
В-третьих, EXPORT_SYMBOL.

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

модуль cfg80211 скомпилирован корректно, включая файл и «проблемную функцию». функция так же экспортирована через EXPORT_SYMBOL. модуль cfg80211 загружается корректно.

далее загружается мой модуль ядра (драйвер), который тянет эту самую функцию, но … unknown symbol, как раз на modprobe

сдаётся мне, EXPORT_SYMBOL экспортирует функции только из ядра, а из модуля ядра нет. или я не прав?

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

Функцию из cfg80211 ты доэкпортировал или она уже была экспортирована? Если первое, то ты depmod сделал после того, как подсунул свой хакнутый cfg80211?

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

функцию доэкспортировал сам. можно подробнее что за depmod, и как его сделать? напомню, сборка OpenWrt. с видимостью функций в ядре из модулей проблем нет.

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

хм……

reg_get_dfs_region - та самая функция

root@OpenWrt:/# cat /proc/kallsyms | grep reg_get_dfs_region

832075a8 t reg_get_dfs_region [cfg80211]

однако..

[ 17.753551] rtl8192cd: Unknown symbol reg_get_dfs_region (err 0)

[ 17.849146] rtl8192cd: Unknown symbol reg_get_dfs_region (err 0)

k000858
() автор топика
Последнее исправление: k000858 (всего исправлений: 1)
Ответ на: комментарий от k000858

Module.symvers найден один на всю директорию ядра и в ней этой самой функции не обнаружено…

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

да нет же, иначе все сломалось бы еще на этапе сборки (компиляции)

вот собсна сама функция https://elixir.bootlin.com/linux/v4.14.136/ident/reg_get_dfs_region

как видите, есть и прототип и сама функция, без всяких статиков. Я лишь добавил EXPORT_SYMBOL(reg_get_dfs_region); в сишнике под функцией, как это делал и раньше. Но не помогло…в связи с чем собсна и вопрос..

k000858
() автор топика
Последнее исправление: k000858 (всего исправлений: 1)
Ответ на: комментарий от k000858

man depmod

Там читать немного, в т.ч. и о том, что modules.symbols сам не обновится и лоровские какеры тебе его не обновят.

anonymous
()
Ответ на: комментарий от cherry_boy

конечно сделал, иначе оно бы даже не скомпилировалось

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