一、驱动
驱动是内核的一部份,作为直接访问数学硬件的一个软件层,用于应用程序与数学硬件设备通讯。内核包含多种驱动,如WIFI、USB、Audio、蓝牙、相机、显示驱动。
二、设备
(1)设备驱动程序三类:字符设备驱动程序、块设备驱动程序、网络设备驱动程序;
(2)对应Linux三类设备:字符设备、块设备、网络设备;
(3)常见字符设备:滑鼠、键盘、串口、控制台等;
(4)常见块设备:各类硬碟、flashc盘、RAMc盘等;
(5)网路设备(网路插口):eth0、eth1,注:网路设备没有设备节点,应用程序通过Socket访问网路设备。因为网路设备面向报文,较难实现相关read、write等文件读写函数,所以驱动的实现也与字符设备和块设备不同。
三、设备节点
Linux使用对文件一样的管理方法来管理设备,所有设备都以文件的方式储存在/dev目录下,系统中的每位字符设备或则块设备都必须为其创建一个设备文件,它包含了该设备的设备类型(块设备或字符设备)、设备号(主设备号和次设备号)以及设备访问控制属性等。设备节点通过mknod命令创建,也可以由Udev用户工具软件在系统启动后按照/sys目录下每位设备的实际信息创建,使用后一种方法可以为每位设备动态分配设备号。
四、设备节点、设备驱动及化学设备两者之间的关联
Linux中设备节点通过“mknod”命令创建,创建时须要指定主设备号和次设备号linux环境配置,即指定对应的驱动程序和对应的数学设备(访问设备节点时就相当于通过其设备号访问驱动程序从而间接访问到化学设备)。主设备号拿来分辨不同种类的设备,而次设备号拿来分辨同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬碟的主设备号是3
理解:应用程序通过访问设备节点读取主设备号和次设备号,通过主设备号找对应的驱动,通过次设备号对应到具体化学设备。注:1个驱动对应一类设备,并用惟一主设备号标示。
Linux支持的各类设备的主设备号定义在include/linux/major.h文件中,早已在官方注册的主设备号和次设备号在Documentation/devices.txt文件中。
五、Android内核和Linux内核的区别[引用]
Android系统最底层是Linux,但是在中间加上了一个Dalvik/ART的Java虚拟机,从表面层看是Android运行库。每位Android应用都运行在自己的进程上安卓usb驱动 linux,享有Dalvik/ART虚拟机为它分配的专有实例LINUX 删除目录,并支持多个虚拟机在同一设备上高效运行安卓usb驱动 linux,虚拟机执行的是专有格式的可执行文件(.dex)-该格式经过优化,以将显存好用降到最低。
Android内核和Linux内核的差异主要彰显在如下11个方面:
AndroidBinder
AndroidBinder是基于Openbinder框架的一个驱动,用于提供Android平台的进程间的通讯(IPC)。原先的Linux系统下层应用的进程间通讯主要是D-bus,采用消息总线的方法来进行IPC。其源代码坐落drivers/staging/android/binder.c
Android电源管理(PM)
Android电源管理是一个基于标准Linux电源管理系统的轻量级Andorid电源管理驱动,针对嵌入式设备做了好多优化。借助锁和定时器来切换系统状态,控制设备在不同状态下的帧率,以达到节能的目的。其源码坐落kernel/power/earlysuspend.ckernel/power/consoleearlysuspend.ckernel/power/fbearysuspend.ckernel/power/wakelock.ckernel/power/userwakelock.c
低显存管理器(LowmemoryKiller)
Android中低显存管理器和linux标准的OOM相比,器机制愈发灵活,可以按照须要杀害进程来释放须要的显存。LowmemoryKiller的代码十分简单,上面关键是函数Lowmem_shrinker().作为一个模块在初始化时调用register_shrike注册一个Lowmen_shriker,它会被vm在显存紧张的情况下调用。源码坐落drivers/staging/android/lowmemorykiller.c
匿名共享显存(Ashmem)
匿名共享显存为进程间提供大块共享显存,同时为内核提供回收和管理这个显存的机制。假如一个程序尝试访问Kernel释放的一个共享显存块,它将会遭到一个错误提示,之后重新分配显存并重载数据。其源码坐落mm/ashmem.c
AndroidPMEM(Phsical)
PMEM用于向用户空间提供连续的数学显存区域,DSP和个别设备只能工作在连续的数学显存上。驱动中提供了mmap、open/release和ioctl等插口。
AndroidLogger
AndroidLogger是一个轻量级的日志设备,用于抓取Android系统的各类日志,是Linux锁没有的
AndroidAlarm
AndroidAlarm提供了一个定时器用于把设备从睡眠状态唤起,同时它也提供了一个虽然在设备睡眠是也会运行的时钟基准。其源码坐落driver/rtc/alarm.cdrivers/rtc/alarm-dev.c
USBGadget驱动
此驱动是一个具有标准LinuxUSBgadget驱动框架的设备驱动,Android的USB驱动是基于gadget框架的。其源码坐落如下文件:
drivers/usb/gadget/android.cdrivers/usb/gadget/f_adb.cdrivers/usb/gadget/f_mass_storage.c
AndroidRamConsole
为了提供调试功能,Android容许将调试日志信息写入一个被称为RAMConsole的设备里,它是一个基于RAM的Buffer其源码坐落drviers/staging/android/ram_console.c
Androidtimeddevice
Androidtimeddevice提供了对设备进行定时控制功能,目前仅仅支持vibrator和LED设备。其源码为drviers/staging/adnroid/timed_output.c
Yaffs2文件系统
在Android系统中,采用Yaffs2作为MTDNANDFLASH文件系统。Yaffs2是一个快速稳定的应用于NAND和NORFLash的跨平台的嵌入式设备文件性,同其他Flash文件系统相比,Yaffs2使用更小的显存来保存运行状态,因而它占用显存小;Yaffs2的垃圾回收十分简单并且快速,因而才能达到更好的性能;其源代码坐落fs/yaffs2目录