Arm unknown linux gnu

Embedded Handbook/General/Cross-compiling the kernel

Cross-compile a kernel for a system with flair!

Sources

The relevant kernel sources should be installed first. A kernel sources package can be quickly emerged from the Gentoo ebuild repository or fetch the latest sources from kernel.org. The method for actually compiling the kernel is all the same.

The kernel should be installed into the sysroot so if desired to cross-compile packages which include kernel modules, the process will be transparent. Otherwise, the actual location where the kernel is built does not matter. Some people build all their kernels in /usr/src/ for example.

Setup cross-compiling

There are two fundamental variables that the kernel uses to select the target architecture. Normally these values are guessed based on the build environment, but of course that environment here does not match the target embedded system, so they will need to be overriden. The variables in question are ARCH and CROSS_COMPILE . The default values for both are found in the top-level Makefile and the values of both may be overridden on the command line.

The ARCH variable refers to the architecture that the kernel is being built for, as recognized by the kernel itself. So while portage and other people may use «x86», the kernel uses «i386». The arch/ subdirectory should be quickly checked to determine which architecture is to be used.

Hopefully the CROSS_COMPILE variable is pretty self-explanatory. It should be set to the prefix of the toolchain (including the trailing dash «-«). So if the toolchain is invoked as say x86_64-pc-linux-gnu-gcc , the trailing gcc should be chopped off and that’s what should be used: x86_64-pc-linux-gnu- .

There is an additional variable, INSTALL_MOD_PATH , which defines where the /lib directory will be created, and all the modules stored. The kernel sources do not have to be transferred to the target device, but if any modules are built, this directory will be needed.

There are really two ways in which the system can be set up. The toplevel Makefile can be modified or the relevant variables can be overridden on the command line. Both methods are acceptable, so both will be covered. One of the following options can be chosen.

 
ARCH ?= $(SUBARCH) CROSS_COMPILE ?= 
 
ARCH ?= arm CROSS_COMPILE ?= arm-unknown-linux-gnu-

Overriding on the command-line (instead of in the Makefile ) would look something like this:

A little helper script can be used if it is necessary to switch between different kernel trees at the same time. The script will be referred to as xkmake :

 
#!/bin/sh exec make ARCH="arm" CROSS_COMPILE="arm-unknown-linux-gnu-" INSTALL_MOD_PATH="$SYSROOT>" "$@" 

Now, when building a kernel or performing any other action, xkmake should be executed instead of make .

Configure and compile

At this point, configuring and compiling the kernel is the same as any other kernel, so it won't be discussed in depth here. There are numerous HOWTOs and guides available that can cover the subject in much greater detail.

This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Mike Frysinger, Ned Ludd, Robin H. Johnson, Alex Tarkovsky, Alexey Shvetsov, Raúl Porcel, Joshua Saddler on April 28, 2013.
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.

Источник

Cross-compile POCO из Windows для Linux

POCO — легковесный, мультиплатформенный open-source набор библиотек и классов С++, облегчающих написание мультиплатформенного ПО.
Выпускается под Boost Software License.
Дополнительные сведения о POCO:
pocoproject.org/features.html
ru.wikipedia.org/wiki/POCO
Прекрасно организованная документация по структуре классов доступна в html-онлайн, html-оффлайн.
Документация по основным возможностям с примерами использования — в pdf: pocoproject.org/documentation/index.html

POCO имеет богатейший функционал — очень многое — всё-всё, что нужно для счастливой жизни C++ программиста! Работает инструментарий отлично, имеет продуманный API.

POCO собирается для большого числа ОС, в т.ч. Desktop Windows, Windows CE, Linux.

По своему опыту замечу, что POCO для этих ОС собирается без проблем.
Методику кроссплатформенной сборки из Windows для этих ОС постараюсь вам, уважаемые с++ разработчики, донести в своих трёх статьях «Cross-compile POCO из Windows».

Статья «Cross-compile POCO из Windows для WinCE» habrahabr.ru/post/223157

Cross-compile POCO из Windows для Linux

Метод, разрабатывался:
— для cross-platform toochain терминала Spire (ARM9)
— хост-машина Windows 7 64
— POCO Basic Edition 1.4.6p4

