Pusat Multimedia "Kodi" dan Proyek Yocto


Pengantar Proyek Yocto


Yocto Project adalah proyek Open Source kolaboratif untuk menyederhanakan pengembangan distribusi untuk sistem embedded. Yocto berisi sejumlah besar templat, metadata, dan alat bantu bangun. Di Yocto Project, Anda dapat menghubungkan sejumlah besar lapisan BSP (paket dukungan platform) untuk semua jenis platform perangkat keras.

Tujuan utama artikel ini adalah upaya untuk menunjukkan perakitan paket distribusi tipikal di Proyek Yocto menggunakan contoh dari pusat multimedia terkenal Kodi, versi 17.6 untuk komputer papan tunggal Raspberry Pi 3B.

Jika di suatu tempat jauh di lubuk hati Anda Anda merasa bahwa Anda seorang kolektor, tetapi belum memutuskan apa yang ingin Anda kumpulkan, maka artikel ini adalah untuk Anda. Jika Anda sudah menggunakan Proyek Yocto dalam pekerjaan sehari-hari Anda, maka Anda dapat menggulir artikel ini. Langsung ke bab terakhir dan bersiap-siaplah.

Artikel ini murni praktis dan menunjukkan kemungkinan menggunakan pencapaian Proyek Yocto dan OpenEmbedded untuk membangun pusat multimedia "Kodi". Lapisan Yocto dikelola menggunakan utilitas Repo dari Google. Artikel dalam Dokumen seri ini.

Jadi: ayo pergi.

Konten:


Instal Proyek Yocto di Ubuntu
Mesin pembuat distribusi di Proyek Yocto
Menggunakan OpenEmbedded dengan Proyek Yocto
Paket Dukungan Platform (BSP)
Kelola lapisan Yocto dengan Repo
Pasang Repo
Manifes Build Distribusi
Konten Manifes
Deskripsi Manifes
Struktur b -manifes
Inisialisasi Variabel Poky
Inisialisasi Repo
Sinkronisasi Repo
Membuat Konfigurasi Proyek Yocto
File konfigurasi build / conf / local.conf
File konfigurasi build / conf / bblayers.conf
Lapisan untuk merakit pusat multimedia
Struktur lapisan
Konfigurasi lapisan
Komposisi resep-mengamuk
Komposisi inti resep
Komposisi resep-kernel
Resep komposisi -mediacentre
Komposisi resep-multimedia
Suplemen Resep Kodi Build
Menambahkan Item Baru ke Menu Pengaturan Kodi
Pengaturan buffering maksimum untuk video
Menonton TV melalui IPTV
Menonton Youtube dengan Plugin Kodi
Ekstensi konfigurasi jaringan shell konsol
Resep Pembuatan Distribusi
Panduan singkat untuk membuat gambar distribusi
Catatan tambahan

Instal Proyek Yocto di Ubuntu


Untuk membangun distribusi menggunakan Proyek Yocto di Ubuntu, Anda perlu menginstal paket berikut:

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 

Paket diinstal dengan menggunakan perintah apt-get install dan sudo perintah hak istimewa. Dalam sistem Ubuntu, ini adalah praktik yang tersebar luas ketika perintah sudo digunakan untuk melakukan tindakan administratif (saat membuat pengguna utama sistem, ia secara otomatis terdaftar di grup "sudo").

Anda dapat melihat instruksi instalasi lebih rinci di sini:

Mesin pembuat distribusi di Proyek Yocto


Dalam Proyek Yocto, setiap unit program dijelaskan menggunakan resep perakitan. Bahasa deskripsi resep menyerupai "bash" dengan kemampuan untuk memasukkan potongan kode dalam bahasa python. Anda bisa mendapatkan informasi sintaksis dasar dari manual Proyek Yocto . Satu set resep perakitan, tergantung pada tujuannya, dapat digabungkan menjadi lapisan perakitan yang terpisah.

Lapisan dibagi menjadi perangkat keras - lapisan BSP, lapisan UI (antarmuka pengguna), lapisan Yocto tertentu, serta lapisan yang menerapkan fungsi tertentu:
mis. lapisan dari OpenEmbedded => multimedia, python, perl, ruby, jaringan, systemd, server web, dll.

Menggunakan OpenEmbedded dengan Proyek Yocto


Namun, jika Anda menggunakan Proyek Yocto, maka pastinya Anda akan membutuhkan lapisan dengan fungsionalitas tambahan yaitu. Satu set besar resep untuk semua kesempatan. Dan ada satu set - ini adalah resep dari OpenEmbedded. OpenEmbedded adalah infrastruktur untuk membangun paket untuk Linux tertanam.

