Tuesday, December 30, 2008

wl-500gp v2 boots kamikaze(kenel2.6) without wifi

发觉如果仅仅是用来做路由或者加上U盘做个FTP的话,WL-500gp v2刷openwrt的2.4内核+brcm wl的wifi驱动应该是完美了。

但对于wl-500gp+linux 2.6来说,能发挥想象的空间真的是太多了,虽然现在open source的b43驱动对于wl-500gp v2的那个妖腻的无线模块来说还不能用,不过还是有先放弃WIFI,刷2.6做自己想做的东西的冲动~~!

冲动之下,参照http://wiki.openwrt.org/OpenWrtDocs/Hardware/Asus/WL500GPV2先尝试了一下没有USB的配置,成功BOOT。一开始是SVN了最新的kamikaze代码(r13774),且没有修改prom.c和setup.c(CFE的问题导致无法BOOT),不修改是为了偷懒(哈哈),想看看是不是最新的代码里解决了这个CFE的问题,结果发觉不行,启动不了,倒~~!

期待B43快点搞定LP PHY~~~!

对于USB2.0,似乎存在问题,所以只启用了USB1。在make menuconfig里面没有选USB2,只是选了OHCI的USB1,然后也没有patch usb2.0,直接在make kernel_menuconfig的Device Drivers-->
USB support-->OHCI support for Broadcom SSB OHCI core。

Monday, December 22, 2008

OpenWRT kamikaze with linux2.4 on wl-500gp v2

京东上买了一个wl-500gp,看中的是有2个USB2.0口,用处多多啊~~!拿到手一看是v2版本的。昏倒了,V1的缩水版,不过没关系,跟自己比是缩水了,但和其他的比还是不错的。由于bcm5354芯片在LINUX2.6下WIFI部分暂时不能用,所以本来是想用kamikaze linux2.6内核的,只能暂时等等,希望OpenWRT的开发队伍努力把WIP这个状态快点改变成SUPPORT。

对于BCM5354,TOMATO支持的是不错的,DD-WRT也支持,貌似都是2.4内核。可惜DD不太稳定,慢;TOMATO是不支持USB,只能放弃这2个。对于ASUS的那个OLEG,准备在刷OpenWRT和DD以及TOMATO都不成功的情况下尝试。

在OpenWRT的主页上发现跟WL-500GP V2几乎一样硬件的WL-520GU,最后给出了一个WL-520GU上刷kamikaze with linux2.4内核的一个页面http://mightyohm.com/blog/2008/11/building-a-wifi-radio-part-4-installing-openwrt。这个完全兼容WL-500GP V2,那个页面也有作者自己编译好的TRX文件下载。我自己也编译了,但是因为没有CONSOLE,不高兴尝试。直接拿来主义。

刷的过程挺简单,比上次刷WHR-HP-G54要简单:
1.先是把电源拔掉,然后按住RESET不放,接上电源。
2.看到灯闪了之后过一秒,然后放掉RESET,此时应该进入了RESTORE模式。
3.应该这个时候能PING到路由器192.168.1.1。
4.然后TFTP把trx文件传上去(我是在XP的CMD里的):tftp -i 192.168.1.1 PUT openwrt-brcm-2.4-squashfs.trx
5.我发现4秒钟就搞定了。按照网上说的,因为ASUS的路由没有刷好之后自己重新启动的功能,所以要等个3到5分钟(主要是没有串口连接,否则人家都能从串口输出上看是不是完成)。
6.3分钟后我拔掉了电源,然后等了几秒再接上电源。
7.发现很快就能PING到路由,但是POWER的灯要过一段时间才亮,因为在创建JFFS文件系统(就是那个可写的文件系统)。
8.一切OK之后就可以TELNET进去了,如果进去之后改了密码,就开启了SSH同时关闭了TELNET。
9.一开始无线是关闭的,要进行配置,具体见http://mightyohm.com/blog/2008/11/building-a-wifi-radio-part-4-installing-openwrt

Monday, September 29, 2008

淘了一台PowerMac G4 400 (AGP 2X, Graphite)

本来是想淘PowerMac G3 450的,谁知道淘宝卖家快递过来的居然是G3 300,我倒!powermac g3系列只有450肯定是第二版改进过的主板,而300的肯定是第一版不支持slave硬盘的,那本来想放家里搞个文件ftp server都不行,只好退货。

继续淘,大多都是非本地卖家,只有一家本地卖家,但价格开得有些高。最终看到有个实体店在龙漕路上的,就直接过去看了。果然,g3 450在国内应该属于是希世珍品了,那个实体店也只有2台残缺不全的g3 350,而且ide控制芯片也是第一版的,淘g3绝望中。。。。。

不过无意间发现他们有好多powerMac g4 400的机器,因为广告公司退下来的,仔细看了一下,成色还是不错的,9成新一定有。500rmb一台。再看看旁边一排镜面的PowerMac G4,这个贵了,2000+rmb,放弃。powerpc g4 400Mhz的芯片好歹也要比intel的piii 1Ghz强吧!本来准备把给爸爸上网的机器的cpu换成piii 1G的,再给他加个dvd光驱和sdram的内存,现在想想,一个PowerMac G4主机才500,里面包括了sdram和dvd光驱,以及艺术品般的机箱!而且来都来了,挑个回去mac os x 10.3一下应该没问题。

或许大多数国人都是这样,不是自己的东西是不会去爱惜的!我一共看了5台机箱,每个机箱里的塑料扣子都有坏的,有些甚至几个全掉了,明显都是关机箱的时候蛮力的结果!最终选了一个扣子都在,但有一个坏掉的,哎~~!试了下机器,里面预装的是mac os 9.2,用起来不太习惯,明显跟10系列有些不一样。看了下内存,有128在上面,一看就是自己加的,就是那种kingmax tiny bga封装的,我自己也有2根这样的,pc-150,128m的,哎,太小了,是512就好了。显卡是AGP 2X的镭pro,不是最早一批的pci显卡,也不是后来的AGP 4x,中规中举。

决定就这台了,叫卖家送根256的内存,硬是不肯,只肯送128的。回家一看,他给错了,给了根256M pc-150的kingmax,窃喜。哈哈!加上一根自己的128之后512的内存,把原装的20g的5400转的硬盘换成了80g的7200转的硬盘,更新到2001年的那个4.2.8的firmware,然后装了Mac OS X 10.3.5,先试试速度如何。发现平常的应用完全没问题,响应速度大大出乎我意料,跟我的iBook G4 1Ghz的差不多速度,谁叫笔记本硬盘弱呢?

也许pc业里只有苹果的电脑有收藏价值,几乎每一部苹果电脑的主机都是一个精心设计的艺术品(不排除有几款的确也很傻)。
可惜啊,苹果抛弃了优秀的power这个架构投向了intel,对于苹果来说绝对是件好事,聪明之举,既降低了成本,又迎合了广大x86架构使用者。但我的一个梦想就因此永远无法实现——用自己的钱买一台全新的PowerMac G6。

