ribiky 发表于 2005-12-25 12:58:02

基于skyeye0.8.0 配置uclinux040408

基于skyeye0.8.0 配置uclinux—20040408 到 CPU4510B上全过程

                                        -----对于文章1、2的验证
文章参考来源:
1、在S3C4510B评估板上移植uclinux-20030314全过程.作者liber.来自: 北京
2、uClinux Image Compiling User Guide2 for lumit4510 : how to compile uClinux kernel
3、www.lumit.org
/*————————————————————————————————*/
操作系统:Fedora core4
   CPU:Samsung4510B
uclinux:uclinux-dist-20040408 uclinux-2.4.x
uclinux 内核编译总结 在skyeye0.8.0上

ribiky 杭州
2005-12-2421:50
/*————————————————————————————————*/



源码需要修改的地方:(参考www.lumit.org)
1、 ../linux-2.4.x /arch/armnommu/vmlinux-armv.lds.in
找到 *(.got) /* Global offset table */
在其后加入:
66        romfs_data = .;
67        romfs.o
68        romfs_data_end = .;

2、 ../vendors/Samsung/4510B/Makefile

41        TFTPDIR = /tftpboot后加上:
42        LINUXTARGET=bzImage

65         genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR) 后加入(这里生成romfs.o):
66        arm-elf-ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o -b binary $(ROMFSIMG)

3、 ../config/.config
注释掉第25行的 CONFIG_USER_OLD_PASSWORDS
如下:
   24 CONFIG_USER_LOGIN_LOGIN=y
   25 # CONFIG_USER_OLD_PASSWORDS=y
   26 # CONFIG_USER_ONLY_ROOT is not set

4、../linux-2.4.x/arch/armnommu/mm/init.c
    655 void free_initmem(void)
   656 {
    657         if (!machine_is_integrator() &&
    658             !machine_is_p52() &&
    659             !machine_is_cx821xx() &&
    660             !machine_is_atmel() &&
    661             !machine_is_netarm() &&
    662 //          !machine_is_ta7v() &&
    663             !machine_is_ta7s()) {
    664               free_area((unsigned long)(&__init_begin),
    665                           (unsigned long)(&__init_end),
    666                           "init");

5、../linux-2.4.x/drivers/char/serial_samsung.c
找到uart_config数组,把如下项:
128        { "S3C4510B", 1, 0}, /* Samsung S3C4510B uart support */

        修改为:
128        { "S3C4510B", 128, 0}, /* Samsung S3C4510B uart support */



6、 ../vendors/Samsung/4510B/Makefile
        [ -d $(IMAGEDIR) ] || mkdir -p $(IMAGEDIR)
        genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR)
        $(CROSS_COMPILE)ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o \
                        -b binary $(ROMFSIMG)
        $(CROSS_COMPILE)objcopy -O binary -R .note -R .comment \
                        -S $(ROOTDIR)/$(LINUXDIR)/linux $(RAMIMAGE)
        cp $(ROOTDIR)/$(LINUXDIR)/arch/armnommu/boot/zImage \
                        $(ROMIMAGE)


#        $(CROSS_COMPILE)objcopy -O binary --remove-section=.romvec \
                        --remove-section=.text --remove-section=.ramvec \
                        --remove-section=.init \
                        --remove-section=.bss --remove-section=.eram \
                        $(ROOTDIR)/$(LINUXDIR)/linux $(IMAGEDIR)/linux.data
#        $(CROSS_COMPILE)objcopy -O binary --remove-section=.ramvec \
                        --remove-section=.bss --remove-section=.data \
                        --remove-section=.eram \
                        --set-section-flags=.romvec=CONTENTS,ALLOC,LOAD,READONLY,CODE \
                        $(ROOTDIR)/$(LINUXDIR)/linux $(IMAGEDIR)/linux.text
#        cat $(IMAGEDIR)/linux.text $(IMAGEDIR)/linux.data $(ROMFSIMG) > $(IMAGE)


7、 ../linux-2.4.x /arch/armnommu/boot/compressed/Makefile
[说明]生成linux kernel,包含必要的库支持,$(LIBGCC)来自于arm-elf-tools库。

        ZLDFLAGS = -p -X -T $(LINUX).lds改为:
        ZLDFLAGS = -p -X -T linux.lds                   (注:听说也可以改为vmlinx.lds,但是我没有通过)
[说明]这各链接文件是为带mmu的板子准备的,生成带自解压的映像文件,由$(LINUX)控制,这里我们直接直接将这个链接文件改名为linux.lds.

89        $(LD) $(ZLDFLAGS) $(HEAD) $(OBJS) piggy.o -o $(LINUX)
        改为:
89        $(LD) $(ZLDFLAGS) $(HEAD) $(OBJS) piggy.o $(LIBGCC) -o $(LINUX)
[说明]生成linux kernel,包含必要的库支持,$(LIBGCC)来自于arm-elf-tools库。


8、 ../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


编译流程:
1、make menuconfig
在 Vendor/Product Selection--->    中选择
--- Select the Vendor you wish to target
(Samsung) Vendor
--- Select the Product you wish to target
(4510B) Samsung Products
                           
   在 Kernel/Library/Defaults Selection--->   中选择
(linux-2.4.x) Kernel Version                              
(uClibc) Libc Version
其他选项都不变,按照缺省设置,选择退出,保存配置。

2、make dep
3、make lib_only
4、make user_only
5、make romfs
6、make image
7、make



最后生成:
# ls -la images/
总用量 664
drwxr-xr-x   2 root root    4096 12月 24 21:04 .
drwxr-xr-x17 1000 users   4096 12月 24 20:58 ..
-rw-r--r--   1 root root652288 12月 24 21:09 romfs.img

配置shyeye.conf
cpu: arm7tdmi
mach: s3c4510b
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00800000
mem_bank: map=M, type=R, addr=0x01000000, size=0x00200000, file=./images/romfs.img
mem_bank: map=I, type=RW, addr=0x03ff0000, size=0x00100000


THE END



感谢陈渝博士领导的skyeye开发小组

Step 2:   通过 SkyEye 测试刚才编译得到的 linux-2.4.x/linux 内核是否可以运行。
[详细过程在一篇文档中有说明,这里不再重复,可以参考看]
http://www.lumit.org/download/document/lumit-skyeye-uclinux.txt


Step 3:   如果 SkyEye 模拟器上测试通过了,那么就可以下载到 lumit4510 开发板试试了。
[详细过程在一篇文档中有说明,这里不再重复,可以参考看]
http://www.lumit.org/download/document/lumit-uclinux-readme.txt


Step 4:   如果在 lumit4510 上可以运行 image.ram ,那么就可以添加自己的应用程序了。
[详细过程在一篇文档中有说明,这里不再重复,可以参考看]
http://www.lumit.org/download/document/lumit-uclinux-addapp-readme.txt
页: [1]
查看完整版本: 基于skyeye0.8.0 配置uclinux040408