2013年9月29日星期日

OpenWrt 12.09 for Mercury MW4530R

OpenWrt的编译一如既往的容易,如果官方提供机型支持,也不需要打什么额外补丁的话,简直比很多X86应用程序还好编译。唯一需要留意的地方就是menuconfig的部分,只要修改了内核相关的参数设置,哪怕是多M一个模块,内核版本号也会发生变化,这会导致opkg的依赖产生问题,必须要重刷固件来解决。所以编译OpenWrt时,凡是未来有可能用得上的模块最好都M上,无非是多等一会儿而已,省得以后需要重刷更麻烦。

补丁包:openwrt_12.09_mw4530r_wr941nv2_patches.zip

MW4530R目前还没有官方支持,我用的补丁出自这里。其他内容基本就是以前改的。因为还没时间弄WR941N,所以相关补丁并没有经过测试,有砖的可能,慎用。

sudo apt-get install build-essential subversion git libncurses5-dev zlib1g-devasd gawk

mkdir ~/openwrt
cd ~/openwrt

svn co svn://svn.openwrt.org/openwrt/branches/attitude_adjustment

cd attitude_adjustment
ln -s ../dl dl
./scripts/feeds update -a
./scripts/feeds install -a

rm -rf tmp

patch -p1 < ../patches/mw4530r-support.patch
patch -p0 < ../patches/nls-cp936.patch
patch -p0 < ../patches/wr941nv2_8m.patch

make defconfig
make prereq
make menuconfig
make

感觉上,启动、luci等方面,MW4530R的反应速度都比WR941N快了不少,不过CPU频率高了近一倍,快也是正常的。而我比较期待的USB外接存储设备方面,速度没什么本质,略失望。

服务器端速率(MBps)
vsftpd12.1
uhttpd9.45
busybox ftpd11.0
busybox httpd12.1
dropbear2.9
samba5.96

以上测试,OpenWrt端接了个IT-CEO USB2的盒子,ext4分区,测试用的文件是一个约为1.4G的mp4,写入Win7下用内存虚拟出来的磁盘分区,基本可以排除本地IO对速率的影响。

USB口供电方面,不加独立电源MW4530R带一个移动硬盘仍然会有问题。至于加上独立电源后怎么样,还有待时间验证。

附一张MW4530R的TTL接口定义,希望大家都用不上吧。

2013年8月30日星期五

iFive Mini2, again

机器刚拿回来的时候升级过一次系统,本打算以后就这么着的,反正国内厂商所谓升级也就那么一回事。可是半年过去,重力感应经常无故失效,系统反应越来越慢,并且各种双击,于是我终于烦了。再升一次吧,最后一次,好不好就这样了。

固件以刷机程序去第五元素官方论坛,当前迷你兔的最新版本固件是v1.35。安装刷机程序后,关机,按住menu键插入机器装驱动,然后打开刷机程序刷固件。整个过程需要将机 器平放,因为第一次开机的时候会校对重力感应和陀螺仪。

一切搞定之后,我震惊了,怎么会那么快?时间隔太久所以刚买回来的时候是什么感觉我不记得了,可是跟刷机之前比,流畅度真是天壤之别。我不相信这是新固件带来的提升,难道安卓跟当年的XP一样,三不五时就要重装一下系统才能保证速度?好吧,不管怎么样,这也算是意外之喜就是了。

如果觉得有需要的话,可以顺便把recovery也刷上。还是关机按住menu并插入机器,pc端RKAndroidTool.exe,只选中recovery然后选执行就成。稍微需要提醒的是,刷上recovery之后设备就变成筛子了,虽然安卓系统本身就是隐私筛子。

接下来是ADB驱动的问题。就像我以前吐槽过的那样,厂家还是没有提供,所以如果你没备份也不会自己改的话,除了装豌豆荚也没别的办法。

迷你兔算是自带root,adb shell进去就有root权限,可我没找到在设备上完成root过程的法子,所以还是要手动来做。先下载root.zip,再执行以下操作。

adb shell mount -o remount,rw /system
adb shell busybox mkdir /mnt/sdcard/@_bak
adb shell busybox cp /system/xbin/su /mnt/sdcard/@_bak/
adb push system\xbin\su /system/xbin/su
adb shell chmod 6755 /system/xbin/su
adb push system\app\SuperSUPro.apk /system/app/_SuperSUPro.apk
adb shell chmod 644 /system/app/_SuperSUPro.apk

接下来装busybox,放到/vendor/bin下。同时因为没passwd和group,shell看起来会很难看,所以我根据android_filesystem_config.h弄了个出来,一并放进去。

adb shell mkdir /vendor/bin
wget http://www.busybox.net/downloads/binaries/latest/busybox-armv7l
adb push busybox-armv7l /vendor/bin/busybox
adb shell chmod 755 /vendor/bin/busybox

adb shell "echo nameserver 8.8.8.8 > /etc/resolv.conf"
adb shell "echo nameserver 8.8.4.4 >> /etc/resolv.conf"
adb shell chmod 644 /etc/resolv.conf

