找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 76702|回复: 143

openwrt 路由器 固件编译流程 希望大家都可以用上自己编译的固件

 火... [复制链接]
发表于 2011-5-8 11:51 | 显示全部楼层 |阅读模式
本帖最后由 99010 于 2011-6-3 08:17 编辑

前言:很多玩家都想自行编译OP固件,但是很多教程都语焉不详,本人综合了其他教程做了点小总结,希望大家都能看懂。这里非常感谢以往发教程的玩家。编译固件不需要神马很深奥的知识,但是要求起码能看懂英文,会使用SSH、WINSCP软件,了解OP的那些功能是由哪个软件包提供。

一。安装ubuntu,具体安装流程可以百度谷歌,这里不详细描述。
桌面版、服务器版都可以,因为都是命令行操作,推荐使用服务器版本(这里需要注意的是一定要32位的系统,64位的系统也可以编译,但是有些莫名其妙的问题,具体原因未知)。
服务器版本安装时有个功能选项,选择安装SSH服务就可以了,其他功能完全可以不安装,因为用不到。
op官方不推荐虚拟机,但是本人用虚拟机也没什么大问题,有条件的还是用真实电脑来编译吧。

二。ubuntu下OP编译环境需要安装很多组件,很多教程包括OP官网教程都是一道命令一起安装,其实这样会有一些组件没有装上的,所以还是老实的一个一个装吧。所有命令全部为SSH登陆后操作。

升级组件包
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 subversion
sudo apt-get install  git-core
sudo apt-get install gawk
sudo apt-get install asciidoc
sudo apt-get install libz-dev

每一行回车后都会马上检测安装或升级那个组件,官方WIKI用的是单一条命令,本人分开了,因为这样更容易查看每一个组件的安装是否成功。下载东西之前会有提示本次要下载多少M的东西,问是否的,按y然后回车让它下载就行了。当中最后面的asciidoc组件是需要下载400多MB东西的,慢慢等了。

三。开始编译前做些必要的步骤
新建一个openwrt目录
mkdir openwrt
进入openwrt目录
cd openwrt
下载官网源码到本地
svn checkout svn://svn.openwrt.org/openwrt/trunk
添加trunk目录权限
sudo chmod -R 777 trunk

四。编译流程。
编译完成的固件会保存在/openwrt/trunk/bin目录下面,可用WINSCP登陆上去提取。

进入trunk目录
cd openwrt/trunk
更新最新源码
./scripts/feeds update -a
安装最新源码
./scripts/feeds install -a
更新版本号
svn up
进入编译组件包菜单
make menuconfig
开始编译
make V=99
编译完成后清除之前的编译作业。(使用这个命令前,记得把编译好的固件备份出来,不然会被删除掉,切记)
make clean
恢复默认编译环境
make defconfig


其中make menuconfig会有一个编译管理器,在里面可以选择型号、OP功能组件,需要用到方向键、回车键、空格键。方向键是移动光标,回车键是确认,空格键是选择(在选项框按下空格键,*号是编译进固件,M是编译但是不编译进固件)。
Target System-----选择编译类型
Target Profile----选择编译路由型号
添加功能时尽量依靠依赖包,比如添加ddns时,只需要在luci选项里面选择luci-app-ddns,编译管理器会自动加上ddns-scripts及其他依赖库文件。
下面举个简单例子:
编译一个mr3420的固件
1.Target System-----选择Atheros AR71xx/AR7240/AR913x/AR934x
2.Target Profile----选择TP-LINK TL-MR3420 v1
3.LuCI----选择Collections----- <*> luci
4.LuCI----选择Translations----<*> luci-i18n-chinese
5.Exit----Yes
6.开始编译make V=99,最后会得到一个4M的带中文luci的mr3420固件。

五。进阶设置。
用WINSCP登陆
1.在路径 /trunk/tools/firmware-utils/src/mktplinkfw.c  这个文件里边有个“fw max len”请改成7c0000 (这一步把固件最大限制改成8M),如果是16mflash,请改成fc0000(最大限制改成16m)。
2、修改target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-mr3x20.c(找相应文件)

4M:

41                 .name           = "u-boot",
42                 .offset         = 0,
43                 .size           = 0x020000,
44                 .mask_flags     = MTD_WRITEABLE,
45         }, {
46                 .name           = "kernel",
47                 .offset         = 0x020000,
48                 .size           = 0x140000,
49         }, {
50                 .name           = "rootfs",
51                 .offset         = 0x160000,
52                 .size           = 0x290000,
53         }, {
54                 .name           = "art",
55                 .offset         = 0x3f0000,
56                 .size           = 0x010000,
57                 .mask_flags     = MTD_WRITEABLE,
58         }, {
59                 .name           = "firmware",
60                 .offset         = 0x020000,
61                 .size           = 0x3d0000,
62         }
63 };

8M:

41                 .name           = "u-boot",
42                 .offset         = 0,
43                 .size           = 0x020000,
44                 .mask_flags     = MTD_WRITEABLE,
45         }, {
46                 .name           = "kernel",
47                 .offset         = 0x020000,
48                 .size           = 0x140000,
49         }, {
50                 .name           = "rootfs",
51                 .offset         = 0x160000,
52                 .size           = 0x690000,
53         }, {
54                 .name           = "art",
55                 .offset         = 0x7f0000,
56                 .size           = 0x010000,
57                 .mask_flags     = MTD_WRITEABLE,
58         }, {
59                 .name           = "firmware",
60                 .offset         = 0x020000,
61                 .size           = 0x7d0000,
62         }
63 };


