مركز الوسائط المتعددة "Kodi" و Yocto Project


مقدمة لمشروع Yocto


Yocto Project هو مشروع تعاوني مفتوح المصدر لتبسيط عملية تطوير التوزيعات للأنظمة المدمجة. يحتوي Yocto على عدد كبير من القوالب وبيانات التعريف وأدوات البناء. في Yocto Project ، يمكنك توصيل عدد كبير من طبقات BSP (حزمة دعم النظام الأساسي) لجميع أنواع الأنظمة الأساسية للأجهزة.

الغرض الرئيسي من هذه المقالة هو محاولة إظهار تجميع حزمة التوزيع النموذجية في مشروع Yocto باستخدام مثال مركز الوسائط المتعددة المعروف Kodi ، الإصدار 17.6 للكمبيوتر ذو السبورة Raspberry Pi 3B.

إذا شعرت في مكان ما في أعماق نفسك أنك جامع ، لكنك لم تقرر بعد ما تريد جمعه ، فهذا المقال مناسب لك. إذا كنت تستخدم مشروع Yocto بالفعل في عملك اليومي ، فيمكنك التمرير خلال هذه المقالة. انتقل مباشرة إلى الفصل الأخير واستعد.

المقالة عملية بحتة وتوضح إمكانية استخدام إنجازات مشروع Yocto و OpenEmbedded لبناء مركز الوسائط المتعددة "Kodi". تتم إدارة طبقات Yocto باستخدام الأداة المساعدة Repo من Google. مقال في وثيقة هذه السلسلة.

لذلك: دعنا نذهب.

المحتويات:


تثبيت Yocto Project على أوبونتو
توزيع محرك البناء في مشروع Yocto
باستخدام OpenEmbedded مع مشروع Yocto
حزمة دعم النظام الأساسي (BSP)
إدارة طبقات Yocto باستخدام Repo
تثبيت ريبو
توزيع بناء البيان
محتوى واضح
وصف واضح
بكالوريوس واضح هيكل
تهيئة متغيرات Poky
ريبو التهيئة
ريبو سينك
إنشاء تكوين مشروع Yocto
بناء ملف التكوين / أسيوط / local.conf
بناء ملف التكوين / أسيوط / bblayers.conf
طبقة لتجميع مركز الوسائط المتعددة
هيكل طبقة
تكوين طبقة
تكوين وصفات هائج
تكوين وصفات الأساسية
تكوين وصفات النواة
تكوين وصفات-Mediacentre
تكوين وصفات الوسائط المتعددة
كودي بناء وصفة الملحق
إضافة عنصر جديد إلى قائمة إعدادات Kodi
الحد الأقصى لإعدادات التخزين المؤقت للفيديو
مشاهدة التلفزيون عبر IPTV
مشاهدة يوتيوب مع البرنامج المساعد كودي
وحدة تحكم تكوين شبكة قذيفة التمديد
توزيع بناء وصفة
دليل موجز لإنشاء صورة التوزيع
حاشية

تثبيت Yocto Project على أوبونتو


لإنشاء التوزيع باستخدام Yocto Project على Ubuntu ، تحتاج إلى تثبيت الحزم التالية:

sudo apt-get install -y --no-install-suggests --no-install-recommends \ gawk wget git-core diffstat unzip texinfo gcc-multilib \ build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \ xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \ xterm 

يتم تثبيت الحزم باستخدام الأمر apt-get install وأمر تصعيد الامتياز sudo . في نظام Ubuntu ، هذه ممارسة واسعة النطاق عند استخدام الأمر sudo لتنفيذ إجراءات إدارية (عند إنشاء المستخدم الرئيسي للنظام ، يتم تسجيله تلقائيًا في المجموعة "sudo").

يمكنك الاطلاع على تعليمات التثبيت المفصلة هنا:

توزيع محرك البناء في مشروع Yocto


في مشروع Yocto ، يتم وصف كل وحدة برنامج باستخدام وصفة التجميع. تشبه لغة وصف الوصفة "bash" مع القدرة على إدراج أجزاء من الشفرة في لغة python. يمكنك الحصول على معلومات بناء الجملة الأساسية من دليل مشروع Yocto . يمكن دمج مجموعة من وصفات التجميع ، حسب الغرض ، في طبقات تجميع منفصلة.

تنقسم الطبقات إلى الأجهزة - طبقات BSP ، طبقات UI (واجهة المستخدم) ، طبقات Yocto المحددة ، بالإضافة إلى الطبقات التي تنفذ وظائف معينة:
على سبيل المثال ، الطبقات من OpenEmbedded => الوسائط المتعددة ، و python ، و perl ، و ruby ​​، ​​والشبكات ، و systemd ، وخادم الويب ، إلخ.

باستخدام OpenEmbedded مع مشروع Yocto


ومع ذلك ، إذا كنت تستخدم مشروع Yocto ، فمن المؤكد أنك ستحتاج إلى طبقات مع وظائف إضافية ، مثل مجموعة كبيرة من الوصفات لجميع المناسبات. وهناك مثل هذه المجموعة - هذه وصفات من OpenEmbedded. OpenEmbedded هي بنية أساسية لإنشاء حزم لنظام التشغيل Linux المدمج.

OpenEmbedded متوافق تمامًا مع مشروع Yocto ، حيث تم اعتبار هذا المشروع أساسًا لمشروع Yocto. ربما هذا هو السبب في أن مشروع Yocto لديه استقرار أفضل قليلاً ، وثائق أفضل ودعم أفضل قليلاً (ولكن في الأساس ما زال نفس OpenEmbedded).

حزمة دعم النظام الأساسي (BSP)


حزمة دعم اللوحة هي طبقة (طبقات) منفصلة ومتخصصة للوحة محددة تحدد ميزات الأجهزة في النظام الأساسي ، أي تنفذ تلك الأشياء المحددة التي تميز لوحة واحدة عن لوحة أخرى: ميزات المعالج ، المقاطعات ، عنونة ، ميزات محمل الإقلاع ، ميزات محول الفيديو (GPU) ، إلخ.

تستخدم هذه المقالة طبقة BSP - meta-raspberrypi
يقع مستودع الطبقة في: git.yoctoproject.org/git/meta-raspberrypi

إدارة طبقات Yocto باستخدام Repo


يمكن لـ Yocto Project استخدام عدد كبير من الطبقات من موردين مختلفين - مطورو المعدات ، وكل هذا يحتاج إلى إدارته بطريقة أو بأخرى. تخيل أن لديك أكثر من عشرة لوحات مختلفة ، وكل لوحة تأتي مع مستودع بوابة BSP منفصل ، وهذا لا يحسب البنية التحتية لمشروع Yocto نفسه ، بالإضافة إلى وظائف إضافية ممكنة من OpenEmbedded.

