Table of Contents

İnşa sistemi kullanımı

  • Herşeyi ayrıcalıksız kullanıcı olarak yapın, root olmadan, sudo kullanmadan.
  • İnşa dizininin tam yolunun boşluk içermediğinden emin olun.

Güncel OpenWrt kaynak ağacını (en azından 21.02 ve sonrası) etkileyen bir mesele var: Belirli sistemlerde OpenWrt imgesi oluşur, ama sistem başlangıcında asılı kalır. Bu meselenin etrafından dolaşmak için, lütfen git kaynak kodu “chekout” işleminden önce buradaki (ing) “workaround” başlıklı kısımdaki talimatları takip edin.

Bir inşa sistemi kurulumu sonrası tipik oluşturma adımları:

# Kaynakları indirip güncelle
git clone https://git.openwrt.org/openwrt/openwrt.git
cd openwrt
git pull
 
# Belli bir kod revizyonunu seç
git branch -a
git tag
git checkout v21.02.3
 
# Besileri güncelleme
./scripts/feeds update -a
./scripts/feeds install -a
 
# Bellenim imajını ve çekirdeği yapılandır
make menuconfig
make -j $(nproc) kernel_menuconfig
 
# Bellenim imajını oluştur
make -j $(nproc) defconfig download clean world

İnşa adımları aşağıda detaylı açıklanmışlardır.

Kaynakları indirmek

Takip eden komutu kullanarak Git deposunu klonla.

git clone https://git.openwrt.org/openwrt/openwrt.git [<buildroot>]

Olası meseleler:

Kaynakları güncellemek

:!: Geliştirme dalındaki kaynaklar sık değişir. En son kaynaklarla çalışmanız önerilir.

git pull

Olası meseleler:

Besileri güncelleme

Eskimiş oldukları durumda, besiler için son güncellemeleri çek.

./scripts/feeds update -a

İndirilmiş paketleri make menuconfig içine kullanılabilir kıl.

./scripts/feeds install <package_name>
./scripts/feeds install -a

Olası meseleler:

Bir yerel besi yaratma

  1. <inşakökü> dizininizi, openwrt kaynaklarını github'dan git klonlama ile hazırlayın (örneğin kendi çatalınızdan).
  2. Bir dizin yaratın: mkdir -p <inşakökü>/paketlerim/<kısım>/<kategori>/<paket_adi>.
    <paket_adi>'nı kendi paketinizle değiştirin.
    örn. mkdir -p paketlerim/net/network/rpcbind.
    Kısım ve kategori Makefile'da bulunabilirler.
  3. Bir Makefile yazın veya başka bir paketten bir Makefile indirin, github'da örneklere bakabilirsiniz.
    Makefile'ınızı düzenleyin ve gerekli dosyaları, kaynakları... ekleyin
    Daha fazlası: Paketleri oluşturma & Kendi uygulamanızdan bir paket yaratma
  4. feeds.conf.default'a kendi özel besinizle bir satır ekleyin:
    src-link paketlerim <insakoku>/paketlerim
    <insakoku>'nü klonlanmış openwrt kaynak diziniyle değiştirin örn. ~/openwrt
    Kendi özel besinizin olduğu satırı, diğerlerinden üstün kılmak için, onların yukarısına taşıyın.
  5. Şimdi çalıştırın: ./scripts/feeds update -a; ./scripts/feeds install <paket_adı>
    Eğer bunu bir bağımlılığı çözümlemek için yapıyorsanız bir kez daha ./scripts/feeds install <paket_adı> çalıştırın ve bağımlılığın çözümlendiğini farketmelisiniz.
  6. Paketinizi derleyin.
    Make menuconfig menüsünde paketi seçin
    make package/my_package/{clean,compile} ile inşa edin
    Daha fazlası: Tek bir paket derleme

Kod revizyonunu seçmek

Bu adım atlanabilir en uç seviye imajlar inşa etmek istiyorsunu.

Dal seçimi

Her dal sürüm versiyonu için temel kod içerir, örn. openwrt-18.06, openwrt-19.07, openwrt-21.02, master, ve tekil sürümler, örn. v18.06.2, v19.07.3, v21.02.0. Her dal, geliştirme dalından geriye aktarılan özenle seçilmiş onarımlar ve güncellemelerle kararlı kod içermesi için tasarlanmıştır.

