LINUX.ORG.RU

Как установить gcc на linux 2.4?

 ,


0

1

Имеется микрокомпьютер https://www.embeddedarm.com/products/TS-5300 с операционной системой Linux 2.4.31 i486, система настолько урезана, что нету никаких репозиториев, даже команды make нету.

Ни одна версия gcc работать не согласилась, но на ftp производителя нашел архив в котором содержится какая-то gcc библиотека по адресу: /usr/lib/gcc-lib/i386-pc-linux-gnu/2.95.3 в которой лежат несколько файлов наподобие cc1, cc1plus, cpp0 и т.п., попытался скомпилировать c++ ими, но если им скормить hello.cc на выходе получается файл hello.s с содержимым похожим на гибрид sh и ассемблера.

Что посоветуете делать? Как скомпилировать хотя бы hello world

P.S. Находил до этого какую-то версию gcc которая не требовала установки через make, а ставилась просто выполнением sh файла, но она заругалась на версию libc.so.6, мол ей нужна 2.3 и\или 2.11, а у меня 2.2.5



Последнее исправление: GeneralProger (всего исправлений: 1)

с операционной системой Linux 2.4.31 i486

Это не операционная система, а ядро.

sudopacman ★★★★★
()

это эмбеддед, гугли кросс-компиляция, gcc, toolchain, codesourcery. Хотя хз - под ядро 2.4 нужно специфический тулчейн делать, наверное самому ковырять придётся.

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

У меня к ней требований минимум, запустить простенькую программку на C и использовать ее DIO выходы в качестве GPIO, так что пока что во мне живет надежда, что удастся все-таки как-то скомпилировать для нее приложение

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

Я с Linux очень мало знаком, кросс компиляция, особенно как вы говорите «спецефическая» для меня скорее всего невыполнима, ввиду сложности и отсутствия опыта. Я так думаю что последняя надежда на успешную работу с этим устройством, это как-то установить на него GCC, особенно что библиотека какая-то от производителя раз есть, то видимо это возможно

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

Я бы взял musl libc. Она линкуется статически и избавляет от зависимости от libc.so.6

Есть готовый собранный тулчейн здесь. Остаётся только почитать, как пользоваться кросс-компилятором.

Писать нужно будет на чистом C. И при компиляции передать gcc флаг march (см. man), чтобы он для твоих исходников генерировал код, совместимый с i486.

uuwaan ★★
()
Последнее исправление: uuwaan (всего исправлений: 1)

под те временя надо искать gcc-3.x, лучше взять какой-нить дистр, типа debian potato, там будут все компоненты пригнаны друг к другу, и положит в chroot. И там можно будет компилировать.

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

я боюсь что современный тулчейн, собранный под ядра 4.x будет не совместим с ядром 2.4 и бинарники не будут работать.

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

Я вообще очень посредственно представляю как устроена кросс компиляция, может вы знаете какую-то пошаговую инструкцию для кросс компиляции с виртуальной машины? Например с ubuntu

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

С ядром обычно несовместима только libc, поскольку именно она дёргает функции ядра. Написано, что musl гарантированно совместима с 2.6, а простые программки с большой вероятностью заработают и на 2.4. Как я уже сказал, поскольку компилируем x86->x86, компилятору надо явно сообщить архитектуру процессора, иначе он подхватит её с машины, на которой работает.

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

По идее в вашем случае можно обойтись без специфической кросс-компиляции, если программа достаточно простая.

Если поставить в виртуалку полноценный дистрибутив тех лет для архитектуры i486 (можно чуть-чуть старее версию, главное не новее), поставить в нём из архива репозитория gcc, искомпилировать программу в статический бинарник с опциями типа -static -static-libgcc - то полученный бинарник по идее запустится на вашем устройстве.

GPFault ★★
()

Зачем тебе канпилять на железке? Кроссканпиляй на хосте под то железо и заливай бинари.

unt1tled ★★★★
()

Посоветую почитать мануал на gcc 2.95
Емнип, второй gcc с++ напрямую в бинарники не конпелял. Поставь redhat 5.2 в виртуалку и попробуй собрать.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от GeneralProger

Начнем с с поставленной задачи, а именно с дерганья GPIO.

Если в загрузчике выводы настроены как GPIO и ядро скомпилено с юзерспейсным GPIO, то вы вообще можете через баш дергать их. Точно не помню (под рукой посмотреть негде), но там должны быть пути типа /sys/class/gpio/export - для инициализации (передаете номер)

и после экспорта всякие /sys/class/gpio/gpioN/value и /sys/class/gpio/gpioN/direction

Если выводы не настроены как GPIO и/или у вас нет к ним доступа из юзерспейса, то вы самый несчастный человек на свете вам придется пересобирать ядро и загрузчик и, возможно, вносить правки в последний (что, судя по вашему вопросу, может оказаться вам не по силам)

p.s.

На самом деле все вышесказанное актуально для всяких ARM SOC и ядра 2.6.32, и, в вашем случае, может не совсем соответствовать действительности.

RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 5)

у данного компутера есть поддержка, форум, сайт? Да лучше выкиньи и купи raspberry pi 2/3, больше электричества от старья потратишь за меньшую мощь

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

Я с Linux очень мало знаком, кросс компиляция, особенно как вы говорите «спецефическая» для меня скорее всего невыполнима, ввиду сложности и отсутствия опыта.

Может быть, всё не так сложно, как кажется. «Специфический тулчейн» обычно можно собрать, всего лишь указав правильные флаги для configure при сборке binutils и GCC (может быть, нужно использовать ассемблер от производителя).

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

Еще надо выбрать правильные версии того, что собираешь. С Linux 2.4 максимум что может работать, это gcc 4.2, причем только если glibc обновить до 2.3.х

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