في مثل هذه الحالة ، لن تحصل على نص برمجي منفصل بسيط للتثبيت. ويلي نيللي ، يجب أن تبحث عن الأدوات التي يمكن أن تفعل ذلك بشكل جيد. أكثر من جيد. واحدة من أفضل الأدوات من هذا النوع هي أداة جوجل - ريبو.

Repo هي الأداة الرئيسية لإدارة مستودعات GIT عند بناء نظام التشغيل Android مع قاعدة الكود الكبيرة. يتيح لك Repo إدارة أكثر من عشرة مستودعات تخزين منفصلة ، إن لم تكن مئة ، في مشروع واحد ، يمكنك تحديد إصداراتها بعناية في ملف xml واحد من Manifesto

وللمزامنة الصحيحة لجميع إصدارات جميع المستودعات ، تحتاج فقط إلى تشغيل أمر واحد

ريبو متزامنة

تثبيت ريبو


باستخدام مجموعة الأوامر التالية ، يمكنك تثبيت Repo في الدليل الرئيسي ~ / bin
(يمكن تثبيت أمر curl بشكل منفصل: sudo apt-get install curl)

 PATH=${PATH}:~/bin mkdir ~/bin curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo 


وفي المستقبل تحتاج فقط إلى استخدام الأمر في وحدة التحكم: repo

او هكذا
إذا لم تتم إضافة دليل HOME / bin بمسار بدء التشغيل القياسي تلقائيًا
راجع ملف الصفحة الرئيسية /

$
$ PATH = $ {PATH}: ~ / bin
ريبو دولار
$

توزيع بناء البيان


التوزيع الذي تم جمعه في إطار المقال ، أحتاج إلى تسميته بشيء. فليكن اسم Torvin . يحمل الاسم الرمزي Torvin ، وسيحتوي على توزيع Linux بسيط مع تجميع برنامج واحد. يشير هذا إلى برنامج مستخدم تطبيق واحد - Kodi ، ولا شيء أكثر (كل شيء آخر هو مستوى النظام). بالنسبة لمركز الوسائط المتعددة ، في رأيي هذا يكفي.

محتوى واضح


يتم استخدام ملف torvin-0.2.5.xml لإدارة طبقات التوزيع .

  <?xml version="1.0" encoding="UTF-8"?> <manifest> <default sync-j="4" revision="rocko"/> <remote fetch="https://git.yoctoproject.org/git" name="yocto"/> <remote fetch="https://github.com/openembedded" name="oe"/> <remote fetch="https://github.com/berserktv" name="bs"/> <project remote="bs" revision="master" name="bs-manifest" path="sources/bs-manifest"> <linkfile dest="setup-environment" src="setup-environment"/> <linkfile dest="shell.sh" src="raspberry/shell.sh"/> <linkfile dest="sources/base" src="raspberry/rocko"/> </project> <project remote="yocto" revision="rocko" name="poky" path="sources/poky"/> <project remote="oe" revision="rocko" name="meta-openembedded" \ path="sources/meta-openembedded"/> <project remote="yocto" revision="rocko" name="meta-raspberrypi" \ path="sources/meta-raspberrypi"/> <project remote="bs" revision="rocko" name="berserk" path="sources/berserk"/> </manifest> 

وصف واضح


في بداية البيان ، تشير العلامات عن بُعد إلى مستودعين GIT رئيسيين ومساعد واحد:

https: ⁄⁄git.yoctoproject.org / git - مستودع Yocto المسمى yocto
https: ⁄⁄github.com / openembedded - مستودع OpenEmbedded يدعى oe
https: ⁄⁄github.com / berserktv - مستودع GIT إضافي باسم bs

في الجزء التالي من البيان ، باستخدام التسمية المختصرة ، نحن نعمل مع مشاريع موجودة في هذه المستودعات ، تحتوي علامة المشروع على السمات التالية:

بعيد - اسم المستودع البعيد المسمى
مراجعة - اسم الفرع أو إصدار التجزئة
اسم - اسم المشروع في المستودع المحدد
المسار - مسار المشروع المحلي في نظام الملفات الخاص بك

    <project remote="bs" revision="master" name="bs-manifest" path="sources/bs-manifest"> </project>  xml      : git clone https://github.com/berserktv/bs-manifest -b master sources/bs-manifest 

في نص علامة المشروع ، أشرت إلى أوامر لإنشاء روابط رمزية للبنية التحتية للبرامج النصية المساعدة للتهيئة الأولية والبدء المنتظم في نظام بناء Poky الذي أحتاجه

    linkfile <project remote="bs" revision="master" name="bs-manifest" path="sources/bs-manifest"> <linkfile dest="setup-environment" src="setup-environment"> <linkfile dest="shell.sh" src="raspberry/shell.sh"> <linkfile dest="sources/base" src="raspberry/rocko"> </project>        : ln -s src dest .. #      ln -s sources/bs-manifest/setup-environment setup-environment ln -s sources/bs-manifest/raspberry/shell.sh shell.sh #    ,  #      cd sources ln -s bs-manifest/raspberry/rocko base 

بكالوريوس واضح هيكل


 ├── COPYING.MIT
 ├── التوت
 ├── ├── روكو
 ├── │ ├── أسيوط
 bl │ │ ├── bblayers.conf
 . │ │ └── local.conf
 └── │ └── torvin-0.2.5.xml
 └── └── shell.sh
 AD README.md
 └── الإعداد البيئة


يستخدم المشروع bs-manifest لإدارة التهيئة المرنة ، مع مراعاة تجميعات الإصدارات المختلفة للتوزيع. لدي هذا الإصدار - 0.2.5

تهيئة متغيرات Poky


تم الحصول على بيئة تهيئة البرنامج النصي للتهيئة من مشروع مجتمع Freescale (في بيئة yocto يعد هذا حلاً مشتركًا). البرنامج النصي مسؤول عن تهيئة متغيرات نظام بناء Poky ، يقوم البرنامج النصي بإنشاء بنية دليل مقسمة بشكل جيد للغاية:

  • بناء - بناء الدليل
  • مصدر - وصفات التجميع شفرة المصدر
  • download - دليل لتنزيل رمز البرنامج (قواعد بيانات git ، أرشيفات tar.gz)

يمكن الاطلاع على محتويات البرنامج النصي لبيئة الإعداد هنا:

محتويات البرنامج النصي Shell.sh
  #!/bin/bash MACHINE='raspberrypi3' source ./setup-environment build echo "you may try 'bitbake core-image-minimal'" bash 


يعمل هذا البرنامج النصي الجذر على تهيئة متغيرات التكوين الخاصة ببيئة البناء وعادة ما يتم استدعاؤه في بداية الجلسة.

ريبو التهيئة


لتهيئة الريبو ، يجب تشغيل الأمر:

 mkdir torvin cd torvin repo init -u https:⁄⁄github.com/berserktv/bs-manifest -m raspberry/rocko/torvin-0.2.5.xml 

حيث -u https: ⁄⁄github.com / berserktv / bs-manifest تخبر GIT الطريق إلى مشروع البيان

