Since 1990, when a new version of Windows comes out, the (only) thing that stops PC owners from upgrading is whether there are compatible device drivers for their hardware (network adapter device driver, display adapter device driver, printer device driver, etc.).

Does Android have "device drivers" that Acer, Archos, HTC, Huawei, and other phone manufacturers can publish on their website such that Android device owners can, if they want, upgrade their phone's OS and afterwards (download and) install the appropriate drivers?

1 Answer 1


Android does not have "device drivers". If you were to think of the entire Android ecosystem within your handset, split into 3/4, using the Java Programming language, the remaining 1/4 is the kernel written in C/Assembler. It is there within the kernel is where the drivers are embedded. That is part of the kernel's job to interact with touchscreen, accelerometers, compass, etc, and certain interactions with the hardware gets delegated to the Android side of things. That is a summary in abstract form for the layman to understand.

On to hardware manufacturers such as Acer, Huawei, HTC, Samsung, Sony, Zte, to name but a few, what each of those companies do, is publish the sources to the kernel, so that it can be built. Although, having said that, some are not exactly GPL compliant, some provide sources, which may not be fully complete, quite possibly, due to the restrictions on certain closed-source for a particular hardware, or others just flagrantly violate the GPL and not publish it at all. Perhaps, some do distribute the source in which the process of rolling your own kernel can fail due to malformed errors in the code or missing extra code.

That applies to, generally older kernels, version 2.6.x, in which a mix-and-match of the appropriate sources gets merged in manually, to create a build, this is where it can backfire quite horribly, the build breaks, kernel refuses to boot and lots of hacking to get the build to work.

Atheros, is one very classic example of a wifi chipset found in quite a large majority of handsets, notably, the sources for the device driver, are quite hard to find, which has resulted in broken builds of the driver, in turn, when integrated with the kernel, as a whole, Android refuses to start the wifi. Due to obscurity of the source, hackers have attempted to get the appropriate wifi driver from other stock ROMs thereby exacerbating the gambling on the functionality of the wifi which either work or break.

The newer kernel versions 3.1.x, have most of the device drivers employed for usage with Android, merged into the main kernel sources thereby minimizing the chances of mix-n-matching, merging the source manually for a hardware, be it a new compass, acclerometer etc.

If there's anything amiss feel free to comment, and amend this accordingly.

  • 1
    Steve Kondik's recent Cyanogenmod presentation explains a bit about how the device layer works in Android, and explains a bit about why its complicated (skip to minute 27 or so): youtube.com/watch?v=puSdhvC0ExY&feature=player_embedded
    – P.T.
    Commented Jul 10, 2012 at 7:47
  • It's eye-awakening that Android prides itself on running on hundreds of devices, yet it has no "hardware abstraction layer". Oh irony. Dear Android, it's 2012, not 1985....
    – William C
    Commented Aug 6, 2012 at 23:38
  • 1
    @WilliamC sure Android runs on hundreds of devices, "hardware abstraction layer" hal - well... in a way you're correct, that hal is found on linux desktops (most distros having to support a vast array of devices such as PCI, on first boot from a live DVD etc which are quite standardized this applies to windows also) but sorry to prick your conscience, to each and to their own manufacturer, with a vast array of circuitary etc... hal at this stage is not quite viable due to differences in it. Its a different story with PC world of BIOS's,standards etc, sounds paradoxical though! :)
    – t0mm13b
    Commented Aug 7, 2012 at 0:10

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .