找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 44124|回复: 109

我设计的超级网络串口,附原理讲解(绝对原创)

[复制链接]
发表于 2010-9-26 10:34 | 显示全部楼层 |阅读模式
把一个路由器的串口线接出来难度不大,但是要把一个路由器的串口线接出来,并且改造成像主机一样可以查看其它设备的串口,那就相当的有挑战,关键是还很实用。
现在的笔记本电脑甚至台式机电脑大都不带串口了,USB转串口又很不稳定,市面上的网络串口贵,功能还少,所以我就操刀花了大概一个月吧设计了这个网络串口。说它超级,是因为它可以使用各种各样的网络连接方式。
先看一张完成后的图片:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 6恩山币 +6 收起 理由
lizhendong + 1 楼主威武—我就想问问挖掘机技术哪家强?
siasjack + 1 一看就是觉得高端、大气、上档次!
lixiangyy + 1 有创意
sonicxz + 1 原创内容
maidoo + 1 精品文章
yysolid + 1 支持原创 貌似发到改造版更好点...

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2010-9-26 10:35 | 显示全部楼层
很NB的样子,,
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2010-9-26 10:48 | 显示全部楼层
本帖最后由 adoot 于 2010-9-26 10:59 编辑

改造开始,第一步:在淘宝上购买了一块Mercury MW150R无线路由器,花了90块大洋。这款路由器虽然便宜,但性能还不错。CPU是Atheros的AR7240,里面包了一颗 MIPS24K 400MHz核,里面还顺便包了一颗5口交换机。无线是一颗Atheros的AR9285,1X1的802.11n,最高支持到150Mbps传输速率。然后配了32MB的DDR内存,4MB的SPI Flash。所以在这块板子上跑OpenWRT或者DDWRT是相当的轻松啊。

改造第二步:连接出串口,并且添加电平转换芯片。  板子上已经预留了串口管脚,只是没有焊接插针,所以接出串口还是比较容易的。我在其它板子上又寻了一块拥有电平转换芯片的小板,砍了一根串口线,逐一焊上,再用固体胶密封,这样硬件部分基本就完成了。看图。

点评

【付费求硬改】斐讯N1盒子硬改加装Lan网口 刷入固件 实现家庭网关功能  详情 回复 发表于 2018-10-8 09:50
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2010-9-26 10:52 | 显示全部楼层
没里面的图,有图就好啦!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2010-9-26 11:02 | 显示全部楼层
不知道哪里出了问题,上图很费劲。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2010-9-26 11:13 | 显示全部楼层
上面2步接出串口后,再把这个串口通过串口线接到主机的的串口上,这个时候,就可以通过电脑上的终端软件看到路由器的启动过程了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2010-9-26 12:06 | 显示全部楼层
..........................
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2010-9-26 12:29 | 显示全部楼层
怎么没下文了,,USB转串口完全可以很稳定,,这个就是无线比较有意思,
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2010-9-26 12:40 | 显示全部楼层
本帖最后由 fengyichu 于 2010-9-27 10:56 编辑

详细点吧楼主,好顶瘾
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2010-9-26 12:40 | 显示全部楼层
本帖最后由 adoot 于 2010-9-26 12:43 编辑

硬件改造结束后,就开始了软件改造和升级,也是本文的重点和精彩之处,各位看官打好精神。。。
从上面贴出的启动图片,大家可以看出这款路由器使用的是U-boot来启动,然后U-boot把Linux再启动。写到这里,要说说后面改造的主要思路。要想打造一个主机串口,那么它肯定不能随便输出东西,那么U-boot里面要把启动输出禁掉,Linux里面也要把启动输出禁掉,然后要在Linux里面把console不指向这个串口。在Linux里面安装一个串口终端软件和一个Telnet服务器,那么我在PC里面就可以先Telnet到这个路由器设备,在Telnet里面启动串口终端软件,或者是Telnet这个设备的时候直接启动终端软件,那么我的设想就成功了。可是后来证明整个改造过程注定是曲折和漫长的,当然也充满了精彩和刺激。

要想修改,源码自然是必须的。因为U-boot和Linux使用的是GPL协议,那么Mercury公司理论上应该提供这些源码,不过我并没有在Mercury主页 http://www.mercurycom.com.cn 找到提供源码下载的地方,有点不厚道。Mercury不提供,不急,找TP-Link去,大家可能都知道Mercury其实也是TP-Link的一个品牌,主打低端市场,硬件电路板和TP-Link的对应型号是一样的,不同的只是外观机构和里面的软件界面。经过查询,发现Mercury MW150R和TP-Link WR741ND是完全一致的。最后终于找到了源码下载页面http://www.tp-link.com/support/gpl.asp
拿到源码后,发现uboot可以编译,但是Linux就没那么容易了。TP-Link把Linux里面需要开源的东西打了包,没办法一次性直接编译。我不想在这上面花太多时间,所以目光直接转向了OpenWRT,这个我熟。

