GNU/Linux >> Belajar Linux >  >> Linux

4 alat untuk membangun sistem Linux tertanam

Linux sedang digunakan ke berbagai perangkat yang jauh lebih luas daripada yang diantisipasi Linus Torvalds ketika dia mengerjakannya di kamar asramanya. Berbagai arsitektur chip yang didukung sangat menakjubkan dan telah membawa Linux pada perangkat besar dan kecil; dari mainframe IBM yang besar hingga perangkat kecil yang tidak lebih besar dari port koneksinya dan semua yang ada di antaranya. Ini digunakan di pusat data perusahaan besar, perangkat infrastruktur internet, dan sistem pengembangan pribadi. Ini juga mendukung elektronik konsumen, ponsel, dan banyak perangkat Internet of Things.

Saat membangun perangkat lunak Linux untuk desktop dan perangkat kelas perusahaan, pengembang biasanya menggunakan distribusi desktop seperti Ubuntu pada mesin build mereka untuk memiliki lingkungan yang sedekat mungkin dengan lingkungan tempat perangkat lunak akan digunakan. Alat seperti VirtualBox dan Docker memungkinkan penyelarasan yang lebih baik antara lingkungan pengembangan, pengujian, dan produksi.

Apa itu sistem tertanam?

Wikipedia mendefinisikan sistem tertanam sebagai:"Sebuah sistem komputer dengan fungsi khusus dalam sistem mekanik atau listrik yang lebih besar, seringkali dengan kendala komputasi waktu nyata."

Saya merasa cukup sederhana untuk mengatakan bahwa sistem tertanam adalah komputer yang kebanyakan orang tidak menganggapnya sebagai komputer. Peran utamanya adalah berfungsi sebagai semacam alat, dan tidak dianggap sebagai platform komputasi tujuan umum.

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Lingkungan pengembangan dalam pemrograman sistem tertanam biasanya sangat berbeda dari lingkungan pengujian dan produksi. Mereka mungkin menggunakan arsitektur chip yang berbeda, tumpukan perangkat lunak, dan bahkan sistem operasi. Alur kerja pengembangan sangat berbeda untuk pengembang tertanam vs. pengembang desktop dan web. Biasanya, output build akan terdiri dari keseluruhan image perangkat lunak untuk perangkat target, termasuk kernel, driver perangkat, pustaka, dan perangkat lunak aplikasi (dan terkadang bootloader).

Pada artikel ini, saya akan menyajikan survei dari empat opsi yang umum tersedia untuk membangun sistem Linux tertanam. Saya akan memberikan gambaran tentang bagaimana rasanya bekerja dengan masing-masing dan memberikan informasi yang cukup untuk membantu pembaca memutuskan alat mana yang akan digunakan untuk desain mereka. Saya tidak akan mengajari Anda cara menggunakannya; ada banyak sumber belajar online yang mendalam setelah Anda mempersempit pilihan Anda. Tidak ada opsi yang tepat untuk semua kasus penggunaan, dan saya berharap dapat menyajikan detail yang cukup untuk mengarahkan keputusan Anda.

Yocto

Proyek Yocto didefinisikan sebagai "proyek kolaborasi sumber terbuka yang menyediakan template, alat, dan metode untuk membantu Anda membuat sistem berbasis Linux khusus untuk produk yang disematkan, apa pun arsitektur perangkat kerasnya". Ini adalah kumpulan resep, nilai konfigurasi, dan dependensi yang digunakan untuk membuat image runtime Linux khusus yang disesuaikan dengan kebutuhan spesifik Anda.

Pengungkapan penuh:sebagian besar pekerjaan saya di Linux tertanam berfokus pada proyek Yocto, dan pengetahuan serta bias saya terhadap sistem ini kemungkinan besar akan terlihat.

Yocto menggunakan Openembedded sebagai sistem build-nya. Secara teknis keduanya adalah proyek yang terpisah; dalam praktiknya, bagaimanapun, pengguna tidak perlu memahami perbedaannya, dan nama proyek sering digunakan secara bergantian.

Keluaran dari pembangunan proyek Yocto secara umum terdiri dari tiga komponen:

  • Biner target waktu proses: Ini termasuk bootloader, kernel, modul kernel, image sistem file root. dan file tambahan lainnya yang diperlukan untuk menyebarkan Linux ke platform target.
  • Umpan paket: Ini adalah kumpulan paket perangkat lunak yang tersedia untuk diinstal pada target Anda. Anda dapat memilih format paket (misalnya, deb, rpm, ipk) berdasarkan kebutuhan Anda. Beberapa di antaranya mungkin sudah diinstal sebelumnya di binari runtime target, namun dimungkinkan untuk membangun paket untuk instalasi ke dalam sistem yang diterapkan.
  • SDK Target: Ini adalah kumpulan perpustakaan dan file header yang mewakili perangkat lunak yang diinstal pada target Anda. Mereka digunakan oleh pengembang aplikasi saat membangun kode mereka untuk memastikan mereka terhubung dengan perpustakaan yang sesuai

