Arm结构下 kernel是如何编译出zImage的。
2010-11-04 22:24
253 查看
首先要感谢一下这个帖子,给了我一点启发。
http://blog.csdn.net/pottichu/archive/2009/06/11/4261150.aspx
后来又发现个国外的帖子
http://book.opensourceproject.org.cn/embedded/embeddedprime/opensource/0136130550/ch05lev1sec1.html
make -f scripts/Makefile.build obj=arch/arm/boot MACHINE=arch/arm/mach-s3c6400/ arch/arm/boot/zImage
先是将vmlinux的某些段去掉了,生成了Image,比如.comment。
arm-linux-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S vmlinux arch/arm/boot/Image
Kernel: arch/arm/boot/Image is ready
然后用gzip压缩Image,成为piggy.gz。
gzip -f -9 < arch/arm/boot/compressed/../Image > arch/arm/boot/compressed/piggy.gz
GZIP arch/arm/boot/compressed/piggy.gz
这个生成piggy.o这么长?先是从piggy.S编译出来一个piggy.o。
arm-linux-gcc -Wp,-MD,arch/arm/boot/compressed/.piggy.o.d -nostdinc -isystem
/home/wyang2/test/usr/local/arm/4.4.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/include -D__KERNEL__
-Iinclude
-I/home/wyang2/test/linux-2.6.28.6/arch/arm/include -include include/linux/autoconf.h -mlittle-endian
-Iarch/arm/mach-s3c6400/include
-Iarch/arm/mach-s3c6410/include
-Iarch/arm/plat-s3c64xx/include
-Iarch/arm/plat-s3c/include -D__ASSEMBLY__ -mabi=aapcs-linux -mno-thumb-interwork -D__LINUX_ARM_ARCH__=6 -march=armv6k -mtune=arm1136j-s -msoft-float -gdwarf-2 -Wa,-march=all -c -o arch/arm/boot/compressed/piggy.o
arch/arm/boot/compressed/piggy.S
AS arch/arm/boot/compressed/piggy.o
话说我一直没找到piggy.o和piggy.gz的关系,原来在piggy.S文件里面。它把整个piggy.gz包含进去了,嚣张啊。
.section .piggydata,#alloc
.globl input_data
input_data:
.incbin "arch/arm/boot/compressed/piggy.gz"
.globl input_data_end
input_data_end:
下面是编译head.o, 没有看出有什么特别的地方
arm-linux-gcc -Wp,-MD,arch/arm/boot/compressed/.head.o.d -nostdinc -isystem
/home/wyang2/test/usr/local/arm/4.4.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/include -D__KERNEL__
-Iinclude -I/home/wyang2/test/linux-2.6.28.6/arch/arm/include -include include/linux/autoconf.h
-mlittle-endian -Iarch/arm/mach-s3c6400/include -Iarch/arm/mach-s3c6410/include -Iarch/arm/plat-s3c64xx/include
-Iarch/arm/plat-s3c/include -D__ASSEMBLY__ -mabi=aapcs-linux -mno-thumb-interwork
-D__LINUX_ARM_ARCH__=6 -march=armv6k -mtune=arm1136j-s -msoft-float -gdwarf-2 -Wa,-march=all
-c -o arch/arm/boot/compressed/head.o arch/arm/boot/compressed/head.S
AS arch/arm/boot/compressed/head.o
下面是编译misc.o 这个老长了
arm-linux-gcc -Wp,-MD,arch/arm/boot/compressed/.misc.o.d -nostdinc -isystem
/home/wyang2/test/usr/local/arm/4.4.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/include
-D__KERNEL__ -Iinclude -I/home/wyang2/test/linux-2.6.28.6/arch/arm/include
-include include/linux/autoconf.h -mlittle-endian -Iarch/arm/mach-s3c6400/include
-Iarch/arm/mach-s3c6410/include -Iarch/arm/plat-s3c64xx/include -Iarch/arm/plat-s3c/include
-Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common
-Werror-implicit-function-declaration -Os -marm -fno-omit-frame-pointer -mapcs -mno-sched-prolog
-mabi=aapcs-linux -mno-thumb-interwork -D__LINUX_ARM_ARCH__=6 -march=armv6k -mtune=arm1136j-s
-msoft-float -Uarm -Wframe-larger-than=1024 -fno-stack-protector -fno-omit-frame-pointer
-fno-optimize-sibling-calls -g -Wdeclaration-after-statement -Wno-pointer-sign -fpic -fno-builtin -Dstatic=
-D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(misc)" -D"KBUILD_MODNAME=KBUILD_STR(misc)"
-c -o arch/arm/boot/compressed/misc.o arch/arm/boot/compressed/misc.c
;
CC arch/arm/boot/compressed/misc.o
根据head.o piggy.o misc.o 编译成
compressed/vmlinux
arm-linux-ld -EL --defsym zreladdr=0x50008000 --defsym params_phys=0x50000100 -p --no-undefined -X /usr/local/arm/4.4.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/libgcc.a -T arch/arm/boot/compressed/vmlinux.lds arch/arm/boot/compressed/head.o
arch/arm/boot/compressed/piggy.o arch/arm/boot/compressed/misc.o -o arch/arm/boot/compressed/vmlinux
LD arch/arm/boot/compressed/vmlinux
#@make -f scripts/Makefile.build obj=arch/arm/boot/compressed arch/arm/boot/compressed/vmlinux
用vmlinux去掉一些符号,生成了 zImage。
arm-linux-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S arch/arm/boot/compressed/vmlinux arch/arm/boot/zImage
http://blog.csdn.net/pottichu/archive/2009/06/11/4261150.aspx
后来又发现个国外的帖子
http://book.opensourceproject.org.cn/embedded/embeddedprime/opensource/0136130550/ch05lev1sec1.html
make -f scripts/Makefile.build obj=arch/arm/boot MACHINE=arch/arm/mach-s3c6400/ arch/arm/boot/zImage
先是将vmlinux的某些段去掉了,生成了Image,比如.comment。
arm-linux-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S vmlinux arch/arm/boot/Image
Kernel: arch/arm/boot/Image is ready
然后用gzip压缩Image,成为piggy.gz。
gzip -f -9 < arch/arm/boot/compressed/../Image > arch/arm/boot/compressed/piggy.gz
GZIP arch/arm/boot/compressed/piggy.gz
这个生成piggy.o这么长?先是从piggy.S编译出来一个piggy.o。
arm-linux-gcc -Wp,-MD,arch/arm/boot/compressed/.piggy.o.d -nostdinc -isystem
/home/wyang2/test/usr/local/arm/4.4.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/include -D__KERNEL__
-Iinclude
-I/home/wyang2/test/linux-2.6.28.6/arch/arm/include -include include/linux/autoconf.h -mlittle-endian
-Iarch/arm/mach-s3c6400/include
-Iarch/arm/mach-s3c6410/include
-Iarch/arm/plat-s3c64xx/include
-Iarch/arm/plat-s3c/include -D__ASSEMBLY__ -mabi=aapcs-linux -mno-thumb-interwork -D__LINUX_ARM_ARCH__=6 -march=armv6k -mtune=arm1136j-s -msoft-float -gdwarf-2 -Wa,-march=all -c -o arch/arm/boot/compressed/piggy.o
arch/arm/boot/compressed/piggy.S
AS arch/arm/boot/compressed/piggy.o
话说我一直没找到piggy.o和piggy.gz的关系,原来在piggy.S文件里面。它把整个piggy.gz包含进去了,嚣张啊。
.section .piggydata,#alloc
.globl input_data
input_data:
.incbin "arch/arm/boot/compressed/piggy.gz"
.globl input_data_end
input_data_end:
下面是编译head.o, 没有看出有什么特别的地方
arm-linux-gcc -Wp,-MD,arch/arm/boot/compressed/.head.o.d -nostdinc -isystem
/home/wyang2/test/usr/local/arm/4.4.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/include -D__KERNEL__
-Iinclude -I/home/wyang2/test/linux-2.6.28.6/arch/arm/include -include include/linux/autoconf.h
-mlittle-endian -Iarch/arm/mach-s3c6400/include -Iarch/arm/mach-s3c6410/include -Iarch/arm/plat-s3c64xx/include
-Iarch/arm/plat-s3c/include -D__ASSEMBLY__ -mabi=aapcs-linux -mno-thumb-interwork
-D__LINUX_ARM_ARCH__=6 -march=armv6k -mtune=arm1136j-s -msoft-float -gdwarf-2 -Wa,-march=all
-c -o arch/arm/boot/compressed/head.o arch/arm/boot/compressed/head.S
AS arch/arm/boot/compressed/head.o
下面是编译misc.o 这个老长了
arm-linux-gcc -Wp,-MD,arch/arm/boot/compressed/.misc.o.d -nostdinc -isystem
/home/wyang2/test/usr/local/arm/4.4.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/include
-D__KERNEL__ -Iinclude -I/home/wyang2/test/linux-2.6.28.6/arch/arm/include
-include include/linux/autoconf.h -mlittle-endian -Iarch/arm/mach-s3c6400/include
-Iarch/arm/mach-s3c6410/include -Iarch/arm/plat-s3c64xx/include -Iarch/arm/plat-s3c/include
-Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common
-Werror-implicit-function-declaration -Os -marm -fno-omit-frame-pointer -mapcs -mno-sched-prolog
-mabi=aapcs-linux -mno-thumb-interwork -D__LINUX_ARM_ARCH__=6 -march=armv6k -mtune=arm1136j-s
-msoft-float -Uarm -Wframe-larger-than=1024 -fno-stack-protector -fno-omit-frame-pointer
-fno-optimize-sibling-calls -g -Wdeclaration-after-statement -Wno-pointer-sign -fpic -fno-builtin -Dstatic=
-D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(misc)" -D"KBUILD_MODNAME=KBUILD_STR(misc)"
-c -o arch/arm/boot/compressed/misc.o arch/arm/boot/compressed/misc.c
;
CC arch/arm/boot/compressed/misc.o
根据head.o piggy.o misc.o 编译成
compressed/vmlinux
arm-linux-ld -EL --defsym zreladdr=0x50008000 --defsym params_phys=0x50000100 -p --no-undefined -X /usr/local/arm/4.4.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/libgcc.a -T arch/arm/boot/compressed/vmlinux.lds arch/arm/boot/compressed/head.o
arch/arm/boot/compressed/piggy.o arch/arm/boot/compressed/misc.o -o arch/arm/boot/compressed/vmlinux
LD arch/arm/boot/compressed/vmlinux
#@make -f scripts/Makefile.build obj=arch/arm/boot/compressed arch/arm/boot/compressed/vmlinux
用vmlinux去掉一些符号,生成了 zImage。
arm-linux-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S arch/arm/boot/compressed/vmlinux arch/arm/boot/zImage
相关文章推荐
- HTC Kaiser 编译Android Kernel zImage
- DragonBoard 410 c debian'kernel 编译以及如何自动加载自定义驱动程序
- 如何在arm linux kernel(内核)中添加系统调用
- 如何用Xcode 4.5 编译支持 armv6 CPU及iOS 4.3以前的版本
- arm-linux-gcc在编译应用程序时,如何查找默认的头文件路径
- kernel 启动过程之一, uimge, zimage,arch/arm/boot/compressed/head.S
- 如何在configure时,将编译参数传入,改变默认的编译器gcc成arm-linux-gcc
- 二:【nopcommerce系列】Nop的文件结构,引用关系。如何编译打包部署等
- 如何下载编译android kernel 3.4
- linux下如何利用QtCreator编译ARM版本的Qt程序
- kernel 启动过程之一, uimge, zimage,arch/arm/boot/compressed/head.S
- kernel编译生成Image zImage uImage的区别
- 如何用Xcode 4.5 编译支持 armv6 CPU及iOS 4.3以前的版本
- export CROSS_COMPILE=arm-linux-gnueabi- 之后,无法编译kernel
- linux下如何利用QtCreator编译ARM版本的Qt程序
- 嵌入式 内核编译总是遇到make: ***/root/build_kernel/linux-2.6.14.1/arch/arm 是目录
- 图解如何将Ubuntu上的Qt程序交叉编译出可在ARM平台运行的程序(五部曲)
- kernel编译生成Image zImage uImage的区别
- 如何将mongodb-c-driver交叉编译到ARM平台
- 如何编译linux第一个模块 hellomod.ko 分类: arm-linux-Ubuntu 2013-07-22 16:30 286人阅读 评论(0) 收藏