Burada kullanılan eski soruyu, aşağıda koyu olarak listelenen nedenlerle artık alakası olmadığı için atmıştım. Sorunun kendisi hala geçerli, sadece artık var olmadığından çapraz derlemeye çalıştığım sistem. Eski soru Pastebin'e kopyalandı .
Ben F @ ST 2704N için firmware yanıp olabilir anladım OpenWRT.org . Bağlantıyı luci web arayüzü ile kullandım ve şimdi yönlendiricimde OpenWRT var. Bu soru hala geçerlidir çünkü yönlendiricim için programları derlemeyi nasıl yapacağımı öğrenmek istiyorum, ancak yerleşik bellenime karşı çalışmaya çalışmadığım için şimdi daha kolay olmalı.
Programlarımı OpenWRT çalıştıran Mips32 sürüm 1 işlemcide çalışmak üzere nasıl derleyebilirim?
Yorumlayıcıyı Doğrudan Kullan:
root@OpenWrt:~# /lib/ld-musl-mips-sf.so.1 hello
/lib/ld-musl-mips-sf.so.1: hello: Not a valid dynamic program
root@OpenWrt:~# ./hello
Segmentation fault
CPU BİLGİSİ:
root@OpenWrt:~# cat /proc/cpuinfo
system type : bcm63xx/F@ST2704N (0x6318/0xB0)
machine : Sagem F@ST2704N
processor : 0
cpu model : Broadcom BMIPS3300 V3.3
BogoMIPS : 332.54
wait instruction : yes
microsecond timers : yes
tlb_entries : 32
extra interrupt vector : yes
hardware watchpoint : no
isa : mips1 mips2 mips32r1
ASEs implemented :
shadow register sets : 1
kscratch registers : 0
package : 0
core : 0
VCED exceptions : not available
VCEI exceptions : not available
Linux Sürümü:
root@OpenWrt:~# cat /proc/version
Linux version 4.1.4 (thepeople@viasatpilot) (gcc version 4.8.3 (OpenWrt/Linaro GCC 4.8-2014.04 r46566) ) #1 Fri Aug 7 05:54:20 CEST 2015
Teknede İkili:
Alexs-MacBook-Air:hello-world senor$ file ls
ls: ELF 32-bit MSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-mips-sf.so.1, stripped
Alexs-MacBook-Air:hello-world senor$ /opt/cross/gcc-mips/bin/mips-netbsd-elf-readelf -h ls
ELF Header:
Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, big endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: MIPS R3000
Version: 0x1
Entry point address: 0x403990
Start of program headers: 52 (bytes into file)
Start of section headers: 427656 (bytes into file)
Flags: 0x50001005, noreorder, cpic, o32, mips32
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 7
Size of section headers: 40 (bytes)
Number of section headers: 29
Section header string table index: 28
Benim İkili:
Alexs-MacBook-Air:hello-world senor$ file hello
hello: ELF 32-bit MSB executable, MIPS, MIPS32 version 1 (SYSV), statically linked, with debug_info, not stripped
Alexs-MacBook-Air:hello-world senor$ /opt/cross/gcc-mips/bin/mips-netbsd-elf-readelf -h hello
ELF Header:
Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, big endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: MIPS R3000
Version: 0x1
Entry point address: 0xa0020004
Start of program headers: 52 (bytes into file)
Start of section headers: 200884 (bytes into file)
Flags: 0x50001001, noreorder, o32, mips32
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 2
Size of section headers: 40 (bytes)
Number of section headers: 29
Section header string table index: 28
Merhaba İkili Kaynak Kodu:
#include <stdio.h>
int main() {
printf("Hello MIPS! \n");
return 0;
}
Merhaba ikiliyi derlemek için kullandığım komut şudur /opt/cross/gcc-mips/bin/mips-netbsd-elf-gcc -mips32 -Tidt.ld -static hello.c -o hello
.
Komutu kullanarak programı derlemeye çalıştım /opt/cross/gcc-mips/bin/mips-netbsd-elf-gcc -mips32 -Tidt.ld -dynamic-linker=/lib/ld-musl-mips-sf.so.1 -static hello.c -o hello-inter
, ancak bir çok dosya üretti ve bu yeni linker seçeneğini eklememişsem aynı ikili dosyayı üretti. İkili kaynağı kaynağından bağlamalıyım, ama yanılıyor olabilirim.