Keuntungan

Proyek Yocto banyak digunakan di industri dan mendapat dukungan dari banyak perusahaan berpengaruh. Selain itu, ia memiliki komunitas pengembang dan ekosistem yang besar dan bersemangat yang berkontribusi padanya. Kombinasi antara penggemar open source dan sponsor perusahaan membantu mendorong proyek Yocto.

Ada banyak pilihan untuk mendapatkan dukungan dengan Yocto. Ada buku dan materi pelatihan lainnya jika Anda ingin melakukannya sendiri. Banyak insinyur dengan pengalaman di Yocto tersedia jika Anda ingin menyewa keahlian. Dan banyak organisasi komersial menyediakan produk turnkey Yocto atau implementasi dan penyesuaian berbasis layanan untuk desain Anda.

Proyek Yocto mudah diperluas melalui lapisan, yang dapat diterbitkan secara independen untuk menambahkan fungsionalitas tambahan, untuk menargetkan platform yang tidak tersedia dalam rilis proyek, atau untuk menyimpan kustomisasi yang unik untuk sistem Anda. Lapisan dapat ditambahkan ke konfigurasi Anda untuk menambahkan fitur unik yang tidak secara khusus disertakan dalam rilis stok; misalnya, lapisan "meta-browser" berisi resep untuk browser web, yang dapat dengan mudah dibuat untuk sistem Anda. Karena mereka dipelihara secara independen, lapisan dapat berada pada jadwal rilis yang berbeda (disesuaikan dengan kecepatan pengembangan lapisan) dari rilis Yocto standar.

Yocto bisa dibilang memiliki dukungan perangkat terluas dari salah satu opsi yang dibahas dalam artikel ini. Karena dukungan dari banyak produsen semikonduktor dan papan, kemungkinan Yocto akan mendukung platform target apa pun yang Anda pilih. Rilis Yocto langsung hanya mendukung beberapa papan (untuk memungkinkan pengujian dan siklus rilis yang tepat), namun, model kerja standar adalah menggunakan lapisan dukungan papan eksternal.

Terakhir, Yocto sangat fleksibel dan dapat disesuaikan. Kustomisasi untuk aplikasi spesifik Anda dapat disimpan dalam lapisan untuk enkapsulasi dan isolasi. Kustomisasi unik untuk lapisan fitur umumnya disimpan sebagai bagian dari lapisan itu sendiri, yang memungkinkan pengaturan yang sama diterapkan secara bersamaan ke beberapa konfigurasi sistem. Yocto juga menyediakan prioritas lapisan yang terdefinisi dengan baik dan kemampuan menimpa. Ini memungkinkan Anda untuk menentukan urutan penerapan lapisan dan pencarian metadata. Ini juga memungkinkan Anda untuk mengesampingkan pengaturan berlapis-lapis dengan prioritas lebih tinggi; misalnya, banyak penyesuaian pada resep yang ada akan ditambahkan di lapisan pribadi Anda, dengan urutan yang dikontrol secara tepat oleh prioritas.

Kekurangan

Kerugian terbesar dengan proyek Yocto adalah kurva belajar. Dibutuhkan waktu dan upaya yang signifikan untuk mempelajari sistem dan benar-benar memahaminya. Bergantung pada kebutuhan Anda, ini mungkin merupakan investasi yang terlalu besar dalam teknologi dan kompetensi yang tidak penting bagi aplikasi Anda. Dalam kasus seperti itu, bekerja dengan salah satu vendor komersial mungkin merupakan pilihan yang baik.

Waktu pembangunan dan sumber daya pengembangan cukup tinggi untuk pembangunan proyek Yocto. Jumlah paket yang perlu dibangun, termasuk toolchain, kernel, dan semua komponen runtime target, adalah signifikan. Workstation pengembangan untuk pengembang Yocto cenderung sistem yang besar. Menggunakan notebook kompak tidak dianjurkan. Ini dapat dikurangi dengan menggunakan server build berbasis cloud yang tersedia dari banyak penyedia. Selain itu, Yocto memiliki mekanisme caching bawaan yang memungkinkannya untuk menggunakan kembali komponen yang dibuat sebelumnya ketika menentukan bahwa parameter untuk membangun paket tertentu tidak berubah.