ملاحظة: يمكنك أيضًا تحديد -b tree_name
(إذا لم تحدد رمز التبديل -b ، فسيتم افتراض الفرع الرئيسي (افتراضيًا))

حيث يشير المسار -m raspberry / rocko / torvin-0.2.5.xml إلى ملف التكوين إلى ما يلي:

  1. اسم النظام الأساسي للجهاز الذي يتم تنفيذ التجميع له - التوت
  2. اسم فرع العمل الرئيسي Yocto / OpenEmbedded هو rocko
  3. الاسم الرمزي للإصدار هو torvin (كافة إصدارات سلسلة 0.2.x)
  4. رقم الإصدار الرقمي الذي يتم تجميعه هو 0.2.5

ريبو سينك


للتمهيد أو المزامنة اللاحقة ، فقط قم بتشغيل الأمر:

 repo sync 

التي ستلتقط جميع أحدث إصدارات مشاريع GIT المحددة في ملف البيان (عادة ما تتم الإشارة إلى الفروع) ، إذا كان لديك اسم علامة تجزئة أو علامة تمييز في سمة المراجعة ، فلن يتغير إصدار مستودع التخزين هذا. يمكن تحديد اسم العلامة مثل هذا: revision = "refs / tags / v0.2.5"

إنشاء تكوين مشروع Yocto


بعد تنفيذ أمر repo sync ، يمكنك البدء في إنشاء التكوين الرئيسي لمشروع Yocto:

 ./shell.sh 

بعد اكتمال البرنامج النصي ، سيتم إنشاء دليل build / conf :
مع ملفين رئيسيين:

  • local.conf - متغيرات التحكم في التجميع:
    اسم النظام الأساسي ونوع التوزيع وحزم الإنشاء ، إلخ.
  • bblayers.conf - تكوين الطبقات المتصلة لمشروع Yocto

بشكل افتراضي ، يبحث البرنامج النصي لبيئة الإعداد عن مصادر / قاعدة / أسيوط
التكوين الأولي وإذا كان local.conf و bblayers.conf الملفات
موجودة ، يتم نسخها لبناء / أسيوط
(انظر متغير TEMPLATES في بيئة الإعداد)

أي تؤخذ الملفات من المصادر / bs- البيان / التوت / روكو / أسيوط
نرى إنشاء رابط إلى قاعدة

بناء ملف التكوين / أسيوط / local.conf


إظهار / إخفاء
  MACHINE ??= 'raspberrypi3' DISTRO ?= 'poky' PACKAGE_CLASSES ?= "package_deb" EXTRA_IMAGE_FEATURES ?= "debug-tweaks" USER_CLASSES ?= "buildstats image-mklibs image-prelink" PATCHRESOLVE = "noop" BB_DISKMON_DIRS = "\ STOPTASKS,${TMPDIR},1G,100K \ STOPTASKS,${DL_DIR},1G,100K \ STOPTASKS,${SSTATE_DIR},1G,100K \ STOPTASKS,/tmp,100M,100K \ ABORT,${TMPDIR},100M,1K \ ABORT,${DL_DIR},100M,1K \ ABORT,${SSTATE_DIR},100M,1K \ ABORT,/tmp,10M,1K" PACKAGECONFIG_append_pn-qemu-native = " sdl" PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl" CONF_VERSION = "1" DL_DIR ?= "${BSPDIR}/downloads/" # size memory GPU for Raspberry Pi GPU_MEM = "128" GPU_MEM_256 = "112" GPU_MEM_512 = "160" GPU_MEM_1024 = "320" # for libs: "mpeg2dec libmad ffmpeg x264" LICENSE_FLAGS_WHITELIST += "commercial" 


بناء ملف التكوين / أسيوط / bblayers.conf


إظهار / إخفاء
  # POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf # changes incompatibly LCONF_VERSION = "6" POKY_BBLAYERS_CONF_VERSION = "2" BBPATH = "${TOPDIR}" BSPDIR := \ "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}" BBFILES ?= "" BBLAYERS ?= " \ ${BSPDIR}/sources/poky/meta \ ${BSPDIR}/sources/poky/meta-poky \ ${BSPDIR}/sources/poky/meta-yocto-bsp \ ${BSPDIR}/sources/meta-openembedded/meta-oe \ ${BSPDIR}/sources/meta-openembedded/meta-python \ ${BSPDIR}/sources/meta-openembedded/meta-networking \ ${BSPDIR}/sources/meta-openembedded/meta-multimedia \ ${BSPDIR}/sources/meta-openembedded/meta-filesystems \ ${BSPDIR}/sources/meta-raspberrypi \ ${BSPDIR}/sources/berserk/meta-berserk \ " 



المتغيرات الرئيسية لملف local.conf - والتي تحتاج إلى الانتباه إلى:

  • MACHINE - اسم المنصة التي يتم بموجبها تنفيذ التجميع
  • DISTRO - اسم فئة التوزيع
  • PACKAGE_CLASSES - تنسيق الحزمة لتثبيت البرنامج
  • LICENSE_FLAGS_WHITELIST - استخدام التراخيص الإضافية

إعدادات محددة لعائلة مجالس التوت بي

  • GPU_MEM = "128" - مقدار ذاكرة الفيديو لمحول فيديو GPU (مخصص من ذاكرة الوصول العشوائي)
  • GPU_MEM_256 = "112" - هو نفسه فقط للوحات ذات إجمالي مساحة RAM = 256 ميجابايت
  • GPU_MEM_512 = "160" - هو نفسه فقط للوحات ذات إجمالي مساحة RAM = 512 ميجابايت
  • GPU_MEM_1024 = "320" - نفس الشيء ينطبق فقط على اللوحات ذات إجمالي مساحة RAM = 1024 ميجابايت

ملاحظة:
على سبيل المثال ، إذا تركت المتغير GPU_MEM = "128" فقط ،
ثم لجميع لوحات RPI ، RPI2 ، RPI3
بغض النظر عن كمية ذاكرة الوصول العشوائي الحقيقية
على لوحة دائما سيتم تخصيصها ل GPU - 128MB
(وينخفض ​​إجمالي حجم ذاكرة الوصول العشوائي بهذه القيمة)

إذا تم تحديد جميع المتغيرات ، تكون التوجيهات GPU_MEM_256 و GPU_MEM_512 و GPU_MEM_1024 أكثر أولوية.

لتجميع مركز الوسائط المتعددة ، بالإضافة إلى طبقات Yocto العادية ، راجع ملف bblayers.conf

 ${BSPDIR}/sources/poky/meta \ ${BSPDIR}/sources/poky/meta-poky \ ${BSPDIR}/sources/poky/meta-yocto-bsp \ 

قمت بتوصيل أربع طبقات مع وظيفة إضافية من OpenEmbedded.

