Kimyasal & Malzeme Mühendisliği
Özelleştirilmiş Mühendislik Donanımı için Özel Bir Linux Elektroniki Nasıl Geliştirilir
Table of Contents
Özel bir Linux çekirdeğinin özel mühendislik donanımı için geliştirilmesi karmaşıktır, ancak temel sürücülerin üzerinde hassas kontrol sağlayan, güvenlik ve uyumluluk.Genel amaçlı dağıtımlardan farklı olarak, özel bir çekirdek, gerçek zamanlı uzantılarla takılmak için, test etmek ve temel mühendisler tarafından kapılamayan benzersiz donanım arabirimlerini desteklemek için tasarlanmıştır.Bu kılavuz, bir yazara dayalı, adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım adım - gerekli analiz ve çevre kurulumu için gerçek zamanlı olarak ayarlandığından - gerçek zamanlı olarak ayarlandığında, test etmek ve çalışma ve çalışma, test etmek ve üretime ve çalışma oluşturmak için yapılandırılabilir ve özel bir şekilde tasarlanmıştır.
Gereksinimleri ve Donanım özelliklerini anlamak
Tek bir kod çizgisine dokunmadan önce, hedef donanımın ve operasyonel kısıtlamaların ayrıntılı bir analizini yapmalısınız. Özelleştirilmiş mühendislik donanımı genellikle standart olmayan periferiler, özel otobüsler veya gerçek zamanlı kontrol döngüleri içerir.
- [FONT:0]Processor mimarisi[DÜDÜT:1] – ARM64, x86 64, RISC-V veya özel bir SoC. Bu, derleyici, araç zincir ve çekirdek yapılandırmalarını gerekli kılar.
- [FONT=0]Memory ve depolama düzeni[[Dönemli sistemler sınırlı RAM, NOR/NAND flaş veya eMMC.elektilebilir bellek yönetim ayarları bu kısıtlamalarla uyum sağlamalıdır.
- [FONT:0)Peripherals ve arayüzler[DÜT:1] – Özel FPGA-attached cihazlar, CAN otobüsler, GPIO genişleyenler veya yüksek hızlı veri satın alma kartlarına ihtiyaç duyabilir.
- [FONT:0) Gerçek zamanlı gereksinimler[[Dönemli: 1)) – Latency sınırları, yanıt süreleri ve jitter toleransı. Bu sürücü, ön boşluk modelleri hakkında karar verir ve PREEMPT RT yama seti uygulamak.
- [FONT=0)Power ve termal limitler[[Dönetici: Fanless veya batarya destekli donanım dinamik frekans ölçeklendirme, CPUli valileri ve termal thling gerektirebilir.
Bir yazılım tasarımı ile her bileşeni çapraz uygulama için bir donanım spesifikasyonu belgesi oluşturun.Eğer bir sürücü mevcut değilse veya eksik değilse, gerekli özel gelişim görevleri listeleyin. Bu belge, çekirdek yapılandırmanızın temelini oluşturur.
Geliştirme Çevresini Belirleyin
Bir Host System ve Toolchain
Geliştirme hostunda istikrarlı bir Linux dağıtımını kullanın - Ubuntu 22.04 LTS veya Debian 12 sağlam seçimlerdir. temel inşa araçları yükleyin:
sudo apt update sudo apt install build-essential git ncurses-dev bison flex libssl-dev libelf-dev
Transkript için ( hedef bir ARM veya RISC-V cihazı olduğunda), uygun çapraz zincir kurmak.For ARM64:
sudo apt install gcc-aarch64-linux-gnu
Alternatif olarak, aracayı ESFLT:0)Arm'ın resmi depolayıcıları [DÜ:1) veya ata gömülü bina sistemi gibi [[Üye Tarihi[DÜye Olmayanlar[DÜye Olmayanlar İçin Tıklayınız.
Anahtarlama Kaynağını Kaldırın
Resmi Linux çekirdek kaynağı kodunun elde edilmesi:0)kernel.org[Dönetici:0) Üretim sistemleri için son uzun vadeli sürüm (LTS) kullanın veya kanamaya ihtiyacınız varsa bir serbest adayı kullanın. Örneğin:
git clone --depth 1 --branch v6.6-linux-next git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
Cloning sadece en son taahhüt (derinlemesine 1) ilk indirmeyi hızlandırır. Tam tarih ve yamaları uygulama yeteneği için, tam bir klon kullanın.
Version Control and Patch Management
Yerel bir Git şubesindeki değişiklikleri takip edin.Eğer yamaları (örneğin, PREEMPT RT, out-of-tree sürücüleri), bir dizi quilt tarzı yama yığını veya kullanımı Git'in işlevi. Tools likeUVT:3) görselize yardımcı olur.
Özelleştirilmiş Donanım için Anahtarlamanın Yeniden Tanımlanması
menü yapısı ile interaktif olarak yapılandırma
Çekirdek seçenekleri özelleştirmenin en yaygın yöntemi, ilk önce mimariyi setletir.Bu TUI (terminal kullanıcı arayüzü) kategori tarafından binlerce seçenek üzerinden dolaşabilmenizi sağlar.For cross-compilation, set the architecture first:
export ARCH=arm64 export CROSS_COMPILE=aarch64-linux-gnu- make menuconfig
Yapılandırmak için anahtar alanlar:
- [FONT:0) Genel olarak kurulum[Dönetici: 1) - Ön boşluk modelinizi seçin ([DÜSÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜ SİAD, kontrol grubu desteği ve sistem çapındaki giriş.
- [FONT:0)Processor tipi ve özellikleri[[Dönemli veya devre dışı CPU aileleri, simetrik çoklu okuma (SMT), büyük sayfa desteği ve NUMA uygulanabilirse.
- [FONT=0)Power management ve ACPI – Fine-tune CPU idle eyaletler, cpufreq valileri ve askıya / destek için. gerçek zamanlı sistemler için, uyanmak için derin C-devletleri rahatsız etmeyi düşünün.
- [FONT=0)Device Sürücüler [Dönetici: 1) Engelli sürücülere ihtiyacınız yoktur (Wi-Fi, Bluetooth, çoğu GPU sürücüleri) sadece özel donanım sürücüleriniz.
- [FONT:0]File sistemleri) - Hedef üzerinde kullanılan dosya sistemleri (örneğin, ext4, squashfs for read-only kökler için, veya UFSBI'yi ham flaş için içerir.
- [FONT:0) Ağlama desteği[[[Dönetici:0)[[[Döneticiler) endüstriyel Ethernet (e.g., PRONET, EtherCAT) veya CAN otobüsleri kullanılabilir.Enable CAN otobüs alt sistemi ve ilgili protokol modülleri.
Seçim yaptıktan sonra, yapılandırmanızı ESFLT:9 olarak kurtarın. RunurFLT:10, sadece non-default seçimlerini içeren en az bir tablo oluşturmak için - bu, özellikle bir takımda paylaştığınız için ideal.
Zor Fragmental Kullanımı
Birden fazla overlays ile karmaşık donanım için, yapılandırma parçaları kullanın. Bir parça dosyası sadece aşırı yükleme yapmak istediğiniz seçenekler içerir. Merge them into the base configuration with:
./scripts/kconfig/merge_config.sh -O obj_dir base_defconfig fragment.config
Bu yaklaşım, manuel düzenlemeden daha temizdir ve birçok parça zincirlemeye izin verir (örneğin, [[Dönemli, 03: 12).
Anahtarlamalı Özellikler ve Yazma Sürücüleri
Gerçek Zamanlı Patches
Garantili determinist davranış için, ESRAT:0)PREEMPT RT yama seti) için bu yamalar çekirdeki tamamen boş bir gerçek zamanlı işletim sistemine dönüştürür.
- Çekirdek sürüminize ait olan yama dosyasını indirin.
- Cebrail'i kullanarak uygulayın.
- [FONT: 15) Genel Kurulum altında → Ön Bildirim Modeli, “Tam Olarak Eksiksiz nümert (Real-Time) seçin.
- EnableFLT:16 ve [FONT=FONT=)
Çevrimdışı (köpeksiz paketten) en kötü gecikmelileri ölçmek için test edin. iyi yapılandırılmış donanımda tek sayısal mikrosaniye jitter bekleyin.
Yazma Özel Modülleri
Donanımınız ana hat sürücü yoksa, bir tane yazmalısınız. inşa altyapıyı doğrulamak için minimum “hello dünya” modülü ile başlayın, sonra kesmeleri, hafızayı kesme I/O, DMA ve dosya işlemleri.
/* my_device_driver.c */
#include <linux/module.h>
#include <linux/platform_device.h>
static int my_probe(struct platform_device *pdev)
{
// request_mem_region, ioremap, register irq
return 0;
}
static int my_remove(struct platform_device *pdev)
{
// cleanup
return 0;
}
static struct platform_driver my_driver = {
.probe = my_probe,
.remove = my_remove,
.driver = { .name = "my_device" },
};
module_platform_driver(my_driver);
Sürücünün kaynağı dosyasını çekirdek ağacının [[Dörtüncü|Sessiz) sistemine ekleyin ve karşılık gelen [[DüzD:) ve [[Döneticileri güncelleyin.
Hafıza Yönetimi
Özelleştirilmiş donanım genellikle büyük kontigz hafıza tahsislerini DMA tamponlar için talep eder - örneğin, görüntü işleme veya yazılım tanımlı radyo.EnableMAZFLT:22) (Contiguous Memory Allocator) ve boyutlarını gerçek zamanlı sistemler için ayarlar ().
Anahtarlama ve Modüller Yapın
Hedef Mimarlık için Derleme
Çevre değişkenlerini ayarlayın ve inşa etmeyi çalıştırın.Bir ARM64 hedefi dört eşzamanlı işle:
export ARCH=arm64 export CROSS_COMPILE=aarch64-linux-gnu- make -j4 Image.gz modules dtbs
Bu sıkıştırılmış bir çekirdek görüntüsü ([[DÜDÜDÜ) üretir ([[DÜDÜŞÜN) ve cihaz ağacı blobs () Donanımınız düzleştirilmiş bir cihaz ağacı kullanırsa (FDT), doğruyu sağlar - bir yönetim kurulunu eklemeniz veya değiştirmeniz gerekebilir.
Out-Tree Modülleri ile bina
Eğer çekirdek ağacının dışında bir modül geliştiriyorsanız (örneğin, bir FPGA satıcısı SDK’dan), çekirdek inşa sistemini daha önce inşa edilmiş bir çekirdeke karşı hedef alan çekirdek:
export KERNEL_SRC=/path/to/kernel make -C $KERNEL_SRC M=$PWD modules
Cihazın Ağacı Blob'ı keşfedin
Cihazın ağacın doğru şekilde çalıştırılabilir olması için [[FONTD:33|Sessizin|safağanlık) dosyanın hataları kontrol etmesi için.
Test ve Özel Anahtarlı Eşleştirme
İlk İlk İlk Göz Testi
ABD'nin ilk ayak uydurduğu hedef üzerine çekirdek imajını yükleyin, UEFI veya JTAG flasher. bir seri konsoldaki erken boot mesajları gözlemleyin:
- Çekirdek komut hattını doğru seri port içerir.
- EnableFLT:37) ve [[Dint|38|38|Dolt|s.
- Eğer çizmeler asırsa, son baskılı mesaja bakın - genellikle yanlış yapılandırılmış bir cihaz sürücüsüne işaret eder veya kök dosya sistemini eksik.
Dmesg ve strace kullanarak
Bir kez, hataları ve uyarıları filtrelemek için silindi.UseENFLT:40), özel çekirdek modülleriyle etkileşime giren kullanıcı uzay uygulamaları. Gerçek zamanlı sistemler için, gecikme süresine sahip olan projeksiyonlama için.) ve .
Anahtar kelimelerle etiketlendi
Derin konular için, KGDB'yi seri veya Ethernet üzerinden kurdu. Donanımı ESDAŞ'a yapılandırın. ”, [[ŞUYDUĞU, İZFLT: 9) hedef üzerinde yeniden inşa edin, ana hat üzerinde yeniden başlayın.
aarch64-linux-gnu-gdb vmlinux (gdb) target remote /dev/ttyUSB0 (gdb) continue
Set breakpoints, hafızayı inceler ve kesme eller yoluyla adım at.
Özel Anahtarlı
Anahtarlama ve modüller yükleme
Hedef cihazda, çekirdek imajını boot partition (e.g.,DANFLT:48) ve yükleme modüllerini kopyalayın:
sudo make ARCH=arm64 INSTALL_MOD_PATH=/path/to/rootfs modules_install
Bir ramdisk kullanıyorsanız (initramfs), kök dosya sistemi için gerekli olan modülleri içerecek şekilde değiştirilebilir veya [[DÜŞK+ZİREZİREZİYLEŞİ KAYNAKLAR .
Çığlık
UBoot için, [[UDÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜN
setenv bootargs console=ttyAMA0,115200 root=/dev/mmcblk0p2 rw rootfstype=ext4
setenv kernel_addr_r 0x80000000
setenv fdt_addr_r 0x88000000
load mmc 0:1 ${kernel_addr_r} /Image.gz
unzip ${kernel_addr_r} ${kernel_addr_r} # if gzip compressed
load mmc 0:1 ${fdt_addr_r} /my_board.dtb
booti ${kernel_addr_r} - ${fdt_addr_r}
UEFI tabanlı sistemler için, TANITT:55'i bir boot girişi olarak kaydetmek için kullanın.
Başarılı Iyileme
Yeniden başlatmadan sonra, yeni çekirdek versiyonunu doğrulamak için 0.016'yı kontrol edin. Tüm özel modüller yük temsilcisi iş yük testleri ile yüklenir - donanımın veri yollarını stres, kesme yarının hızını ölçmek ve hiçbir paniğe veya oopsiyonları genişletilmiş bir soak periyodun üzerindeki loglarda görün.
Performans Tuning ve Benchmarking
CPU Scaling ve Vali Seç
Geçimli mühendislik uygulamaları için, CPU valisini “HARAD:58” olarak belirledi:
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Alternatif olarak, kullanıcı uzay planlama araçlarını ESFLT:60 gibi kullanın, onları çekirdeklerden ayırmak ve çekirdek programlayıcılarından izole etmek için kritik süreçleri.
I/O Scheduler ve Block Katman
Gerçek zamanlı kısıtlamalar için, [[BİLMİNCİ-:61) veya [[FONTFLT:62) I/O programlayıcı (NVMe cihazları genellikle kullanımlıdır:63).Üye Olmayan çekirdekler gibi özellikleri:64.
Ağ Stack Tuning
Mühendislik donanımları genellikle ham soketleri veya endüstriyel protokolleri kullanır. Ağ yığınını düşük gecikme için kullanın:
- SetFLT:66) ve [[Dönetici:67) daha büyük değerlere sahip.
- Kullanım:68) Saçma bağlı jitteri azaltmak için.
- EnableFLT:69) Birden çok çekirdek varsa (Receive Packet)
Özel Anahtarlı Anahtarlama ve Updating the privateelek
Takip Upstream
Abone olun:0)Linux çekirdeği istikrarlı posta listesi[*CFOT:1) ve LTS yayınlarını takip edin, özel yamalarınızı tekrar açın.Use Git'sASIFLT:70).
git fetch stable git checkout -b custom-6.7 v6.7 git rebase -i v6.6
Her bir rebase, üretim donanımına dağıtmadan önce iyice test edin.
Güvenlik Patching ve Regresyon Test
Özelleştirilmiş donanım genellikle güvenlik denetimleri eksik - hiçbir zaman güncel olmayan özel bir çekirdek geri kapı haline gelebilir. Otomatik bir inşa ve test boru hattı kurmak.UseENFLT:72) veya yerel bir Jenkins örneğin çizme testleri, gecikme testleri ve sürücüye özel olarak işlevsel testler uygulanır.
Dokümantasyon ve Bilgi Paylaşımı
Varsayılan olarak farklı olan her çekirdek yapılandırma seçeneğinin ayrıntılarının tutulması, her uygulama yama ve her özel sürücüyü sıfırdan yeniden inşa etmek için talimatlarla bir araya getirin. Bu, ekip üyelerinin değiştiği veya kurulum yıllarını yeniden üretmek için gereken zaman paha biçilmez.
RealWorld Örnek: Yüksek Enerji-Fikreksiyonel Prodüksiyon için Özel Anahtarlı
Özel bir PCIe kartı üzerinde ASIC'den 10.000 kanal okuyan bilimsel bir DAQ (data satın alma) sistemi düşünün:
- Deterministic 5 μs geçncy altında işlem yapmayı kesir.
- DMA tamponlarının 2 GB için sürekli hafıza tahsisi.
- Hiçbir GUI, ağ yok, minimum depolama.
Mühendis olacaktı:
- Analine ARM64 çekirdeği ile başlayın ve PREEMPT RT yamaını uygulayın.
- Tüm ağ, ses ve GPU sürücüleri başarısız.
- CMA ile kullanılabilir CMA:73) çekirdek komut hattında.
- Bu, [[Döneticileri ve/veya işlerimizi kullanarak, bir dizi elin kaydedilmesi ve kayıt altına almak için [[75|s.
- Tek bir kesinti veya sayfa hatası olmadan 100 milyon olayı okuyan bir stres testi ile doğrulayın.
Böyle bir sistem bir laboratuvarda konuşlandırılacak ve internete asla bağlı olmayacak, ancak çekirdeği hala kritik bir errata göründüğünde denetimli ve güncellenmelidir.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Özel bir Linux çekirdeğinin özel mühendislik donanımı için geliştirilmesi, platformun performansını, determinizmi ve güvenliğinizi tam olarak kontrol etmenizi sağlar - ihtiyaç analizinden bakım için - en katı gerçek sistemlerle ve çekirdekli kısıtlamaları anlayabilirsiniz.Sekizmantasyon araçları, cihaz ağacı aşırı yükleme, PREEMPT RT ve amplifik testi ile sistemli bir test, her zaman bir flashG ile başarısız olur.