I want to run OpenCL sample apps on Mali T-628 gpu in Android platform.
i hv downloaded Mali OpenCL SDK.
My host system is Ubuntu 12.04
I saw entire development guides but couldnt understand.Any instructions on how to go about it?
Sorry for late reply, was at GDC last week. You will need to write the Android.mk and Application.mk files, but you won't need to write any Java files, you can just build an executable, i.e. not an APK, just a raw binary, with the NDK. It's fairly trivial to write the Android.mk file. Take a very simple NDK sample app and copy the jni folder, then modify that to include the correct files and build a binary, you should have no trouble! I'll try and get an example to you this week.
Thks Chris for reply.
1) I saw NDK samples. But the thing is the Android.mk file varies a lot with the application. So just replacing the <file name> will help?
2)Also the activity file will load the .so ( got from the cpp file) and as a result we can run the application. Without that wont we just get a default "hello world" message?
3) Say i want to run the "mandelbrot" sample in Mali SDK as an android app. What changes should i do?
The activity file is not necessary if you're building a pure native binary, i.e. you wouldn't build the C++ code as a shared library, you would build it as a native binary with the NDK using BUILD_EXECUTABLE. c - Want to compile native Android binary I can run in terminal on the phone - Stack Overflow first answer is an example of this. I'll see if I can put a sample together this week.
Ur knowledge base is very extensive.
So 1 prblem is solved. The changes in Android.mk still remains though. It will be nyc if u could provide furhter insights into it
So I've given it a go at producing the Android NDK makefiles necessary to build the OpenCL samples... I've attached a zip which you should be able to unzip over the top of your OpenCL SDK. It will add a couple of jni folders, one in lib and one in samples\hello_world_opencl. To build the hello_world_opencl sample fire up a command prompt and do the following:
The first ndk-build will build the OpenCL stub library, which exists purely to satisfy the link requirements for the samples. It is not a real implementation of OpenCL, and indeed at runtime you will be running against the real implementation present on the device. The second ndk-build will build the sample.
Note that this is only enough to make it build, I have made no modifications to the source code itself to make it run correctly, i.e. looking for files in the right place, etc, but this should be enough to get you building and running at least. I'd recommend building clinfo and checking that you get the correct diagnostic output.
Thanks a lot Chris.
I tried ndk-build for OpenCL stub.
make: *** No rule to make target `jni\../..\lib\opencl_stubs.c', needed by `obj/local/armeabi-v7a/objs/OpenCL/..\lib\opencl_stubs.o'. Stop.
It is not finding the opencl_stub file. I changed the Android.mk from LOCAL_SRC_FILES := opencl_stubs.c to LOCAL_SRC_FILES := ..\lib\opencl_stubs.c
But no use. can u plse help?
My bad, Linux doesn't like the backslashes (I wrote this on Windows ) change the backslashes to forward slashes in the Android.mk files and you're good to go
Thanks a lot.It worked.
A libs folder and and obj folder is created inside <hello_world_sample> and inside <Mali_SDK--- / lib >
How should I run it?
Also the procedure is the same for all samples right , except we have to change the source file ?
Thanks a lot
Yeah the process is the same, just look at the makefiles to see what files are compiled and what the includes are for specific samples and recreate the Android.mk files I provided for those samples to run them, just copy the binary to the device, chmod it so it's executable and run it from the shell. It will fall over trying to load a file most likely, so you will need to modify the source so it looks in /sdcard/ or something. From memory at present it will look for an Assets folder in the current working dir.
So i will have to copy the hello_world_opencl executable present inside obj->local->armeabi-v7a to device.
i run $ adb shell pm setInstallLocation 2 to install it in sdcard.
To modify source, u mean i will hv to change the Android.mk file LOCAL_SRC_FILES := hello_world_opencl.cpp to look inside sdcard? Sorry i dont understand
setInstallLocation is a package manager command, and will only affect where the package manager installs packages. In this case you don't have a package to install, I assume you'll probably just push the thing with adb push somewhere like /sdcard/ and run it from there?
As for source, I am referring to the actual C++ source code, not the Android.mk file. Generally speaking there may be some minor issues running on Android which you may need to fix, e.g. broken file paths, but then again it might just work without issues. We don't routinely test on Android as we don't support it out of the box.
I tried the push command. The problem is i am getting "permission denied error"
# mount -o remount,rw /dev/block/stl9 /system
#chmod 777 /system/app
What is the problem ? Or is there an alternative ?
adb push thing /sdcard/thing isn't working? Does the device have an /sdcard/ directory? If adb push isn't working on your device then that's a support request for HardKernel I think!
Yes there is a sd card directory.But the "error" is not specific to ODROID but ubiquitous in many devices.
Can u plse suggest an alternative?
I'm afraid I've never had any trouble with adb push. Can you copy the exact line you're typing? I guess without using the Android tools you're limited to moving files onto/off the device with USB keys etc.
With production devices, even with root capabilities, you cannot push directly to the system partition - even if you remount it as rw.
For these devices with this security feature, you have to push it to the sdcard first, then adb shell and copy the files from the sdcard to your destination (note: mv will not work due to cross-filesystem limitations, a cp will work)
However you should have an eng build running on a devboard such as the XU3, so pushing directly to a rw system partition is possible, but only after you first run the following commands:
It sounds like you are having a lot of basic problems. A lot of the issues you are now raising are not related to Mali, or indeed ARM.
Please google for the answer to generic problems before posting here.
We cannot and will not do the work for you.
Thank you for understanding, and we are more than happy to help with any Mali and/or ARM specific issues or questions you may have.