这个时候,uboot源码到手,但我并不急着去关掉里面的启动输出,因为我要是先关掉它,那么我后面的OpenWRT就不方便烧了,所以要关就先从顶层关起,暂时还是用自带的Uboot。
下载好OpenWRT到本机后,打开编译菜单,发现里面已经包含了WR741ND这款板子,看图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2010-9-26 13:51 | 显示全部楼层
继续啊!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2010-9-26 14:21 | 显示全部楼层
本帖最后由 adoot 于 2010-9-26 14:58 编辑

在OpenWRT里面,启动过程中,串口输出其实是有2个阶段的,这个2个阶段需要分别关闭。第一个阶段叫earlyprint,这个时候Linux刚启动,还没有安装串口驱动,串口输出是直接调用一个叫prom_putchar的函数。我们需要做的就是把这个函数里面的输出部分关掉。第二阶段串口驱动安装完毕,把console映射到该串口,这个时候关闭earlyprint,切换到console输出。这个串口对应的代号是ttyS0,我们需要做的就是把console指向其他串口,即使那个串口不存在也没关系。我就设置成了console=ttyS3.
看看下面的启动信息,红色标记是我上面提到的。
Linux version 2.6.32.16 (adoot@host) (gcc version 4.3.3 (GCC) ) #10 Sun Aug 22 08:12:02 CST 2010
prom: fw_arg0=00000007, fw_arg1=a1f87fb0, fw_arg2=a1f88460, fw_arg3=00000004
MyLoader: sysp=8cedceaf, boardp=ef9f5eff, parts=dcad4e02
bootconsole [early0] enabled
CPU revision is: 00019374 (MIPS 24Kc)
Atheros AR7240 rev 2, CPU:350.000 MHz, AHB:175.000 MHz, DDR:350.000 MHz
Determined physical RAM map:
memory: 02000000 @ 00000000 (usable)
Initrd not found or empty - disabling initrd
Zone PFN ranges:
  Normal   0x00000000 -> 0x00002000
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
    0: 0x00000000 -> 0x00002000
