OpenWRT Build System for CentOS 7: Difference between revisions
		
		
		
		Jump to navigation
		Jump to search
		
mNo edit summary  | 
				|||
| Line 1: | Line 1: | ||
How does one create a "build system" (AKA Cross Compile / Cross-Compile / CrossCompile Build System) for OpenWRT?  | How does one create a "build system" (AKA Cross Compile / Cross-Compile / CrossCompile Build System) for OpenWRT?  | ||
== Other Tutorials ==  | ==Other Tutorials==  | ||
*General Guide for building firmware: https://openwrt.org/docs/guide-user/additional-software/beginners-build-guide  | *General Guide for building firmware: https://openwrt.org/docs/guide-user/additional-software/beginners-build-guide  | ||
| Line 16: | Line 16: | ||
**Creating Perl modules: https://github.com/Entware/Entware-ng/wiki/Self-installation-of-perl-modules  | **Creating Perl modules: https://github.com/Entware/Entware-ng/wiki/Self-installation-of-perl-modules  | ||
== Environment ==  | ==Environment==  | ||
*Build System for Cross-Compiling: CentOS 7.8 (There seem to be some missing packages in CentOS 8, so CentOS 7.8 was chosen)  | *Build System for Cross-Compiling: CentOS 7.8 (There seem to be some missing packages in CentOS 8, so CentOS 7.8 was chosen)  | ||
| Line 38: | Line 38: | ||
***http://bin.entware.net/mipselsf-k3.4/  | ***http://bin.entware.net/mipselsf-k3.4/  | ||
== Steps (as of 9.2020 for the above Environment) ==  | ==Steps (as of 9.2020 for the above Environment)==  | ||
All of the below assumes one is storing files in the user's home directory.  | All of the below assumes one is storing files in the user's home directory.  | ||
OpenWRT recommends NOT compiling as a root users.  To bypass this restriction;  | OpenWRT recommends NOT compiling as a root users.  To bypass this restriction;  | ||
* export FORCE_UNSAFE_CONFIGURE=1 (the ''export'' command adds the variable to the current user session, it will not persist if logging off, confirm with ''printenv'' or ''export -p'')  | *export FORCE_UNSAFE_CONFIGURE=1 (the ''export'' command adds the variable to the current user session, it will not persist if logging off, confirm with ''printenv'' or ''export -p'')  | ||
=== Obtain Source Files from OpenWRT ===  | ===Obtain Source Files from OpenWRT===  | ||
* git clone -b openwrt-19.07 <nowiki>https://github.com/openwrt/openwrt.git</nowiki> (downloads the 19.07 branch of OpenWRT, which also includes the latest version, 19.07.03)  | *git clone -b openwrt-19.07 <nowiki>https://github.com/openwrt/openwrt.git</nowiki> (downloads the 19.07 branch of OpenWRT, which also includes the latest version, 19.07.03)  | ||
** To see repository, in web browser: https://git.openwrt.org/openwrt/  | **To see repository, in web browser: https://git.openwrt.org/openwrt/  | ||
** git tag (essentially shows available versions to build)  | **git tag (essentially shows available versions to build)  | ||
** git branch (shows local versions of OpenWRT downloaded)  | **git branch (shows local versions of OpenWRT downloaded)  | ||
** git branch -r (shows versions available for download)  | **git branch -r (shows versions available for download)  | ||
* Feeds  | *Feeds  | ||
** Documentation: https://openwrt.org/docs/guide-developer/feeds  | **Documentation: https://openwrt.org/docs/guide-developer/feeds  | ||
** ~/openwrt/feeds.conf.default  | **~/openwrt/feeds.conf.default  | ||
** ./scripts/feeds update -a (A script from OpenWRT to makes sure all files are up to date)  | **./scripts/feeds update -a (A script from OpenWRT to makes sure all files are up to date)  | ||
** ./scripts/feeds (by itself, no "sub-commands", shows available options)  | **./scripts/feeds (by itself, no "sub-commands", shows available options)  | ||
** ./scripts/feeds list -n (shows main categories of feeds)  | **./scripts/feeds list -n (shows main categories of feeds)  | ||
*** Should show these Names: packages, luci, routing, and telephony  | ***Should show these Names: packages, luci, routing, and telephony  | ||
** ./scripts/feeds list -r OneOfTheFeedNames (shows the available packages, names are equivalent to what would be found with ''opkg list'')  | **./scripts/feeds list -r OneOfTheFeedNames (shows the available packages, names are equivalent to what would be found with ''opkg list'')  | ||
** Example: ./scripts/feeds install htop (an enhanced version of top)  | **Example: ./scripts/feeds install htop (an enhanced version of top)  | ||
*** Files will be downloaded here: ~/openwrt/package/feeds/packages/   | ***Files will be downloaded here: ~/openwrt/package/feeds/packages/, which are symbolic links to: ~/openwrt/feeds/packages/admin  | ||
* Checkout (not needed if a single branch like 19.07 is downloaded)  | *Checkout (not needed if a single branch like 19.07 is downloaded)  | ||
** git checkout openwrt-19.07 (if multiple branches have been downloaded, switch to using this one)  | **git checkout openwrt-19.07 (if multiple branches have been downloaded, switch to using this one)  | ||
** Oddly, this command is documented using the latest version of OpenWRT as of 9.2020, but it doesn't work as expected: git checkout v19.07.03 (from https://openwrt.org/docs/guide-developer/build-system/use-buildsystem)  | **Oddly, this command is documented using the latest version of OpenWRT as of 9.2020, but it doesn't work as expected: git checkout v19.07.03 (from https://openwrt.org/docs/guide-developer/build-system/use-buildsystem)  | ||
* SDK  | *SDK  | ||
** Download the SDK and uncompress it (which is equivalent to the ''git clone'' command above)  | **Download the SDK and uncompress it (which is equivalent to the ''git clone'' command above)  | ||
*** URL for SDK (look towards the bottom of the page for SDK): https://downloads.openwrt.org/releases/19.07.3/targets/mvebu/cortexa9/    | ***URL for SDK (look towards the bottom of the page for SDK): https://downloads.openwrt.org/releases/19.07.3/targets/mvebu/cortexa9/  | ||
*** Don't worry about the name ending in x86_64 as this indicates the platform that the cross compiling will take place on.  | ***Don't worry about the name ending in x86_64 as this indicates the platform that the cross compiling will take place on.  | ||
** tar xf WhatEverFileName (be sure one is in the ~ directory)  | **tar xf WhatEverFileName (be sure one is in the ~ directory)  | ||
** ./scripts/feeds update -a  | **./scripts/feeds update -a  | ||
** ./scripts/feeds install WhatEverPackageName  | **./scripts/feeds install WhatEverPackageName  | ||
* Package Building  | *Package Building  | ||
** Sources  | **Sources  | ||
*** https://openwrt.org/docs/guide-developer/package-policies  | ***https://openwrt.org/docs/guide-developer/package-policies  | ||
*** https://openwrt.org/docs/guide-developer/packages  | ***https://openwrt.org/docs/guide-developer/packages  | ||
** Using the   | ***https://openwrt.org/docs/guide-developer/helloworld/chapter3  | ||
*** make menuconfig  | **Using the HTOP package as an example  | ||
*** disable all the Global settings to "build all"  | ***Make a Manifest: https://openwrt.org/docs/guide-developer/helloworld/chapter3 (can copy similar to the below)  | ||
*** Utilities (look in the Makefile file in the define Package/tarcustom (or WhatEverName) for where the package will be)  | ***Find a "template" (similar existing package) and copy it: cp -R ~/openwrt/package/feeds/packages/htop ~/openwrt/package/feeds/packages/htopcustom (it's a symbolic link, so cp -R), modify and make changes  | ||
***make menuconfig  | |||
****PKG_NAME and PKG_VERSION need to change at minimum to get it to show up as a new option  | |||
* Headers  | ***disable all the Global settings to "build all"  | ||
** Potential Locations;  | ***Utilities (look in the Makefile file in the define Package/tarcustom (or WhatEverName) for where the package will be)  | ||
*** ~/openwrt/build_dir/target-arm_cortex-a9+vfpv3-d16_musl_eabi/linux-mvebu_cortexa9/linux-4.14.195/user_headers/include  | *Headers  | ||
** Sources  | **Potential Locations;  | ||
*** https://forum.openwrt.org/t/how-to-obtain-headers-for-openwrts-kernel/50737/6  | ***~/openwrt/build_dir/target-arm_cortex-a9+vfpv3-d16_musl_eabi/linux-mvebu_cortexa9/linux-4.14.195/user_headers/include  | ||
*** https://openwrt.org/docs/guide-developer/packages  | **Sources  | ||
***https://forum.openwrt.org/t/how-to-obtain-headers-for-openwrts-kernel/50737/6  | |||
***https://openwrt.org/docs/guide-developer/packages  | |||
Revision as of 20:55, 7 September 2020
How does one create a "build system" (AKA Cross Compile / Cross-Compile / CrossCompile Build System) for OpenWRT?
Other Tutorials
- General Guide for building firmware: https://openwrt.org/docs/guide-user/additional-software/beginners-build-guide
- Start of detailed Information: https://openwrt.org/docs/guide-developer/build-system/start
 - Pre-requisites for a : https://openwrt.org/docs/guide-developer/build-system/install-buildsystem
 - Some additional granular detail for working with specific versions: https://openwrt.org/docs/guide-developer/build-system/use-buildsystem
 
 - Build environment tips: https://openwrt.org/docs/guide-developer/env
 - SDK (for compiling specific packages): https://openwrt.org/docs/guide-developer/using_the_sdk
- URL for SDK (look towards the bottom of the page for SDK): https://downloads.openwrt.org/releases/19.07.3/targets/mvebu/cortexa9/
 
 - Third Party Site with nice information (Old, but this article itself notes even older OpenWRT documentation): http://www.acme-dot.com/building-openwrt-14-07-barrier-breaker-on-ubuntu-and-os-x/ (Don't follow the instructions as it GIT won't work anymore with non-SSL URLs)
 - Entware Tips (The don't apply directly, but have some good tips if read from the context of OpenWRT)
- Native Compilation: https://github.com/Entware/Entware-ng/wiki/Using-gcc-%28native-compilation%29
 - Compiling Packages from Source: https://github.com/Entware/Entware-ng/wiki/Compile-packages-from-sources
 - Creating Perl modules: https://github.com/Entware/Entware-ng/wiki/Self-installation-of-perl-modules
 
 
Environment
- Build System for Cross-Compiling: CentOS 7.8 (There seem to be some missing packages in CentOS 8, so CentOS 7.8 was chosen)
 - OpenWRT 19.07.03 (Linux Kernel 4.14.180)
 - Linksys WRT3200ACM Platform Information (see here for additional information)
- Marvell Armada 385 88F6820 SoS (System on a Chip)
 - Manufacturer: Marvell, MVEBU (Marvell Embedded Business Unit)
 - CPU Information
- ARM Family: Cortex-A (32-bit)
 - ARM Architecture: ARMv7-A
 - ARM Core: Cortex-A9
 - OpenWRT Target and Package Details
- MVEBU (Marvell Embedded Business Unit)
- Targets Available: cortexa53, cortexa72, cortexa9
 - Marvell Armada 37x/38x/XP (Armada 3700LP and Armada 7k/8k are 64 bit versions)
 
 
 - MVEBU (Marvell Embedded Business Unit)
 - Equivalent DD-WRT / Entware Target and Package reference
- ARMv7sf-k3.2: ARM version 7 with linux kernel 3.2
 
 
 - Sources:
 
 
Steps (as of 9.2020 for the above Environment)
All of the below assumes one is storing files in the user's home directory.
OpenWRT recommends NOT compiling as a root users. To bypass this restriction;
- export FORCE_UNSAFE_CONFIGURE=1 (the export command adds the variable to the current user session, it will not persist if logging off, confirm with printenv or export -p)
 
Obtain Source Files from OpenWRT
- git clone -b openwrt-19.07 https://github.com/openwrt/openwrt.git (downloads the 19.07 branch of OpenWRT, which also includes the latest version, 19.07.03)
- To see repository, in web browser: https://git.openwrt.org/openwrt/
 - git tag (essentially shows available versions to build)
 - git branch (shows local versions of OpenWRT downloaded)
 - git branch -r (shows versions available for download)
 
 - Feeds
- Documentation: https://openwrt.org/docs/guide-developer/feeds
 - ~/openwrt/feeds.conf.default
 - ./scripts/feeds update -a (A script from OpenWRT to makes sure all files are up to date)
 - ./scripts/feeds (by itself, no "sub-commands", shows available options)
 - ./scripts/feeds list -n (shows main categories of feeds)
- Should show these Names: packages, luci, routing, and telephony
 
 - ./scripts/feeds list -r OneOfTheFeedNames (shows the available packages, names are equivalent to what would be found with opkg list)
 - Example: ./scripts/feeds install htop (an enhanced version of top)
- Files will be downloaded here: ~/openwrt/package/feeds/packages/, which are symbolic links to: ~/openwrt/feeds/packages/admin
 
 
 - Checkout (not needed if a single branch like 19.07 is downloaded)
- git checkout openwrt-19.07 (if multiple branches have been downloaded, switch to using this one)
 - Oddly, this command is documented using the latest version of OpenWRT as of 9.2020, but it doesn't work as expected: git checkout v19.07.03 (from https://openwrt.org/docs/guide-developer/build-system/use-buildsystem)
 
 - SDK
- Download the SDK and uncompress it (which is equivalent to the git clone command above)
- URL for SDK (look towards the bottom of the page for SDK): https://downloads.openwrt.org/releases/19.07.3/targets/mvebu/cortexa9/
 - Don't worry about the name ending in x86_64 as this indicates the platform that the cross compiling will take place on.
 
 - tar xf WhatEverFileName (be sure one is in the ~ directory)
 - ./scripts/feeds update -a
 - ./scripts/feeds install WhatEverPackageName
 
 - Download the SDK and uncompress it (which is equivalent to the git clone command above)
 - Package Building
- Sources
 - Using the HTOP package as an example
- Make a Manifest: https://openwrt.org/docs/guide-developer/helloworld/chapter3 (can copy similar to the below)
 - Find a "template" (similar existing package) and copy it: cp -R ~/openwrt/package/feeds/packages/htop ~/openwrt/package/feeds/packages/htopcustom (it's a symbolic link, so cp -R), modify and make changes
 - make menuconfig
- PKG_NAME and PKG_VERSION need to change at minimum to get it to show up as a new option
 
 - disable all the Global settings to "build all"
 - Utilities (look in the Makefile file in the define Package/tarcustom (or WhatEverName) for where the package will be)
 
 
 - Headers
- Potential Locations;
- ~/openwrt/build_dir/target-arm_cortex-a9+vfpv3-d16_musl_eabi/linux-mvebu_cortexa9/linux-4.14.195/user_headers/include
 
 - Sources
 
 - Potential Locations;