আমার এআরএম এসসির জন্য জিআইএলবিসি সংকলন ক্রস করুন


13

আমি ক্রুট-এড দেবিয়ান armelপরিবেশের মধ্যে সত্যিই অদ্ভুত কিছু দেখছি ।

তবে প্রথমে, কিছুটা ব্যাকস্টোরি ... এটি দীর্ঘ, তবে প্রশ্নটি জটিল এবং কোনও সম্ভাব্য সহায়তা সম্পূর্ণ গল্পটি জানার উপর নির্ভর করে।

আমার একটি এম্বেডেড এআরএম এসসি আছে যা লিনাক্স চালায় - আরও বিশেষভাবে, armelএকটি 2.6.17 কার্নেলের উপর একটি ডেবিয়ান লেনি। দেবিয়ান ডিস্ট্রো নিজেই পরবর্তী সংস্করণগুলিতে সহজেই আপগ্রেড হয় ( sudo apt-get dist-upgrade) এবং এর ফলে গতিতে, এমনকি armelসংস্করণগুলিতে squeezeবা এমনকি উন্নত করা যায় wheezy

সমস্যাটি হ'ল কার্নেলটি একটি কাস্টম এক ... প্রশ্নে থাকা এআরএম এসসি মূল লাইন কার্নেলের অংশ নয়, তাই এটি 2.6.17 এ বেশ ত্যাগ করা হয়েছে।

আপনি যদি জানেন যে লিনাক্স এবং জি এল এল বি সি কীভাবে কাজ করে তবে আপনি ইতিমধ্যে সমস্যাটি দেখতে পেতে পারেন - জি এল এল বি বি সংস্করণগুলি ন্যূনতম সমর্থিত কার্নেল সংস্করণ দিয়ে সংকলিত হয়েছে ... যা গত ২.6.১7 পেরিয়ে গেছে। সুতরাং যদি আমরা উদাহরণস্বরূপ কোনও দেবিয়ান চেঁচানোর জন্য ক্রুট ...

$ # From inside the little ARM machine running Debian Lenny
$ sudo debootstrap --arch armel squeeze /squeeze \
     http://ftp.whateverCountry.debian.org/debian
$ sudo -i
# mount -t proc none /squeeze/proc
# mount -t sysfs none /squeeze/sys
# mount -t devpts none /squeeze/dev/pts
# chroot /squeeze
Fatal: Kernel too old

... আমরা এর জিএলআইবিসি-এর একটি বার্তা দেখতে পেয়েছি squeezeযে আমাদের জানিয়েছে যে এটি এই পুরানো কার্নেলের সাথে (2.6.17) কাজ করার জন্য সংকলিত হয়নি।

একই সমস্যা হুইজির ক্ষেত্রেও ঘটে - যেহেতু এটি চেঁচানোর চেয়ে নতুন - এবং আসলে এখন থেকে কোনও দেবিয়ান সংস্করণে ঘটবে, কারণ তাদের জিআইএলবিসি আমার 2.6.17 কার্নেলটিতে কাজ করবে না।

প্রথমে আমি ভেবেছিলাম এটি একটি চুক্তিভঙ্গকারী - তবে আমি বুঝতে পেরেছিলাম যে আমার এসসি যে পুরানো কার্নেলটি ব্যবহার করছেন তার সাথে কাজ করার জন্য আমি তাত্ত্বিকভাবে জি এল এল বি সি কে পুনরায় সংকলন করতে পারি ... তবে লাইবসি 6 তৈরি করতে যা ব্যবহৃত হয়েছিল তার জন্য আমার একটি অভিন্ন পরিবেশের প্রয়োজন হবে উদাহরণস্বরূপ প্যাকেজ

আমি জিআইএলবিসি সংকলন এবং libc6_2.1.1.3.3-4.deb ফাইল প্রস্তুত করার অনুমান করছি দেবিয়ান ofশ্বর দ্বারা উদ্ভাবিত স্বয়ংক্রিয় ক্রস-সংকলন যন্ত্রপাতি দ্বারা।

