Armv7 पर X86 बायनेरिज़ चलाना


11

मैं रास्पबेरी Pi2 पर एक एसएनबीसी यूएसबी प्रिंटर चलाने की कोशिश कर रहा हूं।

इसके लिए मुझे SNBC USB प्रिंटर के फ़िल्टर बाइनरी को कॉपी करना होगा /usr/lib/cups/filter। लेकिन फ़िल्टर बाइनरी को एक x86 प्रोसेसर (निर्माता को हाथ का समर्थन करने के लिए रुचि नहीं है) का उपयोग करके संकलित किया जाता है जहां मैं उपयोग करता हूं armv7। मुझे पता है कि यह काम नहीं करेगा लेकिन एक जिज्ञासा के लिए मैंने कोशिश की और कप कहते हैं /usr/lib/cups/filter/rasterorp3150 failed

मैंने इंटरनेट पर समाधान तलाशे और लोगों ने क्यूमू का उपयोग करने का सुझाव दिया। लेकिन यह पूर्ण x86 से आर्म प्लेटफॉर्म के लिए है। क्या x86 बाइनरी को आर्म बाइनरी में आसान सरल तरीके से परिवर्तित करने का एक तरीका है?

वैसे, x86 बाइनरी को एक hexeditउपकरण का उपयोग करके समतुल्य armv7बाइनरी को एक अच्छा विचार में परिवर्तित कर रहा है? ( opcodeरूपांतरण)

यदि हां, तो क्या कोई इसे करने के बारे में कुछ विचार दे सकता है?


यदि आपके पास स्रोत है तो आप एक अलग "लक्ष्य" आर्च के लिए "क्रॉस कंपाइल" कर सकते हैं।
bsd

जवाबों:


14

आप आसानी से एक x86 बाइनरी को एआरएम में नहीं बदल सकते हैं । यदि आपको निर्माता से स्रोत कोड, या एआरएम बाइनरी नहीं मिल सकता है, और आप वास्तव में अपने Pi2 के साथ प्रिंटर का उपयोग करना चाहते हैं, तो Qemu दृष्टिकोण इस मामले में सही है, हालांकि यह बहुत धीमी गति से होगा । Qemu पूर्ण प्रणाली अनुकरण करता है, लेकिन यह एकल प्रक्रिया अनुकरण के लिए भी बहुत अच्छा काम करता है।

मैं मान रहा हूं कि आपके पास आपके Pi2 पर कुछ प्रकार के डेबियन व्युत्पन्न हैं (मुझे यकीन नहीं है कि यह रास्पियन के साथ काम करेगा), और यह कि आपके पास बाइनरी है i386(यदि यह 64-बिट है, तो amd64इसके बजाय उपयोग करें )। i386एक विदेशी वास्तुकला के रूप में जोड़कर शुरू करें :

sudo dpkg --add-architecture i386
sudo apt-get update

फिर lddबाइनरी पर चलाएं और किसी भी आवश्यक पुस्तकालयों को जोड़ें; आम तौर पर

sudo apt-get install libc6:i386

और :i386प्रत्यय के साथ कुछ और जोड़ा। सुनिश्चित करें कि यह किसी भी स्थापित पैकेज को नहीं हटाता है; उम्मीद है कि आपको जो कुछ भी चाहिए वह बहु-सक्षम है। (अन्यथा बाकी काम नहीं करेगा।)

एक बार जब आप ऐसा कर लेते हैं, qemu-user-staticतो स्थापित करें यदि यह पहले से स्थापित नहीं है (इसकी binfmt-supportअनुशंसा के साथ ); तब आप qemu-i386-staticअपने प्रोग्राम को चलाने के लिए उपयोग कर सकते हैं :

qemu-i386-static /usr/lib/cups/filter/rasterorp3150

वास्तव में इसके लिए धन्यवाद binfmt-supportसीधे चलना चाहिए (जैसा कि टोबी स्पाइट द्वारा बताया गया है ):

/usr/lib/cups/filter/rasterorp3150

( binfmt-supportइस काम को पारदर्शी बनाने के लिए Qemu का उपयोग करेंगे।)

यदि आप उपयोग नहीं करना चाहते हैं binfmt-support, तो rasterorp3150दूर जाएँ:

sudo mv /usr/lib/cups/filter/rasterorp3150 /usr/lib/cups/filter/rasterorp3150.x86

और एक स्क्रिप्ट युक्त स्थापित करें

