快速业务通道

Linux驱动的地址空间和硬件地址空间说明

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-13

作者:李强,华清远见嵌入式学院讲师.

有这么几个问题,在上驱动课程的时候,我感觉一直困扰着同学们:

● 用户程序编译连接形成的地址空间在什么范围内?
● 内核编译后地址空间在什么范围内?
● 要对外设进行访问,I/O的地址空间又是什么样的?

于是就有了这篇文章,从大概上把内存相关知识点介绍一下,减少同学们在驱动课时对内存的困惑

先回答第一个问题.Linux最常见的可执行文件格式为elf(Executable and Linkable Format).在elf格式的可执行代码中,ld总是从0x8000000开始安排程序的“代码段”,对每个程序都是这样.至于程序执行时在物理内存中的实际地址,则由内核为其建立内存映射时临时分配,具体地址取决于当时所分配的物理内存页面.

我们可以用Linux的实用程序obj对你的程序进行反汇编,从而知晓其地址范围.

例如:假定我们有一个简单的C程序Hello.c

# include <stdio.h>
greeting ( )
{
printf(“Hello,world!n”);
}
main()
{
greeting();
}

把这样简单的程序写成两个函数,是为了说明指令的转移过程.我们用gcc和ld对其进行编译和连接,得到可执行代码hello.然后,用Linux的实用程序obj对其进行反汇编:
$obj –d hello

得到的主要片段为:

08048568 <greeting>:
8048568: pushl

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号