Mudanças entre as edições de "Cross-compiling e compilação distribuída para ARM"

De Área31 Hackerspace
 
(11 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
 
== Configure o Cross-Compiling no Gentoo/Funtoo ==
 
== Configure o Cross-Compiling no Gentoo/Funtoo ==
 
Utilizaremos o overlay ambro-cross, visto que é bem estável. Mais infos:
 
Utilizaremos o overlay ambro-cross, visto que é bem estável. Mais infos:
https://code.google.com/p/ambro-cross-overlay/wiki/Instructions
+
 
 +
https://code.google.com/p/ambro-cross-overlay/wiki/Instructions
  
 
=== Server/node cluster distcc (compilação distribuída) ===
 
=== Server/node cluster distcc (compilação distribuída) ===
 
Configure o ambiente para compilação cruzada:
 
Configure o ambiente para compilação cruzada:
cd /usr/local
+
{{console|body=
 
+
###i## cd /usr/local
svn checkout https://ambro-cross-overlay.googlecode.com/svn/trunk/ ambro-cross-overlay
+
###i## svn checkout https://ambro-cross-overlay.googlecode.com/svn/trunk/ ambro-cross-overlay
 +
}}
  
 
Adicione ao seu make.conf:
 
Adicione ao seu make.conf:
<pre>
+
{{file|name=/etc/make.conf|body=
 
PORTDIR_OVERLAY="
 
PORTDIR_OVERLAY="
 
/usr/local/portage-crossdev
 
/usr/local/portage-crossdev
 
/usr/local/ambro-cross-overlay"
 
/usr/local/ambro-cross-overlay"
</pre>
+
}}
  
 
=== Converta o diretório /etc/portage ===
 
=== Converta o diretório /etc/portage ===
 
==== Crie um script para converter o /etc/portage para o padrão de diretórios ====
 
==== Crie um script para converter o /etc/portage para o padrão de diretórios ====
 +
{{console|body=
 +
###i## vi ~/convert-profile-to-files.sh
 +
}}
  
vi ~/convert-profile-to-files.sh
+
{{file|name=~/convert-profile-to-files.sh|desc=Convert portage files script|body=
 
 
<pre>
 
 
#!/bin/bash
 
#!/bin/bash
 
PROFILE_DIR="/etc/portage"
 
PROFILE_DIR="/etc/portage"
Linha 43: Linha 46:
  
 
echo "Completed!"
 
echo "Completed!"
</pre>
+
}}
  
 
==== Execute o script criado ====
 
==== Execute o script criado ====
chmod +x  ~/convert-profile-to-files.sh
+
{{console|body=
 +
###i## chmod +x  ~/convert-profile-to-files.sh
 +
###i## bash ~/convert-profile-to-files.sh
 +
}}
  
  bash ~/convert-profile-to-files.sh
+
=== Instale o crossdev em seu servidor i686 ou x86_64 ===
 +
Desmascare a última versão do crossdev:
 +
{{console|body=
 +
###i## echo "sys-devel/crossdev" >> /etc/portage/package.keywords/monolithic
 +
}}
  
=== Instale o crossdev ===
 
Desmascare a última versão do crossdev:
 
echo "sys-devel/crossdev" >> /etc/portage/package.keywords/monolithic
 
  
 
=== Construa a ferramenta de compilação cruzada ===
 
=== Construa a ferramenta de compilação cruzada ===
mkdir /usr/local/portage-crossdev
+
{{console|body=
 +
###i## mkdir /usr/local/portage-crossdev
 +
}}
  
 +
==== Raspberry Pi ====
 
Compile o ambiente '''armv6j-hardfloat-linux-gnueabi''' usando o crossdev:
 
Compile o ambiente '''armv6j-hardfloat-linux-gnueabi''' usando o crossdev:
crossdev --ov-output /usr/local/portage-crossdev --stable armv6j-hardfloat-linux-gnueabi
+
{{console|body=
 +
###i## crossdev --ov-output /usr/local/portage-crossdev --stable armv6j-hardfloat-linux-gnueabi
 +
}}
 +
 
 +
ou
 +
{{console|body=
 +
###i## crossdev --stable armv6j-hardfloat-linux-gnueabi --gcc 4.8.1-r3 --libc 2.15-r4 --binutils 2.22-r1
 +
}}
 +
 
 +
 
 +
==== Cubieboard2 ====
 +
Compile o ambiente '''armv7a-hardfloat-linux-gnueabi''' usando o crossdev:
 +
{{console|body=
 +
###i## crossdev --ov-output /usr/local/portage-crossdev --stable armv7a-hardfloat-linux-gnueabi
 +
}}
 +
 
 +
 
 +
ou
 +
{{console|body=
 +
###i## crossdev --stable armv7a-hardfloat-linux-gnueabi --gcc 4.6.2-r1 --libc 2.15-r4 --binutils 2.21.1-r1
 +
}}
 +
 
 +
 
 +
== Prepare o ambiente ==
 +
Configure o arquivo de configuração do distccd conforme exemplo abaixo:
 +
{{console|body=
 +
###i## vi /etc/conf.d/distccd
 +
}}
 +
 
 +
 
 +
{{file|name=/etc/conf.d/distccd|desc=config do distccd|body=
 +
DISTCCD_OPTS="-j2"
 +
 
 +
DISTCCD_EXEC="/usr/bin/distccd"
 +
 
 +
DISTCCD_PIDFILE="/var/run/distccd/distccd.pid"
 +
 
 +
DISTCCD_OPTS="${DISTCCD_OPTS} --port 3632"
 +
 
 +
DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"
 +
 
 +
DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.254.0/24"
 +
 
 +
DISTCCD_OPTS="${DISTCCD_OPTS} -N 15"
 +
}}
 +
 
 +
Exporte as variáveis do distcc:
 +
{{console|body=
 +
export DISTCCD_OPTS="-j2"
 +
 
 +
export DISTCCD_EXEC="/usr/bin/distccd"
 +
 
 +
export DISTCCD_PIDFILE="/var/run/distccd/distccd.pid"
 +
 
 +
export DISTCCD_OPTS="${DISTCCD_OPTS} --port 3632"
 +
 
 +
export DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"
 +
 
 +
export DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.254.0/24"
 +
 
 +
export DISTCCD_OPTS="${DISTCCD_OPTS} -N 15"
 +
}}
 +
 
 +
Exporte as variáveis de definição dos nós do cluster:
 +
{{console|body=
 +
###i## export DISTCC_HOSTS="192.168.254.254"
 +
}}
 +
 
 +
ou
 +
{{console|body=
 +
###i## export DISTCC_HOSTS="localhost 192.168.254.254"
 +
}}
 +
 
 +
Acesse o diretório desejado:
 +
{{console|body=
 +
###i## cd /opt/project
 +
###i## nohup make CC="distcc gcc" -j4 > /root/nohup.make &
 +
}}
 +
 
 +
ou
 +
{{console|body=
 +
###i## nohup make CC="distcc armv6j-hardfloat-linux-gnueabi-gcc" -j2 > /root/nohup.make &
 +
}}
 +
 
 +
 
 +
== Instale o projeto ==
 +
{{console|body=
 +
###i## make install && make modules_install
 +
}}
  
  
 +
Seja feliz! :D
  
  
 +
[[Categoria:Embarcados]]
 
[[Categoria:SoftwareOpensource]]
 
[[Categoria:SoftwareOpensource]]
 
[[Categoria:Linux]]
 
[[Categoria:Linux]]
 +
[[Categoria:KnowledgeBase]]

Edição atual tal como às 12h00min de 5 de fevereiro de 2019

Configure o Cross-Compiling no Gentoo/Funtoo

Utilizaremos o overlay ambro-cross, visto que é bem estável. Mais infos:

https://code.google.com/p/ambro-cross-overlay/wiki/Instructions

Server/node cluster distcc (compilação distribuída)

Configure o ambiente para compilação cruzada:

# cd /usr/local
# svn checkout https://ambro-cross-overlay.googlecode.com/svn/trunk/ ambro-cross-overlay

Adicione ao seu make.conf:

   /etc/make.conf
PORTDIR_OVERLAY="
/usr/local/portage-crossdev
/usr/local/ambro-cross-overlay"

Converta o diretório /etc/portage

Crie um script para converter o /etc/portage para o padrão de diretórios

# vi ~/convert-profile-to-files.sh
   ~/convert-profile-to-files.sh - Convert portage files script
#!/bin/bash
PROFILE_DIR="/etc/portage"

if [ ! -e ${PROFILE_DIR} ]; then
  mkdir ${PROFILE_DIR};
fi;

for PACK_DIR in package.accept_keywords package.keywords package.use package.unmask package.mask; do
  CUR_DIR="${PROFILE_DIR}/${PACK_DIR}"
  if [ ! -e ${CUR_DIR} ]; then
    mkdir ${CUR_DIR}
  fi

  if [ -e ${CUR_DIR} -a ! -d ${CUR_DIR} ]; then
    mv ${CUR_DIR} ${CUR_DIR}.moving
    mkdir ${CUR_DIR}
    mv ${CUR_DIR}.moving ${CUR_DIR}/monolithic
  fi
done

echo "Completed!"

Execute o script criado

# chmod +x  ~/convert-profile-to-files.sh
# bash ~/convert-profile-to-files.sh

Instale o crossdev em seu servidor i686 ou x86_64

Desmascare a última versão do crossdev:

# echo "sys-devel/crossdev" >> /etc/portage/package.keywords/monolithic


Construa a ferramenta de compilação cruzada

# mkdir /usr/local/portage-crossdev

Raspberry Pi

Compile o ambiente armv6j-hardfloat-linux-gnueabi usando o crossdev:

# crossdev --ov-output /usr/local/portage-crossdev --stable armv6j-hardfloat-linux-gnueabi

ou

# crossdev --stable armv6j-hardfloat-linux-gnueabi --gcc 4.8.1-r3 --libc 2.15-r4 --binutils 2.22-r1


Cubieboard2

Compile o ambiente armv7a-hardfloat-linux-gnueabi usando o crossdev:

# crossdev --ov-output /usr/local/portage-crossdev --stable armv7a-hardfloat-linux-gnueabi


ou

# crossdev --stable armv7a-hardfloat-linux-gnueabi --gcc 4.6.2-r1 --libc 2.15-r4 --binutils 2.21.1-r1


Prepare o ambiente

Configure o arquivo de configuração do distccd conforme exemplo abaixo:

# vi /etc/conf.d/distccd


   /etc/conf.d/distccd - config do distccd
DISTCCD_OPTS="-j2"

DISTCCD_EXEC="/usr/bin/distccd"

DISTCCD_PIDFILE="/var/run/distccd/distccd.pid"

DISTCCD_OPTS="${DISTCCD_OPTS} --port 3632"

DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"

DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.254.0/24"

DISTCCD_OPTS="${DISTCCD_OPTS} -N 15"

Exporte as variáveis do distcc:

export DISTCCD_OPTS="-j2"

export DISTCCD_EXEC="/usr/bin/distccd"

export DISTCCD_PIDFILE="/var/run/distccd/distccd.pid"

export DISTCCD_OPTS="${DISTCCD_OPTS} --port 3632"

export DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"

export DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.254.0/24"

export DISTCCD_OPTS="${DISTCCD_OPTS} -N 15"

Exporte as variáveis de definição dos nós do cluster:

# export DISTCC_HOSTS="192.168.254.254"

ou

# export DISTCC_HOSTS="localhost 192.168.254.254"

Acesse o diretório desejado:

# cd /opt/project
# nohup make CC="distcc gcc" -j4 > /root/nohup.make &

ou

# nohup make CC="distcc armv6j-hardfloat-linux-gnueabi-gcc" -j2 > /root/nohup.make &


Instale o projeto

# make install && make modules_install


Seja feliz! :D