Соберём POCO для динамического подключения (результат — файлы *.so ) или для статического подключения (результат — файлы *.a )

Подготовка POCO

Подготовить директорию с POCO:
— скачать по адресу pocoproject.org/download/index.html архив POCO последней стабильной версии Basic Edition. По кнопке «Sources for Linux, OS X, etc.». На момент написания статьи архив — poco-1.4.6p4.tar.gz
— разархивировать в отдельную директорию. К примеру, с помощью WinRAR и в директорию C:/poco/poco-1.4.6p4.

Подготовить файл описания сборки для Unix-платформ.
Этот файл будет использоваться командой configure для определения окружения (имя утилит toolchain и другие параметры для построения makefiles)
— найти в C:/poco/poco-1.4.6p4/build/config/ файл «ARM-Linux» и перекопировать его с другим именем, например с именем вашей платформы. Я присвоил имя ARM-Linux-Spire.
Внимание! Имя это будет использовано в шаге «Сборка POCO».
Информация по файлу описания сборки и системе сборки: http://pocoproject.org/docs/99150-GMakeBuildNotes.html
Изменить наш файл ARM-Linux-*** в текстовом редакторе (я использовал Notepad++):
1) Найти и закомментировать строки STLPORT_INCLUDE= , STLPORT_LIB= , OPENSSL_INCLUDE= , CFLAGS= . Должно получиться так:
#STLPORT_INCLUDE = /usr/local/include/stlport

#STLPORT_LIB = /usr/local/lib

#OPENSSL_INCLUDE = /usr/local/arm/2.95.3/include

#OPENSSL_LIB = /usr/local/arm/2.95.3/lib

#CFLAGS = -Isrc

2) Из SYSFLAGS = убрать -I$(STLPORT_INCLUDE) -I$(OPENSSL_INCLUDE)
Должно получиться так:
#SYSFLAGS = -I$(STLPORT_INCLUDE) -I$(OPENSSL_INCLUDE) -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE -DPOCO_NO_FPENVIRONMENT

SYSFLAGS = -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE -DPOCO_NO_FPENVIRONMENT

3) Из SYSLIBS = убрать -L$(STLPORT_LIB) -L$(OPENSSL_LIB) -lstlport_arm-linux-gcc
Должно получиться так:
#SYSLIBS = -L$(STLPORT_LIB) -L$(OPENSSL_LIB) -lstlport_arm-linux-gcc -lpthread -ldl -lrt

SYSLIBS = -lpthread -ldl -lrt

4) Найти строку TOOL = arm-linux и изменить arm-linux на префикс утилит toolchain от вашего оборудования.
Я изменил так:
TOOL = arm-unknown-linux-gnu

Обычно toolchain кроссплатформенной разработки для Linux-устройства поставляется вместе с оборудованием.
Это просто архив с утилитами из набора GCC ( ru.wikipedia.org/wiki/GNU_Compiler_Collection ).

Для того, чтобы узнать имя префикса, перейдите в toolchain в директорию /bin, и обратите внимание на файл *-gcc.exe или *-g++.exe
Например, мой toolchain содержит файлы:
arm-unknown-linux-gnu-gcc.exe

arm-unknown-linux-gnu-g++.exe

, поэтому для моего toolchain префикс arm-unknown-linux-gnu .
5) Найти строку POCO_TARGET_OSARCH = ARM и присвоить произвольное имя, которое во время сборки будет использовано для создания директорий с результатами сборки. Я присвоил имя POCO_TARGET_OSARCH = ARM_Spire , чтобы отражало осмысленное имя платформы. Поэтому у меня библиотеки POCO после сборки будут располагаться в C:\poco\poco-1.4.6p4\lib\Linux\ARM_Spire .
6) Обратим внимание на настройку результата сборки:
если собирать POCO для динамического подключения:
LINKMODE должен стоять в SHARED
, а для статического подключения:
LINKMODE должен стоять в STATIC

Подготовка инструментов

Установить инструменты:
— MinGW msys. Будем использовать msys shell. У меня MinGW шёл в комплекте с sdk для устройства, а вы сможете взять с официального сайта www.mingw.org
— любую консоль для Windows с поддержкой copy-paste. Автор использовал ConEmu x64 www.conemu.ru

