Estou usando o Ubuntu 12.04 LTS de 64 bits e tentando criar uma imagem do Linux para o SAMA5D36-EK. Ao fazê-lo, preciso do comando mkimage. De acordo com este site
a fonte mkimage vem com a fonte de inicialização U e é construída durante a complementação do U-boot. Mas eu estou tendo problemas.
Etapa 1.
Eu instalei o seguinte:
git 1.7.5, tar 1.2.4, python 2.7.3
Eu também fiz:
$ sudo apt-get install gawk wget git-core diffstat unzip textinfo gcc-multilib build-essentail
$ sudo apt-get install chrpath libsdl1.2-dev xterm autoconf automake libtool libglib2.0-dev
$ sudo apt-get install linux-image-generic linux-headers-generic
$ sudo dpkg –add-architecture i386
$ sudo apt-get update
$ sudo apt-get install libxss1:i386 libxft2:i386
Etapa 2.
Instalei a toolchain cruzada de acordo com as seções 3.1 / 3.2 do Manual do Yocto ADT da seguinte forma:
$ tar -xjf adt_installer.tar.bz2
$ cd adt_installer
$ gedit adt_installer.conf and set
YOCTOADT_TARGETS=”arm”
YOCTOADT_ROOTFS_arm=”minimal sato-sdk”
YOCTOADT_SYSROOT_IMAGE_arm=”sato-sdk”
(and other arm based settings then save)
$ cd adt-installer
$ ./adt_installer (using the default cross-toolchain location)
$ sudo chmod +x /opt/poky/1.6/envrionment-setup-arm5te-poky-linux-gnueabi
$ sudo /opt/poky/1.6/envrionment-setup-arm5te-poky-linux-gnueabi
A cadeia de ferramentas de desenvolvimento cruzado está agora localizada em
/opt/poky/1.6/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.8.2/
Etapa 3.
Criar uma inicialização em U a partir da origem
$ git clone git://github.com/linux4sam/u-boot-at91.git
$ cd u-boot-at91
$ make distclean
$ make sama5d3xek_nandflash_config
$ make CROSS_COMPILE=/opt/poky/1.6/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.8.2/
Depois de trabalhar por algum tempo, ele vem com o erro: ld: não é possível encontrar -lgcc
Etapa 4.
Se eu correr
$ sudo find /usr/ -name libgcc*
Eu recebo o seguinte:
/usr/lib/x86_64-linux-gnu/libgccpp.so.1
/usr/lib/x86_64-linux-gnu/libgccpp.so.1.0.3
/usr/lib/ure/lib/libgcc3_uno.so
/usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s_32.so
/usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so.1
/usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_eh.a
/usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so
/usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s_x32.so
/usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a
/usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc_eh.a
/usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc_s.so
/usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc.a
/usr/lib/gcc/x86_64-linux-gnu/4.8/x32/libgcc_eh.a
/usr/lib/gcc/x86_64-linux-gnu/4.8/x32/libgcc_s.so
/usr/lib/gcc/x86_64-linux-gnu/4.8/x32/libgcc.a
/usr/lib32/libgcc_s.so.1
/usr/share/lintian/overrides/libgcc1
/usr/share/doc/libgcc1
/usr/share/doc/libgcc-4.8-dev
/usr/libx32/libgcc_s.so.1
Se eu correr
$ sudo /sbin/ldconfig -p | grep libgcc*
Eu recebo:
libgcrypt.so.11 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgcrypt.so.11
libgcr-ui-3.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgcr-ui-3.so.1
libgcr-base-3.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgcr-base-3.so.1
libgconf-2.so.4 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgconf-2.so.4
libgck-1.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgck-1.so.0
libgccpp.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgccpp.so.1
libgcc_s.so.1 (libc6,x32) => /usr/libx32/libgcc_s.so.1
libgcc_s.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgcc_s.so.1
libgcc_s.so.1 (libc6) => /lib/i386-linux-gnu/libgcc_s.so.1
libgcc_s.so.1 (libc6) => /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so.1
libgcc_s.so.1 (libc6) => /usr/lib32/libgcc_s.so.1
libgcc_s.so (libc6,x32) => /usr/lib/gcc/x86_64-linux-gnu/4.8/x32/libgcc_s.so
libgcc_s.so (libc6,x86-64) => /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so
libgcc_s.so (libc6) => /usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc_s.so
libgc.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgc.so.1
Parece não haver referência às duas versões do arquivo libgcc.a que aparecem no subdiretório / 32 / e / x32 /
Eu localizo os dois arquivos a seguir:
/etc/ld.so.conf.d/x86_64-linux-gnu.conf
/opt/poky/1.6/sysroots/x86_64-pokysdk-linux/etc/ld.so.conf
e adicione as seguintes linhas nos dois arquivos:
/usr/lib/gcc/x86_64-linux-gnu/4.8
/usr/lib/gcc/x86_64-linux-gnu/4.8/32
/usr/lib/gcc/x86_64-linux-gnu/4.8/x32
Agora repito os três comandos 'make' do passo 3. Faz cerca de 200 ou mais arquivos (ferramentas, arco, comum, drivers, fs, lib, net, teste), mas depois vem com o mesmo erro da seguinte forma:
LD examples/standalone/hello_world
/opt/poky/1.6/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.8.2/ld: cannot find -lgcc
make[2]: *** [examples/standalone/hello_world] Error 1
make[1]: *** [examples/standalone] Error 2
make: *** [examples] Error 2
Etapa 5.
No Makefile existem as seguintes entradas
# Add GCC lib
ifdef CONFIG_USE_PRIVATE_LIBGCC
ifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y)
PLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.a
else
PLATFORM_LIBGCC = -L $(CONFIG_USE_PRIVATE_LIBGCC) -lgcc
endif
else
PLATFORM_LIBGCC := -L $(shell dirname '$(CC) $(c_flags) -print-libgcc-file-name') -lgcc
endif
De volta ao modo de terminal, faço o seguinte:
$ CONFIG_USE_PRIVATE_LIBGCC=yes
$ export CONFIG_USE_PRIVATE_LIBGCC
Em seguida, execute novamente os três comandos make do passo 3, mas obtenha o mesmo erro
Eu então tento
$ unset CONFIG_USE_PRIVATE_LIBGCC
e execute novamente os três comandos, mas o erro ocorre ainda
Então eu tento
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/gcc/x86_64-linux-gnu/4.8:/usr/lib/gcc/x86_64-linux-gnu/4.8/32:/usr/lib/gcc/x86_64-linux-gnu/4.8/x32
$ echo $LD_LIBRARY_PATH
/usr/lib/gcc/x86_64-linux/4.8:/usr/lib/gcc/x86_64-linux-gnu/4.8/32:/usr/lib/gcc/x86_64-linux-gnu/4.8/x32
e execute os três comandos make, mas ainda assim um erro
Depois, tento alterar a entrada no makefile de:
PLATFORM_LIBGCC: = -L $ (dirname do shell $(CC) $(c_flags) -print-libgcc-file-name
) -lgcc
Para:
PLATFORM_LIBGCC := -L /usr/lib/gcc/x86_64-linux-gnu/4.8:/usr/lib/gcc/x86_64-linux-gnu/4.8/32:/usr/lib/gcc/x86_64-linux-gnu/4.8/x32 -lgcc
Salve o arquivo.
De volta ao modo terminal, faço o seguinte:
$ CONFIG_USE_PRIVATE_LIBGCC=yes
$ export CONFIG_USE_PRIVATE_LIBGCC
Em seguida, execute novamente os três comandos make do passo 3, mas obtenha o mesmo erro
Eu então tento
$ unset CONFIG_USE_PRIVATE_LIBGCC
e execute novamente os três comandos, mas o erro ocorre ainda
Altero a entrada Makefile para:
PLATFORM_LIBGCC :=/usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc.a
que finalmente ultrapassa o erro -lgcc associado ao exemplo hello_world, mas falha um pouco mais com centenas de falhas começando com:
LD u-boot
arch/arm/cpu/armv7/at91/built-in.o: In function 'at91_pll_rate':
/home/lachlan/u-boot-at91/arch/arm/cpu/armv7/at91/clock.c:45: undefined reference to '__aeabi_uidiv'
arch/arm/cpu/armv7/at91/built-in.o: In function 'at91_clock_init':
/home/lachlan/u-boot-at91/arch/arm/cpu/armv7/at91/clock.c:100: undefined reference to '__aeabi_uidiv'
arch/arm/cpu/armv7/at91/built-in.o: In function 'usec_to_tick':
/home/lachlan/u-boot-at91/arch/arm/cpu/armv7/at91/timer.c:50: undefined reference to '__aeabi_uidiv'
arch/arm/cpu/armv7/at91/built-in.o: In function 'tick_to_time':
/home/lachlan/u-boot-at91/arch/arm/cpu/armv7/at91/timer.c:42: undefined reference to '__aeabi_uidiv'
common/built-in.o: In function 'common_diskboot':
/home/lachlan/u-boot-at91/common/cmd_disk.c:100: undefined reference to '__aeabi_uidiv'
common/built-in.o: In function 'do_mem_md':
/home/lachlan/u-boot-at91/common/cmd_mem.c:137: undefined reference to '__aeabi_idiv'
common/built-in.o: In function 'bytes_per_second':
/home/lachlan/u-boot-at91/common/cmd_sf.c:86: undefined reference to '__aeabi_uidiv'
common/built-in.o: In function 'spi_flash_update':
/home/lachlan/u-boot-at91/common/cmd_sf.c:207: undefined reference to '__aeabi_idiv'
/home/lachlan/u-boot-at91/common/cmd_sf.c:216: undefined reference to '__aeabi_uidiv'
/home/lachlan/u-boot-at91/common/cmd_sf.c:237: undefined reference to '__aeabi_uidiv'
/home/lachlan/u-boot-at91/common/cmd_sf.c:237: undefined reference to '__aeabi_uidivmod'
etc
Altero a entrada Makefile para:
PLATFORM_LIBGCC :=/usr/lib/gcc/x86_64-linux-gnu/4.8/x32/libgcc.a
e o mesmo resultado ocorre como imeditamente descrito acima
Alguém pode sugerir como corrigir esse problema?