adb push passwd /etc/
adb push group /etc/
adb shell chmod 644 /etc/passwd
adb shell chmod 644 /etc/group

adb shell /vendor/bin/busybox --install -s /vendor/bin/
adb shell busybox rm /vendor/bin/su
adb shell busybox rm /vendor/bin/sh

字体我还是用了冬青黑,不过我换的是第二版,因为不想把英文字体也换了,而第二版笔划粗细跟Roboto比较搭。

adb shell cp /system/fonts/DroidSansFallback.ttf /mnt/sdcard/@_bak/
adb push DroidSansFallback.ttf /system/fonts/DroidSansFallback.ttf
adb push DroidSansFallback-Bold.ttf /system/fonts/DroidSansFallback-Bold.ttf
adb shell chmod 644 /system/fonts/DroidSansFallback.ttf
adb shell chmod 644 /system/fonts/DroidSansFallback-Bold.ttf

adb shell "sed -i '/DroidSansFallback.ttf<\/file>/a DroidSansFallback-Bold.ttf' /etc/fallback_fonts.xml"
adb shell "sed -i '/DroidSansFallback.ttf<\/file>/a DroidSansFallback-Bold.ttf' /etc/fallback_fonts-ja.xml"

尽可能不装app,就这么用了几天以后,系统流畅度方面仍然很理想。看来安卓系统的正确使用方法是,不常用的app就上钛备份,随用随卸载…

毫无疑问,我肯定不是果粉,可是跟iOS相比,我真是越来越不喜欢安卓了。性能方面不去说,用户控制app行为的手段实在太有限,隐私问题也好,电量也好,指望app开发商自律,做梦吧。

2013年8月13日星期二

Playstation 2

前些日子,因为某些事故,我弄丢了很多的过去。今天打扫卫生的时候,看到那台又是有日子没碰了的PS2,我突然发现有很多事情我已经想不起来了。趁着还有些许印象,赶紧记下来吧,并非为了过去,也不是为了将来。

PS2常见的视频输出线有三种,分别是AV、S端子和色差。个人觉得S端子最好,因为AV输出太模糊,如uLaunchELF一类的程序连文字都看不清楚;而色差则有各种各样的兼容性问题,如Modbo 3.0看不见开机Logo,画面无法全屏等等。不过现在的电视都没有S端子了,实在没办法也只能将就用色差。

虽然PS2的自制程序也有很多,不过受限于机能等各种问题,唯一实际的还是免光盘打游戏。通行的实现方法有两个,一是Free McBoot,二是如Modbo一类可以直接启动自制程序的直读IC。

Free McBoot可以免改机免直读,通过一张特制的记忆卡加载各种自制程序。不过没装IC的机器即使有FMCB,仍然需要ESR一类的程序辅助,不然就D版不能。我这台机器装了Modbo 3.0(最早实现启动记忆卡上自制程序功能的IC是MATRIX,很贵,Modbo只是MATRIX的Clone而已),用起来还是比FMCB方便些,所以我主要用的是IC提供的功能。

为了以防万一,我也做了张FMCB的记忆卡备用。下载Free McBoot v1.8 Noobie Package直接下载文件),解压后将Noobie_Package/INSTALL下的四个ELF删掉,将LbFn放入并改名为BOOT.ELF,将uLaunchELF放入并改名为BOOT2.ELF,然后将Noobie_Package目录下的所有文件复制到SD卡根目录,在PS2端以任意方法加载FREE_MCBOOT.ELF,格式化记忆卡并选择Multi-Version install进行安装即可。

这样制作出来的记忆卡大约会用掉3.2MB空间。在没有安装直读的机器上不放光盘启动后会看见FMCB的菜单,选择uLaunchELF即可启动LbFn(菜单可以添加和修改,我懒得弄了)。而在装了Modbo并且设置为记忆卡启动的机器上,会直接载入LbFn(按住R2并启动则会加载uLaunchELF)。

uLE和LbFn都是PS2上的文件管理器。从功能角度上说,uLE要强大很多,但我曾经遇到过因硬件故障导致uLE启动不能而LbFn却可用的情况,再加上默认设置下LbFn的显示效果更清晰,所以FMCB记忆卡里的默认文件管理器我选择了LbFn。

(uLE内置了FTP服务器的功能,不过我测试下来发现又慢又不稳定,基本不可用。想在uLE里直接看到存档游戏名,需要额外的字体ELISA100.FNT,放入记忆卡内的/SYS-CONF/即可。顺便佩服一下日本人,8*16的字体都有。)

安装了Modbo的机器,启动时按住手柄上不同的按键可以实现各种不一样的功能,如△+○可进入IC的功能设置菜单。该菜单中最重要的一项是BOOT MODE,各选项的含义分别是:

  • AUTO:启动Sony Browser。(显示Matrix Logo时仍然可以通过快捷键加载其他程序。)
  • FAST:疑似直接加载PS2游戏光盘的意思。
  • INFMAN:启动Infinity Manager,盗版的Modbo似乎是不能用。
  • DEV1:加载记忆卡上的自制程序,即mc0:/BOOT/BOOT.ELF。
  • DEV2:加载硬盘上的的自制程序,即hdd0:/__boot/boot.elf。
  • DVDV:播放DVD光盘,或是加载PS1游戏。

