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
konsolResep Pembuatan Distribusi
Panduan singkat untuk membuat gambar distribusi
Catatan tambahanInstal 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-raspberrypiRepositori layer terletak di:
git.yoctoproject.org/git/meta-raspberrypiKelola 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
Manifestodan untuk sinkronisasi semua versi semua repositori yang benar, Anda hanya perlu menjalankan satu perintah
sinkronisasi repoPasang 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:
repoatau 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
yoctohttps: ββgithub.com / openembedded - repositori OpenEmbedded bernama
oehttps: ββgithub.com / berserktv - repositori GIT tambahan bernama
bsDi 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: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:
- Nama platform perangkat keras tempat perakitan dilakukan - raspberry
- Nama cabang kerja Yocto / OpenEmbedded utama adalah rocko
- Nama kode versi ini adalah torvin (semua versi dari seri 0.2.x)
- 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 / confkonfigurasi awal dan jika
file local.conf dan
bblayers.confada, 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/"
File konfigurasi build / conf / bblayers.conf
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
MultimediaJadi, 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
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:
- FILESEXTRAPATHS_prepend - tambahkan direktori untuk sumber daya
- SRC_URI - tambahkan file header dengan gambar sewenang-wenang
- 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"
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 = yitulah 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 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:
- 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
- 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.11Catatan: , , systemD. ( ( )). , LibreElec :
File deskripsi versi yang disertakan akan menjadi kodi-version.inc tersebut FILESEXTRAPATHS_prepend := "${THISDIR}/kodi:"
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
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 dimana 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 = 20menghilangkan batasan pada kecepatan unduhmemorysize = 139460608- ukuran buffer adalah 133 MB, saat menggunakan 133 * 3 RAM yaitu RAM sekitar 400 MBMenonton 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.iptvsimpleUntuk 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 Lihatlokasi 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:
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 atasatau
/ etc / network / wlan $ IFACE downResep 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.bbclassKelas bertanggung jawab untuk menggambarkan kelompok paket yang dapat Anda sertakan dalam resep tertentu. Untuk melakukan ini, cukup mengindikasikan konstruksi di awal resep:inherit core-imageBahkan 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.bbSaya ingin mengklarifikasi bahwa, sebagai contoh , paket kernel-modul akan menginstalsemua 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."