设备(device): 是提供输入或输出功能的一种载体,其包括物理设备(对实际存在的物理硬件的抽象)例如,键盘是一种输入设备,硬盘是输入和输出设备。也包括虚拟设备(不依赖于特定的物理硬件,仅是内核自身提供的模拟/虚拟功能). 例如:虚拟控制台是输入和输出设备。每个设备都对应一个文件(设备文件),这些设备文件统一放在一个公共位置/dev
下管理,通过设备文件(或称设备节点)来使用驱动程序操作设备。
设备按照存取方式的不同,分为两类:
鸿蒙系统中常见的字符设备如下:
/dev/mem 物理内存的全镜像。可以用来直接存取物理内存。
/dev/kmem 内核看到的虚拟内存的全镜像。其访问的是虚拟内存而不是物理内存。
/dev/null 空设备。也叫黑洞设备,任何写入都将被直接丢弃(但返回"成功");任何读取都将得到EOF(文件结束标志)。
/dev/port 存取I/O端口
/dev/zero 零流源。任何写入都将被直接丢弃(但返回"成功");任何读取都将得到无限多的二进制零流。
/dev/full 满设备。任何写入都将失败,并把errno设为ENOSPC(没有剩余空间);任何读取都将得到无限多的二进制零流。
这个设备通常被用来测试程序在遇到磁盘无剩余空间错误时的行为。
/dev/random 真随机数发生器。以背景噪声数据或硬件随机数发生器作为熵池,读取时会返回小于熵池噪声总数的随机字节。
若熵池空了,读操作将会被阻塞,直到收集到了足够的环境噪声为止。建议用于需要生成高强度密钥的场合。
[注意]虽然允许写入,但企图通过写入此文件来"预存"随机数是徒劳的,因为写入的数据对输出并无影响。
/dev/urandom 伪随机数发生器。更快,但是不够安全。仅用于对安全性要求不高的场合。
即使熵池空了,读操作也不会被阻塞,而是把已经产生的随机数做为种子来产生新的随机数。
[注意]虽然允许写入,但企图通过写入此文件来"预存"随机数是徒劳的,因为写入的数据对输出并无影响。
/dev/aio 异步I/O通知接口
/dev/kmsg 任何对该文件的写入都将作为printk的输出;而读取则得到printk的输出缓冲区内容。
/dev/mem
是一个字符设备, 源文件是 kernel/drivers/char/mem/src/mem.c, 这个设备文件是专门用来读写物理地址用的。里面的内容是所有物理内存的地址以及内容信息。通常只有root用户对其有读写权限。利用 mmap
和/dev/mem
建立起直接读写系统物理内存的渠道。利用/dev/mem
和mmap
导出系统物理地址,免去了用户虚拟地址到内核逻辑地址的繁琐拷贝,提升效率。 //文件和线性区的映射关系
static ssize_t MemMap(struct file *filep, LosVmMapRegion *region)
{
#ifdef LOSCFG_KERNEL_VM
size_t size = region->range.size;
PADDR_T paddr = region->pgOff << PAGE_SHIFT;
VADDR_T vaddr = region->range.base;
LosVmSpace *space = LOS_SpaceGet(vaddr);
if ((paddr >= SYS_MEM_BASE) && (paddr < SYS_MEM_END)) {
return -EINVAL;
}
/* Peripheral register memory adds strongly ordered attributes */
region->regionFlags |= VM_MAP_REGION_FLAG_STRONGLY_ORDERED;
if (space == NULL) {
return -EAGAIN;
}//映射
if (LOS_ArchMmuMap(&space->archMmu, vaddr, paddr, size >> PAGE_SHIFT, region->regionFlags) <= 0) {
return -EAGAIN;
}
#else
UNUSED(filep);
UNUSED(region);
#endif
return 0;
}
// vfs 接口实现
static const struct file_operations_vfs g_memDevOps = {
MemOpen, /* open */
MemClose, /* close */
MemRead, /* read */
MemWrite, /* write */
NULL, /* seek */
NULL, /* ioctl */
MemMap, /* mmap */
#ifndef CONFIG_DISABLE_POLL
NULL, /* poll */
#endif
NULL, /* unlink */
};
// 注册/dev/mem 的驱动程序
int DevMemRegister(void)
{
return register_driver("/dev/mem", &g_memDevOps, 0666, 0); /* 0666: file mode */
}
TTY 是 Teletype 或 Teletypewriter 的缩写,原来是指电传打字机,后来这种设备逐渐键盘和显示器取代。不管是电传打字机还是键盘显示器,都是作为计算机的终端设备存在的,所以 TTY 也泛指计算机的终端(terminal)设备,一般分成以下几种
/dev/rtc 实时时钟(Real Time Clock)
RtcOpen 获取RTC设备驱动句柄
RtcClose 释放RTC设备驱动句柄
RtcReadTime 读RTC时间信息,包括年、月、星期、日、时、分、秒、毫秒
RtcWriteTime 写RTC时间信息,包括年、月、星期、日、时、分、秒、毫秒
RtcReadAlarm 读RTC报警时间信息
RtcWriteAlarm 写RTC报警时间信息
RtcRegisterAlarmCallback 注册报警超时回调函数
RtcAlarmInterruptEnable 使能/去使能RTC报警中断
RtcGetFreq 读RTC外接晶振频率
RtcSetFreq 配置RTC外接晶振频率
RtcReset RTC复位
RtcReadReg 读用户自定义寄存器
RtcWriteReg 写用户自定义寄存器
/dev/i2c-0 第1个 I2C 适配器
...
/dev/i2c-n 第n-1个 I2C 适配器
I2cOpen 打开I2C控制器
I2cClose 关闭I2C控制器
I2cTransfer 自定义传输,I2c消息传输接口
SpiOpen 获取SPI设备句柄
SpiClose 释放SPI设备句柄
SpiRead 读取指定长度的数据
SpiWrite 写入指定长度的数据
SpiTransfer SPI数据传输接口
SpiSetCfg 根据指定参数,配置SPI设备
SpiGetCfg 获取SPI设备配置参数
/dev/ttyS0 第1个UART串口(Serial port)
...
/dev/ttyS200 第199个UART串口
UartOpen UART获取设备句柄
UartClose UART释放设备句柄
UartRead 从UART设备中读取指定长度的数据
UartWrite 向UART设备中写入指定长度的数据
UartGetBaud UART获取波特率
UartSetBaud UART设置波特率
UartGetAttribute UART获取设备属性
UartSetAttribute UART设置设备属性
UartSetTransMode UART设置传输模式
欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。
`欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。`
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案)
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......
/dev/lcd 液晶(LCD)显示屏
/dev/biometric/sensor0/fingerprint 第1个设备的第1个指纹传感器
/dev/biometric/sensor0/iris 第1个设备的第1个虹膜传感器
/dev/biometric/sensor0/retina 第1个设备的第1个视网膜传感器
/dev/biometric/sensor0/voiceprint 第1个设备的第1个声波传感器
/dev/biometric/sensor0/facial 第1个设备的第1个面部传感器
/dev/biometric/sensor0/hand 第1个设备的第1个手掌传感器
/dev/biometric/sensor1/fingerprint 第2个设备的第1个指纹传感器
/dev/biometric/sensor2/fingerprint 第3个设备的第1个指纹传感器
/dev/watchdog 看门狗(CONFIG_WATCHDOG)
/dev/watchdogs/0 第一只看门狗
...
/dev/watchdogs/n 第n-1只看门狗
WatchdogOpen 打开看门狗设备
WatchdogClose 关闭看门狗设备
WatchdogStart 启动看门狗
WatchdogStop 停止看门狗
WatchdogSetTimeout 设置看门狗超时时间
WatchdogGetTimeout 获取看门狗超时时间
WatchdogGetStatus 获取看门狗状态
WatchdogFeed 清除看门狗定时器(喂狗)
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。