I’ve finally gotten this tablet working as a portable ev-do router. There are still a few rough edges with it, but it works pretty well. The host system being used is a Fujitsu Stylistic 1200, which can be easily found on eBay for between $30 and $130.
The particular model I used has a transflective monochromatic display, which is not only easier on the battery, but better suited for its console-oriented purpose of being a router.
Although it currently has the stock 2.1GB hard disk, I’m considering changing that out for a flash card so that it boots faster and uses less power while idle. In the meantime, I’m setting the hard disk to sleep at a short interval.
I’ve also updated the memory to 80MB total with a 64MB stick of EDO memory that I picked up on eBay. Although the original manual suggests that a maximum of 16MB may be added, there are reports of up to 128MB being added to the system, at least according to posts on the Linux-Hacker Forums.
For networking, I’ve put in an ORiNOCO card in for the access point and a Merlin S620 card in for the 1xEVDO backhaul.
Note: If you’re reading this entry and considering doing this yourself, I suggest buying a pcmcia extender of some sort because the only reason these two cards fit inside the two slots on the Stylistic is because one of the cards was slightly bent when I was going through airport security a few weeks ago. Unless you’re planning on intentionally destroying your hardware, get the extender.
Now although this project seems pretty simple, it was deceptively time consuming to get working. The first problem was related to the fact that it comes standard with Windows 95, came with no external drives (you can purchase a floppy drive on eBay for more than the device itself in some cases!), does not boot from PCMCIA and has no network interfaces. The USB port is accessible with the port extender, which I don’t have for the same reason as the floppy drive.
After some experimentation, I found that I could get data on the device using a PCMCIA to Compact Flash adapter, which I had laying around from my digital camera. The next step was to repartition the drives. Luckily, I also had a copy of Partition Magic lying around, which still supports Windows 95 (pretty scary, I think). After repartitioning the drives, I left a 1.2 GB for Linux, about 300MB for the debian install files and another 250MB or so for windows.
I then put the installation files for Debian on the staging partition and used loadlin to load up linux. This was a bit of a trial and error process because Sarge requires 32MB of ram for the installer and I only had 16MB installed at the time. I finally ended up going with the Woody installer and then got a base install layed down on the partition.
Following a restart, I finally had a native install of linux on the box, but still didn’t have any network connectivity on the machine. I shuttled the wireless-tools .deb for woody via the flash card over to the machine and was shortly online via my current access point (read: Powerbook). After updating to Sarge and replacing the bootloader with grub, I was ready for the next part of the project.
For a wireless access point, you want it to be in BSS Mastering Mode because a client wanting to get on the internet must always talk to the gateway and really doesn’t care about other clients. For Orinoco cards, this requires a so-called “tertiary” firmware to be loaded onto the card in order to enable that mode (as compared to Prism2-based cards, which can be used with hostap). Fortunately, a project called “hermesap” enabled me to put my card into that mode, but required that I patch up my 2.4.27 kernel a bit. Effectively, this did drop back my drivers back a point release from the bundled version of orinoco_cs distributed with the kernel, but allowed me to keep the rest of the functionality, including all the security releases in that kernel.
I also needed a patched usbserial driver to properly accomodate the ev-do card, since the default packet size is 64 bytes and I needed it to be 4096 bytes to keep it from stalling out the connection.
Since the machine is so slow, I ended up installing sarge on yet another machine in order to build the kernel with the appropriate patches. About an hour later, I had a kernel ready for use on the machine.
I used the helpful dnsmasq to provide dns and dhcp on the access point and wrote a few scripts do deal with starting up the access point and configuring ev-do–then success! I was able to get onto the internet over the access point.
Unfortunately, I wasn’t done quite yet. I was getting abysmal throughput and couldn’t figure out quite why. I tweaked the networking by using a “mtu 1500″ in the peers section of my sprint pppd stuff and added this to my syctl.conf:
net.core.rmem_default=224360 net.core.rmem_max=224360 net.ipv4.ip_default_ttl=64 net.ipv4.tcp_timestamps=0 net.ipv4.tcp_sack=1 net.ipv4.tcp_window_scaling=1
That seems to have done the trick, since I can now get up to 170kB/s, which is the fastest I’ve gotten out of the card where my apartment is located. I was just about done, but not quite. I still had to worry about the byteMobile-based optimization that I talked about in another post. I settled for using netcat in conjunction with the so-called “magic bits” for disabling it in a shell script. And voila, a mobile ev-do router.
I’ll post more details and the configuration files at a later point.