Kodi Multimedia Center - هو برنامج معقد يستخدم عددًا كبيرًا من المكتبات الخارجية وتحتاج إلى إنشاء كل مكتبة باستخدام وصفة بناء ، لذلك إن أمكن ، سأستخدم جميع الوصفات من OpenEmbedded في فئة الوسائط المتعددة

لذلك ، لدي طبقة متعددة الوسائط متصلة والطبقات التي يعتمد عليها

 ${BSPDIR}/sources/meta-openembedded/meta-oe \ ${BSPDIR}/sources/meta-openembedded/meta-python \ ${BSPDIR}/sources/meta-openembedded/meta-networking \ ${BSPDIR}/sources/meta-openembedded/meta-multimedia \ 

ثم يتم توصيل طبقة أخرى OpenEmbedded للعمل مع أنظمة الملفات

 ${BSPDIR}/sources/meta-openembedded/meta-filesystems \ 

مزيد من توصيل طبقة BSP الرئيسية لمنصة Raspberry Pi

 ${BSPDIR}/sources/meta-raspberrypi \ 

حسنًا ، في النهاية ، يتم توصيل طبقة إضافية ، تكون مسؤولة عن تجميع صورة التوزيع مع وظيفة "مركز الوسائط المتعددة"

 ${BSPDIR}/sources/berserk/meta-berserk \ 

طبقة لتجميع مركز الوسائط المتعددة


في رأيي ، فإن مشروع Yocto عبارة عن مزيج صناعي لإنشاء توزيعات مضمنة. ولكن إذا كنت قد عملت مع نظام Buildroot build ، فقد يبدو Yocto مرهقًا بالنسبة لك. يستخدم كمية كبيرة من مساحة القرص الثابت المجانية. للتشغيل العادي ، تتطلب Yocto حوالي 80 - 100 جيجابايت من المساحة الحرة ، وهذا عادة ما يأخذ بعين الاعتبار التجميع فقط لمنصة واحدة.

تتوافق Yocto مع غرضها الرئيسي - دعم أكبر عدد ممكن من منصات الأجهزة المختلفة ، وهذا يتطلب آلية أكثر مرونة لتبديل التجميعات. وهذه الآلية تحتاج إلى وقت ومكان. بناء التوزيع في Yocto ليس عملية سريعة.

لذلك ، جميع وظائف لتجميع "مركز الوسائط المتعددة" لدي مع طبقة منفصلة:

 https://github/berserktv/berserk 

(العنوان مأخوذ من كتابي المفضل ، The Hammer and the Cross ، من تأليف هاري هاريسون.)
(Torvin هو أيضا شخصية في هذا الكتاب.)

لجعل الوظيفة التي أحتاج إليها ، سأستخدم ما يسمى الوظائف الإضافية لوصفات ، والتي توجد في الملفات ذات الملحق .bbappend
في ملف .bbappend ، يمكنك إضافة استدعاءات الأوامر الخاصة بك لطريقة وصفة الإنشاء المعتادة ، على سبيل المثال ، إلى do_configure أو do_compile أو do_install method ، إلخ.

هيكل طبقة


 ├── COPYING.MIT
 ├── ميتا هائج
 ├── ├── أسيوط
 . │ └── layer.conf
 │ ├── وصفات هائج
 ├── │ ├── bs-net
 ├── │ ├── لأول مرة
 │ │ ├── الصور
 │ │ └── التلفزيون
 │ ├── وصفات الأساسية
 ├── │ ├── init-ifupdown
 pl │ └── psplash
 │ ├── وصفات النواة
 │ │ └── لينكس
 ipes ├── وصفات-Mediacentre
 od │ ├── كودي
 od │ └── kodi-plugins
 ipes └── وصفات الوسائط المتعددة
 f └── ffmpeg
 AD README.md
 g changelog.txt


تكوين الطبقة:

  • أسيوط طبقة التكوين
  • وصفات - هائج - بناء وصفة التوزيع ، والتلفزيون ، وشبكة وصفات الإطلاق الأولى
  • وصفات الأساسية - وصفات أساسية ، ولا سيما تعديل على وصفة بدء التشغيل
  • وصفات - نواة - بناء نواة لينكس وصفات
  • وصفات - mediacentre - وصفات لبناء كودي والمكونات الإضافية
  • وصفات الوسائط المتعددة - وصفات الوسائط المتعددة ، التجمع ffmpeg

تكوين طبقة


يتضمن ملف layer.conf
  # We have a conf and classes directory, add to BBPATH BBPATH .= ":${LAYERDIR}" # We have a packages directory, add to BBFILES BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ ${LAYERDIR}/recipes-*/*/*.bbappend" BBFILE_COLLECTIONS += "bs" BBFILE_PATTERN_bs := "^${LAYERDIR}/" BBFILE_PRIORITY_bs = "5" DISTRO_FEATURES_append += " wifi x11" PREFERRED_VERSION_ffmpeg = "3.1.11" SYSVINIT_ENABLED_GETTYS = "1" PREFERRED_VERSION_linux-raspberrypi ?= "4.9%" 


يحتوي الملف على إشارة إلى إصدار مكتبة ffmpeg ، ورقم إصدار linux kernel ، بالإضافة إلى عدد لوحات المفاتيح الافتراضية (tty) ، ويتضمن ميزات مجموعة التوزيع - wifi x11
DISTRO_FEATURES_append + = "wifi x11"

PREFERRED_VERSION_ffmpeg = "3.1.11"
SYSVINIT_ENABLED_GETTYS = "1"

PREFERRED_VERSION_linux-raspberrypi؟ = "4.9٪"

تكوين وصفات هائج


 ├── bs-net
 └── └── bs-net_0.1.3.bb
 ├── أول تشغيل
 ├── ├── الملفات
 └── │ └── first-run.sh
 └── └── first-run.bb
 ├── الصور
 ers └── berserk-image.bb
 └── التلفزيون
     ├── الملفات
     └── └── berserk.m3u8
     ├── tv-config.bb
     └── tv-dir.inc


حيث:

  • bs-net_0.1.3.bb - وصفة لإنشاء ملحقات shell لواجهات WLAN / Ethernet
  • first-run.bb - وصفة لأول مرة ، وتقسيم القرص إضافية
  • first-run.sh - البرنامج النصي shell التشغيل الأول (تشغيل في مستوى التشغيل S)
  • berserk-image.bb - وصفة لبناء صورة التوزيع
  • tv-config.bb - وصفة لتكوين القنوات التلفزيونية باستخدام IPTV
  • berserk.m3u8 - تكوين قنوات التلفزيون العامة (تنسيق m3u8)

تكوين وصفات الأساسية


 ├── الحرف الأول ifupdown
 ├── ├── الملفات
 │ │ └── واجهات
 └── └── init-ifupdown_1.0.bbappend
 └── psplash
     ├── الملفات
     └── └── psplash-berserk-img.h
     └── psplash_git.bbappend