Saturday, September 13, 2008

miniBSD from FreeBSD 7.0r

网上有使用FreeBSD 4.x , FreeBSD 5.x , FreeBSD 6.x 制作miniBSD的具体方法(miniBSD from FreeBSD 4.x),但我手头只有FreeBSD 7.0r,所以参照FreeBSD 6.x的方法作了一个尝试,原文是刷到CF卡里的,但我没有CF卡,但有U盘,所以刷到了U盘里,可是用U盘启动总是显示出所有寄存器的值之后报BTX halted错误。最后只好使用vmware虚拟出一块ide硬盘测试从FreeBSD 7.0制作的miniBSD。

1.安装FreeBSD 7.0
这个不用多说,你有盘装起来应该不成问题,选择minimal安装即可。

2.安装jail
2.1安装jail软件包
sysinstall进入到配置里,先进入Options,把Install Root改成/usr/jail
然后进入Custom里的Distributions,选中minimal,之后commit安装。
2.2复制文件到jail里
#cp /etc/resolv.conf /usr/jail/etc/resolv.conf
#cp /boot/kernel/kernel /usr/jail/boot/kernel/kernel
#cp /boot/defaults/loader.conf /usr/jail/boot/defaults/loader.conf
#cp /etc/localtime /usr/jail/etc/localtime
#cp /etc/wall_cmos_clock /usr/jail/etc/wall_cmos_clock

3.进入jail
3.1.设置prompt变量,否则你进入到jail之后自己也不知道有没有退出。
编辑/usr/jail/root/.cshrc文件,在最后加上
set prompt = " miniBSD %~ %# "
3.2.挂载dev并进入jail
#mount -t devfs devfs /usr/jail/dev
#chroot /usr/jail /bin/csh
此时命令提示符就变成之前设置的miniBSD#了,这样就知道自己在jail里。

4.创建文件夹
这一步可以自己创建,也可以使用脚本文件(脚本文件的原作者在脚本中有注明)。create-minibsd-dirs.sh


5.复制boot里的文件和binary
5.1.复制loader
#cd /boot
#cp -r loader /usr/minibsd/boot/
#cp beastie.4th /usr/minibsd/boot/
#cp frames.4th /usr/minibsd/boot/
#cp screen.4th /usr/minibsd/boot/
#cp defaults/loader.conf /usr/minibsd/boot/defaults/
5.2.复制工具binary
使用一个脚本,mkmini.sh 参数为minibsd6.files
mkmini.sh
minibsd6.files

6.定制kernel
我直接用了general的,省时省力,等boot miniBSD成功之后再定制也不迟,呵呵。
最好把kernel压缩一下,这样可以节省空间。
#cp /boot/kernel/kernel /usr/minibsd/boot/kernel/
#cd /usr/minibsd/boot/kernel
#gzip -9 kernel

7.复制lib
mklibs.sh
用脚本根据复制的binary来复制lib之后,还差几个lib需要复制。
#cp -p /usr/lib/pam* /usr/minibsd/usr/lib/

8.复制/etc里的配置文件
8.1.设置密码
因为密码文件是由passwd命令产生的,所以先在jail里把密码用passwd设置好,然后再把密码文件复制到miniBSD里。
8.2.复制/etc
这个是原本是freebsd6的,7里面我已经修改过了。
copy-etc-6.sh

9.设置配置文件
9.1.把/usr/minibsd/etc/fstab作一下修改,因为当用硬盘启动miniBSD的时候,硬盘是被认作ad0的,设置成只读,这样对于CF卡之类有好处,不至于卡很快报废,呵呵。内容如下:
/dev/ad0s1a / ufs ro 1 1
9.2.对于/usr/minibsd/etc/rc.conf需要进行设置,根据自己实际情况设置,
因为没有swap,所以dumpdev="NO",另外要使用到内存盘,因为我们的/文件系统是read only的。这里可以使用rc.diskless2,有空我研究一下。我的内容如下:
hostname="jojo.minibsd"
sshd_enabled="NO"
usbd_enabled="NO"
sendmail_enabled="NO"
inetd_enabled="NO"
portmap_enabled="NO"
update_motd="NO"
varsize=8192
varmfs="YES"
tmpmfs="YES"
tmpsize=8192
dumpdev="NO"
9.3.为了跳过启动时的十秒等待,可以编辑/usr/minibsd/boot/boot.rc这个文件,加入如下这行:
autoboot 0

10.打包miniBSD
#cd /usr/minibsd
#tar cfvz /usr/minibsd-7.tar.gz *

11.把miniBSD复制到硬盘(CF卡或者U盘)上(如果你想用dd命令把磁盘文件直接刷到硬盘上,直接跳到12)
因为我的主板USB启动有些问题,可能是FreeBSD的loader跟我的主板不兼容,所以我使用IDE硬盘,如果你是U盘的话,下面的ad1和ad0都改成da0即可。
10.1.格式化硬盘,因为ad0是第一块IDE,所以新接上去的这里是ad1。
#fdisk -BI /dev/ad1
11.2.创建一个slice,使用整个硬盘空间。
#bsdlabel -B -w ad1s1
11.3.创建filesystem。
#newfs -U /dev/ad1s1a
11.4.挂载到/mnt。
#mount /dev/ad1s1a /mnt
11.5.把刚才打包的miniBSD全解包到/mnt目录。
#cd /mnt
#tar xfvzP /usr/minibsd-7.tar.gz
11.6.设置成可引导,即把boot0程序写进硬盘的mbr
#boot0cfg -v -B ad1
11.7.跳到13

12.把miniBSD刷到硬盘(CF卡或者U盘)上
12.1首先获得要刷的磁盘大小
#bsdlabel -w -An-B ad1 auto | grep sectors/unit
得到一个sector的数量。
12.2创建磁盘文件(内容用零填充),[number of sector]就是刚才得到的数字
#dd if=/dev/zero of=/usr/minibsd-disk.bin bs=512 count=[number of sector]
12.3创建一个minibsd-disk.bin文件的vnode
#mdconfig -f /usr/minibsd-disk.bin -u 0
12.4现在我们对/dev/md0这个vnode的操作就等于是对磁盘文件minbsd-disk.bin的操作了。
#fdisk -BI /dev/md0
#bsdlabel -B -w md0s1
#newfs -U md0s1a
#mount /dev/md0s1a /mnt
这几步格式化了vnode,创建了一个slice和一个ufs文件系统,并挂载到/mnt目录下。
12.5把我们的minibsd解包到/mnt
#cd /mnt
#tar xfvzP /usr/minibsd-7.tar.gz
12.6对vnode的操作结束,清理一下
#cd /
#umount /mnt
#mdconfig -d -u 0
12.7现在可以用dd命令把装有miniBSD的minibsd-disk.bin文件刷到硬盘上了
#dd if=/usr/minibsd-disk.bin of=/dev/ad1 bs=8k

