初级Openwrt编译详细教程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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:///openwrt/trunk
#10.03
#svn co svn:///openwrt/branches/backfire
#12.09
#svn co svn:///openwrt/branches/attitude_adjustment
#14.07
svn co svn:///openwrt/branches/barrier_breaker
#指定svn版本
svn co svn:///openwrt/branches/barrier_breaker -r 42625
2.Git获取源码:
#开发版
git clone git:///openwrt.git
#14.07
git clone git:///14.07/openwrt.git
3.下载源码
mkdir openwrt #创建openwrt文件夹
cd openwrt #进入openwrt文件夹
svn co svn:///openwrt/branches/backfire (稳定版) cp feeds.conf.default feeds.conf #将feeds.conf.default修改为feeds.conf:
或者是
svn co svn:///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:///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可以识别这个文件包。

相关文档
最新文档