没有合适的资源?快使用搜索试试~ 我知道了~
u-boot移植文档,对源码进行实地修改
资源推荐
资源详情
资源评论
环境:带有 的虚拟机,代码查看器 与 通信的工具
,开发板 ,终端 。
首先从网上下载一个 ! 版本的 "# 原码,在虚拟机中解压,修改 $% 下交叉
编译器的路径,如下:(红色为修改项)
&'&()*)
+,+$-./01220*#%32, 4,2" 4"#" !
2*"2#2*""
执行:*%
*%*%,
*%
如果能正常通过说明该工作环境配置正确
开始制作适合自己开发板的 "#
1、 在移植之前,先建立好与自己开发板相关的配置文件,这些文件都放在 board 目录下,
该目录下的每个目录都对应一个开发板,我的开发板为 tq2440,但 board 下并没有
2440 的配置文件,则我们需要新建一个目录,命名为 tq2440,因为 2440 与 2410 的
区别不大,我们可以以 board 目录下的 smdk2410 作为模版建立我们开发板的配置文
件,拷贝 board/smdk2410 下的所有文件到我们刚才新建的 tq2440 目录下,把刚才拷
贝的 smdk2410.c 修改为 tq2440.c,并修改 board/utu2440/Makefile,把 smdk2410.o
改名为 tq2440.o。
2、 建立头文件,它定义了全局的宏定义等,刚才我们使用了 smdk2410 作为模版,现在
我 们也 是用 smdk2410 作 为 模 版 建 立 头 文 件 , 拷 贝 include/configs/smk2410.h 到
include/configs/tq2440.h,并针对不同的需要添加或减少宏的定义。
3、 修改 u-boot 根目录的 Makefile,为 tq2440 建立编译选项,仿照 smdk2410_config,在
下方添加如下:(红色为修改项)
*%,5
6'&$7+8.9)'&65,1)**:*%8;//
,5
6'&$7+8.9)'&65,1)**:8;//
执行:*%
*%*%,
*%
如果能正常通过则进入代码修改阶段。
汇编代码修改:
修改文件:2*:2
在汇编代码中主要修改时钟的初始化,把代码从 8(8</( 搬运到 ($ 的过程和
的刷新时间。
.时钟初始化(红色为添加项)
……
=
2>/75/75-/7155>2
2>/7$?@>2
1/7<.A8
*B =
CD
=
#%,
源码中有时钟的初始化,将它屏蔽(蓝色字体为屏蔽段),然后跳转到 %, 执行自
己 的 代 码 , 代 码 后 附 , 晶 振 为 $ , 设 置 /7 : /7 : -/71 : :
E1$5$54$。
.8(8< 的操作
=+8.9,7.-,0/+(0,;F++
5 2>;"F($ >2
, 2>G">2
,0H,F(0 2>I*($>2
*2>J#>2
#,#
,*#,
,#,
# 2>G"?*#>2
#3*2>555?>2
=
2>G">2
3,5
* @K"L 2>3*CD>2
* @K"L 2>3CD>2
* 2>CD>2
# 3,
=
将以上代码放到设置堆栈之后,"# 也有自带的代码拷贝过程,将它屏蔽(蓝色字体),
而在比较 时,相等说明运行在 ($ 中不用拷贝直接跳到清除数据区 ,#(原来
是跳到堆栈),不相等跳到 3* 中执行自己的代码。
.我们改的时钟的初始化和把代码从 8(8</( 搬运到 ($ 的过程。代码都在放
#, 中,代码后附,所以:
)把该文件放到M#M 中
)修改 $% 中的
COBJS := tq2440.o flash.o boot_init.o
4)修改链接文件 u-boot.lds,由于 cpu 启动时只将 4K 的代码搬到 RAM 中执行,为了
保证函数能被正常调用添加下面一行:
.text :
{
cpu/arm920t/start.o (.text)
board/tq2440/boot_init.o (.text)
*(.text)
}
4.修改 falsh 的刷新时间
修改文件:\board\tq2440\lowlevel_init.S
查看芯片手册得 period=7.81us,而之前所设置的时间 HCLK=100M
#define REFCNT 0x4f4 /* period=7.81us, HCLK=100Mhz, (2048+1-7.81*100)
*/
C 语言修改
主要修改两处:将时钟的重复设置屏蔽,计算串口时钟
汇编执行完后会跳到 start_armboot 函数
进行:
,2>基本的处理器相关配置""2*:2 >2
NNNNNN #,2>基本的板级相关配置""#22 >2
NNNNNN ,2>初始化例外处理""2*:22 >2
NNNN B,2>初始化环境变量""**2*, >2
NNNN ,#2>初始化波特率设置""#,*2# >2
NNNNNNN ,2>串口通讯设置""2*:22 >2
NNNNNNN ,,2>控制台初始化阶段 ""**2 >2
NNNNNNN 3,#2>打印 "# 信息""#,*2# >2
NNNNNN *,2>配置可用的 ($""#22 >2
NNNNNNN 3,*,2>显示 ($ 的配置大小""#,*2# >2
1.将时钟的重复设置屏蔽
u-boot 的源码在两处设置时钟,一处在汇编,一边在上面的 #,,修改文件:\board
\tq2440\tq2440.c,所以我们将此处的时钟设置屏蔽掉,如下
#if 0
/* to reduce PLL lock time, adjust the LOCKTIME register */
clk_power->LOCKTIME = 0xFFFFFF;
/* configure MPLL */
clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
/* some delay between MPLL and UPLL */
delay (4000);
/* configure UPLL */
clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
#endif
并将设置好环境变量 gd->bd->bi_arch_number 将 MACH_TYPE_SMDK2410 改为 MACH_TYPE_T
Q2440
如下
/* arch number of SMDK2440-Board */
gd->bd->bi_arch_number = MACH_TYPE_SMDK2440;
同时也在 include\asm-arm\mach-types.h 中将 MACH_TYPE_SMDK2410 改为 MACH_TYPE_TQ2
440
2.计算串口时钟
修改文件:\cpu\arm920t\s3c24x0\speed.c,由于 smdk2410 跟 tq2440 的时钟计算公
式及寄存器不同,所以这里的算法要重新修改,不然串口没输出或是显示乱码。代码后附
然后执行:make distclean
make tq2440_config
make
将 u-boot.bin 写进开发板
查看环境变量:printenv
设置环境变量:setenv ipaddr 192.168.1.99
保存环境变量:saveenv
其它设置类似
添加 u-boot 命令,如添加 ping 命令,只要在\board\tq2440\tq2440.h 中定义就行了,如:
#define CONFIG_COMMANDS \
(CONFIG_CMD_DFL | \
CFG_CMD_CACHE | \
CFG_CMD_PING | \
/*CFG_CMD_NAND |*/ \
/*CFG_CMD_EEPROM |*/ \
/*CFG_CMD_I2C |*/ \
/*CFG_CMD_USB |*/ \
剩余23页未读,继续阅读
资源评论
zaolinzheng
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功