13.用装好的minibsd引导
把这块装有miniBSD的硬盘接到电脑上启动吧。

我这样做出来的miniBSD打包后9M,这样的一个精简的Freebsd能干什么呢?加入自己想要的,像m0n0wall和pfSense一样做个路由不错。不过这可是DIY的哦。

Monday, September 8, 2008

从dd-wrt v24-sp1刷到tomato v1.21

能刷dd-wrt不代表你能高效得运行。果然今天就遇到了路由CPU 100%的时候,网页都开不了。而且dd的控制页面虽然蛮漂亮,但内存少了之后就反应很慢了。看来16M内存还是相当不够的,况且我还有很多DD的服务都是没有开的。这么看升级到32M甚至64M的内存不是没道理。

既然效率不高,就打算换tomato,从二进制的bin文件上看,tomato东西的确应该比dd要少,dd标准版2.4sp1是3.6M,而tomato v1.21是2.7M,小了差不多1M,跟dd的micro版本差不错。同时LINUX2.4内核,东西小,功能就少,希望效率也高,呵呵。

从原厂刷比从dd刷步骤繁琐(这个繁琐的步骤在刷DD的时候已经体验过了),幸好现在我是从dd刷起。网上说dd在nvram中的密码是加密的,而tomato是不加密的,所以要把dd的密码设置成密文大家都知道的admin(尤其是没有reset按键的路由,一开始没理解为什么),其密文是bJz7PcC1rCRJQ,也就是tomato的密码。否则不是admin作为密码的话你就要自己登录到路由的控制台去看nvram里的密文了,具体操作GOOGLE一下就知。

从DD的更新页面选tomato.trx,点UPDATE的时候说不是BIN文件,看来够笨的,只从后缀看,那就把后缀改成BIN,然后再选择,再点UPDATE。然后就是等待,发现等待的时候会出现秒数倒计时,不过明显不准的,呵呵。

好了之后路由自己就重新启动了,最紧张的时候到了,因为我在更新的时候选的是don't reset,不回复到默认设置,所以现在路由的地址还是原来的192.168.2.1。果然,打这个地址要求登录,不过怪了,死活登录不了,用了root+bJz7PcC1rCRJQ和admin+bJz7PcC1rCRJQ都不行,不知道哪里出问题了。这回才体会到reset按键的重要性,不管三七二十一,反正进不去了,直接按了RESET,重启之后用PSP连了一下,发觉路由地址变成192.168.1.1了,看来RESET起作用了,由192.168.1.1登录,然后用默认用户名和密码root+admin顺利进去了。

第一感觉,web的ui管理界面速度很快,比DD的快不少!看了下菜单,功能的确没有DD多。功能没有DD多不是说拥有的功能没有DD强!用了一下,看了下空闲内存,果然印证了网上流传的一句话,用来玩刷DD,用来当路由刷TOMATO。现在要把NVRAM清空一下,这样就可以去除之前遗留在NVRAM中但TOMATO用不到的数据。TOMATO的WEB管理UI中直接有清除NVRAM的功能,在administration->Configuration->Restore Default Configuration中,选择Erase all data in nvram memory(throrought),点OK之后所以的设置就像按了RESET一样(不知道我之前按的RESET是不是已经做了这步了?)。希望TOMATO能稳定快速的运行。

对于DD,其实我还是蛮喜欢的,但就是硬件机能不够,玩DD不爽。现在DD有支持X86的了,貌似可以考虑把家里的c400+i810+256M的老台机整成DD的路由玩。呵呵~~!

Friday, September 5, 2008

给WHR-HP-G54-AP洗脑

本来是想用一阵子Buffalo AirStation的原厂固件的,但发现老是有人蹭我的网,而且你蹭就算了,关键是搞得我下载东西只有10k/s的速度了。可以做MAC过滤,但这个比较不好玩,直接到www.dd-wrt.com去下了v24-sp1版本的固件准备刷到小黑脑袋里。然后玩玩QoS,呵呵!

做任何事情貌似还都要求手快,原来把下载的固件传到路由上还不是那么简单的,不过说不简单,其实对于手快的朋友简直就是小事。

按照网上教程所说的:
1.按住RESET(居然说至少30秒,我用牙签按得手酸快了),然后拔掉路由电源。
2.到固件存放的本地目录准备好用tftp上传固件到路由。先把命令打好,回车先不按,要等下考验眼明手快的,哈哈。
我的固件放在I盘,上传命令:tftp -i 192.168.11.1 PUT dd-wrt.v24_std_generic.bin
3.这部是关键,先接上路由电源,按住RESET,当面板上红灯开始闪的时候立马放开RESET去按回车。我失误了2次,主要是对于红灯闪的时机没有判断好,导致了2次上传失败的TIMEOUT。成功的话会告诉你TRANSFER SUCCESSFUL。之后就是等路由重启。现在可以通过192.168.1.1进入DD-WRT的设置界面了。哈哈。

听说TOMATO比DD稳定,等我发现DD不稳定的时候再洗脑一次,洗个烂番茄进去,咔咔~~!

ibook G4 + Netgear wg111 v3 实现无线上网

ibook g4的airport extreme ii卡实在是贵得离谱,无奈之下google了一下mac os x 10.4支持的usb无限网卡。发现价格比较合理的有一款美国网件netgear的wg111 v2的usb无线网卡官方驱动支持mac os x,顿时看到了希望,立刻去淘宝和京东看有无现货。

令人失望的是,v2版本的都没有卖了,现在市面上卖的都是v3的版本。上netgear官网看了下,v2是有mac os x的驱动的,v3还没有。我倒~~!没驱动不就等于零嘛,总不见得去买个二手的wg111 v2?

继续google,发现原来netgear的这款wg111 v2是使用realtek的8187L芯片的,而wg111 v3是使用realtek的8187B芯片的,难怪有些同学用v2的驱动来驱动v3没有效果,原来内部芯片都改变了。既然什么都是芯片导致的,那就直接去realtek官网看看8187B芯片有没有mac os x 10.4的驱动吧。

哈哈!运气不错,realtek虽然现在还没有提供8187B芯片的linux驱动,但windows和mac os的驱动都有了。马上下载安装,重新启动之后等了蛮长时间进了系统,然后拿出从京东上买的WG111 V3,插入usb接口,哈哈,跳出了realtek的设置界面,从WHR-HP-G54-AP上dhcp了ip地址,隔了两堵墙,信号强度在60%左右,比较稳定。立即打开FF3,写下了这篇日志。

希望对于有ibook但觉得airport extreme ii卡贵的朋友可以作为一个参考!

Wednesday, August 13, 2008

20080809-20080812 HongKong

這次去香港主要是為了看奧運的馬術比賽,在雙魚河。

