关于Android内核从一个设备移植到其他设备的指导

时间:2011-09-14 09:46:49

标签: android linux-kernel porting android-source

我拥有三星Galaxy 3,并希望将内核可用于其他Android设备。我准备好了所有建筑环境。我也有C知识。究竟我不明白的是移植涉及的所有内容是如何以及涉及的,哪些代码应该以什么方式修改?

如果有人可以帮助我。这会很棒。

提前致谢。


好的我明白了。但真正的问题是我不明白一件事。

源代码中需要更改哪些内容才能使其与其他设备兼容?有人可以解释一下吗?

3 个答案:

答案 0 :(得分:3)

偶像给出了一个很好的建议。理论上写的是真实的。在实践中,它涉及更多一点。我几个月来一直在移植Android内核。我的目标是在我的自定义板上使用自定义I / O定制S5PV210处理器模块。我有三星Galaxy标签的源代码和几个三星的Android智能手机以及三星评估板的几个版本(Froyo,Gingerbread)(用于S5PV210 CPU的SMDKV210)。仅供参考,S5PC110是一个紧密的衍生品。这是我发现的。 虽然所有设备驱动程序都应该以非常模块化的方式构建并且彼此独立,但您应该能够用类似的设备替换它们,三星这样做的方式并非如此。举个例子来说明电源管理。在许多处理硬件设备的低级驱动程序中,它为电源管理芯片等其他硬件设备调用了一些特定的例程。因此,当您在“make xconfig”或“make menuconfig”中更改驱动程序的选择时,它将删除您不想要的源代码并添加您想要的源代码但是,还有其他模块正在调用您删除的低级别功能。在构建时,您将获得大量未解决的外部因为您删除了硬件没有但在您开始使用的源中使用的电源管理芯片。我查看了几个三星的设备源代码,他们很早就分道扬..它们已经被不同的团队调整过,从一个设备到另一个设备从一个设备到另一个设备将是一项重要的工作。

以下是我成功的方法:我买了一个S5PV210评估板,带有已经移植过的Android内核(Gingerbread)。已经清理过的所有电源管理和相互依赖的问题。然后,形成一个工作套件,我可以更换我需要的设备(没有100K单位/年承诺就不能购买的设备),而不会遇到相互依赖。然后我甚至可以改变LCD分辨率(从800x480到1024x768),触摸屏,手机调制解调器等等。整个事情只用一个人(我)需要大约一个月的工作。

从Galaxytab或其他商业设备开始,让我浪费了几个月的时间,没有任何有用的结果,但我学到的东西。

我的方法有一个成功的要求。您必须知道您正在使用的硬件。例如,您需要知道您的硬件具有哪些触摸屏(芯片组)以选择驱动程序,并且它是否已连接以将其连接到正确的设备(USB,串行等)。所有其他设备(电源管理芯片,键盘,背光,LCD等)都是一样的东西

希望有助于您了解所涉及的工作以及如何做到这一点。

答案 1 :(得分:0)

您应该查看Android Platform Developer's Guideandroid-porting Google群组的缓存副本。

还有一篇关于porting Android to Nokia N810的陈旧但有用的文章,它会给你一些关于Android Linux内核移植的提示。

答案 2 :(得分:0)

我也在使用android移植东西很长一段时间我建议以下路线:

您需要具备android移植和AOSP源代码,目录结构层次结构的基本知识。 我建议你开始阅读https://books.google.co.in/books/about/Embedded_Android.html?id=plHsngEACAAJ&hl=en 并且还提到https://source.android.com/devices/index.html好人指出你也可以谷歌android移植相关团体并成为那里的会员,如果你遇到问题,那么其他人可能会面临类似的问题。

观察

AOSP代码: 平行而言,您需要深入了解Android源代码,例如从https://android.googlesource.com/等链接中观察哪些组件放置在源代码中的位置,以前的Android版本中的更新(如ART替换了LL中的dalvik),顶级将存在通用代码,特定于您的硬件的代码,称为硬件/设备/文件夹中的HAL。

内核代码: 在内核中你还需要观察目录结构并知道哪些东西所在的位置,例如SoC特定代码将在arch /目录defconfigs(用于选择内核配置)将是arch // configs /目录。 还有适用于Linux内核的好书,你可以谷歌并开始阅读它们。

在移植内核时,您需要注意以下内容

1.如果在新内核中已经支持SoC,它在硬件中用于移植,那么你只需要添加设备特定的更改,比如假设你想将新内核版本移植到三星galaxy s3,你可以采取一个具有exynos支持的引用android内核,然后你只需要为添加对samsung galaxy s3的支持进行更改。

为此您需要引用一些支持s3的旧内核,从那里您可以学习已添加的补丁以添加对s3的支持并将这些补丁移植到更新的内核。

实验

首先,您只能移植平台所需的最小变化,在平台上进行编译和闪存,然后观察输出,如果一切看起来都很好,那么继续进行下一次更改,否则尝试解决问题。

谢谢, Devarsh