OpenWRT 编译过程

一、使用Ubuntu编译OpenWRT源码

第一步:安装基础软件

sudo apt-get install subversion g++ zlib1g-dev build-essential git python rsync man-db
sudo apt-get install libncurses5-dev gawk gettext unzip file libssl-dev wget zip time

第二步:克隆代码

git clone https://git.openwrt.org/openwrt/openwrt.git/或者分支  https://github.com/lede-project/source.git
cd openwrt

./scripts/feeds update -a    // 更新最新的包
./scripts/feeds install -a   // 下载所有安装所有包  目录 package/feeds/# 使用feeds.conf.default 默认配置进行软件包的更新与安装

make defconfig               // 检查编译工具是否全,生成.config文件
make menuconfig              // 打开编译菜单

解释 

OpenWRT Feed 机制

参考文档: https://openwrt.org/docs/guide-developer/feeds

在Openwrt系统中,“feed”是一系列的软件包,这些软件包需要通过一个统一的接口地址进行访问。

“feed”软件包中的软件包可能分布在远程服务器上、在svn上、在本地文件系统中或者其他的地方,

用户可以通过一种支持feed机制的协议,通过同一个地址进行访问。

第三步:配置

Target System - 表示目标机器CPU型号

Target Profile - 表示目标机器设备型号

第四步:编译

make V=99    // V = verbose 全部都显示

解释 

clean 命令

make clean      # rm -rf bin  build_dir

make dirclean  # rm -rf bin build_dir staging_dir toolchain logs

make distclean # 删除以上所有文件 , dl 和 .config

对于特定组件进行clean

make target/linux/clean V=s

make package/luci/clean

二、OpenWRT BuildRoot 环境

OpenWRT 源码是由一堆makefile 和 补丁组成的,源代码中不包括任何的源代码或内核代码,使用脚本与

makefile来定义需要下载哪些文件与打上补丁。

代码结构如下

tools - 包含了从网上下载编译OpenWRT所有的编译工具

toolchain - 包含了 kernel 头文件,C库,binutils, debugger等

target - 包含了特定平台的文件,固件镜像和内核构建过程的索引,以及生成编译器个编译工具。

其中linux目录下为各个平台<arch>的相应的内核patches,

配置文件等,imagebuilder目录则扫描如何生成这个平台的固件。源码包就有的。

用来指导如何编译firmware和内核,以及sdk。

package - 在openwrt中,基础的软件包目录为package,扩展的软件包在feeds中,feeds中的软件扩展了openwrt的基本功能,

它将所有的软件链接到package/feeds中。这些软件大多数都是编译成.ipk格式的。这里面有内核模块文件。

有各种软件的源码,以及patch文件和Makefile用来下载源码的。源码包就有。里面是随openwrt主版本就提供的包。

除了用户态的N多模块外,还有kernel目录,用来定义内核模块

feeds -  make之后的新增目录。里面存放的就是按照feeds.conf.default文件中列举的要处理的文件,所展开得到的目录。

目录中存放的东西,和package目录中大致相似。指导如何下载和编译对应模块的)。

scripts - Perl脚本管理OpenWRT包的安装与卸载

dl - 编译工具,目标,package所需要的软件包将从网上下载放到dl目录中

build_dir - 一个临时目录,用来将所有需要编译的软件源码放到这个目录中进行编译。它包括一下三个目录:

build_dir/host:  与编译目标无关的工具的临时文件夹

build_dir/<arch>*: 作为所有目标,package编译的临时目录

build_dir/toolchain-<arch>*:  编译特定体系的交叉编译链的文件夹

staging_dir - 用于存放构建目标系统镜像的工具软件,包括:

staging_dir/host:  宿主系统使用的工具

staging_dir/<arch>*:  目标系统使用的软件软件包

staging_dir/<toolchain-<arch>*: 交叉编译工具链

目录的作用是:build_dir是编译的地方,那么这里就是把build_dir的结果放在了staging_dir目录了。

bin目录 - make之后的新增目录,用来存放make的结果。

比如我是用来编译ramips的,则此目录中会有:ramips子目录,其中又包含:

packages子目录(里面含有各种.ipk文件,以及一个Packages文件用来介绍此目录中的每个ipk文件)和可以烧入路由器的***.bin固件。

Makefile文件:make命令的总入口

rules.mk文件:定义了一系列在make时使用的规则

.config隐藏文件:makemenuconfig后的保存的配置文件。

.config.old隐藏文件:老的.config文件

简言之,编译过程如下:

1. 下载交叉编译工具,内核头文件,C库等。

2. 设置 staging_dir 目录,交叉编译的toolchain会安装到这里。

3. 创建 dl 目录, 所有的第三方源码包会被下载到这里

4. 创建build_dir目录, 用户态工具会被编译到这里

5. 创建 build_dir/target-arch/root 和 目标平台根文件系统

6. 在根文件系统中安装所有包,最后生成的镜象会在bin/目录中

手动编译过程如下

make download 下载所有已选择的软件代码压缩包

1. make tools/install

2. make toolchain/install

3. make target/compile

4. make package/cleanup

5. make package/compile   # 编译包

6. make package/install      #  安装包

7. make package/preconfig

8. make target/install

9. make package/index

单独编译软件包

make package/tcpdump/clean  清除编译生成的文件

make package/tcpdump/prepare 进行编译准备

make package/tcpdump/configure  根据设置选项进行配置并生成Makefile

make package/tcpdump/compile   根据生成的Makefile进行编译

make package/tcpdump/install  生成安装包

三、OpenWRT In Qemu

1. 配置编译文件

make menuconfig

Target System -  选择 MIPS Malta CoreLV board(qemu)

Subtarget - Little Endian

Target Profile - Default

Target Image - 选择 ext4

Global Build Settings - 默认即可

2. 编译 make V=99

3. 编译完成后,在目录 bin/target/下有一个malta目录

ubuntu:~/openwrt/bin/targets/malta/le$ ls -l
total 272708
-rw-r--r-- 1 ubuntu ubuntu       329 Sep 10 13:39 config.seed
-rw-r--r-- 1 ubuntu ubuntu      1959 Sep 10 13:59 openwrt-malta-le-default.manifest
-rw-r--r-- 1 ubuntu ubuntu 268435456 Sep 10 13:59 openwrt-malta-le-root.ext4
-rw-r--r-- 1 ubuntu ubuntu   2727322 Sep 10 13:59 openwrt-malta-le-uImage-gzip
-rw-r--r-- 1 ubuntu ubuntu   1940771 Sep 10 13:59 openwrt-malta-le-uImage-lzma
-rwxr-xr-x 1 ubuntu ubuntu   6125260 Sep 10 13:59 openwrt-malta-le-vmlinux.elf
drwxr-xr-x 2 ubuntu ubuntu      4096 Sep 10 13:59 packages
-rw-r--r-- 1 ubuntu ubuntu       556 Sep 10 14:00 sha256sums
ubuntu:~/openwrt/bin/targets/malta/le$ 

4. 拷贝 openwrt-malta-le-root.ext4 与 openwrt-malta-le-vmlinux.elf 文件

5.  安装软件

sudo apt-get install qemu-kvm qemu virt-manager virt-viewer libvirt-bin

6. 运行

sudo qemu-system-mipsel -M malta -hda openwrt-malta-le-root.ext4 -kernel openwrt-malta-le-vmlinux.elf -nographic -append "root=/dev/sda console=tty50"

原文地址:https://www.cnblogs.com/duomingxing/p/10687061.html

时间: 2024-10-01 21:43:50

OpenWRT 编译过程的相关文章

OpenWRT 编译教程

1.安装Ubuntu 到 http://www.ubuntu.org.cn/desktop/get-ubuntu/download/ 下载,版本随便,我选的是10.10 32位版.安装过程就不说了,图形化安装,而且是中文版,连安装都搞不定的,可以关闭本页面了.可以安装在虚拟机里,也可以安装在物理机了,官方建议有条件的最好安装在物理机上,大概是说虚拟机有时会有不可预料的情况,但装在虚拟机里的人多得是了.题外话:安装过程中某一步设置用户名密码时,我是选择了自动登录,因为懒得每次都输密码登录,反正只是

嵌入式Linux下开源路由器OpenWRT编译与下载

*************************************************************************************************************************** 作者:EasyWave                                                                   时间:2014.10.26 类别:Linux应用-开源路由器OpenWRT的编译与下载    

OpenWrt编译

OpenWrt编译简单过程1,OpenWrt编译环境准备sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev 2,下载OpenWrtbarkfile or trunk 源码mkdir openwrt && cd openwrtsvn

2.4、uboot配置和编译过程详解

2.4.1.uboot主Makefile分析1 2.4.1.1.uboot version分析 (1)uboot版本号分为3个级别: VERSION:主版本号 PATCHLEVEL:次版本号 SUBLEVEL:再次版本号 EXTRAVERSION:另外附加的版本信息 这四个用.隔开共同构成了最终的版本号. (2)Makefile中版本号最终生成了一个变量U_BOOT_VERSION,这个变量记录了Makefile中配置的版本号 (3)include/version_autogenerated.h

FFmpeg在Linux下安装编译过程

转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52402759 今天介绍下FFmpeg在Linux下安装编译过程,用的是CentOS, 总体过程比较顺利,就是在ffmpeg等的时间稍长点.没什么技术难点.仅当记录. 关于FFmpeg FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包

编译过程中,termcap.h 文件找不到路径 licli.a终于生成

编译过程中,termcap.h      文件找不到路径 查看是linux  源码下找不到termcap.h文件 安装了所有关于*cap*的源码包也不起作用 今天终于解决了这个问题,搜termcap.h  发现一篇文章,如下 ----------------------------------------------------------------------------------------- 安装minicom2.3出现termcap.h错误解决方法 2010-05-06 17:12:

GCC与编译过程

GCC与编译过程   GCC(GNU Compiler Colletion),GUN编译器套装,是一套由GNU开发的编程语言编译器.Linux系统下的GCC编译器实际上是调用其他不同的工具来完成预处理.编译.汇编和链接工作. 一.编译过程 在计算机的眼里,只有1和0.不幸的是,我们用C语言写出来的代码,计算机无法直接看明白.所以一个程序如果需要被计算机执行,那么就必须翻译成能被计算机读懂并执行的1和0.实现这一结果的过程,我们称之为编译. 编译包括以下步骤:预处理.编译.汇编和链接.具体过程如下

Hive SQL的编译过程

Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用.美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据存储和分析.Hive的稳定性和性能对我们的数据分析非常关键. 在几次升级Hive的过程中,我们遇到了一些大大小小的问题.通过向社区的咨询和自己的努力,在解决这些问题的同时我们对Hive将SQL编译为MapReduce的过程有了比较深入的理解.对这一过程的理解不仅帮助我们解决了一些Hive的bug,也有利于我们优化Hive SQL

C程序编译过程浅析【转】

转自:http://blog.csdn.net/koudaidai/article/details/8092647 前几天看了<程序员的自我修养——链接.装载与库>中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧. 我现在一般都是用gcc,所以自然以GCC编译hellworld为例,简单总结如下. hello.c源代码如下: ?[Copy to clipboard] C 1 2 3 4 5 6 [c] view plaincopy <span style=&qu