ЗАО «ЗЭО»
Техническая поддержка пользователей => ОС Linux, U-Boot => Тема начата: faa от 21 Сентября, 2009, 15:06:17
-
Собрал EABI crunch-tools для ТИОН-ов с патчами от Martin Guy (http://martinwguy.co.uk/martin/crunch/ (http://martinwguy.co.uk/martin/crunch/)) и патчами от OE (http://www.openembedded.org/ (http://www.openembedded.org/)).
Включает в себя binutils-2.19, gcc-4.2.4, uClibc-0.9.29.
Ключи для оптимизации -mcpu=ep9312 -mfpu=maverick -mfloat-abi=softfp -ffast-math -O2 (подробнее про ключи у Мартина на странице).
Лежит на ftp://ftp.ntcsm.ru/pub/tion9315/crunch-tools-gcc4.2.4-src.tar.bz2 (ftp://ftp.ntcsm.ru/pub/tion9315/crunch-tools-gcc4.2.4-src.tar.bz2).
Можно тестировать :)
-
Собирал как мартин (кстати, сентябрьский патч?) только gcc или же g++ тоже собран?
А что uClibc-0.9.30.1 не используешь?
До этого пробывал собирать тулчейн crunch-tools-1.4.3... Так вот g++ намана не собирал, т.к. патчами отключались некоторые функции преобразования вещественных в целые, на них были ссылки из libstdc++ - и программа не собиралась. Но так как мне необходим g++ пришлось пока собрать тулчейн c softfloat-ом 4.3.4-920t-eabi (пользовался последней версией buildroot).
-
Собирал как мартин (кстати, сентябрьский патч?) только gcc или же g++ тоже собран?
А что uClibc-0.9.30.1 не используешь?
Патч Мартина сентябрьский и добавлены патчи от OE.
cross-gcc собран как
$SRC_DIR/$GCC/configure --target=$TARGET --prefix=$INSTALL_DIR --enable-languages=c,c++ \
--disable-multilib --disable-libmudflap --disable-libssp \
2>&1; status=$?
т.е. g++ есть.
uClibc 0.9.30 не собирается с gcc 4.2.4 - разбираюсь.
Мартин пишет: gcc-4.3.4 медленнее, чем 4.2.4.
ЗЫ: Могу выложить архив только с патчами и скриптами без исходников bu, gcc и uClibc.
-
uClibc 0.9.30 не собирается с gcc 4.2.4 - разбираюсь.
Мартин пишет: gcc-4.3.4 медленнее, чем 4.2.4.
На счет uClibc 0.9.30.1 - глянь патчи/скрипты http://buildroot.uclibc.org/downloads/buildroot-2009.08.tar.bz2 (http://buildroot.uclibc.org/downloads/buildroot-2009.08.tar.bz2), там тулчейн с этой либой собирается.
ЗЫ: Могу выложить архив только с патчами и скриптами без исходников bu, gcc и uClibc.
Было бы здорово! :)
Кстати, а патч для bu (на который ссылаются в разделе http://martinwguy.co.uk/martin/crunch/#KnownBugs) добавлял?
-
На счет uClibc 0.9.30.1 - глянь патчи/скрипты http://buildroot.uclibc.org/downloads/buildroot-2009.08.tar.bz2 (http://buildroot.uclibc.org/downloads/buildroot-2009.08.tar.bz2), там тулчейн с этой либой собирается.
Патчи для uClibc брал в OE. С ними 0.9.30 не собирается gcc4.2.4.
Патчи от buildroot посмотрю - сравню с ОЕ.
Выложил туда же архив без исходников - только скрипты и патчи (ftp://ftp.ntcsm.ru/pub/tion9315/crunch-tools-gcc4.2.4-nosrc.tar.bz2 (http://ftp://ftp.ntcsm.ru/pub/tion9315/crunch-tools-gcc4.2.4-nosrc.tar.bz2)).
Кстати, а патч для bu (на который ссылаются в разделе http://martinwguy.co.uk/martin/crunch/#KnownBugs) добавлял?
Не добавлял. При следующей итерации добавлю (когда буду с uClibc разбираться). Там в основном glibc патчится, для bu только один файлик.
-
С uClibc-0.9.30 и 0.9.30.1 не собирается - вываливается на
CC libc/sysdeps/linux/arm/ioperm.os
In file included from ./include/sys/sysctl.h:44,
from libc/sysdeps/linux/arm/ioperm.c:46:
/home/CRUS/crunch-tools-gcc4.2.4/eabi/ep93xx-eabi-fast/include/linux/sysctl.h:41: error: expected ':', ',', ';', '}' or '__attribute__' before '*' token
make: *** [libc/sysdeps/linux/arm/ioperm.os] Ошибка 1
ERROR: making uClibc-0.9.30.1 failed
Сборка 0.9.30 в этом же месте вываливается.
Разбираться пока времени нет. Оставил как было - с uClibc-0.9.29.
К bu патчик добавил. Соберется - выложу.
-
С uClibc-0.9.30 и 0.9.30.1 не собирается
Причина была в заголовках ядра - староваты :)
Собрал toolchain с uClibc-0.9.30.1 и gcc-4.2.4. Выложил туда же ftp://ftp.ntcsm.ru/pub/tion9315/ (http://ftp://ftp.ntcsm.ru/pub/tion9315/).
Заголовки ядра свежие от 2.6.30.
-
Собрал toolchain с uClibc-0.9.30.1 и gcc-4.2.4. Выложил туда же ftp://ftp.ntcsm.ru/pub/tion9315/ (http://ftp://ftp.ntcsm.ru/pub/tion9315/).
Заголовки ядра свежие от 2.6.30.
Решил попробовать собранный тулчейн. При запуске любого "ехе-шника" выдается сообщение "Исключение в операции с плавающей точкой" и перывается работа :(. С чем это может быть связано?
-
Решил попробовать собранный тулчейн. При запуске любого "ехе-шника" выдается сообщение "Исключение в операции с плавающей точкой" и перывается работа :(. С чем это может быть связано?
Ходы и логи в студию.
ЗЫ: Телепаты на выставке :)
-
Решил попробовать собранный тулчейн. При запуске любого "ехе-шника" выдается сообщение "Исключение в операции с плавающей точкой" и перывается работа :(. С чем это может быть связано?
Ходы и логи в студию.
ЗЫ: Телепаты на выставке :)
"Собранный" - в смысле тобой который сделан :).
Тут в параллельной ветке ты сказал что под х86_64 собирал тулчейн. А у меня на виртуалке Федора Коре 5 х86 стоит... может с этим связано?
Ну а так вот лог моих действий:
#mkdir /tion/toolchain
#cd /tion/toolchain
#tar -xjf /tmp/gcc-4.2.4-bu-2.19-uclibc-0.9.30.1-eabi-crunch.tar.bz2
#cd ./ep93xx-eabi-fast/bin
#./arm-linux-uclibcgnueabi-gcc -V
Исключение в операции с плавающей точкой
#file ./arm-linux-uclibcgnueabi-gcc
./arm-linux-uclibcgnueabi-gcc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
#
-
Тут в параллельной ветке ты сказал что под х86_64 собирал тулчейн. А у меня на виртуалке Федора Коре 5 х86 стоит... может с этим связано?
FC 5 - это не прошлого века? ;)
Вот под Mandriva 2007.1 x86
[faa@faa bin]$ ./arm-linux-uclibcgnueabi-gcc -V
arm-linux-uclibcgnueabi-gcc: ключ '-V' требует аргумента
[faa@faa bin]$ ./arm-linux-uclibcgnueabi-gcc -v
Используются внутренние спецификации.
Целевая архитектура: arm-linux-uclibcgnueabi
Параметры конфигурации: /home/CRUS/crunch-tools-gcc4.2.4/build/gcc-4.2.4/configure --target=arm-linux-uclibcgnueabi --prefix=/home/CRUS/crunch-tools-gcc4.2.4/eabi/ep93xx-eabi-fast --enable-languages=c,c++ --disable-multilib --disable-libmudflap --disable-libssp --disable-checking --disable-werror
Модель многопотоковости: posix
gcc версия 4.2.4
[faa@faa bin]$ file arm-linux-uclibcgnueabi-gcc
arm-linux-uclibcgnueabi-gcc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), not stripped
Вот под Mandriva 2009.1 x86_64
[faa@tresh bin]$ ./arm-linux-uclibcgnueabi-gcc -V
arm-linux-uclibcgnueabi-gcc: ключ '-V' требует аргумента
[faa@tresh bin]$ ./arm-linux-uclibcgnueabi-gcc -v
Используются внутренние спецификации.
Целевая архитектура: arm-linux-uclibcgnueabi
Параметры конфигурации: /home/faa/CRUS/crunch-tools-gcc4.2.4/build/gcc-4.2.4/configure --target=arm-linux-uclibcgnueabi --prefix=/home/faa/CRUS/crunch-tools-gcc4.2.4/eabi/ep93xx-eabi-fast --enable-languages=c,c++ --disable-multilib --disable-libmudflap --disable-libssp --disable-checking --disable-werror
Модель многопотоковости: posix
gcc версия 4.2.4
[faa@tresh bin]$
[faa@tresh bin]$ file arm-linux-uclibcgnueabi-gcc
arm-linux-uclibcgnueabi-gcc: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
Все без виртуалок, нативно.
ЗЫ: Может есть смысл обновить дистрибутив? На дворе уже давно Fedora 11.
-
Под Убунтой 9.04 запустился. Но не факт что в Федоре 11 этот тулчейн запуститься :)...
В свое время в ФедореКоре ребята решили отпимизировать кое-что в Эльф-формате:
12.2.2.1. Caveats
Fedora developers have introduced changes in the ELF .hash section
that provides symbols for dynamic linking. This new .gnu.hash section,
which is produced with the new default --hash-style=gnu option for
gcc, serves the same purpose as previous hash sections. It provides,
however, an approximately 50% increase in dynamic linking speed.
Binaries and libraries produced with the new hashing function are
incompatible with older glibc and dynamic linker releases. To use the
old-style hashing routines for compatibility with older glibc-based
systems, pass the --hash-style=sysv option instead.
В отладчике ловим сигнал SIGFPE в функции do_lookup_x (в недрах загрузчика эльфовского файла). Так что при необходимости просто пересоберу тулчейн :) (переводить виртуалку под новый дистрибутив пока лениво :D)
-
http://ru.gentoo-wiki.com/wiki/Кросскомпилирование_с_emerge_(ARM,_MaverickCrunch_FPU)
-
Решил попробовать toolchain от faa.
Скачал:
ftp://ftp.ntcsm.ru/pub/tion9315/gcc-4.2.4-bu-2.19-uclibc-0.9.30.1-eabi-crunch.tar.bz2 (http://ftp://ftp.ntcsm.ru/pub/tion9315/gcc-4.2.4-bu-2.19-uclibc-0.9.30.1-eabi-crunch.tar.bz2)
Скачал кратер с vlc-плеером вот отсюда:
http://arm.cirrus.com/files/linux/heelrod/linux-crater_20080104_d-src.tar.bz2
Указал путь к тулчейну. Поправил в файле packages/Makefile.in флаги компилятора
ifeq ($(EABI),y)
KERNEL_CROSS=$(TOOLCHAIN_DIR)/bin/arm-linux-uclibcgnueabi-
TARGET_CROSS=$(TOOLCHAIN_DIR)/bin/arm-linux-uclibcgnueabi-
TARGET_CC='$(TARGET_CROSS)gcc -mcpu=ep9312 -mfpu=maverick -mfloat-abi=softfp -O2 -ffast-math'
TARGET_CXX='$(TARGET_CROSS)g++ -mcpu=ep9312 -mfpu=maverick -mfloat-abi=softfp -O2 -ffast-math'
REAL_GNU_TARGET_NAME=arm-linux-uclibcgnueabi
endif
Выбрал ядро 2.6.21.5. Попытался поставить к нему патч:
ftp://ftp.ntcsm.ru/pub/tion9315/tion9315-2.6.21.5-eabi.patch.bz2 (http://ftp://ftp.ntcsm.ru/pub/tion9315/tion9315-2.6.21.5-eabi.patch.bz2)
Патч не поставился:
patching file /home/CRUS/crater-eabi-orig/kernel/linux-2.6.21.5/arch/arm/configs/tion9315_defconfig
patching file /home/CRUS/crater-eabi-orig/kernel/linux-2.6.21.5/arch/arm/mach-ep93xx/Kconfig
patching file /home/CRUS/crater-eabi-orig/kernel/linux-2.6.21.5/arch/arm/mach-ep93xx/Makefile
patching file /home/CRUS/crater-eabi-orig/kernel/linux-2.6.21.5/arch/arm/mach-ep93xx/Makefile.boot
patching file /home/CRUS/crater-eabi-orig/kernel/linux-2.6.21.5/arch/arm/mach-ep93xx/ssp.c
patching file /home/CRUS/crater-eabi-orig/kernel/linux-2.6.21.5/arch/arm/mach-ep93xx/tion9315.c
patching file /home/CRUS/crater-eabi-orig/kernel/linux-2.6.21.5/arch/arm/tools/mach-types
patching file /home/CRUS/crater-eabi-orig/kernel/linux-2.6.21.5/drivers/ide/Kconfig
patching file /home/CRUS/crater-eabi-orig/kernel/linux-2.6.21.5/drivers/mtd/maps/Kconfig
patching file /home/CRUS/crater-eabi-orig/kernel/linux-2.6.21.5/drivers/mtd/maps/Makefile
patching file /home/CRUS/crater-eabi-orig/kernel/linux-2.6.21.5/drivers/mtd/maps/tion9315.c
patch: **** malformed patch at line 2296: diff -Nur /home/CRUS/crater-eabi-orig/kernel/linux-2.6.21.5/drivers/mtd/nand/Kconfig /home/CRUS/crater-eabi-tion/kernel/linux-2.6.21.5/drivers/mtd/nand/Kconfig
Ну да ладно... mtd/nnad использовать не будем - КФС на флешке.
Ядро собралось.
А вот busybox не хочет этого делать - не находит файлы assert.h и другие:
applets/applets.c:15:20: error: assert.h: Нет такого файла или каталога
In file included from include/libbb.h:13,
from include/busybox.h:10,
from applets/applets.c:16:
include/platform.h:102:23: error: byteswap.h: Нет такого файла или каталога
include/platform.h:103:21: error: endian.h: Нет такого файла или каталога
include/platform.h:135:24: error: arpa/inet.h: Нет такого файла или каталога
include/platform.h:301:23: error: sys/mount.h: Нет такого файла или каталога
In file included from include/busybox.h:10,
from applets/applets.c:16:
include/libbb.h:15:19: error: ctype.h: Нет такого файла или каталога
include/libbb.h:16:20: error: dirent.h: Нет такого файла или каталога
include/libbb.h:17:19: error: errno.h: Нет такого файла или каталога
include/libbb.h:18:19: error: fcntl.h: Нет такого файла или каталога
include/libbb.h:19:22: error: inttypes.h: Нет такого файла или каталога
include/libbb.h:20:20: error: mntent.h: Нет такого файла или каталога
include/libbb.h:21:19: error: netdb.h: Нет такого файла или каталога
include/libbb.h:22:20: error: setjmp.h: Нет такого файла или каталога
include/libbb.h:23:20: error: signal.h: Нет такого файла или каталога
include/libbb.h:24:19: error: stdio.h: Нет такого файла или каталога
include/libbb.h:25:20: error: stdlib.h: Нет такого файла или каталога
include/libbb.h:28:20: error: string.h: Нет такого файла или каталога
include/libbb.h:30:23: error: sys/ioctl.h: Нет такого файла или каталога
include/libbb.h:31:22: error: sys/mman.h: Нет такого файла или каталога
include/libbb.h:32:24: error: sys/socket.h: Нет такого файла или каталога
include/libbb.h:33:22: error: sys/stat.h: Нет такого файла или каталога
include/libbb.h:34:24: error: sys/statfs.h: Нет такого файла или каталога
include/libbb.h:35:22: error: sys/time.h: Нет такого файла или каталога
include/libbb.h:36:23: error: sys/types.h: Нет такого файла или каталога
include/libbb.h:37:22: error: sys/wait.h: Нет такого файла или каталога
include/libbb.h:38:21: error: termios.h: Нет такого файла или каталога
include/libbb.h:39:18: error: time.h: Нет такого файла или каталога
include/libbb.h:40:20: error: unistd.h: Нет такого файла или каталога
include/libbb.h:41:19: error: utime.h: Нет такого файла или каталога
Такое ощущение что нет kernel-headers.
Что делать дальше? что я до этого делал не так?
-
С предыдущими проблемами разобрался - все дело было в симлинках.
Ядро тоже пропатчил успешно.
Выбрал архитектуру TION9315.
Собрал ядро. Записал в тион - ядро не запускается
Unpacking linux...
и все. У меня ТИОН v1.
-
тебе надо еще загрузчик править, чтоб он код платформы TION_EP9315 ядру передавал
-
СПАСИБО!
Пропатчил загрузчик. Загрузил ядро 2.6.21.5-eabi, в конфиге SCSI USB support и USB Mass Storage включены, но флешка с КФС не монтируется.
Может кто-нибудь сталкивался с этим?
-
Ну такое ядро я не ставил, но вот в 2.6.32.3 флешка не работала без "SCSI disk support"(CONFIG_BLK_DEV_SD=y)
-
стоит это все...
и поддержка scsi disk и usb mass storage.
Скачал последний кратер (svn819) с сайте zao-zeo собрал с конфигурацией по умолчанию. проверил что включена поддержка всех типов USB mass storage и scsi. Собирал компилятором 4.1.1 опять же с сайта zao-zeo.
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "sdb1" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
В чем проблема не пойму. У меня нормальный образ собирается только из crater-svn741. С ядром 2.6.20.4
-
В чем проблема не пойму. У меня нормальный образ собирается только из crater-svn741. С ядром 2.6.20.4
КФС на внешней USB-флешке?
USB и SCSI драйверы модулями? Если модулями, initrd (или типа того) пользуем?
Если вкомпилены, ядру rootdelay= в cmdline стоит?
-
Спасибо. Все заработало. Дело было в rootdelay. Стоял 3 секунды - на 2.6.20.4 флешка успевала монтироваться, а в 2.6.21.5 нет. Сейчас поставил 6 сек. - все ок.
Еще вопрос. Никто vlc - плеер этим тулчейном не пробовал собирать. У меня все собирается, но при запуске не может найти символ
__gnu_uldivmod_helper.
-
Собрал.
vlc: Undefined symbol __gnu_uldivmod_helper лечится следующим образом. Добавляем
unsigned long long
__gnu_uldivmod_helper (unsigned long long a,
unsigned long long b,
unsigned long long *remainder)
{
unsigned long long quotient;
quotient = __udivdi3 (a, b);
*remainder = a - b * quotient;
return quotient;
}
в vlc.c
В итоге собрал вот этот кратер:http://arm.cirrus.com/files/linux/heelrod/linux-crater_20080104_d-src.tar.bz2 (http://arm.cirrus.com/files/linux/heelrod/linux-crater_20080104_d-src.tar.bz2) (в нем есть vlc - медиа плеер, ogg+ffmpeg кодеки) для ТИОН с ядром 2.6.21.5 и патчами от faa.
Ogg и mp3 файлы проигрываются очень медленно, хотя поддержка сопроцессора включена. Видео не проигрывается.
Ключи при сборке:
-mcpu=ep9312 -mfpu=maverick -mfloat-abi=softfp -O2 -ffast-math
Забыл добавить: Загрузка процессора при проигрывании 5-10%, но все равно проигрывается все медленно.
mpg123 "из коробки" не заработал
-
Собрал тоже самое, но тулчейном от cirrus-а (gcc-4.1.2). Все равно при проигрывании mp3 или ogg файлов все играется очень медленно. Может быть дело в alsa или в ядре? Но aplay, arecord работают нормально - файлы записываются и проигрываются...
Да. Еще момент - у меня звуковая карточка не от ЗАО-ЗЭО - просто нашел подходящий модуль от Advantech-овского пром. компа и подключил соответствующие входы-выходы. Кодек там Realtek ALC202 http://www.realtek.com/products/productsView.aspx?Langid=1&PFid=29&Level=5&Conn=4&ProdID=53 (http://www.realtek.com/products/productsView.aspx?Langid=1&PFid=29&Level=5&Conn=4&ProdID=53)
to faa: А вы не пробовали своим тулчейном собирать кодеки и играть звук?
-
to faa: А вы не пробовали своим тулчейном собирать кодеки и играть звук?
Звук не пробовал. А fftbench работает.
Но gcc4.2.4-eabi чуть медленнее, чем gcc4.1.2-eabi. Хотя это могли быть погрешности измерений. Особо не исследовал.
Будет время - звук соберу, проверю. Мои платы без звука. Надо Сириуса реанимировать и на нем смотреть :)
-
Случайно обнаружил еще одну вещь. Почему-то GPIO не работает.
Ядро 2.6.21.5.
Патч отсюда: ftp://ftp.ntcsm.ru/pub/tion9315/tion9315-2.6.21.5-eabi.patch.bz2 (http://ftp://ftp.ntcsm.ru/pub/tion9315/tion9315-2.6.21.5-eabi.patch.bz2)
делаю примерно так:
базовый адрес GPIO: 0x80840000
получаю mmap указатель на этот адрес
порт С и порт D (обычные выходы GPIO) находятся по адресам 0x80840008 и 0x8084000C соответственно.
Пишу, читаю байты.
В 2.6.20.4 - все работало, в 2.6.21.5 пишет Segmentation fault при попытке чтения или записи...
-
В 2.6.20.4 - все работало, в 2.6.21.5 пишет Segmentation fault при попытке чтения или записи...
uclibc какая? в 0.9.29 была ошибка - mmap старше 0х7fffffff криво работал.
патч я кидал в группу на гугле.
в тулчейне с фтп этот патч есть
-
Да. действительно патча не было. Наложил патч и на uClibc, которая в crunch-tools и на ту, которая собирается для таргета. Пересобрал тулчейн, потом новым тулчейном пересобрал ядро и uClibc. не помогло ???
-
Да. действительно патча не было. Наложил патч и на uClibc, которая в crunch-tools и на ту, которая собирается для таргета. Пересобрал тулчейн, потом новым тулчейном пересобрал ядро и uClibc. не помогло ???
Исходник в студию.
ЗЫ: У меня devmem работает (и от busybox, и devmem2, и devmem). Свои программки тоже все работают.
ЗЫЗЫ: Вот кусочки от рабочей devmem.
#define MAP_SIZE 1024UL
#define MAP_MASK (MAP_SIZE - 1)
if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL;
printf("/dev/mem opened.\n");
fflush(stdout);
/* Map one page */
map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, target & ~MAP_MASK);
if(map_base == (void *) -1) FATAL;
printf("Memory mapped at address %p.\n", map_base);
fflush(stdout);
virt_addr = map_base + (target & MAP_MASK);
/* skip */
*((volatile unsigned char *) virt_addr) = writeval;
read_result = *((volatile unsigned char *) virt_addr);