Chinaunix首页 | 论坛 | 博客
  • 博客访问: 423242
  • 博文数量: 71
  • 博客积分: 1525
  • 博客等级: 上尉
  • 技术积分: 605
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-05 17:28
文章分类

全部博文(71)

文章存档

2012年(21)

2011年(50)

分类: LINUX

2011-09-25 16:00:56

  • 移植环境

开发板:arm9 PXA270处理器?s3c2410处理器 :最终确定是s3c2410

硬件配置 参数 地址范围 备注
SDRAM 64M 0x30000000~0x33FFFFFF  
NVRAM 256K    
Nand Flash 64M    
Nor Flash 2M 0x0~0x1FFFFF 存放MDK镜像

  • 目标

提供带USB驱动和网络驱动的uboot,以支持USB下载和网络下载;

内核支持yaffs的根文件系统;

提供隐藏的ramdisk根文件系统;

  • 需要修改(可能涉及到)的硬件资源

     主频,外设

 

移植步骤

建立自己的开发板项目,暂且叫my2410

#tar –jxvf u-boot-20**.tar.bz2  
#cd u-boot/board/samsung/  
#mkdir my2410  
#cp smdk2410/* my2410/ 建立board的配置
#cd  my2410  
#mv smdk2410.c my2410.c  
#cd ../../../  
#cp include /config  
# cp include/configs/smdk2410.h include/configs/my2410.h  
#vi board/samsung/my2440/Makefile 修改 my2410 下 Makefile 的编译项,如下 :
COBJS:=my2410.o flash.o 因为已经修改成了my2410.c文件了
修改u-boot根目录下的Makefile文件,建立my2410的配置以支持编译  
vi uboot/Makefile  

ROSS_COMPILE ?= arm-linux- // 指定交叉编译器为 arm-linux-gcc


smdk2410_config : unconfig //2410 编译选项格式
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0


my2440_config : unconfig //2440 编译选项格式
@$(MKCONFIG) $(@:_config=) arm arm920t my2440 samsung s3c24x0

 

 

* 说明: arm         :  CPU 的架构 (ARCH)
              arm920t  : CPU 的类型
             my2440    : 对应在 board 目录下建立新的开发板项目的目录
             samsung  : 新开发板项目目录的上级目录 , 如直接在 board 下建立新的开发

板项目的目,则这里就为 NULL
               s3c24x0 : CPU 型号
* 注意:编译选项格式的第二行要用 Tab 键开始,否则编译会出错

测试是否以上的配置可以产生一个u-boot.bin的文件

#make my2410_config  
#make 查看编译结果是否有目标文件产生

以上的移植是构建了一个my_2410框架,下面就要对源码进行修改

在s3c2410的datasheet上可以查到:

 

看门狗,中断,cpu频率,LED灯的寄存器

#  define pWTCON    0x53000000
#  define INTMSK    0x4A000008    /* Interupt-Controller base addresses */
#  define INTSUBMSK    0x4A00001C
#  define CLKDIVN    0x4C000014    /* clock divisor register */

以上三个的寄存器地址可能一样但是,其操作方式可能不一样,可以从datasheet里面来发掘。

某些部分除了在start.s内有外,可能在其他代码中也会要做些修改!

在第一阶段完成后可以进行编译了后,进行一次烧写,测试是否正确。

在第二阶段:当u-boot的start.s运行到”_start_armboot: .word start_armboot”时,就会调用lib_arm/board.c中的start_armboot函数,于是进入第二阶段。

从nand_flash中启动的话就要做的事情:

  • start_armboot函数调用了drivers/mtd/nand/nand.c文件中的nand_init函数
  • nand_init调用了nand_init_chip,nand_init_chip则再次调用了drivers/mtd/nand/s3c2410_nand.c文件下的board_nand_init函数,然后调用drivers/mtd/nand/nand_base.c函数中的nand_scan函数
  • nand_scan 函数调用了同文件下的 nand_scan_ident 函数等。

 

网卡的驱动,比如CS8900:采用顺藤摸瓜的方式来修改相关的网卡驱动的代的初始化

支持tftp下载。

u-boot和kernel都会有一个机器码(MACH_TYPE),只有这两个机器码一致时才能引导内核。

添加文件系统yaffs镜像的烧写。

 

要完成的工作

  1. 初始化本阶段要使用的硬件设备:
  2. 检测系统的内存映射:
  3. 将kernel映像和根文件系统映像从flash上读到RAM空间
  4. 为内核设置启动参数
  5. 调用内核
阅读(1510) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~