Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программное обеспечение под *NIX системы > Извлечь заголовочные файлы


Автор: Majestio 21.6.2016, 09:55
Здравствуйте!

Пытаюсь освоить построение кросс-компиляторов вручную. Хостовая система - FreeBSD 10.3. Одним из шагов - нужно извлечь линуксовые заголовочные файлы. По http://www.kernel.org/doc/Documentation/kbuild/headers_install.txt это делается так:

Код
$ fetch https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.6.2.tar.xz
$ tar xf linux-4.6.2.tar.xz
$ cd linux-4.6.2
$ gmake headers_install ARCH=i386 INSTALL_HDR_PATH=$HOME/Work/test/i686-linux

Если использую "ARCH=arm", или "ARCH=arm64", или "ARCH=mips", то все проходит гладко. Если же как в коде выше, то получаю ошибки.

Первый запуск:

Код
majestio@freebsd:~/Dev/src/linux-4.6.2% gmake ARCH=i386 INSTALL_HDR_PATH=$HOME/Work/test/i386-linux headers_install
  CHK     include/generated/uapi/linux/version.h
  UPD     include/generated/uapi/linux/version.h
  HOSTCC  scripts/basic/fixdep
  WRAP    arch/x86/include/generated/asm/clkdev.h
  WRAP    arch/x86/include/generated/asm/cputime.h
  WRAP    arch/x86/include/generated/asm/dma-contiguous.h
  WRAP    arch/x86/include/generated/asm/early_ioremap.h
  WRAP    arch/x86/include/generated/asm/mcs_spinlock.h
  WRAP    arch/x86/include/generated/asm/mm-arch-hooks.h
  SYSTBL  arch/x86/entry/syscalls/../../include/generated/asm/syscalls_32.h
./arch/x86/entry/syscalls/syscalltbl.sh: ${entry:$...}: Bad substitution
arch/x86/entry/syscalls/Makefile:49: ошибка выполнения рецепта для цели «arch/x86/entry/syscalls/../../include/generated/asm/syscalls_32.h»
gmake[1]: *** [arch/x86/entry/syscalls/../../include/generated/asm/syscalls_32.h] Ошибка 2
arch/x86/Makefile:199: ошибка выполнения рецепта для цели «archheaders»
gmake: *** [archheaders] Ошибка 2

Последующие запуски:

Код
majestio@freebsd:~/Dev/src/linux-4.6.2% gmake ARCH=i386 INSTALL_HDR_PATH=$HOME/Work/test/i386-linux headers_install
  CHK     include/generated/uapi/linux/version.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_x32.h
  HOSTCC  arch/x86/tools/relocs_32.o
In file included from arch/x86/tools/relocs_32.c:1:0:
arch/x86/tools/relocs.h:13:22: fatal error: byteswap.h: No such file or directory
 #include <byteswap.h>
                      ^
compilation terminated.
scripts/Makefile.host:108: ошибка выполнения рецепта для цели «arch/x86/tools/relocs_32.o»
gmake[1]: *** [arch/x86/tools/relocs_32.o] Ошибка 1
arch/x86/Makefile:193: ошибка выполнения рецепта для цели «archscripts»
gmake: *** [archscripts] Ошибка 2

А кросскомпилятор для i686-pc-linux-gnu и x86_64-pc-linux-gnu под фрёй собрать хочется. Если есть мысли, прошу поделиться - как исправить ситуацию?

Автор: leniviy 22.6.2016, 11:17
Очевидно твой /bin/sh не может выполнить скрипт ./arch/x86/entry/syscalls/syscalltbl.sh . Попробуй открыть этот файл и посмотри 2 вещи

- первая строка, например: #!/bin/sh
- найди кусок, содержащий: ${entry:$...}. Мне не понятно, что конкретно они хотели заменить в переменной $entry.

Попробуй установить другой шелл в качестве /bin/sh , например bash. Не знаю, как это делается во FreeBSD

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Izvlech-zagolovochnyye-fayly-id5768e53fae20159c5d8b4567#findElement_E7045_576a49a0ae2015d215048d91_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)