0
点赞
收藏
分享

微信扫一扫

1614_MIT 6.828_x86中在linux环境下访问IO映射的硬件


​​GreyZhang/g_unix: some basic learning about unix operating system. (github.com)​​

         开始了JOS代码的分析,涉及到了一部分外设访问的代码。因此,从网络上找了一点文章简单了解了一下。

1614_MIT 6.828_x86中在linux环境下访问IO映射的硬件_linux

1. 在X86架构之中有一些架构规定了的外设,访问这些外设可以通过8bit、16bit、32bit的方式进行端口地址的访问。

2. 在X86架构中,标准化了一些外设。比较典型的有DMA、Timer、RTC、串口、并行口、PCI等。具体Linux的机器支持哪些外设,可以从/proc/ioports文件中查看。

1614_MIT 6.828_x86中在linux环境下访问IO映射的硬件_unix_02

         这里列举了串口的相关信息,对应的地址范围是0x3FB到0x3FF。但是支持串口收发功能,还涉及到收发器的硬件。这个跟我现在接触的嵌入式倒是有几分类似,通信外设有很多得借助于收发器才能够实现正常的通信。

1614_MIT 6.828_x86中在linux环境下访问IO映射的硬件_运维_03

1. 这里提到的串口所占据的几个地址,从表格中看每一个地址都有16bit有效信息才合理,但是前面只有8个字节的空间,究竟是如何来看待这样的设计一时间没有考虑明白。从通用性上考虑,虽然这文章中没看到具体的说明。

2. 这样的IO访问需要调用汇编指令,而在Linux的环境下提供了C语言封装的接口提供更方便的访问。

1614_MIT 6.828_x86中在linux环境下访问IO映射的硬件_服务器_04

         如何能够快速体验一下这种外设访问的效果?自然还是一个点灯程序。这里的点灯程序还是借助于串口的接口来实现的,对于里面的一个控制线进行了周期性翻转。

1614_MIT 6.828_x86中在linux环境下访问IO映射的硬件_服务器_05

         从这段代码看,系统提供了延时的功能。肯定比初级新手的死循环来的好用的多!另外,这里的确是使用了Linux的一些支持功能,从包含的头文件就可以看得出来。在代码中,通过宏定义可以看得出来操作的是串口的LCR。

         大概看了这篇文章后又回去看JOS的源代码,发现还是有点生硬。JOS毕竟不是Linux,少了很多支持文件,所提供的的代码更加“硬核”,阅读难度还是大了一些。这些解读,后续整理JOS代码分析的时候再说了。

举报

相关推荐

0 条评论