在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"
这是以前的一点总结,也许有用!
此帖后面有网友提到用2.95的编译编译不过去的问题,我实际中也遇到了,可以删除全部.o文件,然后再编译,有错,再删,再编译,一般二次二就可以了,注意不要用make clean,请用下面命令:
find ./ -name "*.o"|xargs rm -rf
阅读(1698) | 评论(0) | 转发(0) |