我基本上试图在我正在开发的新硬件上为不同的操作系统实现类似的操作.任何帮助将非常感激.
[编辑]
感谢您的回复和链接.所以这里是我现在实施的.这应该让你知道我在哪里去.
我查找了我针对的特定系统的硬件参考手册,并写了一些代码来监视/修改我感兴趣的外设的信号/引脚,即从命令行打开/关闭它们.现在收集这些时钟/信号一起控制外设.人力资源管理部门会说,如果要打开UART或某些东西,然后打开这样的信号/引脚.而@BjoernD是的,我正在使用像mmap()函数来与外设交谈.
我的问题的肉是我想了解使用我已经写的实用程序的时钟/外设管理器的设计和实现.这个时钟/外设管理器将允许我控制启用/禁用我想要的外设.通常这个管理器将使我能够更改正在运行的init代码.此外,在运行时间过程中,可以调用此管理器来打开/关闭设备,从而优化功耗.这可能没有完美的意义,但我自己正试图围绕着这一切.
现在我确信这样的东西可以在Linux中实现,或者任何操作系统都能执行性能问题(没有人会想通过在启动时打开所有外设来浪费电力).我想了解它的软件架构.从任何操作系统的参考将直到现在得到一个开始.另外我还没有写我自己的操作系统,有一个操作系统,但是我更多地看到一个板级软件又称BSP来工作.但是感谢操作系统链接,他们真的很好.欣赏它
谢谢!
解决方法
>中断允许设备通知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