QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3947|回复: 5

s3c2410的u-boot及linux2.6.10后的内核移植(skyeye模拟)

[复制链接]
发表于 2007-8-16 21:45:11 | 显示全部楼层 |阅读模式
s3c2410的u-boot及linux2.6.10后的内核移植

1.开始UBOOT,我用的是1.1.5版本尽量用新一点的.
开始编译详细的步骤我不多讲,只个大概了.网上资料多多.
(1)

在u-boot的board目录下
#mkdir board/s3c2410
#cp board/smdk2410/* board/s3c2410/
#mv board/s3c2410/smdk2410.c board/s3c2410/s3c2410.c
#cp include/configs/smdk2410.h include/configs/s3c2410.h
(2)
修改board/s3c2410/Makefile,将其中的smdk2410.o为s3c2410.o
(3)
修改顶层Makefile,在smdk2410_config的附近添加
s3c2410_config : unconfig
@./mkconfig $(@:_config=) arm arm920t s3c2410 NULL s3c24x0

(4)修改board/s3c2410/lowlevel_init.S
其实不用改什么


(5)include/configs/s3c2410.h里面flash的大小要自己修改成板子的大小,(这里注意要和配置文件一致)

再添加
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG
#define CONFIG_CMDLINE_TAG

有些环境变量自己可以对照着试试(在uboot里面已经弄好了,只是注释掉的.可以去掉注释并改成自

己所要的).用printenv打印出来

(7)然后就编译就可以了




2.linux2.6内核.编译基本按make arch=arm s3c2410_defconfig
但要用uboot启动问题多多.

(1) 如果内核不是uImage,则下载后,比如下在0x30008000
,则通过go 0x30008000,但注意这样uboot没有传参数给内核.所以
会有Error: unrecognized/unsupported machine ID (r1 = 0x33f4fca.这样的错误

一种方法是修改common/cmd_boot.c
/*#if defined(CONFIG_I386)*/           
  DECLARE_GLOBAL_DATA_PTR;        
/*#endif*/                                       

#if !defined(CONFIG_NIOS)
      /*******************add here*******************************/     
if(argc==2)
         rc = ((ulong (*)(int, char *[]))addr) (0, gd->bd->bi_arch_number);
   else      
/*********************add end *****************************/   
           rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);

解决

还可以在arch/arm/kernel/head.S写死r1
mov    r1, #0xc1

(2)最搞的bootint the kernel没显示了.
一般这个错误有两种原因..
一个内核的commandline 还一个是由于主频设置的问题

通过go启动内核的话参数用的是编译时的..而bootm则是启动的经过处理的uImage(加了一个头)

所以用bootm就会把uboot设置的commandline传给内核..如果是用bootm启动出现bootint the

kernel没显示了.则应该好好检查一下.可以printenv打印看uboot有没设置对commandline


还有主频问题就是
在MPLLCON这个寄存器的配置上。(board/s3c2410/s3c2410.c)
在VIVI:MPLLCON = 0x0005c040;计算出来的Mpll = 200Mhz
Uboot114:MPLLCON = 0x000a1031;计算出来的Mpll = 202Mhz
内核不怎么如果设成202Mhz就不行.尚在分析中.
把MPLLCON改成 = 0x0005c040..终于有显示了.

或者写死内核.这个尚在分析中,不讨论..

s3c2410 # bootm 32000000
## Booting image at 32000000 ...
   Image Name:   linux-2.6.18 Image
   Created:      2007-08-15   7:22:32 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1468948 Bytes =  1.4 MB
   Load Address: 30008000
   Entry Point:  30008000
   Verifying Checksum ... OK
OK

Starting kernel ...

Uncompressing

Linux..................................................................................

.............. done, booting the kernel.
Linux version 2.6.18 (lb@lb) (gcc version 3.4.4) #1 Wed Aug 15 15:20:51 CST 2007
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=00007177
Machine: S3C2410
Warning: bad configuration page, trying to continue
Memory policy: ECC disabled, Data cache writeback
CPU S3C2410A (id 0x32410002)
S3C2410: core 200.000 MHz, memory 100.000 MHz, peripheral 50.000 MHz
S3C24XX Clocks, (c) 2004 Simtec Electronics
CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on
CPU0: D VIVT write-back cache


