Difference between revisions of "OpenWRT Build System for CentOS 7"

Wiki.TerraBase.info
Jump to navigation Jump to search
m
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/ and ~/openwrt/feeds/packages/admin
***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 full TAR package as an example
***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
** Copy the ~/openwrt/package/feeds/packages/tar/Makefile
***make menuconfig
** Edit the PKG_SOURCE
****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 12:55, 7 September 2020

How does one create a "build system" (AKA Cross Compile / Cross-Compile / CrossCompile Build System) for OpenWRT?

Other Tutorials

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)

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)
  • SDK
    • Download the SDK and uncompress it (which is equivalent to the git clone command above)
    • tar xf WhatEverFileName (be sure one is in the ~ directory)
    • ./scripts/feeds update -a
    • ./scripts/feeds install WhatEverPackageName
  • Package Building
  • Headers