存档

‘技术’ 分类的存档

DD-WRT上运行Optware最简单的方法,在华硕N16上测试通过

2010年5月22日

这是一个最新的,最简单的在路由上使用Optware的方法, 建议你使用一个带usb的路由,以及最新的DD-Wrt版本。
USB版本的用户,请不要用JFFS2,禁用它。另外有些服务很占CPU资源,比如Twonky,使用它们请确保你的硬件足够强大。

下面以DD-WRT的Mega版本为例,演示如何安装Optware。

首先,准备一个usb存储器,可以是u盘,可以是移动硬盘。格式化城ext3格式。因为这个格式支持最好。
分区格式化可以用linux系统,或者xp下用Paragon.Partition.Manager.Professional。

在Services -> USB把所有support都enable。
Disk Mount Point设置成/opt,保存重启。

telnet或者ssh进入路由,用putty工具。
执行mount,可以见到如下提示
root@DD-WRT:~#mount
rootfs on / type rootfs (rw)
/dev/root on / type squashfs (ro)
none on /dev type devfs (rw)
proc on /proc type proc (rw)
ramfs on /tmp type ramfs (rw)
devpts on /proc/bus/usb type usbfs (rw)
/dev/scsi/host0/bus0/target0/lun0/part1 on /opt type ext3 (rw)
root@DD-WRT:~#

证明硬盘已经挂在上。

用以下命令安装Optware
wget -O /tmp/prep_optware http://wd.mirmana.com/prep_optware
sh /tmp/prep_optware

这个过程大概需要10-20分钟。
安装好后过一分钟重启路由。
启动好后一分钟后登陆ssh或者telnet
登陆后用mount查看磁盘挂载情况,用df -h查看磁盘容量。

执行service命令可以看到当前服务运行情况
service命令可带参数见下:
service - show all services (enabled/disabled)
service <service name> - if “status” parameter is supported, will show service status, otherwise will show whether specified service is running
service <service name> on - Enable the script, allowing execution (chmod +x  /opt/etc/init.d/S<servicescript>)
service <service name> off - Disable the script, disallowing execution (chmod -x  /opt/etc/init.d/S<servicescript>)
service <service name> start - Start/execute the script, as long as service is enabled (i.e. permissions allow execution)
service <service name> stop Stop/kill the script, if the service is running
service <service name> restart Stop/kill the script, if the service is running, and then start/execute the script, as long as service is enabled
service <service name> <parameter> - Run the script with the parameter.

我们首先要启用xinetd,这个打印服务需要
service xinetd on
service xinetd start

Twonky很占cpu,禁用之
service twonky stop
service twonky off

OK,到此为止,Optware安装完成,试试打印,bt呗~

要用打印功能,要开启Watchprinter

service watchprinter on

service watchprinter start

试用结果:

无线打印10M的PDF文件完美,BT下载全速3M/s一夜无死机,内存占用90M/128M

Jacob 技术 , ,

华硕Asus RT-N16路由刷DD-WRT,TOMATO等第三方固件

2010年5月22日
asus_rt-n16_product

asus_rt-n16_product

华硕的RT-N16是好东西,国内买1000多块,我80美刀拿下的。

资料列下:

BCM4716的CPU,主频高达480M,可以超频至533M
32M的Flash
128M的DDR2内存
支持高达30W的并发数
带2个USB2.0接口
官方的固件就可以ipkg安装oleg的软件包,完全不需要刷DD之类的东东
这种配置别说嵌入式Linux了,就连windows都能跑了

OK, 说说怎么刷第三方固件。

这个路由国内少见,资料也少,英文资料的思路大多是,先刷dd的mini版,然后restore factory setting。就可以刷mega版和tomato了,刷好以后还要restore factory setting。

我的做法如下:

1. 在asus的固件下刷mini版,如下

dd-wrtv24-13491_newd-2_k26_mini_rt-n16

2. Administration - Factory Defaults

3.登录到ssh或者telnet,执行nvram get http_passwd,获取md5加密的密码,如果你打算刷tomato的话,要记住这个密码,是第一次登陆tomato的密码。

4. 刷Tomato或dd mega版

tomato的登陆用户名是root,密码是刚才记录下来的。如果要刷其他dd不用这么麻烦,因为dd在第一次登陆的时候可以重置用户名密码。

dd-wrtv24-14311_newd-2_k26_big

tomato-ndusb-9042rtn16-beta02-ext

不要reload factory default否则会有各种各样的问题

这样做出来的tomato和dd mega所有功能正常,可以做repeater,可以做client,或者bridge

Jacob 技术 , ,

成功在Windows7(64位)下安装HFSS11

2010年4月10日

此方法使用于win7 32位,64位,vista32位,64位的HFSS安装。好处是能用超过4G的内存,速度貌似有所提高。

1、下载HFSS11及其破解补丁(自己找)。

2、解压缩HFSS安装文件,在命令行里进入解压缩后的目录,执行setup.exe /z ignore_os, 提示不支持此系统,按确定跳过。

