Benutzer:Torte/KernelSizeDraft
Aus wiki.freifunk.net
Zur Navigation springenZur Suche springenSize reduction
- The kernel can be reduced by about 30KB (17KB by removing unused PHYs, but that could mean, some devices will not work)
- This reduction can lead up to 64KB space, because there is some padding in the MTD partition (that also means, this space can be reduced immediately, if the kernel grows only by a few bytes)
Overwritten settings
- Many kernel options cannot be set by adding them to "config/<target>.config", because they will be overwritten with default values by "make -C $(OPENWRT_DIR) defconfig" (which is required to create the default options for the chosen target).
- Solution: Add a second step after "defconfig" that includes the additional settings
'config out of sync' warning
- Some settings can cause a 'config out of sync' warning
- Cause: The openwrt build system checks the .config by
- 1. feeding the .config file to a script, that simulates the "make menuconfig" step on it:
scripts/config/conf --defconfig=.config -w tmp/.config Config.in
- 2. comparing the results to the originating config and emitting a warning, if there are differences:
scripts/kconfig.pl '>' .config tmp/.config
- 1. feeding the .config file to a script, that simulates the "make menuconfig" step on it:
- Differences are, if you try to disable a setting by adding "FOO=n" (might be necessary, if the "defconfig" step already set this option as "FOO=y"). This disabled setting can be changed to "# FOO is not defined" by the "conf" tool, what has the same effect as "FOO=n", but the comparison from "kconfig.pl" will detect this as a difference.
- Solution: The freifunk Makefile needs a way remove those settings instead of simply adding new ones
- Cause: The openwrt build system checks the .config by
Size: Padding
- Padding: Some settings will not show a size difference on their own.
- Assumption: Happens, if they fit into a not completely used squashfs block.
Size: Not completely reproducable
- Not completely reproducable sizes
- Sometimes, the openwrt build process creates slightly bigger kernels (~500 or ~1000 byte), even if the ".config" file is unchanged. Steps done:
make target/linux/clean make target/linux/compile make package/kernel/linux/compile make target/linux/install
- Usually this can be reverted, by running a full "make" from the Freifunk directory
- A "make" from the Freifunk directory can lead to a slightly bigger (~500 byte) Kernel, than building the kernel from the openwrt directory
Hardware
- Tested on wr841v9
- eth0: OK
- wifi: Probably OK (at least "iw list" looks OK)
- kernel-modules: OK (iptables, etc. got loaded)
Makefile
- Changes to Makefile to include $TARGET.configadd
diff --git a/Makefile b/Makefile index 8d1f447cb3..8036cd655f 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ REVISION=git describe --always FW_DIR=$(shell pwd) OPENWRT_DIR=$(FW_DIR)/openwrt TARGET_CONFIG=$(FW_DIR)/configs/common.config $(FW_DIR)/configs/$(MAINTARGET)-$(SUBTARGET).config +TARGET_CONFIGADD=$(FW_DIR)/configs/$(MAINTARGET)-$(SUBTARGET).configadd FW_TARGET_DIR=$(FW_DIR)/firmwares/$(MAINTARGET)-$(SUBTARGET) VERSION_FILE=$(FW_TARGET_DIR)/VERSION.txt UMASK=umask 022 @@ -131,6 +132,19 @@ $(OPENWRT_DIR)/.config: .stamp-patched $(TARGET_CONFIG) .stamp-build_rev $(OPENW sed -i "/^CONFIG_VERSION_CODE=/c\CONFIG_VERSION_CODE=\"$(FW_REVISION)\"" $(OPENWRT_DIR)/.config $(UMASK); \ $(MAKE) -C $(OPENWRT_DIR) defconfig + # add/undefine values that got overwritten by "make defconfig" + if [ -e $(TARGET_CONFIGADD) ] ; then \ + REM="-- removed" ; \ + cat $(TARGET_CONFIGADD)|while read LINE ; do \ + [[ $$LINE == "#"* ]] && continue ; \ + if [[ $$LINE == *"=-" ]]; then \ + SYM=$${LINE%=-} ; \ + sed -i "s/^$${SYM}=.*/# & $${REM}/" $(OPENWRT_DIR)/.config ; \ + LINE="# $${SYM} is not set" ; \ + fi ; \ + echo "$${LINE}" >> $(OPENWRT_DIR)/.config ; \ + done ; \ + fi \ # prepare openwrt working copy prepare: stamp-clean-prepared .stamp-prepared
ar71xx-tiny.configadd
- Settings tested so far (work-in-progress):
file: ar71xx-tiny.configadd
## -- NET_VENDOR -- ## size:0 #CONFIG_KERNEL_NET_CADENCE=n #CONFIG_KERNEL_NET_VENDOR_3COM=n #CONFIG_KERNEL_NET_VENDOR_8390=n #CONFIG_KERNEL_NET_VENDOR_ADAPTEC=n #CONFIG_KERNEL_NET_VENDOR_AGERE=n #CONFIG_KERNEL_NET_VENDOR_ALTEON=n #CONFIG_KERNEL_NET_VENDOR_AMAZON=n #CONFIG_KERNEL_NET_VENDOR_AMD=n #CONFIG_KERNEL_NET_VENDOR_ARC=n #CONFIG_KERNEL_NET_VENDOR_AURORA=n #CONFIG_KERNEL_NET_VENDOR_BROADCOM=n #CONFIG_KERNEL_NET_VENDOR_BROCADE=n #CONFIG_KERNEL_NET_VENDOR_CAVIUM=n #CONFIG_KERNEL_NET_VENDOR_CHELSIO=n #CONFIG_KERNEL_NET_VENDOR_CISCO=n #CONFIG_KERNEL_NET_VENDOR_DEC=n #CONFIG_KERNEL_NET_VENDOR_DLINK=n #CONFIG_KERNEL_NET_VENDOR_EMULEX=n #CONFIG_KERNEL_NET_VENDOR_EXAR=n #CONFIG_KERNEL_NET_VENDOR_EZCHIP=n #CONFIG_KERNEL_NET_VENDOR_HP=n #CONFIG_KERNEL_NET_VENDOR_I825XX=n #CONFIG_KERNEL_NET_VENDOR_INTEL=n #CONFIG_KERNEL_NET_VENDOR_MARVELL=n #CONFIG_KERNEL_NET_VENDOR_MELLANOX=n #CONFIG_KERNEL_NET_VENDOR_MICREL=n #CONFIG_KERNEL_NET_VENDOR_MICROCHIP=n #CONFIG_KERNEL_NET_VENDOR_MYRI=n #CONFIG_KERNEL_NET_VENDOR_NATSEMI=n #CONFIG_KERNEL_NET_VENDOR_NETRONOME=n #CONFIG_KERNEL_NET_VENDOR_NVIDIA=n #CONFIG_KERNEL_NET_VENDOR_OKI=n #CONFIG_KERNEL_NET_VENDOR_QLOGIC=n #CONFIG_KERNEL_NET_VENDOR_QUALCOMM=n #CONFIG_KERNEL_NET_VENDOR_RDC=n #CONFIG_KERNEL_NET_VENDOR_REALTEK=n #CONFIG_KERNEL_NET_VENDOR_RENESAS=n #CONFIG_KERNEL_NET_VENDOR_ROCKER=n #CONFIG_KERNEL_NET_VENDOR_SAMSUNG=n #CONFIG_KERNEL_NET_VENDOR_SEEQ=n #CONFIG_KERNEL_NET_VENDOR_SILAN=n #CONFIG_KERNEL_NET_VENDOR_SIS=n #CONFIG_KERNEL_NET_VENDOR_SMSC=n #CONFIG_KERNEL_NET_VENDOR_STMICRO=n #CONFIG_KERNEL_NET_VENDOR_SUN=n #CONFIG_KERNEL_NET_VENDOR_SYNOPSYS=n #CONFIG_KERNEL_NET_VENDOR_TEHUTI=n #CONFIG_KERNEL_NET_VENDOR_TI=n #CONFIG_KERNEL_NET_VENDOR_TOSHIBA=n #CONFIG_KERNEL_NET_VENDOR_VIA=n #CONFIG_KERNEL_NET_VENDOR_WIZNET=n #CONFIG_KERNEL_NET_VENDOR_XILINX=n ## -- USB -- ## size:0 #CONFIG_KERNEL_USB=n #CONFIG_KERNEL_USB_ACM=n #CONFIG_KERNEL_USB_COMMON=n #CONFIG_KERNEL_USB_EHCI_ATH79=n #CONFIG_KERNEL_USB_EHCI_HCD=n #CONFIG_KERNEL_USB_EHCI_HCD_PLATFORM=n #CONFIG_KERNEL_USB_EHCI_PCI=n #CONFIG_KERNEL_USB_EHCI_ROOT_HUB_TT=n #CONFIG_KERNEL_USB_EHCI_TT_NEWSCHED=n #CONFIG_KERNEL_USB_LEDS_TRIGGER_USBPORT=n #CONFIG_KERNEL_USB_NET_DRIVERS=n #CONFIG_KERNEL_USB_NET_CDCETHER=n #CONFIG_KERNEL_USB_NET_RNDIS_HOST=n #CONFIG_KERNEL_USB_OHCI_ATH79=n #CONFIG_KERNEL_USB_OHCI_HCD=n #CONFIG_KERNEL_USB_OHCI_HCD_PLATFORM=n #CONFIG_KERNEL_USB_SERIAL=n #CONFIG_KERNEL_USB_SERIAL_OPTION=n #CONFIG_KERNEL_USB_SERIAL_WWAN=n #CONFIG_KERNEL_USB_STORAGE=n ## -- KERNEL COMPRESSION -- ## ignored #CONFIG_KERNEL_HAVE_KERNEL_GZIP=n #CONFIG_KERNEL_HAVE_KERNEL_BZIP2=n #CONFIG_KERNEL_HAVE_KERNEL_LZMA=n #CONFIG_KERNEL_HAVE_KERNEL_XZ=n #CONFIG_KERNEL_HAVE_KERNEL_LZO=n #CONFIG_KERNEL_HAVE_KERNEL_LZ4=n ## -- KERNEL TRACER -- ## ignored #CONFIG_KERNEL_HAVE_FUNCTION_TRACER=y #CONFIG_KERNEL_HAVE_FUNCTION_GRAPH_TRACER=y #CONFIG_KERNEL_HAVE_DYNAMIC_FTRACE=y #CONFIG_KERNEL_HAVE_FTRACE_MCOUNT_RECORD=y #CONFIG_KERNEL_HAVE_SYSCALL_TRACEPOINTS=y #CONFIG_KERNEL_HAVE_C_RECORDMCOUNT=y #CONFIG_KERNEL_TRACING_SUPPORT=y ## -- MISC -- ## no difference #CONFIG_KERNEL_DEBUG_BUGVERBOSE=n #CONFIG_KERNEL_X86_DEBUG_FPU=n #CONFIG_KERNEL_DEBUG_RODATA_TEST=n #CONFIG_KERNEL_X86_MCE=n #CONFIG_KERNEL_X86_MCE_INTEL=n #CONFIG_KERNEL_X86_MCE_AMD=n #CONFIG_KERNEL_MICROCODE=n #CONFIG_KERNEL_MICROCODE_INTEL=n #CONFIG_KERNEL_ACPI=n ## -- FILESYSTEMS -- #CONFIG_KERNEL_JBD2=n ## ignored #CONFIG_KERNEL_FAT_FS=n #CONFIG_KERNEL_VFAT_FS=n ## size:0 CONFIG_KERNEL_CIFS=n ## -- FILESYSTEM ENCODING -- ## ignored #CONFIG_KERNEL_NLS=n #CONFIG_KERNEL_NLS_CODEPAGE_437=n #CONFIG_KERNEL_NLS_ISO8859_1=n #CONFIG_KERNEL_NLS_ISO8859_15=n #CONFIG_KERNEL_NLS_UTF8=n ## ignored #CONFIG_KERNEL_ARCH_HIBERNATION_POSSIBLE=n #CONFIG_KERNEL_ARCH_SUSPEND_POSSIBLE=n ## ignored #CONFIG_KERNEL_HAVE_IDE=n ## size:0 CONFIG_KERNEL_ISDN=n ## ignored #CONFIG_KERNEL_HAVE_KVM=n # -------------------- ## size:1940 CONFIG_KERNEL_EFI_PARTITION=n ## triggers 'config out of sync' (when set to 'n') ## size:4196 CONFIG_KERNEL_ELF_CORE=- CONFIG_KERNEL_COREDUMP=- ####CONFIG_KERNEL_COREDUMP=n ## size:0 CONFIG_KERNEL_ALLOW_DEV_COREDUMP=n # -- PHY -- ## size:17072 CONFIG_KERNEL_AT803X_PHY=n CONFIG_KERNEL_MARVELL_PHY=n CONFIG_KERNEL_MICREL_PHY=n CONFIG_KERNEL_IP17XX_PHY=n ##CONFIG_KERNEL_AR8216_PHY=n ##CONFIG_KERNEL_AR8216_PHY_LEDS=n CONFIG_KERNEL_RTL8306_PHY=n CONFIG_KERNEL_RTL8366_SMI=n CONFIG_KERNEL_RTL8366S_PHY=n CONFIG_KERNEL_RTL8366RB_PHY=n CONFIG_KERNEL_RTL8367_PHY=n CONFIG_KERNEL_INTEL_XWAY_PHY=n ## size:576 CONFIG_KERNEL_NETWORK_FILESYSTEMS=n ## triggers 'config out of sync' (when set to 'n') ## size:5516 CONFIG_KMOD_BATMAN_ADV_DEBUGFS=- CONFIG_PACKAGE_MAC80211_DEBUGFS=- CONFIG_KERNEL_DEBUG_FS=- ## triggers 'config out of sync' (when set to 'n') ## size:576 ## ? EARLY_PRINTK: =y reduced size by ~1000 - not reproducible #CONFIG_KERNEL_DEBUG_INFO=n #CONFIG_KERNEL_EARLY_PRINTK=n #CONFIG_KERNEL_DEBUG_PINCTRL=n #CONFIG_KERNEL_DEBUG_GPIO=n #CONFIG_KERNEL_PROVE_LOCKING=n #CONFIG_KERNEL_DEBUG_KERNEL=n ## automatically set by CONFIG_EXPERT - can be forced off by setting to "n", but that triggers the 'config out of sync' warning ## size:0 CONFIG_KERNEL_DEBUG_KERNEL=- ####CONFIG_KERNEL_DEBUG_KERNEL=n ## size:1240 CONFIG_KERNEL_USB_SUPPORT=n ## triggers 'config out of sync' (when set to 'n') ## size:1124 CONFIG_KERNEL_MAGIC_SYSRQ=-