另外还有几个常用的启动快捷键:

  • R1:mc0:/BOOT/BOOT.ELF
  • R2:mc0:/BOOT/BOOT2.ELF
  • L1:mc0:/BOOT/BOOT3.ELF
  • L2:hdd0:/__boot/boot.elf
  • SELECT:屏蔽IC并开机
  • ○:同DVDV
  • ╳:同AUTO
  • △:同INFMAN

可用于加载光盘镜像的自制程序不少,比如曾经的HD Loader和HD Advcane,不过后期大部分用的都是Open PS2 Loader。OPL当前的版本是v0.9.1,似乎已经相当稳定了。但也有人说新版本有些游戏无法运行,旧版的r547反而可以,如零系列,我倒是没去求证过。

PS2免光盘加载游戏镜像的方式有很多,比如添加内置硬盘,比如USB,比如Samba。过去USB方式曾一度很受关注,但因为PS2的USB接口只是v1.1标准,速度太慢导致可用性比较差(据说后来有改善,可我没试过)。至于加硬盘的方式,3W和5W系的厚机得天独厚,因为直接就能买到可装硬盘的网卡(曾经各种降价没人买,曾经涨得各种没道理),而薄机则只有7W最早的型号(7000X)可以通过从主板上飞线接出IDE接口的方式来做,相当的麻烦。

我的是3W厚机,自然是用内置硬盘的方式,一块从朋友那里搞来的日立160G。在把硬盘装进PS2之前,首先需要用WinHIIP将其格式化为HDL特有的格式。另外我还把OPL放在了硬盘的/__boot/boot.elf,这样Modbo设置为DEV2启动时,就可以直接加载OPL了。

趁着还有机会,多灌几个游戏进去吧,一旦把硬盘装进PS2最好就不要再拆了。因为拆装硬盘不但很容易损坏娇贵的PS2网卡,WinHIIP这个程序的代码质量也没有很好,PS2端操作过的硬盘再用WinHIIP进行读写很容易造成数据丢失。

OPL有Apps Loader,可用于加载其他ELF程序。使用方面有些麻烦,需要在记忆卡内创建一个/OPL/conf_apps.cfg,比如我的:

uLaunchELF v4.42d=mc0:/BOOT/BOOT.ELF
LbFn v0.70.18=mc0:/BOOT/BOOT2.ELF

如果想把ELF放在硬盘里,则需要将文件保存在+OPL分区。创建该分区可以用uLE的HDDManager,分区名写OPL,大小我给了512M。+OPL分区会被OPL加载为pfs0,所以conf_apps.cfg中就要写类似这样:Sega Mega Drive Emulator=pfs0:/APPS/PGEN.ELF

OPL支持VMC,即虚拟记忆卡功能。在需要使用该功能的游戏上按△,VMC Slot 2项,选Use Generic,not set就会变成generic_1,进入该项选32M并格式化,硬盘里就会出现一个文件/+OPL/VMC/generic_1.bin,这就是虚拟记忆卡文件了。uLE可以mount将该文件,然后就可以往里面复制旧存档了。

很多自制程序都需要在记忆卡里保存配置文件,所以slot1里的物理记忆卡我没有用来保存游戏存档,存档放VMC里就好。

OPL支持IGP(In-Game Reset?),游戏中按L1+L2+R1+R2+Select+Start就是软复位,L1+L2+L3+R1+R2+R3则是关闭电源。软复位后执行哪个ELF可以在设置里面改,我指向了mc0:/BOOT/BOOT.ELF,也就是uLE,默认是Sony Browser。

封面文件PS2上没法自动下载,需要自己下载以后放到/+OPL/ART/目录下,这里可以下到一大堆,不过也没有很齐就是。想要补的话,这里也可以找到一些。

用网线将ISO传入PS2可以用HDL Server和hdl_dumb。OPL内置了HDL Server,可很奇葩的是,所有人都说去设置里选Start HDL Server,却没人提怎么样让这个选项出现。最后还是我把源码抓回来看过才知道,需要加载硬盘,并且开启了删除和改名游戏的选项才行。

这种方式需要非比寻常的耐心,我这里从PC灌入游戏的速度大概只有不到1.3MBps,也就是1GB大概需要13分钟的样子。好在PS2功耗一般只有15W左右,加上一块硬盘也顶多25W,不至于太心疼电费。

PS1游戏方面,基本就不要指望了。PSXLAUNCHER需要5W及以后的机型,我的机器用不了。PS2PSXe我测试了月下,画面各种破碎。至于传说中的Sony官方模拟器POPS-00001,模拟月下只能用AV输出,并且CG黑屏,并且人物开始对话就死在那里了。