Bir dalı kullanmak için, Git deposunu yukarıda açıklanan git clone komutunu kullanarak klonlayın ve sonra git checkout komutuyla dala geçin.

# Dalları listeleme
git branch -a
 
# OpenWrt ana dalını kullan
git checkout master
 
# OpenWrt 21.02 dalını kullan
git checkout openwrt-21.02

:!: Dal değiştirirken, make distclean komutunu kullanarak kaynak ağacını iyice temizlemek önerilir. Böylelikle kaynak ağacınızın önceki derleme çalışmalarından yapı parçaları veya yapılandırma dosyaları içermediğinden emin olursunuz.

Etiket seçimi

Resmi sürüm depolarından paketler yüklemek için uzun süreliğine belirli bir sürüm etiketi seçin. Select an individual release tag to install packages from the official release repositories for a long time.

# Etiketleri getirip listeleme
git fetch -t
git tag
 
# OpenWrt 21.02.1 sürümünü kullanma
git checkout v21.02.1

Özet seçimi

Belirli bir kod revisyonu özeti seçme ve tüm besileri aynı güne eşitleme.

REV_HASH="4c73c34ec4215deb690bf03faea2a0fe725476f0"
git checkout ${REV_HASH}
REV_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
 
# Tüm "src-git"'leri "src-git-full" olarak değiştirin: https://openwrt.org/tr/docs/guide-developer/feeds#feed_configuration
sed -e "/^src-git\S*/s//src-git-full/" feeds.conf.default > feeds.conf
 
./scripts/feeds update -a
 
# Bir döngü ile tüm feeds.conf satırlarını seçili revizyon özetlerini ayarlamak için düzenleyin
sed -n -e "/^src-git\S*\s/{s///;s/\s.*$//p}" feeds.conf \
| while read -r FEED_ID
do
REV_DATE="$(git log -1 --format=%cd --date=iso8601-strict)"
REV_HASH="$(git -C feeds/${FEED_ID} rev-list -n 1 --before=${REV_DATE} ${REV_BRANCH})"
sed -i -e "/\s${FEED_ID}\s.*\.git$/s/$/^${REV_HASH}/" feeds.conf
done
 
./scripts/feeds update -a
./scripts/feeds install -a

Resmi inşa yapılandırmasını kullanma

OpenWrt'yi varsayılan resmi imajlarla aynı paketleri barındıracak şekilde derleme:

Örneğin archer_c7 için derliyorsanız onun wiki sayfasında fabrika bellenim URL'ini bulabilirsiniz https://downloads.openwrt.org/releases/21.02.1/targets/ath79/generic/openwrt-21.02.1-ath79-generic-tplink_archer-c7-v2-squashfs-factory.bin

'ath79' Hedef'i(Target) söyler, 'generic' Althedefi(Subtarget), 'archer-c7-v2' size belirli cihaz için Hedef profili(Target profile) söyler.

Yapılandırmayı 'generic' althedefine kadarki herşeyi kaldırarak ve 'config.buildinfo' ekleyek indirin:

# OpenWrt 19.07 ve sonrası
wget https://downloads.openwrt.org/releases/21.02.1/targets/ath79/generic/config.buildinfo -O .config
 
# OpenWrt 18.06 ve öncesi
wget https://downloads.openwrt.org/releases/18.06.0/targets/ramips/mt7621/config.seed -O .config

Bu yapılandırmayı kullanırken hedef ve althedef halihazırda seçiliyken hedef profil için seçili olmayacağından eğer sadece belirli bir cihaz için inşa etmek istiyorsanız bunu kendiniz uyarlamanız gerekecek.

İmaj yapılandırma

inşa sistemi yapılandırma arayüzü hedef platform seçimini, derlenecek paketleri, bellenim dosyasına dahil edliecek paketleri, bazı çekirdek seçeneklerini, vs. ele alır.

İnşa sistemi yapılandırma arayüzünü takip eden komutu yazarak başlatın:

make menuconfig

Bu, varolan yapılandırmanızın bağımlılıklarını otomatik günceller, ve şimdi güncellenmiş imajlarınızı inşa etmeye devam edebilirsiniz.

Bir seçenekler listesi göreceksiniz. Bu liste aslında bir ağacın tepesi. Bil liste öğesi seçebilir, ve onun ağacına inebilirsiniz.

Ağaçta bir paket veya özellik aramak için, “/” tuşuna basabilir, ve bir metin için arama yapabilirsiniz. Bu size metnin ağaç içindeki konumlarını verecek.

