Bir ARM920T (mimari 4T) için Python 3.2'yi derlemeye çalışıyorum ama bazı garip hatalar alıyorum. Python'u, aşağıdaki derleyiciyi kullanacak şekilde yapılandırılmış bir Scratchbox ortamı içinde derledim: "gcc sürüm 4.3.3 (Sourcery G ++ Lite 2009q1-203)", bir çapraz çapraz derleyici.Kol Üzerinde Python, Yasadışı Talimatlar
Derleme sırasında aşağıdaki ortam değişkenlerinde -march = armv4t mimari bayrağını ayarladığınızdan emin oldum: CFLAGS, CPPFLAGS, SBOX_EXTRA_COMPILER_FLAGS.
Kazı kazan kutusuna ince bir derleme yapar ve python yorumlayıcısını çizikli kol emülatörü ile çalıştırabiliyorum.
Ancak, ARM920T aygıtıma taşıdığım zaman, python exe'yi çalıştırdıktan hemen sonra Yasa Dışı Talimat hatası alıyorum.
Program terminated with signal 4, Illegal instruction.
#0 0x00138810 in __aeabi_dadd()
ve arka iz ilk birkaç satır: Bildiğim kadarıyla araştırma mümkün olmuştur olarak
#0 0x00138810 in __aeabi_dadd()
#1 0x001134f4 in PyLong_FromString (str=0x402de300 "3644798167", pend=0x0, base=10) at Objects/longobject.c:2001
#2 0x00132478 in parsenumber (s=<value optimized out>, c=<value optimized out>) at Python/ast.c:3189
#3 ast_for_atom (n=<value optimized out>, c=<value optimized out>) at Python/ast.c:1396
#4 ast_for_power (n=<value optimized out>, c=<value optimized out>) at Python/ast.c:1726
#5 ast_for_expr (c=0xbeaf7f50, n=0x402f5b78) at Python/ast.c:191
, __aeabi_dadd çağrıyı
bir çekirdek dökümü şu çıktıyı yeilds iki kayan noktalı sayı eklemek için bir kütüphane çağrısıdır (Double Add).
if (log_base_BASE[base] == 0.0) {
twodigits convmax = base;
int i = 1;
log_base_BASE[base] = (log((double)base)/ // Line 2001
log((double)PyLong_BASE));
for (;;) {
twodigits next = convmax * base;
if (next > PyLong_BASE)
break;
convmax = next;
++i;
}
bu kod hataları neden gerektiğini Gerçekten neden görmüyoruz:
Ben backtrace raporları hatası (longobject.c hattını 2001) neden olan piton kodunu kaldırdı. Yukarıdaki kodda olduğu gibi, çok fazla sayıda iki katına eklenmiş/çıkarılmış/ikiye bölünmüş küçük bir C++ programı yapmayı denedim ve aygıtta iyi çalıştı.
Herhangi bir yardım çok takdir edilecektir. Düşünebildiğim tek şey, belki de yanlış kayan nokta kütüphanesinin exe içine derlenmesidir. ARM920T, Google'dan söyleyebileceğim kadarıyla donanımsal kayan nokta desteği içermiyor.
Başka bir neden hizalama hataları olabilir. Python'u -Wcast-align bayrağıyla derlerken, birkaç döküm uyarısı bildirir. Belirli veri türleri bellekte adreslerde bile hizalanmadığında ARM bunu sevmez./proc/cpu/alignment ancak bir şey bildirmez. Metnin duvarına için üzgünüm
teşekkürler bu kadar okursanız :) Cihazda olandan daha yüksek bir mimari için derlenmiş bazı kütüphaneye bağlantı veriyor gibi geliyor
Harika! Bu doğru yönde! Tam olarak yasadışı talimatın ne olduğunu görmek için gnu hata ayıklayıcısında bir sökme yapmayı başardım. Aeabi_ * işlevlerinde yürütülen bir CLZ komutu olduğu ortaya çıkıyor. ARM belgelerine göre, CLZ talimatı bir ARM5 ve yukarıdaki talimattır. Bu, hatayı açıklıyor. Şimdi tek yapmam gereken, bu komutun üretildiği yeri bulmaktır, ki bu biraz daha karmaşıktır. Bağlantılı olan kütüphanelerin hiçbirinin bu talimatı içermediğini kontrol ettim. – Daniel