2009年(11)
分类: LINUX
2009-10-23 12:14:10
1 内核编译命令
编译非压缩内核: make Image
编译压缩内核: make zImage
编译可被u-boot支持的内核: make uImage
最后生成的内核都在 $(src_tree)/arch/arm/boot目录下
2 make uImage
需要使用u-boot提供的mkimage工具,把这个文件拷贝到/usr/bin或/bin目录下
,否则会有“mkimage找不到”的错误。
makeimage软件内部使用了mmap()函数,这个函数对NTFS文件系统中的文件操作时会失败(使用的是Fedora Core 7,不知道别的linux版本是否也一样),显示“不能映射文件”错误。所以最好不要在NTFS文件系统上构建内核,或者把内核编译过程中生成的zImage拷贝到非NTFS文件系统上,再调用mkimage处理。
一个比较好的解决方案是修改$(src_tree)/arch/arm/boot/Makefile中产生uImage的部分:
$(obj)/uImage: $(obj)/zImage FORCE
$(call if_changed,uimage)
@echo ' Image $@ is ready'
方法一:使用Image
# Method 1 : Image->gzip->add u-boot header
$(obj)/uImage: /tftpboot/u9260.img
/tftpboot/u9260.img: $(obj)/Image FORCE
cat $< | gzip -9 > $(obj)/Image.gz
mkimage -A arm -O linux -T kernel -C gzip -a $(LOADADDR) -e $(LOADADDR) \
-n 'Linux-$(KERNELRELEASE)' -d $(obj)/Image.gz $@
rm -f $(obj)/Image.gz
@echo ' Image $@ is ready'
方法二:使用zImage
# Method 2 : zImage->add u-boot header
$(obj)/uImage: /tftpboot/u9260.img
/tftpboot/u9260.img: $(obj)/zImage FORCE
$(call if_changed,uimage)
@echo ' Image $@ is ready'
3 EABI
使用AT91SAM9260EK的缺省配置编译内核,制作根文件系统,下载到AT9260单板,启动过程中出现“kernel panic: not syncing attempted to kill init”信息,然后死机。
经检查发现,ramdisk挂载正常,很可能是busybox执行失败。
怀疑是共享库的问题,将busybox静态编译链接,故障依旧。
换用一个老版本的根文件系统映象,可以正常启动。
后来上网搜索了一些相关信息,找到了解决问题的途径。 原因在于:编译内核和busybox使用的编译器是arm-linux-gcc