Now Playing Tracks

NOWTV Teardown part 4

Quick post revealing the boot sequence :-)


UART initialized.
Jun 30 2011 11:27:29
Attempting NAND Load.
No SD Card.
p1 starts at 16
p2 starts at 400
MAGIC wrong 0
ver: 4294967295,3
Reading: 233
Checking: 475684
hash: 33 82 C3 E5 D5 A8 49 A8 9C 7D D7 D4 88 87 FA 3C F4 1B 88 BE 
Image valid.
Valid Code Loaded.
uboot:0123456789ABCDEF
uboot:UART_RX NOT Babbling 00


U-Boot 2010.06 (Jun 21 2013 - 12:16:31)

U-Boot code: 04280000 -> 042B4000  BSS: -> 042FD958
RAM Configuration:
Bank #0: 00000000 232 MiB
NAND:  board_nand_init
probed 2708
SMI start=10600000 DMA start=10007400
NAND init done
NAND: Remapping Bad Blocks:
256 MiB
*** Warning - bad CRC or NAND, using default environment

In:    serial
Out:   serial
Err:   serial
mailbox at 1000b8a0
MMC:   bcm2708_mci: 0
Application image detected
Partition 1: Verify uimage: Success
Partition 1: Verify firmware: Success
Booting videcore at 0x0b800000 vc_phy_addr: 0x40000000
vcboot: found vc bootargs location at 0b802800 with 4 boot args
uboot:0123456789ABCDEF
uboot:UART_RX NOT Babbling 00
Got IPC Base addr: 0x44453000 g_ipc_base: 0x4fc53000
vctvcontrol auto
Starting tv interface, base = 4fc57000 id=1
vcsplash
Starting media dec, base = 4fc69000 id=10
setup playback from 1 with size 1
.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................…..
Partition 1: Verify cramfs: Success
booting kernel
Application image detected
Boot progress: 1
## Booting kernel from Legacy Image at 039a25e8 ...
Boot progress: 2
Boot progress: 3
   Image Name:   Linux-2.6.35.14-grsec2.2.2-vs2.3
   Image Type:   ARM Linux Kernel Image (gzip compressed)
   Data Size:    2910116 Bytes = 2.8 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
Boot progress: 4
Boot progress: 5
Boot progress: 6
Boot progress: 14
   Uncompressing Kernel Image ... OK
Boot progress: 7
Boot progress: 8
Boot progress: 15

Starting kernel …

NOWTV Teardown Part 2

OK, I have plugged it in and turned it on (and ordered a proper RCA cable from NOWTV). Had a quick play with the interface and the special hidden menus. The box reports itself as a 2400SK and today it’s running firmware version 074.09E08061A Build date: 20130621 12:46

Using the info at http://www.cs.cmu.edu/~ecc/roku-nfp.html I’ve retrieved the firmware image from Roku’s servers. The image for mtd2 is around 40Mb and strings reveals lots of references to ARM code and Broadcom devices, especially the 2708.

Possible mtd layout

mtdparts=Nand:%dk(Boot),%dk@%dk(Active),%dk@%dk(Update),%dk@%dk(RW)enc,%dk@%dk(ID),%dk@0k(All),%dk@%dk(BootBackup),128k@%dk(PC)

Lots of guff un the U-Boot portion indicate possible OS loading from SDCards

More interesting strings:

  • U-Boot 2010.06 (Jun 21 2013 - 12:16:31)
  • neteng-build01.roku
  • console=ttybcm0,115200

NOWTV Teardown

Just got hold of a NOWTV box for £9.99 from https://shop.nowtv.com  Of course I’m not going to watch TV with it, I’m going to rip it apart and use it for something else.  For less than £10 it could prove to be the cheapest ever OpenWRT-compatible box ever.  We’ll see…

Here’s some pics after breaking in via four Torx-T6 screws underneath the blue NOWTV rubber base:

First things to note: the USB/Ethernet controller chip is unpopulated, I guess that means USB-enabling the device won’t be as simple as soldering on a USB socket.  The Bluetooth controller is also unpopulated.

