This post is synchronized from (click here for best display effect): https://zohead.com/archives/ubuntu-for-xolo-x900/
Lava XOLO X900 smartphone use Intel Atom Z2460 x86 CPU, so we can try to make some modifications to default Android system, then we can get a tentative Ubuntu for Android system. The important part of this is we can run x86 version Ubuntu, which is much more useful than ARM version Ubuntu (you can do nothing without source code, no proprietary software at all).
Let's see the final Ubuntu for Android effect (on Motorola LapDock 100):
For now, I can run some quite useful program like: Skype, Ubuntu One, sopcast in this Ubuntu system on Android. And the most brilliant thing is we can run Ubuntu and Android system simultaneously, Ubuntu is running on another display screen, doesn't affect Android system at all, we don't need VNC to remote login to Ubuntu.
Click here for introduction about Canonical's Ubuntu for Android:
http://www.ubuntu.com/devices/android
Requirements of Canonical's Ubuntu for Android:
- Dual-core Android smartphone, at least 512MB RAM;
- support secondary frame buffer;
- support USB OTG
While sad point is secondary frame buffer is not enabled on XOLO X900, cause stock kernel only register a /dev/graphics/fb0 frame buffer device. But we the powerful USB OTG, so we can use USB external display adapter to provide secondary frame buffer.
Devices & accessories we need:
- Motorola LapDock 100 (for display screen, keyboard and mouse input, quite convenient, of course you can use your own display device)
- DisplayLink USB display adapter
- USB OTG cable
- HDMI cable
1. Prepare x86 Ubuntu system:
Cause XOLO X900 only has 16GB ROM space, and consider about speed and expansibility, you'd better use Class 10 microSD card (otherwise your Ubuntu system's performance may not be good), and install Ubuntu in hidden microSD slot of XOLO X900.
You can check this Youtube link to install external microSD card in XOLO X900:
http://www.youtube.com/watch?v=6-FkK7Htohs
Now we need a proper Ubuntu system, if you have enough time, you can use VMware to install a full Ubuntu system to your SD card. While I'm lazy, I choose to download existing VMware vmdk image and copy contents to SD card.
I use this Lubuntu 12.04 system, cause it use LXDE desktop, which is quite lightweight and fast compared to default Unity desktop, and you can also download default Ubuntu 12.04 system with Unity desktop from this website:
http://www.trendsigma.net/vmware/lubuntu1204.html
You may need another Linux virutal machine to copy files from this Lubuntu image to your SD card (It's strongly recommended that you should partition your SD card, I create a ext4 partition for Ubuntu here).
2. Prepare driver for DisplayLink USB adapter:
XOLO X900 stock kernel doesn't provide full frame buffer support (lack of defio support and so on), we can't compile the udlfb driver of DisplayLink USB adapter in stock Linux 3.0.8 kernel source.
I've found this old udlfb 0.4 version driver that can be compiled under XOLO X900 stock kernel config, and I also made some modifications to make it actually work. (Default code can't display any thing on screen at all):
http://git.plugable.com/gitphp/index.php?p=udlfb
This is my modified udlfb 0.4 version driver source:
http://miseal.googlecode.com/files/udlfb-v0.4.tar.bz2
Changes from the default udlfb 0.4 code:
- Fix udlfb can't be compiled in Linux 3.0.8;
- Fix kzalloc memory allocation bug, use vmalloc instead;
- Release allocated memory when unload driver;
- Get display device's proper resolution from EDID, use these resolution by default;
- If EDID can't any valid resolution, use 1280x1024 by default;
- Add module parameter, you can specify display resolution when load module
Please check this post by me about how to compiled custom kernel:
https://zohead.com/archives/xolo-x900-kernel/
If you want to use already compiled modules, please download from this link:
http://miseal.googlecode.com/files/x900-kernel-config-modules.7z
The compiled udlfb.ko module is in modules directory, you can copy modules directory to /system/lib directory (root permission is needed).
3. Test udlfb driver module:
First connect your DisplayLink USB display adapter to self-powered external USB hub (Motorola Lapdock is just a self-powered USB HUB ^_^), then connect USB display adapter to your external display device, make sure your phone is rooted, run this command in shell after run su:
insmod /system/lib/modules/udlfb.ko
If everything is OK, udlfb driver will automatically detect your display device's resolution, and a green screen should be showed on your screen.
Then run this command to check whether frame buffer device is OK (you should get fb1 device node information output):
ls -l /dev/graphics/fb1
If your display device doesn't support EDID or default 1280x1024 resolution is not supported, you can specify initial resolution at loading module, like this:
insmod /system/lib/modules/udlfb.ko init_xres=1024 init_yres=768
Previous command specify initial resolution to 1024x768.
4. Disable Android support for USB input device:
As XOLO X900 default support USB OTG, when you connect USB keyboard or mouse through OTG to your phone, you can use them to operate on your Android system, and any input event (keyboard pressing or mouse movement) will make Android unlock from sleep, this is quite useless for our Ubuntu for Android, and also it will generate duplicate input event to Android sysem. So we need to disable Android support for USB input device.
First connect your USB keyboard and mouse to USB HUB, and you need to find which is your USB input device, run this command in shell after su:
ls /dev/input/event*
Your will see several input event device, use this command to check whether it's your USB keyboard or mouse device one by one (you need to replace X to number you see, and press key on your USB keyboard or move your USB mouse, if it's the right device, you will see some output):
cat /dev/input/eventX
Let's assume our USB keyboard and mouse device are: /dev/input/event10 and /dev/input/event11.
Then run dmesg command to get device name of your USB input device, you will get some output like this:
usb 1-1: new high speed USB device number 2 using penwell_otg hub 1-1:1.0: USB hub found hub 1-1:1.0: 7 ports detected usb 1-1.1: new full speed USB device number 3 using penwell_otg input: Motorola Mobility Motorola HD Dock as /devices/pci0000:00/0000:00:02.3/usb1/1-1/1-1.1/1-1.1:1.0/input/input11 generic-usb 0003:22B8:0938.0003: input,hidraw0: USB HID v1.01 Keyboard [Motorola Mobility Motorola HD Dock] on usb-0000:00:02.3-1.1/input0 usb 1-1.3: new low speed USB device number 4 using penwell_otg input: BTC USB Cordless Mouse as /devices/pci0000:00/0000:00:02.3/usb1/1-1/1-1.3/1-1.3:1.0/input/input12 generic-usb 0003:1241:0003.0004: input,hidraw1: USB HID v1.10 Keyboard [BTC USB Cordless Mouse] on usb-0000:00:02.3-1.3/input0 input: BTC USB Cordless Mouse as /devices/pci0000:00/0000:00:02.3/usb1/1-1/1-1.3/1-1.3:1.1/input/input13 generic-usb 0003:1241:0003.0005: input,hidraw2: USB HID v1.10 Mouse [BTC USB Cordless Mouse] on usb-0000:00:02.3-1.3/input1 usb 1-1.6: new high speed USB device number 5 using penwell_otg
Previous Motorola Mobility Motorola HD Dock and BTC USB Cordless Mouse is your USB keyboard and mouse device name, please note these names.
Edit /system/etc/excluded-input-devices.xml configuration file, add previous found USB input device name to this file, and reboot phone, then USB input event will not affect your Android system or unlock Android from sleep.
For example, this is my config content:
<?xml version="1.0" encoding="utf-8"?> <devices> <device name="Unipoint HID"/> <device name="RMI4 Unipoint"/> <device name="Motorola Mobility Motorola HD Dock"/> <device name="BTC USB Cordless Mouse"/> </devices>
5. Switch from Android to Ubuntu system:
Run su rooted shell, and create a directory as mount point (here is /system/sd) for Ubuntu partition:
mount -o remount,rw /dev/block/mmcblk0p2 /system
busybox mkdir -m 777 /system/sd
mount -o remount,ro /dev/block/mmcblk0p2 /system
Then you can use my startubuntu script to switch from Android to Ubuntu (I mount the first ext4 partition on microSD card here, please modify this script as you like):
http://pastebin.com/raw.php?i=9r21dR7L
I mount /mnt/sdcard directory in Android to /sdcard directory in Ubuntu, and mount /system directory in Android to /android/system directory in Ubuntu, so we can easily access data in Android from Ubuntu system.
6. Prepare X environment in Ubuntu:
Assume you have already switched to Ubuntu, first you can install DisplayLink X display driver:
apt-get install xserver-xorg-video-displaylink
then install X input module:
apt-get install xserver-xorg-input-evdev
after install completes, you need to modify /etc/X11/xorg.conf X11 configuration file (Note: Ubuntu 12.04 doesn't contain this file, you need to create your own X11 configuration file in /usr/share/X11/xorg.conf.d directory, mine is: 52-displaylink.conf), config content is in this link:
http://pastebin.com/raw.php?i=WjcfFWc2
And don't forget to change the input devices and display resolution as your need.
7. Run X - Finally Ubuntu for Android:
Generate a init configuration file for X, vi /root/.xinitrc:
#!/bin/sh
xrandr -o 0
startlubuntu
xrandr command in the second line is a special fix for DisplayLink udlfb driver, without this, menu items will not be displayed correctly in X desktop environment. And you can replace startlubuntu command to any X init command as you like (like: xinit lxsession).
Then you can execute startx command to start X desktop.
If you encounter VT number error and fail to start X, you can add VT parameter to startx command:
startx -- :0 vt1
If this work, it means X use invalid VT number, and you may need to modify /etc/X11/xinit/xserverrc configuration file to force VT number for X:
#!/bin/sh
exec /usr/bin/X -nolisten tcp vt1 "$@"
8. Conclusion:
There are some shortcoming you should know about this Ubuntu for Android solution:
- We need to use external USB display adapter, this is quite inconvenient, and hotplug USB display adapter will crash X server, the best solution should be patching kernel to support HDMI frame buffer;
- Audio doesn't work yet, you can use USB sound card or send sound to phone directly (very ugly -_-#);
- Phone can't be charged when connected to external self-powered USB HUB, I think kernel patch is also needed.
This article is based on my experience in the use of Ubuntu for Android, it's not written for common use, please feel free to point out any errors in this ^_^
Could u upload a video for these instructions?
Thanks~~~
您好 想請問一下 哪裡可以下載到XOLO的kernel source code呢? 感謝您
XOLO并没有公布kernel source,我使用的是Moto Razr i的source,编译方法及改动你可以参考我的另一篇文章:构建联想K800非官方kernel支持OTG U盘 ~~~
Thanks, Zhiming Unzipped Lbuntu1204 contains: Lbuntu-s001.vmdk…to..Lbuntu-s021.vmdk (21 files), Lbuntu.vmdk, Lbuntu.vmsd, Lbuntu.vmx, nvram and readme.txt (one file each) Previously I confused that it was just required to put above 25 files on ubuntu partition.
You just need a VMWare software to copy all files in these vmdks (showed as a VMWare disk) to Ubuntu partition on your SD card
Hi Uranus_Zhou,
as an advanced owner of x900 have you tried to run there any pc applications (linux or windows)? Were there any compatibility issues with z2460?
More detailed: http://www.modaco.com/topic/364511-q-running-desktop-applications/
Thank you in advance.
Hi:
If you run a full desktop Linux system in XOLO X900 like android x86 device,
desktop Linux runs in chroot environment (in android x86 kernel), it’s able to run PC applications
Please refer to my post about running Ubuntu for Android on XOLO X900:
http://zohead.com/archives/ubuntu-for-xolo-x900/?lang=en
I’ve managed to run desktop programs like: Ubuntu One, Skype, Sopcat, LibreOffice …
And also it’s able to run some Windows program with Wine emulator in desktop Linux
Thank you very much for quick reply. I’ll post it on modaco tomorrow (with a link to these comments; please let me know if you have any objections).
And just out of curiosity possibly there were some programs which didn’t work? (I mean not games, but think games statistic will be interesting for others as well)
It’s OK you post these on MoDaCo, i’ve post a topic about running Ubuntu for Android on XOLO X900 in MoDaco before.
The problem is I’m using a DisplayLink USB display adapter (with powered USB hub, very ugly) for X11 desktop Linux display,
if you want to avoid use USB display adapter, you may need to use tightvncserver to run X11 server,
and run VNC viewer in Android to connect to desktop Linux (you can use HDMI output to larger screen for XOLO X900),
VNC performance is quite poor, you can’t do something like gaming, video playback may also quite slow
And if you are running chroot Ubuntu, Upstart may not work well, there is a solution in my blog
Also some hardware or driver related program can’t run in chroot Linux
Thank you very much for your time and support.
http://www.modaco.com/topic/364511-q-running-desktop-applications/#entry2152234
你好,我想在x86架构的手机Lenovo k900是实现Ubuntu12.04该怎么做?
跟这个文章的实现方法类似,不过如果没有外置显卡驱动支持的话,
需要通过VNC的方式来显示Ubuntu的X界面
视频是看了,讲的什么不清楚,插上tf卡不能识别到,是不是跟固件有关呢?
你用的x900?视频就是讲怎么把tf卡放到隐藏插槽里,默认系统不能直接用,需要root之后装软件(国外论坛里有)使用。
我这个ubuntu方法就是直接用tf卡设备,tf卡在安卓系统里默认未启用的
原来视频只是讲了一下插槽位置啊,汗!我去找找看需要安装什么。我现在已经用chroot的方法运行debian了,搞点开发真的很方便,X86就是好啊!另外,非常感谢你的回复!
不客气,只要不是系统相关的开发还是比较方便的
Nice post. I was checking constantly this blog and I am impressed!
Extremely helpful information specially the last part I care for such information much.
I was looking for this particular info for a long time. Thank you and best of luck.
I do not even know the way I finished up here, however
I believed this post was good. I don’t understand who you might be but definitely you’re going to a
famous blogger if you are not already. Cheers!
WOW just what I was searching for. Came here by searching for 12.04