Linux内核中的硬件时钟信号实现

我正在看一些指针,了解 Linux内核如何实现各种硬件时钟的设置.这主要涉及设置LCD,UART等硬件功能的各种时钟的使用.例如,当Linux启动时,如何处理为UART或USB设置时钟.也许像时钟经理或什么东西.

我基本上试图在我正在开发的新硬件上为不同的操作系统实现类似的操作.任何帮助将非常感激.

[编辑]
感谢您的回复和链接.所以这里是我现在实施的.这应该让你知道我在哪里去.

我查找了我针对的特定系统的硬件参考手册,并写了一些代码来监视/修改我感兴趣的外设的信号/引脚,即从命令行打开/关闭它们.现在收集这些时钟/信号一起控制外设.人力资源管理部门会说,如果要打开UART或某些东西,然后打开这样的信号/引脚.而@BjoernD是的,我正在使用像mmap()函数来与外设交谈.

我的问题的肉是我想了解使用我已经写的实用程序的时钟/外设管理器的设计和实现.这个时钟/外设管理器将允许我控制启用/禁用我想要的外设.通常这个管理器将使我能够更改正在运行的init代码.此外,在运行时间过程中,可以调用此管理器来打开/关闭设备,从而优化功耗.这可能没有完美的意义,但我自己正试图围绕着这一切.

现在我确信这样的东西可以在Linux中实现,或者任何操作系统都能执行性能问题(没有人会想通过在启动时打开所有外设来浪费电力).我想了解它的软件架构.从任何操作系统的参考将直到现在得到一个开始.另外我还没有写我自己的操作系统,有一个操作系统,但是我更多地看到一个板级软件又称BSP来工作.但是感谢操作系统链接,他们真的很好.欣赏它

谢谢!

解决方法

您想要实现的是高度专注于a)您正在使用的平台,以及b)要使用的设备.例如,在x86上有3种方式与设备进行通信:

>中断允许设备通知CPU. OS通常提供寄存中断处理程序的机制 – 在发生中断时调用的函数.在Linux中,请参阅request_irq()和linux / include / interrupt.h中的朋友
>内存映射I / O是设备的物理内存,平台的BIOS可以以与访问普通物理内存相同的方式提供,只需通过写入内存地址即可.这种存储器之后究竟是什么(例如,网络接口配置寄存器或LCD帧缓冲器)取决于设备,并且通常在设备的数据表中指定.
> I / O端口可通过特殊地址空间和特殊指令(INB / OUTB& co.)访问.除了它们的工作类似于I / O内存.

有多种方法可以找出设备的资源和BIOS映射的位置.一些平台使用ACPI表(google自己为1,000k页面规格),PCI通过PCI配置空间以标准化方式提供设备信息,USB具有类似的方式来发现连接到总线的设备,以及一些设备,例如UARTS,被简单地指定为在您的平台固定的预配置I / O范围内可用.

作为理解Linux的开始,我建议您使用“Understanding the Linux kernel”.有关Linux如何处理设备以及写入驱动程序的具体内容,请查看Linux Device Drivers.此外,您将需要查看平台的特性和您要驱动的设备.

如果要启动自己的操作系统,那么UART肯定是有助于打印调试输出的东西,所以你可能想要首先执行.

现在我记下了这一切,似乎你的实际问题是:如何开始操作系统设计.这个问题对你来说应该是非常有价值的:How to get started in operating system development

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...