حيث:

  • واجهات - ملف مع إعداد الشبكة الحالية
  • init-ifupdown_1.0.bbappend - ملحق وصفة تكوين الشبكة
  • psplash-berserk-img.h - صورة شاشة توقف بدء التشغيل
    ملف الرأس الذي تم الحصول عليه باستخدام الأداة المساعدة gdk-pixbuf-csource
  • psplash_git.bbappend - امتداد الوصفة لبدء تشغيل شاشة التوقف

تكوين الشبكة على الجهاز الهدف موجود في الملف:

 /etc/network/interfaces 

بعد أن قمت بإضافة امتداد الوصفة init-ifupdown ، استبدلت ملف التكوين العادي بملفي الخاص ، وقمت بتغيير ترتيب (الأولوية) في البرنامج النصي لمستويات التنفيذ

 INITSCRIPT_PARAMS = "start 98 2 3 4 5 . stop 10 0 6 1 ." 

في الوقت الحالي ، تتضمن جميع توزيعات Linux الحديثة تقريبًا شاشة بدء التشغيل. عادةً ما تُظهر شاشة توقف بدء التشغيل الحالة الحالية للتنزيل ، أي مؤشر على الوقت المنقضي منذ بدء النظام. في هذا الصدد ، ليست Yocto استثناءً ويمكنك تغيير صورة شاشة التوقف القياسية لبدء التشغيل إلى صورة عشوائية.

للقيام بذلك ، يجب عليك:

  1. FILESEXTRAPATHS_prepend - إضافة دليل للموارد
  2. SRC_URI - إضافة ملف رأس مع صورة عشوائية
  3. SPLASH_IMAGES - تغيير متغير التحكم في الحزمة

وكذلك في وصفة الصورة "berserk-image.bb" ، من الضروري إضافة صورة بدء التشغيل كميزات للصورة

 IMAGE_FEATURES += "splash" #          SPLASH = "psplash-berserk" 

تكوين وصفات النواة


 └── لينكس
     ├── الملفات
     b ├── db.txt.patch
     │ └── rbpi.cfg
     └── linux-raspberrypi_4.9.bbappend


حيث:

  • db.txt.patch - التصحيح مع قاعدة المجال التنظيمي (يستخدم في WiFi)
  • rbpi.cfg - جزء تكوين Linux kernel
  • linux-raspberrypi_4.9.bbappend - امتداد وصفة بناء 4.9 kernel لـ Raspberry Pi

تعمل أجهزة Wi-Fi على ترددات معينة ولديها شيء اسمه مجال تنظيمي - هذه هي المعلمة التي تشير إلى البلد الذي من المفترض أن يعمل فيه هذا الجهاز.

يحتوي Linux kernel على قاعدة بيانات مصاحبة يتم فيها تسجيل الترددات المسموح بها والطاقة المسموح بها لكل دولة.

في أبسط الحالات ، يمكن إدراج قاعدة البيانات هذه مباشرة في النواة بشكل ثابت عن طريق تحديد معلمة:
CONFIG_CFG80211_INTERNAL_REGDB = ص
وهو بالضبط ما فعلته من خلال ربط تصحيح مع قاعدة البيانات db.txt.patch هذه

وأكثر شيء واحد: في Yocto هناك شيء مثل شظايا تكوينات النواة. عادةً ما يحتوي جزء التهيئة ، وهو ملف ذو امتداد cfg ، على معلمات kernel التي تحتاجها بوضوح لأغراض معينة فقط. وتضاف هذه القطعة من التكوين إلى المعلمات الافتراضية الموجودة بالفعل في الوصفة عند بناء النواة.

بالإضافة إلى وصفة bbappend ، يمكنك أيضًا تغيير المعلمات التي يتم تمريرها إلى kernel أثناء بدء التشغيل:

أي تجاوز المتغير
CMDLINE راجع ملف linux-raspberrypi_4.9.bbappend

محتوى rbpi.cfg
  # use statically compiled regulatory rules database CONFIG_CFG80211_INTERNAL_REGDB=y #  Wifi  Asus USB-N53 chipset Ralink RT3572 CONFIG_RT2800USB=m #  wifi    Atheros D-Link DWA-126 802.11n (AR9271), # NetGear WNDA3200, NetGear WNA1100, TP-Link TL-WN722N (AR9271), # TL-WN322G v3, TL-WN422G  .. . cateee.net CONFIG_ATH9K_HW=m CONFIG_ATH9K_HTC=m #  Wifi    wpa_supplicant CONFIG_WIRELESS=y CONFIG_WEXT_CORE=y CONFIG_WEXT_PROC=y CONFIG_CRYPTO_AES=y #    IPSec,    Wifi  #   wpa_supplicant   CONFIG_CRYPTO_CCM=m CONFIG_CRYPTO_CTR=m CONFIG_CRYPTO_ARC4=m ######################### #   CONFIG_HAVE_PERF_EVENTS=y CONFIG_PERF_EVENTS=y CONFIG_HAVE_LATENCYTOP_SUPPORT=y CONFIG_LATENCYTOP=y # This option adds support for ASIX AX88xxx # based USB 2.0 10/100 Ethernet adapters. CONFIG_USB_NET_AX8817X=m 


linux-raspberrypi_4.9.bbappend
  #      rpbi.cfg FILESEXTRAPATHS_prepend := "${THISDIR}/files:" SRC_URI += "file://db.txt.patch;patch=1 \ file://rbpi.cfg \ " #  BSP  meta-raspberrypi     # https://github.com/agherzan/meta-raspberrypi/issues/14 #    #   do_kernel_configme   #     arch/    do_kernel_configme_append() { cat ${WORKDIR}/rbpi.cfg >> ${WORKDIR}/defconfig } # CMDLINE for raspberrypi # default CMDLINE = "dwc_otg.lpm_enable=0 console=serial0,115200 # root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" CMDLINE = "quiet dwc_otg.lpm_enable=0 console=serial0,115200 \ root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" 


recipes-mediacentre


 ├── kodi │  ├── kodi │  ├── kodi_17.bbappend │  ├── kodi-dir.inc │  ├── kodi-runner.bb │  ├── kodi-settings.bb │  └── kodi-version.inc └── kodi-plugins ├── files ├── kodi-language-ru_3.0.10.bb ├── kodi-pvr-iptvsimple.bb ├── plugin-video-youtube_5.5.1.bb ├── screensaver-kodi-universe_0.1.2.bb ├── script-berserk-network_0.2.5.bb └── script-module-requests_2.12.4.bb 

حيث:

  1. kodi/
    • kodi — icon,run,settings
    • kodi_17.bbappend — Kodi
    • kodi-dir.inc — Kodi
    • kodi-runner.bb — Kodi
    • kodi-settings.bb — Kodi
    • kodi-version.inc — Kodi

  2. kodi-plugins/

    • files — tar.gz
    • kodi-language-ru_3.0.10.bb — ( Kodi)
    • kodi-pvr-iptvsimple.bb — Kodi pvr-iptvsimple
    • plugin-video-youtube_5.5.1.bb — Kodi «Youtube»
    • screensaver-kodi-universe_0.1.2.bb — screensaver-kodi-universe
    • script-berserk-network_0.2.5.bb —
    • script-module-requests_2.12.4.bb — Youtube


