gk7205v200, gk7605v100: build the crypto modules in, and go back under the squashfs cap - #2437
Conversation
…fs cap
gk7205v200_lite does not produce an image on master: 5136KB against a 5120KB
cap, over by 16KB. It is not in any recent PR's board matrix, and gcc-compat --
which builds this board and nothing else -- last ran on master on 2026-09-13,
so nothing surfaced it until a .mk change re-triggered that workflow.
The eleven kernel crypto modules are 89,572 bytes of the rootfs:
gcm 16604 ccm 12544 drbg 11840 gf128mul 9844 jitterentropy_rng 9740
ctr 6940 hmac 5456 seqiv 4640 echainiv 4172 ghash-generic 4020
crc32_generic 3772
None is loaded by a script. The kernel crypto API resolves them through its own
request_module(), which is why #2397 and #2433 built them in rather than
deleting them, and why deleting them would break wireguard and mac80211 rather
than save anything. #2433 made exactly this change for gk7205v300, gk7202v300
and hi3519v101; gk7205v200 has the same seventeen symbols still at =m and was
simply missed.
Measured on a clean build, since Buildroot's target/ keeps a .ko a previous
build installed and an incremental rebuild reports the old size:
master this branch
uImage 1808KB/2048KB 1821KB/2048KB
rootfs.squashfs 5136KB/5120KB 5112KB/5120KB (over by 16KB -> 8KB free)
The kernel takes 13KB of the 89KB and still has 227KB spare; the rootfs saves
24KB.
That leaves 8KB, and the build says so -- "headroom warning: rootfs.squashfs
has 8KB left of 5120KB". This gets the board building again; it does not give
it room. The sweep that found this also confirmed there is no dead weight left
in its module set: every other non-vendor module is named by a script or
dependency-loaded by one that is.
PR Summary by QodoBuild gk7205v200 crypto into kernel to restore image builds
AI Description
Diagram
High-Level Assessment
Files changed (1)
|
Code Review by Qodo
1. Camera behavior remains unverified
|
gk7605v100_lite is over its 5120KB cap by 16KB on master, exactly as gk7205v200_lite was, and for the same reason: nothing had built it lately. It surfaced in this PR's own matrix, which widened to the whole family because these board configs share BR2_OPENIPC_SOC_FAMILY="gk7205v200" -- the board has its own gk7605v100.generic.config, untouched by the previous commit. Its config carries the identical seventeen CONFIG_CRYPTO_* symbols at =m. Same change, same reasoning as the commit before this one.
The 2026-09-18 master matrix (run 35375141337, at 49908b5) failed on three boards, each at 5124KB against the 5120KB squashfs cap -- over by exactly 4KB. All three were reproduced locally from a clean worktree at that commit before anything here was changed, and the cause is the same fleet-wide drift in the unpinned majestic and majestic-webui refs that #2404, #2410, #2421, #2433, #2437 and #2440 have each answered on other boards. #2437 landed one day ago and left these two Goke boards 8KB of headroom while saying in as many words that the drift would take them again; it did. hi3516cv200 shipped two Realtek drivers waiting on firmware the image does not carry. rtl8192cu asks for rtlwifi/rtl8192cufw*.bin, and rtl8xxxu -- with RTL8XXXU_UNTESTED off, so RTL8723AU only -- asks for rtlwifi/rtl8723aufw*.bin. The only Wi-Fi blobs this board installs are mediatek/mt7601u.bin and rtlwifi/rtl8188eufw.bin, so neither could finish probing, and nothing loads them either: /etc/wireless/usb, dispatched by S40network from the wlandev U-Boot variable, is the one entry point and names mt7601u and 8188eu. That was 350KB of .ko (rtl8xxxu 104KB, rtl8192cu 90KB, rtlwifi 85KB, rtl8192c-common 54KB, rtl_usb 15KB), and RTLWIFI_DEBUG=y is why rtlwifi.ko was as large as it was. Same argument as #2404 made for hi3519v101. R8188EU stays, and the line is drawn where the firmware is: rtl8188eufw.bin is what drivers/staging/rtl8188eu/hal/fw.c requests by name, and R8188EU is the only symbol on this board selecting WIRELESS_EXT and WEXT_PRIV, which the out-of-tree drivers a camera may add still need. This is #2410 in reverse -- there the same driver went, because that board had no wext consumer left. gk7205v200 and gk7605v100 are out of free levers: #2376 took their SCSI stack, #2421 stripped the modules they cannot load, #2437 built their crypto helpers in, and every module left is named by a script or dependency-loaded by one that is. So they take the cheaper half of the one lever #2420 found remaining, the same half #2440 gave gk7205v300. Only cfg80211 moves; mac80211 and mt7601u stay modules, because moving those too would trade "one commit from red on rootfs" for the same on uImage. The cost is worth stating: cfg80211 is now permanently resident, so every camera pays for the wireless core whether a dongle is ever plugged in or not. The load path survives being built in -- modules.builtin now lists kernel/net/wireless/cfg80211.ko, which busybox modprobe consults, and mac80211.ko's modules.dep line no longer names it. Measured locally, clean builds of both the before and the after -- an incremental rebuild keeps the old .ko in target/ and reports a nonsensical saving, which is the trap #2437 documented: hi3516cv200_lite rootfs 5124 -> 5012KB uImage 1656 -> 1657KB gk7205v200_lite rootfs 5124 -> 5044KB uImage 1821 -> 1876KB gk7605v100_lite rootfs 5124 -> 5044KB uImage 1799 -> 1855KB None of the three prints a headroom warning any more.
Problem
Two boards do not produce an image on master:
gk7205v200_liteandgk7605v100_lite, each over its 5120KB squashfs cap by exactly 16KB.gk7605v100_litewas not in the original diagnosis — it surfaced in this PR'sown matrix, which widened to the whole goke family because these board configs
share
BR2_OPENIPC_SOC_FAMILY="gk7205v200". It has its owngk7605v100.generic.config, untouched by the first commit here, and is red onmaster for the same reason: nothing had built it lately.
gk7205v200_lite5136KB against a5120KB squashfs cap — over by 16KB, and
repackfails the build.It went unnoticed because nothing looks at this board. It is not in the ci-matrix
selection for any recent change, and
gcc-compat— which buildsgk7205v200_liteand nothing else, and only when a diff touches
Makefile,general/package/*.mkorgeneral/package/all-patches/— last ran on master on2026-09-13. I hit it because #2436 edits a
.mk, which re-triggered thatworkflow after four days.
Reproduced from a clean worktree at
origin/masterwith no changes of any kind,so this is not a side effect of that PR:
What this changes
The eleven kernel crypto modules are 89,572 bytes of rootfs:
None of them is modprobed by anything. The kernel crypto API resolves them
through its own
request_module(), so they cannot simply be dropped — doing sowould break wireguard and mac80211 and save nothing. Building them in is the
shape #2397 used and #2433 repeated for
gk7205v300,gk7202v300andhi3519v101.gk7205v200has the identical seventeen symbols still at=m;it was simply missed.
The diff is those seventeen
=m→=y, nothing else.Hardware tested on
No physical camera — and unlike a driver or script change, that matters less
here than usual: this moves code from a
.kotovmlinuxwithout altering whatthe code is. The lab does have a gk7205v200 board, which is the reason to say
what was not done rather than imply otherwise: I did not flash it.
What is verified is the thing the PR is for — that the board builds again, and
by how much.
Evidence
Both numbers from clean builds (
make cleanfirst). This matters: Buildroot'starget/keeps a.kothat an earlier build installed, so an incrementalrebuild after this change still ships all eleven modules and reports the old
size. My first attempt measured exactly that and showed a nonsensical 0-byte
saving against a kernel that had visibly grown.
Before,
origin/master, clean worktree:After, this branch, clean build:
The kernel takes 13KB of the 89KB and still has 227KB spare. The rootfs saves
24KB and the board builds.
target/lib/modules/4.9.37/kernel/crypto/no longer exists on the built image.gk7605v100_lite, same change to its own config, measured by this PR's CIrather than locally — before, from this PR's first run:
after, from the run that went green:
Identical arithmetic: 24KB off the rootfs, 12KB onto a kernel with 249KB spare.
All seven boards the matrix selected are green:
gk7202v300andgk7205v300still carry their seventeen crypto symbols asmodules and are deliberately left alone: both build with room today, and
converting a board that is not broken would be churn.
What this does not do
It leaves 8KB on each board, and the build says so for both. This gets them
building; it does not give them room, and the fleet-wide majestic drift that has taken six boards
over cap in #2421 and three in #2433 will take this one again.
There is no easy next 24KB in its module set. Every remaining non-vendor module
is either named by a script or dependency-loaded by one that is — checked
individually, including the five that look consumerless to a
grepand are not:usbnet,cdc_ether,mii,usb_wwanandusb-serial-simpleare pulled inby
option/usbserial/rndis_host, whichgeneral/overlay/etc/wireless/modemdoes modprobe. The USB gadget set that #2421/#2433 harvested is already gone
from this image.
Scope
general/package/all-patches/linux/— this is a board kernel config, which CLAUDE.md places in this repositorygeneral/overlay/or in a sharedload_<vendor>script hardcodes a value specific to my boardLD_PRELOAD, and no binaries that cannot be rebuilt from source