我曾经读到过,微内核架构的一个优点是您可以停止/启动网络和文件系统等基本服务,而无需重新启动整个系统。但是考虑到如今的 Linux 内核(是否总是如此?)提供了使用模块来实现相同效果的选项,微内核的(剩余)优势是什么?
让我们假设一个 Linux 系统已启动并正常运行的场景。用户来了并热插拔了 USB 存储设备。
发生的事件顺序如下图所示:
modprobe 在哪里加载它的驱动程序?所请求设备的驱动程序是/sys/bus/drivers在 modprobe 加载之后还是之前找到的?
我在这里试图建立的是/sys/上图中的条目和发生的事件之间的关系。
据我所知,内核检测硬件,将信息添加到 sysfs 在 /dev 中创建一个设备,然后生成一个 udev 事件。我的问题是,设备驱动程序是做所有这些还是内核本身?如果驱动程序这样做,那么他们将知道设备主要和次要编号以在 devtmps 中创建文件。
我也明白(可能是错误的)是 udev 调用 modprobe 来加载处理设备的驱动程序。
有人告诉我,他们使用 MODALIAS uevent 环境变量的内容来执行此操作,从而加载别名与此字符串匹配的所有模块(正确的驱动程序)。简而言之:linux中硬件检测的步骤是什么,谁执行每一步:内核本身,内核内部的驱动程序或用户空间中的udev。谢谢。
我已经安装了一个带有两个串行端口和一个并行端口的 PCI 卡。芯片组是MCS9865。我从这里下载了最新的驱动程序(V1.0.12)。我跑make和make install。现在两个串口是/dev/ttyD0和/dev/ttyD1。我已经对它们进行了测试,picocom并且运行良好。问题是,当我重新启动系统时,没有/dev/ttyD0和/dev/ttyD1。我需要做另一个make install。有什么解决办法吗?
输出lspci -v显示:
03:01.0 Serial controller: NetMos Technology PCI 9865 Multi-I/O Controller (prog-if 02 [16550])
Subsystem: Device a000:1000
Flags: bus master, medium devsel, latency 32, IRQ 19
I/O ports at df00 [size=8]
Memory at fbeff000 (32-bit, non-prefetchable) [size=4K]
Memory at fbefe000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [48] Power Management version 2
Kernel driver in use: …Run Code Online (Sandbox Code Playgroud)