Начальник задумал сделать систему на базе компьютера с процессором 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".
А на "Малинке" запустились оба варианта программы.
Как запускать программы, сделанные для других процессоров?
Модератор: Модераторы разделов
Re: Как запускать программы, сделанные для других процессоров?
Это понятно из их названия
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
- Модератор
- Сообщения: 20799
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как запускать программы, сделанные для других процессоров?
dpkg --add-architecture armhf
apt update
apt install libc6:armhf qemu-user-binfmt
И будет магия.
(В зависимости от целевой платформы может понадобиться не armhf, а armel. Уточните всё же, что там за железо.)
apt update
apt install libc6:armhf qemu-user-binfmt
И будет магия.
(В зависимости от целевой платформы может понадобиться не armhf, а armel. Уточните всё же, что там за железо.)
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали:
Re: Как запускать программы, сделанные для других процессоров?
Raspbian оф сборка под armv7 вроде без оптимизации neon. А rpi4 64/32бита - 64 битный процессор armv8, тут не поймешь, для чего это вам нужно и для каких задач.
Re: Как запускать программы, сделанные для других процессоров?
Зачем? Если код не содержит что-то SoC-specific то можно отлаживать собирая под хост и это позволит решить большую часть проблем.
- Bizdelnick
- Модератор
- Сообщения: 20799
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как запускать программы, сделанные для других процессоров?
Давно ли у них появилась сборка под armv7? Они ж под armv6 собирались всю жизнь.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Как запускать программы, сделанные для других процессоров?
А ну да, там же нет оптимизации neon, она появилась в armv7.
Re: Как запускать программы, сделанные для других процессоров?
Спасибо, попробую.Bizdelnick писал: ↑17.09.2021 01:43dpkg --add-architecture armhf
apt update
apt install libc6:armhf qemu-user-binfmt
И будет магия.
(В зависимости от целевой платформы может понадобиться не armhf, а armel. Уточните всё же, что там за железо.)
Спасибо. Теперь понятно. Я как-то увидел, что "hf" -- это "hard float", не подумал, что это может означать использование FPU.astroncia писал: ↑17.09.2021 01:35Это понятно из их названия
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 (аппаратная плавающая точка) (это быстрее)
Сейчас ещё раз сравнил, с помощью команды 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
Разница -- почти 6.7 раз. На процессорах ARM разница примерно в 2 раза.
Проверю, есть ли разница при трансляции с hf и без на "Малинке".
- Bizdelnick
- Модератор
- Сообщения: 20799
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как запускать программы, сделанные для других процессоров?
Это не только про FPU, там больше отличий в наборе инструкций (по умолчанию, по крайней мере; так-то флагами компилятора можно затюнить). В Debian, если не ошибаюсь, armel — это armv6 без hf, а armhf — это уже armv7. (Для справки: в Raspbian armhf — это armv6, но с hf).
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |