OpenWrt学习(二)源码配置

源码

下载 openwrt 官方的源码的步骤是
        1) ubuntu 终端输入如下命令,下载源码。
                git clone -b chaos_calmer git://github.com/openwrt/openwrt.git
                等待代码下载完成,下载完成后,将在当前目录下生成一个名为"openwrt"的文件夹,里面存放的就是 OpenWrt 的源码了。
        2) 在 ubuntu 终端中输入以下命令:
                cd openwrt //进入 openwrt 主目录
               ./scripts/feeds update -a //更新安装包
                ./scripts/feeds install -a //安装更新

配置

在芯片平台确定的情况下,一般会从平台供应商或者网上拿到到源码,这时候首先要做的就是配置成自己平台板,然后进行编译。

1、拷贝默认或者项目的配置文件到openwrt根目录下覆盖.config文件。

2、make menuconfig进行项目的选项配置。

3, make kernel_menuconfig进行内核选项配置。

平台

一般是以某一款芯片平台,以imx6ul为例,linux目录下是支持的平台类型:

 项目

在一个芯片平台下面开发几个不同项目

源码目录

bin          build_dir  Config.in  docs   feeds.conf.default  key-build      LICENSE   package  rules.mk  staging_dir  tmp        tools
BSDmakefile  config     dl         feeds  include             key-build.pub  Makefile  README   scripts   target       toolchain
[yubo.wang@localhost openwrt]$ ls target/linux/imx6ul/
agriculture     项目目录
Foton-4GTBOX    项目目录
files           平台内核的通用修改文件
base-files      平台根文件系统的通用文件          
image           平台编译镜像打包文件
modules.mk
Makefile  
patches-4.9.11  平台内核的通用补丁,项目中没有内核补丁,说明只能解决bug不能提交功能修改,如果要改功能呢?
[yubo.wang@localhost openwrt]$ ls target/linux/imx6ul/Foton-4GTBOX/
base-files-NULL  项目特定的根文件系统目录文件
    etc  lib  mnt
config-4.9.11    内核配置文件
profiles  
target.mk

1) scripts
    存放了一些脚本,使用了 bash,Python,perl 等多种脚本语言.编译过程中,用于第三方软件包管理的 feeds 文件也是在这个目录当中.在编译过程中,使用到的脚本也统一放在这个目录中。
2) tools
    编译时,主机需要使用一些工具软件,tools 里包含了获取和编译这些工具的命令.软件包里面有 Makefile 文件,有的还包含了 patch.每个 Makefile 当中都有一句$(eval $(call HostBuild)),这表明编译这个工具是为了在主机上使用的.
3) config
    存放着整个系统的配置文件
4) docs
    包含了整个宿主机的文件源码的介绍, 里面还有 Makefile 为目标系统生成 docs.使用make -C docs/可以为目标系统生成文档.
5) toolchain
    做过嵌入式的童鞋应该都知道交叉编译链,这个文件中存放的就是编译交叉编译链的软件包.包括:binutils,gcc,libc 等等.
6) target
    openwrt 的源码可以编译出各个平台适用的二进制文件,各平台在这个目录里定义了firmware 和 kernel 的编译过程。
7) package
    存放了 openwrt 系统中适用的软件包,包含针对各个软件包的 Makefile。 openwrt 定义了一套 Makefile 模板.各软件参照这个模板定义了自己的信息,如软件包的版本、下载地址、
    编译方式、安装地址等。在二次开发过程中,这个文件夹我们会经常打交道。 事实上,通过./scripts/feed update -a 和./scripts/feed install -a 的软件包也会存放在这个目录之中。
8) include
    openwrt 的很多 Makefile 都存放在这里。文件名为 *.mk 。这里的文件上是在 Makefile里被 include 的,类似于库文件.这些文件定义了编译过程.
9) 其他
    主要目录就是前面提及的 8 个,剩下的是单个文件.
    Makefile
    在顶层目录执行 make 命令的入口文件.
    rules.mk
    定义了 Makefile 中使用的一些通用变量和函数
    Config.in
    在 include/toplevel.mk 中我们可以看到,这是和 make menuconfig 相关联的文件.
    feeds.conf.default
    这个文件中可以配置下载第三方一些软件包时所使用的地址
    LICENSE & README
    即软件许可证和软件基本说明.其中 README 描述了编译软件的基本过程和依赖文件.
    至此我们把原始目录大致浏览了一遍,再读者编译一次 openwrt 源码后,会出现一些新
    的目录, 下面我们看看这些生成的目录,如下图所示
10) feeds
    openwrt 的附加软件包管理器的扩展包索引目录.有点绕,简单来说就是下载管理软件包
    的.默认的 feeds 下载有 packages、 management、 luci、 routing、 telephony。如要下载其他的
    软件包,需打开源码根目录下面的 feeds.conf.default 文件,去掉相应软件包前面的#号,然
    后更新源:
    ./scripts/feeds update -a
    安装下载好的包:
    ./scripts/feeds install -a
11) build_dir
    在前面的原始目录中,我们提到了 host工具,toolchain 工具还有目标文件.openwrt将在这
    个目录中展开各个软件包,进行编译.所以这个文件夹中包含 3 个子文件夹:
    --host
    在该文件夹中编译主机使用的工具软件
    --toolchain-XXX
    在该文件夹中编译交叉工具链
    --target-XXX
    在此编译目标平台的目标文件,包括各个软件包和内核文件.openwrt 系统的 linux 解压后
    的源码在
    “openwrt/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/linux-3.18.
    29/”目录下。
12) bin
    保存编译完成后的二进制文件,包括:完整的 bin 文件,所有的 ipk 文件.
13) dl
    在编译过程中使用的很多软件,刚开始下载源码并没有包含,而是在编译过程中从其他服
    务器下载的,这里是统一的保存目录
14) staging_dir
    用于保存在 build_dir 目录中编译完成的软件.所以这里也和 build_dir 有同样的子目录结
    构. 比如,在 target-XXX 文件夹中保存了目标平台编译好的头文件,库文件.在我们开发自己的
    ipk 文件时,编译过程中,预处理头文件,链接动态库,静态库都是到这个子文件夹中.
15) tmp
    从名字来看,是临时文件夹.在编译过程中,有大量中间临时文件需要保存,都是在这里.
16) logs
    这个文件夹,有时可以看到,有时没有.这是因为这个文件夹保存的是,编译过程中出错的
    信息,只有当编译出错了才会出现.我们可以从这里获取信息,从而分析我们的软件编译为什
    么没有完成.
 

OpenWrt专栏计划:

1、源码下载,配置,编译

不同芯片平台间的下载源码方式,linux arm and ramips

2、镜像文件,规则和编译目录文件说明

3、烧写包下载方式,启动方式

4、编译一个简单的helloword ipk,ipk解压原理,安装理解

5、启动打印分析,内存,flash,sd卡挂载说明

6、uboot源码下载编译和烧写,不同平台间的差异

7、luci原理和分析理解,网页界面的编写和增加新的功能

8、通过4G网络联网原理分析

暂时这么多,计划2月开始写,也是自己对openwrt的学习和加深理解

猜你喜欢

转载自blog.csdn.net/TSZ0000/article/details/86689679
今日推荐