编译openwrt全过程(超详细) | 少将全栈
  • 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

编译openwrt全过程(超详细)

点滴 admin 11年前 (2014-04-09) 11484次浏览 已收录 扫描二维码

本教程的编译环境:win7 专业版+VMwareWorkstation6.5虚拟机+Ylmf OS 3.0
编译的过程中要保持电脑联网
搭建编译环境
应用程序–附件–终端
sudo apt-get update (更新)
安装编译需要的组件:
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install binutils
sudo apt-get install patch
sudo apt-get install bzip2
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install make
sudo apt-get install autoconf
sudo apt-get install gettext
sudo apt-get install texinfo
sudo apt-get install unzip
sudo apt-get install sharutils
sudo apt-get install subversion
sudo apt-get install libncurses5-dev
sudo apt-get install ncurses-term
sudo apt-get install zlib1g-dev
sudo apt-get install gawk
sudo apt-get install asciidoc
sudo apt-get install libz-dev
编译环境搭建完成
mkdir openwrt 创建一个openwrt文件夹
cd openwrt 进入openwrt文件夹
svn co svn://svn.openwrt.org/openwrt/branches/backfire下载官网的源码
./scripts/feeds update -a 更新软件包
./scripts/feeds install -a 安装软件包
make menuconfig 进入定制界面(里面可以选择芯片的型号,集成的组件等等,根据实际情况选择)
defconfig
make V=99 (开始编译)
剩下的就是等待了,第一次编译需要的时间相对比较长,这个跟你的电脑配置和网速有关。

下面以编译TP-LINK 741N的openwrt固件为例,只编译基本的功能:

make menuconfig
Target System—AR71xx/AR7240/AR913x/AR934x CPU型号
Target Profile—TP-LINK 741
LuCI?Collections?? * luci 添加Luci
LuCI?Translations?- * luci-i18n-chinese 添加中文
EXT—-YES
make V=99 开始编译

成功后在bin文件夹里有编译好的固件。



如您选择安装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




之前家里用的一直USR9108加上自己编译修改的内核及软件配合自己整的VIA小板子动物机,可是编译移植那真是叫一个痛苦,各种补丁各种依赖关系,实在头大,费时费力。而且还有那个悲催的USB1.1,那速度真叫认抓狂…我的移动硬盘插上基本就是个摆设…每每看到openwrt那丰富的软件资源,那真叫一个眼馋,虽然我的USR9108也能刷,可是那个单USB1.1的确令我很是失望,所以也就没有再折腾它的欲望了,于是干脆就整了个DB120,主要就是看上了它的双USB2.0,这样一来它的可玩性就大大提高了,无限可能呀无限可能…

我买回来的这个db120已经刷好了openwrt中文论坛的db120-openwrt.org.cn-10.03.336-DIY-mini-0916,于是我拿出我那个在房间门口落满灰尘的华为MT883d插入路由机后的USB口,然后向导配置,上网成功…可是这样又平白无故浪费我一个USB口,虽然说可以插个USB
Hub来解决可是这样的方法又不够低炭。

在网上找了一下,这个BCM63XX系列芯片的路由能刷以下几个固件:

  1. 电信原版:这个固件基本是个半残废,只具备一些路由器基本的功能,貌似还有个Ftp,SMB。ADSL也能正常工作,可也就仅限于此了,发挥不了此路由器硬件应有的性能,可玩性基本没有;所以直接无视之。
  2. OpenWrt Backfire:这个固件openwrt应有的功能都能正常使用,可以直接ssh,各种玩法都比较成熟,可惜的是ADSL不能正常工作,还得挂个猫当尾巴,而且我的情况是浪费个USB口,就算不浪费USB口也浪费个电源插头…
  3. BCM6358英文原版固件:这个是BCM的官方固件,跟电信版的差不多,可能某些功能稍微强大一点,但是也几乎没多大的可玩性。
  4. DSL-2760U的改版固件:因为这个固件官方开源了内核以及一些软件的源代码,这个设备的硬件使用的也是BCM63XX,所以很容易移植到DB120上面,并且有网友为其移植了BT与电驴的软件,这个方法与我之前用的USR9108移植发放是一样的,如果要移植其他软件也是很费事的…

对比了这几个固件发现都不能满足我的要求,最无限接近的也就openwrt的了,可惜的是它并不支持ADSL,于是就在思考能不能用DSL-2760U的
内核与闭源驱动并配合openwrt丰富的软件资源,这样的话只需要编译DSL的内核与模块,比起自己移植软件,解决库依赖要省事的多了。

本来已经自己着手做了,可是偶然在openwrt中文论坛转了一圈,发现还真有人早就这么做了,而且已经比较完美的解决了,现成的固件已经放出来了,具体链接在这里,下面我说说使用这个固件的刷机过程:

  1. 使用TTL线连接路由器,设置好超级终端,超级终端的参数如不知请自行google之。
  2. 关闭设备电源,按住设备上的RST键,然后打开电源,15秒钟后松开RST。
  3. 查看CFE的版本,如果启动信息输出滚动过快请多次重启,这步是必须的,因为这个混合固件有CFE的版本要求,请看清后再下载其对应版本。
  4. 在看到“*** Press any key to stop auto run (1 seconds) ***”这段信息时,迅速按任意键,然后终端上会显示”CFE”这样的提示符
  5. 然后输入e a,来请空flash,如果之前输入过其它固件的话,这步必须要做。
  6. 然后重新启动再次进入到CFE,此时使用网线连接到LAN4口(靠近电源那个),将网卡IP设置为192.168.1.*,在浏览器里输入192.168.1.1回车,点击浏览按钮选择固件文件,然后点升级。
  7. 路由器升级完成后会自动重启,重启完成后把网线插入LAN4以外的任意口。
  8. 然后ssh到192.168.1.1,默认用户:root 密码:admin
  9. 成功登入后编辑/etc/config/modem,注释掉option port与option encaps让其使用默认即可,修改option vpi 与
    option vci,如不只具体的vpi/vci参数请致电当地运营商
  10. 修改/etc/config/network,将wan口的ifname设置为inet_X_X,这里的两个X分别用vpi/vci填充,option username与option password设置为自己宽带的用户名与密码
  11. 一切就绪后开始尝试拨号:/etc/init.d/modem boot
  12. 成功后将其设为开机自动启动:/etc/init.d/modem enable
  13. 安装firewall使内网机器也能上网,opkg update; opkg install firewall;reboot


