android内核移植
Ⅰ 安卓智能手机的基于ARM架构的处理器,为什么能够支持基于linux内核的操作系统
Android是基于Linux内核的操作系统。
提到Linux内核的时候,应该把它从概念上和“Linux操作系统”分割看来,内核只包括最基本的抽象,内存模型、进程调度、中断处理等等。而操作系统是一个更广的概念,不光包括内核,还包括了设备驱动、应用程序框架以及一些关键的能够让这个操作系统能为人所用的软件。所以Ubuntu, Fedora等等这些桌面发行版可以看做是包装了Linux内核的、不同的Linux操作系统。
Android 开发之初fork了Linux kernel,在其基础上进行了以下改进:
1. 添加新的的设备驱动
2. 重写了c lib(Bionic)
3. 实现了基于java的应用程序框架
4. 对内核的小修改
大部分的修改都是在内核之上的,也就是说android内核和其他桌面Linux内核是非常接近的(在Linux kernel 3.3 之后,Android分支的内核代码开始merge回原Linux内核repo),内核所完成的抽象,如内存模型、进程调度等,是一致的。
Android不是Linux
看到这个标题大家可能会有些迷惑,前面不是一直说Android是基于Linux内核的吗,怎么现在又不是Linux了?迷惑也是正常的,请先看下面几个要点,然后我们将对每一个要点进行分析,看完后你就会觉得Android不是Linux了。
1.它没有本地窗口系统
什么是本地窗口系统呢?本地窗口系统是指GNU/Linux上的X窗口系统,或者Mac OX X的Quartz等。不同的操作系统的窗口系统可能不一样,Android并没有使用(也不需要使用)Linux的X窗口系统,这是Android不是Linux的一个基本原因。
2.它没有glibc支持
由于Android最初用于一些便携的移动设备上,所以,可能出于效率等方面的考虑,Android并没有采用glibc作为C库,而是Google自己开发了一套Bionic Libc来代替glibc。
3.它并不包括一整套标准的Linux使用程序
Android并没有完全照搬Liunx系统的内核,除了修正部分Liunx的Bug之外,还增加了不少内容,比如:它基于ARM构架增加的Gold-Fish平台,以及yaffs2 FLASH文件系统等。
4.Android专有的驱动程序
除了上面这些不同点之外,Android还对Linux设备驱动进行了增强。
上面这些要点足以说明Android不是Linux。本书的主要内容将围绕Android的这些特有的部分展开,我们的讲解会尽量通俗易懂,但还是建议大家先复习一下Linux内核的基本知识。在具体学习之前,我们还是先来总体浏览一下Android对Linux内核进行了哪些改动,在移植时就需要对这些改动加以调整。
Ⅱ Linux内核怎样启动Android
那么Linux内核和Android什么关系?Linux内核是怎样引导起Android呢?本文进行简单的描述。 Android虽然建立在Linux内核之上,但是他对内核进行了一些扩展,增加了一些驱动。比如Binder,loger等等驱动。可以拿Android内核代码和其Baseline版本进行对比。可以看到Android对Linux内核的所有扩展。 熟悉Linux启动的朋友知道,首先Linux引导完成之后,会启动用户态的init进程(pid为0),这个进程在整个系统运行过程中起着非常重要的作用,如果你对init进程不了解请查相关资料。init完成系统的初始化工作,然后进入shell,接收用户的输入。 Android启动也没有什么神秘的,就是用自己的init进程替换了Linux内核的init进程,完成自己初始化工作(设备,文件系统等等初始化)。然后启动自己的虚拟机,程序等等的东西。Android的init进程的代码位于system/core/init/init.c下面,可以去查看其源码,来了解Android启动详细流程。Android启动流程的资料网上已经比较多,这里就不赘述了。 可以看到移植Android过程中,调试init非常重要。因为所有和硬件平台相关的东西都这里初始化,所以init进程有可能需要移植或者配置。其他的进程都是和硬件无关的,理论上不需要修改就应该能够运行起来。 经过上面的描述可以看出,Android的init进程起着一个承上启下的作用。
Ⅲ 刚刚在linux下编译好了ogre 3D渲染引擎,怎样将它移植到Android中啊。
目前为止,Ogre 1.7.3暂时不支持Android,虽然Android是以Linux为底层内核,但是Android NDK编译Ogre 1.7是不可能的。但是可以检查Ogre的最新代码 1.8版本(https://bitbucket.org/sinbad/ogre/src/)在OgreMain/src文件夹下面可以看到Android文件夹,说明Ogre 1.8是支持Android的,但是Ogre 1.8没有最终release。不过Google Code上有个Gamekit(http://code.google.com/p/gamekit/),集成了Ogre 1.8和物理与声音引擎,由于使用不稳定的Ogre 1.8,可以使用NDK编译在Android上使用。
Ⅳ Android为什么要使用Linux做为内核呢。
因为是个系统就需要内核。Android 本质上是一个基于 Linux 内核上面运行的 java 虚拟机。
手机上 WM 系统内核是 WinCE ,Symbian 系统里面 Symbian 就是内核,Nokia 的 S60 系统这个 S60 就是界面+功能函数库。索尼爱立信之前的几款手机也有 Symbian 的内核,但用户界面是 UIQ 。
Android 不过就是借助了 Linux 内核作为系统的基础,配合自己的 Andriod 基础二进制函数库和一些开源软件作为基础功能支持,跑上自己的 Dalvik 虚拟机,实际看到的 Android 界面,其实是 Dalvik 虚拟机里面运行的 java 程序。
Android = Linux 内核 + 功能函数库 + Dalvik 虚拟机 + java 程序
从系统的开发分层和难度来说,既然有了开源的 Linux ,为什么还要自己去开发内核?就好象大家玩的一些游戏,有 Windows 系统可以直接跑,没有几个厂家会去重新开发底层系统。就连游戏机,其实他的操作系统和功能库也都是现成的,游戏开发者只需要根据系统的功能写程序就可以了。
这样很好的减少了开发难度和成本。
Ⅳ 如何件android中的命令移植到linux开发板上,想使用android中的一些命令,方便开发,比如logcat命令
本文用《Android深度探索(卷1):HAL与驱动开发》的随书源代码为例详细说明如何配置Android驱动开发和测试环境,并且如何使用源代码中的build.sh脚本文件在各种平台(UbuntuLinux、Android模拟器和S3C6410开发板)上编译、安装和测试Linux驱动。
建议读者使用UbuntuLinux12.04或更高版本实验本文的方法。
最好用root账号登录Linux。
一、安装交叉编译器
如果只是在UbuntuLinux上测试Linux驱动就不需要安装交叉编译器了,但要在Android模拟器或S3C6410开发板上进行测试,就必须安装交叉编译器。
首先下载交叉编译器(分卷压缩)
下载后解压,会发现有两个tgz文件,可以将这两个文件放到/root/compilers目录中,在Linux终端进入该目录,执行如下命令安装交叉编译器。
[plain]viewplain
#tarzxvfarm-linux-gcc-4.3.2.tgz-C/
#tarjxvfarm-none-linux-gnueabi-arm-2008q3-72-for-linux.tar.bz2-C/
二、编译和测试Linux内核
这里的Linux内核有两个,一个是goldfish,也就是Android模拟器使用的Linux内核、另外一个是S3C6410开发板使用的Linux内核(Linux2.6.36)。
读者首先要下载这两个Linux内核。
Android模拟器用的Linux内核源代码(分卷压缩)
用于S3C6410开发板的Linux内核源代码(分卷压缩)
分卷1
分卷2
由于随书代码中的word_count驱动已经在goldfish和linux2.6.36中分别建立了符号链接,以便在编译linux内核时同时也会编译word_count驱动,所以linux内核与源代码目录应与作者机器上的目录相同。
也就是两个linux内核目录与源代码目录如下:
linux内核目录
/root/kernel/goldfish
/root/kernel/linux_kernel_2.6.36
源代码目录
/root/drivers
注意/root/drivers目录下就直接是每一章的源代码了,例如/root/drivers/ch
06、/root/drivers/ch07
现在需要将/usr/local/arm/arm-none-linux-gnueabi/bin路径加到Linux的PATH环境变量中(不会加的上网查,这是Linux的基本功)
最后进入/root/compilers/goldfish目录,执行make命令编译linux内核,如果完全编译,大概20分钟左右。
编译完成后,会在/root/kernel/goldfish/arch/arm/boot目录中生成一个zImage文件,代码1.7MB,这就是用于Android模拟器的Linux内核文件。
三、编译Linux驱动
现在来编译随书光盘的驱动程序,这里以word_count驱动为例。
在Linux终端进入/root/drivers/ch06/word_count目录。
先别忙着编译。
首先要设置打开/root/drivers/common.sh文件,修改第一行UBUNTU_KERNEL_PATH变量值为自己机器上安装的UbuntuLinux内核路径,只要执行“ls/usr/src”命令即可查看当前机器可用的linux内核。
Ⅵ 关于安卓界面移植和内核修改的问题
移植还是很麻烦的,不太建议弄,你可以上论坛找找有没有别人移植好的rom,或者下个类似的主题也行,还有就是如果你是单纯觉得他的天气时钟好看,应该有单独的软件可以下载,你下一个装上你手机就行了
Ⅶ 安卓4.4怎么移植内核boot
1、找相近机型的rom,要保证大部分驱动相同
2、移植boot.img
3、修改rom包刷机脚本
4、替换boot.img
5、签名打包为zip格式去刷
注意:最大的问题就是驱动问题,很可能很多东西用不了,可能连系统都进不去,谨慎为之!
Ⅷ 既然安卓也是Linux内核的,那在Linux上运行的工具,可以移植到手机吧,要怎么做呢
linux的工具不是完全都可以在安卓上运行的,真要使用你就手机装busybox,安装完用终端基本就能实现linux上很多的命令功能
Ⅸ 安卓手机内核可以替换吗
可以的,以Virtuous_S4A-2为例
1、从网上下载Virtuous_S4A-2内核。(注:此内核只是作为例子,并不适用于所有机型。你要替换的内核要对应自己的机型以及版本!)
2、然后解压Virtuous_S4A-2,得到4个文件夹,分别是data,kernel,meta-inf,
system。
3、在进入厨房选择0进入高级操作菜单,选择20,boot.img工具
4、选择S查看一下内核信息,用笔记录相关信息以便完成后核对数据。特别是基址。
5、复制完文件后,我们回到厨房工具,选择b,新建boot.img
6、建完后,查看新的boot.img信息。看基址是否一样。
7、替换内核后,我们也要选择23把update-script格式转换为updater-script格式。然后
和上面一样,打包!签名!