Bu tamamen cihazınızda hangi servislerin olmasını istediğinize bağlıdır.
Programlar
Linux önyüklemesini doğrudan bir kabuğa dönüştürebilirsiniz . Üretimde - orada oturan bir kabuk olmasını isteyenler - çok yararlı değil, ancak etkileşimli bir önyükleyiciniz olduğunda bir müdahale mekanizması olarak yararlıdır: init=/bin/sh
çekirdek komut satırına geçin. Tüm Linux sistemlerinde (ve tüm unix sistemlerinde) Bourne / POSIX tarzı bir kabuk bulunur /bin/sh
.
Bir dizi kabuk yardımcı programına ihtiyacınız olacak . BusyBox çok yaygın bir seçimdir; o dosya ve metin işlemleri (bir kabuk ve ortak programları içeren cp
, grep
ağ kur, ...) ( ping
, ifconfig
, ...), proses manipülasyon ( ps
, nice
, ...) ve diğer çeşitli sistem araçları ( fdisk
, mount
, syslogd
, ...). BusyBox son derece yapılandırılabilir: uygulamanız için doğru boyut / işlevsellikten ödün vermek için hangi araçları istediğinizi ve hatta derleme sırasında tek tek özellikleri seçebilirsiniz. Bunun dışında sh
, gerçekten sen misin olmadan bir şey yapamaz o çıplak asgari mount
, umount
ve halt
, ama aynı zamanda yok etmek atipik olurdu cat
, cp
, mv
, rm
,mkdir
, rmdir
, ps
, sync
Ve birkaç tane daha. BusyBox busybox
, her yardımcı program için sembolik bir bağlantı ile adlandırılan tek bir ikili olarak kurulur .
Normal bir unix sistemindeki ilk işleme denir init
. Görevi diğer hizmetleri başlatmaktır. BusyBox bir init sistemi içerir. init
İkili /sbin
dosyaya ek olarak (genellikle içinde bulunur ), /etc/inittab
hangi hizmetlerin başlatılacağını gösteren yapılandırma dosyalarına (genellikle denilen - bazı modern init değiştirme işlemleri bu dosyayla ortadan kaldırılır, ancak küçük bir gömülü sistemde bulamazsınız) ihtiyacınız olacaktır. ve ne zaman. BusyBox /etc/inittab
için isteğe bağlıdır; eksikse, konsolda bir kök kabuk alırsınız ve komut dosyası /etc/init.d/rcS
(varsayılan konum) önyükleme sırasında yürütülür.
Tabii ki, cihazınızı kullanışlı hale getiren programların ötesinde ihtiyacınız olan tek şey bu. Örneğin, bir OpenWrt varyantı çalıştıran ev yönlendiricimde yalnızca programlar BusyBox nvram
( NVRAM'deki ayarları okumak ve değiştirmek için) ve ağ yardımcı programlarıdır.
Tüm yürütülebilir dosyalarınız statik olarak bağlı olmadıkça, dinamik yükleyiciye ( ld.so
libc seçimine ve işlemci mimarilerine bağlı olarak farklı adlarla çağrılabilir) ve gerektirdiği tüm dinamik kütüphanelere ( /lib/lib*.so
belki de bunlardan bazıları /usr/lib
) ihtiyacınız olacaktır. çalıştırılabilir.
Dizin yapısı
Dosya Sistemi Hiyerarşi Standart Linux sistemlerinin ortak dizin yapısını açıklar. Masaüstü ve sunucu kurulumlarına yöneliktir: birçoğu gömülü bir sistemde atlanabilir. İşte tipik bir minimum.
/bin
: yürütülebilir programlar (bazıları /usr/bin
bunun yerine olabilir ).
/dev
: cihaz düğümleri (aşağıya bakınız)
/etc
: yapılandırma dosyaları
/lib
: dinamik yükleyici dahil paylaşılan kütüphaneler (tüm yürütülebilir dosyalar statik olarak bağlı değilse)
/proc
: proc dosya sistemi için bağlama noktası
/sbin
: yürütülebilir programlar. İle ayrım /bin
DİR /sbin
sadece sistem yöneticisi için yararlı olan programlar için, ama bu ayrım gömülü cihazlarda anlamlı değildir. /sbin
İle sembolik bir bağlantı yapabilirsiniz /bin
.
/mnt
: bakım sırasında bir çizik bağlama noktası olarak salt okunur kök dosya sistemlerine sahip olmak kullanışlı
/sys
: sysfs dosya sistemi için bağlama noktası
/tmp
: geçici dosyalar için konum (genellikle bir tmpfs
bağlama)
/usr
: Alt dizinlerinin bulunduğu bin
, lib
ve sbin
. /usr
kök dosya sisteminde bulunmayan ekstra dosyalar için var. Buna sahip değilseniz /usr
, kök dizine sembolik bir bağlantı yapabilirsiniz .
Cihaz dosyaları
Aşağıda bazı tipik girişler verilmiştir /dev
:
console
full
(ona yazmak her zaman “cihazda boş alan kalmaz” raporunu verir)
log
(günlük girişlerini göndermek için programların kullandığı bir soket), ondan bir syslogd
daemon (BusyBox gibi) okuyorsanız
null
(her zaman boş olan bir dosya gibi davranır)
ptmx
ve bir pts
dizin kullanmak istiyorum, sözde terminalleri (konsol yani daha herhangi bir uç, diğer) - Cihaz ağ örn ise ve Telnet veya SSH içinde istediğiniz
random
(rastgele bayt döndürür, engelleme riski)
tty
(her zaman programın terminalini belirler)
urandom
(rastgele bayt döndürür, hiçbir zaman engellemez, ancak yeni önyüklenen bir cihazda rastgele olmayabilir)
zero
(sonsuz bir boş bayt dizisi içerir)
Bunun ötesinde, donanımınız için girişlere ihtiyacınız olacak (ağ arayüzleri hariç, bunlar içeri girmiyor /dev
): seri bağlantı noktaları, depolama vb.
Katıştırılmış aygıtlar için, aygıt girişlerini normalde doğrudan kök dosya sisteminde oluşturabilirsiniz. İleri teknoloji sistemlerde girişler MAKEDEV
oluşturmak için bir komut dosyası /dev
bulunur, ancak katıştırılmış bir sistemde komut dosyası genellikle görüntüye dahil edilmez. Bazı donanımlar çalışırken takılabilirse (örneğin, aygıtta bir USB ana bilgisayar bağlantı noktası varsa), udev/dev
tarafından yönetilmelidir (kök dosya sisteminde hala minimum bir ayarınız olabilir).
Önyükleme zamanı eylemleri
Kök dosya sisteminin ötesinde, normal çalışma için birkaç tane daha bağlamanız gerekir:
- procfs on
/proc
(hemen hemen vazgeçilmez)
- sysfs on
/sys
(hemen hemen vazgeçilmez)
tmpfs
dosya sistemi açık /tmp
(programların, flash veya salt okunur olabilecek kök dosya sisteminden ziyade RAM'de olacak geçici dosyalar oluşturmasına izin vermek için)
- dinamikse tmpfs, devfs veya devtmpfs açık
/dev
(yukarıdaki “Cihaz dosyaları” nda udev konusuna bakın)
/dev/pts
[sözde terminaller kullanmak istiyorsanız devpts on ( pts
yukarıdaki konuya bakınız)
Bir /etc/fstab
dosya ve çağrı yapabilir mount -a
veya mount
manuel olarak çalıştırabilirsiniz .
Günlük yazmak için herhangi bir yeriniz varsa, bir syslog arka plan programı (ayrıca program ilgilenmezse klogd
çekirdek günlükleri syslogd
için) başlatın.
Bundan sonra, cihaz uygulamaya özel hizmetleri başlatmaya hazırdır.
Bir kök dosya sistemi nasıl yapılır
Bu uzun ve çeşitli bir hikaye, bu yüzden burada yapacağım tek şey birkaç işaret vermek.
Kök dosya sistemi RAM'de (ROM veya flash'ta (genellikle sıkıştırılmış) bir görüntüden yüklü) veya disk tabanlı bir dosya sisteminde (ROM veya flashta depolanır) veya varsa ağdan (genellikle TFTP üzerinden ) yüklenebilir . Kök dosya sistemi RAM içindeyse , onu initramfs yapın - açılışta içeriği oluşturulan bir RAM dosya sistemi.
Gömülü sistemler için kök görüntüleri birleştirmek için birçok çerçeve mevcuttur. BusyBox SSS'de birkaç işaretçi var . Buildroot , Linux çekirdeğine ve BusyBox'a benzer bir kurulumla tam bir kök görüntü oluşturmanıza izin veren popüler bir tanesidir. OpenEmbedded böyle bir çerçevedir.
Wikipedia'da popüler yerleşik Linux dağıtımlarının (eksik) bir listesi vardır . Yakınınızda bulunabilecek gömülü Linux'un bir örneği, ağ cihazları için ( Openinker'in ev yönlendiricilerinde popüler olan) OpenWrt işletim sistemleri ailesidir. Deneyimle öğrenmek istiyorsanız, Scratch'tan Linux'u deneyebilirsiniz , ancak hobi uzmanları için yerleşik cihazlara değil masaüstü sistemlerine yöneliktir.
Linux ve Linux çekirdeği hakkında bir not
Linux çekirdeğinde pişirilen tek davranış, önyükleme zamanında başlatılan ilk programdır. ( Burada initrd ve initramfs inceliklerine girmeyeceğim .) Geleneksel olarak init olarak adlandırılan bu programın işlem kimliği 1 ve belirli ayrıcalıkları ( KILL sinyallerine bağışıklık ) ve sorumlulukları ( yetim yetimleri ) vardır. Bir Linux çekirdeği ile bir sistemi çalıştırmak ve ilk süreç olarak istediğini başlamak ama sonra ne var Linux çekirdeği dayalı bir işletim sistemidir ve normalde “Linux” denir değil ne olabilir - Linux , içinde sağduyu terimi, çekirdeği Linux çekirdeği olan Unix benzeri bir işletim sistemidir.. Örneğin Android, Unix benzeri olmayan ancak Linux çekirdeğine dayanan bir işletim sistemidir.