Skip to main content

Posts

Showing posts from 2011

Gingerbread redux

I've been running GingerStreak of late and I'm not best pleased with the results. So I thought I'd try my hand at building Gingerbread for the Streak. Dell has helped out by actually releasing a working kernel. Just so I remember, here's how I put myself onto the latest released msm8660 build (gingerbread_house @ CodeAurora):   repo forall -c git checkout M8660AAABQNLZA3620   Initially I just moved the original externals to a .aosp directory (e.g. bluetooth -> bluetooth.aosp) so that I could diff them, but the default build process still wants to build 'em. Looks like I'll have to move it outside the tree.

Python and libpuzzle

As much as I've dogged on Python in the past (significant whitespace, really?), I've got to admit that it's got some cool features too. For example, I'm playing with libpuzzle  (a library for visually comparing images).  It has a command line utility and a C and PHP API.  Unfortunately, the CLI utility doesn't allow one to dump the raw comparison vector, and it's a PITA to write C just to play with a library. Python's native "ctypes" to the rescue! from ctypes import * class PuzzleCvec(Structure): _fields_ = [("sizeof_vec", c_size_t), ("vec", c_char_p)] class PuzzleCompressedCvec(Structure): _fields_ = [("sizeof_compressed_vec", c_size_t), ("vec", c_char_p)] class PuzzleContext(Structure): _fields_ = [("puzzle_max_width", c_uint), ("puzzle_max_height", c_uint), ("puzzle_lambdas", c_uint),

I guess Python isn't so bad after all...

Not wanting to hassle with learning OpenCV and fighting with an edit-compile-execute environment, I decided to use my OpenCV project as an excuse to play around with Python. I'm still a serious beginner, but I'm beginning to understand why it gets the use it does. Anyhow, it only took a couple of days to integrate Tesseract OCR, PIL, and OpenCV such that I could open multi-frame TIFF images, perform some basic feature detection, and then use the output of feature detection to focus on a specific region for OCR. I will admit to having a few false starts.  The first was that I used an older (C++) tutorial that was using some deprecated features of OpenCV and ignoring some other features.  For example, the tutorial was using Hough Line detection to find squares on a printed page.  In order to get to that point there was thresholding, dilating, eroding, inversion, flood filling and so on.  Even then I wasn't getting the correct results. When I started over, I was using

Android on hold

Since the Android git repository is offline, I'm having to find something else to occupy my time. I've always wanted to learn more about OpenCV, so I'm working on a new project using that.  At work we have piles and piles of paper forms that have been filled out by hand.  I've already done some trial and error work and determined that both OpenCV and PIL can clean up the scanned copies enough that I can do OCR on the printed portion of the forms using Tesseract OCR.  This doesn't get any of the dynamic data, but it does allow me to identify what type of form it is. Running OCR on an entire document takes some time, so it would be better to grab smaller regions of interest and only OCR them.  Some of the interesting challenges are that some forms are portrait while others are landscape.  I'd also like to handle the case where a form was fed into the scanner upside down.

If it builds, ship it...

I've finally gotten a working build.  It turns out what I really needed was to get up @ 0630, take a shower, and just plug away. Anyhow, the source is up on github:   https://github.com/coredog64 I still need to get it to build an image for the Streak before I can actually test it.

More progress

On St. Patrick's Day, Dell released an early alpha version of a Streak gingerbread kernel.  They're working from a CodeAurora drop from last year and they're using Broadcom provided brcm4325 drivers instead of the brcm4329 drivers that support both chipsets. So, I merged the Dell alpha into the current CodeAurora tree and have something that almost builds. The last piece fell into place today when I found a streak device tree for froyo.  There have been some breaking changes in the build files between froyo and gingerbread, so I need to touch all the make files to get any further. Still, I might actually have my own gingerbread ROM right around the time Google drops Honeycomb and Dell releases their own version of gingerbread...

Almost there

All the Dell files compile correctly.  All I have to do now is work out the config changes so that the correct object files are built and linked into the final kernel.

PEBKAC

It turns out the reason it wasn't building the object files into the built-in was that I had neglected to copy the source files for them into the CodeAurora tree. I finished merging the Dell and CodeAurora board files into an appropriate version for the Streak.  It still doesn't finish building, but I'm much closer.

Roadblocks

Mostly roadblocks tonight, although I did learn how to remove the "-Werror" flag from the set of flags used to compile a specific object. As of right now, I'm not understanding why my driver object files aren't being pulled into the built-in driver object file.  I suspect I'm going to have to dig deeper into the top level makefile.

Getting closer

Discovered that the "toucan" config is distinct from the "austin" config and so can dump a bunch of drivers. Unfortunately it looks like I have to merge the Dell board config (board-qsd8x50_austin.c) with the latest generic board config from CodeAurora (board-qsd8x50.c). Here's where I'm at so far: corey@patches:~/msm$ git status # On branch gingerbread_rel # Changed but not updated: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: arch/arm/mach-msm/Kconfig # modified: arch/arm/mach-msm/Makefile # modified: arch/arm/mach-msm/include/mach/board.h # modified: arch/arm/mach-msm/include/mach/camera.h # modified: drivers/input/keyboard/Kconfig # modified: drivers/input/keyboard/Makefile # modified: drivers/input/misc/Makefile # modified: drivers/input/touchscreen/Kconfig # modified: drivers/input/touchscreen/Makefile # modifie

Some driver progress...

I diff'd the Dell source release against 2.6.35 from CodeAurora.  A lot of the changes were noise -- Intel wireless driver headers that got renamed, or Zaurus support that's gone away. What I'm left with is stuff in the following directories: /drivers/i2c/chips /drivers/input/keyboard /drivers/input/misc /drivers/input/touchscreen /drivers/leds /drivers/media/video /drivers/media/video/msm /drivers/misc /drivers/misc/reset /drivers/mmc/host /drivers/mtd/devices /drivers/net/msm_rmnet_* /drivers/power/qsd_batter.* /drivers/staging/android /drivers/video/msm_austin /drivers/video/msm /drivers/video/msm_toucan /drivers/watchdog Another help is that someone else posted a mention that the Streak's codename was "Austin", so a grep through the Dell source tree turned up a bunch of files that have Streak specific changes.

Starting my Streak Gingerbread port

While I appreciate all the hard work DJ_Steve puts into StreakDroid, it's just too buggy for me.  So I'm going to try my hand at jumping right to Gingerbread. My starting point is the MSM/QSD code that Qualcomm publishes at CodeAurora.  Clone the kernel repo using the following command: git clone git://codeaurora.org/kernel/msm.git Next, I want to change the working master to the Gingerbread kernel: git checkout -b gingerbread_rel origin/gingerbread_rel My next step is to pull in Dell's changes from their 3.09 release.  Stay tuned!