openWRT自学---基于backfire版本,分析其Make命令的执行过程和各阶段的主要产物
准备阶段:从SVN下载backfire的编译环境(位置是:svn co svn://svn.openwrt.org/openwrt/branches/backfire),然后按照openWRT的要求,下载一堆编译用到的工具(通过make defconfig可以发现自己的OS缺啥,然后就补啥)。这样得到的是一个编译环境,在openWRT中,这个环境就是BuildRoot。
我们进入这个编译环境(简称:TOPDIR),接下来就是一步步的编译过程了:
1.构建“Package种子”,即
./scripts/feeds update -a ---- 这一步的结果是:产生$(TOPDIR)/feeds目录,存放的就是执行feeds.conf.default文件后的结果:从指定svn中下载的文件。
和
./scripts/feeds install -a ---- 这一步的结果是:在package目录中多了一个feeds目录,里面存放的子目录是到$(TOPDIR)/feeds目录的链接
两步动作
注意:在TOPDIR/Makefile中,有如下定义:
# update all feeds, re-create index files, install symlinks
package/symlinks:
$(SCRIPT_DIR)/feeds update -a
$(SCRIPT_DIR)/feeds install -a
那么,可以想见,上述两个也可以合并为一步,即make package/symlinks
2.make menuconfig,这一步就是我们熟悉的选择模块的可视化界面了。其对应的脚本是:toplevel.mk中的“menuconfig:” 目标
由于我编译的是针对BRCM53xx,故选择Target System为BRCM47xx/53xx。在目标平台选择好后,
下一步一定要先对Luci进行选择:选择要支持哪些配置页面。因为对Luci的选择就会一并将该页面对应的模块功能一起选择了(这是我在编译中总结的经验,防止模块之前的依赖关系出现偏差)。
其他的就自己选择吧。最后是save。
--- 这一步的结果是:产生了TOPDIR/.config文件(这是一个隐藏文件)。这个config文件中主要定义了:目标平台选择,linux内核版本选择(CONFIG_LINUX_2_6_32=y),一些default功能,目标文件系统(CONFIG_TARGET_ROOTFS_SQUASHFS=y),基本编译方法(Gcc的版本,uClibc的版本,BINUTILS的版本,等等),其他基本都是针对TOPDIR/package目录中实际选择要编译的各个package的选择定义了。可见,这个.config文件将用户态的东西都包括了,但是没有内核态的东西。内核态的config文件在哪里呢?
3.make kernel_menuconfig
首先,这不是openWRT编译固件的过程中必须要配置的一步。其对应的脚本是:toplevel.mk中的“kernel_menuconfig:”目标
这一步产生的是针对内核的配置界面,可以配置内核相关的功能。配置的结果,保存在:build_dir/linux-brcm47xx/linux-2.6.32.27/.config中
4.也是最后一个命令:make
这一步会执行一个N长时间的编译过程,其主要工作包括:
compile the toolchain -- 编译工具链
then crosscompile the sources with this toolchain --- 然后,利用编译出的工具链,来交叉编译源文件
create opkg-packages --- 创造可以通过opkg命令传入到CPE的软件包
generate a firmware image file ready to be flashed. --- 产生一个用于烧入CPE的firmware(疑问:这个firmare本身不带bootloader吧?)
上述过程,主要是通过主Makefile中的world: 目标来实现的
openWRT自学---基于backfire版本,分析其Make命令的执行过程和各阶段的主要产物的更多相关文章
- openWRT自学---针对backfire版本的主要目录和文件的作用的分析整理
特别说明:要编译backfire版本,一定要通过svn下载:svn co svn://svn.openwrt.org/openwrt/branches/backfire,而不能使用http://dow ...
- 结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程
结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程 目录 结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程 一. 实验准备 二. 实验过程 I 分析中断上下文的切换 ...
- Spring AOP 源码分析 - 拦截器链的执行过程
1.简介 本篇文章是 AOP 源码分析系列文章的最后一篇文章,在前面的两篇文章中,我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在我们的得 ...
- openWRT自学计划安排
目标:充分理解openwrt的框架构成,能够在openwrt框架下实现:开发新程序,修改现有程序,修改内核,修改boot.为此,制定如下计划: 一.如何在openwrt上做开发 1.编译出一个BRCM ...
- Spark源码分析(一)-Standalone启动过程
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3858065.html 为了更深入的了解spark,现开始对spark源码进行分析,本系列文章以spark ...
- Spring IOC 容器源码分析 - 创建单例 bean 的过程
1. 简介 在上一篇文章中,我比较详细的分析了获取 bean 的方法,也就是getBean(String)的实现逻辑.对于已实例化好的单例 bean,getBean(String) 方法并不会再一次去 ...
- OpenFlow协议1.0及1.3版本分析
OpenFlow是SDN控制器和交换之间交流的协议,在SDN领域有着十分重要的地位. OpenFlow协议发展到现在已经经过了1.0.1.3.1.4等版本.其中1.0和1.3版本使用的是最为广泛的. ...
- Hadoop数据分析平台项目实战(基于CDH版本集群部署与安装)
1.Hadoop的主要应用场景: a.数据分析平台. b.推荐系统. c.业务系统的底层存储系统. d.业务监控系统. 2.开发环境:Linux集群(Centos64位)+Window开发模式(win ...
- 快速升级openwrt的linux内核版本
一.分析 要升级openwrt的linux内核版本,关键是要制作内核配置文件 二.内核配置文件制作方法 2.1当前openwrt对应的某个开发板有对应的内核配置文件,比如此时的openwrt的linu ...
随机推荐
- 十面阿里 Java 程序员,最终拿下阿里 P6 offer!
转子:https://mp.weixin.qq.com/s/RkMxPbm8E99-rTZKmvBy6Q 今天介绍小编的一个朋友,他现今有四年开发经验了,前前后后为了进阿里面试十次(阿里旗下—蚂蚁金服 ...
- Entity Framework part1
First Demo实体框架Entity Framework,简称EFEF是微软推出的基于Ado.Net的数据库访问技术,是一套ORM框架底层访问数据库的实质依然是ado.net是一套orm框架,即框 ...
- opencv在vc2010 express下环境搭建方法笔记+空白通用工程(已编译测试通过)(提供下载)
opencv在VC2010 express版本下的环境搭建可以参见下面的wiki,这里面讲的非常清楚. http://wiki.opencv.org.cn/index.php/VC_2010_Expr ...
- Swift中获取相册图片与保存到相册
关于这个网上目前位置记录的资料比较少,记录一下这个坑 获取相册图片 1: var iPC = UIImagePickerController() 2: iPC.sourceType = UIImage ...
- UML及其StarUML介绍
http://blog.csdn.net/monkey_d_meng/article/details/6005764 http://www.uml.org.cn/oobject/200901203.a ...
- [shell编程] sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory
转载地址:http://www.cnblogs.com/pipelone/archive/2009/04/17/1437879.html 在Linux中执行.sh脚本,异常/bin/sh^M: bad ...
- profiler
推荐C++ 的profiler 用于GPU CPU 综合测试 FramePro http://www.puredevsoftware.com/ 可以在进度条上拉时间 查看GPU CPU bound
- 怎样制作一个横版格斗过关游戏 Cocos2d-x 2.0.4
本文实践自 Allen Tan 的文章<How To Make A Side-Scrolling Beat 'Em Up Game Like Scott Pilgrim with Coco ...
- C# 解决窗体假死的状态
异步调用是CLR为开发者提供的一种重要的编程手段,它也是构建高性能.可伸缩应用程序的关键.在多核CPU越来越普及的今天,异步编程允许使用非常少的线程执行很多操作.我们通常使用异步完成许多计算型.IO型 ...
- arduino小车入门教学——第三天(arduino基础)
大家好,我是小编, 记上一节内容点击打开链接 我们今天讲arduino基础. 首先在arduino官网上下载程序. Windows解压版 苹果系统的版本号 好,下载过编程软件.我们就来讲编程. 这是类 ...