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/Toolchaincreamos 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.ipkopkg 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