Çoğu paket ve özellik için üç seçeneğiniz vardır: y, m, n şu şekilde temsil edilir:

Yapılandırmanızı kaydettiğinizde, <inşakökü>/.config dosyası yapılandırmanıza göre yaratılır.

menuconfig'i açtığınızda inşa ayarlarını bu sırayla ayarlamaya gereksineceksiniz (aynı zamanda menuconfig arayüzünde de bu sırayla gösterilir):

  1. Hedef sistem (benzer cihazlar genel kategorisi)
  2. Althedef (Hedef sistem altkategorisi, benzer cihazları gruplar)
  3. Hedef profil (her bir belirli cihaz)
  4. Paket seçimi
  5. İnşa sistemi ayarları
  6. Çekirdek modülleri

Önce cihazınızın Hedef sistemini seçin, sonra doğru Althedefi seçin, sonra cihazınızı desteklenen platformların Hedef profil listesinde bulabilirsiniz.

Örn. tl-wr841n Wi-Fi yönlendirici için hedefi seçip kaydetmek için:

  1. Hedef Sistem → Seç → Atheros AR7xxx/AR9xxx → Seç
  2. Althedef → Seç → Küçük flaşlı cihazlar → Seç
  3. Hedef Profil → Seç → TP-LINK TL-WR841N/ND v11 → Seç
  4. Çık → Evet

config diff dosyasını kullanarak yapılandırma

make menuconfig yanında bir başka yapılandırma yolu bir yapılandırma fark dosyası kullanmaktır. Bu dosya, geçerli yapılandırmayı varsayılan yapılandırmayla karşılaştırarak sadece farkları barındırır. Bir yararı bu dosyayı kendi alt projenizde versiyonlandırarak kontrol edebilmenizdir. Aynı zamanda kaynak güncellemelerinden de daha az etkilenir, çünkü sadece değişiklikleri barındırır.

diff dosyası oluşturma

Derleme yapılandırma değişikliklerini kaydedin.

# Değişiklikleri diffconfig'e yaz
./scripts/diffconfig.sh > diffconfig

Bellenim yapma süreci yapılandırma fark dosyası config.buildinfo'yu otomatik yaratır, 18.06 ve öncesinde config.seed adındaydı.

diff dosyası kullanımı

Bu değişiklikler bir config dosyasına temel oluşturur <inşakökü>/.config. make defconfig çalıştırarak, bu değişiklikler tam yapılandırmaya genişletilecektir.

# Değişiklikleri .config'e yaz
cp diffconfig .config
 
# Tam yapılandırmaya genişlet
make defconfig

Bu değişiklikler yapı dosyasının (<inşakökü>/.config) sonuna da eklenebilir, make defconfig çalıştırarak bu değişiklikler önceki yapılandırmanın üstüne geçer.

# Değişiklikleri .config'in sonuna ekle
cat diffconfig >> .config
 
# Değişiklikleri uygula
make defconfig

Özel dosyalar

Bazı özel yapılandırma dosyaları katmak isterseniz, bunların konacağı doğru yer:

Örneğin, diyelim özel /etc/config/firewall veya özel bir etc/sysctl.conf ile bir imaj istiyorsunuz, öyleyse bu dosyaları şu şekilde yaratın:

Örn. eğer sizdeki <inşakökü>, ~/source ise ve bazı dosyaların bellenim imajının /etc/config dizinine copyalanmasını istiyorsanız, onları koyacağınız doğru yer ~/source/files/etc/config olur.

Sadece gerekli özelleştirmeleri adım adım eklemek için uci-defaults kullanmanız şiddetle önerilir. Bu, versiyonlar arasında değişen, oto-oluşturulan ayarlarla catışmaları en aza intirmeye yardım eder.

Defconfig

make defconfig

bir varsayılan hedev cihaz ve inşa sistemi yapılandırması üretecektir, bağımlılıkların ve inşa ortamı ön gerekliliklerinin kontrolünü de kapsayarak.

Defconfig aynı zamanda .config dosyasından eskimiş öğeleri kaldırır, örneğin varolmayan paketleri ve yapı ayarlarını.

Aynı zamanda bağımlılıkları da kontrol eder ve olası eksik gerekli bağımlılıkları ekleyecektir. Bu kisa bir .config tarifini (diffconfig çıktısı gibi, hatta daha da budanabilir) oluşturma sürecinde kullanılabilecek bir tam .config'e “genişletmek” için kullanılabilir.

