Warning: touch() [function.touch]: Unable to create file /home/starterkit/starterkit.ru/html/error.log because Permission denied in /home/starterkit/starterkit.ru/html/errorhandler.php on line 51
- Embedded Linux - Форум - starterkit.ru
Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Embedded Linux
sasamy (Guest)
Добавлено 04.02.2009 01:30 Редактировалось 04.02.2009 01:30 Сообщение: 71
sasamy (Guest)

Давно знал про существование маленького шустрого компилятора TCC http://bellard.org/tcc/ от создателя qemu. Недавно вспомнил про него - он оказывается для arm умеет бинарники делать, но к сожалению только как кросс-компилятор на х86. Собственно в чем его преимущества
Цитата
Compiler Time(s) lines/second MBytes/second
TinyCC 0.9.22 2.27 859000 29.6
GCC 3.2 -O0 20.0 98000 3.4

он в 10!!! раз быстрей gcc собирает ядро и вообще любые бинарники. Я им баловался на х86 давно - в общем исходники на С с ним можно запускать как скрипты - он их на лету компилирует :) Был даже проект загрузки linux правда там для ядра патчи нужны были из исходников - ядро собиралось налету в процессе загрузки. Пользоваться им скорей практически нереально будет :) но все же как еще один вариант :) жаль что он под арм как нативный не умеет работать... сам его бинарник всего 300 кбайт. Вообще я искал маленький нативный С/С++ компилятор для арм... Не нашел :)
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 06.02.2009 19:52 Редактировалось 06.02.2009 19:52 Сообщение: 72
sasamy (Guest)

Цитата
crosstool-ng создает НЕ перемещаемый тулчейн из-за ключа --with-local-prefix...


Похоже ты всеже прав - я только сегодня это заметил. Пользовался одним и тем же срезом buildroot - первый раз собирал когда тулчайн был еще там куда его скопировал crosstool-ng а потом он видимо просто линкует существующие объектные файлы - поэтому я это сразу не заметил, сборка проходила без ошибок.
Спуститься к концу Подняться к началу
gopher (Guest)
Добавлено 12.02.2009 01:38 Редактировалось 12.02.2009 01:38 Сообщение: 73
gopher (Guest)

