1 (edytowany przez kmaras77 2022-05-04 22:53:00)

Temat: Jak oskryptować make kernel_menuconfig ?

Hejka

Mam problem z moim środowiskiem budowania obrazów openwrt.

Od jakiegoś czasu buduję swoje obrazy dla kilku moich routerów i każdy z nich ma inny zestaw pakietów - i z tym sobie radzę skryptem.
Moje środowisko jest oskryptowane tak, że wszystkie konfiguracje budowania, dodatkowe pliki i moje skrypty leża w innym katalogu i nie straszne mu jest odtwarzanie całości z GITa, ba nawet jest wskazane, bo się wtedy zawsze buduje bez błędów.

W skrócie każdy router ma swój zestaw plików wgrywanych do /base-files/ oraz plik .config z wymaganymi pakietami.
polecenie
make -j $(nproc) defconfig download clean world
jest wykonywane dla każdego zestawu plików i ładnie aktualizuje .config do pożądanej zawartości i się ładnie buduje.
Finalnie kopiuję sobie pliki sysupgrade.bin dla każdego routera indywidualnie i wszystko działa pięknie.

Problem pojawił się, gdy z jednego routera zrobiłem tvheadend serwer i trzeba dla niego zrobić inny kernel, niż dla reszty.
Mam plik .config dla kernela i jak zrobię
make kernel_config, potem load mój plik i save do .config - kompiluje się image z odpowiednimi driverami.


Sama podmianka pliku .config w /openwrt/build_dir/target-mipsel_24kc_musl/linux-ramips_mt7621/linux-5.10.113
nie działa. plik jest nadpisywany defaultem w czasie kompilacji.

Muszę ten konkretny image robić ręcznie.

Jednak chciałbym to oskryptować tak, aby cron mi budował co tydzień nowe obrazy, tak jak dla reszty routerów.

Widziałem @Cezary, że Ty masz dodatkowe swoje pakiety z zależnościami aby zbudować moduły jądra. A ja chce zrobić jądro z wgranymi konkretnymi, dodatkowymi driverami.
Jak to zrobić?

2

Odp: Jak oskryptować make kernel_menuconfig ?

Bo w złym miejscu to robisz. Konfig kernela składany jest z kilku miejsc:
- target/linux/generic/config* - ogólne opcje
- np. target/linux/ath79/config* - specyficzne dla danej architektury
- np. target/linux/ath79/generic/config-defaiult - specyficzne dla danego subtarget
- oraz opcje z poszczególnych modułów zawartych w package/kernel/linux/modules/*.mk
- oraz opcje z poszczególnych programów

To wszystko jest kopiowane w jedno i masz gotowy konfig kernela. Więc jeżeli chcesz zrobić swoje to albo robisz samodzielnie Makefile pakietu i robisz tam opcje kernela i powstają paczki, albo bardziej prymitywnie - dodajesz swoje opcje np. do target/linux/ath79/generic/config-defaiult

Wtedy przy budowaniu on to przemieli, zrobi konfig i skompiluje całość.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.