LINUX.ORG.RU

mini-OS требует linux-headers

 ,


0

1

Пытаюсь собрать слегка протухший Xen arm (PV). В качестве гостевых машин в проекте используются mini-OS. Так вот, при сборке mini-os требует вот такие два файлика

#include <linux/linkage.h>
#include <asm/assembler.h>
И первое и второе - это заголовочные файлы ядра linux, отсюда и впорос, правильно ли я это угадал, и если да, то заголовчником какой версии ядра его кормить?

★★★

Ты что, собираешь эту Mini-OS bare-metal тулчейном? Ставь нормальный arm-linux-{gnueabi|uclibc} тулчейн и собирай систему им. Там есть и хэдеры и ld-linux.so.2 наверняка они тоже понадобятся, не так ли?

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

Оно будет запускаться над xen-ом, который будет крутится на голой железяке, где вы тут ядро линукса углядели?

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

toolchain качал вот отсюда http://www.codesourcery.com/sgpp/lite/arm/portal/package6488/public/arm-none-...

Мм, можно чуть-чуть по подробнее, что такое bare-metal toolchain? Строго говоря на железяке будет только xen и эти mini-os, это не bare-metal ? Да, и, как показывает практика, новые версии gcc для cortex-a9 собирают неработоспособные бинари, где взять нормальный нужной версии (4.4) ?

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

toolchain качал вот отсюда

Странно, этот тулчейн не bare-metal, а Linux.

Я просто не знаю, что такое mini-OS. Если она зависит от Linux, то компилируется именно Linux'овым тулчейном. Если ей Linux в работе не нужен - то bare-metal тулчейном. Но это не так важно, bare-metal программы можно компилировать и Linux-тулчейном.

В этом треде: Отличие кросскомпилятора bare metal и for linux на ARM я писал подробно о различии Bare-Metal и Linux-тулчейнов.

Строго говоря на железяке будет только xen и эти mini-os, это не bare-metal ? Да, и, как показывает практика, новые версии gcc для cortex-a9 собирают неработоспособные бинари, где взять нормальный нужной версии (4.4) ?

Вот тут anonymous, говорит, что:

Хочешь нерешаемые проблемы - связывайся с linaro и codesourcery. Хочешь, чтоб работало и не мешало жить, собирай с crosstools-ng.

Я тоже поддерживаю его мнение, поэтому проще всего собрать тулчейн с помощью crosstool-NG с необходимой версией GCC. Сейчас посмотрел, там как раз есть такой шаблон:

exl@exl-Lenovo-G560e:~/x-tools > ct-ng show-arm-cortexa9_neon-linux-gnueabihf
[G.X]   arm-cortexa9_neon-linux-gnueabihf
    OS             : linux-3.7.10
    Companion libs : gmp-5.0.2 mpfr-3.1.2 ppl-0.11.2 cloog-ppl-0.15.11 mpc-1.0.1
    binutils       : binutils-2.23.1
    C compiler     : gcc-linaro-4.7-2013.06-1 (C,C++)
    C library      : eglibc-2_17 (threads: nptl)
    Tools          : gdb-linaro-7.5-2012.12-1

Правда, пока экспериментальный. Компиляторы от Linaro можно свободно заменить на чистые GCC.

============================

Касательно сабжевой проблемы. Насколько мне известно, linkage.h и assembler.h это дела давно минувших дней и ядра 2.4(6?).X. В новых 3.X.X ядрах таких kernel-headers попросту нету.

Проверь пожалуйста, kernel-headers какой версии используются в твоем тулчейне? Это можно сделать как-то так:

exl@exl-Lenovo-G560e:~/SandBox > echo 'main(){ printf("LOL"); }' > main.c
exl@exl-Lenovo-G560e:~/SandBox > arm-none-linux-gnueabi-gcc main.c
exl@exl-Lenovo-G560e:~/SandBox > file a.out 
a.out: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.10.2, not stripped

Какую версию mini-OS ты пытаешься собрать? По идее она должна быть оторвана от Linux. В этом репозитории (форк Mini OS?) есть такой файлик с arm-asm'ом внутри себя и этими хэдерами. Вы этот проект собираете?

