U-Boot2010.06移植(2440)-----基本移植_曼巴精神传承人的博客-程序员信息网_u-boot 2440移植

技术标签: 嵌入式Linux  

1、修改顶层Makefile文件

(1)添加(第二行前面有个TAB):
smdk2440_config :unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2440 samsung s3c24x0

(2)指定交叉编译器:
CROSS_COMPILE ?=arm-linux-

2、在board/samsung目录下新建smdk2440,并将board/samsung/smdk2410目录下的文件拷到smdk2440目录下,把smdk2410.c改名为smdk2440.c。

(1)修改board/samsung/smdk2440目录下的Makefile
COBJS :=smdk2440.o flash.o


3、在include/configs目录下创建开发板配置头文件,拷贝一份smdk2410.h,并改名为smdk2440.h

4、修改arch/arm/cpu/arm920t/start.S

(1)删掉LED部分
/*
bl coloured_LED_init
bl red_LED_on

*/


(2)添加2440关闭中断
# if defined(CONFIG_S3C2410) 
ldr r1, =0x3ff 
ldr r0, =INTSUBMSK 
str r1, [r0] 
# endif
# if defined(CONFIG_S3C2440) 
ldr r1, =0x7fff     /*15个中断,根据2440手册*/
ldr r0, =INTSUBMSK 
str r1, [r0] 
# endif



(3)定义MPLL寄存器
# define INTSUBMSK 0x4A00001C 
# define CLKDIVN 0x4C000014 
# define MPLLCON 0x4C000004   /*2440特有的寄存器*/
# endif



(4)注释掉2410的时钟设置,并添加时钟设置
#if 0
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
#endif

/*2440时钟设置*/
/* FCLK:HCLK:PCLK = 1:4:8 UCLK = UPLL*/
ldr r0, =CLKDIVN
mov r1, #5
str r1, [r0]

/*2440不支持同步总线模式,所以要切换到异步总线模式*/
mrc p15, 0, r1, c1, c0, 0
orr r1, r1, #0xc0000000
mcr p15, 0, r1, c1, c0, 0

/*查看2440手册255页,405MHz的值为0x7f021*/
ldr r1, =MPLLCON
ldr r2, =0x5c011   
str r2, [r1] @400mhz




5、修改include/configs/smdk2440.h

(1)添加:
#define CONFIG_S3C2440 1

6、修改board/samsung/smdk2440/smdk2440.c

(1)注释掉clock宏定义代码
#if 0
#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 = 202.8MHz */
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1
#endif

#define USB_CLOCK 1

#if USB_CLOCK==0
#define U_M_MDIV 0xA1
#define U_M_PDIV 0x3
#define U_M_SDIV 0x1
#elif USB_CLOCK==1
#define U_M_MDIV 0x48
#define U_M_PDIV 0x3
#define U_M_SDIV 0x2
#endif
#endif


(2)添加时钟频率宏定义
//#define S3C2440_MPLL_405MHZ ((0x7f<<12)|(0x02<<4)|(0x01)) // 405MHz, 在手册中可以查到(255页)
#define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01)) // 400MHz 
#define S3C2440_UPLL_48MHZ ((0x38<<12)|(0x02<<4)|(0x02)) // 48MHz


(3)修改board_init函数的时钟配置
clk_power->LOCKTIME = 0xFFFFFF;
clk_power->UPLLCON = S3C2440_UPLL_48MHZ;
delay (4000);
clk_power->MPLLCON = S3C2440_MPLL_400MHZ;
delay (8000);

*根据2440手册知道:当你设置MPLL 和UPLL 的值时,你必须首先设置UPLL 值再设置MPLL 值。(大约需要7 个NOP 的间隔)


(4)修改board_init函数的MACH_TYPE
gd->bd->bi_arch_number = MACH_TYPE_S3C2440;

*这个值要和内核的MACH_TYPE相同



7、修改arch/arm/cpu/arm920t/s3c24x0/speed.c

(1)修改get_PLLCLK函数(该函数会被设置波特率的函数调用)
static ulong get_PLLCLK(int pllreg) 

……………………
//return (CONFIG_SYS_CLK_FREQ *m) / (p << s);  //2410
return (CONFIG_SYS_CLK_FREQ * m * 2) / (p <<s); //2440

}

