Вопрос или проблема
В данный момент я пытаюсь скомпилировать заголовки в Jammy Jellyfish, и сталкиваюсь со следующей ошибкой:
/usr/src/linux-headers-5.15.0-25-generic$ sudo make
SYNC include/config/auto.conf.cmd
make[1]: *** Нет правила для создания цели 'arch/x86/entry/syscalls/syscall_32.tbl', необходимой для 'arch/x86/include/generated/uapi/asm/unistd_32.h'. Остановка.
make: *** [arch/x86/Makefile:213: archheaders] Ошибка 2
Перед запуском команды make я скопировал старый файл .config /boot/config-5.15.0-25-generic в файл .config в /usr/src/linux-headers-5.15.0-25-generic/
Я видел несколько сообщений, где возникала эта ошибка, но не видел никаких ответов, которые бы решали проблему. Если потребуется больше информации, пожалуйста, дайте знать.
Спасибо
Мне удалось сформулировать решение, опубликованное здесь https://stackoverflow.com/questions/39107811/no-rule-to-make-target-arch-x86-entry-syscalls-syscall-32-tbl-needed-by-arch
Я попытался собрать модуль ядра HP PC для Linux Mint Vanessa. Первое, что нужно сделать – удалить все пробелы из пути к папке, в которой вы собираетесь (если они есть). Я также пробовал собрать его на своем компьютере с Debian для тестирования. Вот мои сборки, надеюсь, это поможет. Отредактируйте Makefile вашего проекта.
Debian/Mint: оригинал
#
# Makefile для загружаемого модуля ядра hpuefi
#
KVERS:=$(shell uname -r)
KSRC:=/lib/modules/$(KVERS)/build
KDIR:=/lib/modules/$(KVERS)/kernel/drivers/misc
DESTDIR:=
TARGET=hpuefi
obj-m:=$(TARGET).o
default:
$(MAKE) -C $(KSRC) SUBDIRS=$(PWD) modules
clean:
$(RM) .*.cmd *.mod.c *.o *.ko *.order *.symvers -r .tmp*
install:
install -D -m 0644 $(TARGET).ko $(DESTDIR)$(KDIR)/$(TARGET).ko
Debian до
user@machine:/media/user/usbdisk/SP58029/hpuefi-mod-1.0.3-deb$ make
make -C /lib/modules/5.10.0-19-amd64/build SUBDIRS=/media/user/usbdisk/SP58029/hpuefi-mod-1.0.3-deb modules
make[1]: Вход в каталог '/usr/src/linux-headers-5.10.0-19-amd64'
/usr/src/linux-headers-5.10.0-19-common/Makefile:225: =============== ОШИБКА ==============
/usr/src/linux-headers-5.10.0-19-common/Makefile:226: 'SUBDIRS' было удалено в Linux 5.3
/usr/src/linux-headers-5.10.0-19-common/Makefile:227: Используйте 'M=' или 'KBUILD_EXTMOD=' вместо
/usr/src/linux-headers-5.10.0-19-common/Makefile:228: ====================================
/usr/src/linux-headers-5.10.0-19-common/Makefile:229: *** .. Остановка.
make[1]: *** [/usr/src/linux-headers-5.10.0-19-common/Makefile:185: __sub-make] Ошибка 2
make[1]: Выхожу из каталога '/usr/src/linux-headers-5.10.0-19-amd64'
make: *** [Makefile:13: default] Ошибка 2
Исправление Debian
default:
$(MAKE) -C $(KSRC) M=$(PWD) modules
Linux Mint до
mint@mint:/media/mint/DAC4798DC4796D1F/swsetup/SP58029/HP_Utilities_for_Linux/hpuefi-mod-1.0.3$ sudo make
make -C /lib/modules/5.15.0-41-generic/build M= modules
make[1]: Вход в каталог '/usr/src/linux-headers-5.15.0-41-generic'
make[2]: *** Нет правила для создания цели 'arch/x86/entry/syscalls/syscall_32.tbl', необходимой для 'arch/x86/include/generated/uapi/asm/unistd_32.h'. Остановка.
make[1]: *** [arch/x86/Makefile:213: archheaders] Ошибка 2
make[1]: Выхожу из каталога '/usr/src/linux-headers-5.15.0-41-generic'
make: *** [Makefile:13: default] Ошибка 2
Исправление Linux Mint:
default:
$(MAKE) -C $(KSRC) M=$(shell pwd) modules
Ответ или решение
При компиляции заголовков в Ubuntu Jammy Jellyfish может возникнуть ошибка, похожая на следующую:
make[1]: *** No rule to make target 'arch/x86/entry/syscalls/syscall_32.tbl', needed by 'arch/x86/include/generated/uapi/asm/unistd_32.h'. Stop.
make: *** [arch/x86/Makefile:213: archheaders] Error 2
Эта ошибка возникает, когда система не может найти определённый файл, который требуется для компиляции: в данном случае syscall_32.tbl
. Возможно, не установлены необходимые заголовки или не выполнены шаги по конфигурации проекта. Вот несколько рекомендаций для решения данной проблемы.
1. Проверка наличия необходимых пакетов
Первый шаг — убедитесь, что у вас установлены все необходимые инструменты для сборки. Используйте следующую команду для установки необходимых пакетов:
sudo apt update
sudo apt install build-essential linux-headers-$(uname -r)
2. Копирование конфигурации
Вы упомянули, что вы скопировали .config
файл из /boot/config-5.15.0-25-generic
. Убедитесь, что ваш файл конфигурации корректный. Попробуйте обновить конфигурацию с помощью следующей команды:
make oldconfig
3. Обновление Makefile
Согласно вашему описанию, ошибка может также возникать из-за того, что ваша версия Makefile
устарела. Если в старых версиях использовался параметр SUBDIRS
, начиная с версии 5.3, он был удален, и теперь следует использовать:
default:
$(MAKE) -C $(KSRC) M=$(PWD) modules
4. Проверка структуры директорий
Если в пути к директории, где вы работаете, есть пробелы или специальные символы, это также может быть причиной проблемы. Убедитесь, что путь к директории не содержит пробелов и других проблемных символов.
5. Переход к основному каталогу заголовков
Проверьте, находитесь ли вы в правильной директории с заголовками. Чтобы избежать конфликтов, переходите в каталог заголовков, например:
cd /usr/src/linux-headers-$(uname -r)
Попробуйте снова запустить make
.
6. Сборка модуля
Если вы хотите собрать модуль ядра, вы можете использовать следующий Makefile в вашем проекте:
#
# Makefile for hpuefi loadable kernel module
#
KVERS:=$(shell uname -r)
KSRC:=/lib/modules/$(KVERS)/build
KDIR:=/lib/modules/$(KVERS)/kernel/drivers/misc
DESTDIR:=
TARGET=hpuefi
obj-m:=$(TARGET).o
default:
$(MAKE) -C $(KSRC) M=$(PWD) modules
clean:
$(RM) .*.cmd *.mod.c *.o *.ko *.order *.symvers -r .tmp*
install:
install -D -m 0644 $(TARGET).ko $(DESTDIR)$(KDIR)/$(TARGET).ko
Заключение
При возникновении проблемы с компиляцией заголовков в Ubuntu Jammy Jellyfish важно тщательно проверять все вышеперечисленные аспекты. Следуя этим рекомендациям, вы сможете устранить большинство ошибок компиляции. Если проблема по-прежнему сохраняется, возможно, вам стоит обратиться за помощью в специализированные форумы или документацию Linux.