আমি কোনও Godশ্বর নই ... বা কীভাবে এক হয়ে যায় সে সম্পর্কে গুগলে আমি কিছু খুঁজে পাইনি - যেমন প্যাকেজভুক্ত সংস্করণটি (ডিবানের অভ্যন্তরে squeeze) ঠিক একই সেটিংস ব্যবহার করে জিআইএলবিসি-কে ক্রস-কম্পাইল করতে কীভাবে হোস্ট হিসাবে আমার কোর আই 5 ব্যবহার করবেন ? ব্যবহার.

সুতরাং আমি এটিকে ফাঁকি দিয়েছি - আমার কোর আই 5 ( qemu-armবাইনারিটির একটি স্ট্যাটিক সংস্করণ ব্যবহার করার কৌশল ) -এ ডেবিয়ান স্ক্রিজের এআরএম সংস্করণ কীভাবে সেটআপ করতে হবে তা আমি নির্ধারণ করেছি ।

একবার আমি আমার x86- হোস্ট করা সংস্করণে ক্রোয়েট করলে আমি Debian-armel-squeezeকেবল ...

$ cd /var/tmp
$ apt-get source libc6
...
$ # edit this in - compile for my kernel...
$ vi eglibc-2.11.3/debian/sysdeps/linux.mk
...
MIN_KERNEL_SUPPORTED := 2.6.17
...
$ export DEB_BUILD_OPTS="nocheck parallel=1"
$ cd eglibc-2.11.3
$ dpkg-buildpackage -b -d -us -uc

... এবং 3 ঘন্টা পরে (কোর আই 5-হোস্টেড ক্রোয়েটেড সংস্করণটি Debian-armel-squeezeনেটিভ মেশিনের চেয়ে অনেক ধীরে ধীরে ...) আমি আমার libc6 .deb প্যাকেজটি পেয়েছি। আমার এসসিতে এটি তৈরি করতে সম্ভবত 3 মাস সময় লাগবে, তাই আমি অভিযোগ করছি না।

আমার আসল এআরএম এসসির অভ্যন্তরে ফিরে আমি নতুন প্যাকেজের সমস্ত libc ফাইল (.so) কপি করে ডিফল্ট ডিফল্ট গুলির উপরে কপি করেছি এবং ক্রুট করার চেষ্টা করেছি ...

# chroot squeeze/
root@ttsiodras:/# 

হ্যাঁ! এটা কাজ করেছে! (বা তাই মনে হয়েছিল)

আমার কাস্টম libc ক্রুটের ভিতরে থেকে রিপোর্ট করেছে:

# /lib/libc.so.6 
GNU C Library (Debian EGLIBC 2.11.3-4) stable release version 2.11.3, by Roland McGrath et al.
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.4.5.
Compiled on a Linux 2.6.26 system on 2014-10-23.
Available extensions:
        crypt add-on version 2.1 by Michael Glad and others
        GNU Libidn by Simon Josefsson
        Native POSIX Threads Library by Ulrich Drepper et al
        Support for some architectures added on, not maintained in glibc core.
        BIND-8.2.3-T5B
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.

জিনিসগুলি কাজ করে বলে মনে হয়েছিল - আমি একটি ফাইল অনুলিপি করেছি, অনুরোধ করেছি ls...

তবে যখন আমি apt-getকিছু অ্যাপ্লিকেশন ইনস্টল করার জন্য ব্যবহার করার চেষ্টা করেছি তখন আমি squeezeপেতে শুরু করেছি ... কিছু অপ্রত্যাশিত ত্রুটি:

# apt-get install indent
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  indent
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 110 kB of archives.
After this operation, 516 kB of additional disk space will be used.
Get:1 http://ftp.gr.debian.org/debian/ squeeze/main indent armel 2.2.11-1 [110 kB]
Fetched 110 kB in 0s (236 kB/s)