(2)添加时钟分频宏定义
#define S3C2440_CLKDIVN_HDIVN_MASK (3<<1) 
#define S3C2440_CLKDIVN_HDIVN_1 (0<<1) 
#define S3C2440_CLKDIVN_HDIVN_2 (1<<1) 
#define S3C2440_CLKDIVN_HDIVN_4_8 (2<<1) 
#define S3C2440_CLKDIVN_HDIVN_3_6 (3<<1)

#define S3C2440_CAMDIVN_HCLK3_HALF (1<<8) 
#define S3C2440_CAMDIVN_HCLK4_HALF (1<<9)


(3)修改get_HCLK函数
ulong get_HCLK(void)
{
struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();
unsigned long clkdiv;
unsigned long camdiv;
int hdiv;

clkdiv = readl(&clk_power->CLKDIVN);  //读取CLKDIVN寄存器的值
camdiv = readl(&clk_power->CAMDIVN);  //读取CAMDIVN寄存器的值
//根据CLKDIVN寄存器的[2:1]来设置HCLK的分频值(查看2440手册258页)
switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) {
case S3C2440_CLKDIVN_HDIVN_1:
hdiv = 1;
break;
case S3C2440_CLKDIVN_HDIVN_2:
hdiv = 2;
break;
case S3C2440_CLKDIVN_HDIVN_4_8:
hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4;
break;
case S3C2440_CLKDIVN_HDIVN_3_6:
hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3;
break;

}


//return (readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 2 : get_FCLK();
return get_FCLK() / hdiv;

}



8、修改arch/arm/include/asm/arch-s3c24x0/s3c24x0.h(寄存器声明头文件)

(1)添加CAMDIVN寄存器
structs3c24x0_clock_power { 
…………… 
u32 CLKDIVN; 
u32 CAMDIVN; 
};


9、修改board/samsung/smdk2440/lowlevel_init.S

(1)修改REFCNT

//#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz,(2048+1-15.6*60) */
#define REFCNT 0x4f5



10、修改arch/arm/cpu/arm920t/u-boot.lds

(1)添加lowlevel_init.S的目标文件加入到.text中,防止被放到4k的地址外
.text :

arch/arm/cpu/arm920t/start.o (.text) 
board/samsung/smdk2440/lowlevel_init.o (.text) 
*(.text) 
}




到此基本的移植已完成。
make smdk2440_config
make
现在只能烧录到NorFlash
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012041204/article/details/62884039

智能推荐

28 避免返回handles指向对象内部成分——effective c++_常高伟的博客-程序员信息网_指向对象内部

这样做有两个问题:a) 降低对象的封装性。把内部结构暴露在外面。b) 调用const函数,但是仍然可以更改对象。有一个办法可以解决第二个问题,即返回的handles加上一个const限制,这样就可以更改返回的对象了。另外,也会有一个新的问题——dangling handles(悬空的号码牌)。如果handles指向的指针已经释放,但是返回的handles却无法知道。请记住:避免返回handles(包括reference,指针,迭代器)指向对象内部。遵守这个条款可以增加封装性,帮助co

美育在计算机教育中应用,浅谈在小学信息技术课堂中有效实施美育._李沫霖的博客-程序员信息网

《浅谈在小学信息技术课堂中有效实施美育.》由会员分享,可在线阅读,更多相关《浅谈在小学信息技术课堂中有效实施美育.(9页珍藏版)》请在人人文库网上搜索。1、北京市第七届京美杯征文浅谈在小学信息技术课堂中有效实施美育姓名:闻迪工作单位:北京市西城区半步桥小学通讯地址:北京市西城区白纸坊东街27号手机电话:13661192800电子邮箱:wendi_78浅谈在小学信息技术课堂中有效实施美育内容提要:新...

html seo 分页标签,做分页SEO应该如何优化?_十六夜菈比的博客-程序员信息网

什么是SEO分页?分页,英文为pagination。是针对列表页或栏目页,内容页,偶尔也针对首页的一种主动分页机制。列表分页有什么用?分页可以将当前页面的内容以页面的形式呈现给用户。其背后的原因也较简单:一个页面内容过多,从上到下所占的空间过大,出现多屏内容,不利于用户查看。通过分页的形式呈现内容,有方便用户查看,降低其获取需求的成本,有利于用户体验。作为普通用户,我们对网站中出现的分页,如列表页...

深度学习:基本概要:监督,无监督,半监督,弱监督,多示例,迁移学习_work_coder的博客-程序员信息网_深度学习 监督学习

