准备阶段:从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: 目标来实现的

最新文章

  1. Asp.Net 操作XML文件的增删改查 利用GridView
  2. 订餐系统之微信支付,踩了官方demo的坑
  3. mysql - 数据库、表 的创建
  4. iOS网络-01-NSURLRequest与NSURLConnection
  5. linux编译中的常见问题
  6. pip error: command 'gcc' failed with exit status 1
  7. BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
  8. ImageMagick wrapper for php
  9. 求刷Kindle Fire HD的方法
  10. 使用ArcGIS API for Silverlight + Visifire绘制地图统计图
  11. hash冲突随笔
  12. 读书笔记-你不知道的JS中-函数生成器
  13. Useful Git Commands for me
  14. mybatis基础(上)
  15. JavaScript学习-4——DOM对象、事件
  16. windows7安装flask-mysqldb遇到的坑
  17. Python 高级编程 ——观察者模式
  18. Markdown语法学习(二)
  19. Oracle 与Sql Server常用函数对比
  20. iOS开发多线程篇—GCD简介

热门文章

  1. UITextField增加textDidChange回调功能
  2. iOS 调H5方法不执行没反应的坑
  3. md5代码实现
  4. 搭建vue全家桶
  5. php之变量覆盖漏洞讲解
  6. D3.js系列——元素操作和简单画布操作
  7. fastestmirror不能使用
  8. hibernate学习系列-----(6)hibernate对集合属性的操作之Set集合篇
  9. Selenium webdirver Java 操作浏览器
  10. NodeJS实战——创建基础应用并应用模板引擎