Rekomendasi

Menggunakan proyek Yocto untuk desain Linux tertanam Anda berikutnya adalah pilihan yang kuat. Dari opsi yang disajikan di sini, ini adalah yang paling dapat diterapkan secara luas terlepas dari kasus penggunaan target Anda. Dukungan industri yang luas, komunitas yang aktif, dan dukungan platform yang luas menjadikan ini pilihan yang baik bagi para desainer wajib.

Buildroot

Proyek Buildroot didefinisikan sebagai "alat yang sederhana, efisien, dan mudah digunakan untuk menghasilkan sistem Linux tertanam melalui kompilasi silang." Ini memiliki banyak tujuan yang sama dengan proyek Yocto, namun berfokus pada kesederhanaan dan minimalis. Secara umum, Buildroot akan menonaktifkan semua pengaturan waktu kompilasi opsional untuk semua paket (dengan beberapa pengecualian penting), menghasilkan sistem yang sekecil mungkin. Terserah perancang sistem untuk mengaktifkan pengaturan yang sesuai untuk perangkat tertentu.

Buildroot membangun semua komponen dari sumber tetapi tidak mendukung manajemen paket sesuai target. Karena itu, kadang-kadang disebut sebagai pembuat firmware karena sebagian besar gambar diperbaiki pada waktu pembuatan. Aplikasi dapat memperbarui sistem file target, tetapi tidak ada mekanisme untuk menginstal paket baru ke dalam sistem yang sedang berjalan.

Output Buildroot secara umum terdiri dari tiga komponen:

  • Gambar sistem file root dan file tambahan lainnya yang diperlukan untuk menerapkan Linux ke platform target
  • Modul kernel, boot-loader, dan kernel yang sesuai untuk perangkat keras target
  • Rantai alat yang digunakan untuk membuat semua biner target.

Keuntungan

Fokus Buildroot pada kesederhanaan berarti bahwa, secara umum, lebih mudah dipelajari daripada Yocto. Sistem pembuatan inti ditulis dalam Make dan cukup singkat untuk memungkinkan pengembang memahami keseluruhan sistem sekaligus cukup dapat diperluas untuk memenuhi kebutuhan pengembang Linux yang disematkan. Inti Buildroot umumnya hanya menangani kasus penggunaan umum, tetapi dapat diperluas melalui skrip.

Sistem Buildroot menggunakan Makefile normal dan bahasa Kconfig untuk konfigurasinya. Kconfig dikembangkan oleh komunitas kernel Linux dan digunakan secara luas dalam proyek-proyek open source, membuatnya familiar bagi banyak pengembang.

Karena tujuan desain untuk menonaktifkan semua pengaturan waktu build opsional, Buildroot umumnya akan menghasilkan gambar sekecil mungkin menggunakan konfigurasi bawaan. Waktu build dan resource host build juga akan lebih kecil, secara umum, dibandingkan dengan proyek Yocto.

Kekurangan

Fokus pada kesederhanaan dan opsi build yang diaktifkan minimal menyiratkan bahwa Anda mungkin perlu melakukan penyesuaian yang signifikan untuk mengonfigurasi build Buildroot untuk aplikasi Anda. Selain itu, semua opsi konfigurasi disimpan dalam satu file, yang berarti jika Anda memiliki beberapa platform perangkat keras, Anda harus membuat setiap perubahan penyesuaian untuk setiap platform.

Setiap perubahan pada file konfigurasi sistem memerlukan pembangunan kembali semua paket. Ini agak dikurangi dengan ukuran gambar dan waktu pembuatan yang minimal dibandingkan dengan Yocto, tetapi dapat mengakibatkan pembuatan yang lama saat Anda mengubah konfigurasi.

Caching status paket menengah tidak diaktifkan secara default dan tidak selengkap implementasi Yocto. Artinya, meskipun build pertama mungkin lebih pendek dari build Yocto yang setara, build berikutnya mungkin memerlukan pembangunan kembali banyak komponen.

Rekomendasi

Menggunakan Buildroot untuk desain Linux tertanam Anda berikutnya adalah pilihan yang baik untuk sebagian besar aplikasi. Jika desain Anda memerlukan beberapa jenis perangkat keras atau perbedaan lainnya, Anda mungkin ingin mempertimbangkan kembali karena kerumitan sinkronisasi beberapa konfigurasi, namun, untuk sistem yang terdiri dari satu penyiapan, Buildroot kemungkinan akan bekerja dengan baik untuk Anda.

OpenWRT/LEDE

