自制 DD-WRT 固件笔记 (1)

标签: 技术文档 | 发表时间:2011-01-19 11:43 | 作者:fcicq Leo Pay
出处:http://www.fcicq.net/wp

这实在不属于 Wireless Series, 显然是个技术活…

去年年初有篇 说说 OpenWRT,
但好像不到二月份这只 wr841n v5 就变砖了, 也没好意思去再修.
(刷回原厂固件时, 误刷了带 u-boot 的版本, 不断重启)

最近买了 usb-ttl 线, 于是就救回来了. (没细节? :D )
面对路由器的灯, 找到 J2, 从上往下是 Vcc, GND, RX, TX,
可以参考 TP-Link TL-WR841ND
(反正找对 GND 就好办, 至少不会烧?)

注意固件的大小, 必须是 3932160 bytes.

setenv serverip 192.168.1.2
printenv
tftpboot 0x80000000 841.bin
erase 0x9f020000 +0x3c0000
cp.b 0x80000000 0x9f020000 0x3c0000
bootm 0x9f020000

tftp server 推荐使用 tftpd-hpa,
只是要注意它的 root 目录在 /var/lib/tftpboot.

(于是这路由器就变成 dd-wrt 了)

dd-wrt. 整体很好.
但有些功能没有, 有些功能却在浪费空间.

于是就想到移花接木.
把 wr1043n 的固件解压, 把有用的东西拿来. 这个步骤处处是坑…

因为这个步骤是个坑, 所以编译就不是坑… :D

如何取得 dd-wrt 的 kernel source, 写在这里是因为它很大, 1 G 不到.
如果网速慢的话最好赶紧放弃… :D

这个文件里面有大量的路由器信息.
注意这一句: return ROUTER_BOARD_PB42, 这说明这个路由器对应的是 pb42 目录下的源码.

svn co svn://svn.dd-wrt.com/DD-WRT/src/linux/pb42/linux-2.6.34.6

还有工具链.

current-toolchains.tar.bz2, 很大 (300M+), 因为什么平台的都有…
注意这个工具链是 64bit 用的. 不行的话还是用 kernel.org 的吧.

kernel.org 现成的工具链(Cross-compiler binaries)更小更新更好使, 但这次还是求稳用了 ddwrt 提供的那个.
如果你有幸能下完的话, 只要保留 toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1 一个目录即可 :D
(注意看 uname -a, 或者 zcat kernel | strings 也可以, 怎么得到 kernel 见下)

把大件说完了. 下面踩坑 :D

从这里取得 firmware-utils.
svn co svn://svn.openwrt.org/openwrt/trunk/tools/firmware-utils

src 目录里有 mktplinkfw.c, 别高兴太早, 要这样编译…
gcc -o mktplinkfw md5.c mktplinkfw.c
(可能会碰到 bswap_32 什么的问题, 偶使用了一个错误的 bswap_32 的实现… :( )

正确的实现(放那堆 define 后面即可):
static inline unsigned short bswap_16(unsigned short x) {
return (x>>8) | (x<<8);
}
static inline unsigned int bswap_32(unsigned int x) {
return (bswap_16(x&0xffff)<<16) | (bswap_16(x>>16));
}

喜出望外, mktplinkfw 有这两个参数.
-i file inspect given firmware file file
-x extract kernel and rootfs while inspecting (requires -i)

于是原来的 firmware 就这么被分解了.

rootfs 是 squashfs 3.0 + lzma & big endian 的格式. 需要解开.
svn co svn://svn.dd-wrt.com/DD-WRT/src/squashfs-tools
32bit 的机器肯定是不能编译的… 要改 CFLAGS, 藏的都挺隐蔽的(可以看官方教程).

Makefile 也要大修(缩进有问题, 就这样吧).
all: mksquashfs-lzma unsquashfs-lzma
unsquashfs-lzma: unsquashfs.o
$(CXX) unsquashfs.o -L$(LZMAPATH) -llzma -lpthread -o $@

好不容易解开了…

删除文件的过程应该没人愿意听.
radius, pptp, sputnik, bird, chilli 什么的都删掉. 想删别的… 先搜索再删? :D

从这里开始请勿模仿
把 wr1043n 固件里的 radvd, ipv6.ko, sit.ko 搬过来, 重新打包.

因为没有使用 root 权限, 所以打包的时候加上了 -all-root 参数.
mksquashfs-lzma squashfs-root ROOTFS -noappend -be -all-root

然后生成固件. 话说偶为什么知道要这么做呢? 看 Makefile.
mktplinkfw -B TL-WR841NDv5 -N DD-WRT -V 24 -k KERNEL -r ROOTFS -o 841.bin
(注意!!! 这个命令是错的!!! DONT USE THIS COMMAND!!!)

为什么是个错的呢. mktplinkfw -i (原固件)便知.
Kernel load address : 0×80002000 (OpenWrt default: 0×80060000)
Kernel entry point : 0×80002000 (OpenWrt default: 0×80060000)
这么重要的参数居然是错的…

正确的命令不能漏下它们:
mktplinkfw -B TL-WR841NDv5 -N DD-WRT -V 24 -k KERNEL -r ROOTFS -E 0x80002000 -L 0x80002000 -o 841.bin

To be continued…

ps:
0x3C0000 的固件空间内究竟能塞下多少东西呢…

ps2:
rg100a 比较容易改而且 flash 容量也大. 这东西也早就变成商业化产品并提供特殊服务了. 实话说这东西加上改造成本就不合适了.
是的, 在如此小的固件内集成 openvpn 确实是没有问题的, 甚至 ipv6+openvpn 都是可能的(但没有实际测试).
openwrt 因为 ath9k 不好使(历史印象)等原因偶不愿意再测试了.

ps3:
Wireless Series 最近应该也会做补充, 敬请期待.

相关 [dd wrt 固件] 推荐:

自制 DD-WRT 固件笔记 (1)

- Leo Pay - fcicq&#39;s blog-beta
这实在不属于 Wireless Series, 显然是个技术活…. 去年年初有篇 说说 OpenWRT,. 但好像不到二月份这只 wr841n v5 就变砖了, 也没好意思去再修.. (刷回原厂固件时, 误刷了带 u-boot 的版本, 不断重启). 最近买了 usb-ttl 线, 于是就救回来了.

linux用dd测试磁盘速度

- -
linux用dd测试磁盘速度. 首先要了解两个特殊的设备:. /dev/null:回收站、无底洞. /dev/zero:产生字符. 因为/dev//zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力. 因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力.

正确的使用dd进行磁盘读写速度测试

- - 操作系统 - ITeye博客
正确的使用dd进行磁盘读写速度测试. dd是Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换,所以可以用来测试硬盘的顺序读写能力. 功能说明:读取,转换并输出数据. 语  法:dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][--help][--version].