前一篇文章大概介绍了刷入带ADSL驱动的openwrt以及简单的配置,这次就总结下一个好玩的应用,使用android手机+mpd打造一台无线音乐播放器。

所需装备:

  • DB120或者RG100A或者其它BCM6358芯片的路由一台
  • USB声卡一件(我手里的两个声卡都能很好的工作,一个是steelseries
    5HV2
    ,一个是北蓝鼠 USB声卡 7.1声卡,就这两个的音质来说更加倾向于steelseries 5HV2)
  • USB2.0的移动硬盘或者U盘一个
  • 运行android系统的手机或者平板

首先要保证路由器已经刷入了openwrt,并且已经能正常上网

安装USB、文件系统的内核模块

opkg update
opkg install kmod-usb-core
opkg install kmod-usb-storage
opkg install kmod-usb-ohci
opkg install kmod-usb-ohci
opkg install kmod-fs-ext2
opkg install kmod-fs-ext3
opkg install kmod-fs-vfat
opkg install kmod-fuse
opkg install ntfs-3g

配置自动挂载USB存储设备

安装mount工具

opkg install mount-utils

编辑配置文件

vi /etc/hotplug.d/block/10-mount
#!/bin/sh

# Copyright (C) 2009 OpenWrt.org (C) 2010 OpenWrt.org.cn

blkdev=`dirname $DEVPATH`
if [ `basename $blkdev` != “block” ]; then

device=`basename $DEVPATH`
case “$ACTION” in
add)
mkdir -p /mnt/$device
# vfat ntfs-3g check
if [ `which fdisk` ]; then
isntfs=`fdisk -l | grep $device | grep NTFS`
isvfat=`fdisk -l | grep $device | grep FAT`
isfuse=`lsmod | grep fuse`
isntfs3g=`which ntfs-3g`
else
isntfs=””
isvfat=””
fi

# mount with ntfs-3g if possible, else with default mount
if [ “$isntfs” -a “$isfuse” -a “$isntfs3g” ]; then
ntfs-3g -o nls=utf8 /dev/$device /mnt/$device
elif [ “$isvfat” ]; then
mount -t vfat -o iocharset=utf8,rw,sync,umask=0000,dmask=0000,fmask=0000 /dev/$device /mnt/$device
else
mount /dev/$device /mnt/$device
fi
if [ -f /dev/${device}/swapfile ]; then
mkswap /dev/${device}/swapfile
swapon /dev/${device}/swapfile
fi
;;
remove)
if [ -f /dev/${device}/swapfile ]; then
swapoff /dev/${device}/swapfile
fi
umount /dev/$device
;;
esac

fi

修改可执行权限

chmod 777 /etc/hotplug.d/block/10-mount

配置USB声卡

安装声卡内核模块

opkg install kmod-input-core
opkg install kmod-soundcore
opkg install kmod-usb-audio

然后查看/dev下是否有dsp、audio、mixer
测试声卡是否工作正常,声卡与音箱连接并且插入含有MP3文件的USB存储设备
这里假设usb设备挂载路径为/mnt/sdb1

opkg install madplay
madplay /mnt/sba1/*.mp3

如正常发声则表示声卡驱动成功

安装配置MPD

opkg install mdnsresponder
opkg install libspeex
opkg installmpd

编辑mpd配置文件
vi /etc/mpd.conf
修改为:

#=== edit options as follows ===
music_directory “/mnt/sdb1″
playlist_directory “/mnt/sdb1/.mpd/playlist”
db_file “/mnt/sdb1/.mpd/mpd.db”
log_file “/mnt/sdb1/.mpd/mpd.log”
error_file “/mnt/sdb1/.mpd/mpd.error”
pid_file “/mnt/sdb1/.mpd/mpd.pid”
state_file “/mnt/sdb1/.mpd/mpdstate”

# use this if you want to use OSS audio output
audio_output {
type “oss
name “my OSS sound card”
device “/dev/dsp” # optional
format “44100:16:2″ #optional
}

# OSS Mixer
mixer_type “oss
mixer_device “/dev/mixer”
mixer_control “PCM”

#=== edit end ===

建立mpd所需目录与文件

mkdir -p /mnt/sdb1/.mpd/playlist
touch /mnt/sdb1/.mpd/{mpd.db,mpd.log,mpd.error,mpd.pid,mpdstate}

运行mpd

/usr/bin/mpd ?create-db

安装mpc控制播放

opkg install mpc
mpc listall | mpc add
mpc play

用手机控制播放

手机连接路由器,在android电子市场里搜索 MPDroid 并安装
运行MPDroid,在WLAN based connection里选择连接无线路由的essid
在Host选项里填入路由器的IP地址,其它则默认,然后返回到主界面
此时即可用手机无线控制路由器的播放、暂停以及其它操作

喜欢 (2)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。