repairman,
сам в линуксе новичок, может подскажите в чем может быть проблема. Скачал http://repairman.smtp.ru/armv5l-linux-uclibc.tar.bz2, распаковал. собираю простой тест.
Код
#include <stdio.h>
int main()
{
printf("Test other data
");
return 0;
}


собираю статически (./armv5l-linux-uclibc-gcc ./test.c -o test_stat -static
) и динамически (./armv5l-linux-uclibc-gcc ./test.c -o test_dll
).
копирую на флешку (ext2) тесты и все содержимое armv5l-linux-uclibc/sys-root. Подключаю флешку к плате, монтирую, обновляю LD_LIBRARY_PATH.
тест, собранный статически запускается, динамически - нет.
Код
[@SK-AT91SAM9 usb]$./test_dll
-ash: ./test_dll: not found
[@SK-AT91SAM9 usb]$./test_stat
Test other data


_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно gopher 12.02.2009 г. в 01:45:56
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 12.02.2009 10:20 Редактировалось 12.02.2009 10:20 Сообщение: 74
repairman (Guest)

Цитата

[@SK-AT91SAM9 usb]$./test_dll
-ash: ./test_dll: not found


Так нету в этой директории файла test_dll... (???)

Путь к библиотекам прописан жестко в каждом бинарнике как /lib
Если их там нет, я вижу такое:
Код

[root@fedora-arm repman]# ./a.out
-bash: ./a.out: /lib/ld-uClibc.so.0: bad ELF interpreter: Нет такого файла или каталога


Вообще я не понимаю как Вы собираетесь работать имея одновременно и glibc и uclibc... Выберите что-то одно, вместе они жить не будут, хотя бы потому, что выполняют одинаковые функции, имеют одно и то же статическое место расположения и, частично, одинаковые имена файлов...
Если rootfs собрана с glibc - значит вам нужен glibc-тулчейн с ЭТОЙ ЖЕ версией glibc, чтобы бинарники работали сразу без колдовства и извращений... если с uclibc - значит uclibc тулчейн и нужные библиотеки уже лежат в ожидаемом месте... никаких библиотек, LD_LIBRARY_PATH, ldconfig - НЕ НУЖНО.... все уже есть на rootfs...

p.s. скопировал библиотеку и линк на нее в /lib на rootfs - и файл запустился...
Код

-rwxr-xr-x 1 repman repman 21168 Янв 23 2009 ld-uClibc-0.9.30.so
lrwxrwxrwx 1 repman repman 19 Фев 12 2009 ld-uClibc.so.0 -> ld-uClibc-0.9.30.so


... но IMHO, это неправильно и будут вилы... в этой библиотеке НЕ ВСЁ...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 12.02.2009 г. в 11:01:52
Спуститься к концу Подняться к началу
gopher (Guest)
Добавлено 13.02.2009 01:44 Редактировалось 13.02.2009 01:44 Сообщение: 75
gopher (Guest)

Цитата
p.s. скопировал библиотеку и линк на нее в /lib на rootfs - и файл запустился...

помогло! спасибо.
как выясняется ld-*so ищется в строго заданной директории, а уже остальные библиотеки по LD_LIBRARY_PATH.

Код

[@SK-AT91SAM9 usb]$cat ./bak/test_dll
ELFa(т‚484 (44Ђ4Ђ  ттЂтЂЂЂ Ђ ьэЂ444&#152;&#152;[b]/lib/ld-uClibc.so.0[/b]

вот оно где...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно gopher 13.02.2009 г. в 01:45:55
Спуститься к концу Подняться к началу
AntonKr (Guest)
Добавлено 19.02.2009 14:54 Редактировалось 19.02.2009 14:54 Сообщение: 76
AntonKr (Guest)

Добрый день!
Используя выше приведенные конфиги, я собрал свой toolchain с uClibc. С использованием этого toolchain-а, все вроде собиралось хорошо,
но тут столкнулся с небольшой проблемой при сборке самого ядра (2.6.28.5) используя данный ToolChain :

собранный тулчейн называется arm-none-linux-uclibcgnueabi

1. Сборку делаю как и обычно, но указываю новый тулчейн
Код
make -j3 ARCH=arm CROSS_COMPILE=arm-none-linux-uclibcgnueabi

2. Далее делаю сборку бинарника
Код
arm-none-linux-uclibcgnueabi-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin

и тут на выходе я получаю Linux.bin c размером около 3 гигов!!! И это при том, что vmlinux около 3 метров,
размер сопостовим с размером при использовании стандартного тулчейна (который идет с платой) arm-none-linux-gnueabi
и с ним на выходе получаем linux.bin около 3 метров. (если все компилировать изначатьно используя arm-none-linux-gnueabi)
При проведении сжатии
Код
gzip -c -9 linux.bin > linux.bin.gz

получаем размер около 4 метров, что говорит, что в linux.bin (в 3 гигах) есть какая-то пустота с мусором.

Может, кто сталкивался с этим? Уже сутки бьюсь, т.к. использование uClibc мне очень необходимо в связи с увеличившимися размерами при использовании стандартной библиотеки.

P.S. Сейчас решил все пройти с чистого листа (компиляцией своего тулчейна, ядра, рутфса и т.д.) и записать все телодвижения для создания полноценной инструкции. Надеюсь, что сильно поможет всем остальным.
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 19.02.2009 15:04 Редактировалось 19.02.2009 15:04 Сообщение: 77
repairman (Guest)

С UBoot идет утилитка mkimage, которая из стандартной zImage, получаемой при сборке ядра, делает нужную UBoot - uImage.

Пользуюсь таким скриптом:
Код

#!/bin/bash
./mkimage -A arm -O linux -C none -T kernel -a 20008000 -e 20008000 -n linux-2.6 -d arch/arm/boot/zImage uImage
cp uImage /tftpboot


p.s. заметил интересную вещь... похоже формат uImage менялся, т.к. образы сгенеренные новым mkimage старые UBoot не воспринимают (ошибка CRC)... т.е. mkimage должен быть от Вашей версии UBoot.

Проблем с размером не замечал... стандартный размер файла 0.9-1.7 мб

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 19.02.2009 г. в 15:14:18
Спуститься к концу Подняться к началу
AntonKr (Guest)
Добавлено 19.02.2009 16:38 Редактировалось 19.02.2009 16:38 Сообщение: 78
AntonKr (Guest)

Согласен, но mkimage применяется несколько позднее. А именно:
1. После сборки ядра получаем vmlinux
2. Переводим в бинари
Код
arm-none-linux-uclibcgnueabi-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin

3. Сжимаем
Код
gzip -c -9 linux.bin > linux.bin.gz

4. Готовим имадж для uBoot
Код
./tool/mkimage -A arm -O linux -T kernel -C gzip -a 0x20008000 -e 0x20008000 -n "Linux Kernel Image" -d linux.bin.gz zlinux

Это я взял с авторского диска. Возможно, что-то тут и лишнее (в цепочке). У меня после сборки ядра, на выходе, получается vmlinux, далее я его сжимаю (до сжатия он 4 метра, а после 1,5), в сжатом отдаю mkimage для подготовки. У Вас, видимо, все делается без сжатия. Или я где-то упустил этот момент? Но без сжатия добиться размера 0,9-1,5 думаю не реально.

Не сложно ли также сказать какой командой/настройкой вы делаете конфигурацию uBoot перед сборкой. Т.к. хотелось бы пересобрать uBoot, но не получается.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно AntonKr 19.02.2009 г. в 16:41:47
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 19.02.2009 16:45 Редактировалось 19.02.2009 16:45 Сообщение: 79
repairman (Guest)

Зачем что-то переводить, сжимать ?

Ядро уже лежит, готовое, переведенное и сжатое в arch/arm/boot/zImage... осталось только в uImage перевести, одна строчка...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 19.02.2009 г. в 16:46:20
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 19.02.2009 17:40 Редактировалось 19.02.2009 17:40 Сообщение: 80
repairman (Guest)

UBoot 1.2.0 собираю так:

Код

make distclean
make at91sam9260dfc_config
make CROSS_COMPILE=armv5l-linux-uclibc- CONFIG_NOSOFTFLOAT=1


Для SK необходимо поправить файл include/configs/at91sam9260dfc.h на предмет верной частоты генератора, объема ОЗУ и адреса ядра.
Также, чтобы сеть работала - подложить ему модуль ks8721bl.c (например из авторского комплекта) вместо dm9161...

UBoot 1.3.4, UBoot 2009.01 - собираются, работают, НО в них изменена работа сети... пока не получается ks8721 туда прицепить...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 19.02.2009 г. в 17:45:26
Спуститься к концу Подняться к началу
Форум » starterkit.ru » Embedded Linux