嵌入式Linux中文站

开发专区

虚拟地址转换为物理地址

虚拟地址转换为物理地址

阅读(135)

应用程序只能提供一个虚拟地址,也可以通过如下方法获取物理地址,当然得调用驱动。 Linux采用页表的概念来管理虚拟空间,内核在处理虚拟地址时都必须将其转换为物理地址,然后处理器才能够访问。虚拟地址可以通过Linux的页表操作宏逐层查找到物理地址,简单来说需要将虚拟地址分段,每段地址都作为索引指向页表,最后一级页表指向物理地址。 Linux在2.6.11以后版本为了兼容各种处理器,采用四级页表结构: PGD:Page Global Directory,页全局目录,是顶级页表。 PUD:Page Upper ...

GCC制作动态库导出符号表

GCC制作动态库导出符号表

阅读(149)

GCC制作动态链接库时默认会将所有的函数及变量都导出到符号表,这里的函数及变量指的是没有使用static修饰的,使用static修饰的函数及变量不会导出。正常情况下所有符号均导出是不会有问题的,但是有时会有问题,在下边的例子中会说明。为了避免这种情况,就需要定制符号表,即仅仅将需要提供给其他模块使用的接口或变量导出到符号表,本文就是介绍制作这样的动态库的方法。 一 问题示例 介绍制作方法前先举例说明其必要性,有两个动态库libhello.so及libhello1.so,对应的源文件是hello.c及hel...

GCC 符号表小结

GCC 符号表小结

阅读(154)

1) 如何生成不含符号表的目标文件 ? #一个方式是编译的时候使用 选项 s root@root2768:~/test_cgcc -s test1.c root@root2768:~/test_c objdump -t a.out a.out: file format elf64-x86-64 SYMBOL TABLE: no symbols # 另外一个方式是,生成目标文件以后,使用strip命令从目标文件中去掉符号表 root@root2768:~/test_c gcc test1.c root@ro...

Linux Makefile 生成 *.d 依赖文件及 gcc -M -MF -MP 等相关选项说明

Linux Makefile 生成 *.d 依赖文件及 gcc -M -MF -MP 等相关选项说明

阅读(81)

1. 为什么要使用后缀名为 .d 的依赖文件? 在 Makefile 中, 我们的依赖关系可能需要包含一系列的头文件。 比如 main.c 源文件内容如下: # include stdio.h # include defs.h int main ( int argc, char *argv[]) { printf ( Hello, %s!\n , NAME); return 0 ;} defs.h 头文件如下: # ifndef _DEFS_H_ # define _DEFS_H_ # define NA...

Linux 指定运行时动态库路径

Linux 指定运行时动态库路径

阅读(63)

众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/ lib 。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库, 并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函 数,以及该动态库的其它资源了。在 Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定。 方法一:在配置文件 /etc/ld.so.conf 中指定动态库搜索路径。每次编辑完该文件...

Linux动态库的编译与使用

Linux动态库的编译与使用

阅读(86)

Linux下的动态库以.so为后缀,我也是初次在Linux下使用动态库,写一点入门步骤,以便以后能方便使用。第一步:编写Linux程序库文件1.动态库接口文件 // 动态库接口文件getmaxlen.h #ifndef _GETMAXLEN_H_ #define _GETMAXLEN_H_ int getMaxLen( int *sel, int N); #endif 文件2.动态库程序实现文件 // 动态库程序实现文件getmaxlen.c #include getmaxlen.h int getMax...

Linux内存分配小结--malloc、brk、mmap

Linux内存分配小结--malloc、brk、mmap

阅读(118)

Linux 的虚拟内存管理有几个关键概念: 1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址; 2、虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物理地址进行映射,获得真正物理地址; 3、如果虚拟地址对应物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如果此时物理内存已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。 基于以上认识,进行了如下分析: 一、Linux 虚拟地址空间如何分布? Linux 使用虚拟地址空间,大大增加了进...

Linux内核驱动之延时---内核超时处理

Linux内核驱动之延时---内核超时处理

阅读(156)

jiffies计数器 定时器中断由系统定时硬件以规律地间隔产生;这个间隔在启动时由内核根据HZ值来编程, HZ是一个体系依赖的值,每次发生一个时钟中断,一个内核计数器的值递增.这个计数器在系统启动时初始化为0,因此它代表从最后一次启动以来的时钟嘀哒的数目. 这个计数器和来读取它的实用函数位于,尽管你会常常只是包含, #include unsigned long j, stamp_1, stamp_half, stamp_n; j = jiffies; /* read the current value *...