Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== İnşa sistemi kullanımı ====== <WRAP important> * 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. </WRAP> <WRAP important> 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** [[https://github.com/openwrt/openwrt/issues/9545|buradaki (ing)]] "workaround" başlıklı kısımdaki talimatları takip edin. </WRAP> Bir inşa sistemi [[tr:docs:guide-developer:toolchain:install-buildsystem|kurulumu]] sonrası tipik oluşturma adımları: <code bash> # 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 </code> İnşa adımları aşağıda detaylı açıklanmışlardır. ===== Kaynakları indirmek ===== Takip eden komutu kullanarak Git deposunu klonla. <code bash> git clone https://git.openwrt.org/openwrt/openwrt.git [<buildroot>] </code> Olası meseleler: * ''-bash: git: command not found'' - inşa sistemi kurulumunu doğrula. * ''fatal: destination path 'openwrt' already exists and is not an empty directory.'' - inşakokü dizinini taşı/adlandır. ===== Kaynakları güncellemek ===== :!: Geliştirme dalındaki kaynaklar sık değişir. En son kaynaklarla çalışmanız önerilir. <code bash> git pull </code> Olası meseleler: * ''-bash: cd: openwrt: No such file or directory'' - inşakökü dizinini doğrula. * ''fatal: not a git repository (or any of the parent directories): .git'' - çalışma dizinini klonlanmış inşakökü'ne değiştir. ===== Besileri güncelleme ===== Eskimiş oldukları durumda, besiler için son güncellemeleri çek. <code bash> ./scripts/feeds update -a </code> İndirilmiş paketleri ''make menuconfig'' içine kullanılabilir kıl. <code bash> ./scripts/feeds install <package_name> ./scripts/feeds install -a </code> Olası meseleler: * ''-bash: ./scripts/feeds: No such file or directory'' - çalışma dizinini klonlanmış inşaköküne değiştir. * <code> Can't exec "make": No such file or directory at ./scripts/feeds line 22. Unsupported version of make found: make Checking 'gcc'... failed. Checking 'working-gcc'... failed. Checking 'g++'... failed. Checking 'working-g++'... failed. Checking 'ncurses'... failed. Checking 'awk'... failed. Checking 'unzip'... failed. Checking 'bzip2'... failed. Checking 'wget'... failed. Checking 'python'... failed. Checking 'python3'... failed. Checking 'file'... failed. </code> - inşa sistemi kurulumunu doğrula. ==== Bir yerel besi yaratma ==== - ''<inşakökü>'' dizininizi, openwrt kaynaklarını github'dan git klonlama ile hazırlayın (örneğin kendi çatalınızdan).\\ - 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. - 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ı: [[tr:docs:guide-developer:packages|Paketleri oluşturma]] & [[tr:docs:guide-developer:helloworld:chapter3|Kendi uygulamanızdan bir paket yaratma]]\\ - ''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.\\ - Ş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.\\ - Paketinizi derleyin.\\ ''Make menuconfig'' menüsünde paketi seçin\\ ''make package/my_package/{clean,compile}'' ile inşa edin\\ Daha fazlası: [[tr:docs:guide-developer:toolchain:single.package|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. <code bash> # Dalları listeleme git branch -a # OpenWrt ana dalını kullan git checkout master # OpenWrt 21.02 dalını kullan git checkout openwrt-21.02 </code> :!: 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. <code bash> # Etiketleri getirip listeleme git fetch -t git tag # OpenWrt 21.02.1 sürümünü kullanma git checkout v21.02.1 </code> ==== Özet seçimi ==== Belirli bir kod revisyonu özeti seçme ve tüm besileri aynı güne eşitleme. <code bash> 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 </code> ==== Resmi inşa yapılandırmasını kullanma ==== OpenWrt'yi [[https://forum.openwrt.org/t/compiling-openwrt-exactly-like-the-official-one/23214|varsayılan resmi imajlarla aynı paketleri]] barındıracak şekilde derleme: Örneğin [[toh:tp-link: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: <code bash> # 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 </code> 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 ===== ==== Menuconfig ==== **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: <code bash> make menuconfig </code> 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: * **y**'ye basmak **<*>** gömülü etiketini ayarlar\\ Bu paket derlenecek ve bellenim imajına dahil edilecektir. * **m**'ye basmak **<M>** paket etiketini ayarlar\\ Bu paket derlenecek ama bellenim imajına dahil edilmeyecektir, örn. bellenim imaj dosyasını cihaza çaktıktan sonra opkg ile yüklenmek üzere. * **n**'ye basmak **< >** hariç etiketini ayarlar\\ Kaynak kodu işlenmeyecek. 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): - Hedef sistem (benzer cihazlar genel kategorisi) - Althedef (Hedef sistem altkategorisi, benzer cihazları gruplar) - Hedef profil (her bir belirli cihaz) - Paket seçimi - İnşa sistemi ayarları - Çekirdek modülleri Önce cihazınızın **Hedef sistem**ini seçin, sonra doğru **Althedef**i seçin, sonra cihazınızı desteklenen platformların **Hedef profil** listesinde bulabilirsiniz. Örn. [[tr:toh:tp-link:tl-wr841n]] Wi-Fi yönlendirici için hedefi seçip kaydetmek için: - Hedef Sistem -> Seç -> Atheros AR7xxx/AR9xxx -> Seç - Althedef -> Seç -> Küçük flaşlı cihazlar -> Seç - Hedef Profil -> Seç -> TP-LINK TL-WR841N/ND v11 -> Seç - Çı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. <code bash> # Değişiklikleri diffconfig'e yaz ./scripts/diffconfig.sh > diffconfig </code> Bellenim yapma süreci yapılandırma fark dosyası ''config.buildinfo'''yu [[commit>?p=openwrt/openwrt.git;a=commit;h=454021581f630d5d04afeb8ff6581c1bda295c87|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. <code bash> # Değişiklikleri .config'e yaz cp diffconfig .config # Tam yapılandırmaya genişlet make defconfig </code> 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. <code bash> # Değişiklikleri .config'in sonuna ekle cat diffconfig >> .config # Değişiklikleri uygula make defconfig </code> ==== Özel dosyalar ==== Bazı özel yapılandırma dosyaları katmak isterseniz, bunların konacağı doğru yer: * **''<inşakökü>/files/''** Örneğin, diyelim özel ''/etc/config/firewall'' veya özel bir ''etc/sysctl.conf'' ile bir imaj istiyorsunuz, öyleyse bu dosyaları şu şekilde yaratın: * ''**<inşakökü>/files/**etc/config/firewall'' * ''**<inşakökü>/files/**etc/sysctl.conf'' Ö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 [[tr:docs:guide-developer:uci-defaults|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 ==== <code bash> make defconfig </code> 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: <code bash> make kernel_menuconfig CONFIG_TARGET=subtarget </code> 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: <code bash> git diff target/linux/ git checkout target/linux/ </code> === 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: - Kaynak paketler için yerel yansı - İ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. <code bash> make download </code> ===== İmajları inşa etmek ===== Şimdi imaj(lar)ı inşa etmek için herşey hazır, ki bu bir tek komutla yapılır: <code bash> make </code> 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: [[https://forum.openwrt.org/viewtopic.php?id=35323|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 -j''**N** 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: <code bash> make -j5 download world </code> [[https://unix.stackexchange.com/questions/208568/how-to-determine-the-maximum-number-to-pass-to-make-j-option|''nproc'' komutu ile kullanılabilecek CPU sayısını edinebilirsiniz]]: <code bash> make -j $(nproc) download world </code> veya ''nproc+1'' ile daha iyi bir makro: <code bash> make -j $(($(nproc)+1)) </code> === 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): <code bash> make download ionice -c 3 nice -n19 make -j9 </code> === 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: <code bash> make package/utils/jsonpath/compile V=s </code> Yeniden inşa etmek için: <code bash> make package/utils/jsonpath/{clean,compile} V=s </code> 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: <code bash> 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) </code> :!: 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: <code bash> ionice -c 3 nice -n 20 make -j 2 V=s CONFIG_DEBUG_SECTION_MISMATCH=y 2>&1 | tee build.log </code> 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: <code bash> make ...; echo -e '\a' </code> === İ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. <code bash> # Derleme hatalarını yoksay IGNORE_ERRORS=1 make ... # Bellenim birleştirme aşaması dahil tüm hataları yoksay make -i ... </code> ===== İ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: [[tr:docs:guide-developer:toolchain:buildsystem_essentials#dizin_yapisi|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 ==== <code bash> make clean </code> ''/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 ==== <code bash> make targetclean </code> 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 ==== <code bash> make dirclean </code> 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 ==== <code bash> make distclean </code> 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. <code bash> # Linux nesnelerini temizle make target/linux/clean # base-file paketi nesnelerini temizleme make package/base-files/clean # luci nesnelerini temizleme make package/luci/clean </code> ===== Örnekler ===== * https://github.com/mwarning/openwrt-examples * https://forum.openwrt.org/viewtopic.php?pid=129319#p129319 * https://forum.openwrt.org/viewtopic.php?id=28267 ===== Sorun giderme ===== * [[tr:docs:guide-developer:toolchain:install-buildsystem#İnsa_sistemi_kurulumu|sıradışı çevresel değişkenler]]den sakının. * İlkin ''make V=sc'' biçiminde çalıştırarak veya çıktı kayıtlarını etkinleştirerek sorunla ilgili daha çok bilgi edinin. * ''make'' opsiyonlarıyla ilgili daha çok okuyun: [[tr:docs:techref:buildroot|İnşakökü Teknik referans]]. ==== İ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 [[:bugs|hata takipçisi]]nde 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: <code> WARNING: Makefile 'package/feeds/packages/openssh/Makefile' has a dependency on 'libfido2', which does not exist </code> İnşa ortamı hata veren paketi kaldırıp yeniden yükleyerek kurtarılabilir <code> $ ./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 </code> ==== 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. Last modified: 2022/05/05 00:13by sorcun