16M:

41                 .name           = "u-boot",
42                 .offset         = 0,
43                 .size           = 0x020000,
44                 .mask_flags     = MTD_WRITEABLE,
45         }, {
46                 .name           = "kernel",
47                 .offset         = 0x020000,
48                 .size           = 0x140000,
49         }, {
50                 .name           = "rootfs",
51                 .offset         = 0x160000,
52                 .size           = 0xe90000,
53         }, {
54                 .name           = "art",
55                 .offset         = 0xff0000,
56                 .size           = 0x010000,
57                 .mask_flags     = MTD_WRITEABLE,
58         }, {
59                 .name           = "firmware",
60                 .offset         = 0x020000,
61                 .size           = 0xfd0000,
62         }
63 };

某些机型是这样的:
8M:

0x000000000000-0x000000020000 : "u-boot"
0x000000020000-0x000000160000 : "kernel"
0x000000160000-0x0000007f0000 : "rootfs"
0x000000620000-0x0000007f0000 : "rootfs_data"
0x0000007f0000-0x000000800000 : "art"
0x000000020000-0x0000007f0000 : "firmware"


4M:

0x000000000000-0x000000020000 : "u-boot"
0x000000020000-0x000000160000 : "kernel"
0x000000160000-0x0000003f0000 : "rootfs"
0x000000304000-0x0000003f0000 : "rootfs_data"
0x0000003f0000-0x000000400000 : "art"
0x000000020000-0x0000003f0000 : "firmware"

16M:

0x000000000000-0x000000020000 : "u-boot"
0x000000020000-0x000000160000 : "kernel"
0x000000160000-0x000000ff0000 : "rootfs"
0x000000380000-0x000000ff0000 : "rootfs_data"
0x000000ff0000-0x000001000000 : "art"
0x000000020000-0x000000ff0000 : "firmware"

编译需要用到的DL文件夹,下载解压后用winscp上传到trunk目录
http://u.115.com/file/dnahsytg#
dl.rar

评分

参与人数 11恩山币 +15 收起 理由
wgff151 + 1 泥马,真给力!
zjalone + 1 赞一个,你是我的呕像!
jec123456 + 1 支持 受用
betalin + 1 支持 受用
magicyjh + 1 谢了,改天有空也自己研究研究
icerol + 3 我很赞同
leangjia + 1 谢谢分享!附加到OP官方WIKI去了~
icest + 1 支持交流
roy325 + 1 爱死LZ
huangfc + 1 各自可以DIY固件了!
phantom-gy + 3 再接再厉~

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
头像被屏蔽
发表于 2011-5-8 13:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-5-8 13:53 | 显示全部楼层
本帖最后由 axishero 于 2011-5-8 13:58 编辑

此文写的很全面!!!
不过组件包那里一个个安装比较啰嗦,本人是一次装完这些包,没有编译不通过的
  1. apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
  2.   git libncurses5-dev libz-dev patch unzip zlib1g-dev subversion
复制代码
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-5-8 13:55 | 显示全部楼层
强列支持
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-5-8 14:30 | 显示全部楼层
这个要顶 顺便纠正下是mach-tl-mr3x20.c不是mach-tl-wr3x20.c
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2011-5-8 14:50 | 显示全部楼层
此文写的很全面!!!
不过组件包那里一个个安装比较啰嗦,本人是一次装完这些包,没有编译不通过的 apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
  git libncurses5-dev libz-dev pa ...
axishero 发表于 2011-5-8 13:53


麻烦一点也当是学习过程。
其实不同版本的ubuntu安装这些东西时真的会有些组件是没装完的,本人就遇到过。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2011-5-8 14:50 | 显示全部楼层
这个要顶 顺便纠正下是mach-tl-mr3x20.c不是mach-tl-wr3x20.c
729650915 发表于 2011-5-8 14:30

已修正。谢谢指出。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-5-8 15:01 | 显示全部楼层
先装svn
再svn co
然后make defconfig,就会显示缺哪些包,10.04.2好像只缺四个,逐一装上就是
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-5-8 18:14 | 显示全部楼层
本帖最后由 leangjia 于 2011-5-8 18:15 编辑

要编译现成的apk后缀文件,放在package文件夹中吗?还需要修改哪些地方才能顺利编译?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-5-8 18:48 | 显示全部楼层
要编译现成的apk后缀文件,放在package文件夹中吗?还需要修改哪些地方才能顺利编译?
leangjia 发表于 2011-5-8 18:14



恩  同问非官方包如何编译  ipk~~~~~不是apk吧
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-5-8 18:49 | 显示全部楼层
本帖最后由 ourpurple 于 2011-5-8 18:50 编辑

官方的wiki里面有 creat package的页面  就不还不明白makefile怎么写的  自动生成么?


http://wiki.openwrt.org/doc/devel/packages?s[]=package
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-5-8 22:51 | 显示全部楼层
爱死LZ了,这个大家都需要
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-5-10 17:06 | 显示全部楼层
openwrt 路由器 固件编译流程 希望大家都可以用上自己编译的固件
好贴子.mark!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-5-11 00:10 | 显示全部楼层
再顶,希望多些分享,少些伸手党
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-5-11 13:32 | 显示全部楼层
估计来这里的都是喜欢折腾的朋友,没人愿意做伸手党,但无奈编译~~并非每个人都能做到的
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 10:19

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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