另:
skyeye.conf一定要设置对.我一开始就死那里
我的
cpu: arm920t
mach: s3c2410x
mem_bank: map=M, type=R, addr=0x00000000, size=0x0400000,file=u-boot4.bin,boot=yes
mem_bank: map=M, type=R, addr=0x00000000, size=0x0C00000

mem_bank: map=M, type=RW, addr=0x30000000, size=0x2000000
mem_bank: map=M, type=RW, addr=0x32000000, size=0x2000000, file=uImage2.6.18.1  #是uImage..如果是vmlinux则应放到0x30008000
#all peripherals I/O mapping area
mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000

主要是rom和ram的大小要和配置文件的一样.像我这里uImage2.6.18.1放在0x32000000
bootm 0x32000000就可以启动..
还提示3s按enter..按的速度要快.一开始按的太慢以为没用..不然自启动了.

还有文件系统和网卡下次整理..弄了一个礼拜休息下.还有内核202.8MHz的问题!!
 楼主| 发表于 2007-8-16 21:46:01 | 显示全部楼层
有时间大家交流

[ 本帖最后由 yjfpb04 于 2007-9-3 00:02 编辑 ]
回复

使用道具 举报

发表于 2007-8-20 16:56:10 | 显示全部楼层
顶一下.反正我用的testutils里面的2410是跑不起来的
回复

使用道具 举报

发表于 2007-8-23 19:54:21 | 显示全部楼层
原帖由 RogueBear 于 2007-8-20 16:56 发表
顶一下.反正我用的testutils里面的2410是跑不起来的


What is your output?
回复

使用道具 举报

发表于 2007-9-17 18:32:03 | 显示全部楼层
下面的信息是从哪个文件获得的?
  1. mem_bank: map=M, type=R, addr=0x00000000, size=0x0400000,file=u-boot4.bin,boot=yes
  2. mem_bank: map=M, type=R, addr=0x00000000, size=0x0C00000

  3. mem_bank: map=M, type=RW, addr=0x30000000, size=0x2000000
  4. mem_bank: map=M, type=RW, addr=0x32000000, size=0x2000000, file=uImage2.6.18.1  #是uImage..如果是vmlinux则应放到0x30008000
  5. #all peripherals I/O mapping area
  6. mem_bank: map=I, type=RW, addr=0x48000000, size=0x2000000
复制代码
回复

使用道具 举报

发表于 2007-10-16 16:02:40 | 显示全部楼层
我前一段时间按照以上方法把Uboot在是skyeye上跑起来了,没有什么问题,不知道怎么的,最近重新运行就报错了,请大家看看。
我新解压一份同样把版本的uboot,重新按照该方法操作也不行。include/configs/s3c2410.h里的flash空间我使用的是addr=0x00000000, size=0x0400000


**************************** WARNING **********************************
If you want to run ELF image, you should use -e option to indicate
your elf-format image filename. Or you only want to run binary image,
you need to set the filename of the image and its entry in skyeye.conf.
***********************************************************************

big_endian is false.
arch: arm
cpu info: armv4, arm920t, 41009200, ff00fff0, 2
mach info: name s3c2410x, mach_init addr 0x8067730
uart_mod:0, desc_in:, desc_out:, converter:
SKYEYE: use arm920t mmu ops
Loaded ROM   ./u-boot.bin
ERROR: s3c2410x_io_write_word(0x4c000000) = 0x00ffffff
ERROR: s3c2410x_io_write_word(0x4c000004) = 0x000a1031
ERROR: s3c2410x_io_write_word(0x4c00000 = 0x00048032


U-Boot 1.1.6 (Oct 15 2007 - 21:24:0

DRAM:  64 MB
Flash: 512 kB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 14:17 , Processed in 0.062485 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表