build_embed_linux_system

基于OpenWRT构建系统平台

https://blog.csdn.net/weixin_42105114/article/details/136889861

dir_analysis

和buildroot类似,openwrt也是基于busybox系统,通过自动化脚本,配置文件的方式进行管理系统功能,最终构建镜像的

download

# 安装必要的依赖包
# 注意新版本Ubuntu移除了python2的支持,可以使用手动安装或者自行编译安装
sudo apt-get install subversion g++ zlib1g-dev build-essential git python python3 libncurses5-dev gawk gettext unzip file libssl-dev wget libelf-dev ecj fastjar java-propose-classpath asciidoc bzip2 libz-dev libtool

# 下载openwrt源码
wget https://codeload.github.com/openwrt/openwrt/tar.gz/refs/tags/v19.07.2

# 更新软件源(需要科学外网, 否则可能会失败)
./scripts/feeds update -a
./scripts/feeds install -a

config

# 配置
make menuconfig

# 修改芯片(选择i.MX6)
# Target System
Target System > Freescale i.MX6

# Target Images
ext4
Root filesystem partition size(in MB)> 1024

# Global build settings
Preferred standard c++ library >  libstdc++

# Advanced configuration options
Target Options > c Library implementation > glibc
Target Options > GCC compiler version > gcc 8.x
Use external kernel tree > "/home/freedom/sdk/arm/kernel"

修改配置选项。

target/linux/imx6/Makefile

# 修改指定i.mx6ull对应内核中对应的CPU型号
CPU_TYPE:=cortex-a7
CPU_SUBTYPE:=vfpv4
KERNEL_PATCHVER:=4.14

build

下面开始正式的编译流程,执行命令

# 编译
make V=1

issue-1

缺少宏定义。

error: missing binary operator before token “(“ 55 | #elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384

// build_dir/host/m4-4.1.18/lib/c-stack.c
#if ! HAVE_STACK_T && ! defined stack_t
typedef struct sigaltstack stack_t;
#endif
#ifndef SIGSTKSZ
# define SIGSTKSZ 16384
// #elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384
// /* libsigsegv 2.6 through 2.8 have a bug where some architectures use
//    more than the Linux default of an 8k alternate stack when deciding
//    if a fault was caused by stack overflow.  */
// # undef SIGSTKSZ
// # define SIGSTKSZ 16384
#endif

next_chapter

返回目录

直接开始下一章节说明: 基于armbian构建系统平台