Если да, то могу вам только посоветовать собирать эту mini-OS Linux-тулчейном, где kernel-headers давно протухшие (2.4.X-2.6.X).

============================

Еще я нашел вот-такой репозиторий, точнее ветку minios-arm-port, которая обновлялась совсем недавно (2 месяца назад) и проект не выглядит заброшенным. Там же обнаружился и assembler.h. Короче, mini-OS из этого репозитория вроде как отвязана от kernel-headers. Попробуй собрать её.

А вообще, что из себя представляет эта mini-OS? Ни разу в глаза не видел, интересно.

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

Я собриаю xen on arm (PV) (http://wiki.xenproject.org/wiki/Xen_ARM_(PV) ), если конкретно вот отсюда http://xenbits.xen.org/gitweb/?p=people/jm77ryu/xen-arm.git;a=snapshot;h=474c... Судя по всему, тот реп, который вы нашли основывается на этом репе. Свежую mini-os собирать стремно, ибо на таком древнем xen-е скорей всего не заведется, хочеться собрать ту, что в поставке вместе с этим xen-ом. По поводу версии заголовочников для тулчеина

   $ file a.out
a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
Т е просто скачать заголовчники для 2.6.16, и скормить данному тулчейну? Правда с точки зрения здравого смысла заголовочники должны быть той версии, для которых эта конкретная mini-os писалась.

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

Т е просто скачать заголовчники для 2.6.16, и скормить данному тулчейну?

Они у вас уже есть. Проверьте свой тулчейн так:

find /opt/{toolchain-path} -type d -name linux

Должна быть директория с linux-headers.

Заодно проверьте:

find /opt/{toolchain-path} \( -name "linkage.h" -o -name "assembler.h" \)

Быть может они просто не входят в директорию поиска кросс-компилятора.

Правда с точки зрения здравого смысла заголовочники должны быть той версии, для которых эта конкретная mini-os писалась.

С точки зрения здравого смысла в Mini-OS зависимостей от kernel-headers вообще быть не должно.

Сейчас проверил: в древнем тулчейне, c gcc-3.4.3 и linux-headers 2.4.17 эти файлы есть:

exl@exl-Lenovo-G560e:~/SandBox > arm-linux-gnueabi-g++ test.cpp 
exl@exl-Lenovo-G560e:~/SandBox > file a.out 
a.out: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.4.17, not stripped
exl@exl-Lenovo-G560e:~/SandBox > find /opt/toolchains/motomagx/arm-eabi  \( -name "linkage.h" -o -name "assembler.h" \)
/opt/toolchains/motomagx/arm-eabi/arm-linux-gnueabi/include/asm-arm/assembler.h
/opt/toolchains/motomagx/arm-eabi/arm-linux-gnueabi/include/asm-arm/linkage.h
/opt/toolchains/motomagx/arm-eabi/arm-linux-gnueabi/include/linux/linkage.h

А вот в новом, с gcc-4.3.2 и linux-headers 3.10.2

exl@exl-Lenovo-G560e:~/SandBox > file a.out 
a.out: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.10.2, not stripped
exl@exl-Lenovo-G560e:~/SandBox > find /home/exl/x-tools/arm-qemu-linux-gnueabi  \( -name "linkage.h" -o -name "assembler.h" \)
exl@exl-Lenovo-G560e:~/SandBox > 

Этих файлов нету.

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

Нет у меня этих файлов

$ find /opt/toolchain/arm-2010q1/ -type d -name linux
/opt/toolchain/arm-2010q1/arm-none-linux-gnueabi/libc/usr/include/linux
[likan@localhost linux]$ find /opt/toolchain/arm-2010q1/ \( -name "linkage.h" -o -name "assembler.h" \)
[likan@localhost linux]$ 
Тулчейн с gcc 4.4, кстати, я судя по make файлам этой mini-os, собиралась она тулчейном с gcc 4.1.1, где такой можно скачать, чтоб глянуть, есть ли там такие файлики?

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

Сейчас ради интереса посмотрел, файлы эти есть в исходниках linux-2.6.16, странно, почему они не входят в тулчейны.
Попробуйте вот что:

  1. Скачайте исходные коды linux-2.6.16.
  2. Заберите оттуда ветки arch/arm/include/asm include/linux
  3. Подсуньте их компилятору CFLAGS="-I/path_to/arch/arm/include -I/path_to/include" make

Должно по-идее сработать, так как в header'ах тех нету особо ничего такого, кроме макросов да интринсиков.

Кстати, проект xen on arm (PV) разве не рекомендует, каким именно компилятором собирать его mini-OS?

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

Да, уже, только я тупо скопипастил в директорию с mini-os нужыне хэдеры

$ make
[ -e include/asm] || ln -sf `pwd`/include/asm-arm include/asm
/bin/sh: line 0: [: пропущен `]'
[ -e include/xen/interface] ] || ln -sf `pwd`/../../xen/include/public include/xen/interface
make -C kernel
make[1]: вход в каталог «/home/likan/xen-fixed/xen-arm-474c802/tools/minios/kernel»
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld  -r -o built_in.o time.o traps.o gnttab.o mm.o sched.o main.o evtchn.o
make[1]: выход из каталога «/home/likan/xen-fixed/xen-arm-474c802/tools/minios/kernel»
make -C lib
make[1]: вход в каталог «/home/likan/xen-fixed/xen-arm-474c802/tools/minios/lib»
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld  -r -o built_in.o printf.o blowfish.o string.o math.o xmalloc.o lib1funcs.o
make[1]: выход из каталога «/home/likan/xen-fixed/xen-arm-474c802/tools/minios/lib»
make -C arch/arm
make[1]: вход в каталог «/home/likan/xen-fixed/xen-arm-474c802/tools/minios/arch/arm»
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld  -r -o arm.o march-fiore/start.o common/machine.o common/entry.o common/math.o lib/muldi3.o
make[1]: выход из каталога «/home/likan/xen-fixed/xen-arm-474c802/tools/minios/arch/arm»
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld  -N -T arch/arm/march-fiore/fiore.lds arch/arm/arm.o kernel/built_in.o lib/built_in.o -o mini-os.elf
lib/built_in.o: In function `__aeabi_uidiv':
/home/likan/xen-fixed/xen-arm-474c802/tools/minios/lib/lib1funcs.S:183: multiple definition of `__udivsi3'
arch/arm/arm.o:/home/likan/xen-fixed/xen-arm-474c802/tools/minios/arch/arm/common/math.S:137: first defined here
lib/built_in.o: In function `__umodsi3':
/home/likan/xen-fixed/xen-arm-474c802/tools/minios/lib/lib1funcs.S:210: multiple definition of `__umodsi3'
arch/arm/arm.o:/home/likan/xen-fixed/xen-arm-474c802/tools/minios/arch/arm/common/math.S:164: first defined here
lib/built_in.o: In function `__divsi3':
/home/likan/xen-fixed/xen-arm-474c802/tools/minios/lib/lib1funcs.S:227: multiple definition of `__divsi3'
arch/arm/arm.o:/home/likan/xen-fixed/xen-arm-474c802/tools/minios/arch/arm/common/math.S:181: first defined here
lib/built_in.o: In function `__modsi3':
/home/likan/xen-fixed/xen-arm-474c802/tools/minios/lib/lib1funcs.S:267: multiple definition of `__modsi3'
arch/arm/arm.o:/home/likan/xen-fixed/xen-arm-474c802/tools/minios/arch/arm/common/math.S:221: first defined here
arch/arm/arm.o:(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr1'
arch/arm/arm.o:(.ARM.exidx+0x8): undefined reference to `__aeabi_unwind_cpp_pr1'
kernel/built_in.o:(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr1'
kernel/built_in.o:(.ARM.exidx+0x48): undefined reference to `__aeabi_unwind_cpp_pr1'
kernel/built_in.o:(.ARM.exidx+0x118): undefined reference to `__aeabi_unwind_cpp_pr1'
kernel/built_in.o:(.ARM.exidx+0x168): more undefined references to `__aeabi_unwind_cpp_pr1' follow
lib/built_in.o: In function `number':
xmalloc.c:(.text+0x7d4): undefined reference to `__aeabi_uldivmod'
xmalloc.c:(.text+0x814): undefined reference to `__aeabi_uldivmod'
lib/built_in.o: In function `Ldiv0':
xmalloc.c:(.text+0x4708): undefined reference to `__div0'
lib/built_in.o:(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr1'
lib/built_in.o:(.ARM.exidx+0x78): undefined reference to `__aeabi_unwind_cpp_pr1'
lib/built_in.o:(.ARM.exidx+0x98): undefined reference to `__aeabi_unwind_cpp_pr1'
lib/built_in.o:(.ARM.exidx+0xf8): undefined reference to `__aeabi_unwind_cpp_pr1'
Makefile:16: ошибка выполнения рецепта для цели «mini-os»
make: *** [mini-os] Ошибка 1

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

Следовательно к этому libglibc нужно правильный путь задать (Там в Makefile-фх только CROSS_COMPILE задается). Как это корректно делается?

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

Так, вроде сделал, есть вот такой файл

/opt/toolchain/arm-2010q1/arm-none-linux-gnueabi/libc/usr/lib/libc.so
libgcc.so нет, зато есть libgcc_s.so
/opt/toolchain/arm-2010q1/arm-none-linux-gnueabi/libc/lib/libgcc_s.so
Соответсвенно строка из Makefile
$(LD) $(LDFLAGS) -L/opt/toolchain/arm-2010q1/arm-none-linux-gnueabi/libc/usr/lib/ -lc -L/opt/toolchain/arm-2010q1/arm-none-linux-gnueabi/libc/lib/ -lgcc_s
И вот что получилось на выходе
$ make
[ -e include/asm] || ln -sf `pwd`/include/asm-arm include/asm
/bin/sh: line 0: [: пропущен `]'
[ -e include/xen/interface] ] || ln -sf `pwd`/../../xen/include/public include/xen/interface
make -C kernel
make[1]: вход в каталог «/home/likan/xen-fixed/xen-linux/tools/minios/kernel»
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld  -r -o built_in.o time.o traps.o gnttab.o mm.o sched.o main.o evtchn.o
make[1]: выход из каталога «/home/likan/xen-fixed/xen-linux/tools/minios/kernel»
make -C lib
make[1]: вход в каталог «/home/likan/xen-fixed/xen-linux/tools/minios/lib»
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld  -r -o built_in.o printf.o blowfish.o string.o math.o xmalloc.o lib1funcs.o
make[1]: выход из каталога «/home/likan/xen-fixed/xen-linux/tools/minios/lib»
make -C arch/arm
make[1]: вход в каталог «/home/likan/xen-fixed/xen-linux/tools/minios/arch/arm»
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld  -r -o arm.o march-fiore/start.o common/machine.o common/entry.o common/math.o lib/muldi3.o
make[1]: выход из каталога «/home/likan/xen-fixed/xen-linux/tools/minios/arch/arm»
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld  -L/opt/toolchain/arm-2010q1/arm-none-linux-gnueabi/libc/usr/lib/ -lc -L/opt/toolchain/arm-2010q1/arm-none-linux-gnueabi/libc/lib/ -lgcc_s -N -T arch/arm/march-fiore/fiore.lds arch/arm/arm.o kernel/built_in.o lib/built_in.o -o mini-os.elf
lib/built_in.o: In function `__aeabi_uidiv':
/home/likan/xen-fixed/xen-arm-474c802/tools/minios/lib/lib1funcs.S:183: multiple definition of `__udivsi3'
arch/arm/arm.o:/home/likan/xen-fixed/xen-arm-474c802/tools/minios/arch/arm/common/math.S:137: first defined here
lib/built_in.o: In function `__umodsi3':
/home/likan/xen-fixed/xen-arm-474c802/tools/minios/lib/lib1funcs.S:210: multiple definition of `__umodsi3'
arch/arm/arm.o:/home/likan/xen-fixed/xen-arm-474c802/tools/minios/arch/arm/common/math.S:164: first defined here
lib/built_in.o: In function `__divsi3':
/home/likan/xen-fixed/xen-arm-474c802/tools/minios/lib/lib1funcs.S:227: multiple definition of `__divsi3'
arch/arm/arm.o:/home/likan/xen-fixed/xen-arm-474c802/tools/minios/arch/arm/common/math.S:181: first defined here
lib/built_in.o: In function `__modsi3':
/home/likan/xen-fixed/xen-arm-474c802/tools/minios/lib/lib1funcs.S:267: multiple definition of `__modsi3'
arch/arm/arm.o:/home/likan/xen-fixed/xen-arm-474c802/tools/minios/arch/arm/common/math.S:221: first defined here
lib/built_in.o: In function `Ldiv0':
xmalloc.c:(.text+0x4708): undefined reference to `__div0'
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld: BFD (Sourcery G++ Lite 2010q1-202) 2.19.51.20090709 assertion fail /scratch/julian/2010q1-release-linux-lite/obj/binutils-src-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu/bfd/elf32-arm.c:12572
Makefile:16: ошибка выполнения рецепта для цели «mini-os»
make: *** [mini-os] Ошибка сегментирования (сделан дамп памяти)

Судя по ошибкам, что то было подключено дважды.

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

Как это корректно делается?

По идее, как-то так: LIBS="-lc -lgcc_s" make
Но кто знает, что они там в Makefile понапихали.

И вот что получилось на выходе

У меня вообще при компиляции mini-os по ссылке, которую вы дали:

exl@exl-Lenovo-G560e:~/SandBox/xen-arm-474c802/tools/minios > make
[ -e include/asm] || ln -sf `pwd`/include/asm-arm include/asm
/bin/sh: 1: [: missing ]
[ -e include/xen/interface] ] || ln -sf `pwd`/../../xen/include/public include/xen/interface
make -C kernel
make[1]: Entering directory `/home/exl/SandBox/xen-arm-474c802/tools/minios/kernel'
-fno-builtin -Wall -Werror -Wredundant-decls -Wno-format -mapcs -Wnested-externs -Wpointer-arith -I/home/exl/SandBox/xen-arm-474c802/tools/minios/include -L/home/exl/SandBox/xen-arm-474c802/tools/minios/lib -D__XEN__ -D__KERNEL__ -DCONFIG_ -g
/home/exl/x-tools/arm-qemu-eabi/bin/arm-qemu-eabi-gcc -fno-builtin -Wall -Werror -Wredundant-decls -Wno-format -mapcs -Wnested-externs -Wpointer-arith  -I/home/exl/SandBox/xen-arm-474c802/tools/minios/include -L/home/exl/SandBox/xen-arm-474c802/tools/minios/lib -D__XEN__ -D__KERNEL__ -DCONFIG_ -g -c evtchn.c -o evtchn.o
In file included from /home/exl/SandBox/xen-arm-474c802/tools/minios/include/os/bitops.h:4,
                 from evtchn.c:22:
/home/exl/SandBox/xen-arm-474c802/tools/minios/include/asm/bitops.h: In function 'set_bit':
/home/exl/SandBox/xen-arm-474c802/tools/minios/include/asm/bitops.h:109: error: 'vcpu_info_t' has no member named 'evtchn_upcall_mask'
/home/exl/SandBox/xen-arm-474c802/tools/minios/include/asm/bitops.h:109: error: 'vcpu_info_t' has no member named 'evtchn_upcall_mask'
/home/exl/SandBox/xen-arm-474c802/tools/minios/include/asm/bitops.h:111: error: 'vcpu_info_t' has no member named 'evtchn_upcall_mask'
/home/exl/SandBox/xen-arm-474c802/tools/minios/include/asm/bitops.h: In function 'clear_bit':
/home/exl/SandBox/xen-arm-474c802/tools/minios/include/asm/bitops.h:131: error: 'vcpu_info_t' has no member named 'evtchn_upcall_mask'
/home/exl/SandBox/xen-arm-474c802/tools/minios/include/asm/bitops.h:131: error: 'vcpu_info_t' has no member named 'evtchn_upcall_mask'
/home/exl/SandBox/xen-arm-474c802/tools/minios/include/asm/bitops.h:133: error: 'vcpu_info_t' has no member named 'evtchn_upcall_mask'
evtchn.c: In function 'unmask_evtchn':
evtchn.c:90: error: 'vcpu_info_t' has no member named 'evtchn_upcall_mask'
make[1]: *** [evtchn.o] Error 1
make[1]: Leaving directory `/home/exl/SandBox/xen-arm-474c802/tools/minios/kernel'
make: *** [build] Error 2

Как вы боролись с этой ошибкой (если она у вас была)? Не могу я что-то найти структуру vcpu_info_t в этом аде из макросов.

А вот само ядро собирается нормально.

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

Да, была конечно, боролся довольно грубо, в файле xen/include/public/xen.h раскомментировал строчку в объявлении структуры vcpu_info. А чем вы ядро собирали? Не тем ли древним компилятром, где есть файлы linkage.h и assembler.h ?

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

Простите, соврал,строку нужно раскоменчивать в файле xen-arm-474c802/tools/minios/include/xen/interface/xen.h

Это не важно, там симлинк на xen/include/public/.

А чем вы ядро собирали? Не тем ли древним компилятром, где есть файлы linkage.h и assembler.h ?

Нет, я им не собирал этот проект.

=========================

Короче, удалось все это скомпилировать, насколько оно рабочее - фиг его знает. С arm-assembler'ом помучился изрядно. В том архиве, ссылку на который вы мне дали, банально разбито дерево исходников, раз встречаются multiple definition.

Как все это собрать:

  1. Первым делом распаковываете тарболл с исходниками заново (применять патчи надо на чистые исходники).
    Скачиваете патчи по ссылкам ниже, складываете их в корневую директорию xen-arm.
  2. Затем, применяете патч: Xen-Arm_0001_Add_neccesary_linux_kernel-headers.patch | Raw Patch
    patch -Np1 Xen-Arm_0001_Add_neccesary_linux_kernel-headers.patch
    Он добавляет потерянные linux kernel-headers.
  3. Теперь выбор за вами, какой патч применить: либо фиксить компиляцию через вырезание повторяющихся функций в arm-assembler листинге lib/lib1funcs.S, либо в arch/arm/common/math.S.
    Откатить патч можно так: patch -R -Np1 < Xen-Arm_0002_Fix_build_via_lib1funcs.S.patch. Возможно, с одной из версий фиксов оно заработает.
  4. Собираете сначала ядро, а потом mini-OS:
    $ make distclean
    $ make TOOLCHAIN_PREFIX=/opt/toolchain/arm-2010q1/arm-none-linux-gnueabi- world
    $ cd tools/minios/
    $ make CROSS_COMPILE=/opt/toolchain/arm-2010q1/arm-none-linux-gnueabi-

Если ничего не запустится должным образом, настоятельно рекомендую склонировать этот репозиторий, переключиться на ветку minios-arm-port и попробовать собрать актуальную версию.

У меня проект собрался как с помощью linux-тулчейна, так и с помощью bare-metal-тулчейна. Версии компиляторов, библиотек, etc.

exl@exl-Lenovo-G560e:~/x-tools > ct-ng show-arm-unknown-linux-gnueabi
[G..]   arm-unknown-linux-gnueabi
    OS             : linux-3.10.2
    Companion libs : gmp-4.3.2 mpfr-2.4.2 libelf-0.8.13
    binutils       : binutils-2.19.1a
    C compiler     : gcc-4.3.2 (C,C++)
    C library      : glibc-2.9 (threads: nptl)
    Tools          : dmalloc-5.5.2 duma-2_5_15 gdb-6.8a ltrace-0.5.3 strace-4.5.19

exl@exl-Lenovo-G560e:~/x-tools > ct-ng show-arm-unknown-eabi
[G..]   arm-unknown-eabi
    OS             : bare-metal
    Companion libs : gmp-4.3.2 mpfr-2.4.2
    binutils       : binutils-2.19.1a
    C compiler     : gcc-4.3.2 (C,C++)
    C library      : newlib-1.17.0 (threads: none)
    Tools          : gdb-6.8a

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

Кстати, как вы фиксили такую ошибку?

gnttab.c: In function 'gnttab_end_foreign_access_ref':
gnttab.c:193: error: passing argument 1 of 'atomic_cmpxchg_u16' from incompatible pointer type
gnttab.c: In function 'gnttab_end_foreign_transfer_ref':
gnttab.c:251: error: passing argument 1 of 'atomic_cmpxchg_u16' from incompatible pointer type

Ещё вопрос, сие поделие (xen-arm или minios) можно запустить с помощью qemu?

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

Хах, не менее грубо, чем с предыдущей, собственно в этой самой atomic_cmpxchg_u16 заменил первый аргумент на unsigned long * по моему (или что он там предавал в качестве аргумента). Да кто ж его знает, вот тут http://wiki.xenproject.org/wiki/Xen_ARM_(PV) пишут, что какой-то патч на qemu нужно наложить. Сейчас вот буду ваш мануал применять.

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

Первый патч завершается с ошибкой

patching file tools/minios/include/linux/linkage.h
patch unexpectedly ends in middle of line
patch: **** malformed patch at line 763: 
762-я и 763-я строка выглядит и вправду странно
+#define NORET_AND     noreturn,
+
define который заканчивается на запятую? Мне кажеться, что тут чего-то не хватает.

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

Да. и что с линковкой делать, так как после патчей получаю:

$ make
[ -e include/asm] || ln -sf `pwd`/include/asm-arm include/asm
/bin/sh: line 0: [: пропущен `]'
[ -e include/xen/interface] ] || ln -sf `pwd`/../../xen/include/public include/xen/interface
make -C kernel
make[1]: вход в каталог «/home/likan/xen-patched/xen-arm-474c802/tools/minios/kernel»
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld  -r -o built_in.o time.o traps.o gnttab.o mm.o sched.o main.o evtchn.o
make[1]: выход из каталога «/home/likan/xen-patched/xen-arm-474c802/tools/minios/kernel»
make -C lib
make[1]: вход в каталог «/home/likan/xen-patched/xen-arm-474c802/tools/minios/lib»
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld  -r -o built_in.o printf.o blowfish.o string.o math.o xmalloc.o lib1funcs.o
make[1]: выход из каталога «/home/likan/xen-patched/xen-arm-474c802/tools/minios/lib»
make -C arch/arm
make[1]: вход в каталог «/home/likan/xen-patched/xen-arm-474c802/tools/minios/arch/arm»
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld  -r -o arm.o march-fiore/start.o common/machine.o common/entry.o common/math.o lib/muldi3.o
make[1]: выход из каталога «/home/likan/xen-patched/xen-arm-474c802/tools/minios/arch/arm»
/opt/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-ld  -N -T arch/arm/march-fiore/fiore.lds arch/arm/arm.o kernel/built_in.o lib/built_in.o -o mini-os.elf
arch/arm/arm.o:(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr1'
arch/arm/arm.o:(.ARM.exidx+0x8): undefined reference to `__aeabi_unwind_cpp_pr1'
kernel/built_in.o:(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr1'
kernel/built_in.o:(.ARM.exidx+0x48): undefined reference to `__aeabi_unwind_cpp_pr1'
kernel/built_in.o:(.ARM.exidx+0x118): undefined reference to `__aeabi_unwind_cpp_pr1'
kernel/built_in.o:(.ARM.exidx+0x168): more undefined references to `__aeabi_unwind_cpp_pr1' follow
Makefile:18: ошибка выполнения рецепта для цели «mini-os»

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

Патчи Pastebin'ом косанулись. Вот бред.
Попробуй скачать их отсюда и накатить снова по инструкции выше.

Если ничего не получится, вышлю тебе как пропатченные сорцы, так и свои arm-тулчейны (под x86_64).

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

define который заканчивается на запятую? Мне кажеться, что тут чего-то не хватает.

Это нормально.

Хах, не менее грубо, чем с предыдущей, собственно в этой самой atomic_cmpxchg_u16 заменил первый аргумент на unsigned long * по моему (или что он там предавал в качестве аргумента).

Я преобразованием поправил, так вроде корректнее.

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

Да, спасибо большое, все собралось, ща вот на pandaboard попытаюсь это накатить.

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