tag:blogger.com,1999:blog-48859778814004571292024-03-13T04:07:02.001-07:00Headless AndroidAnonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.comBlogger35125tag:blogger.com,1999:blog-4885977881400457129.post-17799082998726112582014-01-22T10:16:00.001-08:002014-01-22T10:16:13.361-08:00Android and Embedded Linux - Can't we just live together in peace?I was watching my news feed today and ran across this article. It is an interesting discussion about whether Android can challenge Embedded Linux as an operating system for embedded devices.<br />
<br />
<a href="http://www.linuxinsider.com/story/Can-Android-Challenge-Embedded-Linux-79831.html" target="_blank">Can Android Challenge Embedded Linux</a><br />
<br />
I can easily see areas where Embedded Linux will continue to have a strong hold. As the article mentions, if you have a single purpose built device, why use something as flexible as Android?<br />
<br />
However, there are two points I think are still important that weren't mentioned in the article.<br />
<ol>
<li>Developers - Any one who has had the task of hiring good Embedded Linux Engineers can tell you that it can be a difficult market. Getting good Android (mostly Java) developers can be easier.</li>
<li>Extensibility - If you aren't building a single purpose built device, then choosing a good application framework is absolutely critical. Android is a pretty good application framework.</li>
</ol>
In essence it comes down to what you are trying to do with your device. If it's a purpose built golf ball cleaning machine, you are pretty safe not using a high level application framework like Android. If your golf ball cleaning machine has a fancy UI that lets you choose just how your golf balls are washed, dried, and teed up for you, then maybe Android would be your OS of choice.<br />
<br />
In the grand scheme of things though, my pick is to use Embedded Linux as your OS and if you have need of a higher level application framework, then pick Android. Best of both worlds - it's not an either/or. Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com2tag:blogger.com,1999:blog-4885977881400457129.post-86535601709489223952013-10-24T13:48:00.003-07:002013-10-24T13:49:38.151-07:00A "look but don't touch" kind of openI saw an article today on Ars Technica that has a really good write up on how Google is controlling open source Android. In a world where Android has 80% of the market, I can certainly see why Google is itching for more control. I can't fault them.<br />
<br />
In a Headless Android world, many of the points in the article don't hold much sway. It's mostly about apps and Google Play services. However, some of the APIs that have been tied in to some of Google apps, like location services, could be very relevant to Headless Android. <br />
<br />
Here is the link. It's worth the time to read.<br />
<br />
<a href="http://arstechnica.com/gadgets/2013/10/googles-iron-grip-on-android-controlling-open-source-by-any-means-necessary/" target="_blank">Google's iron grip on Android: Controlling open source by any means necessary</a>Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-43280753105873688032013-06-19T15:46:00.000-07:002013-06-19T15:46:29.069-07:00Presentation - The Growth of Android in Embedded SystemsI was watching my Google alerts today and an interesting presentation by Benjamin Zores he gave at Droidcon 2013 in Paris this week came up. I would have loved to have seen the actual presentation, but the slides give a pretty good summary of what he talked about.<br />
<br />
<a href="http://www.slideshare.net/gxben/droid-con-2013-bz-the-growth-of-android-in-embedded-systems" target="_blank">The Growth of Android in Embedded Systems</a><br />
<br />
He certainly raised some valid points in his conclusions, that (as I read it) Android isn't for everyone. Ice Cream Sandwich pushes the resource limits pretty high, generally due to graphics requirements. Benjamin's final conclusion states that Android is good for devices featuring an LCD screen and are primarily app-driven.<br />
<br />
For non-UI focused devices, Android is only beneficial if you can turn off all that UI stuff and still maintain the power of the platform. It remains to be seen whether Google will see the vision in a Headless Android port (doubtful) so in the mean time, the heavy lifting is left up to individual companies.Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com3tag:blogger.com,1999:blog-4885977881400457129.post-7025443412073897912012-12-18T10:25:00.001-08:002012-12-18T10:27:22.081-08:00OSGi and Android - A ComparisonWhen you think about Headless Android the logical market for the technology is in a headless router or gateway. When you compare technologies, and specifically software stacks, on these products there are a couple of big front runners when it comes to actual deployments. Unfortunately Headless Android isn't one of them... yet.<br />
<br />
However, if you look at the landscape of gateways, one of the predominant technologies running on many of them is OSGi. Over the past several months I've been digging into OSGi and how it relates to Headless Android (which is why the Blog has been somewhat silent since July). Here are some interesting things I've found so far.<br />
<br />
OSGi is the Open Software Gateway Initiative. If you aren't familiar with it, Google is your friend. <br />
<br />
<b>Documentation</b><br />
<br />
The Android documentation, as many of you are aware, is very well done. I have found there is ample, easy to use documentation on the API's, how they are supposed to be used, and usually some very easy to understand examples.<br />
<br />
OSGi on the other hand... doesn't. If you know the specification well enough that you don't need the documentation, then the documentation is fine though. (Yes, that's sarcasm). <br />
<br />
<b>Multiple JVM Instances</b><br />
<br />
One of the biggest differences I've seen between the two is the choice of Android to use multiple JVM instances, one for each process running. I have often wondered over the past few months if they guys at Android had used OSGi and asked themselves if there was a better way. I'm a HUGE fan of the Android multiple JVM approach now that I've spent some quality time with OSGi.<br />
<br />
For example, I was doing a demo on OSGi with a huge customer at the International Broadcasters Convenction in Amsterdam a few months ago and there was a problem with the implementation of XMPP we were using. About 80% of the time it when the client code would attempt to log in to an XMPP server it would hit a race condition in the framework and the application would crash. Unfortunately it would crash the entire JVM so the OSGi framework would also crash. The JVM vendor had to get involved to get the issue resolved (which took several months). Very painful.<br />
<br />
<b>JVM Support</b><br />
<br />
Dalvik is a great JVM. I've been impressed with it when running Android. Since OSGi is a framework, it will run on just about any JVM. To the novice OSGi implementor (me) that actually caused a lot of confusion. The OSGi vendors I was working with couldn't answer questions about the JVM. None of the documentation covered both the JVM and the OSGi framework, so you end up having to dig in two places to find answers.<br />
<br />
I realize that having multiple JVM support can be a really good thing. It's just painful because it's so decoupled.<br />
<br />
<b>Standard versus Open</b><br />
<br />
The OSGi framework is a standard. In essence it's a big document that describes how the OSGi framework should work. Several vendors have implemented this standard so there are various flavors of the framework. Some of these implementation are open, some are not. That certainly gives the market choice.<br />
<br />
Android, on the other hand, is open but not a standard. You could argue that because of it's popularity it's quickly becoming a standard (which I would agree with), but there is really only one Android implementation (officially). Google supports and maintains it, along with the JVM.<br />
<br />
<b>Debugging</b><br />
<br />
One of the biggest strengths that Android has over OSGi is in the ability to debug an application. Following any one of several "How To" web pages will get you debugging a hello world application in Android on a device in just an hour or two. Trying to do the same on OSGi is at best an exercise in frustration and at worst impossible (from my experience). It's easier to go back to the days of print debugging.<br />
<br />
<b>Market </b><br />
<br />
In general terms, the markets for OSGi and Android have not overlapped. OSGi has been mainly adopted in the telco/cable world and has a rich infrastructure for managing a device in a home. Another area that OSGi is strong is in the Enterprise realm. It certainly never made a big splash in mobile phones or tablets.<br />
<br />
As with most technology, convergance is happening though. Mostly from the Android world creeping in to the traditional OSGi markets. At IBC I saw several prototypes of Android based set top boxes. I expect this trend to continue.<br />
<br />
<b>Summary</b><br />
<br />
Overall OSGi has some nice features and the idea of a framework is really beneficial. OSGi certainly has been around long enough to be pretty solid and reliable. It also has back-end management capabilities that Android is still coming up to speed on (quickly).<br />
<br />
Having used the two now for a bit, my opinion, for what it's worth, is that Android is a much better system to write and debug code with. Long live the robotic human analog.Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com1tag:blogger.com,1999:blog-4885977881400457129.post-51121517101034455592012-09-11T13:18:00.000-07:002012-09-11T13:18:27.044-07:00Android Set Top BoxI had the opportunity to attend the International Broadcasting Convention last week and I was pleasantly surprised to find a few set top boxes (STB) running Android.<br />
<br />
<a href="http://www.echostar-europe.com/products/ConnectedDevices/IPTV/X200.aspx" target="_blank">Echostar Europe Android STB</a><br />
<br />
<a href="http://www.engadget.com/2012/09/07/echostar-hdx-410-ics-set-top-box-hands-on/">Engadget Writeup of the Echostar Android STB</a><br />
<br />
I also saw a demonstration in the Intel booth of an Android STB. It looked like all of them were running ICS.<br />
<br />
While they aren't headless, Android on a STB is pretty cool.Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-20620725008291108512012-07-03T10:09:00.000-07:002013-06-11T07:56:49.374-07:00Android Raspberry Pi Kernel Build WalkthroughI've had some queries on the blog about building the Raspberry Pi kernel I hacked together. Here are the instructions on how to compile the Android kernel for the Raspberry Pi environment.<br />
<br />
This kernel <b>should</b> work with the headless Android filesystem.<br />
<br />
<b><span style="color: red;">NOTE: Since I have not been able to get my hands on the hardware I haven't tried it myself. You are on your own with this. I doubt it works right out of the box... </span></b><br />
<br />
<h2>
Build Instructions</h2>
All build instructions reference the base directory where you want to put the source files. For me I used:<br />
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">export RASP_SRC_BASE=~/work/raspberry-pi</span></span><br />
<br />
<h3 style="font-weight: normal;">
<b>Get the kernel sources for linux-3.1.9</b></h3>
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: x-small;">mkdir -p $RASP_SRC_BASE/kernel/patches</span></div>
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">cd $RASP_SRC_BASE/kernel</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.9.tar.bz2</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">tar jxvf linux-3.1.9.tar.bz2 </span></span><br />
<br />
<h3>
Apply the Raspberry Pi patch </h3>
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: x-small;">cd $RASP_SRC_BASE/kernel/patches/<br />wget http://www.cnx-software.com/patch/r-pi_linux_3.1.9.patch.gz<br />gunzip r-pi_linux_3.1.9.patch.gz <br />cd $RASP_SRC_BASE/kernel/linux-3.1.9<br />patch -p1 < ../patches/r-pi_linux_3.1.9.patch</span><br />
<br /></div>
<h3>
Get the Toolchain</h3>
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">cd $RASP_SRC_BASE/toolchain</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">wget https://sourcery.mentor.com/sgpp/lite/arm/portal/package9728/public/arm-none-linux-gnueabi/arm-2011.09-70-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">tar jxvf arm-2011.09-70-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 </span></span><br />
<br />
<h3>
Set up the environment variables</h3>
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: x-small;">export PATH=$PATH:$RASP_SRC_BASE/toolchain/arm-2011.09/bin<br />export CROSS_COMPILE=$RASP_SRC_BASE/toolchain/arm-2011.09/bin/arm-none-linux-gnueabi-<br />export ARCH=arm<br />export CCACHE_DIR=~/.ccache/<br />export USE_CCACHE=1</span><br />
<br /></div>
<h3>
Make sure the build works</h3>
At this point, configure and build the Raspberry Pi kernel.<br />
<br />
<h4>
Configure the kernel</h4>
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: x-small;">
cd $RASP_SRC_BASE/kernel/linux-3.1.9<br />
cp arch/arm/configs/bcmrpi_cutdown_defconfig .config<br />
make oldconfig</span></div>
<br />
<h4>
Make the kernel</h4>
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: x-small;">make -k -j6</span></div>
<br />
<br />
<h3>
Apply the Android kernel patch</h3>
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: x-small;">cd $RASP_SRC_BASE/kernel/patches/<br />
wget https://dl.dropbox.com/u/24888185/android_3.1.9_patch.tar.gz<br />
gunzip </span><span style="font-size: x-small;">android_3.1.9_patch.tar.gz</span><br />
<span style="font-size: x-small;">
cd $RASP_SRC_BASE/kernel/linux-3.1.9<br />
patch -p1 < ../patches/linux-3.1.9-stock-to-android.patch</span><br />
<span style="font-size: x-small;">patch -p1 < ../patches/linux-3.1.9-fs-proc-base.patch</span><br />
<span style="font-size: x-small;">patch -p1 < ../patches/linux-3.1.9-yaffs2.patch</span><br />
<span style="font-size: x-small;">patch -p1 < ../patches/linux-3.1.9-power.patch</span><br />
<br /></div>
<h3>
<br />
Build Raspberry Pi Android</h3>
You are ready to build the Raspberry Pi Android kernel now.<br />
<br />
<br />
<h4>
Configure the kernel</h4>
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">cd $RASP_SRC_BASE/kernel/linux-3.1.9</span></span><br />
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">wget https://dl.dropbox.com/u/24888185/rasp_android_defconfig.gz</span></span><br />
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">gunzip rasp_android_defconfig.gz</span></span><br />
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">mv rasp_android_defconfig .config</span><span style="font-family: "Courier New",Courier,monospace;"></span><span style="font-family: "Courier New",Courier,monospace;"><br /> </span></span><br />
<br />
<h4>
Make the kernel</h4>
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: x-small;">make -k -j6</span></div>
<div style="font-family: "Courier New",Courier,monospace;">
<br /></div>
<div style="font-family: "Courier New",Courier,monospace;">
<br /></div>
<div style="font-family: "Courier New",Courier,monospace;">
<br /></div>
<div style="font-family: "Courier New",Courier,monospace;">
</div>
Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com23tag:blogger.com,1999:blog-4885977881400457129.post-48346435588542977772012-06-26T11:44:00.000-07:002012-06-26T11:44:49.760-07:00Android and Emerging MarketsI recently read an <a href="http://www.theregister.co.uk/2012/06/26/brics_love_android/" target="_blank">article in The Register</a> by a friend of mine, Matt Asay. He has a pretty good point about Android being the dominant player in the BRIC market. I can remember going to CES and being surprised ten years ago how many odd cheap devices were using Linux, but had really terrible interfaces. Thanks to Android, now those devices have a compelling interface and access to the Android application market.<br />
<br />
Matt's point though is about revenue. If you can't charge people for apps because you don't have a credit card on file, and advertising isn't targeting them necessarily, how do application developers make money in those emerging markets?<br />
<br />
For that matter, what about devices without a UI at all? Is there a way to monetize services without an interface? If you have a smart phone that can connect to a headless device in your home where the headless device is doing some "work" for you, like keeping track of energy usage for example, would the money be made on the secondary device and the application on the smartphone is just a way to connect to it to get at the information?<br />
<br />
There are certainly many questions left to answer on this topic. It will be really interesting to see where the market goes, especially in the BRIC countries.Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com4tag:blogger.com,1999:blog-4885977881400457129.post-65275435450506252422012-06-12T10:52:00.000-07:002012-06-12T11:02:04.949-07:00Networking on a Headless Android SystemAndroid isn't the most intuitive environment for setting up networking on the command line. After playing with several different options here's what I've found.<br />
<br />
<h3>
Summary</h3>
<div style="font-family: "Courier New",Courier,monospace;">
# netcfg eth0 dhcp</div>
<span style="font-family: "Courier New",Courier,monospace;"># route add default gw 192.168.0.1 dev eth0</span><br />
<div style="font-family: "Courier New",Courier,monospace;">
# setprop net.dns1 208.67.222.222<br />
# setprop net.dns2 208.67.222.220</div>
<br />
<h3>
Details</h3>
<br />
The Android tools are quite different from the tools found on other embedded Linux systems, so most people I've talked to have had difficulty figuring out what utilities to use and how to use them. The most interesting one is ifconfig. When you type ifconfig on an Android system nothing happens. On a standard busybox or gnu based Linux system you will see the available networking interfaces and their associated settings (ok, technically ifconfig -a will show you that information). Since ifconfig doesn't show anything, most people assume (incorrectly) that it doesn't work.<br />
<br />
On my development platform, to set a static IP address, I did the following:<br />
<div style="font-family: "Courier New",Courier,monospace;">
# ifconfig eth0 192.168.0.84 netmask 255.255.255.0</div>
<br />
Which didn't give any response, but DID show the following when I did netcfg.<br />
<span style="font-family: "Courier New",Courier,monospace;"> </span><br />
<span style="font-family: "Courier New",Courier,monospace;"># netcfg</span><br />
<span style="font-family: "Courier New",Courier,monospace;">lo UP 127.0.0.1 255.0.0.0 0x00000049</span><br />
<span style="font-family: "Courier New",Courier,monospace;">eth0 UP 192.168.0.84 255.255.255.0 0x00001043</span><br />
<span style="font-family: "Courier New",Courier,monospace;">usb0 DOWN 0.0.0.0 0.0.0.0 0x00001002</span><br />
<span style="font-family: "Courier New",Courier,monospace;">tunl0 DOWN 0.0.0.0 0.0.0.0 0x00000080</span><br />
<span style="font-family: "Courier New",Courier,monospace;">gre0 DOWN 0.0.0.0 0.0.0.0 0x00000080</span><br />
<span style="font-family: "Courier New",Courier,monospace;">sit0 DOWN 0.0.0.0 0.0.0.0 0x00000080</span><br />
<br />
So what about DHCP you may ask? <br />
<br />
<div style="font-family: "Courier New",Courier,monospace;">
# netcfg eth0 dhcp</div>
<br />
Which yields the following.<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"># netcfg</span><br />
<span style="font-family: "Courier New",Courier,monospace;">lo UP 127.0.0.1 255.0.0.0 0x00000049</span><br />
<span style="font-family: "Courier New",Courier,monospace;">eth0 UP 192.168.0.227 255.255.255.0 0x00001043</span><br />
<span style="font-family: "Courier New",Courier,monospace;">usb0 DOWN 0.0.0.0 0.0.0.0 0x00001002</span><br />
<span style="font-family: "Courier New",Courier,monospace;">tunl0 DOWN 0.0.0.0 0.0.0.0 0x00000080</span><br />
<span style="font-family: "Courier New",Courier,monospace;">gre0 DOWN 0.0.0.0 0.0.0.0 0x00000080</span><br />
<span style="font-family: "Courier New",Courier,monospace;">sit0 DOWN 0.0.0.0 0.0.0.0 0x00000080</span><br />
<br />
Just because you have an IP address now doesn't mean the applications on your Android device can get to the network. For that you have to set a default route and set the DNS resolver addresses. Again, with route keep in mind it won't show the usual output that a standard busybox or gnu based embedded Linux system would show.<br />
<br />
To set the default route:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"># route add default gw 192.168.0.1 dev eth0</span><br />
<br />
And to set the DNS (I'm using OpenDNS addresses here):<br />
<br />
<div style="font-family: "Courier New",Courier,monospace;">
# setprop net.dns1 208.67.222.222<br />
# setprop net.dns2 208.67.222.220</div>
<div style="font-family: "Courier New",Courier,monospace;">
</div>
<div style="font-family: "Courier New",Courier,monospace;">
</div>
<div style="font-family: "Courier New",Courier,monospace;">
</div>
<div style="font-family: "Courier New",Courier,monospace;">
</div>
<div style="font-family: "Courier New",Courier,monospace;">
</div>
<div style="font-family: "Courier New",Courier,monospace;">
</div>
<div style="font-family: "Courier New",Courier,monospace;">
</div>
<div style="font-family: "Courier New",Courier,monospace;">
</div>
<div style="font-family: "Courier New",Courier,monospace;">
</div>
<div style="font-family: "Courier New",Courier,monospace;">
</div>
<div style="font-family: "Courier New",Courier,monospace;">
</div>
<br />
And that allows the holy grail of a DNS resolved ping to a domain on the Internet. <br />
<br />
<span style="font-size: xx-small;"><span style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;"># ping google.com</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">PING google.com (74.125.224.134) 56(84) bytes of data.</span></span><span style="font-family: "Courier New",Courier,monospace;"> </span></span><br />
<span style="font-size: xx-small;"><span style="font-family: "Courier New",Courier,monospace;">64 bytes from nuq04s09-in-f6.1e100.net (74.125.224.134): icmp_seq=1 ttl=57 time=41.5 ms</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">64 bytes from nuq04s09-in-f6.1e100.net (74.125.224.134): icmp_seq=2 ttl=57 time=43.2 ms</span></span><br />
<br />
<h3>
References</h3>
<br />
I found some great information in the following links.<br />
<br />
<a href="http://www.anddev.org/advanced_networking_with_android-linux-t155.html">http://www.anddev.org/advanced_networking_with_android-linux-t155.html</a><br />
<br />
<a href="http://elinux.org/Android_Networking">http://elinux.org/Android_Networking</a> <br />
<br />
<br />
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-49213110737988752602012-04-24T15:51:00.000-07:002012-04-24T15:51:55.675-07:00Headless Android on Raspberry Pi - Progress ReportI know you are all dying to know how my progress has been going on the Raspberry Pi Android port. Well, it's coming along. <br />
<br />
The Raspberry Pi currently uses a 3.1.9 ARM Linux kernel. The version of Android I decided to port over uses the 3.0.8 ARM kernel. To patch the 3.1.9 ARM kernel with Android, I had to go a circuitous route.<br />
<br />
It would have been pretty easy if there were patches already out there that were JUST Android patches. I couldn't find any. I'm sure there is a way, using Git, to isolate the Android patches from the Git Android repository, but I haven't spent enough time playing with Git to do it. So, I went the old fashioned way.<br />
<br />
To create my own isolated Android patch, I first needed to find an Android running on a 3.x.x version of the kernel. Ice Cream Sandwich is running against a 3.0.8 kernel (at the time I did this post) so that is where I started. The trick was to not include any ARM patches with the isolated Android patch because I needed to keep all of the Raspberry Pi ARM changes in tact.<br />
<br />
So, starting with an x86 3.0.8 Android kernel I found, I created a patch from <b>stock</b> x86 3.0.8 to <b>Android</b> x86 3.0.8. That gave me an isolated Android patch. Then I applied that isolated Android patch to the 3.1.9 Raspberry Pi kernel. That took my Raspberry Pi kernel to an Android kernel.<br />
<br />
Now I need to make the modifications to the Ice Cream Sandwich Android to make it a Headless Ice Cream Sandwich (in the shape of an Android, of course.)<br />
<br />
Note:<br />
Why x86? Well, that's a good question.<br />
<br />
In order to get a clean isolated Android patch I needed to start with something that I could:<br />
a) get a good clean stock kernel for, and<br />
b) if there were unnecessary changes to the architecture or driver files they wouldn't affect and ARM system.<br />
<br />
I could have attempted an ARM 3.x.x kernel but it's pretty hard to find an ARM kernel (of the 3.x.x revision) with an matching ARM kernel with Android that you would have confidence that the ARM portion is all the same. At least the x86 stuff is fairly well known and consistent.<br />
<br />
Stay tuned, more to come!Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com14tag:blogger.com,1999:blog-4885977881400457129.post-12617885347786471002012-04-17T14:09:00.003-07:002012-04-17T14:11:50.102-07:00Memory Comparisons - Headless Android vs. Full AndroidAfter some questions on the blog about memory comparisons, I pulled some information together off of my Freescale development board. Here is the information I've pulled together. From what I see the information shows:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">MemFree difference = 337320 kB - 265888 kB = <b>71432 kB saved (21%)</b></span><br />
<br />
The other interesting one is with the Active in each case:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">Active difference = 95892 kB - 44632 kB = <b>51260 kB saved (53%)</b></span><br />
<br />
Here is the raw information from the memory usage off of my development board.<br /><br /><b>Using the standard Android image with no Headless Android changes:</b><br /><br />Free shows:<br /><br /><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;"># busybox free</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> total used free shared buffers</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> Mem: 442740 177932 264808 0 2000</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> Swap: 0 0 0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Total: 442740 177932 264808</span></span><br />Here is the meminfo off of the development board.<br /><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"># cat /proc/meminfo<br />MemTotal: 442740 kB<br />MemFree: 265888 kB<br />Buffers: 2000 kB<br />Cached: 79248 kB<br />SwapCached: 0 kB<br />Active: 95892 kB<br />Inactive: 46456 kB<br />Active(anon): 61140 kB<br />Inactive(anon): 328 kB<br />Active(file): 34752 kB<br />Inactive(file): 46128 kB<br />Unevictable: 0 kB<br />Mlocked: 0 kB<br />HighTotal: 0 kB<br />HighFree: 0 kB<br />LowTotal: 442740 kB<br />LowFree: 265888 kB<br />SwapTotal: 0 kB<br />SwapFree: 0 kB<br />Dirty: 0 kB<br />Writeback: 0 kB<br />AnonPages: 61108 kB<br />Mapped: 32100 kB<br />Shmem: 372 kB<br />Slab: 7888 kB<br />SReclaimable: 4164 kB<br />SUnreclaim: 3724 kB<br />KernelStack: 2056 kB<br />PageTables: 6276 kB<br />NFS_Unstable: 0 kB<br />Bounce: 0 kB<br />WritebackTmp: 0 kB<br />CommitLimit: 221368 kB<br />Committed_AS: 929976 kB<br />VmallocTotal: 1433600 kB<br />VmallocUsed: 85784 kB<br />VmallocChunk: 1320964 kB</span><br /><br /><br />With the following process list.<br /><br /><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;"># ps</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">USER PID PPID VSIZE RSS WCHAN PC NAME</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1 0 324 188 800e9ea4 0000875c S /init</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2 0 0 0 80080268 00000000 S kthreadd</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 3 2 0 0 8006f8b4 00000000 S ksoftirqd/0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 4 2 0 0 8007cacc 00000000 S events/0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 5 2 0 0 8007cacc 00000000 S khelper</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 8 2 0 0 80086f80 00000000 S async/mgr</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 9 2 0 0 8007cacc 00000000 S pm</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 12 2 0 0 8007cacc 00000000 S suspend</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 81 2 0 0 800558a0 00000000 S usb_wakeup thre</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 82 2 0 0 800558a0 00000000 S usb_wakeup thre</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 240 2 0 0 800b925c 00000000 S sync_supers</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 242 2 0 0 800b9d3c 00000000 S bdi-default</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 244 2 0 0 8007cacc 00000000 S kblockd/0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 258 2 0 0 8007cacc 00000000 S mxc_spi.0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 266 2 0 0 8007cacc 00000000 S otg_switch/0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 272 2 0 0 80294ca8 00000000 S khubd</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 295 2 0 0 8007cacc 00000000 S kmmcd</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 309 2 0 0 80315228 00000000 S pmic-event-thre</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 373 2 0 0 8007cacc 00000000 S rpciod/0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 393 2 0 0 800b3904 00000000 S kswapd0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 441 2 0 0 8007cacc 00000000 S aio/0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 451 2 0 0 8007cacc 00000000 S nfsiod</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 455 2 0 0 8007cacc 00000000 S crypto/0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1073 2 0 0 8022bd8c 00000000 S kapmd</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1148 2 0 0 802bb8d4 00000000 S file-storage</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1199 2 0 0 8007cacc 00000000 S kstriped</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1204 2 0 0 8007cacc 00000000 S kconservative/0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1209 2 0 0 8007cacc 00000000 S vpu_wq/0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1216 2 0 0 8007cacc 00000000 S esdhc_wq/0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1219 2 0 0 8007cacc 00000000 S esdhc_wq/0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1228 2 0 0 8007cacc 00000000 S usbhid_resumer</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1231 2 0 0 8007cacc 00000000 S binder</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1250 2 0 0 8032eefc 00000000 S mmcqd</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1289 2 0 0 8007cacc 00000000 S l2cap</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1290 2 0 0 804517f4 00000000 S krfcommd</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1302 2 0 0 80315c1c 00000000 S mxc_ts</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1303 1 300 156 800e9ea4 0000875c S /sbin/ueventd</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1485 2 0 0 80247e28 00000000 S scsi_eh_0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 1487 2 0 0 802aef98 00000000 S usb-storage</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2147 2 0 0 8015a0e4 00000000 S jbd2/mmcblk0p2-</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2148 2 0 0 8007cacc 00000000 S ext4-dio-unwrit</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2149 2 0 0 800f9d94 00000000 S flush-179:0</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2150 2 0 0 8015a0e4 00000000 S jbd2/mmcblk0p5-</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2151 2 0 0 8007cacc 00000000 S ext4-dio-unwrit</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2152 2 0 0 8015a0e4 00000000 S jbd2/mmcblk0p6-</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2153 2 0 0 8007cacc 00000000 S ext4-dio-unwrit</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2155 1 744 328 8006d5a0 6fd0c3ac S /system/bin/sh</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">system 2156 1 816 272 80343750 6fd0b6fc S /system/bin/servicemanager</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2157 1 3872 588 ffffffff 6fd0bdac S /system/bin/vold</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2158 1 3872 576 ffffffff 6fd0bdac S /system/bin/netd</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2159 1 820 320 800e9ea4 6fd0b844 S /system/bin/dispd</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2160 1 676 256 8037b6ac 6fd0c0cc S /system/bin/debuggerd</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2161 1 83416 27160 800e9ea4 6fd0b844 S zygote</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">media 2162 1 27572 5492 ffffffff 6fd0b6fc S /system/bin/mediaserver</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">bluetooth 2163 1 1264 696 800e9ea4 6fd0c59c S /system/bin/dbus-daemon</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2164 1 824 332 803fd98c 6fd0b45c S /system/bin/installd</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">keystore 2165 1 1752 424 8037b6ac 6fd0c0cc S /system/bin/keystore</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">radio 2166 1 5460 700 ffffffff 6fd0bdac S /system/bin/rild</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2230 2 0 0 80247e28 00000000 S scsi_eh_1</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2231 2 0 0 802aef98 00000000 S usb-storage</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">system 2256 2161 192540 38596 ffffffff 6fd0b6fc S system_server</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2266 2 0 0 8007cacc 00000000 S z1xx_workq</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_17 2410 2161 99260 19152 ffffffff 6fd0c51c S com.android.inputmethod.latin</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">radio 2417 2161 109916 20816 ffffffff 6fd0c51c S com.android.phone</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">system 2419 2161 140892 20728 ffffffff 6fd0c51c S com.android.systemui</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_16 2485 2161 98312 22172 ffffffff 6fd0c51c S com.android.launcher</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_1 2498 2161 104776 22132 ffffffff 6fd0c51c S android.process.acore</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_11 2529 2161 105400 17672 ffffffff 6fd0c51c S com.android.mms</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_12 2534 2161 94620 17996 ffffffff 6fd0c51c S android.process.media</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_20 2558 2161 94648 17988 ffffffff 6fd0c51c S com.android.email</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_21 2568 2161 93140 16192 ffffffff 6fd0c51c S com.android.deskclock</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_26 2583 2161 92336 16520 ffffffff 6fd0c51c S com.android.providers.calendar</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_30 2593 2161 92368 16312 ffffffff 6fd0c51c S com.android.bluetooth</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_5 2600 2161 92172 15680 ffffffff 6fd0c51c S com.android.quicksearchbox</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_7 2611 2161 91804 14856 ffffffff 6fd0c51c S com.android.protips</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_10 2623 2161 92340 15004 ffffffff 6fd0c51c S com.android.music</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">app_19 2630 2161 93468 16588 ffffffff 6fd0c51c S com.cooliris.media</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">root 2766 2155 904 312 00000000 6fd0b45c R ps</span><br style="font-family: "Courier New",Courier,monospace;" /></span><b>Using the Headless Android image on my development board.</b><br /><br />Free shows:<br /><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"># busybox free<br /> total used free shared buffers<br /> Mem: 442740 105240 337500 0 1464<br /> Swap: 0 0 0<br />Total: 442740 105240 337500</span><br />Meminfo after five minutes shows:<br /><br /><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;"># cat /proc/meminfo</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">MemTotal: 442740 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">MemFree: 337320 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Buffers: 1464 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Cached: 57140 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">SwapCached: 0 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Active: 44632 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Inactive: 35124 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Active(anon): 21168 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Inactive(anon): 200 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Active(file): 23464 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Inactive(file): 34924 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Unevictable: 0 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Mlocked: 0 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">HighTotal: 0 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">HighFree: 0 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">LowTotal: 442740 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">LowFree: 337320 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">SwapTotal: 0 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">SwapFree: 0 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Dirty: 0 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Writeback: 0 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">AnonPages: 21160 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Mapped: 21564 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Shmem: 220 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Slab: 6108 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">SReclaimable: 3268 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">SUnreclaim: 2840 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">KernelStack: 832 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">PageTables: 1384 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">NFS_Unstable: 0 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Bounce: 0 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">WritebackTmp: 0 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">CommitLimit: 221368 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">Committed_AS: 173048 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">VmallocTotal: 1433600 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">VmallocUsed: 69096 kB</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">VmallocChunk: 1343484 kB</span></span><br /><br />With the following ps list:<br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"><br /># ps<br />USER PID PPID VSIZE RSS WCHAN PC NAME<br />root 1 0 324 188 800e9ea4 0000875c S /init<br />root 2 0 0 0 80080268 00000000 S kthreadd<br />root 3 2 0 0 8006f8b4 00000000 S ksoftirqd/0<br />root 4 2 0 0 8007cacc 00000000 S events/0<br />root 5 2 0 0 8007cacc 00000000 S khelper<br />root 8 2 0 0 80086f80 00000000 S async/mgr<br />root 9 2 0 0 8007cacc 00000000 S pm<br />root 12 2 0 0 8007cacc 00000000 S suspend<br />root 81 2 0 0 800558a0 00000000 S usb_wakeup thre<br />root 82 2 0 0 800558a0 00000000 S usb_wakeup thre<br />root 240 2 0 0 800b925c 00000000 S sync_supers<br />root 242 2 0 0 800b9d3c 00000000 S bdi-default<br />root 244 2 0 0 8007cacc 00000000 S kblockd/0<br />root 258 2 0 0 8007cacc 00000000 S mxc_spi.0<br />root 266 2 0 0 8007cacc 00000000 S otg_switch/0<br />root 272 2 0 0 80294ca8 00000000 S khubd<br />root 295 2 0 0 8007cacc 00000000 S kmmcd<br />root 309 2 0 0 80315228 00000000 S pmic-event-thre<br />root 373 2 0 0 8007cacc 00000000 S rpciod/0<br />root 393 2 0 0 800b3904 00000000 S kswapd0<br />root 441 2 0 0 8007cacc 00000000 S aio/0<br />root 451 2 0 0 8007cacc 00000000 S nfsiod<br />root 455 2 0 0 8007cacc 00000000 S crypto/0<br />root 1073 2 0 0 8022bd8c 00000000 S kapmd<br />root 1148 2 0 0 802bb8d4 00000000 S file-storage<br />root 1199 2 0 0 8007cacc 00000000 S kstriped<br />root 1204 2 0 0 8007cacc 00000000 S kconservative/0<br />root 1209 2 0 0 8007cacc 00000000 S vpu_wq/0<br />root 1216 2 0 0 8007cacc 00000000 S esdhc_wq/0<br />root 1219 2 0 0 8007cacc 00000000 S esdhc_wq/0<br />root 1228 2 0 0 8007cacc 00000000 S usbhid_resumer<br />root 1231 2 0 0 8007cacc 00000000 S binder<br />root 1250 2 0 0 8032eefc 00000000 S mmcqd<br />root 1289 2 0 0 8007cacc 00000000 S l2cap<br />root 1290 2 0 0 804517f4 00000000 S krfcommd<br />root 1302 2 0 0 80315c1c 00000000 S mxc_ts<br />root 1303 1 300 156 800e9ea4 0000875c S /sbin/ueventd<br />root 1489 2 0 0 80247e28 00000000 S scsi_eh_0<br />root 1491 2 0 0 802aef98 00000000 S usb-storage<br />root 2147 2 0 0 8015a0e4 00000000 S jbd2/mmcblk0p2-<br />root 2148 2 0 0 8007cacc 00000000 S ext4-dio-unwrit<br />root 2149 2 0 0 800f9d94 00000000 S flush-179:0<br />root 2150 2 0 0 8015a0e4 00000000 S jbd2/mmcblk0p5-<br />root 2151 2 0 0 8007cacc 00000000 S ext4-dio-unwrit<br />root 2152 2 0 0 8015a0e4 00000000 S jbd2/mmcblk0p6-<br />root 2153 2 0 0 8007cacc 00000000 S ext4-dio-unwrit<br />root 2155 1 744 340 8006d5a0 6fd0c3ac S /system/bin/sh<br />system 2156 1 816 252 80343750 6fd0b6fc S /system/bin/servicemanager<br />root 2157 1 3872 564 ffffffff 6fd0bdac S /system/bin/vold<br />root 2158 1 3868 572 ffffffff 6fd0bdac S /system/bin/netd<br />root 2159 1 820 320 800e9ea4 6fd0b844 S /system/bin/dispd<br />root 2160 1 676 256 8037b6ac 6fd0c0cc S /system/bin/debuggerd<br />root 2161 1 83412 27140 800e9ea4 6fd0b844 S zygote<br />media 2162 1 24300 5232 ffffffff 6fd0b6fc S /system/bin/mediaserver<br />bluetooth 2163 1 1264 564 800e9ea4 6fd0c59c S /system/bin/dbus-daemon<br />root 2164 1 824 336 803fd98c 6fd0b45c S /system/bin/installd<br />keystore 2165 1 1752 424 8037b6ac 6fd0c0cc S /system/bin/keystore<br />radio 2166 1 4444 672 ffffffff 6fd0bdac S /system/bin/rild<br />root 2230 2 0 0 80247e28 00000000 S scsi_eh_1<br />root 2231 2 0 0 802aef98 00000000 S usb-storage<br />system 2255 2161 130548 30352 ffffffff 6fd0b6fc S system_server<br />root 2381 2155 904 308 00000000 6fd0b45c R ps</span><br />
<br />
<br />
<br />
<br />
<br /><br /><br />Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com5tag:blogger.com,1999:blog-4885977881400457129.post-4617796692962265082012-04-16T10:56:00.002-07:002012-04-24T15:52:02.106-07:00Mmmmm... Pie..... Raspberry Pi to be exactBack in January and early February there was a lot of interesting news on Raspberry Pi. Like every other technology enthusiast (read "geek") I have been watching the stories and been interested in that little piece of hardware.<br />
<br />
"Why" you may ask? Considering that it has video output but no touch screen has lead most of the developer community to focus on why it can't (or shouldn't) support Android. However, it's perfect for creating a droid army to rival that of the Trade Federation <insert evil laugh here>.<br />
<br />
Seriously though, I can't think of anything better than a low cost, easily accessible hardware platform to put a Headless Android on.<br />
<br />
One problem... it's all sold out. Bother.<br />
<br />
Stay tuned for some activity in the near future on porting the Android patches to the Raspberry Pi kernel, minus of course the video subsystem. Let's see what we get, shall we? Headless Raspberry Pi anyone, with Gingerbread crust? Mmmmmm, sounds good to me!Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com1tag:blogger.com,1999:blog-4885977881400457129.post-7068217505216847172012-04-04T15:26:00.000-07:002012-04-04T15:26:00.314-07:00From the Archives - 2008 Article on non-phone AndroidI'm sure most of you have seen this article from Stephen Shankland of CENT in 2008 on using Android on non-phone devices. He was spot on about Android showing up in a lot more things than phones.<br />
<br />
<a href="http://news.cnet.com/8301-17938_105-10047551-1.html" target="_blank">http://news.cnet.com/8301-17938_105-10047551-1.html</a><br />
<br />
Now, four years later (ish) I find it interesting that many of the concerns that Stephen had about Android have come to the forefront. Issues around fragmentation and compatibility that he calls out in his article are a big deal for Android developers.<br />
<br />
While some may think these issues are mostly UI related, even in non-UI based Android systems there will be some compatibility issues from version to version. It was true in 2008 and it's still true today.Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-26438641318982323612012-04-02T11:12:00.000-07:002012-04-02T11:16:38.689-07:00As Headless as an Android getsMinor changes and now it's Headless. See the updated patch page.<br />
<br />
Here is my ps of my currently running system:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"><span style="font-size: x-small;"># ps<br />USER PID PPID VSIZE RSS WCHAN PC NAME<br />root 1 0 324 188 800d4fa4 0000875c S /init<br />root 2 0 0 0 8006d344 00000000 S kthreadd<br />root 3 2 0 0 8005cf24 00000000 S ksoftirqd/0<br />root 4 2 0 0 8008d2cc 00000000 S watchdog/0<br />root 5 2 0 0 80069bdc 00000000 S events/0<br />root 6 2 0 0 80069bdc 00000000 S khelper<br />root 9 2 0 0 80073e50 00000000 S async/mgr<br />root 10 2 0 0 80069bdc 00000000 S pm<br />root 13 2 0 0 80069bdc 00000000 S suspend<br />root 87 2 0 0 80041cf4 00000000 S usb_wakeup thre<br />root 227 2 0 0 800a5588 00000000 S sync_supers<br />root 229 2 0 0 800a5ff0 00000000 S bdi-default<br />root 231 2 0 0 80069bdc 00000000 S kblockd/0<br />root 241 2 0 0 80069bdc 00000000 S mxc_spi.0<br />root 249 2 0 0 80069bdc 00000000 S otg_switch/0<br />root 255 2 0 0 80268948 00000000 S khubd<br />root 277 2 0 0 80069bdc 00000000 S kmmcd<br />root 299 2 0 0 80069bdc 00000000 S rpciod/0<br />root 317 2 0 0 8008d514 00000000 S khungtaskd<br />root 318 2 0 0 8009fe28 00000000 S kswapd0<br />root 366 2 0 0 80069bdc 00000000 S aio/0<br />root 376 2 0 0 80069bdc 00000000 S nfsiod<br />root 380 2 0 0 80069bdc 00000000 S crypto/0<br />root 997 2 0 0 80210978 00000000 S kapmd<br />root 1068 2 0 0 802913c4 00000000 S file-storage<br />root 1116 2 0 0 80069bdc 00000000 S kstriped<br />root 1119 2 0 0 80069bdc 00000000 S kconservative/0<br />root 1126 2 0 0 80069bdc 00000000 S vpu_wq/0<br />root 1128 2 0 0 802e9fec 00000000 S hwevent<br />root 1133 2 0 0 80069bdc 00000000 S esdhc_wq/0<br />root 1136 2 0 0 80069bdc 00000000 S esdhc_wq/0<br />root 1143 2 0 0 80069bdc 00000000 S usbhid_resumer<br />root 1146 2 0 0 80069bdc 00000000 S binder<br />root 1156 2 0 0 802fe5c4 00000000 S mmcqd<br />root 1197 1 300 156 800d4fa4 0000875c S /sbin/ueventd<br />root 1958 2 0 0 80143604 00000000 S jbd2/mmcblk0p2-<br />root 1959 2 0 0 80069bdc 00000000 S ext4-dio-unwrit<br />root 1961 2 0 0 80143604 00000000 S jbd2/mmcblk0p5-<br />root 1962 2 0 0 80069bdc 00000000 S ext4-dio-unwrit<br />root 1963 2 0 0 80143604 00000000 S jbd2/mmcblk0p6-<br />root 1964 2 0 0 80069bdc 00000000 S ext4-dio-unwrit<br />root 1966 1 744 268 8005ac1c 6fd0c3ac S /system/bin/sh<br />system 1967 1 816 176 80313b44 6fd0b6fc S /system/bin/servicemanager<br />root 1968 1 3872 380 ffffffff 6fd0bdac S /system/bin/vold<br />root 1969 1 3868 452 ffffffff 6fd0bdac S /system/bin/netd<br />root 1970 1 820 204 800d4fa4 6fd0b844 S /system/bin/dispd<br />root 1971 1 676 148 8034ab44 6fd0c0cc S /system/bin/debuggerd<br />root 1972 1 83412 26312 800d4fa4 6fd0b844 S zygote<br />media 1973 1 24288 4492 ffffffff 6fd0b6fc S /system/bin/mediaserver<br />bluetooth 1974 1 1264 184 800d4fa4 6fd0c59c S /system/bin/dbus-daemon<br />root 1975 1 824 208 803c9edc 6fd0b45c S /system/bin/installd<br />keystore 1976 1 1752 284 8034ab44 6fd0c0cc S /system/bin/keystore<br />radio 1977 1 4444 396 ffffffff 6fd0bdac S /system/bin/rild<br />system 2032 1972 127452 29024 ffffffff 6fd0b6fc S system_server<br />root 2170 1966 904 308 00000000 6fd0b45c R ps</span></span>Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com7tag:blogger.com,1999:blog-4885977881400457129.post-65024196260581526212012-03-28T17:40:00.003-07:002012-03-28T17:40:35.017-07:00Almost There -- Sorta Like "Nearly Headless Nick"I was able to get a headless Android patch that <i>almost </i>removes all the UI elements from running. The com.android.systemui is still hanging around (and taking up 14MB of memory). It reminds me of the ghost in the Harry Potter books by J.K. Rowling - Nearly Headless Nick whose head is <i>almost</i> chopped off, but not quite.<br />
<br />
My next effort will be to see if I can completely remove the com.android.systemui from running.<br />
<br />
For those interested, I posted my patch to the patches page.Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-68778949840287788102012-02-23T08:07:00.001-08:002012-02-23T08:07:35.556-08:00Android Builders Summit VideosThe Linux Foundation has posted the videos for the Android Builders Summit. You can find them all here:<br />
<br />
<a href="http://video.linux.com/categories/2012-android-builders-summit" target="_blank">http://video.linux.com/categories/2012-android-builders-summit</a><br />
<br />Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-67455186081399901072012-02-23T08:05:00.000-08:002012-02-23T08:05:22.020-08:00OTA Updateing via AndroidOne of the hardest problems that embedded Linux companies have to solve is updating devices. Given the changing nature of software, and the desire to include new features on existing products, being able to update devices in the field can be a critical feature. While Linux has some great tools (dpkg with apt, rpms, etc) for updating systems, the standard desktop features do not apply very well to embedded systems.<br />
<br />
The Android platform is distributed with some great tools to update devices in the field. These tools range from package updates to full system updates. Generally this is called Over The Air (OTA) updates. There isn't a lot of information available on this topic. One of the clearest presentations I have seen on this topic was at the Android Builders Summit. Andrew Boie from Intel gave the presentation and the video and slides are now available. I highly recommend them.<br />
<br />
<a href="http://video.linux.com/videos/android-ota-software-updates" target="_blank">http://video.linux.com/videos/android-ota-software-updates</a><br />
<br />
One of the problems I noticed as I attended this session though was that it appears the update process has at least some dependency on a user interface. Obviously, with headless Android systems that poses a problem. One of the things that needs to be answered from an OTA perspective is what would need to be modified for an OTA process to complete without a user interface.Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-10648064447953217202012-02-23T07:00:00.000-08:002012-02-23T07:00:08.389-08:00Building Your Favorite Glibc App for AndroidThere are a lot of great applications built on glibc that embedded Linux developers have made the mainstay of building embedded Linux systems. Among these are busybox, wget, cron, thttpd, and many others. The question is, can you get these to run under Android?<br />
<br />
The answer is yes! (and no). Technically it would be a LOT of work to port these to use bionic, the c library that Android uses. However, nothing in Android restricts you from adding a standard glibc to your distribution and then using it with the standard programs.<br />
<br />
Karihm did a great presentation on this at the Android Builders Summit. He showed an example of building busybox and adding glibc to the system. You can download his slides here: (a video of the presentation will be coming soon.)<br />
<br />
<a href="https://events.linuxfoundation.org/images/stories/pdf/lf_abs12_yaghmour_heritage.pdf" target="_blank">https://events.linuxfoundation.org/images/stories/pdf/lf_abs12_yaghmour_heritage.pdf</a><br />
<br />
Another option is to statically compile your binaries with the libraries that they would normally find on a glibc based system. The problem with statically compiling is that it pulls in all the code from the libraries that the code needs directly into the binary. If you have more than one program you are going to do this to, however, you would be better off building against the library. Busybox, which is usually just a few hundred K ends up being 2 MB if it's statically linked.<br />
<br />
As the post about Ubuntu on Android shows, this is a great way to have your cake and eat it too.Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-87585697227520601702012-02-22T09:36:00.003-08:002012-02-22T09:36:46.800-08:00Ubuntu for AndroidAn interesting new development effort by Canonical has Ubuntu running in parallel with Android on a multi-core phone. When you dock, you get Ubuntu's desktop on a monitor, while the phone still looks and acts like Android.<br />
<a href="http://www.blogger.com/goog_1277807329"><br /></a><br />
<a href="http://www.ubuntu.com/devices/android" target="_blank">http://www.ubuntu.com/devices/android</a><br />
<br />
Very cool stuff! Not really headless related, per se, but having Ubuntu fully run on the Android kernel and have glibc and the Ubuntu UI in all it's glory sitting on a phone definitely proves a point that this convergence of technology is where the future is headed.Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-75122197303459197242012-02-21T14:20:00.001-08:002012-02-21T14:25:53.632-08:00Slides from Android Builders SummitThe slides from the Android Builders Summit are now available from the Linux Foundation site. You can find them all here:<br />
<br />
<a href="https://events.linuxfoundation.org/events/android-builders-summit/slides" target="_blank">https://events.linuxfoundation.org/events/android-builders-summit/slides</a><br />
<br />
I recommend the following for anyone interested in Headless Android type applications.<br />
<br />
- Leveraging Linux's History With Android by Karim Yaghmour, Opersys<br />
- Customizing Android by Marko Gargenta, Marakana<br />
- Using Android outside the Mobile Phone Space by Jason Krinder & Khasim Syed Mohammed, TI<br />
- Android Device Porting Walkthrough by Benjamin Zores, Alcatel-Lucent<br />
- Android OTA SW Updates by Andrew Boie, Intel<br />
<br />
The folks at the Linux Foundation will be posting the videos from those events soon, so stay tuned for more information.Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-7220267190699701592012-02-18T15:20:00.000-08:002012-02-18T15:20:00.131-08:00Androgenizer - A tool for converting autotools makefilesOne of the things that Android developers have wanted to do for a while was to take standard C/C++ applications that are generally used in standard embedded Linux systems and use them in Android. There are a couple of ways this can be accomplished, but for those larger systems converting the Makefiles into something that Android can use natively in a build has been a problem.<br />
<br />
Some creative folks came up with a solution. Androigenizer. It takes autotools generated infrastructure and creates Android.mk files.<br />
<br />
Here is a good write up on it from Igalia's blog.<br />
<br />
http://blogs.igalia.com/eocanha/?p=242<br />
<br />
It's a good resource for headless Android systems.Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-27666576982793063902012-02-17T11:41:00.001-08:002012-02-17T11:41:50.081-08:00Headless Android WebsiteI just got the Headless Android website up. Check it out. It's mostly a landing page to get back to this blog, but it will be a nice place to post more static data over time.<br />
<a href="http://www.blogger.com/goog_1367967734"><br /></a><br />
<a href="http://headlessandroid.com/" target="_blank">http://headlessandroid.com</a><br />
<br />Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-64283290765840775952012-02-16T16:41:00.000-08:002012-02-16T16:41:52.256-08:00Why Headless Android?I have been asked several times, “What is the point of headless Android?” It’s not hard to see why the question is asked. Android, in essence, is a specialized user interface for a phone or tablet platform that runs on the Linux kernel. The Android development team has done a fantastic job to create a platform that application developers can build great apps for phones and tablets. Because they focused on the platform under the applications, just as much as they focused on the applications themselves, the Android team also developed a world class platform framework.<br /><br />For some, using headless Android comes down to commonality. If you have development efforts where you have two products (for example), one with a UI and one without, then keeping those platforms consistent from a development stand point just makes sense. Being able to write code that you can share between the two platforms is essential for maintenance. <br /><br />While that use case is an interesting one, it is by no means (in my opinion) the biggest reason developers should care about headless Android. I’ll tell you why.<br /><br />Five years ago, if you asked just about any embedded developer what they were going to use as the operating system for their embedded hardware (with or without a UI), most of them would say Linux. It was a smart choice. Having control of your destiny (so to speak) can be absolutely critical to the success of a project, especially if you aren’t one of the 800 pound gorillas. For smaller companies building embedded devices, Linux offered the freedom to succeed despite the common road blocks that often beset embedded projects. For example, if I have access to the kernel source, I can debug that lousy DMA controller bug that is preventing my audio from working. It was a wonderful world, if you liked that sort of thing.<br /><br />Fast forward to today. While embedded Linux is still a fantastic choice for embedded devices, more and more companies are looking for ways to improve over the roll-your-own custom Linux environment that most embedded Linux developers work in. Sure, there are companies that build BSPs that have common utilities and libraries, but that can only get you so far. <br /><br />Enter Android. For phone developers it is like what embedded Linux was to embedded developers ten years ago. A boon! Finally a widely popular development environment that included an Integrated Development Environment (IDE), a great set of debugging tools, a rich set of off-the-shelf libraries, and a killer user interface. PLUS, you can modify it to your hearts content. Power to the programmers!<br /><br />As a non-phone developer and embedded Linux fanatic, I have to admit that for phones Android is great, but what about all the millions of devices that aren’t phones, and for that matter aren’t tablets, and may not even have a user interface? With a bit of work, those of us not doing phones can have our cake and eat it too...<br /><br />There are three reasons I believe headless Android will catch on in popularity as more developers begin to use it.<br /><br />1. Development Tools - Having an IDE and graphical debugger that “just work” with an easy way to deploy, test, debug, and package your software is a huge time saver.<br /><br />
2. The Platform - Leveraging the built in Android system services architecture can save a huge amount of time and effort. Built in IPC, memory management, service “keep-alive” code, and package management also saves a lot of time and effort. Every embedded devices needs most, if not all of these things, so leveraging a system that is already proven has huge advantages.<br /><br />
3. Knowledge - Since Android is a popular platform, there is a growing community of knowledgeable software engineers that understand the in’s and out’s of the system. Training someone on a roll-your-own solution can take months. Leveraging a known platform can dramatically increase productivity. Along with this the number of books and websites devoted to Android is growing all the time.<br /><br />There are many other reasons for utilizing the platform offered by the Android system. Why reinvent the wheel? Especially when the wheels work so great and come with tires, axles, and a power train?Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-9464388403923973362012-02-16T12:00:00.000-08:002012-02-16T12:00:06.672-08:00CyborgstackOne of the interesting things I picked up from the Android Builders Summit was a project that Karim Yaghmour of Opersys started to make a completely open Android distribution. The point of the project is to open Android up to the many other markets that may want to use it.<br />
<br />
I will be sharing the patches for the headless Android work that I've been doing with the Cyborstack project, so there will be a good repository that everyone can get to. Given that I work in an industry that isn't related to phones or tablets in any way, I'm excited to have a group of people looking at what I'm looking at. <br />
<br />
Take a look at it and see what you think.<br />
<br />
<a href="http://www.cyborgstack.org/" target="_blank">Cyborgstack</a><br />
<br />Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com1tag:blogger.com,1999:blog-4885977881400457129.post-17603253414212132582012-02-15T15:04:00.000-08:002012-02-15T15:07:49.904-08:00Karim's Post on Headless AndroidKarim posted on Headless Android. You can see his post here:<br />
<br />
<a href="http://www.opersys.com/blog/headless-android-1" target="_blank">http://www.opersys.com/blog/headless-android-1</a>Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com0tag:blogger.com,1999:blog-4885977881400457129.post-55278697369073554442012-02-15T14:43:00.000-08:002012-02-15T14:50:41.977-08:00Karim Yaghmour's Headless Android PresentationThe highlight of the Android Builders Summit (ABS) for me was Karim's session on Headless Android (that was probably pretty obvious.) He gave a great presentation on actually stripping out all the stuff that depends on the UI, like the WindowManager and SurfaceFlinger.<br />
<br />
He showed a running system with his modifications with no UI and it was a beautiful thing. When I saw the code running, I got a tear in my eye and started asking if anyone had a tissue!<br />
<br />
With Karim's permission, I'm posting a link to his presentation.<br />
<br />
<a href="http://www.cyborgstack.org/sites/default/files/headless-android-120214.pdf" target="_blank">Headless Android Slides from ABS</a><br />
<br />
The folks at the Linux Foundation that hosted ABS will have the presentations and videos up by Monday on their site. I'll post links when they show up.<br />
<br />
If you want to download the git repository with the headless android changes that Karim did, then here are the commands:<br />
<blockquote class="tr_bq">
$ repo init -u git://github.com/cyborgstack/android.git -b headless<br />$ repo sync<br /> </blockquote>
I wanted to thank Karim for his work on this front! Anonymoushttp://www.blogger.com/profile/10124035276708535208noreply@blogger.com1