第一天
一大早就赶到虹橋,發覺奧運期間的2次安檢也不是想象中那麼慢。和上次一樣,花了2小時多一點到了寶安,順利坐上了K568前往羅湖。中途由于司机開得太猛,爆胎了,只能被迫上了之後那輛K568,順利到達口岸,在羅湖的橋上我拿出了手機想看一下申請的漫遊是不是有用,呵呵,滿格信號,半信半疑,叫妮妮拿出她沒有漫遊的手機對比一下。問題來了,死活找不到她的手機,這下妖了,難到掉了?我立刻打她手機,無人接听,還好,應該沒有落入他人之手,問題是在哪呢?我一刻不停的打,妮妮仔細聽聲音,完了,不在身上,也不在包裏,難到在路上掉了?或者是在K568上?那一定完了,K568到站之後就立馬上客,客滿即走,看樣子要去香港再買部手機了,哎!出師不利阿!!!不過妮妮這時拿了通行證就跑向了關卡,我知道她要去K568到這里的一路上找一下,必竟現在還是無人接听狀態。我不停打了大概15分鍾,突然有人接起來了,哇塞!陪伴了妮妮一年的N95失而复得!後來妮妮說還好手機是掉在了爆胎的那輛上,之後那輛早就開走去寶安了。她發現爆胎的那輛司機正坐在車上吃午飯,而後她上去找了一圈沒找到,正准備离開的時候突然聽到自己手機響,才在加坐的夾縫裏找到的。如果當時我沒有打她手機的話估計真的要買新手機去了。哈哈!

到了銅羅灣後立馬去換領了奧運馬術門票。哈哈!晚上吃了頓日本料理,發覺价格和上海差不多,還便宜呢!

第二天 大嶼山
起的不是很早,換東涌線來到大嶼山。原來這里有個OUTLETS,看樣子從山上下來到里面買點東西是個不錯的選則哦。哈哈。本來是想坐纜車上山的,可看了一下這坐纜車的人數,當即決定坐纜車下面的直達大巴——大嶼通!這山路叫驚險阿~~~!路上風景很不錯,還看到了牛,哈哈,山上還有個湖泊,很美~~!在接近蓮花禪寺的時候發覺那里雲霧繚繞,后來進了寺才發現這些雲霧都是三根光盤直經的香燒出來的,倒~~~!

在寺中門票加中飯的素齊是$60,素齊多是多得2個人根本吃不完,難到這是為了體現佛主的大慈大悲?

回家坐的是E11,發覺比軌道交通快不少,才花了30分鐘就到銅羅灣了,難怪票价要比地鐵貴哦,呵呵。

第三天
在雙魚河高爾夫球場舉行的馬術室外越野賽是早上8:00開始的,我們要從銅羅灣赶到金鍾坐頭班奧運班次5:15的地鐵,最終要在比賽前1小時到東鐵的粉嶺站坐奧運馬術穿梭巴士到雙魚河。一大早4:15就起來准備,然后頭一次坐上了紅色的士。發覺副駕駛座位由于把波箱的位置都包括了,所以真的很寬,可以坐2個人。一個起步費$16就到了金鍾地鐵站,發覺等候5:15分那班的多半都是老外!

老天真不作美,居然下雨,不過還好賽事主辦方提供每人雨披,否則就慘了。

第四天
睡到早上10點,呵呵,這幾天起得最晚的一天。四處逛逛買點東西,下午5點坐上東鐵去羅湖。

Sunday, June 22, 2008

这几天突然想玩WII,发觉WII也能运行HOMEBREW了,阿哈哈

论坛逛了一圈想看看有什么好玩的游戏,结果发现就在近日WII的ZELDA漏洞被利用,而且可以跟PSP一样运行自制程序了,哦哟哟,爽了,WII终于升值了(升使用价值,不是升价格,呵呵)。http://hbc.hackmii.com/下载了homebrew_channel的beta8安装iso,刻盘安装,一切顺利。唯一惋惜的就是错过了升级3.2j,依旧停留在3.1j。现在的3.3j据说有猫腻,不能升,反正不急升,有自制才最重要。

有了这个channel之后所有的自制程序都可以通过这个频道免zelda光盘引导了,利马下载了OPERA的WAD文件,然后用WAD MANAGER这个自制程序安装,成功!发现破解的wiiware现在都可以很顺利的通过wad manager安装了,省钱,哈哈。不过下了几个wiiware的游戏,就一个不能玩,就是那个玛丽医生,估计是要3.2j才能玩,可恶的升级~~!

最让我兴奋的是自制程序的fc、SFC、MD等模拟器都能通过homebrew channel正常运行。这下可以免去买GC手柄的开销,直接用WIIMOTE就OK了。

像PSP一样wii能直接运行SD卡上的LINUX(GC-LINUX可以通过homebrew channel运行)。具体没试过。

能运行linux才是无敌的~~!因为LINUX上能跑你想要的程序哦。

Saturday, June 21, 2008

试了一把psp上的linux

uClinux v2.6.22-uc1,在http://dl.qj.net上能下载到,uClinux应该是专门用在嵌入式系统上的一个LINUX版本,老外很钻研阿,搞到PSP上了。我的PSP自制系统是3.52m33,把uClinux v2.6.22-uc1下载后放在运行1.5程序的文件夹下就OK了。

果然能够正常运行,但毕竟uClinux单薄了点,没办法,PSP内存的问题导致啊~~!输入法很奇特,使用L和R或者L+R。唯一遇到的一个问题是发觉用halt命令不能退到自制系统,而是直接关机了,说明uClinux的运行时跟自制系统无任何关系哦。

Tuesday, April 15, 2008

linux里把显存当swap或者ramdisk

原先认为显存大如果不玩游戏是浪费,现在看来在LINUX里并非如此,划出大部分显存当作swap也是个好主意,至少可以让swap脱离疯狂旋转的硬盘,呵呵~~!看了一下 "http://gentoo-wiki.com/TIP_Use_memory_on_video_card_as_swap" 的guide,自己动手把256M的显存的后128M划了出来当swap,nice~~!

2.6的内核已经加入了MTD(Memory Technology Device),首先当然是要在内核中启用罗。
Device Drivers --->
Memory Technology Devices (MTD) --->
Memory Technology Device (MTD) support
[* or M]Direct char device access to MTD devices
[* or M]Caching block device access to MTD devices
Self-contained MTD device drivers --->
[* or M]Uncached system RAM
[* or M]Physical system RAM
我是全make成module,然后在/etc/modprobe.autoload.d/kernel-2.6中加入,启动时自动加载的。
GUIDE上说"Uncached system RAM" is the slram driver,"Physical system RAM" is the phram。不知道这2个到底有什么区别,我是用了slram,phram应该是一样的。

内核搞定之后就是要找出显存的起始地址了,使用lspci -vvv | grep 256,因为我知道自己的显存的大小,所以直接加上过滤得到
Region 0: Memory at fe029000 (32-bit, non-prefetchable) [size=256]
Region 0: Memory at d0000000 (64-bit, prefetchable) [size=256M]
Region 4: I/O ports at de00 [size=256]
Region 0: I/O ports at ee00 [size=256]
Region 0: I/O ports at ce00 [size=256]
Region 1: Memory at fdcff000 (32-bit, non-prefetchable) [size=256]
只要prefetchable的那条,即Region 0: Memory at d0000000 (64-bit, prefetchable) [size=256M],这里的d0000000也就是0xd0000000(HEX形式)就是我们所要的显存起始地址。

