打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
How to Use Libhybris and Android GPU Libraries with Mer (Linux) on the Cubieboard
You may have heard aboutlibhybris, a library that cleverly loads Android HW adaptations and convert calls from bionic to glibc. One of the greatest achievement of this library is to allow Android GPU drivers to be used with Linux, and is notably used by Canonical, although they did not write it, for Ubuntu 14.04 which will be compatible with any recent Android smartphones or tablets.
One way to get started with libhybris is toport a device to Ubuntu Touch, but this may take a while. However, I’ve found a faster and easier way to play with libhybris thanks to Martin Brook (vgrade) who wrote a tutorial on how touse libhybris with Mer on the Cubieboard.Mer is an open source mobile Linux distribution powered by Qt/QML and HTML5, that’s born from the ashes of Meego, and is now used in the upcomingSailfish OS.
Qt5 Cinematic Experienced Rendered at 25 fps in Cubieboard via Android GPU Drivers in Linux Thanks to libhybris
You’ll need to follow 4 main steps:
Build Android
Build a minimal Mer image
Install Libhybris
Run demos
I’ll skip the Mer image build since Martin has provided a binary image. I’ll use a build machine running Ubuntu 12.04.2 LTS. You should make sure thebuild environment is setup correctly, you’ve installedrepo, and that it’s in your path. I’ll use the Cubieboard (1GB RAM), but you may want to try other hardware platform, or Linux distribution as the instructions should be similar.
Build Android for the Cubieboard
This is basically following the instructions providedhere. First let’s code Android Jelly Bean (CyanogenMod) source code:
mkdir openbox && cd openboxrepo init --no-repo-verify -u git://github.com/cubieboard/manifests -b cb -m jb.xml repo sync
repo sync may take quite a while depending on your Internet connection. It took 10 hours, after several attempts over three days… Once this is done, we’ll need to configure the build for the Cubieboard:
source build/envsetup.shlunch
Select Cubieboard (#4), and start the build:
make -j10
The build initially failed with this error:
******************************You have tried to change the API from what has been previously approved.To make these errors go away, you have two choices:   1) You can add "@hide" javadoc comments to the methods, etc. listed in the      errors above.   2) You can update current.txt by executing the following command:         make update-api      ^^^^^^^^^^^^^^^^^^      NO. NO. STOP BEING LAZY. SERIOUSLY.      DO NOT DO THIS in CM. THIS IS A LIE. IF YOU DO THIS I WILL HATE YOU.      USE OPTION #1.                    -Koush      To submit the revised current.txt to the main Android repository,      you will need approval.******************************
So I shamelessly typed “make update-api” to automatically update current.txt, and continued the build with “make -j10″. The build may also take quite a while depending on your computer performance and available RAM. This step was much faster than repo sync in my case, as it just took about 45 minutes in total.
The Android build is now completed, but we need still to patch Bionic library, and rebuild:
cd bionic wget  http://pastie.org/pastes/7649385/download -O bionic_libhybris.patch patch -p1 < bionic_libhybris.patchcd ..make -j10
Now let’s tar Android’s system directory as we’ll need to copy the will have the patched bionic library plus all the android libs (EGL, GLESv2, RIL etc):
pushd out/target/product/cubieboard/system/tar cjvf ../../../../../cubie_android_system.tar.bz2 .popdInstalling and Running Mer
Since we don’t build the image ourself, this step is rather easy, as we just need to download the image, and dump it to a micro SD card.
wget ftp://5.9.162.110/nemo/cubieboard/tablet/cubieboard/mer/testing/armv7hl/weekly/nemo-cubieboard-tablet-cubieboard-mer-testing-armv7hl-weekly-20130511-1516-mmcblk0p.raw.bz2
bzip2 -d nemo-cubieboard-tablet-cubieboard-mer-testing-armv7hl-weekly-20130511-1516-mmcblk0p.raw.bz2
Burn the image to a microSD card (4GB or greater):
sudo dd.sh if=nemo-cubieboard-tablet-cubieboard-mer-testing-armv7hl-weekly-20130511-1516-mmcblk0p.raw of=/dev/<sd_device> bs=1Msync
Where you need to replace <sd_device> by your actual SD card device such as “sdc”.
My 4GB microSD is slightly smaller than the image provided, so dd failed at the very end. But you can usually run the following 2 commands on the last partition (in this case ext4) in order to resize the partition, and fix any potential boot problems:
e2fsck -y /dev/sdc2resize2fs  /dev/sdc2 +3300K
Interestingly, this time those commands failed, but I still inserted the microSD in my Cubieboard, and I was able to login successfully into Mer via the serial console as root (password: mer). You should also have access a terminal on the HDMI monitor.
We don’t want X to start anymore, so let’s disable it and restart the Cubieboard:
zypper rm uxlauncherreboot
If you’re using HDMI console, switch to VT2 (Ctrl+Alt+F2) before running the command.
Installing libhybris and Android system folder
Let’s log-in again via the serial console, or via VT2 on the HDMI monitor if this works for you, and install libhybris:
zypper ar http://repo.merproject.org/obs/home:/sage:/libhybris/latest_armv7hl/home:sage:libhybris.repo
zypper in libhybris
zypper in libhybris-tests
You may want to enlarge your terminal for the steps above, as the text goes over the window, and you have to answer some questions for the installation. The next step is to install Android’s system files to /system in the Cubieboard. Copy the files from the Linux PC to the Cubieboard:
scp cubie_android_system.tar.bz2 root@192.168.0.107:/
and complete the install in the board:
mkdir systemcd /systemtar xjvf ../cubie_android_system.tar.bz2
The installation is now complete and it’s time to try it out.
Graphics Demos
To test whether libhybris is correctly installed run the following:
test_egl
The only problem is that it did not work exactly as expected:
test_egl: test_egl.c:43: main: Assertion `eglChooseConfig((EGLDisplay) display, attr, &ecfg, 1, &num_config) == 1' fai.Aborted
After a reboot, Cubieboard decided to boot Android from flash, so I tried to remove and re-insert the micro SD, and noooooooooo! The micro SD socket let me down and refuses to lock the card in place, so I’ll have to replace the slot which will take me few weeks since I have to order the thing.
So I count on you to let me know what has gone wrong. Thanks
Let’s carry on as if everything worked just fine, and run the next demo:
test_glesv2
This should display a white diamond shape filled with an animated Catherine wheel.
Martin also has instructions for several other demos, but the most interesting one (we have a video), is Qt5 Cinematic Experience that you can install in the board as follows:
zypper in qt5-plugin-imageformat-jpegzypper in qt5-plugin-platform-eglfszypper in qt5-qtdeclarative-qmlscenezypper in qt5-qtdeclarative-import-qtquick2pluginzypper in qt5-qtdeclarative-import-window2zypper in qt5-plugin-generic-evdevzypper in vimzypper in qt5-qtdeclarative-import-particles2zypper in qt5-qtquick*curl -O http://quitcoding.com/download/Qt5_CinematicExperience_rpi_1.0.tgztar -xf Qt5_CinematicExperience_rpi_1.0.tgzcd Qt5_CinematicExperience_rpi_1.0
Now edit content/Mainview.qml with vim, and comment out the PathAnimation part.
Finally run the demo:
QT_QPA_EGLFS_DEPTH=24 qmlscene -platform eglfs Qt5_CinematicExperience.qml
Et voila!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用libhybris库linux调用android库
android 双屏
Repo 详解
android fatal: HTTP request failed
android 系统级别开发环境搭建
搭建自己的Android源码仓库 | 飞熊在天
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服