Proyek OpenWRT dimulai untuk mengembangkan firmware khusus untuk router konsumen. Banyak router murah yang tersedia di pengecer lokal Anda mampu menjalankan sistem Linux, tetapi mungkin tidak langsung. Produsen router ini mungkin tidak sering memberikan pembaruan untuk mengatasi ancaman baru, dan meskipun demikian, mekanisme untuk memasang gambar yang diperbarui sulit dan rawan kesalahan. Proyek OpenWRT menghasilkan gambar firmware yang diperbarui untuk banyak perangkat yang telah ditinggalkan oleh produsennya dan memberi perangkat ini masa pakai baru.

Hasil utama proyek OpenWRT adalah gambar biner untuk sejumlah besar perangkat komersial. Ada repositori paket yang dapat diakses jaringan yang memungkinkan pengguna akhir perangkat menambahkan perangkat lunak baru ke sistem mereka. Sistem build OpenWRT adalah sistem build tujuan umum, yang memungkinkan pengembang membuat versi kustom untuk memenuhi persyaratan mereka sendiri dan menambahkan paket baru, tetapi fokus utamanya adalah binari target.

Keuntungan

Jika Anda mencari firmware pengganti untuk perangkat komersial, OpenWRT harus ada dalam daftar opsi Anda. Ini terpelihara dengan baik dan dapat melindungi Anda dari masalah yang tidak dapat dilakukan oleh firmware pabrikan. Anda juga dapat menambahkan fungsionalitas ekstra, membuat perangkat Anda lebih berguna.

Jika desain tertanam Anda berfokus pada jaringan, OpenWRT adalah pilihan yang baik. Aplikasi jaringan adalah kasus penggunaan utama untuk OpenWRT, dan Anda mungkin akan menemukan banyak paket perangkat lunak yang tersedia di dalamnya.

Kekurangan

OpenWRT memberlakukan keputusan kebijakan yang signifikan pada desain Anda (vs Yocto dan Buildroot). Jika keputusan ini tidak memenuhi tujuan desain Anda, Anda mungkin harus melakukan modifikasi yang tidak sepele.

Mengizinkan pembaruan berbasis paket dalam armada perangkat yang disebarkan sulit untuk dikelola. Ini, menurut definisi, menghasilkan beban perangkat lunak yang berbeda dari yang diuji oleh tim QA Anda. Selain itu, sulit untuk menjamin pemasangan atomik dengan sebagian besar pengelola paket, dan siklus daya yang tidak tepat waktu dapat membuat perangkat Anda dalam keadaan tidak terduga.

Rekomendasi

OpenWRT adalah pilihan yang baik untuk proyek hobi atau untuk menggunakan kembali perangkat keras komersial. Ini juga merupakan pilihan yang baik untuk aplikasi jaringan. Jika Anda memerlukan penyesuaian yang signifikan dari pengaturan default, Anda dapat memilih Buildroot atau Yocto.

Distro desktop

Pendekatan umum untuk merancang sistem Linux tertanam adalah memulai dengan distribusi desktop, seperti Debian atau Red Hat, dan menghapus komponen yang tidak dibutuhkan hingga gambar yang diinstal sesuai dengan jejak perangkat target Anda. Ini adalah pendekatan yang diambil untuk distribusi Raspbian populer untuk platform Raspberry Pi.

Keuntungan

Keuntungan utama dari pendekatan ini adalah keakraban. Seringkali, pengembang Linux tertanam juga merupakan pengguna Linux desktop dan berpengalaman dalam distro pilihan mereka. Menggunakan lingkungan yang serupa pada target memungkinkan pengembang untuk memulai lebih cepat. Tergantung pada distribusi yang dipilih, banyak alat tambahan dapat diinstal menggunakan alat pengemasan standar seperti apt dan yum.

Dimungkinkan untuk memasang layar dan keyboard ke perangkat target Anda dan melakukan semua pengembangan Anda langsung di sana. Untuk pengembang yang baru mengenal ruang tersemat, ini mungkin merupakan lingkungan yang lebih familiar dan menghilangkan kebutuhan untuk mengonfigurasi dan menggunakan penyiapan lintas pengembangan yang rumit.

Jumlah paket yang tersedia untuk sebagian besar distribusi desktop umumnya lebih besar daripada yang tersedia untuk builder khusus tertanam yang dibahas sebelumnya. Karena basis pengguna yang lebih besar dan variasi kasus penggunaan yang lebih luas, Anda mungkin dapat menemukan semua paket runtime yang Anda perlukan untuk aplikasi yang sudah dibuat dan siap digunakan.

Kekurangan

