位置:51电子网 » 技术资料 » 其它综合

在S3C4510B评估板上移植uclinux-20030305全过程

发布时间:2007/8/28 0:00:00 访问次数:611


作者  liber

来自: 北京


--------------------------------------------------------------------------------

跟踪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) || 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[] = { 加入:
#ifdef CONFIG_ARCH_SAMSUNG
{0, romfs_data, -1},
#endif
[说明]这里象0927版一样少了针对samsung 的ro


作者  liber

来自: 北京


--------------------------------------------------------------------------------

跟踪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) || 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[] = { 加入:
#ifdef CONFIG_ARCH_SAMSUNG
{0, romfs_data, -1},
#endif
[说明]这里象0927版一样少了针对samsung 的ro

相关IC型号

Warning: Undefined variable $stockkeys in G:\website_51dzw\www.51dzw.com\code\tech\view.php on line 152

热门点击

 

推荐技术资料

罗盘误差及补偿
    造成罗盘误差的主要因素有传感器误差、其他磁材料干扰等。... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式