现在位置:首页 >> 嵌入式操作系统 >> LINUX
在s3c2410开发板上移植u-boot1.1.4
作者:phantom 时间:2009/8/15 文章来源:来自网络

在s3c2410开发板上移植u-boot1.1.4引导核ok:
////////////////////////////////////////////////////
开发环境:2.4.18核
交叉编译器:2.95.3
arm:s3c2410
////////////////////////////////////////////////////
编译uboot
1.修改makefile(在u-boot-1.1.4文件目录下的)
(1)修改59行,连接交叉编译工具,做如下修改:
ifeq ($(ARCH),arm)
CROSS_COMPILE =/usr/local/arm/2.95.3/bin/arm-linux-
endif
(2)在998添加
s3c2410_config : unconfig
@./mkconfig $(@:_config=) arm arm920t s3c2410
2.在board目录中建立s3c2410目录,将smdk2410目录中的内容复制到该目录中;
3.在include/configs目录下创建s3c2410.h文件,然后将smdk2410.h文件的内容复制到s3c2410.h中。
4.也可以用include/configs目录下smdk2410.h,那么上面的2,3 步可以省去,编译指令就是
#make smdk2410_config
5.如果编译uboot1.1.4出现-mabi=apcs-gnu问题,
/usr/wqw/u-boot-1.1.4/cpu/arm920t
vi config.mk
PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) 中的-mabi=apcs-gnu删掉就可编译通过

6.编译的命令:
#make smdk2410_config
#make
编译好的uboot.bin 在u-boot1.1.4下面


引导内核:
1,是否在smdk2410.h定义#define CONFIG_CMDLINE_TAG,在uboot114,smdk2410的默认情况是没有定义的,如果没有这个宏,环境变量里定义的参数将无法传递到kernel

2,检查一下MPLLCON寄存器的配置,在uboot114的/board/smdk2410/smdk2410.c配置成0x000a1031,计算出来的Mpll = 202Mhz。我手头上的kernel是按照200Mhz来初始化串口的,所以要修改成0x0005c040
//*****************************************************************//
#define FCLK_SPEED 1
#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elif FCLK_SPEED==1 /*修改后 Fout = 200MHz */
#define M_MDIV 0x5c /*默认Fout = 202.8MHz 默认:0xa1 0x3 0x1*/
#define M_PDIV 0x4
#define M_SDIV 0x0
#endif
//*****************************************************************//
3,在smdk2410.h中定义:
#define CONFIG_BOOTDELAY 3
#define CONFIG_BOOTARGS "root=/dev/mtdblock2 init=/linuxrc console=ttyS0,115200"
注意:如果CONFIG_BOOTARGS 定义的入口 root=/dev/mtdblock2 与自己的板子不匹配,将不会成功启动内核。
#define CONFIG_ETHADDR 00:00:c0:ff:ee:08
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.0.25
#define CONFIG_SERVERIP 192.168.0.24
依次是系统引导延迟时间,引导参数,网卡mac地址,IP地址,服务器ip地址等等。

4,首先确定你的kernel入口点是30008000, mkimage工具中的-a参数指示制作好的uboot Image的加载位置, -e参数指示kernel的入口点. mkimage作的事情就是在kernel image的前面加上0x40个字节的头部.其实关于这部分,在linux版置顶的文章中间有详细说明, 去看看.
在uboot的/tools下:
#./mkimage -A arm -O linux -T kernel -C none -a 0x30007fc0 -e 0x30008000 -n ' linux-2.4.20 ' -d zImage uImage

2410 #tftp 30007fc0 uImage
2410 #bootm 30007fc0

5。自动装载uImage和运行内核:
在smdk2410.h
#define CFG_LOAD_ADDR 0x30007fc0 //自动装载的启动地址
#define CONFIG_BOOTFILE "uImage" //在服务器的/root/tftpfile中的要装载的文件名
6.在定义下面的宏后,将正常引导内核
#define CONFIG_BOOTARGS "root=/dev/mtdblock2 load_ramdisk=0 init=/linuxrc console=ttyS0,115200 mem=64M devfs=mount"

这是以前的一点总结,也许有用!

上一篇:使用虚拟机嵌入式Linux开发[返回列表]下一篇: arm2410的Linux系统移植—