very impressive boot time. What filesystem are you using? I've been playing around with btrfs and it's pretty quick on SSDs (especially with compression enabled).
I've been lurking here for years, and only made a couple of posts; since I've had my project wrapped up for a while now, I thought I'd show it off before I started the next project. This is the 4th major revision of my setup; briefly:
Revision 1 (June - August 2007):
I bought a brand new 2007 Subaru STi in June of 2007. I did some standard mods before the car had gone through the initial break in (3" turbo back exhaust, intake, pressure and air/fuel gauges, ECU reflash), but I had always wanted to do a car computer.
For the display, I used a Lilliput touch-screen flip-out head unit, a micro-ATX LGA 775 Intel motherboard mounted between the back of the glove compartment/dashboard, in front of the climate control fan, and it was loaded with IA32 Ubuntu 7.04 running a full Gnome desktop with Beryl. I used Banshee for music, which while a very capable music player, was not touch friendly. Engine telemetry was performed with Enginuity (now Romraider) and a tactrix USB/SSM cable, and I had a dual boot with Windows XP for flashing the ECU or adjusting my WBO2 controller output. "Navigation" was taken care of by RoadNav with tiger maps, which couldn't actually navigate you anywhere. I used the Beryl cube and placement plugins to map my applications to various virtual desktops, and I used some KDE tray application that translates joystick movements and buttons into keyboard events to spin the cube and control volume. It also ran Avant Window Navigator if I wanted to touch-switch applications.
Most of the rest of the hardware is still in use (1.8 GHz core 2 duo, bluetooth dongle, 120GB Toshiba SATA drive, M2-ATX 160W DC-DC power supply) though some hardware perished over time; namely the one of the two 512 MB sticks of RAM went bad about 9 months ago, and the Delorme USB GPS receiver died. The motherboard was eventually replaced with something smaller. Other hardware was superseded, such as the two analog joysticks from a USB gamepad I used for volume and compositing manager control - these were mounted to a plastic plate carved from a pick guard off of an old guitar, and mounted where the audio input jack for the stock head unit was. I had a USB Wifi adapter stuffed in the pillar-pod mount I use for my gauges and to mount the GPS receiver, but unfortunately the only place I could ever get an internet connection was parked in the garage at my parents house, the side closest to their router. Some pictures:
The bottom portion of a spare micro-ATX case, cut with tin snips, then screwed to the back of the glove compartment (mount for the motherboard):
Completely assembled unit behind the glove compartment. Note the USB ports routed to the actual glove compartment, the piece of plastic mounted with brackets and glue to the bottom of the glove compartment that houses the hard drive and the power supply. To remove or install this, I had to remove/install the entire glove compartment, and I needed to remove the floor ducts for heating on the passengers side:
And finally, it booting:
This was operational for an entire month before the head unit started doing this on a trip through Skyline Drive:
Revision 2 (September 2007):
Luckily, Lilliput made good on their warranty, and purchased me a 619 GL from one of their distributors and refunded me the difference since the flip-out unit was more expensive. I got a 2DIN CNC aluminum mount/mini-ITX case for the LCD, but left the rest of the hardware the same.
Because I lost the integrated head unit audio amplifier, which suffered from horrible ground/alternator interference, I needed another solution for sound. I ended up using an old MTX thunder amp I had laying around, and I ran a 20' USB extension to the trunk and ran all of the audio off of a $3 USB audio adapter I bought from hong kong off of eBay. This burst into flames (well, a lot of smoke anyways) after 5 minutes of use, so I bought a $20 turtle beach USB audio adapter not from hong kong. This took care of the alternator whine, and I finally had something that didn't completely suck.
Also, I couldn't really easily update the OS or anything with the crappy Wifi adapter I had, so I ran a cat5 cable to the trunk and installed a WRT54G router (which runs fine off of automotive DC power) loaded with OpenWRT on top of the amplifier in the trunk, and enabled a wardriving script that allows automatic connection to open Wifi networks or networks that you have passwords for. This worked better, but I would need a strong signal to get a connection, so it was very hit or miss.
Unfortunately, booting a fully-loaded Linux desktop distribution in 2007 off of a laptop hard drive was an exercise in patience, as it was normally 90 to 100 seconds before I could start doing anything with it, so...
Revision 3 (February - June 2008):
We use Gentoo at work for our Linux servers. I had tried a couple of years before to load a desktop with it, and while it seemed really neat and technical, it was a little beyond my skill and/or patience level at the time to get past booting to an X screen. But times had changed, so I thought I would give it another go. The nice thing about Linux is that as long as you are working on the same target architecture (in this case, a 64bit x86 processor), you can build your complete system elsewhere, then copy it to your target system using 'cp -ax /source/drive /destination/drive', install grub, and be running in no time.
So I gave it a go with Gentoo, building it on a desktop in my house. Utilizing tools like bootchart, a custom kernel with statically compiled modules, and the then brand-new baselayout2/openRC init system, I was able to built a highly-customized, completely slimmed down distribution of Linux that could boot in a reasonable amount of time, which was around 45 or 50 seconds from POST to usable with all of my applications running. This time, I forwent a bloated desktop like Gnome, and I wrote some init scripts that boot X, start Compiz and associate the X session with Compiz, then boots the rest of my programs. I used Cairo Dock for touch switching, jDash for engine telemetry, Navit for GPS navigation, which while much much better than Roadnav, still had some trouble actually navigating properly. I used the on-screen keyboard from Maemo, Exaile with some home-made user interface plugins for music, which was infintely better suited than Banshee for use on a touch screen, and Handsfree, which was written by a forum member here, for a bluetooth speakerphone through the operating system.
Also, I wrote a python/pythonGTK/gstreamer program to view and record from my webcam, and another python program to intercept the X events from a keyboard's multimedia keys, and turn them into DBUS calls to switch virtual desktops via the volume knob, control the music, or perform other functions via a toggle button (the music button).
Also, I had procured a first generation iPhone during this time and jailbroken it, so I made use of its BSD capabilities and installed a proxy server and DNS server, assigned it to the router in my trunk, which was now just turned into a normal Wifi network, and I could get Edge Internet anywhere.
Speaking of multimedia keys, I took one of these apart at work: http://www.pacificgeek.com/product.asp?id=35409&P=CN and found that all of the multimedia keys and the volume knob were mounted on their own PCB, and it had a 2-port USB hub to boot. I got one off of eBay for $15 or so, scrapped whole thing save for the PCB, buttons, and the plastic surround and buttons bezel that the PCB screwed into, and using plaster of paris, the swing-up cover for the cigarette lighter and audio input port on the car, fiberglass and resin, silver spraypaint, and even more patience, was able to create a somewhat factory looking control surface.
I also installed a Philips UVC webcam, which is mounted upside down with 2-part epoxy on the rear view mirror facing forward.
The back, with Bluetooth dongle installed, mounted:
From the front:
And finally, everything installed:
This was solid for a while, but then 45 or 50 seconds started to become an eternity, so...
Revision 4 (January - April 2009):
I wanted something that booted faster. Also, because of the odd position that everything was mounted, a lot of the pins and connectors were getting bent up, so I wanted to get the entire thing to mount in the chassis in the dash, since it was set up for a mini-ITX motherboard.
Since I wanted to run some more graphically intensive applications (namely MAME and over-the-air HDTV), I opted to pick up an nvidia-based LGA 775 motherboard. I ended up getting a Zotac NF610I-KE Mini-ITX motherboard, which was great until I bricked it by loading a custom BIOS with an improperly formatted full-screen boot logo. Luckily it was on sale for $35 or $40 at the time, so I ordered another one from newegg instead of trying to learn to JTAG.
While everything was apart, I decided I would mod the screen with 3M vikuiti transflective film, making up some BS story so that 3M would send me a sample. I don't know if I installed it wrong (I followed instructions off of a thread here that some guy did to his truck), but I didn't see much of a difference.
Upon initial fitting, I found that there was not enough back spacing in the dashboard to have anything more than 1/3 of an inch cable connector with a turn coming out of the back of the motherboard. So basically I couldn't hook anything into the motherboard.
Instead of turning back, using a hand-held router, a couple of DVD cases, and a tube of 2 part epoxy, I created a 3/4" recess in the heater-core duct inside of the dashboard sufficient to handle the network and VGA cables with the strain-reliefs cut, Triplite low-profile USB connectors, and 90' audio bends. I also depreciated the value of my car and made heater-core repairs more challenging, but **** it.
The heat still worked, and after 2 hours with an air compressor and shop vac, I think I got all of the plastic shreddies out of the climate control.
I also did another from-scratch install of Gentoo, this time with a 2.6.29 Fastboot kernel that did hardware initialization in parallel, which cut kernel initialization with 12 or 13 USB devices from 12-15 seconds to 3 to 4 seconds. I also installed a 30GB OCZ core series 2 SSD drive as the primary disk, which along with all of the other enhancements, cut my boot time to around 8 seconds from grub to X, and another 7 or 8 seconds or so until it was usable. I ended up using the old 120GB drive for media, and with an extra 20GB or so free from not having an OS, plus ditching my Windows XP install, I was able to fit most of MAME minus CHDs I didn't care about on it.
I used iGuidance via Wine (see http://www.mp3car.com/vbulletin/linu...ml#post1288050 for the hacky bull**** I needed to do to Wine to make it read my USB receiver) for GPS, added a Hauppauge USB HTDV tuner with a rear-shelf mounted flat antenna, but kept the rest of the hardware in similar order. HDTV tuning was done using VLC, and I modified the 'haptics' program for the control surface to change DBUS calls to change channels instead of flip songs if VLC is the active application.
SDLMame was installed at this time with Wah!Cade as the front end, as on occasion I would find myself stuck in a parking lot for 30 minutes with only daytime television to watch.
The chassis from above (on the workbench):
The chassis from behind, with the cables under control:
Booted on the workbench:
The power supply, mounted to some trim that when installed resides underneath of the 'head unit':
Wild mess of cables, trying to get them under control for the install:
Revision 5 (February - March 2010):
A stick of RAM went bad in the computer, so I pulled the system out of my car, and decided that since my girlfriend did a wonderful job reorganizing and consolodating my music collections, I would reload my properly-ID3-tagged collection onto the machine while it was out. Unfortunately Amazon changed their API for fetching album art, requiring an API key and account, so I needed to upgrade Exaile to fetch all of the album art, which required me to rewrite the user interface plugins I created since they went to a new architecture and the old plugins wouldn't work.
I also installed Virtualbox and a Windows XP virtual image so I could flash my ECU again if necessary. I switched the audio to use the on-board audio adapter instead of the USB adapter so I could plug my iPhone in and listen to Pandora or LastFM more easily than running a long cable to the trunk; luckily the alternator wine was no longer an issue.
At this time I also made my own custom skin for jDash, which while abandoned, is still used at least one place.
Some videos (sorry, they are shot on my iPhone 3GS at night time, so they are not primo quality; also, yes, I blacked out the street address in the videos since I was parked near my house and don't want some forum bandit to rob me):
General usage, music playback, GPS, webcam operation, jDash, HDTV, etc.:
Wah!Cade, SDLMAME (Street Fighter Alpha 3!), Windows XP VM, and spinning the Compiz 'cylinder' around:
Starting the car, 20 seconds of POST with my own POST logo, 8.5 seconds from grub to X with my own bootsplash, and some more time as the rest of it starts:
very impressive boot time. What filesystem are you using? I've been playing around with btrfs and it's pretty quick on SSDs (especially with compression enabled).
Former author of LinuxICE, nghost, nobdy.
Current author of Automotive Message Broker (AMB).
Works on Tizen IVI. Does not represent anyone or anything but himself.
I'm sorry to resurrect this thread from the 5-month old grave but... Dude, I love this thread. I had to create an account to comment on this thread.
I'm probably feeling a strong connection to this thread because 1. I'm a gentoo fanatic and 2. I'm considering a carputer in my '08 WRX (Subaru love, my friend).
I had a few questions as this is a field that's entirely new to me:
Could you tell me about connections?
What kind of connections/adapters are needed for AM/FM radio, satellite radio, back-up camera, OBD II, and Nav antenna? Should I consider a mobo with a lot of USB ports?
I was considering mounting this device in my trunk, I understand there would have to be some longer cable runs to the monitor, but is there any other reason I should consider for not mounting it in the trunk?
What do you use to interface with the car to do ECU flashes and engine telemetry (Software and hardware/connections, please)?
Have you looked into Proximity? While doing reading for the project I'm considering I read about proximity for wifi and bluetooth. In such a way that when you pull up to your home wifi it will autoconnect and auto run a command... say to rsync your media with a machine inside the house... or to do updates... or to store your /usr/portage via nfs on another machine to save 2GB.
Additionally proximity will work with bluetooth so you can send your car a start signal when your phone is in proximity of your car. These are just considerations and I haven't tried them in practice, as I'm still in the research stage of the project. http://www.google.com/url?sa=t&sourc...GIkhbA&cad=rja
Nice build. Always one of my favorite cars.
---------- Post added at 10:46 AM ---------- Previous post was at 10:44 AM ----------
also, for flashing a subaru, check out http://www.tactrix.com/ and look at programs such as ECUflash
Sorry to resurect this thread again, and I'm glad you enjoy! And sorry for the (looong) lapse in response. To answer your questions:
- Radio: I don't have a radio in the car, though I did buy a USB FM adaptor that works with v4l2 for an aborted Miata project that is sitting in a box of unused computer junk.
- TV: I have over-the-air HDTV with a Hauppauge ATSC USB adapter that again works as a v4l2 device, and uses VLC for tuning/rendering TV. HDTV doesn't seem to work unless I'm stopped and there are no objects moving around me. I have a flat HDTV antenna with a beefy DC TV amplifier on the rear deck lid, and I can still only pick up channels who's radio towers are located to the rear of my car.
- Net: There is a CAT-5 cable that runs to the trunk, where a router with OpenWRT (Linux firmware for routers) lives. My 1st gen iPhone and iPhone 3gs were both jailbroken and running 3proxy and bind, which I used for internet access by tethering the PC to my phone via the router. Now I have a 4s with no jailbreak, yet I can't remember the last time I actually had the desire to do a "sudo emerge uDnpv" since I used a lot of unstable software in my system and it has always been a deck of cards, yet it was only stable at the moment before it went from the workbench to the car. I don't think I've updated it in a couple of years, and would shutter to think what the data usage overage would be on my 2GB metered AT&T plan would be after a portage sync and build, not to mention the total and complete state of crap the system would be in afterwards.
- Camera: I have a USB webcam hooked up, front facing, with bespoke software I wrote to record track sessions and autocrosses which could potentially be used for a rearview camera. (Poorly written) python / GTK source code is here: http://pastebin.com/Tpy2XehT and requires gstreamer-python for recording, and uvcdynctrl to change camera settings like white balance, exposure, color, etc.
- OBD II: I used a tactrix open port cable (1.3U) (available here: http://bit.ly/yhAHzm and elsewhere) with jDash (here: http://bit.ly/ApF0Vh ) and a home-made skin and logger profile.
- GPS: I don't remember where I got my receiver, but it is a plain old no-name 9600 baud GPS receiver with a serial to usb chip that is recognized by the Linux kernel ca. 2008. It touted a short signal lock time which is why I bought it, and still it normally gets a lock within a minute of having power. I use iGuidance with Wine for GPS software. Unfortunately Wine doesn't properly emulate a serial port for iGuidance when using USB GPS receivers, so I had to use and extend a patch for Wine to make this (and the last) receiver usable with iGuidance, here: http://bit.ly/x6zoIm .
- USB ports: The more the better. The mini-ITX motherboard I've had in there for a few years (Zotac something) has 4 ports on the back and 4 headers on the board which are all hooked up to ports. I have the following devices hooked up: USB GPS receiver; Webcam; Tactrix OBD-II/SSM cable; motherboard from a dell keyboard (multi-media controls with volume knob); bluetooth dongle; touch screen; HDTV dongle; and a hub with an Apple mini wired-keyboard (fits perfectly in the glovebox), wireless mouse, and game controller.
- Mounting: The aluminum and sheet metal enclosure and screen mount I bought is drilled to mount a mini-ITX motherboard, which is how I currently have it. To actually fit it with room for cables off of the back of the motherboard, I had to cut a recess into the heater core duct behind the radio, and glue in a DVD case with the front face cut out. It isn't the prettiest solution, but if you have an '08, then your dashboard is completely different and these rules do not apply. In hind sight, I wished I had explored mounting it beneath the clock as there is some room there. I used to have the motherboard mounted behind the glovebox and dashboard (see early pictures in build). Again, you have a completely different model, so I don't know if there is space there or not in a GE/GH/GR chassis. In my GD there was. Remote mounting I am sure is discussed in depth on this board, but in my experience, the longer your cable, the more your interference, signal loss, and power loss, which is only mitigated with (very expensive) lower-gauge cables. In most cars there is plenty of unfriendly to navigate space in and around the dashboard, so look around.
- Interface for ECU/telemetry: See OBD II bullet above.
- Proximity: I hadn't heard of that project, but I have heard of others like it. Looks pretty cool, though unless you have a lot of time, you'd probably be better off devoting your efforts to things that make you smile, like music, engine telemetry, and HDTV, as doing something like proximity would only earn the respect of true nerds; however, that respect would be epic respect.
Last edited by hotspoons; 02-04-2012 at 12:53 AM.