然后就是做加减法运算,先要把预留给显卡用的显存算好(单位是byte),给他128M,那就是128*1024*1024=0x08000000,这个值和起始地址一加,得到的就是我们准备使用的那剩下的128M显存的起始地址,即0xd8000000。有了这个值之后把我们要用的显存的大小也用HEX表示,即要用剩下128M=0x8000000。
然后#modprobe slram map=VRAM,0xd8000000,+0x8000000
## cat /proc/mtd
dev: size erasesize name
mtd0: 08000000 00004000 "VRAM"
这就说明这个slram模块加载成功了。

最后就是要创建一个设备文件,这样就可以通过那个MTD设备文件来使用我们从显存里划出来的那部分了。
因为我使用了udev,所以直接
#modprobe mtdchar
#modprobe mtdblock
就可以了,这样那个mtd设备文件就出来了,即/dev/mtdblock0

最后就是把mtdblock0这个设备文件看成普通的硬盘分区当成swap用了。
mkswap /dev/mtdblock0
swapon /dev/mtdblock0 -p 10

为了不要每次重新启动之后都这样设置,就在/etc/fstab中把原来的swap那行注释掉,换成
/dev/mtdblock0 none swap sw,pri=10 0 0
接下来的任务就是要在LINUX启动时自动重新mkswap一下,因为LINUX不像FreeBSD那样不需要swap标志来使用swap分区。因此要在init过程的swapon -a这个命令执行之前mkswap,在以前的版本是到/sbin/rc这个脚本里去加,现在是在/etc/init.d/localmount这个脚本里,在'swapon -a'这个命令前添加'awk -- '/swap/ && ($1 !~ /#/) { system("mkswap "$1"") }' /etc/fstab',这样就可以自动找到fstab中未被注释掉的swap分区,在其上面执行mkswap。
最后要确保/etc/modules.autoload.d/kernel-2.6文件中有如下3行来自动加载模块:
slram map=VRAM,0xd8000000,+0x8000000
mtdchar
mtdblock

OK,全部搞定,重启之后top一下:
top - 06:46:57 up 44 min, 1 user, load average: 0.22, 0.06, 0.02
Tasks: 70 total, 2 running, 68 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.2%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4048616k total, 377812k used, 3670804k free, 16052k buffers
Swap: 131064k total, 0k used, 131064k free, 132188k cached

最后的最后就是要注意的地方,如果使用的是官方显卡驱动,那么他会把所有显存都用掉,那就和我们使用的那部分冲突了,所以我使用的是vesa的驱动,可以自己设置VideoRam这个值,这样就不会使用到我们划出来的部分。其实你可以算出以你的分辨率和色彩需要使用多少显存,然后把剩下的都划出来,估计不超过16M,那真的是大大部分都可以划出来了。

Sunday, April 13, 2008

linux不是一般的牛,显存用作swap

发觉linux能将显存用作swap,很牛,有空试一下。不知道能不能把显卡的芯片当作计算用的处理器哦。

Saturday, April 12, 2008

linux的tmpfs与windows的ramdisk

在windows上用的是ramdisk,可以把内存作为硬盘用,发觉在上面作压缩等操作很爽啊,把windows的temp文件夹和ie临时文件夹都放上面,开网页速度也有提高,把bt下载暂时存放在ramdisk上再也不用担心有损硬盘了,不过鱼和熊掌不能兼得,现在担心的是BT下到最后一点断电了怎么办?在linux上2.4之前的kernel也使用ramdisk,之后开始在内核中增加了tmpfs的支持,于是直接尝试tmpfs,把gentoo编译时的临时文件夹/var/tmp/portage挂载成tmpfs。

tmpfs和ramdisk有些不同,在windows里我创建了512M的一个ramdisk之后内存就直接被用去了512M,不管你有没有往这个分区放东西,而tmpfs挂载的64M的/tmp并没有一上来就全部用掉64M内存,而是要多少从内存中取多少直到64M。这么看来tmpfs还是比较能够节约内存的,就算分配了2G的tmpfs分区,不往里放东西也不用担心2G内存会白白耗在那里。而且就算装满2G,把这2G东西都删了,那这2G又都还给内存了。

其实这就是ramdisk和tmpfs本质的区别,一个是块设备,而tmpfs是一个文件系统。但tmpfs也有一个问题,因为是文件系统,所以在内存吃紧的时候可能会使用到swap,又回到硬盘了,昏倒。看样子主要关键还是要内存,内存大才是硬道理!但至少巧妙使用ramdisk或者tmpfs可以使得系统速度有很大的提升。

Friday, April 11, 2008

gentoo开机启动第二块网卡

首先要把网卡驱动编译进内核或模块加载,
此时使用ifconfig eth1命令应该能看到网卡的信息。

然后在/etc/conf.d/net中把第二块网卡配置好。

之后使得开机启动第二块网卡。
#ln -s /etc/init.d/net.eth0 /etc/init.d/net.eth1
#rc-update add eth1 default

Tuesday, March 4, 2008

linux统计目录下文件个数的命令组合

使用ls -l列出文件和目录,如果还需要子目录中的话就ls -lR
然后用grep "^-"过滤以-开头的行(即普通文件)
最后用wc -l统计过滤出来的行数。

即$ls -l | grep "^-" | wc -l

Sunday, February 3, 2008

java locale的设置

今天碰到一个问题,指定了一个SimpleDateFormat的格式为yyyy-MMM-dd,然后传一个字符串"2008-Feb-03"让他解析,结果在家里的机器上没有问题,但在公司的机器上说不认识"Feb",我倒~~!

比较了2个java环境,家里的locale是US,公司的是CN,所以公司机器要使用"2月"这个形式而不是"Feb"。所以只能在公司机器的java程序里设置locale。

设置代码:
Locale locale=new Locale("en","US");
Locale.setDefault(locale);
SimpleDateFormat format=new SimpleDateFormat("yyyy-MMM-dd",locale);
Date date=format.parse("2008-Feb-03");
System.out.println(format.format(date));

Friday, February 1, 2008

在RHEL5.1上安装oracle 11g(linux x86_64)

以前在Debian上面成功安装过oracle 9i,那时费了好大的力才把需要的包一个一个apt-get过来。现在用Gentoo,但使用的是纯64位软件,所以估计没法装oracle 11g(x86_64版本貌似仍然需要一些32位的包)。都怪linux发行版五花八门,不象windows那么千篇一律。

这次在HP ProLiant G5上装了一个RHEL5.1,所以准备在这上面装一个oracle 11g x86_64的版本用作开发测试。值得庆幸的是RHEL是oracle认证的linux发行版,而且oracle自己的那个linux也是基于redhat的,所以应该问题不大。

最最值得庆幸的也是要感激的就是Jeff Hunter已经在CentOS5.1上成功安装了oracle 11g,英文原文Installing Oracle Database 11g Release 1 on Linux - (RHEL 5),因为CentOS是对RHEL的100%兼容版本,所以理论上RHEL上按照他给出的步骤可以100%成功安装。太easy了,傻瓜式的按部就班。在扮演傻瓜的同时也学到了不少redhat linux与Debian,Gentoo,FreeBSD所不同的地方。

1.安装RHEL5.1
这个没什么好说的,每个人有每个人的装法,就罗列一下安装的package groups。
*Desktop Environments

GNOME Desktop Environment

*Applications

Editors

Graphical Internet

Text-based Internet

*Development

Development Libraries

Development Tools

Legacy Software Development

*Servers

Server Configuration Tools

*Base System

Administration Tools

Base

Java

Legacy Software Support

System Tools

X Window System

2.装好之后把firewall和SELinux都暂时关掉。然后把oracle11g需要的包都检查一下是否全部都有,没有就从dvd装。
binutils-2.17.50.0.6

compat-libstdc++-33-3.2.3

compat-libstdc++-33-3.2.3 (32 bit)

elfutils-libelf-0.125

elfutils-libelf-devel-0.125

gcc-4.1.1

gcc-c++-4.1.1

glibc-2.5-12

glibc-2.5-12 (32 bit)

glibc-common-2.5

glibc-devel-2.5

glibc-devel-2.5-12 (32 bit)

libaio-0.3.106

libaio-0.3.106 (32 bit)

libaio-devel-0.3.106

libgcc-4.1.1

libgcc-4.1.1 (32 bit)

libstdc++-4.1.1

libstdc++-4.1.1 (32 bit)

libstdc++-devel 4.1.1

make-3.81

sysstat-7.0.0

3.确保/tmp有大于400M的空间并设置内核参数。
在/etc/sysctl.conf文件中有内核参数。
# +---------------------------------------------------------+

# | SHARED MEMORY |

# +---------------------------------------------------------+

kernel.shmmax = 536870912

kernel.shmmni = 4096

kernel.shmall = 2097152



# +---------------------------------------------------------+

# | SEMAPHORES |

# | ---------- |

# | |

# | SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value |

# | |

# +---------------------------------------------------------+

kernel.sem = 250 32000 100 128



# +---------------------------------------------------------+

# | FILE HANDLES |

# ----------------------------------------------------------+

fs.file-max = 102696



# +---------------------------------------------------------+

# | LOCAL IP RANGE |

# ----------------------------------------------------------+

net.ipv4.ip_local_port_range = 1024 65000



# +---------------------------------------------------------+

# | NETWORKING |

# ----------------------------------------------------------+

net.core.rmem_default = 4194304

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 262144

使用#/sbin/sysctl -p命令让以上设置生效而不需reboot。

4.在/etc/hosts文件中把不要的hostname从回路地址中去掉,把ipv6也去掉。
127.0.0.1 test2 localhost.localdomain localhost
应该改为 127.0.0.1 localhost.localdomain localhost

5.创建oinstall,dba,oper,asm,asmdba这5个组,然后创建一个属于这5个组的oracle用户。在英文原文中对这5个组对应的数据库组有详细的说明。
可以使用命令行来创建:
# groupadd -g 501 oinstall

# groupadd -g 502 dba

# groupadd -g 503 oper

# groupadd -g 504 asm

# groupadd -g 506 asmdba

# useradd -m -u 501 -g oinstall -G dba,oper,asm -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle

# id oracle

uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper),504(asm)
之后设置密码给oracle用户。

