初级Openwrt编译详细教程

初级Openwrt编译详细教程
初级Openwrt编译详细教程

Openwrt编译入门

一、安装openwrt需要的编译环境

1.批量命令安装

sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev

2.单条命令输入

sudo apt-get install g++

sudo apt-get install libncurses5-dev

sudo apt-get install zlib1g-dev

sudo apt-get install bison

sudo apt-get install flex

sudo apt-get install unzip

sudo apt-get install autoconf

sudo apt-get install gawk

sudo apt-get install make

sudo apt-get install gettext

sudo apt-get install gcc

sudo apt-get install binutils

sudo apt-get install patch

sudo apt-get install bzip2

sudo apt-get install libz-dev

sudo apt-get install asciidoc

sudo apt-get install subversion

sudo apt-get install git

sudo apt-get install sphinxsearch

sudo apt-get install libtool

sudo apt-get install sphinx-common

系统其他软件更新

sudoapt-get update

sudo apt-get install libssl-dev

注:不安装上边这个使用make menuconfig可能出现下边的错误:

Checking 'working-make'... ok.

Checking 'case-sensitive-fs'... ok.

Checking 'getopt'... ok.

Checking 'fileutils'... ok.

Checking 'working-gcc'... ok.

Checking 'working-g++'... ok.

Checking 'ncurses'... ok.

Checking 'zlib'... ok.

Checking 'gawk'... ok.

Checking 'unzip'... ok.

Checking 'bzip2'... ok.

Checking 'perl'... ok.

Checking '/usr/bin/python2.7'... ok.

Checking 'wget'... ok.

Checking 'git'... ok.

Checking 'gnutar'... ok.

Checking 'svn'... ok.

Checking 'libssl'... failed.

Checking 'openssl'... ok.

Checking 'gnu-find'... ok.

Checking 'getopt-extended'... ok.

Checking 'file'... ok.

Checking 'non-root'... ok.

Build dependency: Please install the openssl library (with development headers)

Prerequisite check failed. Use FORCE=1 to override.

make: *** [tmp/.prereq-build] Error 1

二、下载源码

建议使用subversion(SVN) ,因为Openwrt主要以svn 来维护Openwrt系统的版本。另外,请注意Openwrt中不同的分支版本,一种是最新版但不是最稳定,也就是trunk版,一种是相对稳定的backfire版。

从trunk分支的补丁也在backfire版本中了,即包含修复补丁

1.Svn获取源码

#开发版

#svn co svn://https://www.360docs.net/doc/1d1664993.html,/openwrt/trunk

#10.03

#svn co svn://https://www.360docs.net/doc/1d1664993.html,/openwrt/branches/backfire

#12.09

#svn co svn://https://www.360docs.net/doc/1d1664993.html,/openwrt/branches/attitude_adjustment

#14.07

svn co svn://https://www.360docs.net/doc/1d1664993.html,/openwrt/branches/barrier_breaker

#指定svn版本

svn co svn://https://www.360docs.net/doc/1d1664993.html,/openwrt/branches/barrier_breaker -r 42625

2.Git获取源码:

#开发版

git clone git://https://www.360docs.net/doc/1d1664993.html,/openwrt.git

#14.07

git clone git://https://www.360docs.net/doc/1d1664993.html,/14.07/openwrt.git

3.下载源码

mkdir openwrt #创建openwrt文件夹

cd openwrt #进入openwrt文件夹

svn co svn://https://www.360docs.net/doc/1d1664993.html,/openwrt/branches/backfire (稳定版) cp feeds.conf.default feeds.conf #将feeds.conf.default修改为feeds.conf:

或者是

svn co svn://https://www.360docs.net/doc/1d1664993.html,/openwrt/trunk (测试版) 当前的开发版本分支(trunk)已包含最新的实验补丁。此分支或许还突破了Openwrt原来所不支持的硬件设备的限制哦,惊喜的同时也有风险存在。因此,编译trunk版,慎之

版本任选一个

4.更新源码

更新源码要进入获取到的版本根目录内,如trunk、backfire文件夹内。

cd openwrt/trunk或者是cd openwrt/backfire

如果已是当前文件夹略过。

svn

./scripts/feeds update -a

./scripts/feeds install -a

因Openwrt的源代码随时都会变动,故此命令将确保您所获取得到的源码的最新性。