参考:https://blog.csdn.net/limiyudianzi/article/details/78921450什么是监督学习、无监督学习、强化学习、弱监督学习、半监督学习、多示例学习?随着机器学习问题不断深入人心,人们也将现实中遇到不同的问题分为不同的学习方式,其中,最基础的应属监督学习,无监督学习和强化学习了。监督学习(supervised learning):已知数据和...

java 中 String 拼接的问题_string数组拼接_我不是文盲的博客-程序员信息网

java 中 String 拼接的问题今天看到网上一个关于代码效率优化的视频,对下面这段字符串拼接的代码进行优化。因为上面的方式会多在栈中多创建一个引用。修改前:for (int i = 0; i &lt; 1000_0000; i++) { String v1 = map.get("k1"); String v2 = map.get("k2"); String s = v1 + " " + v2;}修改后:for (int i = 0; i &lt; 1000_00

3D打印切片软件Cura及CuraEngine原理分析_爱迪生的小屋的博客-程序员信息网

通过Cura及CuraEngine详细分析介绍3D打印切片的原理年。初开始进入3D打印行业,受命以Cura为基础,研发自主的3D打印切片软件Pango。

随便推点

Git教程---修改、版本退回,删除_Thinkao~的博客-程序员信息网

git修改,版本退回,删除上述我们已经成功的提交了文件,接下来开始进行文件的修改,例如我们把文件修改成这样:Hello my world!We are family!修改完成之后我们输入命令git status:运行之后,结果为:git status:此命令可以让我们时刻掌握着仓库当前的状态,如上命令已经告诉我们文件已经修改,但未提交虽然read..._1671465600

php cvs 设置表头,php生成csv文件header设置参考_青知字幕组的博客-程序员信息网

分享:php生成csv文件的header设置,如下:复制代码 代码示例:$csvContent = "qwe,qwe,qwe,qwe,qwe,qwe,qwe /n";header("Content-Type: application/vnd.ms-excel; charset=GB2312");header("Pragma: public");header("Expires: 0");header...

Matlab函数学习---sum函数(计算矩阵、数组和向量元素总和)_亦我飞也的博客-程序员信息网_matlab sum函数

实例1:创建一个向量并计算向量元素总和实例2:创建一个矩阵并计算矩阵每列元素的总和实例3:创建一个矩阵并计算矩阵每行元素的总和实例4:创建一个三维数组并计算数组特定切片元素(维度1*维度2)的总和实例5:创建一个三维数组并计算数组特定切片元素(维度2*维度3)的总和实例6:创建一个三维数组并计算数组特定切片元素(维度1*维度3)的总和实例7:创建一个三维数组并计算数组所有维度元素的总和实例8:创建一个三维数组并计算数组沿第三维度元素的总和实例9:创建一个int32类型向量并计

计算机专业要不要考研——写的很棒(转)_秋雨潇湘的博客-程序员信息网_你会选择读研吗?你读研的机会成本?不读研的机会成本?

http://www.csaiky.com/wl/201011190918531326.htm      你说:“他们都有很强的开发能力,只是不太喜欢读书,也只是希望混个学历对今后在岗位上晋升有好处”,我可以向你保证,你所说的人绝对不是开发能力很强的人。因为,1)高手不可能不喜欢读书;2)高手不可能想去混一个学历;3)高手不可能认为晋升是因为学历的原因。      还需要说明的是,

微信PaxosStore:深入浅出Paxos算法协议_我的微信公众号的博客-程序员信息网

引言早在1990年,Leslie Lamport(即 LaTeX 中的"La",微软研究院科学家,获得2013年图灵奖)向ACM Transactions on Computer Systems (TOCS)提交了关于Paxos算法的论文The Part-Time Parliament。几位审阅人表示,虽然论文没什么特别的用处,但还是有点意思,只是要把Paxos相关的故事背景全部删掉。Le

SQL数据库 基础_柏修的博客-程序员信息网

这些天看着耿建玲老师的视频,感觉讲的很细致。但是没有个大的框架,学到哪里就是哪里,最后学得云里雾里的。所以就画了有关的框架,不多说了,下面直接上图。这是一个大的框架,由于太大,下面将文件和文件组继续展开     这是有关文件和文件组的继续展开。希望大家多多提意见。

推荐文章

热门文章

相关标签