OpenEmbedded sepenuhnya kompatibel dengan Proyek Yocto, karena proyek ini diambil sebagai dasar untuk Proyek Yocto. Mungkin itu sebabnya Proyek Yocto memiliki stabilitas yang sedikit lebih baik, dokumentasi yang lebih baik, dan dukungan yang sedikit lebih baik (tetapi pada dasarnya itu adalah OpenEmbedded yang sama).

Paket Dukungan Platform (BSP)


Paket Dukungan Dewan adalah lapisan khusus yang terpisah untuk papan khusus yang mendefinisikan fitur perangkat keras dari platform yaitu: mengimplementasikan hal-hal spesifik yang membedakan satu papan dari yang lain: fitur prosesor, interupsi, pengalamatan, fitur bootloader, fitur adaptor video (GPU), dll.

Artikel ini menggunakan lapisan BSP - meta-raspberrypi
Repositori layer terletak di: git.yoctoproject.org/git/meta-raspberrypi

Kelola lapisan Yocto dengan Repo


Proyek Yocto dapat menggunakan sejumlah besar lapisan dari berbagai pemasok - pengembang peralatan, dan semua ini perlu dikelola entah bagaimana. Bayangkan Anda memiliki selusin papan yang berbeda, dan setiap papan dilengkapi dengan tempat penyimpanan BSP git yang terpisah, dan ini tidak termasuk infrastruktur proyek Yocto itu sendiri, ditambah kemungkinan fungsionalitas tambahan dari OpenEmbedded.

Dalam situasi seperti itu, Anda tidak akan keluar dengan skrip instalasi sederhana yang terpisah. Mau tak mau, harus mencari alat yang bisa melakukannya dengan baik. Bahkan lebih dari bagus. Salah satu alat terbaik dari jenis ini adalah utilitas Google - Repo.

Repo adalah alat utama untuk mengelola repositori GIT ketika membangun sistem operasi Android dengan basis kode yang besar. Repo memungkinkan Anda untuk mengelola selusin, jika tidak seratus repositori git yang terpisah dalam satu proyek, versi yang dapat Anda tentukan dengan hati-hati dalam satu file xml dari Manifesto

dan untuk sinkronisasi semua versi semua repositori yang benar, Anda hanya perlu menjalankan satu perintah

sinkronisasi repo

Pasang Repo