Menggunakan target sebagai lingkungan pengembangan utama Anda cenderung lambat. Menjalankan alat kompiler adalah operasi yang intensif sumber daya dan, bergantung pada seberapa banyak kode yang Anda buat, dapat menghambat kinerja Anda.

Dengan beberapa pengecualian, distribusi desktop tidak dirancang untuk mengakomodasi sistem sumber daya rendah, dan mungkin sulit untuk memangkas gambar target Anda secara memadai. Demikian pula, alur kerja yang diharapkan di lingkungan desktop tidak ideal untuk sebagian besar desain yang disematkan. Mendapatkan lingkungan yang dapat direproduksi dengan cara ini sulit. Menambah dan menghapus paket secara manual rawan kesalahan. Ini dapat ditulis menggunakan alat khusus distribusi, seperti debootstrap untuk sistem berbasis Debian. Untuk lebih meningkatkan reproduktifitas, Anda dapat menggunakan alat manajemen konfigurasi, seperti CFEngine (yang, pengungkapan penuh, dibuat oleh majikan saya, Mender.io). Namun, Anda masih bergantung pada penyedia distribusi, yang akan memperbarui paket untuk memenuhi kebutuhan mereka, bukan kebutuhan Anda.

Rekomendasi

Berhati-hatilah dengan pendekatan ini untuk produk yang Anda rencanakan untuk dipasarkan. Ini adalah model yang bagus untuk aplikasi penghobi; namun, untuk produk yang membutuhkan dukungan, pendekatan ini kemungkinan akan menjadi masalah. Meskipun Anda mungkin dapat memulai dengan lebih cepat, hal ini dapat menghabiskan waktu dan usaha Anda dalam jangka panjang.

Pertimbangan lain

Diskusi ini berfokus pada fungsionalitas sistem build, tetapi biasanya ada persyaratan non-fungsional yang dapat memengaruhi keputusan Anda. Jika Anda telah memilih system-on-chip (SoC) atau board, pilihan Anda kemungkinan akan ditentukan oleh vendor. Jika vendor Anda menyediakan paket dukungan papan (BSP) untuk sistem tertentu, menggunakannya biasanya akan menghemat sedikit waktu, tetapi harap teliti kualitas BSP untuk menghindari masalah di kemudian hari dalam siklus pengembangan Anda.

Jika anggaran Anda memungkinkan,  Anda mungkin ingin mempertimbangkan untuk menggunakan vendor komersial untuk OS target Anda. Ada perusahaan yang akan menyediakan konfigurasi yang divalidasi dan didukung dari banyak opsi yang dibahas di sini, dan, kecuali Anda memiliki keahlian dalam sistem build Linux tertanam, ini adalah pilihan yang baik dan akan memungkinkan Anda untuk fokus pada kompetensi inti Anda.

Sebagai alternatif, Anda dapat mempertimbangkan pelatihan komersial untuk staf pengembangan Anda. Ini mungkin lebih murah daripada penyedia OS komersial dan akan memungkinkan Anda untuk lebih mandiri. Ini adalah cara cepat untuk mengatasi kurva pembelajaran dasar-dasar sistem build yang Anda pilih.

Terakhir, Anda mungkin sudah memiliki beberapa pengembang yang berpengalaman dengan satu atau lebih sistem. Jika Anda memiliki insinyur yang memiliki preferensi, hal ini tentu layak untuk dipertimbangkan saat Anda membuat keputusan.

Ringkasan

Ada banyak pilihan yang tersedia untuk membangun sistem Linux tertanam, masing-masing dengan kelebihan dan kekurangan. Sangat penting untuk memprioritaskan bagian desain Anda ini, karena sangat mahal untuk mengganti sistem di kemudian hari dalam prosesnya. Selain opsi ini, sistem baru sedang dikembangkan setiap saat. Mudah-mudahan, diskusi ini akan memberikan beberapa konteks untuk meninjau sistem baru (dan yang disebutkan di sini) dan membantu Anda membuat keputusan yang solid untuk proyek Anda berikutnya.


Linux
  1. Menggunakan AppImage untuk manajemen paket Linux

  2. 4 alat pemindaian untuk desktop Linux

  3. Alat Linux teratas untuk penulis

  1. 5 Alat Migrasi Data Teratas untuk Linux

  2. 8 Alat Penambangan Cryptocurrency Terbaik untuk Linux

  3. 8 Alat Pemilihan Warna yang Luar Biasa untuk Linux

  1. 4 alat sumber terbuka untuk menjalankan server Linux

  2. 80 Alat Pemantauan Linux untuk SysAdmins

  3. Sistem file kartu SD tahan korupsi untuk Linux tersemat?