Çekirdek yapılandırması (isteğe bağlı)

Bilin ki make kernel_menuconfig komutunun yaptığı değişiklikler inşa ağacının çekirdek yapılandırma şablonlarındadır ve build_dir'ri temizlemek bu değişiklikleri geri almaz. :!: Ayrıca burada değişiklikler yaparsanız resmi depolardan kernel paketleri yükleyemezsiniz.

Normalde bunu yapmaya ihtiyacınız yokken, bunu yapabilirsiniz:

make kernel_menuconfig CONFIG_TARGET=subtarget

CONFIG_TARGET hangi yapılandırmayı düzenlemek istediğinizi seçmenizi sağlar, olası seçenekler: hedef, althedef, ordam.

Değişiklikler şununla gözden geçirilebilir ve geri alınabilirler:

git diff target/linux/
git checkout target/linux/

Kaynak yansıları

'İnşa sistemi ayarları' paket konumlarını değiştirmek için yerel paket kümesini ele almayı kolaylaştıran bazı etkili seçenekler içerir:

  1. Kaynak paketler için yerel yansı
  2. İndirme dizini

İlk seçeneğin durumunda, basitçe paket kaynak kodlarının sunulduğu HTTP veya FTP sunucusunun tam URL'ini girersiniz. İndirme dizini aynı yolla inşa sisteminde (veya ağda) bir yerel dizinin yolu olur. Eğer zifttoplarını sunan bir web/ftp sunucunuz varsa, inşa sistemi Makefile'lada anılan konum(lar)dan indirmeyi denemeden önce bu sunucuyu dener. Benzer şekilde eğer bir yerel 'indirme dizini' inşa sisteminde bulunan, belirtilmişse.

'Çekirdek modülleri' seçeneği belirli bir (standart olmayan) sürücülere ve benzerlerine ihtiyacınız varsa gereklidir - bunlar tipik olarak USB veya belirli ağ arayüzü sunucuları için olan modüller gibi şeyler olacaktır.

Kaynak kodları indirme ve çoklu çekirdek derlemesi

Son make(yap)'ten önce bir make dowload komutu vermek en iyisidir, bu adım tüm bağımlılıklar için kaynak kodunu önden çeker, bu daha çok CPU çekirdeğiyle derlemenize olanak verir, örneğin make -j10, 4 çekirdekli, 8 iş parçacıklı işlemci için harika çalışacaktır.

Eğer OpenWrt'yi çoklu çekirdekte derlemeyi denerseniz ve tüm bağımlılık paketleri için tüm kaynak kodları indirmez iseniz büyük olasılıkla inşa başarısız olacaktır.

make download

İmajları inşa etmek

Şimdi imaj(lar)ı inşa etmek için herşey hazır, ki bu bir tek komutla yapılır:

make

Bu aletdizisini derlemeli, kaynaları capraz-derlemeli, paketleri paketlemeli, ve çakılmaya hazır bir imaj oluşturmalı.

İnşa ipuçları

Ayrıca bakın: Derleyici optimizasyon ince ayarları(ingilizce)

make download tüm bağımlılıklar için tüm kaynak kodu önden indirecek, bu çok çekirdekli derlemenin başarılmasını sağlayacaktır; bu olmadan muhtemelen başarısız olur. make -jN derlemeyi N'e kadar çekirdek veya donanımsal iş parçacıği kullanarak hızlandıracaktır, make-j9 8 çekirdeğin veya donanımsal iş parçacığının tamamını kullanır.

Önden indir ve imajı 4 CPU çekirdeğiyle derleme örneği:

make -j5 download world

''nproc'' komutu ile kullanılabilecek CPU sayısını edinebilirsiniz:

make -j $(nproc) download world

veya nproc+1 ile daha iyi bir makro:

make -j $(($(nproc)+1))

Arkaplanda derleme

Derlerken sisteminizi kullanmaya niyetliyseniz, inşa sürecinin sadece serbest girdi/çıktı ve işlemci kapasitesini kullanmasını şu şekilde sağlayabilirsiniz (4 çekirdekli, 8 iş parçacıklı CPU):

make download
ionice -c 3 nice -n19 make -j9

Tekil paketler inşa etme

