مشروع للحصول على قذيفة Linux تعمل على iOS ، باستخدام محاكاة UserMode X86 وترجمة Syscall.
بالنسبة للوضع الحالي للمشروع ، تحقق من علامة التبويب المشكلات وسجلات الالتزام.
يحتوي هذا المشروع على وحدة فرعية GIT ، تأكد من استنساخ --recurse-submodules git submodule update --init بعد الاستنساخ.
ستحتاج إلى هذه الأشياء لبناء المشروع:
pip3 install meson )brew install llvm ، على Linux ، sudo apt install clang lld أو sudo pacman -S clang lld أو أي شيء آخر)sudo apt install libsqlite3-dev )brew install libarchive ، sudo port install libarchive ، sudo apt install libarchive-dev ) tod افتح المشروع في Xcode ، وافتح ish.xcconfig ، وقم بتغيير ROOT_BUNDLE_IDENTIFIER إلى شيء فريد. ستحتاج أيضًا إلى تحديث معرف فريق التطوير في المشروع (وليس الهدف!) إعدادات الإنشاء. ثم انقر فوق "تشغيل". هناك نصوص يجب أن تفعل كل شيء آخر تلقائيًا. إذا واجهت أي مشاكل ، افتح مشكلة وسأحاول المساعدة.
لإعداد بيئتك ، قرص مضغوط للمشروع وتشغيل meson build لإنشاء دليل بناء في build . ثم قرص مضغوط إلى دليل البناء وتشغيل ninja .
لإعداد نظام ملفات Alpine Linux المستقلة ذاتيًا ، قم بتنزيل جهاز Alpine Minirootfs Tarball لـ I386 من موقع Alpine على الويب وتشغيله ./tools/fakefsify ثم يمكنك تشغيل الأشياء داخل نظام ملفات جبال الألب alpine ./ish -f alpine /bin/sh إذا لم تكن tools/fakefsify موجودة لك في دليل الإنشاء الخاص بك ، فقد يكون ذلك لأنه لم يتمكن من العثور على libarchive على نظامك (انظر أعلاه للحصول على طرق لتثبيته.)
يمكنك استبدال ish tools/ptraceomatic لتشغيل البرنامج في عملية حقيقية وخطوة واحدة ومقارنة السجلات في كل خطوة. أنا استخدمه لتصحيح الأخطاء. يتطلب 64 بت Linux 4.11 أو أحدث.
لدى ISH العديد من قنوات التسجيل التي يمكن تمكينها في وقت البناء. بشكل افتراضي ، يتم تعطيل جميعهم. لتمكينهم:
ISH_LOG في ish.xcconfig على قائمة مفصولة بالفضاء من قنوات السجل.meson configure -Dlog="<space-separated list of log channels>" .القنوات المتاحة:
strace : القناة الأكثر فائدة ، تسجل المعلمات وقيمة الإرجاع لكل مكالمة نظام تقريبًا.instr : سجلات كل تعليمات تنفذها المحاكي. هذا يبطئ الأشياء كثيرا.verbose : سجلات التصحيح التي لا تتناسب مع فئة أخرى.DEFAULT_CHANNEL لمعرفة ما إذا كان قد تمت إضافة المزيد من قنوات السجل منذ تحديث هذه القائمة.ربما يكون الشيء الأكثر إثارة للاهتمام الذي كتبته كجزء من العش هو المترجم. إنها ليست jit تمامًا لأنها لا تستهدف رمز الجهاز. بدلاً من ذلك ، يولد مجموعة من المؤشرات إلى وظائف تسمى الأدوات ، وتنتهي كل أداة مع tailcall إلى الوظيفة التالية ؛ مثل تقنية الكود الخيوط المستخدم من قبل بعض المترجمين الفوريين. والنتيجة هي تسريع ما يقرب من 3-5x مقارنة بالمضاهاة باستخدام إرسال التبديل الأكثر بساطة.
لسوء الحظ ، اتخذت قرارًا بكتابة جميع الأدوات تقريبًا في لغة التجميع. ربما كان هذا قرارًا جيدًا فيما يتعلق بالأداء (على الرغم من أنني لن أعرف أبدًا بالتأكيد) ، ولكن قرارًا فظيعًا فيما يتعلق بقدرة القراءة ، والقابلية ، وعقلاني. كمية الهراء التي اضطررت إلى تحملها من برنامج التحويل البرمجي/المجمع/الرابط هو مجنون. يبدو الأمر كما لو أن هناك شيطانًا يتأكد من أن الكود مشوه بما فيه الكفاية ، وإذا لم يكن الأمر كذلك ، فإنه يشكل أسبابًا غبية لعدم تجميعها. من أجل البقاء عاقلًا أثناء كتابة هذا الرمز ، اضطررت إلى تجاهل أفضل الممارسات في بنية الكود والتسمية. ستجد وحدات الماكرو والمتغيرات مع أسماء وصفية مثل ss و s و a تجميع وحدات الماكرو المتداخلة وراء الاعتقاد. ولأعلى ، لا توجد أي تعليقات تقريبًا.
لذا فإن التحذير: قد يتسبب التعرض طويل الأجل لهذا الرمز في فقدان العقلانية ، والكوابيس حول وحدات الماكرو للغاز وأخطاء الرابط ، أو أي عدد من الآثار الجانبية الأخرى المنهكة. يُعرف هذا الرمز لدولة كاليفورنيا بالتسبب في السرطان والعيوب الخلقية والأذى التناسلي.