Открыть консоль с поддержкой copy-paste, все дальнейшие шаги будут из этой консоли.

Проверить доступность директории toochain/bin, ввести имя gcc-утилиты из вашего toochain. У меня так:
arm-unknown-linux-gnu-gcc -v
— если эта утилита не найдена, то прописать путь к ней. У меня путь такой:
set PATH=C:\Spire\SDT\TOOLCHAIN\20140226\bin;%PATH%
— снова проверить доступность toochain

Проверить доступность утилиты make:
make -v
— если эта утилита не найдена, то прописать путь к ней. У меня путь такой:
set PATH=C:\Spire\SDT\MinGW\bin;%PATH%
— снова проверить доступность make

Войти в командную оболочку msys, выполнить:
sh
— если эта утилита не найдена, то прописать путь к ней. У меня путь такой:
set PATH=C:\Spire\SDT\MinGW\msys\1.0\bin;%PATH%

Все дальнейшие шаги будут выполняться из консоли с поддержкой copy-paste + командной оболочки msys

Установить директорию с POCO текущей:
cd C:/poco/poco-1.4.6p4

Сборка POCO

Перед сборкой (для порядка) можно проверить доступность конфигуратора
./configure --help

Выполнить конфигурацию POCO:
./configure --config=ARM-Linux-Spire
или, для сборки POCO без тестов и примеров:
./configure --config=ARM-Linux-Spire --no-tests --no-samples
если конфигурация успешна, выведется примерно такое сообщение:
Configured for ARM-Linux-Spire

— выполнить сборку POCO:
make
время сборки POCO с тестами и примерами на моём ПЭВМ (Intel i5 3.300Gz 8Gb) заняло 12 минут.

Собранные библиотеки POCO будут находиться в \lib\Linux в директории, которую мы определили в переменной POCO_TARGET_OSARCH в файле настроек конфигурации.
У меня путь к собранным библиотекам POCO оказался такой: C:\poco\poco-1.4.6p4\lib\Linux\ARM_Spire

Возможные проблемы

У меня были проблемы, не связанные напрямую с POCO:
-У проекта со статическими POCO не разрешались зависимости в классе AtomicCounter от
__sync_add_and_fetch, __sync_fetch_and_add, __sync_sub_and_fetch, __sync_fetch_and_sub
Решение: добавить в SYSFLAGS = . -DPOCO_NO_GCC_ATOMICS чтобы использовать другую реализацию AtomicCounter .
-Проект со статическими POCO успешно собирается, но при запуске исполняемой программы на устройстве — в консоль выдается:
/lib/libgcc_s.so.1: version 'GCC_4.3.0' not found (required by ) это происходит из-за неодинаковых версий libgcc на устройстве и toolchain на хост-машине. Решение: прилинковать к исполняемой программе библиотеку libgcc .

Кардинальный путь поиска причин проблем связанных со сборкой POCO: подключить исходники POCO к исполняемому файлу и попробовать собрать в составе файла.

Источники информации

Готовые инструментарии с++ делают наш труд более приятным и более плодотворным. Успехов, уважаемые коллеги!

  • POCO cross compile
  • POCO cross compiling
  • Cross compiling POCO из Windows
  • Cross compiling POCO
  • POCO Linux
  • compile POCO for linux
  • аналог qt
  • analogue qt
  • analogue boost
  • аналог boost
  • потоки с++
  • логгер c++
  • tcp/ip c++
  • smart pointer c++
  • Types and Byte Order c++
  • File System c++
  • Date and Time c+
  • Cryptographic c++
  • Logging c++
  • Notifications c++
  • Events c++
  • cross threads c++
  • cross Libraries c++
  • URI c++
  • UUID generator c++
  • Applications c++
  • Configuration Files c++
  • Configuring Logging c++
  • Network c++
  • cross ip c++
  • cross tcp c++
  • cross udp c++
  • фреймворк с++
  • cross framework c++

Источник

Читайте также:  Install arduino ide on linux
Оцените статью
Adblock
detector