[RFC] configuracion en neo y compilacion en PC con distccd y toolchain how-to (largo)

2 messages Options
Embed this post
Permalink
jluis

[RFC] configuracion en neo y compilacion en PC con distccd y toolchain how-to (largo)

Reply Threaded More More options
Print post
Permalink

Desarroyo de aplicaciones en el neo compilando en pc

Esto es una guía inicial que funciona, yo lo he probado dos veces desde cero
con rootfs en SD en FSO.
SHR no tiene todos los paquetes necesarios y habría que tirar de angstrom para
mas cosas.  
Me gustaría también que comentaseis en que paginas de la wiki se puede
referenciar esta técnica.

El ejemplo escogido, el núcleo, no es de los que mas se benefician de esta
técnica.

Preparando el entorno en el PC:

Instalamos el toolchain de openmoko http://wiki.openmoko.org/wiki/Toolchain

creamos enlaces simbólicos en /usr/local/openmoko/arm/bin/ para gcc y cc
apuntando a:
/usr/local/openmoko/arm/bin/arm-angstrom-linux-gnueabi-gcc

Instalamos distcc (en las distribuciones basadas en debian es un solo paquete)


Preparando en el Neo:

crear hello.c
cat > hello.c <<EOF
#include <stdio.h>
int main(void) {
printf("Hello world\n");
return 0;
}
EOF

instalar lo necesario para compilarlo

opkg install gcc-symlinks gcov binutils-symlinks libc6-dev

Probamos que funciona:
root@om-gta02:~# gcc -o hello hello.c
root@om-gta02:~# hello
Hello world
root@om-gta02:~#

Instalamos distcc y make  de angstrom ( no están en FSO)

opkg install
http://www.angstrom-distribution.org/feeds/2007/ipk/glibc/armv4t/base/make_3.81-r0_armv4t.ipk
opkg install
http://www.angstrom-distribution.org/feeds/2007/ipk/glibc/armv4t/base/distcc_2.18.3-r3_armv4t.ipk 

En una shell del host cargamos el entorno del toolchain y distccd
. /usr/local/openmoko/arm/setup-env # ejecutamos setup-env con el shell activo
distccd --allow
192.168.0.202 --verbose --no-detach --zeroconf --log-stderr --daemon

Completamos la configuración del neo:
Si ejecutamos distcc --show-hosts vemos que nos ha instalado en neo en primer
lugar
root@om-gta02:~# distcc --show-hosts
192.168.0.202:3632/4
192.168.0.200:3632/8

editamos /etc/default/distcc para que no arranque distccd  matamos el proceso
y comprobamos que funciona:
root@om-gta02:~# sed -i
s/^STARTDISTCC=\"true/STARTDISTCC=\"false/ /etc/default/distcc
root@om-gta02:~# killall distccd
root@om-gta02:~# distcc --show-hosts
192.168.0.200:3632/8
root@om-gta02:~# /etc/init.d/distcc start
STARTDISTCC is set to false in /etc/default/distcc
/usr/bin/distccd not starting

Creamos los enlaces simbólicos para gcc y cc llamen a distcc:
root@om-gta02:~# mkdir /usr/local
root@om-gta02:~# mkdir /usr/local/bin
root@om-gta02:~# ln -s /usr/bin/distcc /usr/local/bin/gcc
root@om-gta02:~# ln -s /usr/bin/distcc /usr/local/bin/cc

Y probamos :
root@om-gta02:~# rm hello
root@om-gta02:~# DISTCC_VERBOSE=1 cc -c hello.c - o hello #si no usamos -c
compila en local
distcc[8252] (dcc_trace_version) distcc 2.18.3 arm-angstrom-linux-gnueabi;
built Aug  5 2008 03:45:13
distcc[8252] (dcc_recursion_safeguard) safeguard level=0
distcc[8252] (main) compiler name is "cc"
....
distcc[8252] (dcc_parse_hosts) found tcp token "192.168.0.200:3632/8"
distcc[8252] (dcc_lock_host) got cpu lock on 192.168.0.200:3632/8 slot 0 as
fd3
....
distcc[8252] (dcc_connect_by_addr) started connecting to 192.168.0.200:3632
.....
distcc[8252] (dcc_compile_remote) client finished sending request to server
distcc[8252] (dcc_note_state) note state 5, file "(NULL)",
host "192.168.0.200"
distcc[8252] 18057 bytes from hello.c compiled on 192.168.0.200 in 0.5536s,
rate 32kB/s
...


Instalamos algunos paquetes adicionales para poder compilar el nucleo
opkg install coreutils util-linux-dev util-linux perl
perl-module-file-basename perl-module-file-find \
perl-module-getopt-long perl-module-getopt-std

Recojemos el nucleo ( yo  exporto el que uso en el pc para compilar con la
toolchain vía NFS) yo tengo
este export "/home/jpddb/linux-2.6 192.168.0.202
(rw,all_squash,anonuid=1000,anongid=100)" en el host y en
el /etc/fstab local añadimos:
192.168.0.200:/home/jpddb/linux-2.6 /home/root/linux-2.6 nfs
noauto,nolock,soft,rsize=32768,wsize=32768 0 0