Dengan menggunakan set perintah berikut, Anda dapat menginstal Repo di direktori home ~ / bin Anda
(perintah curl dapat diinstal secara terpisah: 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 


dan di masa depan Anda hanya perlu menggunakan perintah di konsol: repo

atau lebih
jika direktori HOME / bin tidak ditambahkan dengan jalur startup standar secara otomatis
lihat file HOME / .profile

$
$ PATH = $ {PATH}: ~ / bin
$ repo
$

Manifes Build Distribusi


Distribusi dikumpulkan dalam kerangka artikel, saya perlu menyebutnya sesuatu. Biarlah itu nama Torvin . Dengan nama kode Torvin, ini akan berisi distribusi Linux minimalis dengan perakitan satu program tunggal. Ini merujuk pada satu program pengguna aplikasi - Kodi, dan tidak lebih (yang lainnya adalah level sistem). Untuk pusat multimedia, menurut saya ini sudah cukup.

Konten Manifes


File torvin-0.2.5.xml digunakan untuk mengelola lapisan distribusi .

  <?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> 

Deskripsi Manifes


Pada awal manifes, tag jarak jauh menunjukkan dua repositori GIT utama dan satu tambahan:

https: ⁄⁄git.yoctoproject.org / git - repositori Yocto dinamai sebagai yocto
https: ⁄⁄github.com / openembedded - repositori OpenEmbedded bernama oe
https: ⁄⁄github.com / berserktv - repositori GIT tambahan bernama bs

Di bagian selanjutnya dari manifes, menggunakan penamaan yang disingkat, kami bekerja dengan proyek yang berlokasi di repositori ini, tag proyek berisi atribut berikut:

remote - nama repositori bernama remote
revisi - nama cabang atau versi hash
nama - nama proyek dalam repositori yang ditentukan
path - path proyek lokal di sistem file Anda

    <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 

Di badan tag proyek , saya menunjukkan perintah untuk membuat tautan simbolis ke infrastruktur skrip bantu inisialisasi awal dan awal reguler sistem pembangunan Poky yang saya butuhkan

    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 

Struktur b-manifes


 β”œβ”€β”€ COPYING.MIT
 β”œβ”€β”€ raspberry
 β”‚ β”œβ”€β”€ rocko
 β”‚ β”‚ β”œβ”€β”€ conf
 β”‚ β”‚ β”‚ β”œβ”€β”€ bblayers.conf
 β”‚ β”‚ β”‚ └── local.conf
 β”‚ β”‚ └── torvin-0.2.5.xml
 β”‚ └── shell.sh
 β”œβ”€β”€ README.md
 └── pengaturan-lingkungan


Proyek bs-manifest digunakan untuk manajemen konfigurasi yang fleksibel, dengan mempertimbangkan rakitan dari berbagai versi distribusi. Saya memiliki versi ini - 0.2.5

Inisialisasi Variabel Poky


Lingkungan penyiapan skrip inisialisasi diambil dari proyek Komunitas Freescale (dalam lingkungan yocto ini adalah solusi umum). Script bertanggung jawab untuk inisialisasi variabel sistem build Poky, skrip menciptakan struktur direktori di mana ia dibagi dengan sangat baik:

  • membangun - membangun direktori
  • sumber - kode sumber resep perakitan
  • download - direktori untuk mengunduh kode program (database git, arsip tar.gz)

Isi skrip pengaturan-lingkungan dapat dilihat di sini:

Isi skrip Shell.sh
  #!/bin/bash MACHINE='raspberrypi3' source ./setup-environment build echo "you may try 'bitbake core-image-minimal'" bash 


Script root ini berfungsi untuk menginisialisasi variabel konfigurasi lingkungan build dan biasanya dipanggil pada awal sesi.

Inisialisasi Repo


Untuk menginisialisasi repo, Anda harus menjalankan perintah:

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

di mana -u https: ⁄⁄github.com / berserktv / bs-manifest memberitahu GIT jalan menuju proyek manifes

Catatan: Anda juga bisa menentukan -b tree_name
(jika Anda tidak menentukan sakelar -b, maka cabang master diasumsikan (secara default))

di mana path -m raspberry / rocko / torvin-0.2.5.xml ke file konfigurasi menunjukkan yang berikut:

  1. Nama platform perangkat keras tempat perakitan dilakukan - raspberry
  2. Nama cabang kerja Yocto / OpenEmbedded utama adalah rocko
  3. Nama kode versi ini adalah torvin (semua versi dari seri 0.2.x)
  4. Nomor versi digital yang sedang dirakit adalah 0.2.5

Sinkronisasi Repo


untuk bootstrap atau sinkronisasi berikutnya, jalankan saja perintah:

 repo sync 

yang akan mengambil semua versi terbaru dari proyek GIT yang ditentukan dalam file manifes (cabang biasanya ditunjukkan), jika Anda memiliki hash commit atau nama tag dalam atribut revisi, maka versi untuk repositori git ini tidak akan berubah. Nama tag dapat ditentukan seperti ini: revisi = "ref / tag / v0.2.5"

Membuat Konfigurasi Proyek Yocto


Setelah perintah sinkronisasi repo dijalankan, Anda dapat mulai membuat konfigurasi utama Proyek Yocto:

 ./shell.sh 

setelah skrip selesai, direktori build / conf akan dibuat:
dengan dua file utama:

  • local.conf - variabel kontrol rakitan:
    nama platform, jenis distribusi dan paket pembangunan, dll.
  • bblayers.conf - konfigurasi lapisan yang terhubung dari Proyek Yocto

secara default, skrip setup-environment mencari source / base / conf
konfigurasi awal dan jika file local.conf dan bblayers.conf
ada, mereka disalin ke build / conf
(lihat variabel TEMPLATES di lingkungan pengaturan)

yaitu file diambil dari sumber / bs-manifest / raspberry / rocko / conf
lihat membuat symlink ke basis

File konfigurasi build / conf / local.conf


Tampilkan / Sembunyikan
  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" 


File konfigurasi build / conf / bblayers.conf


Tampilkan / Sembunyikan
  # 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 \ " 



variabel utama file local.conf - yang perlu Anda perhatikan:

  • MESIN - nama platform tempat perakitan dilakukan
  • DISTRO - nama kategori distribusi
  • PACKAGE_CLASSES - format paket untuk menginstal perangkat lunak
  • LICENSE_FLAGS_WHITELIST - penggunaan lisensi tambahan

pengaturan khusus untuk keluarga papan Raspberry Pi

  • GPU_MEM = "128" - jumlah memori video untuk adaptor video GPU (dialokasikan dari RAM)
  • GPU_MEM_256 = "112" - hanya untuk papan dengan ukuran RAM total = 256MB
  • GPU_MEM_512 = "160" - hanya untuk papan dengan ukuran RAM total = 512MB
  • GPU_MEM_1024 = "320" - hal yang sama hanya untuk papan dengan ukuran RAM total = 1024MB

catatan:
misalnya, jika Anda hanya menyisakan variabel GPU_MEM = "128",
kemudian untuk semua papan RPI, RPI2, RPI3
terlepas dari jumlah RAM nyata
di papan akan selalu dialokasikan untuk GPU - 128Mb
(dan total ukuran RAM berkurang dengan nilai ini)

jika semua variabel ditentukan, arahan GPU_MEM_256, GPU_MEM_512, GPU_MEM_1024 lebih diprioritaskan.

Untuk perakitan Pusat Multimedia, selain lapisan Yocto biasa, lihat file bblayers.conf

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

Saya menghubungkan empat lapisan dengan fungsionalitas tambahan dari OpenEmbedded.

Kodi Multimedia Center - adalah program kompleks yang menggunakan sejumlah besar perpustakaan eksternal dan Anda perlu membangun setiap perpustakaan menggunakan resep membangun, jadi jika mungkin saya akan menggunakan semua resep dari OpenEmbedded dalam kategori Multimedia

Jadi, saya memiliki lapisan Multimedia yang terhubung dan lapisan di mana itu tergantung

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

kemudian lapisan OpenEmbedded lain terhubung untuk bekerja dengan sistem file

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

selanjutnya menghubungkan lapisan BSP utama untuk platform Raspberry Pi

 ${BSPDIR}/sources/meta-raspberrypi \ 

Nah, pada akhirnya, lapisan tambahan terhubung, yang bertanggung jawab untuk merakit gambar distribusi dengan fungsi "Pusat Multimedia"

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

Lapisan untuk merakit pusat multimedia


Menurut pendapat saya, Proyek Yocto adalah gabungan industri untuk membuat distribusi tertanam. Tetapi jika Anda pernah bekerja dengan sistem build Buildroot, maka Yocto mungkin tampak rumit bagi Anda. Ini menggunakan sejumlah besar ruang hard disk kosong. Untuk operasi normal, Yocto membutuhkan sekitar 80 - 100 GB ruang kosong, dan ini biasanya mempertimbangkan perakitan hanya untuk satu platform.

Yocto berupaya dengan tujuan utamanya - mendukung sebanyak mungkin platform perangkat keras yang berbeda, dan ini membutuhkan mekanisme yang paling fleksibel untuk beralih rakitan. Dan mekanisme ini membutuhkan waktu dan tempat. Membangun distribusi di Yocto bukanlah proses yang cepat.

Jadi, semua fungsi untuk merakit "Pusat Multimedia" yang saya miliki dengan layer terpisah:

 https://github/berserktv/berserk 

(Judul diambil dari buku favorit saya, The Hammer and the Cross, oleh Harry Harrison.)
(Torvin juga tokoh dalam buku ini.)

Untuk membuat fungsionalitas yang saya butuhkan, saya akan menggunakan apa yang disebut pengaya untuk resep, yang terletak di file dengan ekstensi .bbappend
dalam file .bbappend, Anda dapat menambahkan panggilan perintah Anda sendiri untuk metode resep membangun biasa, misalnya, ke do_configure, do_compile, metode do_install, dll.

Struktur lapisan


 β”œβ”€β”€ COPYING.MIT
 β”œβ”€β”€ meta-mengamuk
 β”‚ β”œβ”€β”€ conf
 β”‚ β”‚ └── layer.conf
 β”‚ β”œβ”€β”€ resep-mengamuk
 β”‚ β”‚ β”œβ”€β”€ bs-net
 β”‚ β”‚ β”œβ”€β”€ dijalankan pertama kali
 β”‚ β”‚ β”œβ”€β”€ gambar
 β”‚ β”‚ └── tv
 β”‚ β”œβ”€β”€ resep-inti
 β”‚ β”‚ β”œβ”€β”€ init-ifupdown
 β”‚ β”‚ └── psplash
 β”‚ β”œβ”€β”€ resep-kernel
 β”‚ β”‚ └── linux
 β”‚ β”œβ”€β”€ resep-mediacentre
 β”‚ β”‚ β”œβ”€β”€ kodi
 β”‚ β”‚ └── plugin kodi
 β”‚ └── resep-multimedia
 β”‚ └── ffmpeg
 β”œβ”€β”€ README.md
 └── changelog.txt


Komposisi lapisan:

  • konfigurasi lapisan
  • resep-mengamuk - resep membangun distribusi, tv, jaringan dan resep peluncuran pertama
  • resep-inti - resep dasar, khususnya modifikasi resep start-up
  • resep-kernel - resep membangun kernel Linux
  • resep-mediacentre - resep untuk membangun Kodi dan plugin-nya
  • resep-multimedia - resep multimedia, perakitan ffmpeg

konfigurasi lapisan


termasuk file 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%" 


File tersebut berisi indikasi versi perpustakaan ffmpeg, nomor versi kernel linux, serta jumlah konsol virtual (tty), dan termasuk fitur kit distribusi - wifi x11
DISTRO_FEATURES_append + = "wifi x11"

PREFERRED_VERSION_ffmpeg = "3.1.11"
SYSVINIT_ENABLED_GETTYS = "1"

PREFERRED_VERSION_linux-raspberrypi? = "4,9%"

komposisi resep-mengamuk


 β”œβ”€β”€ bs-net
 β”‚ └── bs-net_0.1.3.bb
 β”œβ”€β”€ pertama kali dijalankan
 β”‚ β”œβ”€β”€ file
 β”‚ β”‚ └── first-run.sh
 β”‚ └── first-run.bb
 β”œβ”€β”€ gambar
 β”‚ └── berserk-image.bb
 └── tv
     β”œβ”€β”€ file
     β”‚ └── berserk.m3u8
     β”œβ”€β”€ tv-config.bb
     └── tv-dir.inc


dimana:

  • bs-net_0.1.3.bb - resep untuk membangun ekstensi shell untuk antarmuka WLAN / Ethernet
  • first-run.bb - resep untuk menjalankan pertama, partisi disk tambahan
  • first-run.sh - skrip shell dari jalankan pertama (jalankan di jalankan level S)
  • berserk-image.bb - resep untuk membangun gambar distribusi
  • tv-config.bb - resep untuk mengkonfigurasi saluran TV menggunakan IPTV
  • berserk.m3u8 - konfigurasi saluran televisi publik (format m3u8)

komposisi resep-inti


 β”œβ”€β”€ init-ifupdown
 β”‚ β”œβ”€β”€ file
 β”‚ β”‚ └── antarmuka
 β”‚ └── init-ifupdown_1.0.bbappend
 └── psplash
     β”œβ”€β”€ file
     β”‚ └── psplash-berserk-img.h
     └── psplash_git.bbappend


dimana:

  • interface - file dengan pengaturan jaringan saat ini
  • init-ifupdown_1.0.bbappend - ekstensi untuk resep konfigurasi jaringan
  • psplash-berserk-img.h - gambar screen saver startup
    file header diperoleh dengan menggunakan utilitas gdk-pixbuf-csource
  • psplash_git.bbappend - ekstensi resep untuk memulai screen saver startup

Konfigurasi jaringan pada perangkat target ada dalam file:

 /etc/network/interfaces 

Setelah menambahkan ekstensi resep init-ifupdown, saya mengganti file konfigurasi biasa dengan saya sendiri, dan mengubah urutan (prioritas) dari skrip yang dijalankan untuk tingkat eksekusi

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

Saat ini, hampir semua distribusi Linux modern menyertakan layar pembuka. Biasanya, screen saver startup menunjukkan status saat ini dari unduhan yaitu Indikator waktu yang berlalu sejak sistem dimulai. Dalam hal ini, Yocto tidak terkecuali dan Anda dapat mengubah gambar screen saver start-up standar menjadi gambar sewenang-wenang.

Untuk melakukan ini, Anda harus:

  1. FILESEXTRAPATHS_prepend - tambahkan direktori untuk sumber daya
  2. SRC_URI - tambahkan file header dengan gambar sewenang-wenang
  3. SPLASH_IMAGES - ubah variabel kontrol paket

dan selanjutnya dalam resep gambar "berserk-image.bb" perlu menambahkan splash start-up image sebagai fitur gambar

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

komposisi resep-kernel


 └── linux
     β”œβ”€β”€ file
     β”‚ β”œβ”€β”€ db.txt.patch
     β”‚ └── rbpi.cfg
     └── linux-raspberrypi_4.9.bbappend


dimana:

  • db.txt.patch - tambalan dengan basis Domain Regulatory (digunakan untuk WiFi)
  • rbpi.cfg - Fragmen konfigurasi kernel Linux
  • linux-raspberrypi_4.9.bbappend - ekstensi dari 4,9 kernel build resep untuk Raspberry Pi

Perangkat Wi-Fi beroperasi pada frekuensi tertentu dan bagi mereka ada yang namanya domain pengaturan - ini adalah parameter yang menunjukkan negara tempat perangkat ini seharusnya bekerja.

Kernel Linux memiliki basis data pengiring di mana frekuensi yang diizinkan dan daya yang diizinkan untuknya terdaftar untuk setiap negara.

Dalam kasus yang paling sederhana, database ini dapat langsung dimasukkan ke dalam kernel secara statis dengan menetapkan parameter:
CONFIG_CFG80211_INTERNAL_REGDB = y
itulah yang saya lakukan dengan menghubungkan tambalan dengan basis data db.txt.patch ini

Dan satu hal lagi: di Yocto ada yang namanya fragmen konfigurasi kernel. Biasanya, sebuah fragmen konfigurasi, sebuah file dengan ekstensi cfg, hanya berisi parameter-parameter kernel yang jelas Anda perlukan untuk keperluan tertentu. Dan bagian konfigurasi ini ditambahkan ke parameter default yang sudah ada dalam resep saat membangun kernel.

Selain resep bbappend, Anda juga dapat mengubah parameter yang diteruskan ke kernel saat startup:

yaitu timpa variabel
CMDLINE lihat file linux-raspberrypi_4.9.bbappend

konten 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 

dimana:

  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


dimana:

  • 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 - pustaka OpenSource untuk encoding / decoding sejumlah besar format video dan audio. FFmpeg mendukung hampir 400 codec (ffmpeg -codecs)
dan lebih dari 300 format (ffmpeg -formats).

Penambahan Resep Kodi Build


Lapisan OpenEmbedded berisi resep biasa untuk membangun Kodi, tetapi ini cukup umum, dan saya ingin mendapatkan versi yang sedikit lebih stabil dan teruji untuk platform Raspberry Pi.

Pengembang perangkat lunak memiliki sesuatu yang disebut patch port terbalik. Perangkat lunak ini terus diperbarui, dan setiap versi baru mencakup fitur baru dan koreksi kesalahan yang diketahui. Patch porting terbalik memungkinkan Anda untuk mentransfer beberapa perubahan dalam versi baru dari program ke yang lebih lama, sehingga membuatnya lebih stabil. Tapi ini adalah pekerjaan yang sangat sulit dan melelahkan, yang selalu dilakukan oleh sejumlah besar pengembang.

Di dunia komunitas OpenSource, ada beberapa proyek terkenal menggunakan Kodi, yang terbaik (menurut saya) adalah LibreElec (OpenElec). LibreElec memiliki build yang bagus untuk platform Raspberry Pi. Di sini mereka memilikinya dan yang terbaik adalah mengambil patch port terbalik untuk Kodi. Dengan demikian, Anda dapat menyingkirkan sejumlah besar masalah tanpa mempelajarinya.

Pusat multimedia Kodi berfokus pada memainkan konteks "Media", dan menurut saya komponen yang paling penting adalah kombinasi dari Kodi dan FFmpeg, mis. interaksi versi tertentu dari program-program ini, perpustakaan lain dapat dibiarkan dari lapisan Yocto dan OpenEmbedded.

Untuk perakitan, saya mengambil versi stabil Kodi 17.6 dan versi FFmpeg 3.1.11

Catatan:
   ,       ,      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 


File deskripsi versi yang disertakan akan menjadi kodi-version.inc tersebut

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

Cabang Yocto dan OpenEmbedded yang saya pertimbangkan - rocko , berisi Kodi versi 17.3, dan untuk meningkatkan ke versi 17.6, cukup tambahkan sedikit tambahan pada resep - 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" 

Opsi build "--enable-optical-drive" memungkinkan Anda untuk menghubungkan mekanisme notifikasi praktis yang digunakan Kodi saat menghubungkan disk optik. Dalam hal ini, modul MediaManager (a) (xbmc / storage / MediaManager.cpp) memonitor koneksi / pemutusan partisi disk baru dan menampilkan pesan sembul tentangnya.

Contoh udev untuk menghubungkan / memutuskan drive:

 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    -  )       . 