recipes-multimedia


└── ffmpeg
    ├── ffmpeg
    │  ├── 0001-ffmpeg-Call-get_format-to-fix-an-issue-with-MMAL-ren.patch
    │  ├── h264_parser.patch
    │  └── pfcd_hevc_optimisations.patch
    └── ffmpeg_3.1.11.bb


حيث:

  • 0001-ffmpeg-Call-get_format-to-fix-an-issue-with-MMAL-ren.patch — ffmpeg
  • h264_parser.patch — h264
  • pfcd_hevc_optimisations.patch — Raspberry Pi
  • ffmpeg_3.1.11.bb — ffmpeg (, )

FFmpeg - مكتبة مفتوحة المصدر لتشفير / فك تشفير عدد كبير من تنسيقات الفيديو والصوت. يدعم FFmpeg ما يقرب من 400 برنامج ترميز (ffmpeg-codecs)
وأكثر من 300 تنسيق (ffmpeg -formats).

كودي بناء وصفة الجمع


تحتوي الطبقة OpenEmbedded على وصفة منتظمة لبناء Kodi ، لكنها عامة جدًا ، وأود الحصول على إصدار أكثر ثباتًا واختبارًا قليلًا لمنصة Raspberry Pi.

مطورو البرمجيات لديهم شيء مثل تصحيح المنفذ العكسي. يتم تحديث البرنامج باستمرار ، ويتضمن كل إصدار جديد كل من الميزات الجديدة وتصحيح الأخطاء المعروفة. يتيح لك تصحيح النقل العكسي نقل بعض التغييرات في الإصدار الجديد من البرنامج إلى إصدار أقدم ، مما يجعله أكثر استقرارًا. ولكن هذا عمل شاق ومجهد للغاية ، يتم تنفيذه دائمًا بواسطة عدد كبير من المطورين.

في عالم مجتمع OpenSource ، هناك العديد من المشاريع المعروفة باستخدام Kodi ، وأفضلها (في رأيي) هو LibreElec (OpenElec). LibreElec لديه بناء جيد لمنصة Raspberry Pi. هنا لديهم وأنه من الأفضل أن تأخذ التصحيح المنفذ العكسي لكودي. وبالتالي ، يمكنك التخلص من عدد كبير من المشاكل دون حتى معرفة ذلك.

يركز مركز Kodi للوسائط المتعددة على تشغيل سياق "الوسائط" ، وفي رأيي أن المكون الأكثر أهمية هو مزيج Kodi و FFmpeg ، أي تفاعل إصدارات معينة من هذه البرامج ، يمكن ترك مكتبات أخرى من طبقات Yocto و OpenEmbedded.

للتجميع ، أخذت الإصدار الثابت من Kodi 17.6 والإصدار FFmpeg 3.1.11

ملاحظة:
   ,       ,      systemD.         (   (  )).  ,     LibreElec       : #!/bin/bash HASH_VER="934507d922fb011ce46c76566206f2f1f603360b" git clone https://github.com/LibreELEC/LibreELEC.tv.git libreelec cd libreelec git checkout ${HASH_VER}   Kodi,   : projects/RPi2/patches/kodi (. : kodi-001-backport.patch)    FFmpeg,   : packages/multimedia/ffmpeg/patches 


سيكون ملف وصف الإصدار المرفق مثل kodi-version.inc

 FILESEXTRAPATHS_prepend := "${THISDIR}/kodi:" #  Krypton SRCREV = "a9a7a20071bfd759e72e7053cee92e6f5cfb5e48" PV = "17.6+gitr${SRCPV}" 

Yocto OpenEmbedded, — rocko , Kodi 17.3, 17.6, — kodi_17.bbappend

 require kodi-version.inc #     (   17.3) SRC_URI_remove = "file://0013-FTPParse.cpp-use-std-string.patch" #  ,   systemd   SRC_URI_remove = "file://0004-handle-SIGTERM.patch" #      RPI   libreelec SRC_URI_append += "file://kodi-krypton-rpb-backports.patch" #  error adding symbols: DSO missing from command line SRC_URI_append += "file://vchostif.patch" MENU_ICON = "addons/skin.estuary/media/icons/settings" #       ( ) SRC_URI_append += "file://bs-menu.patch file://icon/bs-network.png" do_configure_prepend() { install -m 0644 ${WORKDIR}/icon/bs-network.png ${S}/${MENU_ICON} } #    kodi plugins RRECOMMENDS_${PN}_append = "\ python-xml python-misc python-db \ python-crypt python-threading python-math python-email \ python-io python-netserver python-urllib3 python-datetime" #     Raspberry Pi #  OPENGL    --enable-gles #  kodi     docs/README.linux => libxmu libxinerama # libxtst xdpyinfo #      DISTRO_FEATURES   "x11" #   kodi  RPI1  RPI2,3    --disable-x11 BS_RPI = " --disable-gl --enable-openmax --enable-player=omxplayer \ --with-platform=raspberry-pi --disable-x11" BS_RPI3 = " --disable-gl --enable-openmax --enable-player=omxplayer \ --with-platform=raspberry-pi2 --disable-x11" EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 'raspberrypi', \ '${BS_RPI}', '', d)}" EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 'raspberrypi2', \ '${BS_RPI3}', '', d)}" EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 'raspberrypi3', \ '${BS_RPI3}', '', d)}" #       Kodi   #  ,  USB  microSDHC  ( ) EXTRA_OECONF_append = " --enable-optical-drive" 

"--enable-optical-drive" , Kodi . MediaManager() (xbmc/storage/MediaManager.cpp) / , .

udev / :

 ACTION=="add" SUBSYSTEM=="block" ENV{ID_FS_TYPE}=="vfat" \ KERNEL=="sd[az][0-9]" \ RUN+="/bin/mkdir -p /media/%k", \ RUN+="/bin/mount -o iocharset=utf8,noatime /dev/%k /media/%k" ACTION=="add" SUBSYSTEM=="block" ENV{ID_FS_TYPE}=="ntfs" \ KERNEL=="sd[az][0-9]" \ RUN+="/bin/mkdir -p /media/%k", \ RUN+="/usr/bin/ntfs-3g -o \ iocharset=utf8,noatime,windows_names /dev/%k /media/%k" ACTION=="add" SUBSYSTEM=="block" ENV{ID_FS_TYPE}=="ext2|ext3|ext4" \ KERNEL=="sd[az][0-9]" \ RUN+="/bin/mkdir -p /media/%k", \ RUN+="/bin/mount -o noatime /dev/%k /media/%k" ACTION=="remove" SUBSYSTEM=="block" KERNEL=="sd[az][0-9]" \ RUN+="/bin/umount /media/%k", RUN+="/bin/rmdir /media/%k" 

 :  rmdir     ,       ( Linux    -  )       . 

