Papan pembangunan dan contoh projek perisian yang berkaitan yang disediakan oleh pengeluar mikropengawal selalunya sangat membantu jurutera apabila memulakan reka bentuk baharu. Walau bagaimanapun, selepas peringkat awal projek reka bentuk selesai, perisian yang disediakan oleh pengilang mungkin menyebabkan beberapa masalah semasa mereka bentuk selanjutnya.
Terdapat juga banyak cabaran untuk reka bentuk menggunakan sistem pengendalian masa nyata sebagai platform untuk kod aplikasi. Contohnya, terdapat isu seperti cara memperuntukkan fungsi secara berkesan kepada tugas selari yang berbeza, cara mereka bentuk komunikasi antara proses yang boleh dipercayai dan cara menguji keseluruhan pakej perisian pada perkakasan.
Semakin banyak pengeluar OEM mendapati bahawa cara terbaik untuk mengelakkan masalah di atas adalah dengan memulakan reka bentuk baharu menggunakan sistem pengendalian Linux berdasarkan sumber terbuka, terbukti, berskala dan boleh dijalankan pada pelbagai platform perkakasan. Bilangan pemindahan sistem pengendalian Linux pada pelbagai platform perkakasan komputer juga tiada duanya.
Derivatif Linux telah digunakan secara meluas dalam pelbagai sistem terbenam, termasuk penghala rangkaian, telefon mudah alih, kawalan automasi bangunan, televisyen dan konsol permainan video.
Walaupun Linux digunakan secara meluas dan berjaya, ia tidak bermakna ia mudah digunakan. Linux mengandungi lebih sejuta baris kod dan beroperasi dengan cara yang jelas "Linux" yang mungkin memerlukan sedikit masa untuk membiasakan diri untuk pemula.
Jadi, tujuan artikel ini adalah untuk membantu memulakan projek reka bentuk baharu menggunakan μClinux, versi sistem pengendalian terbenam Linux. Panduan ini akan dipecahkan kepada lima langkah. Untuk menggambarkan panduan, projek μClinux dilaksanakan pada mikropengawal STMicroelectronics STM32F429, yang menggunakan teras ARM Cortex-M4 dengan frekuensi maksimum 180MHz dan menggunakan Pakej Sokongan Papan Linux (BSP) STM32F429 Discovery Emcraft.
Setiap reka bentuk perisian terbenam bermula dengan memilih alatan yang betul.
Rantaian alat ialah satu set alat pembangunan perisian yang disambungkan (atau dipautkan) bersama-sama Ia termasuk alatan seperti GNU Compiler Collection (GCC), binutils (satu set pemaut, pemasang dan alatan lain untuk pembangunan objek. fail dan arkib) dan glibc (perpustakaan C yang menyediakan panggilan sistem dan fungsi asas, dalam beberapa kes, alat lain seperti penyusun dan penyahpepijat juga boleh disertakan.
Rantai alat yang digunakan untuk pembangunan terbenam ialah rantai alat silang, lebih dikenali sebagai pengkompil silang.
GNUBinutils ialah komponen pertama rantai alat Linux terbenam. GNUBinutils mengandungi dua alat penting:
●"as", pemasang, menukar kod pemasangan (dijana oleh GCC) kepada kod binari
● "ld", penyambung, menyambungkan segmen kod sasaran diskret ke perpustakaan atau membentuk fail boleh laku
Pengkompil ialah komponen penting kedua bagi rantai alat. Dalam Embedded Linux, ia dipanggil GCC dan menyokong pelbagai jenis mikropengawal dan seni bina pemproses.
Seterusnya ialah perpustakaan fungsi C. Ia melaksanakan antara muka pengaturcaraan aplikasi (API) POSIX tradisional Linux, yang boleh digunakan untuk membangunkan aplikasi ruang pengguna. Ia antara muka dengan kernel melalui panggilan sistem dan menyediakan perkhidmatan peringkat tinggi.
Jurutera mempunyai beberapa pilihan perpustakaan fungsi C:
●glibc ialah perpustakaan fungsi C tersedia yang disediakan oleh projek GNU sumber terbuka. Perpustakaan ini berciri penuh, mudah alih dan mematuhi piawaian Linux.
●GLIBC Terbenam (EGLIBC) ialah versi terbitan yang dioptimumkan untuk sistem terbenam. Kodnya diperkemas, menyokong kompilasi silang dan ujian silang, dan kod sumber serta kod binarinya serasi dengan GLIBC.
●uClibc ialah satu lagi perpustakaan C yang boleh digunakan apabila ruang denyar terhad dan/atau penggunaan memori mestilah minimum.
Penyahpepijat biasanya juga sebahagian daripada rantaian alat, kerana penyahpepijat silang diperlukan untuk nyahpepijat aplikasi yang berjalan pada mesin sasaran. Dalam bidang Linux terbenam, GDB ialah penyahpepijat yang biasa digunakan.
Alat di atas sangat diperlukan, tetapi apabila ia berfungsi secara bebas, ia mengambil masa terlalu lama untuk menyusun kod sumber Linux dan menyepadukannya ke dalam imej akhir. Nasib baik, Buildroot mengautomasikan proses membina sistem terbenam lengkap dan memudahkan penyusunan silang dengan menjana mana-mana atau semua tugas berikut:
●Rantai alat kompilasi silang
●Sistem Fail Root
●Imej kernel
●But imej
Untuk pereka bentuk sistem terbenam, ia juga mudah untuk menggunakan alat pengagregatan utiliti, seperti BusyBox, yang menyepadukan alatan yang biasanya paling diperlukan. Menurut halaman maklumat BusyBox, "Ia menggabungkan versi kecil banyak alat UNIX biasa menjadi boleh laku kecil. Ia menyediakan alternatif kepada kebanyakan alat yang biasanya anda lihat dalam alat seperti GNU fileutils dan shellutils. BusyBox Alat dalam BusyBox biasanya kurang terpilih daripada rakan sejawatan GNU berciri penuh mereka; tetapi pilihan yang disertakan menyediakan kefungsian dan tingkah laku yang diharapkan yang hampir sama dengan yang disediakan oleh rakan sejawat GNU Untuk mana-mana sistem kecil atau terbenam, BusyBox menawarkan persekitaran yang cukup lengkap
Alat penting terakhir ialah BSP, yang dibuat khas untuk papan induk yang dilengkapi dengan MCU atau pemproses sasaran projek.BSP termasuk alat prakonfigurasi, serta pemuat but untuk memuatkan sistem pengendalian ke papan induk. Ia juga menyediakan kod sumber untuk pemacu kernel dan peranti (lihat Rajah 1).
1) Perisian tegar pemuat but (U-Boot dalam projek contoh) berjalan dalam memori flash terbina dalam MCU sasaran (tiada memori luaran diperlukan), dan selepas dihidupkan/set semula, melaksanakan semua kerja permulaan yang diperlukan, termasuk menyediakan port bersiri dan menggunakannya secara luaran Pengawal memori untuk akses memori (RAM).
2) U-Boot memindahkan imej Linux daripada Flash luaran kepada RAM luaran dan menyerahkan kawalan kepada titik masuk kernel dalam RAM. Imej Linux boleh dimampatkan untuk menjimatkan ruang kilat dengan mengorbankan masa penyahmampatan pada masa but.
3) Linux but dan memasang sistem fail berasaskan RAM (initramfs) sebagai sistem fail akar. Apabila projek dibina, Initramfs diisi dengan fail dan direktori yang diperlukan dan kemudian hanya dipautkan ke kernel.
4) Di bawah kernel Linux, laksanakan /sbin/init. Program /sbin/init memulakan sistem mengikut penerangan fail konfigurasi dalam /etc/inittab.
5) Sebaik sahaja proses pemulaan melengkapkan pelaksanaan peringkat larian dan arahan dalam /sbin/init, ia memulakan proses log masuk.
6) Pelaksanaan fail permulaan shell /etc/profile menandakan selesainya proses permulaan.
Anda boleh memendekkan masa permulaan dengan ketara dan meningkatkan prestasi keseluruhan dengan mendayakan pelaksanaan di tempat (ExecuteInPlace - XIP), iaitu kaedah melaksanakan kod daripada memori denyar. Biasanya, kod Linux dimuatkan daripada memori kilat ke memori luaran dan kemudian dilaksanakan daripada memori luaran. Dengan melaksanakan daripada memori kilat, kurang memori diperlukan kerana langkah ini tidak lagi disalin dan ingatan baca sahaja tidak lagi menggunakan ruang program.
Atas ialah kandungan terperinci Beberapa langkah untuk pembangunan projek Linux terbenam. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!