On node 0 totalpages: 8192
free_area_init_node: node 0, pgdat 802bb960, node_mem_map 81000000
  Normal zone: 64 pages used for memmap
  Normal zone: 0 pages reserved
  Normal zone: 8128 pages, LIFO batch:0
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 8128
Kernel command line: rootfstype=squashfs,yaffs,jffs2 noinitrd console=ttyS3,115200 board=TL-WR741ND
PID hash table entries: 128 (order: -3, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytes
Writing ErrCtl register=00000000
Readback ErrCtl register=00000000
Memory: 29400k/32768k available (2028k kernel code, 3368k reserved, 388k data, 152k init, 0k highmem)
SLUB: Genslabs=7, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Hierarchical RCU implementation.
NR_IRQS:56
Calibrating delay loop... 232.65 BogoMIPS (lpj=1163264)
Mount-cache hash table entries: 512
NET: Registered protocol family 16
MIPS: machine is TP-LINK TL-WR741ND
registering PCI controller with io_map_base unset
bio: create slab <bio-0> at 0
PCI: fixup device 0000:00:00.0
pci 0000:00:00.0: reg 10 64bit mmio: [0x000000-0x00ffff]
pci 0000:00:00.0: supports D1
pci 0000:00:00.0: PME# supported from D0 D1 D3hot
pci 0000:00:00.0: PME# disabled
PCI: mapping irq 48 to pin1@0000:00:00.0
Switching to clocksource MIPS
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
TCP reno registered
NET: Registered protocol family 1
squashfs: version 4.0 (2009/01/31) Phillip Lougher
Registering mini_fo version $Id$
JFFS2 version 2.2. (NAND) (SUMMARY)  ?? 2001-2006 Red Hat, Inc.
yaffs Aug 19 2010 10:21:00 Installing.
msgmni has been set to 57
io scheduler noop registered
io scheduler deadline registered (default)
Serial: 8250/16550 driver, 1 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0x18020000 (irq = 11) is a 16550A
Atheros AR71xx SPI Controller driver version 0.2.4
m25p80 spi0.0: mw150r (4096 Kbytes)
spi0.0: searching for MyLoader partition table at offset 0x10000
spi0.0: searching for MyLoader partition table at offset 0x20000
spi0.0: searching for MyLoader partition table at offset 0x30000
spi0.0: searching for MyLoader partition table at offset 0x40000
spi0.0: no MyLoader partition table found
Searching for RedBoot partition table in spi0.0 at offset 0x3e0000
Searching for RedBoot partition table in spi0.0 at offset 0x3f0000
No RedBoot partition table detected in spi0.0
spi0.0: no WRT160NL signature found
Creating 5 MTD partitions on "spi0.0":
0x000000000000-0x000000020000 : "u-boot"
0x000000020000-0x000000120000 : "kernel"
0x000000120000-0x0000003f0000 : "rootfs"
mtd: partition "rootfs" set to be root filesystem
mtd: partition "rootfs_data" created automatically, ofs=350000, len=A0000
0x000000350000-0x0000003f0000 : "rootfs_data"
0x0000003f0000-0x000000400000 : "art"
0x000000020000-0x0000003f0000 : "firmware"
ag71xx_mdio: probed
eth0: Atheros AG71xx at 0xba000000, irq 5
eth0: Found an AR7240 built-in switch
eth1: Atheros AG71xx at 0xb9000000, irq 4
eth1: using fixed link parameters
Atheros AR71xx hardware watchdog driver version 0.1.0
ar71xx-wdt: timeout=15 secs (max=24)
TCP westwood registered
NET: Registered protocol family 17
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
turn off boot console early0
VFS: Mounted root (squashfs filesystem) readonly on device 31:2.
Freeing unused kernel memory: 152k freed
Please be patient, while OpenWrt loads ...
gpio-buttons driver version 0.1.2
input: gpio-buttons as /devices/platform/gpio-buttons/input/input0

点评

楼主你好,先感谢你的帖子对我帮助很大!!!根据你的提示,我修改了生成固件的makefile,将ttyATH0改成ttyATH1,也能达到停止输出的功能,但是路由器启动也就此停止,一直启动不起来。 我的是9331的板子,earlypri  详情 回复 发表于 2015-2-26 23:31
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2010-9-26 14:52 | 显示全部楼层
本帖最后由 adoot 于 2010-9-26 15:26 编辑

这时有的同学要发问了:“在上面的输出信息里,你已经把console设置成了ttyS3,那么在‘turn off boot console early0’之后就不应该再有信息输出了啊”。  事实上确实是这样,关掉early之后,串口就不会再有信息输出。其实那个earlyprint也被我关掉了,你要连上这个路由器的串口,你会看到uboot启动之后就再没任何信息输出了。上面贴的那些启动信息是我使用网络登录这个路由器后,使用“dmesg”命令打印出来,然后贴上去的。
对了,差点忘记一个重要的东西。上集我说到Mercury MW150R和TP-Link 741ND硬件电路一样,其实是不准确的。最起码有一个不一样,看似没关系但会让你郁闷的器件,那就是Flash。虽然两块板子上的Flash规格都一样,但是代号不一样。OpenWRT不认识MW150R上这个代号。所以需要在OpwnWRT里的Flash驱动里面加进去。我去网上查了一下这颗芯片的参数,然后添加下面这断代码就好了:
         /* used in Mercury MW150R, but unkown */
         {"mw150r",    0x1c3116, 0, 64*1024,   64,  SECT_4K,},

如果有同学想在MW150R上面玩OpenWRT,上面这段代码也需要添加的。

编译好OpenWRT后,就需要烧到路由器里面了。这个时候还不能通过网页升级的方法,因为原有的MW150R 固件不允许烧入741ND的固件。那就通过串口吧,反正我们的串口也连接好了。具体怎么通过uboot烧,我就不多说了,有人需要的话我再贴。需要注意的时候,在uboot启动快结束的时候,迅速输入tpl,就可以进入uboot界面了。
暂时写这么多,晚上有空再写。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2010-9-26 17:47 | 显示全部楼层
好帖,软件才是亮点

但年为了WZR2-G108的JTAG,拆了一个APPLE鼠标,USB直接接到JTAG,比LZ这个完美多了,不需要焊接,直接插上去,那根线非常合适,前面卡扣正好从贴壳穿出,自动固定,只要外壳开个洞出来就可以了,线可以自由伸缩,外面做个USB插座转并口的即可,最后拆了,路由放外面被偷了!

Atheros AR7240 rev 2, CPU:350.000 MHz, AHB:175.000 MHz, DDR:350.000 MHz

不知道UBOOT内这个信息能否修改掉,呵呵,CPU没全速工作,内存同频也没到额定频率,都是降频50
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2010-9-26 17:50 | 显示全部楼层
5# adoot


LZ,你这个路由,无线模块本来就没铁内裤的,还是被你拆了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 10:35

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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