zoukankan      html  css  js  c++  java
  • OpenWrt's build system

    https://wiki.openwrt.org/about/toolchain

    OpenWrt's build system – About

    The OpenWrt build system is a set of Makefiles and patches that allows users to easily generate both a cross-compilation toolchain and a root filesystem for embedded systems. The cross-compilation toolchain uses musl, a tiny C standard library.

    A compilation toolchain is the set of tools used to compile code for your system. It consists of:

    Using a PC, the compilation toolchain runs on an x86 processor and generates code for a x86 processor. On most Linux systems, the compilation toolchain uses the GNU libc as C standard library. It is called the "host compilation toolchain", and the machine it is running on is called the "host system". The compilation toolchain is provided by the distribution, and has nothing to do with the OpenWrt build system.

    Embedded systems use a different processor and require a cross-compilation toolchain - a compilation toolchain that runs on a host system but that generates code for a target system (and target processor's instruction set architecture (ISA)). For example, if your host system uses x86 and your target system uses MIPS32, the regular compilation toolchain of your host runs on x86 and generates code for x86, while the cross-compilation toolchain runs on x86 and generates code for MIPS32.

    While it is possible to manually configure and compile your own software, OpenWrt's build system automates this process to work on the instruction set architecture of most embedded systems.

    While the OpenWrt's build system was designed for developers, inexperienced users can also use it to easily build their own custom firmware!

    The OpenWrt Makefile has its own syntax, different from the conventional Makefile of Linux make tool. The OpenWrt Makefile defines the meta information of the package, where to download the package, how to compile, where to install the compiled binaries, etc. See How to Build OpenWrt Application Package for more detail.

    OpenWrt build system – Features

    • Makes it easy to port software
    • Uses kconfig (Linux Kernel menuconfig) for configuration of features
    • Provides integrated cross-compiler toolchain (gcc, ld, …)
    • Provides abstraction for autotools (automake, autoconf), cmake, scons
    • Handles standard download, patch, configure, compile and packaging workflow
    • Provides a number of common fixups for badly behaving packages

    OpenWrt build system – Make Targets

    • Offers a number of high level make targets for standard package workflows
    • Targets always in the format "component/name/action", e.g. "toolchain/gdb/compile" or "package/mtd/install"
    • Prepare a package source tree: package/foo/prepare
    • Compile a package: package/foo/compile
    • Clean a package: package/foo/clean

    OpenWrt build system – Build sequence

    1. tools – automake, autoconf, sed, cmake
    2. toolchain/binutils – as, ld, …
    3. toolchain/gcc – gcc, g++, cpp, …
    4. target/linux – kernel modules
    5. package – core and feed packages
    6. target/linux – kernel image
    7. target/linux/image – firmware image file generation

    Underlined TextItalic Text

    Patch management

    • Many packages will not work as-is and need patches to work on the target or to even compile
    • OpenWrt build system integrates quilt for easy patch management
    • Turn package patches into quilt series: make package/foo/prepare QUILT=1
    • Update patches from modified series: make package/foo/update
    • Automatically rebase patches after an update: make package/foo/refresh

    Packaging considerations

    • Main objective is small memory and size footprint
    • Features that make no sense on embedded systems get disabled through configure or are patched out
    • Packages must be compilable regardless of the host system, should be self contained
    • Shipped "configure" scripts are often faulty or unusable in a cross-compile setting, autoreconf or patching needed
    • Build variants and kconfig includes allow for configurable compile-time settings
    • There is no standard way for porting software, in many cases it "just works" but often the package build process needs tweaks

    Documentation

    History

     
  • 相关阅读:
    微信小程序开发工具 POST net::ERR_PROXY_CONNECTION_FAILED 代理问题
    微信小程序 带参调用后台接口 循环渲染页面 wx.request wx:for
    三下乡感悟心得体会
    Mysql通过Adjacency List(邻接表)存储树形结构
    java的List中使用filter过滤出符合特定条件的元素List
    mybatis报表,动态列与查询参数+行列转换
    mysql行转列转换
    spring配置jackson不返回null值
    mybatis动态列名
    查出最新记录
  • 原文地址:https://www.cnblogs.com/merlindu/p/6426965.html
Copyright © 2011-2022 走看看