本站网址: YippeeSoft开心软件
20070627 uclinux make config 1
http://www.yippeesoft.com
如果采用默认的配置,基本都是OK的
cp /home/sf/skyeyeuclinux/uClinux-dist/linux-2.4.x/linux /home/sf/skyeyeuclinux/uClinux-dist/images
稍微配置了一下就~
drivers/block/block.o:(.data+0x1c): undefined reference to `romfs_data\’
引用:
作者: sybaselu
Hi all
Vendor:Samsung
Product:sc4504b (I can\’t remeber exactly)
Kernel: linux-2.4-x
Libc: uClibc
Others: nothing be changed
Result:
[root@root uClinux-dist]# make
…
drivers/block/block.o: In function `blk_dev_init\’:
/mnt/sdb/Parcket/uClinux-dist/linux-2.4.x/drivers/block/ll_rw_blk.c:1523: undefined reference to `romfs_data\’
make[1]: *** [linux] Error 1
make[1]: Leaving directory `/mnt/sdb/Parcket/uClinux-dist/linux-2.4.x\’
make: *** [linux] Error 1
[root@root uClinux-dist]#
BTW, what common tools to be used for simulating uClinux with ARM7s?
Thanks advance
maybe the platform is s3c4510b
you can use armsimulator for simulating the arm7 board.
there are something needed modified for uclinux2.4 kernel source.
have u do that?
在 linux-2.4.x/arch/armnommu/vmlinux-armv.lds.in
/* Global offset table */ 之后加入,
romfs_data = .
romfs.o
romfs_data_end= .
我选的是linux-2.4.x和uclib。就是按照上述的步骤。在make user_only时出错,提示说no reference to crypt_old。我在user/Makefile文件21行加入LIBCRYPT += -lcrypt_old 就行了。不需要手工生成romfs.o。编译成功后在images目录下有romfs.ram和romfs.rom以及 romfs.img。
kyeye跑4510b
编译uClinux-dist-20040408.tar.gz
1.linux-2.4.x/arch/armnommu/vmlinux-armv.lds.in
在
*(got) /* Global Offset table */
之后添加如下语句:
romfs_data = .;
romfs.o
romfs_data_end = .;
2.vendors/Samsung/4510B/Makefile
在image目标的第三行,增加一条语句:arm-elf-ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o -b binary $(ROMFSIMG)
如下为增加之后:
image:
[ -d $(IMAGEDIR) ] &line;&line; mkdir -p $(IMAGEDIR)
genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR)
arm-elf-ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o -b binary $(ROMFSIMG)
3.修改linux-2.4.x/drivers/char/serial_samsung.c
找到uart_config数组,把如下项:
&leftsign; "S3C4510B", 1, 0&rightsign;, /* Samsung S3C4510B uart support */
修改为:
&leftsign; "S3C4510B", 128, 0&rightsign;, /* Samsung S3C4510B uart support */
4.
编译login,boa程序时可能出现undefined reference to \’crypt_old\’的错误,可以修改
config/.config
注释掉CONFIG_USER_OLD_PASSWORDS
换成uc-libc库即可编译通过
4.按照如下步骤配置和编译内核,步骤不能乱,中间出现的错误信息可以忽略.
make menuconfig
make dep
make lib_only
make user_only
make romfs
make image
make
make dep lib_only user_only romfs image linux
2.构造skyeye.conf
cpu: arm7tdmi
mach: s3c4510b
mem_bank: map=M, type=RW, addr=0×00000000, size=0×00800000
mem_bank: map=M, type=R, addr=0×01000000, size=0×00200000, file=./images/romfs.bin
mem_bank: map=I, type=RW, addr=0x03ff0000, size=0×00100000
以前看了 音乐乐乐 写的uclinux的20030522版的修改过程,很有用处,我按照他的方法,做了一次: make xconfig make dep make lib_only make user_only make romfs make image 都很顺利,没有错误,但是最后一步: make 发现有一个错误,就是 /uClinux-dist/linux-2.4.x/arch/armnommu/kernel.setup.c:278:undefined reference to \’__virt_to_bus\’ undefined reference to xx很多,所以停止了,在images下的image.bin和romfs.img生成了,无何解决啊,谢谢!----------------------------------音乐乐乐当初的文档:跟踪3天反汇编代码,终于将uclinux-20030305在S3C4510B的板子上跑了起来,现将移植的全过程写出来,与大家分享(转载请注明出处) 一、下载所需工具、压缩包 uClinux-dist-20030305.tar.gz(http://www.uclinux.org/) arm-elf-tools-20030314.sh 二、要修改的文件列表: 1. ../linux-2.4.x/arch/armnommu/mach-snds100/arch.c MACHINE_START(SAMSUNG, "SNDS100")-〉MACHINE_START(SNDS100, "SNDS100") [说明]这个文件的错误是旧版的遗迹,以前的版本对于4510b使用统一的标识samsung但是由于最新版新加入了对samsung其他板子的支持,所以,修改了这一标识,对于s3c4510b改用snds100,但是这一修改在这个版本中并没有完全统一起来,这也是多处错误的根本原因。 2. ../linux-2.4.x/arch/armnommu/config.in 在if [ "$CONFIG_BOARD_SNDS100" = "y" ]项中添加: define_bool CONFIG_CPU_S3C4510 y [说明]在这个配置文件中,CONFIG_BOARD_SNDS100一项居然少了cpu类型定义,对比其他项就会发现这一问题,该项在 armnommu/kernel/head-armv.S中用到。 3. ../linux-2.4.x/arch/armnommu/mach-snds100/Makefile O_TARGET := samsung.o ->O_TARGET := snds100.o [说明]这个makefile的修改是为了和1保持一致,再make的过程中,使用snds100标识链接文件。 4. ../linux-2.4.x/arch/armnommu/kernel/head-armv.S #if defined(CONFIG_ARCH_SAMSUNG) && defined(CONFIG_CPU_ARM710) -> #if defined(CONFIG_CPU_S3C3410) &line;&line; defined(CONFIG_CPU_S3C4530) [说明]这里也是由于samsung和snds100使用环乱造成的,如果不修改,之后的一段程序将被预编译,会出现LC0重定义的错误,因为此前的 snds100已经声明LC0,实际上之后的程序时不应该被预编译的,那些是3410和4530专用的。 5. /Makefile TFTPDIR = /tftpboot后加上: LINUXTARGET=bzImage # normal make targets 中加入: .PHONY: images images: $(MAKE) -C $(VENDDIR) images all: subdirs romfs modules modules_install image linux 后加入 images [说明]这里的修改,和6的第一条是为了生成压缩的rom映像文件和ramf可执行的bin文件。 6. /vendors/Samsung/4510B/Makefile 最后加入: images: arm-elf-objcopy -O binary -R .note -R .comment -S $(ROOTDIR)/$(LINUXDIR)/linux $(IMAGEDIR)/uclinux_ram.bin cp $(ROOTDIR)/$(LINUXDIR)/arch/armnommu/boot/zImage $(IMAGEDIR)/uclinux_rom.bin 同时注释掉:$(CROSS_COMPILE)objcopy …… 部分 在 genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR) 后加入(这里生成romfs.o): arm-elf-ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o -b binary $(ROMFSIMG) [说明]第一条是5的延续,第二条是生成romfs.o文件,以备后用。 7. ../linux-2.4.x /arch/armnommu/boot/compressed/Makefile 找到$(LD) $(ZLDFLAGS) $(HEAD) $(OBJS) piggy.o -o $(LINUX) 改为: $(LD) $(ZLDFLAGS) $(HEAD) $(OBJS) piggy.o $(LIBGCC) -o $(LINUX) [说明]生成linux kernel,包含必要的库支持,$(LIBGCC)来自于arm-elf-tools库。 找到ZLDFLAGS = -p -X -T $(LINUX).lds改为: ZLDFLAGS = -p -X -T vmlinux.lds [说明]这各链接文件是为带mmu的板子准备的,生成带自解压的映像文件,由$(LINUX)控制,这里我们直接使用,也可以直接将这个链接文件改名为 linux.lds. 8. ../linux-2.4.x /arch/armnommu/vmlinux-armv.lds.in 找到 *(.got) /* Global offset table */ 在其后加入: romfs_data = .; romfs.o romfs_data_end = .; 在这里注意格式,这三句话之前后缩进; [说明]在这个连接文件中将romfs.o连接到.text section中。 9. ../linux-2.4.x/arch/armnommu/mm/proc-arm6,7.S mov r0, #0 #ifdef CONFIG_CPU_WITH_CACHE 改为: #ifdef CONFIG_CPU_WITH_CACHE mov r0, #0 [说明]这里可能是careless的错误,对比旧版就可以理解。 10. ../linux-2.4.x /drivers/block/blkmem.c /* * Please, configure the ROMFS for your system here */ /*S3C4510b */ #ifdef CONFIG_ARCH_SAMSUNG extern char romfs_data[]; extern char romfs_data_end[]; #endif 找到: arena[] = &leftsign; 加入: #ifdef CONFIG_ARCH_SAMSUNG &leftsign;0, romfs_data, -1&rightsign;, #endif [说明]这里象0927版一样少了针对samsung 的rom代码,同时也是为了和10保持一致。 11. /arch/armnommu/tools/mach-types snds100 ARCH_SNDS100 SNDS100 90改为: snds100 BOARD_SNDS100 SNDS100 90 [说明]这应该是最先该的一个错误,在0305版中使用的是BOARD_SNDS100而该文件中继续沿用以前的格式ARCH_*,这个问题会导致 arch_setup()的时候产生内存溢出错误。 三、编译过程 1.make config(menuconfig/xconfig) 选择Samsung/4510B linux-2.4.x uC-libc 其他各项根据需要配置 2.make dep 3.make lib_only 4.make user_only 5.make romfs 6.make image 7.make ok在imges文件夹得到uclinux_ram.bin和uclinux_rom.bin如果有调试器可直接将前者烧入sdram中运行,后者烧进 flash中运行,hoho马上你就可以看到熟悉的启动画面。 [补] 生成的uclinux_rom.bin烧写在flash中,上电复位时,从rom开始执行(compressed/head.S),先将rom中的映像文件拷进ram,然后是地址重定位,重定位之后ram位于0×0,而rom位于0×1000000,之后从0×8000开始执行初始化,之后是 start_kernel() … …
20070627 uclinux make config 2.6 fail (2008-3-3)
原创文章,转载请注明: 转载自YippeeSoft开心软件
本文链接地址: 20070627 uclinux make config 1
历史博文
- 20080718 决明子 甘草 桂花 野菊花 金银花 金莲花 莲子心 绞股蓝 - 2009
- 20080717 flex 资料 1 - 2009
- 0923 MFC JPG GIF 图像显示 比较 - 2007
- 0115 彩弹 265 GB MAXTHON 沙狐球 - 2006
- gprs网络编程和电话呼入的冲突 - 2005
评论