Рейтинг:0

Ядро make генерирует "ld: arch/x86/entry/syscall_64.o:(.rodata+0xdc0): ​​неопределенная ссылка на `__x64_sys_s_enable'"

флаг hu

ОС — Ubuntu 20.10. Источник ядра: linux_5.8.0-59.66.

Я переношу модификации ядра с Centos 7 Rhel 7.9 на Ubuntu.

Исходный немодифицированный исходный код ядра Ubuntu компилируется и работает на этой машине без ошибок. Настройка компилятора, кажется, работает правильно.

Моя текущая проблема связана с системным вызовом, который я добавил. Генерируемая ошибка -

LD .tmp_vmlinux.btf
ld: arch/x86/entry/syscall_64.o:(.rodata+0xdc0): ​​неопределенная ссылка на `__x64_sys_s_enable'
BTF .btf.vmlinux.bin.o    
Ошибка сегментации (дамп ядра)
LD .tmp_vmlinux.kallsyms1
.btf.vmlinux.bin.o: файл не распознан: формат файла не распознан
make: *** [Makefile:1163: vmlinux] Ошибка 1

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

Вот шаги, которые я использовал для добавления системного вызова, который изначально работал на Centos 7 и RHEL 7.9.

Модифицирован /SOURCE-DIRECTORY/include/linux/syscalls.h, закомментировав исходную строку и добавив ссылку на __64 (включая пустую строку над ней) -

asmlinkage длинный __64_sys_s_enable (int s_enable_flag);
// asmlinkage long sys_s_enable(int s_enable_flag);

Изменен /SOURCE-DIRECTORY/arch/x86/include/asm/syscalls.h добавление -

# ДОБАВЛЕНИЕ СИСТЕМНОГО ВЫЗОВА
440 64 s_enable sys_s_enable

Поля разделены клавишей TAB, и я не добавлял пустых строк.

Создал исходный каталог и файлы - /SOURCE-DIRECTORY/s_enable, содержащий s_enable.c. s_enable.c в целом

#include <linux/kernel.h>
внешний интервал s_enable_flag;

asmlinkage длинный sys_s_enable (int i)
{
// printk(KERN_INFO "В ИСХОДНОМ SYSCALL s_enable\n");
         s_enable_flag = я;
         вернуть 0;
}

И добавил соответствующий каталог системных вызовов в Makefile.

core-y += ядро/сертификаты/mm/fs/ipc/security/crypto/block/s_enable/

И запустил "sudo make".

Я не уверен, что я могу делать неправильно в том, что «make» работает с исходным кодом ядра, а системный вызов, который я пытаюсь добавить, работал на других упомянутых дистрибутивах.

Спасибо за любой вклад, который вы можете предоставить.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.