Kodi


Kodi 17.6, xml . «Settings», :
kodi/addons/skin.estuary/xml/Settings.xml

skin.estuary —

:

<item>
    <label>$LOCALIZE[13279]</label>
    <onclick>RunAddon(script.berserk.network,butnetwork)</onclick>
    <icon>icons/settings/bs-network.png</icon>
</item>


حيث:

التسمية - اسم عنصر القائمة عند
النقر - معالجة حدث الضغط على زر القائمة
(تشغيل المكون الإضافي ، مع تمرير الحجة الأولى
أيقونة السلسلة "butnetwork") - أيقونة عنصر القائمة (المسار إلى صورة png)

تم دمج الوظيفة أعلاه ، بالإضافة إلى توصيل العديد من إضافات Kodi الإضافية ، باستخدام ملف bs-menu.patch

إظهار / إخفاء
  diff -Naur a/addons/skin.estuary/xml/Settings.xml b/addons/skin.estuary/xml/Settings.xml --- a/addons/skin.estuary/xml/Settings.xml 2018-02-01 18:17:45.000000000 +0300 +++ b/addons/skin.estuary/xml/Settings.xml 2018-03-08 12:06:50.000000000 +0300 @@ -134,6 +134,11 @@ <icon>icons/settings/interface.png</icon> </item> <item> + <label>$LOCALIZE[13279]</label> + <onclick>RunAddon(script.berserk.network,butnetwork)</onclick> + <icon>icons/settings/bs-network.png</icon> + </item> + <item> <label>$LOCALIZE[20077]</label> <onclick>ActivateWindow(SkinSettings)</onclick> <icon>icons/settings/skin.png</icon> diff -Naur a/system/addon-manifest.xml b/system/addon-manifest.xml --- a/system/addon-manifest.xml 2018-03-07 15:58:24.000000000 +0300 +++ b/system/addon-manifest.xml 2018-05-14 14:06:58.000000000 +0300 @@ -27,6 +27,7 @@ <addon>resource.uisounds.kodi</addon> <addon>screensaver.xbmc.builtin.black</addon> <addon>screensaver.xbmc.builtin.dim</addon> + <addon>screensaver.kodi.universe</addon> <addon>script.module.pil</addon> <addon>service.xbmc.versioncheck</addon> <addon>skin.estuary</addon> @@ -43,4 +44,8 @@ <addon>xbmc.python</addon> <addon>xbmc.webinterface</addon> <addon optional="true">peripheral.joystick</addon> + <addon>script.berserk.network</addon> + <addon>resource.language.ru_ru</addon> + <addon>script.module.requests</addon> + <addon>plugin.video.youtube</addon> </addons> 


الحد الأقصى لإعدادات التخزين المؤقت للفيديو


في مركز الوسائط المتعددة Kodi ، لزيادة الأداء ، يمكنك تحديد الحد الأقصى لإعدادات التخزين المؤقت:

 <advancedsettings> <cache> <buffermode>1</buffermode> <memorysize>139460608</memorysize> <readfactor>20</readfactor> </cache> </advancedsettings> 

buffermode=1
— ( )

readfactor
— . , , 5 / 2.0, (, , ) 10 /, :

readfactor=20


memorysize =139460608
— 133 , 133*3 .. 400

IPTV


يعد Kodi Media Center أداة قوية جدًا لعرض المحتوى الرقمي.

الوظيفة الرئيسية التي جمعت من أجلها "Media Center" هي وظيفة مشاهدة التلفزيون الرقمي باستخدام IPTV (تلفزيون بروتوكول الإنترنت) أي التلفزيون عبر بروتوكول الإنترنت. مع هذه الوظيفة ، يمكنك مشاهدة التلفزيون الرقمي من مزود الإنترنت الخاص بك.

هذا هو الخيار الأكثر حداثة والأفضل من حيث جودة الصورة ومن حيث الميزات الإضافية ، على سبيل المثال الخدمات المقدمة. على سبيل المثال ، يمكن توفير القنوات التلفزيونية في الأرشيف ، حيث يتوفر تسجيل الفيديو المطلوب لبعض الوقت بعد البث.

لدعم IPTV في Kodi ، هناك العديد من خيارات المكوّن الإضافي ، والتي استقرت عليها على المكوّن الإضافيpvr.iptvsimple

:

    └── kodi-plugins
        └── kodi-pvr-iptvsimple.bb


/ :
Kodi => «» => « » => « PVR» => «PVR IPTV Simple Client»

IPTV Kodi, m3u8, «pvr.iptvsimple» .

Youtube Kodi


, «Kodi», . Kodi , . Kodi . حسنا ، أنت تحصل على هذه النقطة. , .

, Kodi . Kodi. , , .

plugin() Kodi Youtube. Kodi , Youtube , Youtube Kodi .

python, , , , xml :
«system/addon-manifest.xml»

, :
recipes-mediacentre/kodi-plugins/files/plugin.video.youtube.tar.gz

. « recipes-mediacentre»

shell


, « » . , , , shell , :

 ############################################################## #     /etc/network/interfaces: ############################################################## auto eth0 iface eth0 inet manual up /etc/network/eth-manual $IFACE up down /etc/network/eth-manual $IFACE down auto wlan0 iface wlan0 inet manual up /etc/network/wlan $IFACE up down /etc/network/wlan $IFACE down 

لتهيئة واجهات شبكة Ethernet / WLAN بشكل ملائم عبر واجهة المستخدم الرسومية ، يمكنني استخدام مكون Kodi إضافي آخر "script.berserk.network". هذا هو المكون الإضافي Kodi الوحيد الذي اكتشفته ، لكن لهذا كان يجب علي كتابته. إنه مضغوط للغاية وأضيق الحدود ويكتب بلغة الثعبان.

يتم جمع كل من هذه المكونات باستخدام الوصفات:

  • recipes-berserk / bs-net / bs-net_0.1.3.bb
  • وصفات- mediacentre / kodi-plugins / script-berserk-network_0.2.5.bb

في هذه المرحلة ، أود أن أتناول التفاصيل. لذلك كل المرونة في استخدام Yocto تكمن في مجموعات مختلفة من الوصفات أي متصل مجموعة من الوصفات - تمت إضافة أبسط مدير شبكة إلى مجموعة التوزيع ، ومجموعة أخرى متصلة - أضاف مدير الشبكة المفضل لديك على سبيل المثال systemD ، إلخ.

للاتصال تلقائيًا بنقطة وصول WiFi عند بدء تشغيل النظام ، أستخدم قاعدة udev: /etc/udev/rules.d/80-wifi-start.rules

 SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNEL=="wlan*", \ RUN+="/etc/network/wlan-runner $env{INTERFACE} up" SUBSYSTEM=="net", ACTION=="remove", DRIVERS=="?*", KERNEL=="wlan*", \ RUN+="/etc/network/wlan-runner $env{INTERFACE} down" 

يقوم البرنامج النصي wlan-runner بتنفيذ الأوامر ببساطة:
/ etc / network / wlan $ IFACE up
أو
/ etc / network / wlan $ IFACE down

توزيع بناء وصفة


Yocto Project . , ( «inherit»), , ( «include»).

:
poky/meta/clasess/core-image.bbclass

, . :
inherit core-image

, , .

:

 IMAGE_FEATURES += "ssh-server-dropbear splash" 

يوجد أيضًا DISTRO_FEATURES - ميزات التوزيع التي يمكن تحديدها في ملف تكوين الطبقة. هذه وظائف مستوى التوزيع ، وإذا قمت على سبيل المثال بتغيير بعض الميزات (على سبيل المثال ، x11) ، فسيبدأ التجميع اللاحق في إعادة تجميع كل الحزم التي تعتمد على هذا الخيار (قد يستغرق هذا وقتًا طويلاً).

الوصفة الأساسية الأساسية التي يمكنني استخدامها:
poky / meta / recipes-core / images / core-image-minimal.bb

بناء صورة وصفة
  # Project: "Berserk" - build Kodi for the Raspberry Pi platform # license - The MIT License (MIT) DESCRIPTION = "Berserk - the image for the Raspberry PI" LICENSE = "MIT" MD5_SUM = "md5=0835ade698e0bcf8506ecda2f7b4f302" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;${MD5_SUM}" IMAGE_FEATURES += "ssh-server-dropbear splash" #    rootfs    (250000kB=~250Mb) IMAGE_ROOTFS_EXTRA_SPACE_append += "+ 250000" # Base this image on core-image-minimal include recipes-core/images/core-image-minimal.bb # Set default password for 'root' user inherit extrausers ROOTUSERNAME = "root" ROOTPASSWORD = "berserk" EXTRA_USERS_PARAMS = "usermod -P ${ROOTPASSWORD} ${ROOTUSERNAME};" #  ,      SPLASH = "psplash-berserk" BS_DEBUG_TOOLS = "ldd strace ltrace" BS_GLIBC = "glibc-thread-db \ glibc-gconv-utf-16 \ glibc-gconv-utf-32 \ glibc-binary-localedata-en-us \ glibc-binary-localedata-ru-ru \ glibc-charmap-utf-8 \ " BS_BASE = "kernel-modules \ lsb \ pciutils \ parted \ tzdata \ dosfstools \ ntp \ ntpdate \ e2fsprogs-resize2fs \ ntfs-3g \ ntfsprogs \ " BS_WLAN = "kernel-module-rt2800usb \ kernel-module-rt2800lib \ kernel-module-rt2x00lib \ kernel-module-rt2x00usb \ kernel-module-cfg80211 \ kernel-module-nls-utf8 \ kernel-module-ath9k-common \ kernel-module-ath9k-hw \ kernel-module-ath9k-htc \ kernel-module-ctr \ kernel-module-ccm \ kernel-module-arc4 \ " BS_WIFI_SUPPORT = " \ iw \ dhcp-client \ wireless-tools \ wpa-supplicant \ linux-firmware \ " BS_SOFT = "mc \ kodi \ kodi-runner \ kodi-settings \ kodi-language-ru \ kodi-pvr-iptvsimple \ bs-net \ tv-config \ first-run \ script-berserk-network \ screensaver-kodi-universe \ plugin-video-youtube \ script-module-requests \ " # Include modules in rootfs IMAGE_INSTALL += " \ ${BS_BASE} \ ${BS_WLAN} \ ${BS_WIFI_SUPPORT} \ ${BS_GLIBC} \ ${BS_SOFT} \ ${BS_DEBUG_TOOLS} \ " 



, «kernel-modules» ,
defconfig .

, , , BS_WLAN , , , «kernel-modules» , ..


1) Yocto Project Ubuntu:
  sudo apt-get install -y --no-install-suggests --no-install-recommends \ gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential \ chrpath socat cpio python python3 python3-pip python3-pexpect \ xz-utils debianutils iputils-ping python3-git python3-jinja2 \ libegl1-mesa libsdl1.2-dev xterm 


2) Repo:
  mkdir ~/bin curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo 


3) github:
  PATH=${PATH}:~/bin mkdir torvin cd torvin repo init -u https://github.com/berserktv/bs-manifest \ -m raspberry/rocko/torvin-0.2.5.xml repo sync 


4) :
  ./shell.sh bitbake berserk-image 


5) :

torvin/build/tmp/deploy/images/raspberrypi3


:
berserk-image-raspberrypi3.rpi-sdimg

c
c UTC

dd

:
«microSDHC»
.

$ sudo bash
$ cd torvin/build/tmp/deploy/images/raspberrypi3
$ dd if=berserk-image-raspberrypi3.rpi-sdimg of=/dev/sdX bs=1M
$ sync

/dev/sdX:
X a,b,c ..


:
Windows,
Win32 Disk Imager :
:


:
              N      ,      ""          ,    git  (..         "")   :  - Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz  - 8    -  USB-3.0 1T   - 4  05    - 1     - 274.8 M   torvin/build    (cache ,   ,   ,  ,   ,    ..) -   42    torvin/downloads -  9.1  (git    tar.gz )  rootfs   - 550     /lib/firmware - 212  /lib/modules - 53  :        firmware (   )       ,   200  



قدرات OpenSource في السنوات الأخيرة تتزايد فقط.

لكن هذه الفرص ليست صغيرة ، فعلى سبيل المثال ، ليس عليك أن تذهب بعيدًا. من غير المحتمل أن تتوقع "Microsoft" نفسها أن تطرحها تقنية OpenSource من سوق أنظمة تشغيل الأجهزة المحمولة. أعني نظام التشغيل من Google - "Android" ، الذي ألقى بين عشية وضحاها "رائد" أنظمة المحمول على الهامش. وليس من الواضح ما إذا كانت Microsoft ستتمكن من العودة إليها مرة أخرى.

بالطبع ، "غوغل" ، شركة ضخمة لديها موارد مالية غير محدودة تقريبًا ومطورين ممتازين ، ولكن لا يزال ، كما يقولون "بدون كور وليس هنا وهناك".

تصبح أفضل مشاريع مفتوحة المصدر بمرور الوقت عملاً فنيًا (مثل Kodi و Openelec / libre ، إلخ.)

واليوم ، يمكن لأي شخص الانضمام إلى أفضل الممارسات في OpenSource ، إذا جاز التعبير ، دون الزحف إلى خارج Github (a). هذا المقال هو عن ذلك.

لديك الكثير من التجمعات الجيدة والمختلفة بالنسبة لك ، وتذكر أن "عالم إنترنت الأشياء قادم".

Source: https://habr.com/ru/post/ar467443/


All Articles