LINUX.ORG.RU

Нужно извлечь заголовочные файлы

 , ,


1

2

Здравствуйте!

Пытаюсь освоить построение кросс-компиляторов вручную. Хостовая система - FreeBSD 10.3. Одним из шагов - нужно извлечь линуксовые заголовочные файлы. По данному мануалу это делается так:

$ 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 под фрёй собрать хочется. Если есть мысли, прошу поделиться - как исправить?

По первой ошибке: кажись нужно чтоб /bin/sh был симлинком на /usr/local/bin/bash

По второй: попробуй явно задать компилятор CC=gcc48

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

По первой ошибке: кажись нужно чтоб /bin/sh был симлинком на /usr/local/bin/bash
По второй: попробуй явно задать компилятор CC=gcc48

Попробовал - вообще без изменений :(

Majestio
() автор топика

byteswap.h - glibc же
Попробуй в jail загнать Debian/kFreeBSD, там глибц вроде-бы
Там и собирай компилятор

mystery ★★
()
Ответ на: комментарий от Majestio

удали все и начни снова
Тебе нужно собрать из БСД софт под линукс
Собирай из фрибсд стандартным gcc/clang, а во время линковки укажи нужный ELF
Поправьте, если я что-то путаю

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

byteswap.h - glibc же
Попробуй в jail загнать Debian/kFreeBSD, там глибц вроде-бы
Там и собирай компилятор

Такое мне не надо. У меня и Funtoo Linux есть. Вопрос в другом - процесс сборки нативного компилятора, в данном случае под FreeBSD 10.3

удали все и начни снова
Тебе нужно собрать из БСД софт под линукс
Собирай из фрибсд стандартным gcc/clang, а во время линковки укажи >нужный ELF
Поправьте, если я что-то путаю

У меня все собирается. Но для компиляции стандартных либ под нужный таргет - нужно вытянуть заголовки. Собственно это и есть вопрос темы. Вечером попробую не для i686/x86_68 собрать тулчейны, а к примеру для arm64. Вангую, на 78% что получится, ибо, как я указал выше, для этой платформы заголовки вытягиваются «на-ура».

Вот, почитай, не это ли тебе надо?

Это не надо. «Поделок» для кросс-компиляции, типа crosstools-ng, ellcc в сети достаточно. Я же преследую иную цель - понять как это работает, заточить под себя и не зависеть от разработчиков последнего.

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

нативного компилятора

вернее нативного кросскомпилятора и обязательно со стандартными либами

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

И да ... под Linux Funtoo такой проблемы нет:

majestio@funtoo ~/Dev/src/linux-4.6.2 $ make headers_install ARCH=i386 INSTALL_HDR_PATH=$HOME/Work/test/i686-linux
  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
  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
  HOSTCC  arch/x86/tools/relocs_64.o
  HOSTCC  arch/x86/tools/relocs_common.o
  HOSTLD  arch/x86/tools/relocs
  HOSTCC  scripts/unifdef
  INSTALL include/asm-generic (35 files)
  INSTALL include/drm (21 files)
  INSTALL include/linux/android (1 file)
  INSTALL include/linux/byteorder (2 files)
  INSTALL include/linux/caif (2 files)
  INSTALL include/linux/can (5 files)
  INSTALL include/linux/dvb (8 files)
  INSTALL include/linux/hdlc (1 file)
  INSTALL include/linux/hsi (2 files)
  INSTALL include/linux/iio (2 files)
  INSTALL include/linux/isdn (1 file)
  INSTALL include/linux/mmc (1 file)
  INSTALL include/linux/netfilter/ipset (4 files)
  INSTALL include/linux/netfilter (85 files)
  INSTALL include/linux/netfilter_arp (2 files)
  INSTALL include/linux/netfilter_bridge (17 files)
  INSTALL include/linux/netfilter_ipv4 (9 files)
  INSTALL include/linux/netfilter_ipv6 (12 files)
  INSTALL include/linux/nfsd (5 files)
  INSTALL include/linux/raid (2 files)
  INSTALL include/linux/spi (1 file)
  INSTALL include/linux/sunrpc (1 file)
  INSTALL include/linux/tc_act (12 files)
  INSTALL include/linux/tc_ematch (4 files)
  INSTALL include/linux/usb (11 files)
  INSTALL include/linux/wimax (1 file)
  INSTALL include/linux (427 files)
  INSTALL include/misc (1 file)
  INSTALL include/mtd (5 files)
  INSTALL include/rdma/hfi (1 file)
  INSTALL include/rdma (6 files)
  INSTALL include/scsi/fc (4 files)
  INSTALL include/scsi (4 files)
  INSTALL include/sound (11 files)
  INSTALL include/video (3 files)
  INSTALL include/xen (4 files)
  INSTALL include/uapi (0 file)
  INSTALL include/asm (65 files)
Majestio
() автор топика
Ответ на: комментарий от Majestio

У меня в федоре 64 битной стоит обычный гцц, который и 32 битные бинари собирает, только пришлось libc доставить 32-битный и девел-пакет к нему тоже 32-битный
Тут может таже логика
Вообщем, тебе нужный нативный для freebsd компилятор, который собирает под линукс
Но проблема в том, что твой код линкуется с BSD libc, которая не умеет в линукс и тебе нужен glibc, который стоит в Debian/kFreeBSD, который можно накатить в jail
Будет нативный компилер, но с другой libc, которая умеет в линукс
Или собрать musl под FreeBSD, но умеет ли мусл фрибзд?
Можешь и глибц собирать - но это долго и мучительно
P.S.: еще есть генту бзд - можно в ней собрать тулчейн

mystery ★★
()
Ответ на: комментарий от Majestio

Проблем нет, потому что ядро линукс частично зависит от Глибц, которая идет в фунту
С musl тоже можно собрать, или uClibc, ядро, так как они реализуют тоже все то, что нужно ядру
А вот во фрибзд нехватка, того же byteswap.h

mystery ★★
()
Ответ на: комментарий от Majestio

Тебе нужно собрать линуксовые бинари
Для этого нужен компилятор
Компилятору нужны хедеры ядра и либц
Бери musl или glibc и собирай

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