5.下载LUCI包

进入到源码主目录-》script,在script目录中打开命令行输入./feeds update

继续在命令行中输入./feeds install -a -p luci安装LUCI

如果只是加装Luci web UI,在barrier_breaker根目录打开命令行:

./scripts/feeds update packages luci

./scripts/feeds install -a -p luci

经过这个步骤,在make menuconfig 里就有LuCI 相关选项。

三、编译

1.生成默认配置

make defconfig

若可进行编译则生成默认配置:编译根目录下会有个.config的文件(按Ctrl+h能看到)。

若defconfig回显提示缺少软件包或编译库等依赖,则按提示安装所缺软件包或库等即可。

2.配置编译选项

里面可以选择芯片的型号,集成的组件等等,根据实际情况选择。

make menuconfig

输入上条命令后,出现下

Target System (Atheros AR7xxx/AR9xxx) --->CPU芯片型号选择Subtarget (Generic devices with NAND flash) --->flash选择

Target Profile (NETGEAR WNDR3700v4/WNDR4300) --->路由器型号选择在里边选择芯片型号,路由器型号和要编译到固件里的各种软件。3.编译

输入make j=x(x代表CPU核心数+1) V=s

例如:

makej=7 V=s

或者获取官方config文件

wget https://https://www.360docs.net/doc/1d1664993.html,/barrier_breaker/14.07/ar71xx/nand/config.ar71xx_nand

mv config.ar71xx_nand .config

make menuconfig

exit

make

四、个性化定制

1.改8M支持

以841V8为例,修改2个文件:

第一个:

路径为/turnk/tools/firmware-utils/src/mktplinkfw.c

在mktplinkfw.c中找到841V8的相关属性,

这里原来是没有#define HWID_TL_WR841ND_V8 0x08410008这一行的,我自己加进去的,不过编译后没出什么错误。

继续向下搜索841,只有841V7,没有V8,继续加

这也是自己加的,没出现什么错误。

第二个:

路径为/trunk/target/linux/ar71xx/image/makefile

在makefile中搜索841,找到841V8

将4Mlzma改为8Mlzma,保存退出。

修改完成以上两个文件后,即可make进行编译。

2.开启无线

Openwrt默认是不开启无线的

atheros的网卡需要改package/mac80211/files/lib/wifi/mac80211.sh和package/madwifi/files/lib/wifi/madwifi.sh,拉到最下有个蛋疼的

把1改为0或者注释掉

# REMOVE THIS LINE TO ENABLE WIFI:

#option disabled 1

然后点击Save —>OK 保存

Exit 退出

3.无线其他修改

option htmode HT40+

使用40MHz频宽,但只支持1-7信道。HT40-,支持5-13信道。HT20 支持1-13信道,20MHz频宽

option channel 1

使用信道1,1-13之间。若有限定频宽,信道参考如上。

option country CN

设定wifi标准为中国CN、JP、HK均可开启13信道,默认的US只有1-12信道option noscan 1

强制使用40MHz的频宽

option txpower 17

发射功率为17dBm,大约50mW。不可设定过大,否则有烧毁PA的危险。4.修改默认时区

打开\barrier_breaker\package\base-files\files\etc\config文件夹,找到system文件修改如下:

config system

option hostname Openwrt 设定主机名

option timezone Asia/Shanghai 时区设置为亚洲/上海

option timezone CST-8 正8区

五、清除编译时产生的文件

建议清理编译产生的文件,以免下次编译时造成冲突,文件如果存在的话,编译将不会被替换

1.清除bin目录

make clean

bin目录是编译后固件所在文件夹,确保备份了编译后的固件。

2.清除交叉编译工具以及工具链目录

make dirclean

3.清除所有相关东西

make distclean

该命令会清除下载的软件包,配置文件,feed内容等,但不建议使用。

六、附加

1.make命令简单说明

make V=99

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

make world

表示编译所有

make j=2 V=99

如是多核CPU,加j=2 选项理论上能加快编译速度

make -j 2 V=99可加快编译速度(不推荐使用)

只清除某个模块

make package/qos/clean

只编译某个模块

make package/qos/clean

make package/qos/compile

make package/qos/install

make V=99 | tee compile_v1.0.0.log

2.软件包定制

LuCI ->Collections -><*> luci WEB界面必选

LuCI ->Applications -><*>luci-app-ddns DDNS

