编译进内核的驱动创建的设备文件放在哪儿?

[复制链接]
查看11 | 回复5 | 2021-1-27 05:20:40 | 显示全部楼层 |阅读模式
内核启动的时候还没有加载文件系统,这之前加载的驱动创建的设备文件放在哪儿呢?
加载文件系统之后为什么在/sys下面可以看到这些文件呢?是从别处拷贝过来的?
求大神出现!!!
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:20:40 | 显示全部楼层
基于内存的devtmpfs?
回复

使用道具 举报

千问 | 2021-1-27 05:20:40 | 显示全部楼层
你可以简单看一下Linux设备驱动模型,里边有讲解!
回复

使用道具 举报

千问 | 2021-1-27 05:20:40 | 显示全部楼层
如果你之前是动态(用键盘键入命令)加载的驱动的话,那么你加载文件系统之后是看不见的,因为那些驱动在你关闭电源后消失了;
如果你把驱动事先直接编译(这是重点)进了内核,也就是你写的代码已经成为内核程序的一部分了保存在硬盘上了,那么加载内核和文件系统的同时,自然也会加载进你原先写的驱动。所以就会在/sys下面看到这些设备文件了。

回复

使用道具 举报

千问 | 2021-1-27 05:20:40 | 显示全部楼层
按照规则,设备文件都在/dev目录下,下面也许还有子目录,看你自己的驱动是怎么组织的,当然如果你不想遵守规则,mknod时也可以自己找个地方放。
回复

使用道具 举报

千问 | 2021-1-27 05:20:40 | 显示全部楼层
这个问题主要看气质!!
在内核启动时会给动态加载的模块分配相应的内存,动态加载的驱动属于模块,其就存放在那里,具体地址为:
(PAGE_OFFSET-PMD_SIZE)到PAGE_OFFSET区域的虚拟地址.
初始化内核时bootmemallocator分配器会初始化上面区域对应的页表,并给页表写入相应的值.
其值为可用物理内存顶部往下分配.
memblock.memory.regions[0].base+memblock.memory.regions[0].size的顶部往下的物理内存区域.
这个问题真的是看气质的!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行