Here are some chip identifiers and PCB strings:

  • Samsung K4P2G324ED-AGC1 (ic)
  • Broadcom BCM590021ML25G (? ic)
  • AKM 4430ET 0E250 (ic)
  • Toshiba NS7661 TC58NVG1S3ETA00 (ic)
  • GP800928 REV.0 U89X012 (PCB)
  • SJR1LYG U89Z017T09 LF E100068571-00L0 (white sticker)
  • RC6F23395AF (PCB)

There are many, many test points on the PCB, will start looking for a serial port when I get more time. I suspect I’m going to rely a lot on the hard work already done by people who’ve bust open their Roku 2 XS boxes, on which this NOWTV box seems to be based.  More to come…

Minimum supported iOS version for iTunes Apps

Inspired by the original code of Walt Stoneburner, I wanted a way to catalogue which apps had a minimum iOS version requirement which meant they wouldn’t run on my first-generation iPad (which is now frozen at iOS 5.1.1).  The answer is contained in a tag within Info.plist

for f in ~/Music/iTunes/iTunes\ Media/Mobile\ Applications/*.ipa ; \

  do (echo “$f” ; unzip -p “$f” “Payload/*/Info.plist” | \

  plutil -p - | egrep -i “"(CFBundleName|CFBundleDisplayName|MinimumOSVersion)"” ) | \

  perl -e ‘while (<>) { if (m!^/!) { chop; $fqn=$_; } if (m/”(.+)” => (“.+”)/) { $e{$1}=$2; } } print “"${fqn}",$e{"CFBundleName"},$e{"CFBundleDisplayName"},$e{"MinimumOSVersion"}\n”;’; \

done | sort -k 4 -t “,”

Of course there are other reasons an app won’t load onto an iPad1 - like requiring a rear-camera for instance!  My quest reveals that amongst others, Facebook Camera, Google Maps, Shazam and iMovie won’t load :-(

Inviting friends after creating Facebook event

I created a few events in a Group as placeholders for upcoming meets.  Of course, the time came when I had to actually invite all the group members to the events.  Unfortunately Facebook doesn’t have a “select all” button to easily accomplish this and there was no way I was going to click through 100+ names!  Plumbo came to the rescue with the handy script to paste into your browser address bar.  Works a treat and saved me a lot of boredom!

More Tumblr annoyances!

Following up to my earlier post, I’ve been looking into workarounds for the “no post to twitter” problem.  Using the excellent if-this-then-that service, it should have been possible to scrape the RSS feed for the blog and post to Twitter from that.  However,

I’d forgotten that the RSS feature has never been enabled for password protected blogs (as far as I know).  Why on earth would I want people to subscribe and get regular updates when I post to my blogs? (You need to read that in a sarcasm font :-) )

So how about writing my own code to poke the Tumblr API, identify which posts haven’t tweeted and tweet them myself?

{“meta”:{“status”:404,”msg”:”Not Found”},”response”:[]}

Aah, of course, the informative “Not Found” error message that appears when you try and query password protected blogs.  I’d forgotten that too.

Don’t get me wrong, after years using Wordpress and Blogger, I’ve settled on Tumblr as my platform of choice, it’s just so annoying that the service is 95% complete and really useful features are arbitrarily disabled.  My search continues…

Tumblr annoyances - no post to Twitter

Despite being heralded as the “social” blogging platform, Tumblr recently and more significantly, silently, withdrew the feature for auto-tweeting blog posts from protected blogs (and the share to FaceBook feature).  The explanation from Support is that:

It was never intended that password-protected blogs be able to post to Twitter, as the shorturls back to the Tumblr blog would create confusion for anyone who didn’t know the blog password.

Consider my use-case:  I’ve run a family blog for the past six years.  I post photos of my kids, their schools, their friends, their locations - I’ve decided that should be private, so I’ve always used a password protected blog.  My family and friends have the password.  How do I inform them of a new blog post?  Simple, they can subscribe to the Twitter account, or at least they could until about June 2012.  Are they confused when they arrive at the blog?  Nope, they just type the password in and carry on browsing.

Tumblr support have taken my feedback, but I’m not confident they’ll do anything with it or how features for the platform get decided.  It was really disappointing that a feature that had been working for me for two years got “disappeared”!  Workarounds welcomed!

To Tumblr, Love Pixel Union