U-boot-200908在FL2440上的移植(一)--uboot在RAM中运行
来源:互联网 发布:怎样养淘宝小号 编辑:程序博客网 时间:2024/05/23 19:17
首先我的环境是
主机:Ubuntu11.10
编译器: arm-linux-4.3.2
u-boot: uboot-2009.08
1.建立FL2440项目并编译
建立板级文件夹:
(1)在board/samsung目录下新建文件夹fl2440,找到相似的板级文件夹smdk2410,并把该文件夹中的所有文件拷贝到fl2440下
(2)到fl2440目录下,把文件smdk2410.c重命名为fl2440.c;修改该目录下Makefile中的目标(COBJS),把smdk2410.o改为fl2440.o;
2.建立芯片级文件夹
直接用cpu/arm920t芯片文件夹,不做修改;
3.建立配置文件:
到include/configs目录下,找到相似的配置文件smdk2410.h,将其拷贝并重命名为fl2440.h;
4.建立编译规则:
在根目录下的Makefile中找到ARM体系架构中smdk2410的编译规则
smdk2410_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0在此处添加ok2440的编译规则fl2440_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t fl2440 samsung s3c24x0(注意Makefile中命令行要以tab键开头)
5.在宿主机linux环境下编译:
在终端进入uboot的根目录下执行两条命令:
make fl2440_configmake
此时编译应该通过,生成u-boot.bin
6.下载到内存中调试时不进行底层初始化、不进行uboot代码拷贝,所以在配置文件include/configs/fl2440.h中加入两句:
# define CONFIG_SKIP_LOWLEVEL_INIT 1 # define CONFIG_SKIP_RELOCATE_UBOOT 1
7。修改cpu/arm920t/start.S,
(1)在这里我主要是想添加LED初始化代码,让LED都亮起来,证明程序有运行(这也是Debug的一种)
在这里注释掉这两个没有用的/* bl coloured_LED_init bl red_LED_on */下面定义我的LED0,LED1,LED2,LED3使他们都亮起来,这个是根据开发板的配置 #define GPBCON 0x56000010 #define GPBDAT 0x56000014 #define GPBUP 0x56000018 ldr r0, =GPBUP ldr r1, =0x7ff str r1, [r0] ldr r0, =GPBCON ldr r1, =0x111400 str r1, [r0] ldr r0, =GPBDAT ldr r1, =0x29f str r1, [r0]
(2)配置S3C2440的寄存器
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440) //这里添加CONFIG_S3C2440//这里我选择注释掉CONFIG_S3C2410,因为我在fl2440.h中#define CONFIG_S3C2440 和#define CONFIG_S3C2410/*# if defined(CONFIG_S3C2410) ldr r1, =0x3ff ldr r0, =INTSUBMSK str r1, [r0]# endif*///新添加# if defined(CONFIG_S3C2440) ldr r1, =0x7fff ldr r0, =INTSUBMSK str r1, [r0]# endif//继续添加和修改# if defined(CONFIG_S3C2440) #define MPLLCON 0x4C000004 #define UPLLCON 0x4C000008 ldr r0, =CLKDIVN mov r1, #5 str r1, [r0] ldr r0, =MPLLCON ldr r1, =0x7F021 str r1, [r0] ldr r0, =UPLLCON ldr r1, =0x38022 str r1, [r0]# else /* FCLK:HCLK:PCLK = 1:2:4 */ /* default FCLK is 120 MHz ! */ ldr r0, =CLKDIVN mov r1, #3 str r1, [r0]#endif#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 */
8.在include/configs/fl2440.h中添加
//添加CONFIG_S3C2440#define CONFIG_ARM920T 1 /* This is an ARM920T Core */#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */#define CONFIG_S3C2440 1
9.修改board/samsung/fl2440/fl2440.c中的
#elif FCLK_SPEED==1 /* Fout = 405MHz, FCLK:HCLK:PCLK = 1:4:8 */ #define M_MDIV 0x7f #define M_PDIV 0x2 #define M_SDIV 0x1修改#define U_M_MDIV 0x48为#define U_M_MDIV 0x38
10.修改cpu/arm920t/s3c24x0/speed.c相关部分:
(1).修改FCLK的计算公式:
把下面的部分: m = ((r & 0xFF000) >> 12) + 8; p = ((r & 0x003F0) >> 4) + 2; s = r & 0x3; return((CONFIG_SYS_CLK_FREQ * m) / (p << s));替换为: m = ((r & 0xFF000) >> 12) + 8; p = ((r & 0x003F0) >> 4) + 2; s = r & 0x3; if(pllreg == MPLL) return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s)); else return((CONFIG_SYS_CLK_FREQ * m) / (p << s));
(2)修改get_HCLK函数:
/* return HCLK frequency */ulong get_HCLK(void){ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER(); //return((clk_power->CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK()); return (get_FCLK()/4); //这里修改的只能用于 s3c2440 ,1:4:8 !!!}
11.这一步应该非常重要,我就在这上面载了跟头,老是串口输出不了讯息,这个是由于三星给我们的DNW烧写工具的
options里面有一个Download Address 0x30800000
所以我们的include/configs/fl2440.h
#define CONFIG_SYS_LOAD_ADDR 0x30800000 /* default load address 33000000*/
还有就是board/samsung/fl2440/config.mk
#TEXT_BASE = 33F80000TEXT_BASE = 0x30800000
这样两个一样那么编译一下下载到ram中就能看到讯息了,哦,对了下载的时候首先薄码开关1,2,3,4全部关闭,且串口接串口0,然后选择0 Download &Run,
选择USB transmit就行了
这篇文章参考网址:http://blog.chinaunix.net/uid-22174347-id-1786933.html
- U-boot-200908在FL2440上的移植(一)--uboot在RAM中运行
- U-boot-200908在FL2440上的移植(二)--uboot在norflash上运行
- u-boot-2009.08在飞凌OK2440/FL2440上的移植(一)——让u-boot在内存中运行进来
- u-boot-2011.09在ST2410上的移植-在RAM中运行
- u-boot-2011.03在mini2440/micro2440上的移植(二)——在RAM中运行
- U-boot-200908在FL2440上的移植(三)--移植DM9000
- U-boot-200908在FL2440上的移植(四)--用nfs和tftp下载
- u-boot-2009.08在mini2440上的移植(一)---LED显示Uboot运行状况
- u-boot-2010.12移植到2440(二,移植在RAM中运行)
- [转]u-boot-2010.12移植到2440(二,移植在RAM中运行)
- [转]u-boot-2010.12移植到2440(二,移植在RAM中运行)
- [转]u-boot-2010.12移植到2440(二,移植在RAM中运行)
- u-boot-2009.08在飞凌OK2440/FL2440上的移植(三)——让u-boot支持DM9000A
- fl2440的U-boot-2010.09移植(五)uboot架构中NAND Flash驱动修改
- U-boot在S3C2440上的移植详解(一)
- U-boot在S3C2440上的移植详解(一)
- U-boot在S3C2440上的移植详解(一)
- U-boot在S3C2440上的移植详解(一)
- JSP标准标签库 通用标签
- 带有事务的存储过程的写法
- 还在为电脑反应慢惆怅么?现在教你怎么为电脑'减肥'!
- android启动模式
- js验证身份证号码(包括与用户输入性别,生日的匹配性验证)
- U-boot-200908在FL2440上的移植(一)--uboot在RAM中运行
- 利用Smarty实现文本隔行变色
- Cross-compiling your eLua programs(交叉编译你的eLua程序)
- centos 安装mono 遇到问题
- 关于html5的一些历史和优点
- 贪吃蛇类图和顺序图
- 字符,字节和编码
- ul li 更改样式
- Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist