ramdisk de dahil olmak üzere bina çekirdek görüntüsü (.img)


12

Raspberry Pi'm için Linux çekirdeğimi (3.0.1) şu adımlarla oluşturdum:

1. Downloading kernel source
2. tar xvf source.tar.bz2
3. downloading arm cross compilation tool.
4. tar xvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5. setting up path for cross tool export PATH=$PATH:/home/shan/<cross tool folder>/bin/
6. after entering linux source dir make ARCH=arm versatile_defconfig (is this reliable   with raspberry pi)
7. make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
8. zImage is generated in /arch/arm/boot

Sorum şu, kernel.img dosyasını nasıl oluşturabilirim? Sanırım zImage + ramdisk içeriyor ama bunu nasıl yapabilirim?

Herkes ramdisk yapmak ve bu iki kernel.img dosyaya paketi için bana rehberlik edebilir? Bu çekirdeği Raspberry Pi'mde başlatmak istiyorum.


Bu, henüz sorulmadığı için şaşırdığım harika bir soru.
Jivings

Neden çekirdek 3.0.1 kullanıyorsunuz? Bu vanilya çekirdeği kernel.orgsitede mi bulundu ?
Krzysztof Adamski

Evet, bunu kernel.org'dan buldum
Shantanu Banerjee

Qemu ve initramfs içinde busybox ile çapraz derlenmiş ahududu pi-2 çekirdeği hakkında yeni bir soru ekledim: raspberrypi.stackexchange.com/questions/56302/…
42n4 13:16

Yanıtlar:


8

kernel.img dosyası

Linux çekirdeği kullanılırken, kernel.imgdosya sadece yeniden adlandırılır linux/arch/arm/boot/Image. Bu dosyanın sıkıştırılmış sürümünü kullanmak da mümkün olmalıdır (veya en azından son kontrol ettiğimde) zImage. Entegre initramfs(ramdisk) içerebilir , ancak gerekli değildir. Örneğin, stok kernel.imgdosyası içermiyor initramfsiken içerir kernel_emergency.img.

Not: eLinux wiki'deki resmi çekirdek derleme kılavuzu, dosya imagetool-uncompressed.pyhazırlamak için aracı kullanmanız gerektiğini önermektedir kernel.img. RaspberyPi'nin ilk günlerinde gerekliydi, ancak günümüzde bootloader düzenli Imageve zImagedosyaları işleyebilir .

Çekirdek kaynakları sorunu

Çok önemli olan, RaspberryPi için çekirdek oluştururken, bunun herhangi bir sürümünü kullanamazsınız. Sadece RaspberryPi'ye taşınan özel sürüm çalışacaktır. Ne yazık ki, mevcut akış yukarı sürümü ( kernel.orgsitede bulunur) RaspberryPi ile uyumlu değildir. Ayrıca, versatil_configRaspberryPi için iyi değildir, bcmrpi_defconfigbunun yerine (RaspberryPi uyumlu çekirdek kaynaklarında bulunur) veya bcmrpi_emergency_defconfigbuildin kullanma planınız varsa kullanmalısınız initramfs.

Çekirdek oluşturma talimatları

RaspberryPi için çekirdek kaynaklarını almak için en iyi yer temel github üzerindedir . Ayrıca, nasıl elde edileceği ve resmi RasbperryPi wiki'de nasıl derleneceği hakkında bazı yararlı açıklamalar bulabilirsiniz . İşte benim adımların basitleştirilmiş küçük versiyonu (NOT: Çekirdeği çapraz derlemek istediğinizi varsayalım. Çok daha hızlı ve aynı sonuçları oluşturmalı, ancak RaspberryPi üzerinde yerel olarak çekirdek oluşturmak da mümkündür):

  1. Kendiniz oluşturmak için resmi araç zincirini indirin. Daha yüksek bir şekilde, yüklü olduğunu varsayıyorum /usr/bin/arm-linux-gnueabi-*. Başka bir yerde varsa CROSS_COMPILE, tüm makekomutlarınızda seçeneği değiştirmeniz gerekir .

  2. Resmi RapsberryPi çekirdek kaynaklarını bulabileceğiniz https://github.com/raspberrypi/linux sitesine gidin . Kodu iki şekilde indirebilirsiniz:

    • Sıkıştırılmış bir dosya olarak (bu seçeneği kullanmak için gityardımcı programı yüklemeniz gerekmez ve bunu RapsberryPi'nin kendisinde bile yapabilirsiniz): Sitenin üstündeki sekmenin ZIPbiraz altındaki simgeye tıklayın Code. Bu, lates kaynak dosyalarını dosya olarak indirmenize izin vermelidir zip. Bunun yerine git'i kullanabilirsiniz, ancak (wiki'de açıklandığı gibi) çok daha fazla alana ve zamana ihtiyaç duyacaktır. Sonra kaynak ağacı almak için dosyayı açın.
    • gitYardımcı programı kullanma (bu muhtemelen RaspberryPi'de benim için işe yaramadı, çünkü muhtemelen RAM miktarı az olabilir, ancak masaüstü sistemlerinde Tamam çalışmalıdır ( --depth 1git'in tüm geliştirme geçmişini indirmesini önleyen argüman notu (çok büyük):

      git clone --depth 1 git://github.com/raspberrypi/linux.git
      
  3. Temel tarafından sağlanan varsayılan yapılandırmayı kullanın:

    cp arch/arm/configs/bcmrpi_defconfig .config
    
  4. make oldconfigBazı soruları çalıştırın ve cevaplayın (varsayılan cevap bırakarak her soruda enter tuşuna basmanız iyi olacaktır):

    make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
    
  5. Çekirdeği derleyin:

    make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
    
  6. Çekirdek modüllerini şuraya kopyala /tmp/modules:

    make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
    
  7. ImageDosyayı şu şekilde kullan:kernel.img

  8. /tmp/modules/lib/modules/Bilgisayarınızdaki tüm modülleri /lib/modules/RaspberryPi kök dosyalarınızdaki dizine yükleyin .

Initramfs ekleme

Ancak bu, nasıl oluşturulacağına ilişkin talimatlar sağlamaz initramfs. Bu çok geniş bir konu olduğundan (temel olarak, çalışan Linux kullanıcı alanı ortamı oluşturmak zorundasınız ve ne kadar karmaşık olabileceğine dair gerçekten bir sınır yok), şimdi bunu burada ele almayacağım. Sadece initramfsiki farklı formda kullanılabileceğini not edeceğim - bağımsız bir dosya, burada ayrı dosya ve çekirdek görüntü dosyası ile entegre olduğu yerde (olduğu gibi kernel_emergency.img). İkinci seçenek RaspberryPi önyükleyici tarafından desteklenmelidir, ancak mevcut bellenim sürümünde kırıldığına dair bazı söylentiler vardır , bu nedenle muhtemelen buildin sürümünü kullanmalısınız.

Başlamanın en iyi yolu, başka bir temel github deposundan indirerek ve yalnızca bu iniramfsgörüntüyü kullanarak çekirdeği önyükledikten sonra kendiniz oluşturmayı deneyin. Bunun için gereken tek şey, indirilen dizin CONFIG_INITRAMFS_SOURCEyapılandırma çekirdek yapılandırması seçeneğini işaret etmektir .

Son notlar

Yani bunu 3 adımda yapmalısınız:

  1. Çekirdeksiz initramfsdosya oluşturmayı ve önyüklemeyi deneyin .
  2. initramfsÇekirdeğinize hazır içerik eklemeyi deneyin .
  3. Bu initramfsiçeriği ihtiyaçlarınıza göre değiştirin.

1
Harika yaz, ama kullanmamalısın zip; gitdosyaları verimli bir şekilde aktarır ve depth=1indirme geçmişini önlemek için kullanabilirsiniz (sanırım).
Alex Chamberlain

Evet, bu doğru ama bunu RaspberryPi üzerinde yapmaya çalışmak gerçekten iyi bir fikir değil. Zip indirmek ise harika çalışıyor. Git'i kullanmayla ilgili kısa bir not ekleyeceğim.
Krzysztof Adamski

Çekirdeği Raspberry Pi üzerinde derlemek başlı başına korkunç bir fikirdir.
Alex Chamberlain

@AlexChamberlain: Gerçekten yavaş ama kesinlikle mümkün (bunu kendim yaptım). Bir gece sürüyor, bu yüzden o kadar da kötü değil. Bunun dışında neden bu kadar korkunç?
Krzysztof Adamski

Eğer bcmrpi_emergency_defconfig kullanırsanız initramfs içerir ??
Shantanu Banerjee

0

Aynı Debian sürümünü her ikisinde de çalıştırıyorsanız, X-Apt, dpkg-cross vb. Kullanarak ... ve emdebian araçları çok iyi çalışabilir.

Kaynak: emdebian çalıştıran gömülü ARM sistemleri için c ++ uygulamaları geliştirmek için kullanılır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.