Chinaunix首页 | 论坛 | 博客
  • 博客访问: 108901
  • 博文数量: 58
  • 博客积分: 67
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-21 13:20
文章分类

全部博文(58)

文章存档

2014年(4)

2013年(54)

我的朋友

分类: LINUX

2013-08-15 19:06:36

原文地址:kallsyms系统编译过程 作者:alloysystem

kallsyms系统编译过程

内核中有一个kallsyms的模块,这个模块记录了内核非栈变量的地址,包括变量和函数。第二节主要说一下kallsyms是如何形成的。对于编译系统的介绍为什么要说到kallsyms呢?因为kallsyms涉及到最后链接得到vmlinux。在第一节的图解内核编译系统中,组成vmlinux的五个部分中就有kallsyms.o这个组件。

1、首先,链接器将内核的绝大部分组件链接成.tmp_vmlinux1的文件

/usr/local/arm/3.4.1/bin/arm-linux-ld -EL  -p --no-undefined -X -o .tmp_vmlinux1

-T arch/arm/kernel/vmlinux.lds

arch/arm/kernel/head.o arch/arm/kernel/init_task.o  

init/built-in.o

 --start-group  

usr/built-in.o  

arch/arm/kernel/built-in.o  

arch/arm/mm/built-in.o  

arch/arm/common/built-in.o  

arch/arm/mach-s3c2410/built-in.o  

arch/arm/nwfpe/built-in.o  

kernel/built-in.o  

mm/built-in.o  

fs/built-in.o  

ipc/built-in.o  

security/built-in.o  

crypto/built-in.o  

lib/lib.a  

arch/arm/lib/lib.a  

lib/built-in.o  

arch/arm/lib/built-in.o  

drivers/built-in.o  

sound/built-in.o  

net/built-in.o

--end-group


2、使用nm命令将.tmp_vmlinux1中符号和相对的地址导出来,并使用kallsyms工具生成一个tmp_kallsyms1.S的文件

/usr/local/arm/3.4.1/bin/arm-linux-nm -n .tmp_vmlinux1 | scripts/kallsyms  > .tmp_kallsyms1.S


3、对.tmp_kallsyms1.S文件进行编译操作生成.tmp_kallsyms1.o文件

/usr/local/arm/3.4.1/bin/arm-linux-gcc -Wp,-MD,./..tmp_kallsyms1.o.d -D__ASSEMBLY__ -mapcs-32 -mno-thumb-interwork -D__LINUX_ARM_ARCH__=4 -march=armv4 -mtune=arm9tdmi -msoft-float   -nostdinc -isystem /usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/include -D__KERNEL__ -Iinclude  -mlittle-endian    -c -o .tmp_kallsyms1.o .tmp_kallsyms1.S


4、重复1的链接过程,这次将3过程中得到的.tmp_kallsyms1.o文件链接进入内核得到.tmp_vmlinux2文件

/usr/local/arm/3.4.1/bin/arm-linux-ld -EL  -p --no-undefined -X -o .tmp_vmlinux2

-T arch/arm/kernel/vmlinux.lds

arch/arm/kernel/head.o

arch/arm/kernel/init_task.o  

init/built-in.o

--start-group  

usr/built-in.o  

arch/arm/kernel/built-in.o  

arch/arm/mm/built-in.o  

arch/arm/common/built-in.o  

arch/arm/mach-s3c2410/built-in.o  

arch/arm/nwfpe/built-in.o  

kernel/built-in.o  

mm/built-in.o  

fs/built-in.o  

ipc/built-in.o  

security/built-in.o  

crypto/built-in.o  

lib/lib.a  

arch/arm/lib/lib.a  

lib/built-in.o  

arch/arm/lib/built-in.o  

drivers/built-in.o  

sound/built-in.o  

net/built-in.o

--end-group

.tmp_kallsyms1.o



5、使用nm命令将.tmp_vmlinux2中符号和相对的地址导出来,并使用kallsyms工具生成一个tmp_kallsyms2.S的文件

/usr/local/arm/3.4.1/bin/arm-linux-nm -n .tmp_vmlinux2 | scripts/kallsyms  > .tmp_kallsyms2.S


6、对.tmp_kallsyms2.S文件进行编译操作生成.tmp_kallsyms2.o文件

/usr/local/arm/3.4.1/bin/arm-linux-gcc -Wp,-MD,./..tmp_kallsyms2.o.d -D__ASSEMBLY__ -mapcs-32 -mno-thumb-interwork -D__LINUX_ARM_ARCH__=4 -march=armv4 -mtune=arm9tdmi -msoft-float   -nostdinc -isystem /usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/include -D__KERNEL__ -Iinclude  -mlittle-endian    -c -o .tmp_kallsyms2.o .tmp_kallsyms2.S


7、最后将.tmp_kallsyms2.o作为kallsyms模块链接进入内核,形成vmlinux文件


阅读(734) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~