LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1283|回复: 1

内核配置时设置 内核从ROM中启动, 这个对编译出来的内核有什么影响,会影响生成内核

[复制链接]
发表于 2007-4-3 12:51:56 | 显示全部楼层 |阅读模式
内核配置时设置 内核从ROM中启动, 这个对编译出来的内核有什么影响,会影响生成内核的哪些参数???

我编译的关于 S3C4510B的 内核中 vmlinux-armv.lds.in 引用了 TEXTADDR
而vmlinux.lds没有引用TEXTADDR, 在开始有一句 . = 0x00008000;
这两个 Linker Script , 哪个在内核连接时会使用???

网上的一篇文章(ucLinux内核移植相关代码分析)说:
arch/armnommu/boot/Makefile,定义ZRELADDR和 ZTEXTADDR。ZTEXTADDR是自解压代码的起始地址,如果从内存启动内核,设置为0即可,如果从Rom/Flash启动,则设置 ZTEXTADDR为相应的值。ZRELADDR是内核解压缩后的执行地址。
其中的  如果从内存启动内核,ZTEXTADDR设置为0, 为什么设置为0即可???
从内存启动内核是指通过tftp 或者 NFS将内核下载到RAM运行吗???

如蒙回答,不甚感激!
发表于 2007-4-4 21:20:35 | 显示全部楼层
vmlinux.lds是由vmlinux.lds.in生成的,系统定义TEXTADDR为0X00008000,所以生成的vmlinux.lds就是0x00008000,Linux用的link script就是vmlinux.lds

arch/arm/mach-xxx/Makefile.boot定义了
zreladdr-y := 0x00008000                内核解压缩后的执行地址
params_phys-y := 0x00000100        内核参数物理地址
initrd_phys-y := 0x00800000                initrd物理地址

arch/arm/boot/compressed/Makefile判断是否从ROM启动
-> 从ROM启动: 设置ZTEXTADDR为.config设定的值(CONFIG_ZBOOT_ROM_TEXT)
-> 从RAM启动: 设置ZTEXTADDR=0
调用sed替换vmlinux.lds.in的TEXT_START->ZTEXTADDR, BSS_START->ZBSSADDR,从而生成vmlinux.lds

从RAM启动的内核为非压缩映象,所以ZTEXTADDR是无效的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表