❶ linux驱动与设备节点简介 & Android内核与Linux内核的区别
驱动是内核的一部分,作为直接访问物理硬件的一个软件层,用于应用程序与物理硬件设备通信。内核包含多种驱动,如WIFI、USB、Audio、蓝牙、相机、显示驱动。
(1)设备驱动程序三类:字符设备驱动程序、块设备驱动程序、网络设备驱动程序;
(2)对应Linux三类设备:字符设备、块设备、网络设备;
(3)常见字符设备:鼠标、键盘、串口、控制台等;
(4)常见块设备:各种硬盘、flash磁盘、RAM磁盘等;
(5)网络设备(网络接口):eth0、eth1,注:网络设备没有设备节点,应用程序通过Socket访问网络设备。由于网络设备面向报文,较难实现相关read、write等文件读写函数,所以驱动的实现也与字符设备和块设备不同。
Linux使用对文件一样的管理方式来管理设备,所有设备都以文件的形式存放在/dev目录下,系统中的每个字符设备或者块设备都必须为其创建一个设备文件,它包含了该设备的设备类型(块设备或字符设备)、设备号(主设备号和次设备号)以及设备访问控制属性等。设备节点通过 mknod 命令创建,也可以由Udev用户工具软件在系统启动后根据/sys目录下每个设备的实际信息创建,使用后一种方式可以为每个设备动态分配设备号。
Linux中设备节点通过“mknod”命令创建,创建时需要指定主设备号和次设备号,即指定对应的驱动程序和对应的物理设备(访问设备节点时就相当于通过其设备号访问驱动程序进而间接访问到物理设备)。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3
理解:应用程序通过访问设备节点读取主设备号和次设备号,通过主设备号找对应的驱动,通过次设备号对应到具体物理设备。注:1个驱动对应一类设备,并用唯一主设备号标识。
Linux支持的各种设备的主设备号定义在include/linux/major.h文件中,已经在官方注册的主设备号和次设备号在Documentation/devices.txt文件中。
Android系统最底层是Linux,并且在中间加上了一个Dalvik / ART的Java虚拟机,从表面层看是Android运行库。每个Android应用都运行在自己的进程上,享有Dalvik / ART虚拟机为它分配的专有实例,并支持多个虚拟机在同一设备上高效运行,虚拟机执行的是专有格式的可执行文件(.dex) - 该格式经过优化,以将内存好用降到最低。
Android内核和Linux内核的差别主要体现在如下11个方面:
❷ linux驱动有哪些
Linux驱动主要包括以下几类:
一、设备驱动
设备驱动是Linux中最基础且最常见的驱动类型,主要包括网络驱动、硬盘驱动、USB驱动等。它们的作用在于管理硬件设备的操作,使操作系统能够与各种硬件设备交互。例如,网络驱动可以让Linux系统支持各种网络接口卡,实现网络通信功能。硬盘驱动则负责读写硬盘操作等。设备驱动开发是Linux内核开发中的重要部分。
二、字符设备驱动
字符设备驱动主要管理Linux系统中的字符设备,如鼠标、键盘等输入设备和显示器等输出设备。字符设备是以字符为单位进行数据传输的设备,其驱动的主要任务是实现对设备的读写操作以及处理设备的中断请求等。字符设备驱动通常采用设备节点的方式在文件系统中表示。
三、块设备驱动
块设备驱动主要管理Linux系统中的块设备,如硬盘、闪存等存储设备。块设备是以数据块为单位进行数据传输的设备,其驱动的主要任务是管理设备的读写请求,实现数据的存储和读取。块设备驱动通常采用缓冲区管理的方式来提高数据处理的效率。
四、总线驱动
总线驱动主要负责管理Linux系统中的总线设备,如PCI总线、USB总线等。总线是连接计算机系统中各种设备的桥梁,总线驱动的主要任务是检测总线上的设备,初始化设备并管理设备与系统的通信。总线驱动的开发涉及到总线的协议和通信机制等复杂的技术细节。