tar: ./control: Cannot utime: Function not implemented
tar: ./md5sums: Cannot utime: Function not implemented
tar: .: Cannot utime: Function not implemented
tar: Exiting with failure status due to previous errors

dpkg-deb: subprocess tar returned error exit status 2
dpkg: error processing /var/cache/apt/archives/indent_2.2.11-1_armel.deb (--unpack):
 subprocess dpkg-deb --control returned error exit status 2
configured to not write apport reports

rm: cannot remove `/var/lib/dpkg/tmp.ci': Function not implemented

dpkg: error while cleaning up:
 subprocess rm cleanup returned error exit status 1
Errors were encountered while processing:
 /var/cache/apt/archives/indent_2.2.11-1_armel.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

ওহ ওহ ... একটি গুচ্ছ Function not implemented। এটি জিএলবিসি-র মত বলে মনে হচ্ছে যে বেসিক জিনিসগুলি কাজ করছে না ...

আমি strace, পরিচালিত (কিভাবে জিজ্ঞাসা করবেন না) এবং মূর্ত আউট সব -atফাংশন ব্যর্থ হয়েছে: openat, mkdirat, renameat, ইত্যাদি - তারা সব প্রতিবেদনের ENOSYS হয়।

দেখা যাচ্ছে যে আমি কেবল আংশিকভাবে সফল ছিলাম - কিছু নতুন কল আমার নতুন জি এল এল বি সি তে ব্যর্থ হচ্ছে।

2.6.17 এর অধীনে কার্যকর করতে কোনও squeezeবা wheezeজিআইএলবিসি সংকলন করা কি অসম্ভব ?

আমি কী ভুল করেছি এবং / বা কীভাবে এগিয়ে যেতে হবে তার কোনও ধারণাগুলি / পয়েন্টারগুলি প্রশংসিত হবে ...


একটি ক্রস-সংকলক স্থাপন করা এতটা কঠিন নয় এবং ওয়েবে এখানে টিউটোরিয়াল রয়েছে। এটি কেমুতে সংকলকটি চালানোর চেয়ে উল্লেখযোগ্যভাবে দ্রুত হবে। আমি জানি না যে এটি ফলস্বরূপ লিবিসি কাজ না করার সাথে সহায়তা করবে কিনা।
গিলস 16'10

@ গিলস: "টিউটোরিয়াল" সম্পর্কিত - আপনি কি নির্দিষ্ট কিছুতে নির্দেশ করতে পারেন? আমি ক্রসস্টুল-এনজি চেষ্টা করেছি কিন্তু এটি আমার টার্গেটের কার্নেল সংস্করণ (২.6.১7) এর মতো পিছনে যায় না। আমি মনে করি এটি প্রাসঙ্গিক - গ্লিবিকে অবশ্যই আমার কার্নেল থেকে শিরোনামগুলি সংকলন করতে হবে (সম্ভবত
এটিই

উত্তর:


7

আমি এইটা তৈরি করেছিলাম :-)

আমি মূলত গিলসের পরামর্শ অনুসরণ করেছি এবং এটি যথাযথভাবে করার সিদ্ধান্ত নিয়েছি: অর্থাত্ জি এল এল বি সি-র একটি সম্পূর্ণ ক্রস সংকলন পরিচালনা করুন। আমি ক্রসস্টুল-এনজি থেকে শুরু করেছিলাম এবং প্রাথমিকভাবে হতাশ হয়েছিলাম - দেখে যে এটি আমার পুরানো কার্নেলটিকে সমর্থন করে না। আমি এটি এখানে রেখেছি, যদিও - ডিফল্ট আর্ম-জ্নুয়াবি বিল্ড কনফিগারেশনে এ জাতীয় পরিবর্তনগুলি সম্পাদন করতে ক্রসস্টুল-এনজি দ্বারা সংরক্ষণ করা কনফিগারেশন ফাইলটি ম্যানুয়ালি সম্পাদনা করা হয়েছে:

$ ct-ng arm-unknown-linux-gnueabi
$ ct-ng menuconfig
...
$ vi .config
$ cat .config
...
CT_KERNEL_VERSION="2.6.17"
CT_KERNEL_V_2_6_17=y
CT_LIBC_VERSION="2.13"
CT_LIBC_GLIBC_V_2_13=y
CT_LIBC_GLIBC_MIN_KERNEL_VERSION="2.6.9"
CT_LIBC_GLIBC_MIN_KERNEL="2.6.9
...
$ ct-ng +libc

অসংখ্য পরীক্ষা এবং ব্যর্থ চেষ্টার পরে, উপরের পরিবর্তনগুলি এটি করেছে - আমি GLIBC এর একটি সংকলিত সংস্করণ পেয়েছি যা আমার কার্নেলের সাথে কাজ করবে এবং ফলস্বরূপ ফাইলগুলি আমার ডেবিয়ান লেনি এআরএম মেশিনে অনুলিপি করেছে:

$ cd .build/arm-unknown-linux-gnueabi/build/build-libc-final/
$ tar zcpf newlibc.tgz $(find . -type f -iname \*.so)
$ scp newlibc.tgz root@mybook:.

আমি সমস্ত পথ দিয়ে গিয়েছিলাম এবং অতীত কন্ট্রোল সরিয়ে নিয়েছি: আমি একটি / হুইজিটি ডিবাট স্ট্র্যাপ করেছিলাম এবং তারপরে - খুব সাবধানতার সাথে - /wheezyআমার নিজের সাথে আর্মেল-ডিবুটস্ট্র্যাপের জিলিবিসি সংস্করণগুলিকে ওভাররোট করে:

# # In the ARM machine
# cd /wheezy/lib/arm-linux-gnueabi/
# mv /var/tmp/ohMyGod/libc.so libc-2.13.so
# mv /var/tmp/ohMyGod/rt/librt.so librt-2.13.so
...

... ইত্যাদি নিশ্চিত করে আমি কোনও ভাগ করা লাইব্রেরি মিস করি নি।

অবশেষে, আমি ধরে কপি lddএবং ldconfigবাইনেরিতে (এটিও glibc অংশ ছিল), এবং আমার / হুইজি ভিতরে chrooted।

এটা কাজ করেছে.

আমি কেবল ধরে নিতে পারি যে কোনও এক্স ৮ inside-এর অভ্যন্তরে ক্রুট-এড 'কিমু-আর্ম' অনুকরণ থেকে জি এল এল বি সি-র সংকলন, কোনওভাবে গোলমাল জিনিসগুলি - সম্ভবত configureপ্রক্রিয়াটি চলমান পরিবেশ থেকে কিছু জিনিস সনাক্ত করে - যেখানে ক্রস সংকলনটি বিভ্রান্ত করা যায় না ।

তাই স্বাভাবিকভাবেই আমি পরবর্তী পদক্ষেপে চলে এসেছি এবং আমার পুরানো লেনির e / বিন, / এসবিন, ...} ফোলাগুলি প্রতিস্থাপন করতে একটি ব্যস্তবক্স-স্ট্যাটিক শেল ব্যবহার করেছি - এবং আমার ব্র্যান্ডের নতুন হুইজে পুনরায় চালু করেছি :-)

আমি এখানে দাবি করেছি যে আমার ডাব্লুডি মাইবুক ওয়ার্ল্ড এডিশনটি কেবলমাত্র গ্রহে ডিবিয়ান হুইজি চলমান গ্রহের একমাত্র :-) অন্য কারও যদি আগ্রহী হয় তবে আমি কোথাও লিবিসি ফাইলগুলির একটি টারবাল আপলোড করতে পারি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.