fatest 发表于 2005-5-30 18:29:11

几个很重要的问题,请高手指教!

1. uClinux编译后生成的 linux.text作用是什么? 在哪里用到?
                2. linux.data作用是什么? 在哪里用到?
                3. image.rom是怎样生成的?
                4. image.ram是怎样生成的?
                5. image.bin是怎样生成的?
                6. 最后烧写到flash的内核是哪个文件? romfs是已经编译到了内核里面还是与内核并列存在的?
                7. 我在Fedora Core3下面编译uClinux-dist-20040408,编译GDB/ARMulator成功了,在skyeye下也可以跑起来,但为什么我生成的linux文件28.3M,怎么会这么大?另外,我想编译基于4510的那块开发板,但make menuconfig后出现如下信息后便没有响应了。
                make: Entering directory `/usr/local/src/uclinux-s3cev40/config/scripts'      
                make: `tkparse' is up to date.                  
                make: Leaving directory `/usr/local/src/uclinux-s3cev40/config/scripts'      
                ARCH=dummy /usr/local/src/uclinux-s3cev40/config/scripts/tkparse < config.in > config.tmp   
                cat /usr/local/src/uclinux-s3cev40/config/scripts/header.tk >> ./config.tk            
                cat config.tmp >> config.tk                                                      
                rm -f config.tmp                                                            
                echo "set defaults \"/dev/null\"" >> config.tk                        
                echo "set help_file \"config/Configure.help\"" >> config.tk      
                cat /usr/local/src/uclinux-s3cev40/config/scripts/tail.tk >> config.tk   
                od 755 config.tk                                                   
                * Cleaning tree for old settings ****            
                * Cleaning tree for old settings ****rm -rf romfs; make clean > /dev/null 2>&1

limingth 发表于 2005-5-30 21:52:14

关于前面几个问题,可以参考 lumit4510 上机手册,在相关文档栏目里有。

Q: 编译之后在 images 目录下生成的那些文件都是什么意思?
A: 对于一些可能出现的文件,这里做一个解释:
romfs.img: 这个文件是通过 tools/romfs-inst.sh 脚本,生成 romfs 目录及其
下面的文件,然后通过 genromfs 程序打包成一个文件 romfs.img
romfs.img 既可以放在 flash 中,也可以放在 ram 中,但需要在
编译内核时在 driver/block/blkmem.c 里指定地址,以便内核找到。
linux.text: 编译后的内核中 text 段,一般放在 flash 中,只读。
linux.data: 编译后的内核中 data,init 段,一般放在 sdram 中,读写。
image.bin: 上面三个文件顺序连接而生成的 = linux.text + linux.data + romfs.img
有的时候还会得到:
image.rom: 通常 image.rom 的文件大小要比 image.ram 小很多,这是因为 image.rom 是
一个压缩过的内核,前面加上一个小的解压程序负责把内核解压后搬到指定位置。
这个文件可以直接烧进 flash 中,当然也可以在 ram 中运行。这个文件实际上
就是通常 linux 生成的 zImage 文件。
image.ram: 这个内核没有压缩过,而且必须在 ram 里运行。所以需要通过板子上的 bootloader
将它下载到指定位置后开始执行。相对 image.rom 而言,从 ram 里启动内核,则
代码段和数据段都在 ram 里面。这个文件是编译生成的 elf 格式的linux 内核,通过
arm-elf-objcopy 工具生成的二进制映像文件。
可以这样形象的说: image.rom = gunzip program + gzipped(image.ram)
boot.rom: 其实就是 uClinux 编译完成后的文件 images/romfs.img,可以看一下它就是一个连接。

后面的那个问题,我只在 rh7 以上的linux上测试过 lumit4510 的编译和skyeye调试,我这没有 Fedora Core3 的实验环境,只好看看其他人有没有做过了。
页: [1]
查看完整版本: 几个很重要的问题,请高手指教!