Android取证:使用ADB和DD对文件系统做镜像

- - FreeBuf互联网安全新媒体平台
从本文开始我将为大家带来一系列与数字取证相关的文章,并将重点关注移动设备方面的取证技术. 在这篇文章中,我将为大家分享一些关于我对Android设备镜像采集的想法. 在Android设备上,有两种我们可以执行的镜像采集类型:. 实时采集:在正在运行的设备上执行. 通常,分析人员会使用各种工具获取root权限,并使用DD提取镜像;.

iOS 4.2.1 固件越狱

- daydreamx - 爱范儿 · Beats of Bits
iOS 4.2.1 刚出现没多久,Redsn0w 0.9.6b4 就现身了. 通过它越狱后可以正常使用 Cydia 和 MobileSubstrate. Redsn0w 0.9.6b4 是基于神奇小子 Geohot 的 Limera1n bootrom 溢出而制作的. 不过这次的越狱对部分机型是 tethered,即越狱后重启需要连接 USB ,这些机型有 iPhone 3GS(new bootrom), iPhone 4, iPad, iPod touch 2G( MC 型号), iPod 3G 以及 iPod touch 4G.

Kindle3 固件升级到 3.3的福利

- xcv58 - Pipes Output
自从Kindle4发布以后,大家一直都希望K3(Kindle Keyboard)随之而来的固件升级能提供局刷功能,伴随着今天3.3固件的发布这个结果已经出来. 为了验证第一时间手动下载更新到3.3,结果是一半对一半,既有失望也有福利. Kindle 3.3设置中没有提供类似于Kindle4的局刷开关,翻页依旧是全刷(黑闪一下).

6.60官方固件解包工具New PSARDumper 660

- 夜の猫 - 电玩巴士-PSP频道
  可能对于PSP破解比较熟悉的玩家都听说过New PSARDumper的名字,顾名思义,这款软件是对索尼的官方固件EBOOT.PBP进行解密的工具,自制系统的制作也是基于对官方固件的解密前提下. 由于索尼最新放出的6.60官方升级文件更换了加密方式,导致原有的解包工具无法正确进行解密.   如今,解包工具New PSARDumper更新了660版本,新版本支持6.60官方升级文件的解包,也就是说现在6.60系统的加密方式已经被破解.

黑客创造PS3第一个自制固件

- Xiujun Ma - Solidot
一位自称Kakaroto的黑客宣布他创造了世界第一个PS3自制固件. 但出于法律和版权方面的顾虑,他不会公开发布自制固件,而是提供必要的工具让任何Linux和Mac的高级用户自己动手创作. PS3工具包发布在GitHub上,他声称用户将可以安装任何版本的官方固件,最新的PS3 3.55版固件不允许用户降级,但新的工具允许用户安装一个修改版本.

魅族M9 2.3正式版固件发布

- 赵星云 - cnBeta.COM
让魅友期待的2.3正式版固件终于发布了. 从4月底的第一版2.3测试版到正式版,足足经历了三个月时间. 通过魅友们不断测试,提建议,魅族工程师不断完善改进固件,才有了今天的正式版固件.

苹果笔记本电池可通过固件锁死

- 雪冬 - Solidot
安全研究员Charlie Miller发现了一种有趣的方法让苹果电脑的电池永久失效. Miller将在拉斯维加斯举行的Black Hat会议上公开他的研究. 现代笔记本的电池都植有芯片,内有电池如何与操作系统和其它组件交互的指令. Miller受去年入侵ATM演示的启发,想知道如果能访问电池芯片,去扰乱指令集和固件会发生什么事情.