cc1plus там есть, компиляет прямо в .s, который gas потом в .o, как и на современном gcc.

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

Ввиду сложности и отсутствия опыта

Так опыт и не появиться если эти сложности не решать. Собери тулчейн и кросскомпилируй всё что душа пожелает.

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

Там может быть порезаный libc, причём поскольку 2.4 и адовое легаси, костыли там могут быть совершенно адовые.

Если нет какого-то специфического стороннего софта и/или железа под которое нет драйверов, я бы вообще рекомендовал собрать на основе buildroot прошивку с более-менее свежим ядром и уже на основе его делать свою софтину. Там и toolchain будет нормальный собран, и прочие грабли заботливо обойдены.

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 1)

см. выше моё сообщение.

Ну и в общем случае я бы рекомендовал выкидывать к хренам предустановленную операционку на подобных платах и сразу собирать под себя buildroot для несложных случаев.

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

Я только за, но как его туда установить? Там сначала запускается DOS и подгружает linux с помощью loadlin.exe, притом что в консоль DOS я не могу ничего вводить, могу только смотреть. Сама карта памяти с linux в моем распоряжении, на ней 2 раздела, 2 Мб FAT32 с DOS и 254 Мб ext4 с Linux, архитектура как я писал выше i486.

Что мне делать? Я даже близко не представляю как туда установить linux, можете расписать пошагово и желательно с ссылками на инструкции

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

Я понимаю, но пока не хочу вписываться в этот процесс, оставляю его на крайний случай, просто в идеале нужен компилятор на самом устройстве для его прошивки с разных компьютеров, а не привязке к одному. Я уже прихожу к выводу что проще будет поставить какой-то нормальный Linux туда, чем заниматься всем этим.

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

Еще надо выбрать правильные версии того, что собираешь. С Linux 2.4 максимум что может работать, это gcc 4.2, причем только если glibc обновить до 2.3.х

Я предлагаю установить GCC на ПК и кросс-компилировать. Разве настолько важно, какое ядро на целевом устройстве (если следить за вызываемыми функциями, конечно)?

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

Разве настолько важно, какое ядро на целевом устройстве

Да. GCC должен использовать заголовки целевого ядра и целевой glibc

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

Если внешние карточки есть, можно попробовать загрузить плату с такой карточки и посмотреть как «современные» операционки взлетят.

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

там ведь нюанс какой - многие современные дистры думать забыли про 486.

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

Емнип, второй gcc с++ напрямую в бинарники не конпелял

Компиляет в бинарники как миленький, у меня powerpc'шный под рукой есть

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

За пошагово и ссылками на инструкции в гугл. Слишком много писать.

Тебе нужно примерно следующее:

  • разобраться с загрузкой. Откуда грузится DOS, какой загрузчик, с CF грузится или из флеша на плате и что там происходит вообще.
  • подсунуть grub/lilo в качестве загрузчика.
  • подсунуть свою собранную систему, для начала, в виде kernel+initramfs

Систему я бы собирал с помощью http://buildroot.org/ тулчейн и rootfs он сам собирает, что удобно.

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

Вообщем пока что решил пользоваться toolchain, спасибо, все работает. Дальше наверное буду уже думать о переустановке ос

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

Вы не поняли)) Меня никто к этому не обязывает, просто есть микрокомпьютер, и я хочу использовать его в своих целях

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

254 Мб ext4

Откуда в 2.4.x могла взяться ext4?

У меня даже sudo нет

Команды ″sudo″ или прав суперпользователя?

Не вижу смысла пытаться ставить на i486 современную libc и gcc. Можно взять древний дистривбутив типа RedHat 7.2 или 9.0 или SlackWare 8.0 и вручную распаковать пакеты с компилятором и заголовочными файлами и пр. ИМХО, если поизучать файлы, можно будет найти какой дистрибутив «резали» для создания этого чуда, обычно под такие вещи берут что-то готовое, а не компиляют LFS.

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

+1 к варианту с chroot, а потом просто бинари класть в систему

вот моя тема: собрать Qt 5 для ARM - только у меня архитектура другая и дистр более новый

наверняка автору потребуется chroot с QEMU, эмулирующий i386/i486

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Shadow

Емнип, второй gcc с++ напрямую в бинарники не конпелял.

Знаешь, вообще-то и 6-й — тоже.

Macil ★★★★★
()

1. Если это производственное задание — в Job. Это будет справедливо.

2. Если просто «частный интерес» — выкинь это говно. Некоторые *обязаны* копаться в многолетних околоинтеловских высерах. Но ты?

На такого рода железках в *на порядки* проще работать под DOS. Там всё просто: никаких защит, и думаю, весьма и весьма подробные мануалы для дураков, хоть и на ассемблере.

В линуксе, для специфических устройств железяки, тебе нужно будет либо писать, либо использовать существующий ядерный модуль. Скорее всего, он будет делать устройство в /dev, которое тебе придётся ещё и руками прописывать с набором open/close/read/write. Реальность тогда была несколько более суровой.

на выходе получается файл hello.s с содержимым похожим на гибрид sh и ассемблера.

Так и должно быть. GCC никогда не делал бинарники. Тебе нужны binutils и собственно сам gcc. Ещё раз подробно изучи документацию. Должен быть SDK и/или toolchain под линукс.

Macil ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Ну на счёт эмуляции возможны варианты. ТС незнаком с линуксом, ему мож проще будет VirtualBox воткнуть и в него поставить Debian Potato, например. Chroot скорее всего не спасёт, так как ну уж слишком старое всё. Тут ещё вопрос, удастся ли безболезненно обновить систему, так как под 486 уже мало кто собирает, посыпаться всё может. Я бы с potato начал для безопасности.

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