#!/bin/sh
exec qemu-i386-static /usr/lib/cups/filter/rasterorp3150.x86 "$@"

के रूप में /usr/lib/cups/filter/rasterorp3150

यदि आप इसके बजाय आप इस सब के लिए एक क्रोकेट सेट कर सकते हैं; देखें debootstrapऔर इसका --foreignविकल्प (चेरोट को स्वचालित रूप से क्यूमू का उपयोग करने के लिए सेट किया जा सकता है)।


आने वाले समय में यह समाधान काम नहीं करता है, apt updatei386 आर्च को जोड़ने के बाद मुझे हमेशा 404 त्रुटि मिलती है ।
मोहम्मद नोरेल्डिन

@ मोहम्मद आप किस वितरण का उपयोग कर रहे हैं?
स्टीफन किट

रस्पियन, 11.2016 रिलीज। और मैं i386 का अनुकरण करना चाहता था
मोहम्मद नौरेलिन

ठीक है, इसलिए आप जो त्रुटि प्राप्त कर रहे हैं वह सामान्य है, रास्पियन बायनेरी प्रदान नहीं करता है i386। यह केवल उन आर्किटेक्चर के साथ काम करता है जो आपके द्वारा उपयोग किए जा रहे डिस्ट्रो में समर्थित हैं।
स्टीफन किट

मुझे यह उल्लेख करना था कि मैंने रसबियन और उबंटू दोनों के साथ कोशिश की थी। किसी भी अच्छे डिस्टो सुगरजेशन जहां मैं आर्म्स होस्ट पर i386 का अनुकरण कर सकता हूं?
मोहम्मद नौरेलिन

1

आपके विस्तृत रिप्ले के लिए धन्यवाद।

मैं Rasbian OS का उपयोग करता हूं, और i386 आर्किटेक्चर को जोड़ना sudo apt-get अपडेट के दौरान रास्पियन में विफल रहता है। क्या मैं रास्पियन और स्थापित करने के लिए अलग से i386 पैकेज डाउनलोड कर सकता हूं? यदि ऐसा है तो आप डाउनलोड करने के लिए किसी भी लिंक को साझा कर सकते हैं।

क्या मैं i386 से फाइल पर निर्भर।

फ़िल्टर की ldd प्रतिध्वनि निम्नलिखित हैं:

linux-gate.so.1 =>  (0xb779c000)
libcups.so.2 => /usr/lib/i386-linux-gnu/libcups.so.2 (0xb7716000)
libcupsimage.so.2 => /usr/lib/i386-linux-gnu/libcupsimage.so.2 (0xb770d000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb755c000)
libgssapi_krb5.so.2 => /usr/lib/i386-linux-gnu/libgssapi_krb5.so.2 (0xb7517000)
libgnutls.so.26 => /usr/lib/i386-linux-gnu/libgnutls.so.26 (0xb7451000)
libavahi-common.so.3 => /usr/lib/i386-linux-gnu/libavahi-common.so.3 (0xb7443000)
libavahi-client.so.3 => /usr/lib/i386-linux-gnu/libavahi-client.so.3 (0xb7431000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb7414000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb73fa000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb73b4000)
/lib/ld-linux.so.2 (0xb779d000)
libkrb5.so.3 => /usr/lib/i386-linux-gnu/libkrb5.so.3 (0xb72f6000)
libk5crypto.so.3 => /usr/lib/i386-linux-gnu/libk5crypto.so.3 (0xb72c6000)
libcom_err.so.2 => /lib/i386-linux-gnu/libcom_err.so.2 (0xb72c0000)
libkrb5support.so.0 => /usr/lib/i386-linux-gnu/libkrb5support.so.0 (0xb72b4000)
libgcrypt.so.11 => /lib/i386-linux-gnu/libgcrypt.so.11 (0xb722d000)
libtasn1.so.6 => /usr/lib/i386-linux-gnu/libtasn1.so.6 (0xb7219000)
libp11-kit.so.0 => /usr/lib/i386-linux-gnu/libp11-kit.so.0 (0xb71dd000)
libdbus-1.so.3 => /lib/i386-linux-gnu/libdbus-1.so.3 (0xb7191000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb718c000)
libkeyutils.so.1 => /lib/i386-linux-gnu/libkeyutils.so.1 (0xb7188000)
libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xb7170000)
libgpg-error.so.0 => /lib/i386-linux-gnu/libgpg-error.so.0 (0xb716b000)
libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xb7163000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb715a000)

सादर, नैश

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.