6.查看nobody用户是否已经存在。
# id nobody

uid=99(nobody) gid=99(nobody) groups=99(nobody)
如果不存在就创建:
# /usr/sbin/useradd nobody

7.接下来就是创建oracle base directory了,对于非advanced安装,不需要指定数据文件的文件夹。
# mkdir -p /xxx/app/oracle

# chown -R oracle:oinstall /u01/app

# chmod -R 775 /u01/app
如果使用advanced安装,请看英文原文。

8.为oracle用户创建登陆脚本,在/home/oracle/.bash_profile文件中加入:
# User specific environment and startup programs

export ORACLE_BASE=/xxx/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1

export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin

export ORACLE_SID=MYDBSID



export PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin

export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin

export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin

export ORACLE_TERM=xterm

export TNS_ADMIN=$ORACLE_HOME/network/admin

export ORA_NLS10=$ORACLE_HOME/nls/data

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib

export CLASSPATH=$ORACLE_HOME/JRE

export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib

export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib

export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib

export THREADS_FLAG=native

export TEMP=/tmp

export TMPDIR=/tmp

9.用oracle用户进入X根据提示进行安装。我选的是基本安装,并且创建初始化数据库应该是没什么问题的,只是等待而已,呵呵~~!好了之后应该可以用https://localhost:1158/em登录了。

10.装好之后我发现重新启动后oracle没自动起来,看来自动启动/关闭脚本还没加,编辑/etc/oratab文件:
MYDBSID:/u01/app/oracle/product/11.1.0/db_1:Y

然后创建/etc/init.d/oracle文件,使得oracle作为系统的service。
文件内容:
#!/bin/sh

# chkconfig: 345 99 10

# description: Oracle auto start-stop script.

#

# Set ORA_HOME to be equivalent to the $ORACLE_HOME

# from which you wish to execute dbstart and dbshut;

#

# Set ORA_OWNER to the user id of the owner of the

# Oracle database in ORA_HOME.



ORA_HOME=/xxx/app/oracle/product/11.1.0/db_1

ORA_OWNER=oracle



if [ ! -f $ORA_HOME/bin/dbstart ]

then

echo "Oracle startup: cannot start"

exit

fi



case "$1" in

'start')

# Start the Oracle databases:

# The following command assumes that the oracle login

# will not prompt the user for any values

su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME"

;;

'stop')

# Stop the Oracle databases:

# The following command assumes that the oracle login

# will not prompt the user for any values

su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"

;;

esac

之后# chmod 750 /etc/init.d/oracle
最后就是把这个启动脚本放到服务里面去。
英文原文中使用的是# chkconfig --level 345 oracle on这个命令把这个启动脚本防到3、4、5这3个run level中,但我用这个命令说command not found,只能从图形界面进去手动把这个服务加到服务列表里。效果一样。哈哈。

11.最后的最后就是这个,为了要使用web页面的em,所以必须要把emctl start dbconsole和emctl stop dbconsole放如/etc/init.d/oracle文件的适当位子。否则每次都要手动启动多麻烦啊~~!

英文原文写得很好很详细,我只是把我使用到的步骤从中抽取出来中文化了一下,而且很简略,有能力的朋友强烈建议看英文原文。