Yazılım geliştirirken ve paketlerken, sadece söz konusu paketi inşa edebilecek olmak işlevseldir, örneğin jsonpath paketiyle:

make package/utils/jsonpath/compile V=s

Yeniden inşa etmek için:

make package/utils/jsonpath/{clean,compile} V=s

Paketin hangi beside yer aldığının önemi yoktur, bu sözdizimi yüklü her paket için çalışır.

İnşa hatalarını ayırt etme

Eğer bir nedenle inşa çökerse, hatayı farketmenin en kolay yolu şöyle yapmaktır:

make V=s 2>&1 | tee build.log | grep -i -E "^make.*(error|[12345]...Entering dir)"
 
make V=s 2>&1 | tee build.log | grep -i '[^_-"a-z]error[^_-.a-z]' 
(may not work)

:!: Eğer grep hata verirse, yerine fgrep kullanın.

Üstteki, inşa çıktısının tam ayrıntılı bir kopyasını ~/source/build.log'a kaydeder (standart-çıktıyı standart-hata'ya aktararak) ve hataları (ve fazladan bazı 'error' ifadelerini) ekranda gösterir.

Başka bir örnek:

ionice -c 3 nice -n 20 make -j 2 V=s CONFIG_DEBUG_SECTION_MISMATCH=y 2>&1 | tee build.log

Bu da çift çekirdekli bir işlemcide sadece arkaplan kaynakları kullanarak derlerken, inşa çıktısının tam ayrıntılı bir kopyasını (standart-hata'yı standart-çıktı'ya aktararak) build.log'a kaydeder.

Yukarıda tarif edildiği gibi tonlarca Make çıktısı boyunca ilerlemeye çalışmak zorunda kalmadan probleme odaklanmanın bir yolu da logs dizininde ki karşılık gelen kayıtları kontrol etmektir. Örneğin inşa make[3] -C package/kernel/mac80211 compile ile çökerse, <inşakökü>/logs/package/kernel/mac80211'e gidip orada bulunan compile.txt'e bakın.

Bip uyarısı alma

İşlemcinize bağlı olarak süreç bir süre alacak, veya daha uzun bir süre. Eğer bir akustik uyarı isterseniz, şu yöntemi kullanabilirsiniz:

make ...; echo -e '\a'

İnşa hatalarını yoksay

Eğer herşeyi derliyorsanız (sadece çakılabilir imaj oluşturmak için paketleri değil), muhtemelen bazıları derleme hatalarıyla oluşmasa bile derlemeyi sürdürmek isteyeceksiniz. If you are building everything (not just the packages to make a flashable image), you will probably want to keep building all packages even if some have compile errors and won't be built.

# Derleme hatalarını yoksay
IGNORE_ERRORS=1 make ...
 
# Bellenim birleştirme aşaması dahil tüm hataları yoksay
make -i ...

İmajların konumunu bulma

Başarılı bir inşa sonrası, yeni oluşmuş imaj(lar) yeni yaratılmış <inşakökü>/bin dizini altında bulunabilir. Derlenmiş dosyalar ek olarak hedef platform ve althedefe göre sınıflandırılırlar, örneğin bir ar71xx cihaz için oluşturulmüş bir generic bellenim <inşakökü>/bin/targets/ar71xx/generic dizininde bulunur (ve paket dosyaları <inşakökü>/bin/packages/mips_24kc altında).

Örneğin, eğer <inşakökü> dizininiz ~/source ise, ikilikleriniz ~/source/bin/targets/ar71xx/generic ve ~source/bin/packages/mips_24kc içindedirler.

Ayrıca bakın: Dizin yapısı

Temizlik

Ara sıra inşa ortamınızı temizlemeye ihtiyacınız olabilir.

Oluşturulan parçalar, aletzinciri, inşa araçları ve indirilmiş besi ve kaynaklar seçilip tezmizlenebilir.
Takip edem make-hedef komutları bu iş için kullanışlıdır.
make clean en sık gerek duyulan temizleme işlemidir.

> Cleaned components >
v make argument v
Compiled binaries:
firmware, kernel, packages
Toolchain
(target-specific)
Build tools,
tmp/
Compiled
config tools
.config

feeds, .ccache,
downloaded source files
clean x
targetclean x x
dirclean x x x x
config-clean x
distclean x x x x x x

Clean

make clean