root@om-gta02:~# echo \
"192.168.0.200:/home/jpddb/linux-2.6 /home/root/linux-2.6 nfs
noauto,nolock,soft,rsize=32768,wsize=32768 0 0"\
 >>/etc/fstab
root@om-gta02:~# mkdir linux-2.6
root@om-gta02:~# mount linux-2.6
root@om-gta02:~# cd linux-2.6
root@om-gta02:~/linux-2.6#

Como ya tengo el fichero de configuración y alguna compilación previa ( mirar
la wiki sobre el nucleo)
me limitarae a mostrar la configuración y  compilarlo registrando los tiempos
para este ejemplo
(paroli esta cooriendo en el neo junto con tres sesiones ssh, una de ellas
usando vi y este documento)

root@om-gta02:~/linux-2.6# echo 192.168.0.200:3632/8>../.distcc/hosts #zerconf
falla con carga
root@om-gta02:~/linux-2.6# dd if=/dev/zero of=/swapfile bs=1K count=512K
#creamos un fichero de swap
root@om-gta02:~/linux-2.6# mkswap /swapfile ;swapon /swapfile
root@om-gta02:~/linux-2.6# date;make O=test menuconfig;date
Tue May 19 14:02:44 CEST 2009
scripts/kconfig/mconf arch/arm/Kconfig


*** End of Linux kernel configuration.
*** Execute 'make' to build the kernel or try 'make help'.

Tue May 19 14:03:36 CEST 2009
root@om-gta02:~/linux-2.6# date;make O=test -j9;date
Tue May 19 14:04:32 CEST 2009
  CHK     include/linux/version.h
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-arm
make[2]: `include/asm-arm/mach-types.h' is up to date.
  Using /home/root/linux-2.6 as source for kernel
ln -fsn /home/root/linux-2.6 source
  CALL    /home/root/linux-2.6/scripts/checksyscalls.sh
<stdin>:1097:2: warning: #warning syscall fadvise64 not implemented
<stdin>:1265:2: warning: #warning syscall migrate_pages not implemented
<stdin>:1321:2: warning: #warning syscall pselect6 not implemented
<stdin>:1325:2: warning: #warning syscall ppoll not implemented
<stdin>:1365:2: warning: #warning syscall epoll_pwait not implemented
  CHK     include/linux/compile.h
  SKIPPED include/linux/compile.h
  GEN     .version
  CHK     include/linux/compile.h
  SKIPPED include/linux/compile.h
  LD      .tmp_vmlinux1
  KSYM    .tmp_kallsyms1.S
  AS      .tmp_kallsyms1.o
  LD      .tmp_vmlinux2
  KSYM    .tmp_kallsyms2.S
  AS      .tmp_kallsyms2.o
  LD      vmlinux
  SYSMAP  System.map
  SYSMAP  .tmp_System.map
  OBJCOPY arch/arm/boot/Image
  Building modules, stage 2.
  Kernel: arch/arm/boot/Image is ready
  GZIP    arch/arm/boot/compressed/piggy.gz
  MODPOST 314 modules
  LD [M]  drivers/usb/gadget/g_ether.ko
  LD [M]  drivers/usb/gadget/g_file_storage.ko
  LD [M]  drivers/usb/gadget/g_midi.ko
  LD [M]  drivers/usb/gadget/g_serial.ko
  LD [M]  drivers/usb/gadget/gadgetfs.ko
  AS      arch/arm/boot/compressed/piggy.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
Tue May 19 14:35:05 CEST 2009

Ahora estoy probando con una compilacion de zero
root@om-gta02:~/linux-2.6# mkdir test2
root@om-gta02:~/linux-2.6# cp test/.config test2/.config
root@om-gta02:~/linux-2.6# date;make O=test2 -j8;date
Tue May 19 14:46:56 CEST 2009

Ya comentare algo

_______________________________________________
Local-openmoko-spain mailing list
[hidden email]
http://lists.projects.openmoko.org/mailman/listinfo/local-openmoko-spain
jluis

Re: [RFC] configuracion en neo y compilacion en PC con distccd y toolchain how-to (largo)

Reply Threaded More More options
Print post
Permalink
El Tuesday, 19 de May de 2009 15:02:12 Jose Luis Perez Diez va escriure:
> root@om-gta02:~/linux-2.6# mkdir test2
> root@om-gta02:~/linux-2.6# cp test/.config test2/.config
> root@om-gta02:~/linux-2.6# date;make O=test2 -j8;date
> Tue May 19 14:46:56 CEST 2009
>
> Ya comentare algo

Lo voy a parar llevo mas de dos horas y va por:

CC      fs/proc/page.o
CC      fs/posix_acl.o
CC [M]  net/netfilter/xt_tcpmss.o

Mas o menos ( probare otro dia con una configuracion estandar en vez de la mia
donde tengo como modulos casi todo que se puede conectar)
             

_______________________________________________
Local-openmoko-spain mailing list
[hidden email]
http://lists.projects.openmoko.org/mailman/listinfo/local-openmoko-spain