Как запускать программы, сделанные для других процессоров?

Любые разговоры которые хоть как-то связаны с тематикой форума

Модератор: Модераторы разделов

MiK13
Сообщения: 1062
ОС: Linux Debian

Как запускать программы, сделанные для других процессоров?

Сообщение MiK13 »

Начальник задумал сделать систему на базе компьютера с процессором ARM (в частности какой-то Cortex)
Возникла задача трансляции и отладки программ для этого компьютера. С трансляцией особых проблем не возникло. В Debian есть три кросс-компилятора: linux-gnueabi, linux-gnueabihf и none-eabi. Третий,как я понял, для создания программ, работающих без системы. На данный момент он не интересен. Попробовал транслировать первыми двумя -- получается. В чём их различие, пока не понял.
Но хотелось бы иметь возможность запускать на своём компьютере. Причём несколько лет назад, когда ещё использовал Debian 9, я это сделал, установив qemu-arm. Но сейчас, на Buster и Bullseye это не получается. Что и как надо установить?

С linux-gnueabi и linux-gnueabihf тоже не ясно. В чём их различие?
Я написал простую программу и сделал два её варианта -- "eabi" и "eabihf"
У нас на работе есть три компьютера с процессором ARM. На одном стоит Ubuntu (какая -- не помню, в /etc/debian_version "jessie/sid")
Ещё что-то совсем примитивное -- линус грузится, как сказал начальник, из флешки объёмом 32 МБ. Доступ только через COM-порт. Но сеть есть. Если задать IP адрес и путь, то можно и по SSH подключиться.
И ещё есть "Малинка", Pi4. На ней -- Raspbian (10.10). Кстати, малинка мня удивила; задачу по расчёту таблиц которая на моём Core 2 Duo 3 ГГц считается больше 3 секунд, она посчитала примерно за 2,5 секунды.
И я на этих трёх компьютерах проверял свою программу. На убунте запустился только вариант "eabihf", а на другом компьютере -- только "eabi".
А на "Малинке" запустились оба варианта программы.
Спасибо сказали:
Аватара пользователя
astroncia
Сообщения: 133

Re: Как запускать программы, сделанные для других процессоров?

Сообщение astroncia »

MiK13 писал:
17.09.2021 00:40
С linux-gnueabi и linux-gnueabihf тоже не ясно. В чём их различие?
Это понятно из их названия :)
hf - значит hard float.
https://wiki.debian.org/ArmHardFloatPort/VfpComparison#Details_on_GCC_floating-point_options
Добавлено (01:41):
Soft float - значит эмуляция плавающей точки.
Hard float - использовать FPU (аппаратная плавающая точка) (это быстрее)
Последний раз редактировалось astroncia 17.09.2021 01:49, всего редактировалось 2 раза.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19435
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как запускать программы, сделанные для других процессоров?

Сообщение Bizdelnick »

dpkg --add-architecture armhf
apt update
apt install libc6:armhf qemu-user-binfmt
И будет магия.
(В зависимости от целевой платформы может понадобиться не armhf, а armel. Уточните всё же, что там за железо.)
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 1998
ОС: Gentoo

Re: Как запускать программы, сделанные для других процессоров?

Сообщение ormorph »

MiK13 писал:
17.09.2021 00:40
Кстати, малинка мня удивила; задачу по расчёту таблиц которая на моём Core 2 Duo 3 ГГц считается больше 3 секунд, она посчитала примерно за 2,5 секунды.
Raspbian оф сборка под armv7 вроде без оптимизации neon. А rpi4 64/32бита - 64 битный процессор armv8, тут не поймешь, для чего это вам нужно и для каких задач.
Спасибо сказали:
IMB
Сообщения: 2545
ОС: Debian

Re: Как запускать программы, сделанные для других процессоров?

Сообщение IMB »

Зачем? Если код не содержит что-то SoC-specific то можно отлаживать собирая под хост и это позволит решить большую часть проблем.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19435
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как запускать программы, сделанные для других процессоров?

Сообщение Bizdelnick »

ormorph писал(а):
17.09.2021 06:44
Raspbian оф сборка под armv7 вроде без оптимизации neon.
Давно ли у них появилась сборка под armv7? Они ж под armv6 собирались всю жизнь.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 1998
ОС: Gentoo

Re: Как запускать программы, сделанные для других процессоров?

Сообщение ormorph »

Bizdelnick писал:
17.09.2021 12:42
Давно ли у них появилась сборка под armv7?
А ну да, там же нет оптимизации neon, она появилась в armv7.
Спасибо сказали:
MiK13
Сообщения: 1062
ОС: Linux Debian

Re: Как запускать программы, сделанные для других процессоров?

Сообщение MiK13 »

Bizdelnick писал:
17.09.2021 01:43
dpkg --add-architecture armhf
apt update
apt install libc6:armhf qemu-user-binfmt
И будет магия.
(В зависимости от целевой платформы может понадобиться не armhf, а armel. Уточните всё же, что там за железо.)
Спасибо, попробую.
astroncia писал:
17.09.2021 01:35
MiK13 писал:
17.09.2021 00:40
С linux-gnueabi и linux-gnueabihf тоже не ясно. В чём их различие?
Это понятно из их названия :)
hf - значит hard float.
https://wiki.debian.org/ArmHardFloatPort/VfpComparison#Details_on_GCC_floating-point_options
Добавлено (17.09.2021 01:41):
Soft float - значит эмуляция плавающей точки.
Hard float - использовать FPU (аппаратная плавающая точка) (это быстрее)
Спасибо. Теперь понятно. Я как-то увидел, что "hf" -- это "hard float", не подумал, что это может означать использование FPU.
Сейчас ещё раз сравнил, с помощью команды time, время расчёта этой программой на Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz.

Shell

mik13@MiK13:/Work$ time ./ctn
real 0m3,227s
user 0m3,161s
sys 0m0,064s
mik13@MiK13:/Work$ time ./ctn-f
real 0m0,482s
user 0m0,445s
sys 0m0,020s
ctn странслирована с опцией -O3, а ctn-f -- с опцией -Ofast
Разница -- почти 6.7 раз. На процессорах ARM разница примерно в 2 раза.
Проверю, есть ли разница при трансляции с hf и без на "Малинке".
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19435
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как запускать программы, сделанные для других процессоров?

Сообщение Bizdelnick »

MiK13 писал:
17.09.2021 14:50
Спасибо. Теперь понятно. Я как-то увидел, что "hf" -- это "hard float", не подумал, что это может означать использование FPU.
Это не только про FPU, там больше отличий в наборе инструкций (по умолчанию, по крайней мере; так-то флагами компилятора можно затюнить). В Debian, если не ошибаюсь, armel — это armv6 без hf, а armhf — это уже armv7. (Для справки: в Raspbian armhf — это armv6, но с hf).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: