целевая модель разработки хоста - PullRequest
0 голосов
/ 18 марта 2011

Я довольно новичок во встроенном программировании на Linux и не очень хорошо понял эту концепцию.

Кто-нибудь может объяснить суть отношения "хост-цель"?Эта модель специфична только для кросс-компиляции?Используется ли он только потому, что «исполняемый код будет запущен в другой среде»?а что имеет значение с ядром linux на цели?Например, в книге «Сборка встроенной системы Linux» упоминается об этом, но не объясняется ее мотивация или цель такого типа разработки.

Ответы [ 3 ]

2 голосов
/ 19 марта 2011

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

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

1 голос
/ 18 марта 2011

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

Так что, да, модель "только" специфична для кросс-компиляции, но фактически каждая компиляция в Linux - это (вариант) кросс-компиляции, просто по умолчанию build, host и target автоматически устанавливаются на то же значение, что и машина, на которой вы работаете.

Тем не менее, даже тогда вы можете взять скомпилированный компилятор Linux-i386, исходные коды для него и "кросс-компилировать" его для Linux-amd64. И полученный двоичный файл будет работать намного быстрее на 64-битном процессоре.

Это довольно важно во встроенном программировании. Главным образом из-за того, что вы пишете программы для слабых процессоров, которые не способны запускать компилятор или будут запускать его с минимальной скоростью. Таким образом, вы берете кросс-компилятор на быстром процессоре (скажем, на нескольких многоядерных процессорах Intel) и кросс-компилируете для встроенного процессора (скажем, на некоторых младших ARM).

"В другой среде" все складывается очень мягко. То, что вы делаете, когда кросс-компиляция для встроенного - это работа с совершенно другим набором команд, разными режимами доступа к памяти, разными методами доступа к ресурсам и так далее, и так далее. Машина совершенно другой конструкции, чем сборка хозяина. Ваш хост сборки может быть ПК с Windows, на котором запущен Cygwin. Ваша цель может быть чип внутри смартфона. Двоичный файл не будет иметь ничего общего с файлами Cygwin .exe.

Как прямое следствие, -everything- должен быть скомпилирован для цели с нуля. Ядро, системные утилиты, системные библиотеки, все инструменты, на которых должен работать целевой объект. Дело в том, что если целью является киоск по продаже билетов, на самом деле нет смысла кросс-компилировать Eclipse, GCC и Gnome, а затем разрабатывать в «локальной» среде, печатая свой код на клавиатуре билетной кассы. Вместо этого вы просто кросс-компилируете основы ОС и ваши конкретные приложения. Вы сохраняете среду разработки на сборочной машине и кросс-компилируете все, что вам нужно, на встроенном устройстве.

[на практике вы получаете дистрибутив Linux для цели и просто компилируете все, что вам нужно изменить].

1 голос
/ 18 марта 2011

http://www.landley.net/writing/docs/cross-compiling.html

Кажется, довольно ясно. Какие конкретные вопросы у вас есть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...