Menambahkan Item Baru ke Menu Pengaturan Kodi


Dalam Kodi 17.6, file konfigurasi xml bertanggung jawab untuk menampilkan item menu. Untuk menambahkan satu item lagi di bawah menu "Pengaturan", cukup sesuaikan file:
kodi / addons / skin.estuary / xml / Settings.xml di

mana skin.estuary adalah tema desain menu default,

deskripsi item terlihat seperti ini:

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


dimana:

label β€”
onclick β€”
( , Β«butnetworkΒ»)
icon β€” ( 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
- permintaan buffer untuk semua sistem file (termasuk lokal)

readfactor
- menyesuaikan kecepatan unduhan berdasarkan bitrate video rata-rata. Jadi, misalnya, jika Anda memutar video dengan kecepatan transfer data rata-rata 5 Mbit / dt dan mengatur rasio pembacaan buffer menjadi 2,0, ini akan membatasi kecepatan unduhan (dan karenanya laju pengisian cache) menjadi sekitar 10 Mbit / dt, dengan demikian:

readfactor = 20
menghilangkan batasan pada kecepatan unduh

memorysize = 139460608
- ukuran buffer adalah 133 MB, saat menggunakan 133 * 3 RAM yaitu RAM sekitar 400 MB

Menonton TV melalui IPTV


Kodi Media Center adalah alat yang sangat kuat untuk melihat konten digital.

Fungsi utama yang saya kumpulkan "Media Center" adalah fungsi menonton televisi digital menggunakan IPTV (Internet Protocol Television) yaitu televisi melalui protokol internet. Dengan fungsi ini, Anda dapat menonton televisi digital dari penyedia Internet Anda.

Ini adalah opsi paling modern dan optimal baik dalam hal kualitas gambar dan dalam hal fitur tambahan yaitu layanan yang diberikan. Misalnya, saluran televisi dapat disediakan dalam arsip, di mana rekaman video yang diinginkan tersedia untuk beberapa waktu setelah siaran.

Untuk mendukung IPTV di Kodi, ada beberapa opsi plugin, yang saya tentukan pada pluginpvr.iptvsimple

Untuk membuat plugin, gunakan resep:

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


Plug-in terhubung / dikonfigurasi melalui:
Menu utama Kodi => β€œAdd-ons” => β€œAdd-ons saya” => β€œKlien PVR” => β€œPVR IPTV Simple Client”

Untuk memeriksa pengoperasian televisi IPTV sebagai bagian dari Kodi, saya mengambil beberapa saluran berita publik dan menambahkannya ke daftar dalam format m3u8, dan juga menyalakan peluncuran otomatis "pvr.iptvsimple" di awal pusat media.

Menonton Youtube dengan Plugin Kodi


Programmer yang mengembangkan Kodi memberikan fleksibilitas untuk memperluas fungsinya. Ini dilakukan agar setiap penggila, jika diinginkan, dapat menambah Kodi apa yang benar-benar dia butuhkan. Dan plugin ini untuk Kodi adalah kegelapan. Nah, Anda mengerti intinya.Ada begitu banyak dari mereka yang layak mendapat deskripsi dalam artikel terpisah.

Plugin diinstal dengan sangat sederhana, cukup sambungkan Kodi ke Internet dan tekan beberapa tombol di menu. Anda dapat membacanya di salah satu forum yang didedikasikan untuk Kodi. Tapi rakitannya, ada rakitannya, dan saya akan memasukkan satu lagi plugin dalam kit distribusi sebagai contoh.

Plugin yang paling menarik dan tersebar luas (ohm) untuk Kodi menurut saya adalah plugin tampilan Youtube. Kodi adalah pusat multimedia, dan Youtube adalah repositori terbesar dari konten yang sangat multimedia ini, sehingga plug-in Youtube untuk Kodi hampir wajib.

Plugin ini ditulis dengan python, dan ini adalah mekanisme plug-in biasa, Anda tidak perlu mengkompilasi apa pun, cukup salin plug-in yang telah selesai ke direktori root dengan plug-in, dan tentukan nama plug-in dalam file manifes xml:
"System / addon-manifest.xml"

Plugin ini diambil dari repositori resmi, dan kode sumbernya disertakan dalam arsip:
resep-mediacentre / kodi-plugins / file / plugin.video.youtube.tar.gz Lihat

lokasi resep perakitan plugin di bab "komposisi resep-mediacentre"

Ekstensi konfigurasi jaringan shell konsol


Karena kit distribusi yang dirangkai dalam kerangka artikel ini adalah sebuah demo, persyaratan untuk mengatur "Antarmuka Jaringan" untuk itu sangat minim. Saya tidak ingin menyeret manajer jaringan yang berat untuk ini, yang sangat tidak bisa dipahami oleh saya dan sangat besar, dan karena itu saya menulis dua skrip shell yang melengkapi konfigurasi mekanisme konfigurasi reguler:

 ############################################################## #     /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 

Untuk dengan mudah mengkonfigurasi antarmuka jaringan Ethernet / WLAN melalui GUI, saya menggunakan plugin Kodi kecil lainnya "script.berserk.network". Ini hampir satu-satunya plugin Kodi yang saya temukan, tetapi untuk ini saya harus menulisnya. Ini sangat kompak dan minimalis dan ditulis dalam bahasa python.

Kedua komponen ini dikumpulkan menggunakan resep:

  • resep-mengamuk / bs-net / bs-net_0.1.3.bb
  • resep-mediacentre / kodi-plugins / script-berserk-network_0.2.5.bb

Pada titik ini, saya ingin membahas detailnya. Jadi semua fleksibilitas menggunakan Yocto terletak pada set resep yang berbeda, yaitu terhubung satu set resep - manajer jaringan paling sederhana telah ditambahkan ke kit distribusi, terhubung satu set resep - menambahkan manajer jaringan favorit Anda menggunakan misalnya systemD, dll.

Untuk terhubung secara otomatis ke titik akses WiFi ketika sistem dimulai, saya menggunakan aturan 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" 

Script wlan-runner hanya menjalankan perintah:
/ etc / network / wlan $ IFACE ke atas
atau
/ etc / network / wlan $ IFACE down

Resep Pembuatan Distribusi


Proyek Yocto memiliki mekanisme penggunaan kembali. Ada beberapa kelas tempat Anda mewarisi (direktif "inherit"), dan ada resep dasar yang dapat Anda hubungkan (direktif "termasuk").

Saya akan menunjukkan pewarisan menggunakan contoh kelas:
poky / meta / clasess / core-image.bbclass

Kelas bertanggung jawab untuk menggambarkan kelompok paket yang dapat Anda sertakan dalam resep tertentu. Untuk melakukan ini, cukup mengindikasikan konstruksi di awal resep:
inherit core-image

Bahkan dalam teks kelas ini Anda dapat melihat fitur-fitur gambar, setiap fitur bertanggung jawab untuk sekelompok fungsi yang termasuk dalam gambar, dan masing-masing kelompok pada akhirnya menggambarkan sekumpulan program atau pustaka yang diinstal.

Fitur gambar ditunjukkan sebagai berikut:

 IMAGE_FEATURES += "ssh-server-dropbear splash" 

Ada juga DISTRO_FEATURES - fitur distribusi yang dapat ditentukan dalam file konfigurasi layer. Ini adalah fungsi level distribusi, dan jika misalnya Anda mengubah beberapa fitur (misalnya x11), maka unit selanjutnya akan mulai merakit kembali semua paket yang bergantung pada opsi ini (ini bisa memakan waktu yang cukup lama).

Resep dasar dasar yang saya gunakan adalah:
poky / meta / recipes-core / images / core-image-minimal.bb

resep membangun gambar
  # 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} \ " 



Saya ingin mengklarifikasi bahwa, sebagai contoh , paket kernel-modul akan menginstal
semua modul kernel yang ditentukan dalam file defconfig ke dalam image distribusi.

Tetapi jika Anda sangat menyesuaikan sesuatu, maka tentu saja Anda bahkan mungkin tidak memerlukan semua modul kernel, dalam hal ini nyaman untuk menambahkan setiap modul dengan nama, seperti yang ditunjukkan dalam variabel BS_WLAN , itu seperti lembar contekan, tentukan hanya apa yang Anda butuhkan dan setelah memeriksa paket. "Kernel-modules" hapus, periksa, dll.

Panduan singkat untuk membuat gambar distribusi


1) Instal dependensi Yocto Project di 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) Unduh dan pasang Repo:
  mkdir ~/bin curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo 