RHEL5.1 vnc的使用

RHEL5.1 自带了Xvnc,省得象gentoo里面自己装x11vnc了。先查看一下是否有vncservers的包:
[root@test2 jojo]# rpm -q vnc-server
vnc-server-4.1.2-9.el5

然后编辑配置文件:
[root@test2 jojo]# nano /etc/sysconfig/vncservers
把VNCSERVERS="1:ccair"这行的注释去掉。就是使用ccair登录到display:1,这里display和用户看你的系统了。

现在要设置一个vnc的密码,否则vnc不能被连接使用:
[ccair@test2 jojo]$ vncpasswd
Password:

Verify:
设置好之后在ccair用户的~/.vnc目录下会有相应的passwd文件。

一切设置ok之后就是启动vncserver服务:
[root@test2 jojo]# /sbin/service vncserver start

接下来在ccair用户的~/.vnc目录下会生成一个xstartup文件,打开之后把如下两行注释去掉:
unset SESSION_MANAGER

exec /etc/X11/xinit/xinitrc

最后restart vncserver即可:
[root@test2 jojo]# /sbin/service vncserver restart

现在用vnc客户端可以顺利连接到display1上去了,相应的端口是5901,所以防火墙的5901要打开。

Tuesday, January 29, 2008

java读取utf-8编码文件

发觉直接读中文会出现乱码,所以要这样:
BufferedReader br=new BufferedReader(new InputStreamReader (new FileInputStream(new File("utf-8.txt")),"UTF-8"));

Sunday, January 27, 2008

Ruby

很早就听说Ruby,但从没去看过和碰过。到http://www.ruby-lang.org/ 看了下,挺有意思的。在gentoo上装了一个准备玩玩。

Wednesday, January 16, 2008

溜车事故

没有偶然的交通事故,只有偶然的侥幸。今天下班从沪青平上外环开始就一直堵啊堵,到吴中路出口那的一个坡道上时又堵死了!

爸爸说上坡如果熟练的话就不用拉手刹,我也屡试不爽,不过也熄过好几次火,但都被我眼明手快手刹拉住了。不知道这几天怎么回事,难道是天冷脚僵了?我左脚始终把握不好半离合的位子,导致坡道上第一次起步熄火,立马踩住刹车启动车子,这次离合又放太慢,右脚空踩了下油门,砰~~!一声,溜车碰到后面的车了。其实速度很慢,我才溜了一米吧,于是下车和后车司机打招呼。

印象当中我碰到过2次轻微追尾,反正出租车司机而且是上海人的都很客气,看到自己车没什么大事也就关照你一下就走人了。这次不同了,那白痴看我下车,立马开门冲我大喊大叫,反正我上前就问了下是否准备私了。那外地人就跑到自己车里往后倒了一点,然后跑到自己车头一会说这坏了,一会又说那个前进气栅格坏了,里面的卡口全断了,而且还说什么前保险杠断了。去他妈妈的,不是他不诚实就是奇瑞汽车烂(我相信前者),就轻微碰了下保险杠就断了?比小日本在中国造的蛋壳车还吸能嘛,可笑,一看就知道都是他以前自己弄断了来走保险,正巧被我碰上。

其实这白痴就前保险杠掉了点漆,我的车似乎连漆都没掉,准备200RMB私了,那白痴死活不肯,没办法,110之,双方协调我出500走保险,他居然说NO,册那,则戆比样!因为警察的 权利是1000RMB,所以他起初硬是要1000RMB,。只能说大多数素质低下的外地人损坏了 所有外地人的名声,这跟中国那些去国外混的败类没什么不同。最终走保险,他硬是敲诈了我700RMB,钱到没什么,反正保险,主要是那种不诚实加上无赖,低劣的素质。

更妖的是一开始警察叔叔说要扣车,我的神啊,警察叔叔发疯了,为了年终奖,竟然干这些苛扣良民的事情,他的理由听起来有点道理,说是因为小碰撞没有立刻撤离现场,造成交通拥堵。但仔细想想,我就是因为堵车所以才没离开现场的啊,扣他个鬼啊~!幸好警察叔叔还是有点正义感的,所以最终我还是开着车安全到家。

到家后反思了一下,自己的确是车技不过关,人家老驾驶员不用手刹,我只不过4个月的新手,这样做的确是必然导致交通事故。之前没有溜车都是因为坡度都比较缓,而且大多都是1档2档慢速上坡,上周日有一个大陡坡我就溜车差点碰到后车,今天是没这个运气了。

第二点,周围的人都说安徽人很坏,今天终于见识过安徽人中的低素质者了。谁都知道其实安徽人不全坏,但坏的被我碰到了。所以大家开车要注意分清前后左右车都是些什么车主,以免发生碰撞时小事变大,大事更大!

Wednesday, January 9, 2008

wii游戏复制成功

用alcohol 120%把盗版盘的内容抓取出来,然后用alcohol 120%进行刻录,刻的时候选了最低的2.5X,刻录盘为Verbatim的+R盘,刻录光驱是gateway的laptop自带的,型号没具体看。

刻完放入WII,发现果然比盗版盘的声音小很多,认盘很快,读盘很顺畅。而且盗版盘有时玩着玩着会读不出,现在玩起来绝对没有读不出盘的问题。果然WII的游戏如果买的是盗版盘还是刻盘玩比较好啊,玩得爽对WII光驱也有好处,咔咔~~!

Tuesday, January 8, 2008

spring的Message Driven POJO (MDP)

发现SPRING的MDP很好用。不需要像MDB那么麻烦。
首先只要创建一个实现了MessageListener的POJO。
package test;

import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;

public class MDPTest implements MessageListener {



public void onMessage(Message message) {
        if (message instanceof MapMessage) {
                MapMessage mapMsg = (MapMessage) message;

                String title;
                try {
                        title = mapMsg.getString("title");

                        System.out.println("Received: " + title);
                        System.out.println("               " + mapMsg.getString("type"));
                        System.out.println("               " + mapMsg.getString("body"));

                        System.out.println("Received: " + message);
                } catch (JMSException e) {
                        e.printStackTrace();
                }

        }
}
}
然后就是在SPRING里配置MDP所需的BEAN,一个最常用的DefaultMessageListenerContainer即可。
<!--xml version="1.0" encoding="UTF-8"?-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!-- Message Driven POJO (MDP) -->
<bean id="messageListener" class="test.MDPTest" />

<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.24.194:11111"/>
</bean>

<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="IN"/>
</bean>

<!-- message listener container -->
<bean id="jmsContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="destination" />
<property name="messageListener" ref="messageListener" />
</bean>
</beans>
之后只需把ACTIVEMQ配置好启动起来就OK了。当有消息进入IN这个队列时,SPRING会自动INVOKE我们的MDP。

Friday, January 4, 2008

Wednesday, January 2, 2008

RAW FTP Commands

from http://www.jtpfxp.net/rawcmd.htm
RAW FTP Commands


