找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 12549|回复: 5

Openwrt 编译教程

[复制链接]
发表于 2010-11-11 03:52 | 显示全部楼层 |阅读模式
Openwrt 编译教程
(2010-03-01 11:00:07)
转载
标签:
openwrt
it
        分类: linux

节选自http://www.openwrt.org.cn/hdwiki/index.php?doc-view-6

1. 编译环境准备(安装linux发行版和软件包)

如您选择安装fedora11或者fedora9

Fedora 11 or 9:
# yum install autoconf binutils bison bzip2 flex gawk gcc gcc-c++ gettext make ncurses-devel patch unzip wget zlib-devel
由于fedora 安装包本来就很全面,所以需另外安装的东西较少。所以一般情况下,推荐安装fedora 11。

如果你能阅读英文,那么请参考

http://wiki.openwrt.org/doc/howto/buildroot

OpenWrt英文论坛2006年文章:Building OpenWrt Kamikaze from source
https://forum.openwrt.org/viewtopic.php?id=9180

这里有更详细权威的说明。


2. 获取OpenWrt源代码和安装包,更新

   1. svn checkout svn://svn.openwrt.org/openwrt/trunk
   2. cd trunk
   3. ./scripts/feeds update -a
   4. ./scripts/feeds install -a

3. 配置编译选项
make menuconfig

默认就是brcm-2.4平台,模块前面选项有3种:
*:表示该模块直接编译到核心中
M:该模块以被核心支持,可以后再安装
空白:不支持该模块
具体模块的起什么作用需要多google.


4. 编译选项配置保存后,开始编译

make V=99

V=99表示输出详细的debug信息

make world表示编译所有

如您的PC是多核CPU,那么加j=2 选项理论上能加快编译速度。如make -j 2 V=99可加快编译速度(不推荐使用)

如您只想清除/编译某个模块,您可以做如下类似操作make package/qos/clean, make package/qos/compile, make package/qos/install。

更详细的信息建议您参考

http://downloads.openwrt.org/kamikaze/docs/openwrt.html
应该是当前最新最权威的文档

5. 第一次编译由于要下载大量的软件包,慢慢的等吧,快则半小时,慢则2,3小时. 如果下载过慢,建议您中断编译过程,然后用迅雷去主动下载,放到./dl目录下。一个加快速度的小技巧:本站小编已经将将一些常用的软件包打包成dl.tar,放在http://ul.to/2y8a2w, 下载后用tar xvf dl.tar(在windows下用winrar打开即可,然后你用ftp或者samba之类传到Linux PC上),将解包出来的东东直接放到./dl目录下,相必会大大加快初次安装、编译的速度。同样在http://ul.to/fasgus上可下载linux-2.36.30.10.tar.bz2,当然您也可以用迅雷之类的工具来下。



6. 编译好的文件在当前目录的bin文件夹下。
如果是brcm-2.4
ls bin/brcm-2.4/
就可以看到很多熟悉的文件了。

『OpenWrt.org.cn』补充:

如果是编译DB120等BCM6358固件,则在需要make menuconfig里选择CPU为brcm63xx。具体可参考恩山无线网友bugeye的雄贴.[2][3]

参考资料

    [1].  OpenWrt编译基本教程   https://www.right.com.cn/forum/v ... &extra=page%3D1
    [2].  bugeye: rg100a 最新的openwrt编译补丁(16393以后的版本)   https://www.right.com.cn/forum/v ... &extra=page%3D1
    [3].  DB120-WG刷OpenWRT成功,DB120-WG可能要升值了   https://www.right.com.cn/forum/v ... &extra=page%3D2

分享

0

我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2010-11-11 04:01 | 显示全部楼层
Openwrt中文手册
维基教科书,自由的教学读本
跳转到: 导航, 搜索
Split-arrows.svg         此條目被建議分割為若干不同條目。若適當,也應同時設立消歧義頁来引導這些條目。(討論)

OpenWRT中文手册
目录
[隐藏]

    * 1 引言
    * 2 第一章 路由器设置简介
          o 2.1 1.1 快速开始
                + 2.1.1 1.1.1 安装
                + 2.1.2 1.1.2 初始化设置
                + 2.1.3 1.1.3 安全模式
          o 2.2 1.2 配置OpenWrt
                + 2.2.1 1.2.1 网络
    * 3 第二章 开发指南
          o 3.1 2.1 系统结构
                + 3.1.1 2.1.1 构造镜像
                      # 3.1.1.1 下载OpenWrt
                      # 3.1.1.2 目录结构
          o 3.2 2.3 使用Openwrt
                + 3.2.1 2.3.1 编译/重编译组件
                + 3.2.2 2.3.2 使用OpenWrt内部的quilt
    * 4 附件

