How are official OpenWrt builds generated?

I need to rebuild this image.
Its breaking the device. I wold like to fix it.
How was that image built? (automatic?)
And how do i have to proceed?

The images on the OpenWrt download site are built by a system of "buildbot" hosts.

You also can build from source on a Linux host (including a VM).

Do you know what is "broken" at this time?

1 Like

no not jet. I have described it here with some logs but i do not think its usefull...
I can try to crosscompile it, but i may need some guideance...

For a particular image
http://downloads.openwrt.org/releases/18.06.2/targets/ramips/mt76x8/openwrt-18.06.2-ramips-mt76x8-LinkIt7688-squashfs-sysupgrade.bin

you will find config.seed in same location
http://downloads.openwrt.org/releases/18.06.2/targets/ramips/mt76x8/

http://downloads.openwrt.org/releases/18.06.2/targets/ramips/mt76x8/config.seed

You need to follow documentation here to start:
https://openwrt.org/docs/guide-developer/start

1 Like

Adding to mbo20's great post, make sure that you de-select building of "everything" from config.seed as that really only works on a buildbot machine.

I believe the lines are at least

CONFIG_TARGET_MULTI_PROFILE=y
CONFIG_ALL_KMODS=y
CONFIG_TARGET_ALL_PROFILES=y
CONFIG_BUILDBOT=y
CONFIG_SDK=y

Personally, I find it easier to start with an empty .config, then go into make menuconfig and select my target, board, and the packages that I want to add.

I wonder why buildbots are building tools and toolchain each compile? can't they reuse those?

Part of continuous testing is to "start clean" every time. The build chain is different for each architecture; a cross-compiler built for MIPS can't compile ARM code, for example.

Each target/sub-target's kernel and kernel modules are built only once, as they are used for all devices for that target/sub-target. Similarly, packages for a given architecture are only built once. (At least as I understand it.)

This thread is related to this one.
I found a description how to compile a newer openWRT firmware specialy for Linkit 7688 details. here is the link

I made my first build! :laughing: I think it even worked, but some features are missing.
As I started my first time to test how such builds work, it's not a surprise that its not complete.

I followed the official Mediatek Build guide and also used the feeds from there but changed the openwrt version from 15.05:
git clone git://git.openwrt.org/15.05/openwrt.git
to latest:
git clone https://git.openwrt.org/openwrt/openwrt.git
that now seams to not work properly with the older Mediatek feeds.

The prebuilt openwrt binary has a more or less working config. How can i rebuild that openwrt version?

In particular i'm unsure how to apply the feeds.
Mediatek does it like this:
echo src-git linkit https://github.com/MediaTek-Labs/linkit-smart-7688-feed.git >> feeds.conf

The doc says to choose in the menuconfig, but I think its somehow possible to take the config that is used from the automatic buildsystem and build locally the same.

Can somebody tell me how I can clean up the previous Build and rebuild with new config? :pray:

  1. This feed is for 15. Is that what your have? ( https://github.com/MediaTek-Labs/linkit-smart-7688-feed )

You need to do ./scripts update | install steps otherwise your feed echo will not be present in menuconfig.... feeds are generally setup pre build... so you may need to distclean etc. etc. or just start from scratch with the echo before feeds update && install.

... maybe make a new thread.... we are in the wrong spot re: using builtroot VS official build generation.

That archive and 15.05 are both outdated.

The Linkit 7688 is supported by current OpenWrt without additional repositories.

It "just builds" as per the generic instructions in the source, or on the OpenWrt wiki.

No, not directly. That config.seed is intended for automatic build on the buildbot system. It will likely fail if used as-is on a stand-alone build machine as it builds all kernel modules and all packages, as well as the image builder and SDK.

The easiest is to use make menuconfig and select the board. That will give you a baseline selection, but without LuCI. Within the menuconfig screens, select LuCI > Collections > luci-ssl-nginx (or luci, if you don't have enough flash for HTTP-S support) and you've got a selection of packages in the image that is comparable, but appropriate for local builds.

2 Likes

true. Here I will continue...

1 Like

..getting back because of a general question regarding how to get changes in to the automatic built stock openwrt distribution for my device.

In my new opend thread @drcyberg recommends me to change a line in package/mac80211/files/lib/wifi/mac80211.sh
Is that a solution that I will be able to commit to the automated build system and applied only to the Linkit Smart 7688? I do not want to affect all devices using the mac80211.sh file...
Possible?

You can’t change a common package for just a single board.

You can change it for your local builds though. It will impact all your builds, but you can manage the change if you change boards.

What does CONFIG_TARGET_MULTI_PROFILE=y do?

Building images for multiple devices, see Compile for multiple target profiles

1 Like

But is it correct for example if I want to build the imagebuilder for ipq40xx for all targets:

CONFIG_TARGET_${{ env.TARGET }}=y
CONFIG_TARGET_ALL_PROFILES=y
CONFIG_TARGET_MULTI_PROFILE=y
CONFIG_IB=y
CONFIG_ALL_KMODS=y
CONFIG_ALL_NONSHARED=y
IGNORE_ERRORS=y
make defconfig

Especially, do I need both options?

CONFIG_TARGET_ALL_PROFILES=y
CONFIG_TARGET_MULTI_PROFILE=y

or just

CONFIG_TARGET_ALL_PROFILES=y

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.