OpenWRT 编译过程

1、使用Ubuntu编译OpenWRT源码

第一步:安装基础软件python

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

 

第二步:克隆代码linux

复制代码
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 // 打开编译菜单
复制代码

 

解释 git

OpenWRT Feed 机制github

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

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

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

用户能够经过一种支持feed机制的协议,经过同一个地址进行访问。tcp

 

第三步:配置ide

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

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

 

 

 

2、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  生成安装包

 

 

 

3、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"

相关文章
相关标签/搜索