找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 服务器 Linux/BSD 查看内容

linux内核分析二

2009-12-20 13:33| 发布者: admin| 查看: 43| 评论: 0|原作者: 云忆

关于do_IRQ和虚拟内存
进程的虚拟

独立的地址空间(32位,4GB),每个进程一个


空间,3G以下是用户空间
4G的进程地址空间使用进程私有的二级页表进行地址转换(虚拟地址à物理地址)
每创建一个进程就给它分配4G的空间供它使用,4G=32位=10位的页目录 10位的页表 12位的页框。当找页中的某个项时会先根据它的高10位找到它在页目录中的位置,根据该值再找到页表,然后根据中间10位定位到哪张页,然后在根据后12位的内容找到具体的项。
熬不住了,睡觉,明天继续!
接着昨天的话题,继续,妈的,现在越来越起不早了。
GNU Tools
Gcc –o test test.c –V:列出所有的编译信息
Gcc –E –o test.cpp test.c:输出预处理

,并链接符号引用,最终形成一个可执行文件。通常,建立一个新编译程序的最后一步就是调用ld
nm列出目标文件中的符号
objcopy把一种目标文件中的内容复制到另一种类型的目标文件中
objdump显示一个或者更多目标文件的信息。使用选项来控制其显示的信息。它所显示的信息通常只有编写编译工具的人才感兴趣
ranlib产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件
readelf显示ebf格式可执行文件的信息
size列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出
strings打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n

程序的时候也会用到它,比如objdump.Opcodes是文本格式可读的处理器操作指令
libbfd二进制文件描述库
*******************************************************************************
使用AR建立一个新的库文件的过程。
假设现在有两个文件:add.c,sub.c
Int add(int a,int b){
Return a b;
}
Int sub(int a,int b){
Return a-b;
}
第一步:先分别编译出它们的目标文件
Gcc –c add.c sub.cà这样就会有了add.o,sub.o
第二步:使用AR将上面的目标文件包含进来建立库文件
Ar rv libtest.a add.o sub.o
其中,R表示将多个文件连接成一个文件,V表示在屏幕上显示出来,这样就连接出了一个叫做libtest.a的库文件
第三步:使用root权限将libtest.a的库文件剪切到/usr/lib中
Cp libtest.a /usr/lib
第四步:使用,此时写一个简单的程序测试下test.c
#include
Int main(int argc,char **argv){
Int x=1;
Int y=6;
Printf(“%d\n”,add(x,y));
Printf(“%d\n”,sub(x,y));
Exit(0);
}
第五步:编译下试试好不好使
Gcc –o test test.c –ltest
-ltest是指明把libtest链接进来,就像是我们使用libmysqlclient这样的动态链接库中的API一样,要把库文件在编译时动态的链接进来。
结果显示:7\n-5
至此,相信你应该学会怎么写所谓的NB的“动态链接库”了吧!
*******************************************************************************
nm的主要

最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 11:27 , Processed in 0.247031 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.