[编辑] 引言

本文是OpenWRT源码手册的中文译本。可以通过版本控制工具SVN或者GIT来得到OpenWRT的源码,命令如下: svn co svn://svn.openwrt.org/openwrt/branches/8.09 git://nbd.name/openwrt.git 下载完源码后,需要进入docs目录编译生成pdf或html格式的英文文档。命令如下:
# cd docs
# make
当前目录下的openwrt.pdf和openwrt.html即为生成的最终文件。
[编辑] 第一章 路由器设置简介
[编辑] 1.1 快速开始
[编辑] 1.1.1 安装
[编辑] 1.1.2 初始化设置
[编辑] 1.1.3 安全模式
[编辑] 1.2 配置OpenWrt
[编辑] 1.2.1 网络
[编辑] 第二章 开发指南
[编辑] 2.1 系统结构
[编辑] 2.1.1 构造镜像

OpenWrt选择了另一种方式来生成固件:下载,打补丁,编译,一切从零开始,即使交叉编译链也是如此。
[编辑] 下载OpenWrt

本文仅针对OpenWrt的Kamikaze分支编写,可以使用如下subversion命令下载代码:
$ svn checkout svn://svn.openwrt.org/openwrt/trunk kamikaze
另外,还有一个trac显示界面[1],可以用它来浏览通过svn进行的提交和代码。
[编辑] 目录结构

有四个关键的顶层目录:

    * tools
    * toolchain
    * package
    * target

tools和toolchain包含了一些通用命令,用来生成固件、编译器、和C库。生成结果会储存在以下三个目录下:build dir/host是一个临时目录,用来储存不依赖于目标平台的工具,build dir/toolchain-<arch>*用来储存依赖于指定平台的编译链,staging dir/toolchain-<arch>*是编译链的最终安装位置。通常你不需要改动编译链目录下的任何东西,unless you intend to add a new version of one of the components above.

    * build dir/host
    * build dir/toolchain-<arch>*

package——包。在OpenWrt固件中,几乎所有东西都是.ipk,这样就可以很方便的安装和卸载。注意:这些包不是在主分支中维护的,但是可以使用package feeds系统通过subversion来获取他们。
$ ./scripts/feeds update
这些包能够扩展基本系统的功能,只需要将他们链接进入主干。之后,这些包将会显示在配置菜单中。对于kamikaze,你可以使用这样的命令:
$ ./scripts/feeds search nmap
Search results in feed 'packages':
nmap Network exploration and/or security auditing utility
$ ./scripts/feeds install nmap
如果想包含所有的包,可以使用如下命令:
$ make package/symlinks
目标系统指嵌入式设备,针对不同的平台有不同的特性。针对这些特性,"target/linux"目录下按照平台<arch>进行目录划分,里面包括了针对标准内核的补丁,特殊配置等。There's also the "target/image" directory which describes how to package a firmware for a specific platform.
target and package两部分都需要"build dir/<arch>"作为编译的临时目录。另外,编译链,目标平台,包要下载的东西都放在dl目录下。

    * build dir/<arch>
    * dl

[编辑] 2.3 使用Openwrt

以下的段落将会介绍一些技巧,可以提高日常工作的效率。
[编辑] 2.3.1 编译/重编译组件

buildroot可以很方便的重编译整个系统,也可以只编译某个部分,比如工具链、内核模块、内核和软件包等。
如果你做了一些修改,然后想重编译工具链,可以执行如下命令:
make toolchain/{clean,compile,install}
它将会clean, compile and install工具链,将会显示如下:
make[1] toolchain/clean
make[2] -C toolchain/kernel-headers clean
make[2] -C toolchain/binutils clean
make[2] -C toolchain/gcc clean
make[2] -C toolchain/uClibc clean (glibc or eglibc when chosen)
当然,你也可以分开编译工具链的几个部分(binutils, kernel-headers gcc, C library)。
可以用同样的方法编译软件包。
make package/busybox/{clean,compile,install}

will clean, compile and install buysbox (if selected to be installed on the final rootfs).

Supposing that you made changes to the Linux kernel, but do not want to recompile everything, you can recompile only the kernel modules by issuing:

make target/linux/compile To recompile the static part of the kernel use the following command: make target/linux/install
[编辑] 2.3.2 使用OpenWrt内部的quilt

