Hardware abstraction in Android - LineageOS Questions & Answers

Hello,
I have some general questions about the differences and particularities of Android ROM programming:
1. AOSP is the device-independent source of all ROMs. Where exactly is the dividing line between the general device-independent code and the device-specific code, or, in other words: Which diretories are relevant when you want to fix hardware problems or port a ROM to another device?
2. How deep do you have to dig into the system in order to port a ROM? On the lowest level you have ARM assembly, on the intermediate level C/C++ and on the highest Java. Do you need much knowledge about Linux
kernel programming in order to port a ROM and make all hardware work properly?
3. Is it possible to trace a hardware-specific function call in the stock ROM and then paste the relevant code from the stock ROM into the custom ROM?
I'm asking because I would like to port a ROM, but I need some background information in order to assess my skills. Thanks for any help.

There is much hardware specific code in the modified Linux kernel. That's why lineageOS bringup has to start with release of stock ROM kernel source code.

Related

Simplistic HTC Hero Kernel Question.

Hi All,
Running rooted Hero with Modaco 2.5.1 rom ( thanks Paul )
Was hoping someone could ( simplistically ) answer a few question for me.
As I understand it - one of the things holding back development of Hero ROMS is that HTC haven't released the kernel for the Hero.
1) What exactly IS the kernel in the greater scheme of things?
2) When are HTC likely to release it?
3) When it is released, what new things will it allow developers to do?
4) Anything else relevant to it worth knowing?
TIA
Look at these:
1. The kernel is the Operating System for the phone, it runs everything.
2. That is the magic question...
3. It'll allow more development in terms of mods. we'll be able to change alot more and get more out of the phones.
I'm sure others will have more detailed explanations.
Regarding question 2:
I've gotten response from HTC support the other day that the release is planned but no sure date could be given.
Date: 5th of October
My question:
Hello there, I realize that this might not be the normal kind of request you guys get, but here goes. This is probably not your average request and might require escalation. I was wondering when the source code for the Hero kernel was gonna be available at developer.htc.com?
Click to expand...
Click to collapse
Answer:
Hello
This is quite a normal question we get here at HTC. The source code is something that will becoming soon. We have had contact with those far higher than my self or are planning on adding the source code as soon as possible. I have not been given a time scale but bases on the code for the two other handsets i should expect it in the next couple of weeks.
Hope this helps.
Click to expand...
Click to collapse
So, educated guess would be around the release of the Hero in the US.
Some if I have this right -
The kernel is the basic underlying OS of the phone, and a ROM sits on top of this end gives us the end user experience ( and Sense UI is within the ROM ).
Am I right in thinking the kernel is linux based?
And a big magic question - when the kernel is released, will people be able to modify it and get the bluetooth working properly?
Sorry if it's a bit basic - but interesting to me....
The Kernel is not the OS (As most people understand an OS to be) (OS meaning Operating System)
It's at the core of the OS but is not the OS. You can keep the same build of an OS but update the kernel and vica versa. It is (put simply) what converts the hardware calls from the OS into something the hardware understands.
So (using current issues as explanation) The OS tries to load the GPS and the kernel isn't configured with the right settings the GPS won't load. Similarly if you try and use the trackball and it's not setup in the kernel then it won't do anything.
The OS will still work fine with other things but until the kernel has the right settings put into it it just won't see the parts of the phone it's not set up to.
Here is a technical description of a Kernel.
http://www.linfo.org/kernel.html
I'm sure I've just made it as clear as dishwater but if not I hope it's helped.
J-Zeus said:
Some if I have this right -
The kernel is the basic underlying OS of the phone, and a ROM sits on top of this end gives us the end user experience ( and Sense UI is within the ROM ).
Click to expand...
Click to collapse
Not exactly. To add to what akirainblack has said already...ROM stands for Read Only Memory. In this context it is a bit different as it is the complete package that makes up the Kernel, the OS and anything that is pre-installed to the phone. When you run the RUU (Rom Update Utilitiy) on your PC is completely refreshes the system software in your phone - Kernel, OS and any pre-installed apps - just as if you had bought it from the shop like that.
J-Zeus said:
Am I right in thinking the kernel is linux based?
Click to expand...
Click to collapse
Yes.
Hmmm...
simple question... when the kernel is available... would we be able to get a white taskbar on the Hero?
//Nik
When the kernel source is available, we should be able to rebuild Android completely from the source code repositories and do practically whatever you want.
Regards,
Dave
foxmeister said:
When the kernel source is available, we should be able to rebuild Android completely from the source code repositories and do practically whatever you want.
Regards,
Dave
Click to expand...
Click to collapse
Including getting Bluetooth working?
J-Zeus said:
Including getting Bluetooth working?
Click to expand...
Click to collapse
In theory, yes. In practice, the situation is a little more complicated, but at the very least I'd imagine it would be possible to get BlueX, or something like it, working on rooted Heros fairly quickly.
Regards,
Dave
Given that this is a Linux kernel, aren't HTC required by the GPL to make the source available to all Hero owners?
This is covering the same ground, but is another way to look at things regarding the kernel and the OS. The kernel abstracts the specifics of the hardware from the Android system. For example, when the Android system requests that the bluetooth hardware be enabled, the kernel can translate that request so that it works with the particular hardware of the phone - as the bluetooth hardware of the Magic may be different from the bluetooth hardware of the Hero. So the kernel, is an interface that translates and Android call to the specific hardware level controls necessary. The kernel sits between the hardware and the Android system.
It also means that releasing the kernel will not allow us to make changes to the Hero Android user interfaces. If we want to change colours, icons and so on in the Hero ROM, we would need the source code for their "tweaked" Android and maybe to some degree their TouchFlo software. I doubt they would give that away. It would allows us however, to tweak the kernel, or transplant the driver code for specific hardware pieces in the Hero, to a newer version kernel.
I understand that the release of the hero kernel, could help me with my cause (getting 1.5/1.6 'clean' android on my hero without any htc apps/front ends).
Somebody suggested contacting HTC and asking for it to be released.
I have a few questions regarding that:
1) Has this happened before? That HTC released an android kernel?
2) Did this happen after the request?
3) Who should we contact to get it? (which HTC division)
4) Is there a possibility that they don't want to release it, because it would allow people to copy parts of the proprietary interface?
E2K said:
1) Has this happened before? That HTC released an android kernel?
Click to expand...
Click to collapse
Take a look at http://developer.htc.com/
The Dream and Magic sources are available.
E2K said:
4) Is there a possibility that they don't want to release it, because it would allow people to copy parts of the proprietary interface?
Click to expand...
Click to collapse
The HTC Sense UI won't be included in the kernel source.
They dont have to release the source of them.
New question
Is it possible to create a new donut kernel (2.6.29) with the changes they made to the 1.5 kernel (2.6.27)?
Looks like they send you the hole kernel, not just some patches and new drivers...
mopodo said:
Take a look at http://developer.htc.com/
The Dream and Magic sources are available.
Click to expand...
Click to collapse
So this means that we could compile or 'cook' a working vanilla android 1.5 for the HTC hero, with everything working fully?
HTC HAS to release the kernel source as required under the GPL license that the kernel was released under. It is indeed a linux kernel and it contains the necessary parts to work the hardware along with extra drivers and modules (stupid monolithic kernels).
Here's what I don't get (and hopefully somebody will clarify this for me). Why hasn't anybody tried building android with the current kernel available? Android has the ability to be built around a pre-compiled kernel (it does this if you do a straight make right after repo sync with the pre-compiled dream kernel). You'd only need to re-build the wlan.ko module for the new kernel and the gps module would be compiled against the specified kernel, so it should work.
If I had Hero, I'd test it (if you want to trade your Hero for my G1, hit me up ), but there's no reason it shouldn't work.
Up to now, I've only seen ports, and those are hard to make work because of the pre-compiled files, so that leads to loads of file-swapping and finger-crossing, but an AOSP make should still work. Anybody wanna try it (or post me a hero kernel and I'll compile you a stock donut build to test).
jubeh said:
HTC HAS to release the kernel source as required under the GPL license that the kernel was released under. It is indeed a linux kernel and it contains the necessary parts to work the hardware along with extra drivers and modules (stupid monolithic kernels).
Here's what I don't get (and hopefully somebody will clarify this for me). Why hasn't anybody tried building android with the current kernel available? Android has the ability to be built around a pre-compiled kernel (it does this if you do a straight make right after repo sync with the pre-compiled dream kernel). You'd only need to re-build the wlan.ko module for the new kernel and the gps module would be compiled against the specified kernel, so it should work.
If I had Hero, I'd test it (if you want to trade your Hero for my G1, hit me up ), but there's no reason it shouldn't work.
Up to now, I've only seen ports, and those are hard to make work because of the pre-compiled files, so that leads to loads of file-swapping and finger-crossing, but an AOSP make should still work. Anybody wanna try it (or post me a hero kernel and I'll compile you a stock donut build to test).
Click to expand...
Click to collapse
Hi, thank you for this information. You make it sound like it's possible
I tried searching for the Hero Kernel, but I could only find this:
http://developer.htc.com/
The hero is not listed (maybe it shares a lot with the magic kernel?).
edit: this post dating from september 10 stated that HTC would "release the kernel source soon".
This was more than a month ago though..
edit2: calling HTC Netherlands right now..
edit3: after explainig the need for the kernel, I've been on hold for 10 minutes now..
edit4: more than 18 minutes now
edit5: after 26 minutes I hang up
Well I have a Hero running Modaco 2.2. I could post this kernel (where?) Or it surely could be extracted from one of the ROMs available on this very site
SquiffSquiff said:
Well I have a Hero running Modaco 2.2. I could post this kernel (where?) Or it surely could be extracted from one of the ROMs available on this very site
Click to expand...
Click to collapse
I could be wrong, but I believe there is a difference between the 'kernel', and the 'kernel source'. The second one is needed when you want to compile the kernel.
Speaking as one who has compiled kernels in the past there are three components required here:
The kernel source- this is typically available from http://kernel.org/ If HTC have made any changes to the source of the kernel itself then these should be apparent in their distribution of the kernel source
The relevant configuration file '.config' which should accompany their distribution of the kernel source and permit you to compile any other kernel as a drop in replacement.
Source code and makefiles for any custom kernel modules ('drivers' in windows terminology) In Linux these have to be compiled together with the kernel.
To use a cookery analogy:
The kernel source is the raw ingredients. It can be set up for anything from a supercomputer to a DVD player depending on how you use it. The kernel config is the method which will allow you to bake the type of cake you intend. The modules sources are any of HTC’s own custom ingredients required for everything to work. THe kernel is the finished cake which you eat.

