#linux #arm #cross-compiling
#linux #arm #кросс-компиляция
Вопрос:
Я пытаюсь создать модуль вне ядра и выполнить его кросс-компиляцию. Итак, я работаю над виртуальной машиной, Ubuntu, и я обновил работающее ядро до 5.15.6.
Теперь я пытаюсь скомпилировать мой очень простой модуль «Hello world». Его Makefile просто:
obj-m = yanivModule.o
и команда сборки:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -C /lib/modules/5.15.6/build/ M=$PWD modules
и я продолжаю сталкиваться с этим сообщением об ошибке:
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘-mrecord-mcount’; did you mean ‘-frecord-marker=4’?
Кто-нибудь знает, что означает «-mrecord-mcount», как это исправить?
Я попытался отключить флаг конфигурации «CONFIG_FTRACE_MCOUNT_RECORD» и «CONFIG_HAVE_FTRACE_MCOUNT_RECORD», поскольку я где-то читал, что это может быть связано (и по имени это действительно может быть), но это не решило ошибку.
Я как бы теряюсь здесь, поскольку в обучающем видео, за которым я следую, это делается вообще без проблем.
Обновление: мне удалось устранить проблему, но я не уверен, почему она была исправлена таким образом, и почему способ, который я описал ранее, не сработал. Я загрузил ядро платы beaglebone с github: https://github.com/beagleboard/linux/tree/5.10 а затем построил его с помощью:
make ARCH=arm bb.org_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- C /home/.../beaglebone-linux-5.10/ M=$PWD modules
и только тогда сборка модуля, когда -C — это новое загруженное дерево ядра, прошла успешно без проблем.
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -C /home/.../beaglebone-linux-5.10/ M=$PWD modules
Итак, теперь у меня осталось 2 вопроса:
- Что, шаг исправил проблему и чего не хватало в предыдущем способе, который я пробовал? использовался ли файл конфигурации bb.org_defconfig?
- Почему этот конфигурационный файл bb.org_defconfig отсутствует в последнем дереве исходных текстов ядра Linux?