Updated: 01-03-02
by DreamHaven
Introduction
Common Commands
Uncommon Commands
Descriptions

Introduction

If you need to do something on a ftp but the ftp client wont do what you want its easy to enter the commands manually. Just find the RAW Commands option on your ftp client (Command -> RAW Commands in FlashFXP) and put in whatever you want. Most of the information here was taken from various sources and of course I reformatted it to make it easier to get around. Mostly taken from: http://www.dreamhaven.org/ftp-raw.html

* Most FTP Servers do not support this command

Common Commands
ABOR - abort a file transfer
CWD - change working directory
DELE - delete a remote file
LIST - list remote files
MDTM - return the modification time of a file
MKD - make a remote directory
NLST - name list of remote directory
PASS - send password
PASV - enter passive mode
PORT - open a data port
PWD - print working directory
QUIT - terminate the connection
RETR - retrieve a remote file
RMD - remove a remote directory
RNFR - rename from
RNTO - rename to
SITE - site-specific commands
SIZE - return the size of a file
STOR - store a file on the remote host
TYPE - set transfer type
USER - send username

Uncommon Commands
ACCT* - send account information
APPE - append to a remote file
CDUP - CWD to the parent of the current directory
HELP - return help on using the server
MODE - set transfer mode
NOOP - do nothing
REIN* - reinitialize the connection
STAT - return server status
STOU - store a file uniquely
STRU - set file transfer structure
SYST - return system type

Descriptions

ABOR
Syntax: ABOR
Aborts a file transfer currently in progress.

ACCT*
Syntax: ACCT account-info
This command is used to send account information on systems that require it. Typically sent after a PASS command.

ALLO
Syntax: ALLO size [R max-record-size]
Allocates sufficient storage space to receive a file. If the maximum size of a record also needs to be known, that is sent as a second numeric parameter following a space, the capital letter "R", and another space.

APPE
Syntax: APPE remote-filename
Append data to the end of a file on the remote host. If the file does not already exist, it is created. This command must be preceded by a PORT or PASV command so that the server knows where to receive data from.

CDUP
Syntax: CDUP
Makes the parent of the current directory be the current directory.

CWD
Syntax: CWD remote-directory
Makes the given directory be the current directory on the remote host.

DELE
Syntax: DELE remote-filename
Deletes the given file on the remote host.

HELP
Syntax: HELP [command]
If a command is given, returns help on that command; otherwise, returns general help for the FTP server (usually a list of supported commands).

LIST
Syntax: LIST [remote-filespec]
If remote-filespec refers to a file, sends information about that file. If remote-filespec refers to a directory, sends information about each file in that directory. remote-filespec defaults to the current directory. This command must be preceded by a PORT or PASV command.

MDTM
Syntax: MDTM remote-filename
Returns the last-modified time of the given file on the remote host in the format "YYYYMMDDhhmmss": YYYY is the four-digit year, MM is the month from 01 to 12, DD is the day of the month from 01 to 31, hh is the hour from 00 to 23, mm is the minute from 00 to 59, and ss is the second from 00 to 59.

MKD
Syntax: MKD remote-directory
Creates the named directory on the remote host.

MODE
Syntax: MODE mode-character

Sets the transfer mode to one of:
S - Stream
B - Block
C - Compressed

The default mode is Stream.

NLST
Syntax: NLST [remote-directory]
Returns a list of filenames in the given directory (defaulting to the current directory), with no other information. Must be preceded by a PORT or PASV command.

NOOP
Syntax: NOOP
Does nothing except return a response.

PASS
Syntax: PASS password
After sending the USER command, send this command to complete the login process. (Note, however, that an ACCT command may have to be used on some systems.)

PASV
Syntax: PASV
Tells the server to enter "passive mode". In passive mode, the server will wait for the client to establish a connection with it rather than attempting to connect to a client-specified port. The server will respond with the address of the port it is listening on, with a message like:
227 Entering Passive Mode (a1,a2,a3,a4,p1,p2)
where a1.a2.a3.a4 is the IP address and p1*256+p2 is the port number.

PORT
Syntax: PORT a1,a2,a3,a4,p1,p2
Specifies the host and port to which the server should connect for the next file transfer. This is interpreted as IP address a1.a2.a3.a4, port p1*256+p2.

PWD
Syntax: PWD
Returns the name of the current directory on the remote host.

QUIT
Syntax: QUIT
Terminates the command connection.

REIN*
Syntax: REIN
Reinitializes the command connection - cancels the current user/password/account information. Should be followed by a USER command for another login.

REST
Syntax: REST position
Sets the point at which a file transfer should start; useful for resuming interrupted transfers. For nonstructured files, this is simply a decimal number. This command must immediately precede a data transfer command (RETR or STOR only); i.e. it must come after any PORT or PASV command.

RETR
Syntax: RETR remote-filename
Begins transmission of a file from the remote host. Must be preceded by either a PORT command or a PASV command to indicate where the server should send data.

RMD
Syntax: RMD remote-directory
Deletes the named directory on the remote host.

RNFR
Syntax: RNFR from-filename
Used when renaming a file. Use this command to specify the file to be renamed; follow it with an RNTO command to specify the new name for the file.

RNTO
Syntax: RNTO to-filename
Used when renaming a file. After sending an RNFR command to specify the file to rename, send this command to specify the new name for the file.

SITE*
Syntax: SITE site-specific-command
Executes a site-specific command.

SIZE
Syntax: SIZE remote-filename
Returns the size of the remote file as a decimal number.

STAT
Syntax: STAT [remote-filespec]
If invoked without parameters, returns general status information about the FTP server process. If a parameter is given, acts like the LIST command, except that data is sent over the control connection (no PORT or PASV command is required).

STOR
Syntax: STOR remote-filename
Begins transmission of a file to the remote site. Must be preceded by either a PORT command or a PASV command so the server knows where to accept data from.

STOU
Syntax: STOU
Begins transmission of a file to the remote site; the remote filename will be unique in the current directory. The response from the server will include the filename.

STRU
Syntax: STRU structure-character

Sets the file structure for transfer to one of:
F - File (no structure)
R - Record structure
P - Page structure

The default structure is File.

SYST
Syntax: SYST
Returns a word identifying the system, the word "Type:", and the default transfer type (as would be set by the TYPE command). For example: UNIX Type: L8

TYPE
Syntax: TYPE type-character [second-type-character]

Sets the type of file to be transferred. type-character can be any of:
A - ASCII text
E - EBCDIC text
I - image (binary data)
L - local format

For A and E, the second-type-character specifies how the text should be interpreted. It can be:
N - Non-print (not destined for printing). This is the default if second-type-character is omitted.
T - Telnet format control (, , etc.)
C - ASA Carriage Control

For L, the second-type-character specifies the number of bits per byte on the local system, and may not be omitted.

USER
Syntax: USER username
Send this command to begin the login process. username should be a valid username on the system, or "anonymous" to initiate an anonymous login.