LuCI ->Applications -><*>luci-app-transmission

LuCI ->Applications -><*>luci-app-samba SAMBA网络共享服务

LuCI ->Applications -><*>luci-app-p2pblock

LuCI ->Themes 主题

LuCI ->Translations -><*> luci-i18n-chinese luci的中文语言包

Base system -><*>block-mount USB挂载

Base system -><*>qos-scripts

Base system -><*>wireless-tools

Kernel modules->Block Devices->kmod-block2mtd

Kernel modules -> Filesystems -><*> kmod-fs-ext4 添加硬盘格式支持

Kernel modules -> Filesystems -><*> kmod-fs-vfat

Kernel modules -> Native Language Support -><*> kmod-nls-utf8 添加UTF8编码Kernel modules -> Network Devices-><*>kmod-macvlan

Kernel modules -> Other modules-><*>kmod-eeprom-93cx6

Kernel modules -> USB Support -><*>kmod-usb-core

Kernel modules -> USB Support -><*> kmod-usb-ohci #安装usb ohci控制器驱动Kernel modules -> USB Support -><*> kmod-usb-storage #安装usb存储设备驱动Kernel modules -> USB Support -><*> kmod-usb-storage-extras. 添加USB扩展支持

Kernel modules -> USB Support -><*>kmod-usb-uhci

Kernel modules -> USB Support -><*>kmod-usb2 #安装usb2.0 Kernel modules -> USB Support -><*>kmod-usb3

Network-> BitTrorrent -><*>transmission-daemon

Network-> BitTrorrent -><*>transmission-remote

Network-> BitTrorrent -><*>transmission-web

Network-> P2P -><*>amule

Utilities -> Filesystem -><*> badblocks 自动挂载工具

Utilities->Filesystem -><*>ntfs-3g

Utilities->Filesystem -><*>ntfs-3g-utils

Utilities->disc -><*>cfdisk

Utilities->disc -><*>fdisk

Utilities -><*> restorefactory 复位键支持

Utilities -><*> wifitoggle 一键开关无线

kmod-usb-video

注:上边为网络搜索,不是所有的都要添加,根据自己需要,有可选错而编译不出固件。

3.编译目录说明

Bin目录

编译后的产物目录,里边有编译出的固件。

目录里固件的区别

.bin和.trx的区别,一种说法是,第一次刷路由器的时候,需要用.bin文件,如果需要再升级,则不能再使用. bin文件,而需要用.trx文件。原因是,.bin是将路由器的相关配置信息和.trx封装在一起而生成的封包,也就是说是包含路由器

版本信息的. trx。在第一次刷固件的时候,我们需要提供这样的信息,而在后续升级时,则不再需要,用.trx文件即可。

Packages文件夹:

包含了我们在配置文件里设定的所有编译好的软件包。默认情况下,会有默认选择的软件包。

OpenWrt-SDK.**.tar.bz2:

这个也就是我们定制编译好的OpenWRT SDK环境。我们将用这个来进行OpenWrt 软件包的开发。例如,我所编译好的SDK环境包为:/bin/brcm47xx/OpenWrt-SDK- brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2

可以从名称上看出,target system是brcm47xx,host system是Linux-x86_64,使用的编译工具以及库是4.3.3+cs_uClibc-0.9.30.1。

md5sums 文件:

这个文件记录了所有我们编译好的文件的MD5值,来保证文件的完整性。因为文件的不完整,很容易将路由器变成“砖头”。

需要主要的是,编译完成后,一定要将编译好的bin目录进行备份(如果里面东西对你很重要的话),因为在下次编译之前,执行make clean 会将bin目录下的所有文件给清除掉!!

4.更改原有packages

在编译根目录下会有一个dl的目录,这个目录其实是“download”的简写,在编译前期,需要从网络下载的数据包都会放在这个目录下,这些软件包的一个特点就是,会自动安装在所编译的固件中,也就是我们make menuconfig的时候,为固件配置的一些软件包。如果我们需要更改这些源码包,只需要将更改好的源码包打包成相同的名字放在这个目录下,然后开始编译即可。编译时,会将软件包解压到build_dir目录下。

当然,你也可以自己在dl里面创建自己的软件包,然后更改相关的配置文件,让openwrt可以识别这个文件包。

相关主题
相关文档
最新文档