3、安装过程中需要license文件,在破解文件包里有。

4、安装完成还不可以使用,提示license错误。将安装后的目录,对我来说是c:\program files(x86)\Ansoft\HFSS11,复制到另外一台xp的电脑上,将破解文件Ansoftfix.com复制到这个目录,运行之。

5、复制回并覆盖win7电脑。

试用24小时暂时没有问题。

Jacob 技术

换一种思路,在国内也能用Google Checkout

2009年4月24日

最近在研究VOIP,这方面美国比较强势,但是好多公司都用第三方系统作为支付手段,Google checkout 和Paypal用的比较多,Checkout是Google推出的一种国际支付网关,可是不支持中国大陆地区的信用卡,当然我们也还是有方法可以对付的:)

具体方法是:

申请的时候在地区中选择 HongKong, 然后 其他信息按照信用卡大陆地区的格式填写,然后OK

很奇怪系统会从信用卡里面扣除8港币,然后就验证通过了。最后可以在物流信息里面选择中国大陆的信息

至于8港币是干嘛被扣除的,我发邮件去问Google了,还没回复。。。。

更新:8港币用于认证信用卡,1-14天返还。转发Google的回信。

===========

Hello,

Thank you for your email. Please be assured that your credit card was not charged for 8 HKD.

The 8 HKD transaction you see pending from Google is actually a pending authorization request between our billing system and the bank that issued your credit/debit card.

Authorizations are the initial communication between our billing system and the bank’s billing system to ensure that your credit/debit card is valid and able to be used.

When you check your bank account or credit card statement, payment authorizations are often listed as pending. These transactions might remain in your account anywhere between 1-14 business days, depending on your card-issuing bank. Please keep in mind they are authorization requests only, not actual charges.

If you have any additional questions, please feel free to contact us again.

For general program or account questions, please review our Help Center at http://checkout.google.com/support

Sincerely,

Taylor
The Google Checkout Team

Jacob 技术

Luminary的Cortex-M3核心ARM处理器基于IAR的中断注册方法

2008年8月22日

建议采用IAR工程模板来编写程序,比较快捷。

注册中断有两种方法:采用xxxRegister()函数,或者手工修改启动文件startup.c的中断向量表

例如中断函数是:
void I2C_ISR(void)

则在starup.c里要修改两个地方:

1. 找到
extern int main(void);
在后面补上中断函数的声明:
extern void I2C_ISR(void);

2. 在中断向量表的数组里,找到注释I2C的项目,将IntDefaultHandler换成I2C_ISR

完成。

Jacob 技术 ,

IAR中MSP430中断服务函数的定义

2008年7月17日

//为了保证代码可以在IAR编译器的任何版本中都能正确得到编译,所以作以下的条件编译。

#ifdef __IAR_SYSTEMS_ICC__              //如果编译器是IAR, 那么以下将被编译。

#if __VER__ >= 200

#pragma vector=USART0RX_VECTOR          //在IAR2.0以上中断函数声明。

__interrupt void SPI0_rx (void)

#else                                   //在IAR2.0以下中断函数声明。

interrupt[USART0RX_VECTOR] void SPI0_rx (void)

#endif                                  //IAR中断函数声明结束。

{ }

在上述中

USART0RX_VECTOR 是定义中断地址宏,其实就是一个中断矢量值,例如,地址, 0xffe0 。

这个中断矢量有芯片型号决定,一旦信号确定,那么所有的终端矢量也就确定了。

SPI0_rx 是中断函数名称,使用者可以根据自己的喜好来编写这个函数名。

点此在新窗口浏览图片 实际例程

//**************************************************************************
//例程描述:利用定时器定时功能,实现P1.0方波输出。

#include

{
WDTCTL = WDTPW + WDTHOLD;          //停止看门狗WDT,不使用内部看门狗定时器。
P1DIR |= 0×01;                     //设置P1.0口方向为输出。
CCTL0 = CCIE;                      //设置捕获/比较控制寄存器中CCIE位为1,CCR0捕获/比较功能中断为允许。
CCR0 = 50000;                      //捕获/比较控制寄存器CCR0初值为5000。
TACTL = TASSEL_2 + MC_2;           //设置定时器A控制寄存器TACTL,使时钟源选择为SMCLK辅助时钟。
_BIS_SR(LPM0_bits + GIE);          //进入低功耗模式LPM0和开中断
}

//定时器A 中断服务程序区
//当IAR编译器版本大于或等于2.0以上时,则中断写法格式如下。
#pragma vector=TIMERA0_VECTOR        //定时器A0中断向量
__interrupt void Timer_A (void)      //中断函数
{
P1OUT ^= 0×01;                    //P1.0取反输出
CCR0 += 50000;                    //重新载入CCR0捕获/比较数据寄存器数据
}

//程序结束
//**************************************************************************

Jacob 技术 ,