OpenWrt integrates quilt in order to ease the package, kernel and toolchain patches maintenance when migrating over new versions of the software.

Quilt intends to replace an old workflow, where you would download the new source file, create an original copy of it, an a working copy, then try to apply by hand old patches and resolve conflicts manually. Additionnaly, using quilt allows you to update and fold patches into other patches easily.

Quilt is used by default to apply Linux kernel patches, but not for the other components (toolchain and packages).【原创】ASUS WL-HDD OpenWRT固件编译指南
       
love77不在线  
花了一个晚上研究了下OpenWRT的架构, 给WL-HDD盒子编译了个自定义的固件. OpenWRT使用起来还是很简单, 下面是自己编译家用Web Server的例子:

编译环境 Ubuntu 9.10 Wubi Installation, 预先安装build-essential, subversion等工具

1. 从SVN把代码取回来 svn co svn://svn.openwrt.org/openwrt/branches/8.09
2. make distclean
3. 进入script目录, 运行./feeds update 从openwrt官方网站升级最新的应用程序列表, 然后根据自行需要加入对应的应用程序, 我加载了
./feeds install php5 vsftpd lighttpd nano
具有依存关系的应用程序会自动加入列表.
4. make menuconfig, 注意内核选择 BroadCom 2.4, 下面设备类型选择 WL-HDD, 系统可以自动加载LED等驱动.
为了支持硬盘, Kernel Modules里的Block Devices要加入 kmod-ide-core, kmod-ide-pdc202xx
Filesystems 加入 kmod-fs-ext2, kmod-fs-ext3
Utilities 加入 Editors->nano, Filesystem->e2fsprogs, disc->fdisk, swap-utils
Base system里可以把类似 dnsmasq, iptables等占用空间的组件都移除掉.
5. 执行make V=99 编译, 过程中会自动去网上下载对应程序的源代码, 过程十分漫长, 挂机睡觉看片均可...

如果要自行加入目录或修改开机banner, 到 kamikaze/packages/base-files ; 修改应用程序配置文件, 到 kamikaze/feeds 下对应目录

在主目录下建立升级脚本 flash.sh 内容为
代码 (双击代码复制到粘贴板)

#!/bin/bash
echo -en "get ASUSSPACELINK\x01\x01\xa8\xc0 /dev/null\nquit\n" | tftp 192.168.1.220
echo -en "binary\nput ./bin/openwrt-brcm-2.4-squashfs.trx ASUSSPACELINK\nquit\n" | tftp 192.168.1.220


按住WL-HDD的Reset按钮后上电, PWR指示灯闪烁后进入固件升级状态, 此时用事先在主目录下写好的升级脚本flash.sh进行升级即可.

可怜的WL-HDD只有4MB的Flash, 一定要精心挑选驱动程序和编译进内核的模块, 尽量让文件系统保持在3.5MB以下, 不然... 反正不打算用来当无线设备, 我直接把Broadcom的无线部分驱动全部移除. 留出了足够的空间配置了php5, pdo_sqlite, vsftpd, lighttpd ; 其中 c运行库和gcc运行库一定要内核编译, 否则系统无法启动.

在/etc/init.d/下可建立 (预先可以直接配置到base-files里) 一个自启动的文件, 用于挂载硬盘
代码 (双击代码复制到粘贴板)

#!/bin/sh /etc/rc.common

START=99
STOP=40

start()
{
    mount /dev/ide/host0/bus0/target0/lun0/part1 /home
    mount /dev/ide/host0/bus0/target0/lun0/part2 /opt
    swapon /dev/ide/host0/bus0/target0/lun0/part3
}

stop()
{
    umount /dev/ide/host0/bus0/target0/lun0/part1
    umount /dev/ide/host0/bus0/target0/lun0/part2
    swapoff /dev/ide/host0/bus0/target0/lun0/part3
}

restart()
{
    stop
    start
}


然后修改 /etc/opkg.conf (可以预先配置到feeds), 内容为
代码 (双击代码复制到粘贴板)

src/gz snapshots http://downloads.openwrt.org/snapshots/trunk/brcm-2.4/packages
dest root /opt
dest ram /opt/tmp
lists_dir ext /opt/var/opkg-lists
option overlay_root /opt


可以让opkg安装的应用程序直接安装到硬盘的应用程序分区.

