Dağıtımım tarafından sağlanandan başka bir çekirdeği kullanmayı deneyin - başka bir yerden veya benim tarafımdan özelleştirilmiş olarak. Bu zor mu tehlikeli mi?
Nereden başlayacağım?
Dağıtımım tarafından sağlanandan başka bir çekirdeği kullanmayı deneyin - başka bir yerden veya benim tarafımdan özelleştirilmiş olarak. Bu zor mu tehlikeli mi?
Nereden başlayacağım?
Yanıtlar:
Modern bilgisayarların birkaç dakika içinde yapı yapabilir, çünkü çoğunlukla konfigürasyonda - - özel bir çekirdek Bina zaman alıcı olabilir ama özellikle tehlikeli değildir eğer sen çekirdeği çalışma yapın güncel tutmak ve bu bırakmak emin olun bootloader'ınız aracılığıyla bir seçenek olarak (aşağıdaki 6 numaralı adıma bakın). Bu şekilde, eğer yeniniz çalışmıyorsa, eskisini yeniden başlatabilirsiniz.
Aşağıdaki talimatlarda, kaynak ağacının içindeki yollar, kaynağı kurduğunuz dizinin [src]/whatever
nerede [src]
olduğu, örn /usr/src/linux-3.13.3
. Muhtemelen bu işleri su root
kaynak ağacın yazma izinleri bakımından güvenli kalması gerektiği için yapmak istersiniz (root tarafından sahiplenilmelidir).
Adımların bazıları isteğe bağlı olsa da, sürecin geri kalanını anlamak için gerekli bilgileri içerdiklerinden yine de bunları okumalısınız.
Kaynak tarball'ı indirin ve açın.
Bunlar kernel.org adresinden temin edilebilir . En sonuncular ön sayfada listelenmiştir, ancak /pub/
dizinin içine bakarsanız , sürüm 1.0'a kadar uzanan bir arşiv bulacaksınız . Aksi halde özel bir nedeniniz yoksa, sadece “En Son Kararlı” yı seçmeniz yeterlidir. Bu yazının yazıldığı tarihte bu 74 MB'lık bir tar.xz
dosyadır.
Tarball indirildikten sonra, bir yere açmanız gerekir. Normal yer içeri /usr/src
. Dosyayı oraya yerleştirin ve:
tar -xJf linux-X.X.X.tar.xz
Bireysel dağıtımların genellikle vanilya ağacı yerine kaynak paketlerinden birini kullanmanızı önermektedir. Bu, sizin için önemli olan veya olmayan önemli dağıtım yamaları içerir. Aynı zamanda çekirdeği de eşleştirecek, bazı kullanıcı alanları araçlarını derlemek için kullanılan başlıkları da içeriyor, yine de muhtemelen aynı.
15 yıldan uzun bir süredir özel çekirdekler (çoğunlukla Fedora / Debian / Ubuntu'da) yapımında, vanilya 1 kaynağını kullanırken hiçbir zaman sorun yaşamadım . Bunu yapmak, gerçekten çok fazla fark yaratmaz, ancak, mutlak son çekirdeği istiyorsanız, dağıtımınız muhtemelen henüz toplanmadı. Bu yüzden, en güvenli rota hala içine yerleştirilmesi gereken dağıtım paketini kullanmaktır /usr/src
. En son ahırı tercih ederim, bu yüzden dağıtıma girmeden önce bir kobay gibi davranabilirim :)
Temel bir yapılandırma ile başlayın [isteğe bağlı].
Bunu yapmak zorunda değilsiniz - hemen dalın ve sıfırdan bir konfigürasyon oluşturabilirsiniz. Ancak, bunu daha önce hiç yapmadıysanız, çok fazla deneme yanılma bekleyin. Bu aynı zamanda seçeneklerin çoğunu okumak zorunda kalmak demektir (yüzlerce). Daha iyi bir bahis, eğer varsa mevcut konfigürasyonunuzu kullanmaktır. Bir dağıtım paketi kullandıysanız, muhtemelen zaten bir [src]/.config
dosya içeriyordur , böylece onu kullanabilirsiniz. Aksi takdirde, bir kontrol edin /proc/config.gz
. Bu, 2.6 çekirdeğine eklenen isteğe bağlı bir özelliktir. Varsa, kaynak ağacın en üst seviyesine kopyalayın ve gunzip -c config.gz > .config
.
Eğer yoksa, belki de bu seçenek bir modül olarak yapılandırılmış olabilir. Dene sudo modprobe configs
, sonra /proc
dizini config.gz
tekrar kontrol et .
Distro config, neredeyse tüm donanım sürücülerini içerdiği için ideal değildir. Bu, çekirdeğin işlevselliği için çok önemli değildir, çünkü bunlar modüllerdir ve çoğu zaman asla kullanılmayacak, ancak inşa etmek için gereken süreyi önemli ölçüde arttırır. Ayrıca bazı çekirdek modülleri içermesi için bir initramfs gerektirmesi de sakıncalıdır (bkz. Aşağıdaki 4. adım). Ancak, muhtemelen varsayılandan daha iyi bir başlangıç noktasıdır.
Yapılandırma seçeneklerinin bir çekirdek sürümden diğerine geçip değiştiğini ve make config
aşağıdaki programlardan birini çalıştırdığınızda .config
ilk önce yeni sürümle eşleşecek ve güncelleştirileceğini unutmayın. Yapılandırma çok eski bir sürümden yapılmışsa, bu garip sonuçlara yol açabilir, bu nedenle yapılandırmayı yaparken dikkat edin. AFAIK, başka bir yolla (yeni bir sürümden bir config kullanarak) çalışmaz.
Bir .config
rasyon oluşturun .
[src]/.config
çekirdeği yapılandırmak için kullanılan bir metin dosyasıdır. Bu dosyayı doğrudan düzenlemeyin . Seçeneklerini değiştirme genellikle değiştirmenin basit bir mesele değildir Y
, bir ile N
, vs; genellikle bir dizi bağımlılık ve dallanma olasılığı vardır. Bunun yerine, çekirdek makefile dosyasındaki config hedeflerinden birini kullanmak istiyorsunuz (yani, make _____
üst düzey kaynak dizininden komut satırına girin ):
make config
en basit olanıdır ama muhtemelen çoğu insanın zevkine göre değil. Bir dizi soru - birçok soru - ve fikrinizi değiştirirseniz tekrar başlamak zorundasınız.
make oldconfig
gibidir make config
dışında zaten bir varsa, .config
bir önceki sürümden, yeni seçenekler ait olanlar hariç soruları atlayacak. Bunlardan birçoğu hala olabilir ve birçoğu sizin için önemsiz olacaktır, tekrar önermiyorum.
make menuconfig
benim (ve sanırım çoğunun tercih ettiği yöntem). Bir TUI arayüzü oluşturur ve yürütür (bir terminal üzerinde çalışacak renkli menüler). Bu -dev
ncurses paketinin kurulu olmasını gerektirir . Üzerinden erişilebilen deniz manzarası dışında, oldukça açıklayıcıdır /
; F1 "yardım" mevcut seçenek için bir açıklama sunar. make nconfig
F2 "syminfo" 'nun menuconfig's F1'ine eşdeğer olduğu, birkaç ekstra özelliğe sahip alternatif bir versiyonu vardır .
make xconfig
tam bir GUI arayüzü. Bu gerektirir qmake
ve -dev
Qt paketi tekrar kurulur, derlenir ve oluşturulur. Bunları daha önce kullanmıyorsanız, bu önemli bir indirme olabilir. menuconfig
GUI sürümüne tercih etmemin sebebi , seçenek hiyerarşilerinin önceki bölümdeki ardışık ekranlar kullanılarak sunulması ve ikincisindeki açık akordeon benzeri olmasıdır.
Yapmanız gereken (ancak yapmanız gerekmeyen) ilk şeylerden biri bir "Yerel sürüm" dizesi eklemektir ( Genel Kurulum altında ). Bunun nedeni aşağıda 5 numarada belirtilmiştir.
"Labyrinthine", seçenek hiyerarşisini tanımlamanın iyi bir yoludur ve onunla detaylara kapılmak, bunun gibi bir Soru-Cevap alanının kapsamı dışındadır. Oturup her şeyden geçmek istiyorsanız, saatlerinizi ayırın . Greg Kroah-Hartman (linux çekirdeği için uzun süredir lider olan), 2006'da yazılmış olmasına rağmen, yapılandırma hakkında bir bölüm içeren, çekirdeği (aşağıdaki Referanslara bakınız) içeren ücretsiz bir çevrimiçi kitabı vardır. şu anki dağıtım çekirdeğinizden (# 2'ye göre) ve ardından gözden geçirin ve ihtiyacınız olmayan tüm şeyleri kaldırın. Ayrıca muhtemelen "modül" seçeneklerinden bazılarını "yerleşik" olarak değiştirmek isteyeceksiniz, bu da bizi bir sonraki noktaya getiriyor ...
Hakkında initramfs
[isteğe bağlı]
Bir "initramfs", çekirdeğe yerleşik ve / veya önyükleme sırasında yüklenen sıkıştırılmış bir dosya sistemidir. Birincil amacı, çekirdeğin /lib/modules
kök dosya sistemindekilere erişmeden önce ihtiyaç duyacağı modülleri (örneğin, bu dosya sistemini içeren aygıtın sürücülerini) eklemektir . Distros bunları daima kısmen kullanır, çünkü sürücüler karşılıklı olarak birbiriyle uyumlu değildir ve bu nedenle hepsi çekirdeğe yapılamaz. Bunun yerine, mevcut sisteme uygun olanlar içinden seçilir initramfs
.
Bu iyi çalışır ve herhangi bir dezavantajı temsil etmez, ancak kendi çekirdeğinizi oluştururken muhtemelen gereksiz bir komplikasyondur. 2 Yakala, bir initramfs kullanmıyorsanız , kök dosya sisteminizin (ve üzerinde bulunduğu cihazın) sürücülerinin çekirdeğe yerleştirildiğinden emin olmanız gerekir. Bu menuconfig
, bir M
(= modül) seçeneği ile bir *
(= dahili ) seçeneği arasındaki farktır . Bu hakkı alamazsanız, sistem önyükleme işleminde erken başarısız olur. Bu nedenle, örneğin, bir SATA sabit diskiniz ve bir ext4 kök dosya sisteminiz varsa, yerleşik olanlar için sürücülere ihtiyacınız vardır. [Birisi olması gereken başka bir şey düşünebiliyorsa, bir yorum bırakın ve bunu buraya dahil edeyim].
Bir kullanmak istiyorsanız initramfs
, Genel Kurulum'da uygun seçenekleri seçmeniz gerekir . Bir tane oluşturmak için bir iskelet rehber var çekirdek yerleşik içinde [src]/Documentation/filesystems/ramfs-rootfs-initramfs.txt
, ama dağıtımlar bunu yapmayın O notu; harici bir gzip cpio dosyası kullanıyorlar. Ancak, bu doktor neyin içinde olması gerektiği hakkında bir tartışma içeriyor initramfs
(bkz. "İnitramfs'ın İçeriği").
Çekirdeği oluşturun ve yükleyin.
Bir sonraki adım kolaydır. Çekirdek yapmak için, sadece koşmak make
içinde [src]
dizine. Bir çok çekirdekli sistem üzerinde iseniz, ekleyebilir -j N
, nerede hız şeyleri N
hiç yoktur sen + 1. ayırmak istediğinizi çekirdek sayısıdır test
ya check
. Bu bittiğinde, yapabilirsin make modules
. Hızlı bir kutuda, tüm bunlar <10 dakika sürmelidir.
Her şey yolunda giderse make INSTALL_MOD_STRIP=1 modules_install
. Bu /lib/modules
, çekirdeğin sürüm numarası ile varsa 3. adımda belirtilen "Yerel sürüm" dizesiyle eşleşen bir dizin oluşturur . "Yerel sürüm" dizesini kullanmadıysanız, güvendiğiniz aynı sürümden bir çekirdeğiniz varsa , çünkü bu modüller bunları değiştirecektir. 3 INSTALL_MOD_STRIP=1
isteğe bağlıdır, buradaki önemi görmek için .
Daha sonra make install
çekirdeği varsayılan konuma yüklemek için kullanabilirsiniz. Benim tavsiyem, mevcut dosyaların üzerine yazılmaması için kendin yapman. Bak [src]/arch/[ARCH]/boot
adında bir dosya için bzImage
4 , [ARCH]
olduğu x86
bir x86 ya x86-64 makinenin (ve başka bir şey Başka bir şey üzerinde iseniz) üzerinde ise. Bunu kopyalayın /boot
ve daha spesifik ve bilgilendirici bir şeye yeniden adlandırın (ne olduğu önemli değildir). Aynı şeyi yapın [src]/System.map
, ancak aşağıdaki şemaya göre yeniden adlandırın:
System.map-[VERSION]
Burada, "Yerel sürüm" dizesini içerecek şekilde yarattığı dizinin adı[VERSION]
ile tam olarak aynıdır , örn ./lib/modules
make modules_install
System.map-3.13.3-mykernel
GRUB 2 önyükleyicisini yapılandırın.
Eğer kullanmıyorsanız grub
(linux masaüstü kullanıcıların çoğunun edilir), bu belli ki senin için geçerli değildir. İçinde /etc/grub.d/40_custom
çok fazla olmayan bir dosya olmalı . Değilse, root tarafından sahiplenilen oluşturun ve chmod 755
(çalıştırılabilir olmalıdır). Bu eklemek için:
menuentry 'My new kernel, or whatever' {
set root='hd0,1'
linux /boot/[name-of-kernel] root=/dev/sda1 [other kernel options]
}
Bir initramfs kullanıyorsanız, ayrıca son bir satırın olması gerekir initrd /path/to/initramfs
. Çizgiye dikkat et set root=
. Örnek, grubun ilk sabit sürücünün ilk bölümüne (hd0,1) yüklendiğini varsayar. Birden fazla sürücünüz varsa, bunun yerine UUID bölümünü kullanmak ve bu satırı aşağıdakiyle değiştirmek isteyebilirsiniz:
search --no-floppy --fs-uuid --set=root [the UUID of the partition]
Grub, kök dosya sisteminizde değilse, bu, aynı zamanda kök dosya sisteminizi (biri olan ve ile gösterir) gösteren root=
direktifle aynı olmalıdır . Bunun UUID sürümü . linux
/sbin/init
/lib/modules
root=UUID=[the UUID]
/boot/grub2/grub.cfg
Cihazın adıyla ilgili bir ipucu için varlığınıza bakabilirsiniz . İşte kısa bir rehber çalıştırmak, sindiğinde grub 2. altında böyle için grub2-mkconfig -o /boot/grub2/grub.cfg
(ancak mevcut yedeklemek grub.cfg
önce). Daha sonra bu dosyayı düzenlemek ve girişinizi en üste taşımak isteyebilirsiniz. Hala eski (çalışan) çekirdek için bir giriş içermelidir ve bu tespit edildiği için sizin dağıtıma (otomatik olarak yeni çekirdek için bir girdi çoğaltılamaz bir mekanizmaya sahip olabilir /boot
; Fedora dolayısıyla bunu yapar, ayrı bir başlık kullanarak menuentry
bir olduğunu İyi bir fikir). Her şey yolunda giderse bunu daha sonra kaldırabilirsiniz.
Ayrıca doğrudan menuentry
içine grub.cfg
doğrudan ekleyebilirsiniz , ancak bazı dağıtımlar çekirdeği güncellendiğinde bunun üzerine yazacaktır (oysa /etc/grub.d/
kullanımı onu dahil tutacak).
Bu kadar. Şimdi tek yapmanız gereken yeniden başlatmak. Eğer işe yaramazsa, sorunu ekran çıktısından deneyin ve deneyin, eski bir çekirdeği seçerek yeniden başlatın ve 3. adıma geri dönün ( .config
zaten sahip olduğunuz kullanımı dışında ve bunu değiştirin). Girişimler arasında make clean
(veya make mrproper
) çalışmak iyi bir fikir olabilir, ancak [src]/.config
önce bazı yedeklere kopyaladığınızdan emin olun , çünkü silinir. Bu, derleme işleminde kullanılan nesnelerin eski olmamasını sağlamaya yardımcı olur.
Çekirdek başlıkları ve diğ. ark.
Büyük olasılıkla Yapmanız gereken tek şey sembolik link (olan ln -s -i
) /lib/modules/X.X.X/source
ve /lib/modules/X.X.X/build
karşı /usr/src
kaynak ağacı (tutmak) 'dir dizine. Bu, bazı kullanıcı alanı araçlarının (ve üçüncü taraf sürücü kurucularının) çalışan çekirdeğin kaynağına erişebilmesi için gereklidir.
Bununla ilgili bir sorun .h
dosyalardaki /usr/include
vb. Bunlar yavaş yavaş değişir ve geriye dönük olarak uyumludur . İki seçeneğin var:
Dağıtımın kullandıklarını bırak. Tüm sistemi düzenli olarak güncellerseniz, dağıtım yine de periyodik olarak yenilerini kuracaktır, bu yüzden bu "en az güçlük" seçeneğidir.
Kullanın make headers_install
.
Geriye uyumlu olduklarından ("eski çekirdek başlıkları kullanan bir C kitaplığına karşı oluşturulan bir programın daha yeni bir çekirdek üzerinde çalışması gerekir" anlamına gelir), bu konuda çok fazla telaşlanmanıza gerek kalmaz. Özel bir çekirdek oluşturmak ve dağıtıma a "kernel-headers" paketi günceller ve bu süre içinde bir süre için tutarsan sadece potansiyel sorun olacağını daha yeni çekirdeği oluşturmak için kullanılan daha sürümü ve bazı olacaksa çıkıyor uyumsuzluk (sadece kaynak koddan derlenen yazılımlar için geçerli olacaktır).
İşte bazı kaynaklar:
[src]/README
bina ve kurulum için kısa bir rehber içerir.
[src]/Documentation
Dizin yapılandırmasında yardımcı olabilecek birçok bilgi içeriyor.
Greg KH'nin Linux Kernel adlı kitabının cevizini (bir dizi PDF olarak ücretsiz olarak bulabilirsiniz) çekirdeği oluşturmak etrafında döner.
Grub 2 çevrimiçi bir el kitabı var .
1. "Vanilya", kernel.org'da bulunan asıl, asılsız resmi kaynağı ifade eder. Dağıtımların çoğu bu vanilya kaynağını alır ve bazı küçük özelleştirmeler ekler.
2. Kök dosya sistemini monte etmek için bir kullanıcı alanına ihtiyaç duyulduğundan, örneğin şifrelenmişse veya karmaşık bir RAID dizisine yayılmışsa, initramfs gerektiren koşullar olduğunu unutmayın.
3. Onları yapmadıysanız, zaten var olan modülleri çıkarmaz, ancak yapılandırmanızı değiştirip make modules_install
yeniden çalıştırarak daha sonra bir modül ekleyebileceğiniz anlamına gelir . Bazı modüller inşa etmenin çekirdeğin kendisinde değişiklikler gerektirebileceğini unutmayın; bu durumda çekirdeği de değiştirmeniz gerekir. modprobe
Modülü yerleştirmek için ne zaman kullanmaya çalıştığınızı söyleyebilirsiniz .
4. Standart olmayan bir sıkıştırma seçeneği kullandıysanız, bu dosyaya farklı bir ad verilebilir. Tüm olasılıkların ne olduğundan emin değilim.
initramfs
hemen hemen her zaman kullanılması gerekiyordu. Örneğin, LVF + RAID üzerine rootf ayarlamak genellikle bir tane gerektirir. Şifrelenmiş kök kesinlikle yok. Oldukça karmaşık RAID kurulumları bile yapıyor. Hatta önemsiz dizilerin çekirdek içi otomatik montajı aslında kullanımdan kaldırılmıştır ...
initramfs
eğer ki yok birini kullanmak gerekir, bunu yapmak zorunda değilsiniz ve bu süreci kolaylaştırır. Neyse, şifreli kök fs, vb. Hakkında bir dipnot ekledim.
localmodconfig
vestreamline_config.pl
script gibi araçlar eklemek isteyebilirsiniz ; Mevcut kurulumunuzla çalışmak için yararlı bir yaklaşım ...