使用PCMICIA卡转并口(NM9805芯片)仿真MSP430

2008年7月15日

IAR for MSP430中直接识别PC卡并口地址(0xFFFE),直接仿真。 over

PS:IAR这点做的还是比较好的,幻想下,是不是IAR for AVR、51或者ARM也可以用了呢?有空试下~

=======
花了一个多小时把IAR AVR拖下来,安装,发现支持设备很多,但是没有并口下载器,想想也对,并口只能下载不能调试哦。呵呵

51暂时用不到,ARM的ADS平台已经很成熟了就不折腾了。

Jacob 技术

关于IAR for MSP430破解问题

2008年7月15日

IAR for MSP430注册机注册后可以安装但是编译时提示未授权,这个情况有一点值得注意,就是IAR的破解机些本机ID的时候,0x的x一定要小写。后面的16进制码要大写。

另外安装完IAR以后无法使用并口的JTAG调试器,提示两个错误。这时候重启一下计算机就好,而使用usb口的调试器则不用重启就可以用了。

Jacob 技术

关于SBC2410板子的串口

2008年6月30日

回家了一个星期,就算是放过暑假了,明天开始去实验室~~~

回家之前一天一直在折腾SBC2410这块板子的串口,以前这个串口程序是调出来的,程序都有以前写好的,但是烧在板子上PC机就是收不到数据,所以一直怀疑是我新买的PALM的USB转串口线有问题。在家的时候买了一台示波器,找了一根串口的对接线用来连接PC和示波器,测试发现我的USB转串口是好的,而且超级稳定,但是很奇怪,用这根线没法让两台电脑进行串口通讯,于是开始怀疑是线的问题,家里找不到万用表,所以一直拖到现在。

回南京之后,用示波器看了下SBC2410板子的串口,单次触发,得到的结果竟然是板子上2号脚是发送,难怪之前不能用。又用万用表测了一下家里用来连接PC和示波器的那个串口母对母的线,竟然是直连线,2号和3号没有交叉,难怪不能两台计算机通讯。

结论:1、SBC2410和示波器的串口都是公口,但都和电脑上的公口定义不一样。
2、串口母对母的线是直连线,不能进行双机通讯(这点目前仅限我手头上的这根,但是我觉得估计都是这样。。。。)
3、PALM的USB转串口线可以用。

附串口各引脚定义:
Pin Name Dir Description
1 CD Carrier Detect
2 RXD Receive Data
3 TXD Transmit Data
4 DTR Data Terminal Ready
5 GND System Ground
6 DSR Data Set Ready
7 RTS Request to Send
8 CTS Clear to Send
9 RI Ring Indicator

over

Jacob 技术

重新编译SJF2410以适应NM9805并口卡(PCMICIA接口)

2008年6月23日

H-Jtag软件自带的H-Flasher只提供了烧写Nor-Flash的功能,并不能烧写Nand等,很庆幸SJF2410提供了C++源代码,立马装了个VC对代码进行重编译以适应我的PCI转出来的并口卡,简单的来说就是将默认的378地址改成我的FFE8。

主要要改的是两个文件

1、ppt.h

源代码如下,可以看到默认的LPT1-3地址都在上面,将2和3删去,将LPT1地址改为0xFFE8
#ifndef __PPT_H__
#define __PPT_H__

int GetValidPpt(void);
int InstallGiveIo(void);
void SetPptCompMode(void);

extern int validPpt;

#define LPT1 0×378  // the search order is LPT1 then 2 then 3
#define LPT2 0×278  // first valid address found is used (re-order if needed for multiple ports)
#define LPT3 0×3bc  // hardware base address for parallel port

#define OutputPpt(value)    _outp((unsigned short)validPpt,value)
#define InputPpt()      _inp((unsigned short)(validPpt+0×1))

#endif //__PPT_H__

如下:

#ifndef __PPT_H__
#define __PPT_H__

int GetValidPpt(void);
int InstallGiveIo(void);
void SetPptCompMode(void);

extern int validPpt;

#define LPT1 0xFFE8
#define OutputPpt(value)    _outp((unsigned short)validPpt,value)
#define InputPpt()      _inp((unsigned short)(validPpt+0×1))

#endif //__PPT_H__

2、PPT.c
按道理来说改完上面的就可以用了,但是不知道为什么,编译后还是提示找不到并口,于是手动将LPT1返回。
涉及到的函数是int GetValidPpt(void)。
源代码:

int GetValidPpt(void)
{
// search for valid parallel port
_outp(LPT1, 0×55);
if((int)_inp(LPT1) == 0×55)
return LPT1;

_outp(LPT2, 0×55);
if((int)_inp(LPT2) == 0×55)
return LPT2;

_outp(LPT3, 0×55);
if((int)_inp(LPT3) == 0×55)
return LPT3;

return LPT1;
}

修改后:

int GetValidPpt(void)
{
// search for valid parallel port
return LPT1;
}

Jacob 技术