/bin ve /build_dir dizinlerinin içeriğini sil. Bu, alet zincirini kaldırmaz, aynı zamanda .config dosyanızda seçmiş olduğunuzdan başka mimariler/hedefleri temizlemekten sakınır. İnşadan önce make clean yapmak, önceki inşalardan eskimiş parçalar kalmadığından emin olmak için iyi bir pratiktir. Bu her zaman gerekli olmayabilir, ama genel kural olarak inşa kalitesini sağlamaya yardım eder.

TargetClean

make targetclean

Bu make clean'e ek olarak hedef-özgül alet zincirini de temizler. musl veya gcc gibi aletzinciri elemanları değiştiğinde gerekebilir.
Bir make clean yapar ve /build_dir/toolchain* ve /staging_dir/toolchain* (= çapraz-derleme araçları) dizinlerini de siler.

Not: make targetclean 22.03'te kullanıma sunulmuştur ve önceki OpenWrt sürümlerinde bulunmaz.

Dirclean

make dirclean

Bu temel “tam temizlik” operasyonunuzdur. Tüm derlenmiş ikilik dosyalar, araçlar, aletzinciri, tmp/ vs.'yi temizler
/bin, /build_dir, /staging_dir, /toolchain (=çapraz-derleme araçları), /tmp (örneğin paketlerle ilgili veri) ve /logs dizinlerinin içeriğini siler.

Distclean

make distclean

Derlediğiniz veya yapılandırdığınız herşeyi yoketer, ve aynı zamanda tüm indirilmiş besi içeriğini ve paket kaynaklarını siler. :!: Diğer herşeye ek olarak, <inşakökü>/.config inşa yapılandırmanızı siler. Sadece inşa sistemini “fabrika ayarlarına sıfırlama”ya ihtiyacınız varsa kullanın!

Seçici temizlik

Bir süre sonra, o kadar çok nesneyi temizlemek istemeyebilirsiniz, o zaman aşağıdaki komutlardan bazılarını kullanabilirsiniz.

# Linux nesnelerini temizle
make target/linux/clean
 
# base-file paketi nesnelerini temizleme
make package/base-files/clean
 
# luci nesnelerini temizleme
make package/luci/clean

Örnekler

Sorun giderme

İndirme sorunlarına bağlı kaynak kod dosyası eksiği

Önce make dosyasındaki URL yolunun sonunda fazladan bölü olup olmadığını kontrol edin, varsa bölüyü kaldırıp deneyin. Olmazsa kaynak kodu elle indirip dl dizinine koyarak deneyin.

Derleme hataları

Ana kaynağı ve tüm besileri güncelleştirmeyi deneyin, bununla birlikte diğer olası sorunlardan sakının. İlgili meseleleri hata takipçisinde kontrol edin, yoksa paketi, hedefi (CPU, imaj, vs.) ve kod revizyonunu (ana & paket) anarak sorunu raporlayın.

Bazı paketler eski bağımlılıklara takılı kalıp uygun şekilde güncellenmemiş ve derlenmemiş olabilir, ve bu durum derlemenin başlangıcında şuna benzer uyarılarla sonuçlanır:

WARNING: Makefile 'package/feeds/packages/openssh/Makefile' has a dependency on 'libfido2', which does not exist

İnşa ortamı hata veren paketi kaldırıp yeniden yükleyerek kurtarılabilir

$ ./scripts/feeds uninstall openssh
Uninstalling package 'openssh'
$ ./scripts/feeds install openssh
Installing package 'openssh' from packages
Installing package 'libfido2' from packages
Installing package 'libcbor' from packages

WARNING: skipping <package> -- package not selected

make menuconfig çalıştırın ve paketiniz için derlemeyi etkinleştirin. Düzgün çalışması için <*> veya <M> ile işaretlenmiş olmalı

Cihazım için çakılabilir imajlar oluşturulmadı

Cihazınız için bir çakılabilir imaj oluşturmak üzere make komutunu verdiğinizde, hem sysupgrade hem de factory imajları make config veya make menuconfig ile seçmiş olduğunuz tüm cihazlarla bağlantılı kartlar için oluşturulacaktır.

Eğer make çalıştırmak seçmiş olduğunuz cihaz profilleriyle bağlantılı kartlarda biri (veya hepsi) için imaj(lar)ı oluşturmaz ise, olasılıkla çok fazla opsiyon veya paket seçtiniz/etkinleştirdiniz, ve imaj cihazınıza çakmak için fazla büyük oldu.