我在盒子里安的是8G的CF卡, 分区表
Disk /dev/ide/host0/bus0/target0/lun0/disc: 8019 MB, 8019099648 bytes
16 heads, 63 sectors/track, 15538 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/ide/host0/bus0/target0/lun0/part1 1 15000 7559968+ 83 Linux
/dev/ide/host0/bus0/target0/lun0/part2 15001 15300 151200 83 Linux
/dev/ide/host0/bus0/target0/lun0/part3 15301 15538 119952 82 Linux swap / Solaris

全部弄完, 启动lighttpd后, 配置好Fast-Cgi模式的PHP5, 运行速度还不错. 毕竟是160MHz主频, 16MB RAM的超级Mini Server啊, 哈哈哈

*定期在主目录下 svn up 后 make clean , make V=99 是好习惯

自己的小Server跑着 http://lovelove.homeip.net:8080/env.php
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2010-11-11 04:11 | 显示全部楼层
今天听中央经济广播电台说,今年有559万大学毕业生,大学生的就业形式严峻.我想那些精通Linux开发的毕业大学生们,估计一点也不用担心,因为他们已经不再是一颗大白菜了.

         最近在帮一个朋友把OpenWrt移植到一块单板上,有一些心得,分享给大家.
  OpenWrt是一个很好的学习Linux的平台,而且使用一台现成Linksys的路由器做为你的硬件开发平台.希望下面对OpenWrt的开发环境的一些介绍能够对初学Linux的嵌入式开发的同学们有用.(下面的文字有部分翻译自OpenWrt的Document)

        当对于刚刚开始做嵌入式linux设备的开发的最大挑战是:你不能只安装一个linux拷贝就期望能够生成firmware.由于大多数嵌入式设备的硬件平台大多数时间和你的开发机器的硬件不兼容,因此需要一个过程叫做交叉编译,才能编译并生成一个的linux发行版本运行在你的设备上.


        这个创建交叉编译器的过程比较复杂.大多数情况下你不会这样做,一般使用一个现成的交叉编译工具,这样能够节省很多时间,但是这个现成的工具一般不是最新的,且一般不会更新.同样对于linux kernel来说,一般使用单板或者芯片供应商提供的,它一般不是最新的,而你并不清楚这个kernel是否打过补丁,做过哪些修改.
  在OpenWrt的开源项目,它只提供了你需要的源代码包的补丁,当你编译的时候,它的Makefile能够从网站上下载源代码,打补丁,编译,安装.这些包包含了你需要的linux kernel,交叉编译工具,C库,应用程序等.简单的操作就能够实现生成你需要的firmware.下面是一个例子,你会发现实在太简单和方便了.


       在一台安装linux的主机上(我用的是Fedora Core 4, 这个环境的搭建可以参考我的blog的文章《eCos 开发环境搭建指南-1.0.0》),编译一个Linksys WRT54G的firmware,只要下列步骤:
        1. svn checkout https://svn.openwrt.org/openwrt/trunk kamikaze 下载OpenWrt的主干版本
        2. cd kamikaze
        3. make menuconfig 配置你需要的硬件平台,需要的软件包等
        4. make  编译
        OpenWrt会帮你生成开发环境,编译和安装交叉编译工具,编译linux kernel等.当然它会下载所有源码,因此第一次编译的时间会很长(以后再编译就很快了),而且你一定要确保你的linux主机始终接在Internet上.
  当前OpenWrt支持下面的硬件平台:
  AMCC Taishan [2.6]
  AMD Alchemy AU1x00 [2.6]
  Atheros [2.6]
  Atmel AVR32 [2.6]
  Broadcom BCM947xx/953xx [2.4]
  Broadcom BCM947xx/953xx [2.6]
  Intel XScale IXP4xx [2.6]
  Magicbox [2.6]
  Mikrotik RouterBoard 532 [2.6]
  x86 [2.6]


        这些硬件平台大多基于厂商提供的一些基于Linux的产品,当前OpenWrt已经支持全球的76家厂商的产品,最值得一提的就是Linksys WRT54G的无线路由器(v1-v4版本是基于linux的,v5以上是vxWorks版本的,因此如果购买时需注意版本号,要买旧货,taobao上有卖),OpenWrt开源项目最初就是基于这款的路由器,后来还衍生出DD-WRT,TOMATO等开源项目.


         OpenWrt开源项目的主页 http://openwrt.org/
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-3-31 16:25 | 显示全部楼层
现在有空了。可以去折腾一下我的6358了。谢谢。哈哈。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-1-7 11:45 | 显示全部楼层
留个几号MARK
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-9-2 22:37 | 显示全部楼层
这个我要顶一下
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-19 12:21

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表