Modifying Android's built-in apps

Hi guys!
I'm wondering what I'd have to do if I wanted to modify the built in apps inside Android..
I've got a HTC Hero running FroydVillain 1.5.0. Let's say... I want to modify the messaging app that's included, MMS.apk. I wouldn't know how to go about this, and I have a few questions...
Firstly, what sources exactly are used for building the built in apps for a given ROM? The source code link in the FroydVillain post, for example, is just for the kernel. The rest of the OS isn't there.
Secondly, I hear that in order to modify a built in app, you need to build the entire OS. If I just download all the code from Google official repo, and compile that, will it just... work on my phone, provided I use a kernel that is specific to my phone?
Lastly, are there any tips anyone has for someone who just wants to modify a couple of the built in apps? Is it possible to build them as standalone apps? Or import them into Eclipse?
I've had a search around the forum and the internets in general, and people have asked similear questions, but I've yet to find a good answer. This thread comes to mind: http://forum.xda-developers.com/showthread.php?t=635197
If anyone could help me, or point me in the direction of any help, that'd be awesome! Thanks!!
FunkTrooper said:
Hi guys!
I'm wondering what I'd have to do if I wanted to modify the built in apps inside Android..
I've got a HTC Hero running FroydVillain 1.5.0. Let's say... I want to modify the messaging app that's included, MMS.apk. I wouldn't know how to go about this, and I have a few questions...
Firstly, what sources exactly are used for building the built in apps for a given ROM? The source code link in the FroydVillain post, for example, is just for the kernel. The rest of the OS isn't there.
Secondly, I hear that in order to modify a built in app, you need to build the entire OS. If I just download all the code from Google official repo, and compile that, will it just... work on my phone, provided I use a kernel that is specific to my phone?
Lastly, are there any tips anyone has for someone who just wants to modify a couple of the built in apps? Is it possible to build them as standalone apps? Or import them into Eclipse?
I've had a search around the forum and the internets in general, and people have asked similear questions, but I've yet to find a good answer. This thread comes to mind: http://forum.xda-developers.com/showthread.php?t=635197
If anyone could help me, or point me in the direction of any help, that'd be awesome! Thanks!!
Click to expand...
Click to collapse
1) The whole sources for everything are there
http://github.com/ninpo
2) You can import the sources to eclipse, but I think you will need to build the entire tree, as opposed to just what you change
3) Apktool lets you do smali and resource edits on an APK. Without knowing what you aim to do, it's hard to guide you specifically.
Most apps are based on the sources provided by google. I assume you are talking about Froyo Hero ROMs (i.e. FroydVillain), which apps are generally built from the source of CyanogenMod. Specifically for FroydVillain, if you look around ninpo github you will see some packages with some changes to their code, although it does seem that many of the changes in recent releases are not there. I have actually PMed ninpo about this and hopefully this is only a technicality.... I assume that the other packages and apps (most of them) he just compiled off the CM sources without changes.
In any case, if you compile an app either from the CM source or from google's original sources, it should work just to copy the apk file - just make sure you use an appropriate ROM (i.e. Froyo ROM if you built it from Froyo sources). The reason to want the CM sources, is that if they have incorporated further fixes (over the google sources) you may want them.
Finally, some more practical advice: I would start with the google sources: http://source.android.com/source/index.html since I have found these instructions and explanations easier to begin with - it should be quite straight forward to build these sources on a linux machine (or VM).
Then you can also try to tackle the cyanogen source: http://wiki.cyanogenmod.com/index.php?title=Building_from_source currently missing instructions on how to build for hero. But if you only want to copy apks out of it, you can just build a generic build (like in the google souce).
If you have specific problems, ask and I'll try to help you.
Good luck.
pulser_g2 said:
1) The whole sources for everything are there
http://github.com/ninpo
Click to expand...
Click to collapse
For example where are all the changes to the dalvik code? I do not follow closely enough the changes in Froyd to point out other things which might be missing (if at all), but there are relatively few committed changes to the CM code. Specifically the dalvik code, ninpo mentioned hundreds of changes which caught my interest and are definitively not there.
The kernel sources do seem to be up to date always - been following that one closely .
Thanks for the advice I love this forum!
What I'm trying to do, in case you're wondering, ultimately, is to modify the built-in messaging application to give the user the option of sending a message by the normal method, or by using their provider's free webtext service, something that all the carriers seem to offer here in Ireland.
So, for example, you'd press the Send button, and you'd be able to select one of those methods. (of course, you'd have to have a data connection for the webtext). There's also be an interface for entering your login credentials for your carrier's website.
I'm doing this party because it would be very useful. I also feel that it would give me a good introduction to how you'd go about modifying Android. I mean, from a programming point of view, it shouldn't be *too* hard to do. I already have a simple standalone app that I made which can send a text message via an Irish carrier's webtext service. But it's all good experience to try to modify other people big codebases.
I have a good bit of experience with web application development, but my experience with other programming is a little more limited. I usually use PHP, where there's none of this compiling nonsense. You just write scripts and off they go!
So I'm gonna go off and see if I can set up an environment where I can build.. the OS, I guess.
If I was to take the vanilla official Google sources, would they work on my phone? Or would I have to use an official Google developer phone... or the emulator? Or maybe if I stopped writing here and investigated those links you've provided, I'd know that by know.
Brb, investigating
Yeh investigating and just trying to do it is usually the best way
To clarify what I was trying to say above: All the java code is obvious very portable - one of the big advantages of java. In the case of android it is compiled to an .apk file and this file should be, at the very least, portable to all android "devices" running this android version. So the apk you build (for example from the vanilla 2.2 sources) should work on the emulator (good for initial debugging) and any 2.2 ROMs.
erasmux said:
For example where are all the changes to the dalvik code? I do not follow closely enough the changes in Froyd to point out other things which might be missing (if at all), but there are relatively few committed changes to the CM code. Specifically the dalvik code, ninpo mentioned hundreds of changes which caught my interest and are definitively not there.
The kernel sources do seem to be up to date always - been following that one closely .
Click to expand...
Click to collapse
I'm currently on "vacation" from any and all Android development for a week. I'll be back after the weekend, at which time my modifications will be cleaned up and committed to git. The kernel is always current with my latest kernel release due to GPL obligations. The extra time away has also highlighted some changes I need to make both to the kernel and to my Android modifications when I get back.
Hacre said:
I'm currently on "vacation" from any and all Android development for a week. I'll be back after the weekend, at which time my modifications will be cleaned up and committed to git. The kernel is always current with my latest kernel release due to GPL obligations. The extra time away has also highlighted some changes I need to make both to the kernel and to my Android modifications when I get back.
Click to expand...
Click to collapse
Thanks Ninpo

Question regarding kernel patcing/updates

I kind of feel as if this should be a very basic topic and that I should not be having to post a new thread on it... but, out of curiosity, does anyone know whether or not the Android kernel-- which as we all know is a flavour of the Linux kernel-- can be updated through "patching" as the regular Linux kernel can? The reason I am asking is that I greatly prefer to run my device with a custom kernel that has extra features over the stock kernel, however, it seems like every custom kernel that is released is released as a one-shot deal, and that the only way to have a kernel that continues to be updated with fresh source is to run the kernels that are provided with the nightly ROM builds.
Of course, I could go the route of learning how to build my own kernels and add features to them.. but I guess my basic question is, does there exist any form of "general patch" that is periodically released by Google, or the Linux Kernel foundation, etc., that will bring your current kernel up-to-date with the latest system-wide changes (secuturity & stability fixes, etc), while leaving the bulk of the kernel and the kernel configuration in place? Or is that a totally unrealistic and impractical concept? I do build my own kernels from source for my laptop, but I know very little about compiling a kernel for android.. anyway, if there are any kernel devs still on this device's forum, what do you guys think?
Any feedback from knowledgeable individuals much appreciated.. thank you!
No. You would have to build the kernel and flash it yourself. You can usually find HTC's kernel source on their website for each device. You take that kernel and manually patch the updates yourself.

Unofficial build help?

I'm trying to build for a device that has no known Android 10 device trees that I can find. I think I fleshed out the trees pretty well by following some sister/cousin devices and extracting a lot of stuff from the rooted phone itself, but my build fails at 2% due to a missing output file. The missing libdss.so file should be built as part of the kernel (whose source I have), but the build clearly isn't happening (or isn't happening in time to be recognized by the build system.)
I tried to build the kernel as a standalone module to see what might be wrong, and in trying to do that I can't seem to resolve all the issues with dependencies for cross-compilation to arm64. I've built for devices with existing trees by cherry-picking what I needed, but I've never built for something from the ground-up like this. I don't want to make the ROM with a pre-built kernel as the end-goal would be to become official. The attached image is the exact error I'm receiving, and the following links are to all of my source repositories that I'm using in addition to the Lineage17.1 base. Any help would be appreciated. I work as a full-time dev by day, I don't mind slogging around in some code if that's what I takes, I've just reached the end of my troubleshooting knowledge here and am not sure what the next step might be.
https://github.com/polaarbear/android_device_motorola_troika_sprout
https://github.com/polaarbear/android_device_motorola_universal9610-common
https://github.com/polaarbear/android_vendor_motorola_universal9610-common
https://github.com/polaarbear/android_kernel_motorola_universal9610

Question How To Get started with Custom Rom Development/Contribution as a Junior Java/Kotlin developer?

As the thread question states I am a junior Java/Kotlin developer and would like to contribute to custom rom projects.
I have been mainly using Lineage OS on my old devices for a past few years and I am genuinely thankful for this community and would like to give back.
I have no idea where to get started and the only threads I found were really old from 2013 and hence I am posting it here. I have only gone as far as compiling AOSP from source and managing to flash it to my device. ( Any guidance is welcome ).
I have 2 additional queries :-
1) Why most custom rom releases are based on AOSP or Lineage as source rather than working backwards from the manufacture's provided rom? In that way the device can retain most of this functionality.
2) I have observed QUALCOMM powered devices are much more appreciated in this community compared to MediaTek, Why is that so? Recent MediaTek Chips have been quite powerful yet support from the community isn't there yet ..... what are MediaTek chipsets lacking ?
Mediatek doesn't release their source code so it's very difficult to develop custom ROMs.
Correct me if I'm wrong
How does your self-built AOSP perform? Everything working correctly?
I think the first question is, because the manufacturer's ROMs are proprietary and closed source, so it's not impossible, but difficult I think. Dunno how Xiaomi.eu does it.
Second question is, because Qualcomm releases source code to CAF - Code Aurora Forum. Custom ROM/Kernel Makers pull a few bits & pieces from CAF into their AOSP ROM, for that added spice.
I think MediaTek does too, but only for few devices?

Categories

Resources