Tercüman karşı mips gcc için nasıl derlenir?


2

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.


Sorunuzun altına aldım ve hala ne sorduğunuzu tam olarak bilmiyorum.
roaima

F @ ST1704N yönlendirici için bir program derlemeye çalışıyorum. Şu anda sadece işleri başlatmak için bir merhaba dünya programı üzerinde çalışıyorum, ancak merhaba dünya programını çalıştırmakta zorlanıyorum.
Alexis Evelyn,

1
Statik olarak derler misiniz? Belki de olay yerinde ölmez. Verilen oyu yeniden açın.
Peter

Bazı sorularımı eski soruyu arşivlediğim Pastebin linkinde arşivledim. Bilmeyenler için, eski soru yönlendiricimdeki stok üretici yazılımı içindi. Bellenimi değiştirdim, bu yüzden soruyu buna göre güncelledim.
Alexis Evelyn,

1
Sorunu yeniden açtım. Lütfen devam edin ve cevabınızı gönderin.
terdon

Yanıtlar:


0

Bu kılavuzu OpenWRT.org'da buldum, bu da buildtools'u nasıl kuracağımı öğrenmeme yardımcı oldu ve yönergeleri OpenWRT sürümüme uyacak şekilde değiştirdim.

Git commit 70255e3d624cd393612069aae0a859d1acbbeeae (tag: v18.06.1) 'i kontrol ettim ve ayarları yaptım:

system "Broadcom BCM63xx"
subtarget "generic"
profile "Sagem F@ST2704N"

Ayrıca PATH ortam değişkenini path/to/project/source/staging_dir/toolchain-mips_mips32_gcc-7.3.0_musl/binkomutu alıp yürütmesini de ayarladım mips-openwrt-linux-gcc hello.c -o hello.

OSM'den derlediğim için gnu-getopt ve gnu-time kurmak zorunda olduğumu söylemeliyim.

Ayrıca, ek bir bonus olarak, BusyBox gibi mevcut bir programa karşı derlemeyi denediğimde, komutu kullanarak BusyBox'u derleyebildim LDFLAGS="--static" make CROSS_COMPILE="mips-openwrt-linux-".

Düzenle:

ELF dosyalarının neden tercüman olduğu ile ilgilenenler için, program yüklenmeden önce ortamı ayarlamak için tercümana ihtiyaç duyulur. Alıntı, Christian Aichinger'in "Çekirdekte Program Yükleme" bölümündeki düşüncelerindeki bir blog yazısından geliyor .

"Statik olarak bağlanmış ikili dosyalar bir tercüman olmadan yapabilir; dinamik olarak bağlanmış programlar her zaman tercüman olarak /lib/ld-linux.so dosyasına ihtiyaç duyar, çünkü bazı başlangıç ​​kodlarını içerir, ikili dosya tarafından ihtiyaç duyulan paylaşılan kütüphaneleri yükler ve yer değiştirmeyi gerçekleştirir."

Programımın statik olarak bağlanırken bile "öldürüldü" (orijinal Sagemcom donanım yazılımı üzerinde) söylemesinin nedeninin şüphesiz, yönlendiricinin yetkisiz çalıştırmayı önlemek için programı çalıştırmaya çalışan kullanıcıyı şaşırtmak için tasarlanmış olabileceğinden şüpheliyim. UClibc'yi nasıl derleyeceğimi ve orijinal firmware ve ayrı bir Sagemcom cihazı üzerinde çalışmasını sağladım (bu soruda sorulanla ilgisi olmayan).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.