Linux和安卓具体是存在什么关系

Linux和安卓具体是存在什么关系,第1张

Android一种基于Linux的自由及开放源代码 *** 作系统。Linux *** 作系统的内核,安卓则是基于Linux内核开发的 *** 作系统,安卓在Linux的基础上提供了驱动以及用户编程接口。

*** 作系统管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。 *** 作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、 *** 作网络与管理文件系统等基本事务。 *** 作系统也提供一个让用户与系统交互的 *** 作界面。

Android以Bionic 取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。Android 为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到 Userspace,使得Linux driver 与 Linux kernel彻底分开。

Bionic/Libc/Kernel/ 并非标准的Kernel header files。Android 的 Kernel header 是利用工具由 Linux Kernel header 所产生的,这样做是为了保留常数、数据结构与宏。

扩展资料

APK安卓应用的后缀,是AndroidPackage的缩写,即Android安装包(apk)。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。

apk文件和sis一样,把android sdk编译的工程打包成一个安装程序文件,格式为apk。 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。

Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接执行安装,和Windows Mobile中的PE文件有区别;

这样做对于程序的保密性和可靠性不是很高,通过dexdump命令可以反编译,但这样做符合发展规律,微软的 Windows Gadgets或者说WPF也采用了这种构架方式。

在Android平台中dalvik vm的执行文件被打包为apk格式,最终运行时加载器会解压然后获取编译后androidmanifest.xml文件中的permission分支相关的安全访问,但仍然存在很多安全限制,如果你将apk文件传到/system/app文件夹下会发现执行是不受限制的。

最终平时安装的文件可能不是这个文件夹,而在android rom中系统的apk文件默认会放入这个文件夹,它们拥有着root权限。

参考资料:百度百科-Android(Google公司开发的 *** 作系统)

参考资料:百度百科- *** 作系统

Android是基于Linux内核的 *** 作系统,也曾经和Linux基金会因为内核问题产生过分歧。

虽然Android基于Linux内核,但是它与Linux之间还是有很大的差别,比如Android在Linux内核的基础上添加了自己所特有的驱动程序。

Linux 仅仅是内核,根本就不是一个完整的 *** 作系统。

一个完整的 *** 作系统,包括内核,功能库,用户界面三个主要部分。一个应用程序,主要运行的并不是依靠内核来运行,它主要是借助功能库提供程序功能函数支持,用户界面层提供显示和交互的功能函数支持,内核只是一个硬件驱动交互,任务分配,内存管理,IO 处理的最底层的支持。

一、Android为什么会选择Linux

成熟的 *** 作系统有很多,但是Android为什么选择采用Linux内核呢?这就与Linux的一些特性有关了,比如:

1、强大的内存管理和进程管理方案

2、基于权限的安全模式

3、支持共享库

4、经过认证的驱动模型

5、Linux本身就是开源项目

二、Android不是Linux

因为它没有本地窗口系统,没有glibc的支持,而且并不包括一整套标准的Linux使用程序,同时增强了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设备驱动进行了增强,主要如下所示。

1)Android Binder 基于OpenBinder框架的一个驱动,用于提供 Android平台的进程间通信(InterProcess Communication,IPC)功能。源代码位于drivers/staging/android/binder.c。

2)Android电源管理(PM) 一个基于标准Linux电源管理系统的轻量级Android电源管理驱动,针对嵌入式设备做了很多优化。源代码位于:

kernel/power/earlysuspend.c

kernel/power/consoleearlysuspend.c

kernel/power/fbearlysuspend.c

kernel/power/wakelock.c

kernel/power/userwakelock.c

如果给内核添加驱动也可以称之为不同的话?

3)低内存管理器(Low Memory Killer) 比Linux的标准的OOM(Out Of Memory)机制更加灵活,它可以根据需要杀死进程以释放需要的内存。源代码位于 drivers/staging/ android/lowmemorykiller.c。

4)匿名共享内存(Ashmem) 为进程间提供大块共享内存,同时为内核提供回收和管理这个内存的机制。源代码位于mm/ashmem.c。

5)Android PMEM(Physical) PMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工作在连续的物理内存上。源代码位于drivers/misc/pmem.c。

6)Android Logger 一个轻量级的日志设备,用于抓取Android系统的各种日志。源代码位于drivers/staging/android/logger.c。

7)Android Alarm 提供了一个定时器,用于把设备从睡眠状态唤醒,同时它还提供了一个即使在设备睡眠时也会运行的时钟基准。源代码位于drivers/rtc/alarm.c。

8)USB Gadget驱动 一个基于标准 Linux USB gadget驱动框架的设备驱动,Android的USB驱动是基于gaeget框架的。源代码位于drivers/usb/gadget/。

9)Android Ram Console 为了提供调试功能,Android允许将调试日志信息写入一个被称为RAM Console的设备里,它是一个基于RAM的Buffer。源代码位于drivers/staging/android / ram_console.c。

10)Android timed device 提供了对设备进行定时控制的功能,目前支持vibrator和LED设备。源代码位于drivers/staging/android /timed_output.c(timed_gpio.c)。

11)Yaffs2 文件系统 Android采用Yaffs2作为MTD nand flash文件系统,源代码位于fs/yaffs2/目录下。Yaffs2是一个快速稳定的应用于NAND和NOR Flash的跨平台的嵌入式设备文件系统,同其他Flash文件系统相比,Yaffs2能使用更小的内存来保存其运行状态,因此它占用内存小。Yaffs2的垃圾回收非常简单而且快速,因此能表现出更好的性能。Yaffs2在大容量的NAND Flash上的性能表现尤为突出,非常适合大容量的Flash存储。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/9027506.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-24
下一篇 2023-04-24

发表评论

登录后才能评论

评论列表(0条)

保存