3) Unduh proyek dari 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) Bangun proyek:
  ./shell.sh bitbake berserk-image 


5) Tulis gambar distribusi ke kartu memori:

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 :
:


Catatan:
              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  


Catatan tambahan


Kemampuan OpenSource dalam beberapa tahun terakhir hanya meningkat.

Tetapi peluang ini tidak kecil, untuk contoh Anda bahkan tidak perlu melangkah jauh. Tidak mungkin bahwa "Microsoft" yang sama diharapkan bahwa teknologi OpenSource akan membuangnya dari pasar sistem operasi seluler. Maksudku OS dari Google - "Android", yang semalam melemparkan "Pioneer" sistem seluler di sela-sela. Dan tidak jelas apakah Microsoft akan dapat kembali ke sana lagi.

Tentu saja, "Google", sebuah perusahaan besar dengan keuangan hampir tak terbatas dan pengembang yang sangat baik, tetapi tetap, seperti yang mereka katakan "tanpa Core dan tidak di sana-sini."

Proyek OpenSource terbaik dari waktu ke waktu menjadi karya seni (mis. Kodi, Openelec / libre, dll.)

Dan hari ini, siapa pun dapat bergabung dengan praktik terbaik di OpenSource, jadi untuk berbicara tanpa keluar dari Github (a). Artikel ini tentang itu.

Miliki banyak majelis yang baik dan berbeda untuk Anda, dan ingat "dunia internet akan datang."

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


All Articles