Linux内核源代码存放路径解析

linux 设备树位置

说实话,设备树的位置确实很有趣;这取决于你达到的水平。
当我使用 ARM 板时,第一个头痛的是如何将 .dts 文件转换为内核可用的 .dtb。

以ARM架构为例。
我当时正在做的S5 PV2 1 0开发板。
设备树源文件(.dts格式)必须位于内核源代码的/arch/arm/boot/dts/目录下。
具体文件名通常为exynos5 -dt.dts,后跟.dts后缀。
CPU型号;内存大小;它使用节点和属性编写为 HTML 来定义各种硬件,如 I2 C 接口和连接的传感器等。
无论如何,所有硬件配置都必须清楚地编写。
当我第一次查看这些 .dts 文件时,@ 符号和 ;。
当时我真的很困惑,觉得它比C代码更难理解。

需要明确的是,这些.dts文件只是编译前的描述,只有编译后它们才能成为.dtb。
我记得编译命令是make dtbs。
编译后,.dtb文件位于/arch/arm/boot/dts/下;但它被移动到/boot/dtb/。
这个.dtb是二进制的,Bootloader(我们当时在U-Boot中使用的)会在启动时读入内存。

有趣的是,在引导加载程序加载内核映像后,这个.dtb会添加到新引导的内核中将会到达。
具体来说,内核启动代码中有一个函数可以解析.dtb并读取其中包含的硬件信息。
然后,驱动程序可以使用此信息来了解在哪里可以找到该设备以及如何启动它。
当我调试时,内核启动并报告错误,指出无法找到 UART0 的设备节点。
最后,我意识到我忘记在 .dtb 中添加该节点的描述,因此我更改了它并修复了它。

系统运行后,还可以从根文件系统访问设备树信息。
具体路径为/proc/device-tree/。
此目录结构与 .dts 文件中定义的完全相同。
我通常使用/proc/device-tree/model。
只需查看设备型号即可。
例如,如果 /proc/device-tree/model 显示 Exynos5 4 4 0 RevA;你就会知道它是什么芯片。
/proc/device-tree/兼容非常有用。
它列出了与硬件匹配的ID,并且在调试驱动程序时经常被引用。

但最令人兴奋的是内核将设备树直接映射到内存。
我后来经常使用这个技巧,尤其是在实时系统上工作时。
启动内核后,设备树数据直接位于内存中,驱动程序可以通过内存地址和文件系统直接访问它无需每次都阅读。
我的一个项目是一款工控板,要求响应速度非常高。
使用内存映射后,调试性能更高。

所以你看;新设备的位置跨越整个生命周期:.dts在开发过程中内核源代码发生变化; .dtb在启动时位于启动映像中,运行时信息位于/proc/device-tree/中,也可以直接从内存访问内核。
这样的设计确实很灵活,而且还融入了Linux的思想——硬件是如何为了方便而开发的。
但话虽如此,我认为设备树语法有点令人困惑。
我自己没有做过这方面的RISC-V设备树,但是资料上说了新的技巧。

linux内核在哪个目录

Linux内核文件通常位于系统根目录的/boot文件夹中。
核心文件一般称为vmlinuz或bzImage,例如vmlinuz-5 .1 8 .1 4 唯一的名称与内核版本有关。
这些文件是压缩的内核映像,其中包含运行操作系统所需的核心代码和硬件驱动程序。
内核的主要作用和功能主要有以下几点:
1 .资源管理:内核是系统资源的管理者。
它负责分配CPU时间、内存空间和磁盘I/O等资源,以确保在多任务环境中高效运行。
例如,根据 2 01 9 年 Linux 基金会的调查,Linux 用户占当时服务器市场的 5 0% 以上。
2 、硬件控制:通过设备驱动程序管理硬件,管理键盘、控制器、网卡等外设,过滤硬件差异,提供统一的接口。
之前安装系统时,显卡驱动安装不正确,导致黑屏。
这就是原因。
3 、进程和内存管理:调度进程的执行顺序,管理虚拟内存,保证系统的稳定性和安全性。
我在修复计算机时经常看到内存不足的错误,内核一直在帮助修复这些错误。

用户如何与内核交互?可以通过以下操作提高内核性能:
1 编译新内核:当需要支持新硬件时,例如2 02 0年发布的新显卡,编译内核源代码以创建编译后的vmlinuz文件来替换原始内核。
我花了整整3 个小时才完成设置,CPU温度升至9 0度。
2 .调整内核参数:修改/etc/sysctl.conf文件或使用sysctl命令动态调整内核行为。
例如,调整网络吞吐量和文件系统缓存大小。
我调整了网络参数,网速确实很快。
3 、安装内核模块:使用modprobe命令动态加载或卸载驱动模块,扩展硬件支持。
当我安装打印机时,我使用这个命令来安装驱动程序。

注意:直接修改内核文件时要小心。
如果操作错误,系统可能无法启动。
建议先备份/boot/vmlinuz-old version等原始内核文件,然后升级或更改配置。
普通用户最好使用包管理器来更新内核(如 Apt 或 Yum),而不是手动编译它们。
表弟尝试安装内核,结果却是系统蓝屏,非常可怕。