Я хочу выполнить кросс-компиляцию C src для машины MIPS, но компиляция не удалась. Выполнение кросс-скомпилированного бинарного файла на целевой машине выводит «недопустимую инструкцию». Не могли бы вы сообщить мне, как скомпилировать C src для машины MIPS?
Подробности следующие:
Выполнение «readelf -h host.bin» (host.bin — это двоичная программа, работающая на HOST-машине) выводит:
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Intel 80386
Version: 0x1
Entry point address: 0x8048aac
Start of program headers: 52 (bytes into file)
Start of section headers: 8628 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 9
Size of section headers: 40 (bytes)
Number of section headers: 30
Section header string table index: 27
Выполнение «readelf -h target.bin» (target.bin — это двоичная программа, работающая на целевой машине) выводит:
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: MIPS R3000
Version: 0x1
Entry point address: 0x403570
Start of program headers: 52 (bytes into file)
Start of section headers: 114040 (bytes into file)
Flags: 0x5, noreorder, cpic, mips1
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 6
Size of section headers: 40 (bytes)
Number of section headers: 23
Section header string table index: 22
Выполнение выходных данных «readelf -h cross_compiled.bin» (cross_compiled.bin — это двоичный файл, который кросс-компилирован (мной) для целевой машины):
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: MIPS R3000
Version: 0x1
Entry point address: 0x400170
Start of program headers: 52 (bytes into file)
Start of section headers: 16444 (bytes into file)
Flags: 0x1007, noreorder, pic, cpic, o32, mips1
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 5
Size of section headers: 40 (bytes)
Number of section headers: 21
Section header string table index: 20
Для кросс-компиляции я использовал buildroot, который поддерживает кросс-компиляцию MIPS1.
Я ожидал, что cross_compiled.bin нормально запустится на целевой машине. Однако, когда я запускаю «cross_compiled.bin» на целевой машине, он выводит «недопустимую инструкцию».
Подскажите, пожалуйста, как решить вышеуказанную проблему? Поскольку я новичок в кросс-компиляции, я не могу найти точную причину проблемы.
Любые замечания будут оценены.
ОБНОВИТЬ:
На цели выполнение «cat /proc/cpuinfo» выводит:
system type : Broadcom BCM5354 chip rev 3
processor : 0
cpu model : BCM3302 V2.9
BogoMIPS : 237.56
wait instruction : no
microsecond timers : yes
tlb_entries : 32
extra interrupt vector : no
hardware watchpoint : no
VCED exceptions : not available
VCEI exceptions : not available
unaligned_instructions : 1
dcache hits : 0
dcache misses : 0
icache hits : 0
icache misses : 0
instructions : 0
На цели выполнение «cat /proc/version» выводит:
Linux version 2.4.20 ([email protected]) (gcc version 3.2.3 with Broadcom modifications) #1 Tue May 22 17:40:19 EDT 2007
Командная строка, которую я использовал для кросс-компиляции (cross_compiled.bin):
mipsel-linux-gcc -static -o cross_compiled.bin cross_compiled.c
cross_compiled.c:
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
Поскольку мой cross_compiled.c очень прост, я считаю, что проблем, связанных с используемыми библиотеками, не возникает.
/proc/cpuinfo
и/proc/version
на цель? И пробовали ли вы сначала кросс-компилировать самую простую программу hello world, чтобы исключить проблемы с библиотеками? (Например) И, если возможно, командная строка gcc использовалась для компиляции и/или компоновки? - person 6EQUJ5   schedule 29.05.2014dmesg
являетсяcat /dev/kmsg
- person Christophe Vu-Brugier   schedule 29.05.2014