新闻中心

U-BOOT移植心得

作者: 时间:2012-08-04 来源:网络 收藏


//===================================================================
天嵌与自己的差别分析和领悟
先列出天嵌公司里研发人员写的 和 我们自己(小)的最大不同:
对比了一下,发现最大的不同在于common/main.c文件中,即在两阶段基本一样
不同点:(行数按天嵌版本的)
abortboot()函数(在main_loop()中被调用)
Ln239: printf ( “ Press Space key to Download Mode ! ” ) ;
Ln303 :在检测是否 a key press 时,加入了显示LOGO程序:embedsky_tq_logo();
main_loop()函数
Ln 381: LCD初始化程序
Ln481 :分支选择 下载 OR 加载模式:if ( BootFrmNORFLASH() )
run_command (“menu”,0 );
else
{
Printf (“ Booting Linux n ”);
run_command (“boot_zImage”,0 );
}
解析一下:
前面几点都是关于LCD和LOGO显示的不多说(因为自己移植是没弄到LCD的移植)
说一下main_loop()函数中Ln481 :分支选择 下载 OR 加载模式
首先,run_command 这个是执行命令函数,一看名字就知道,也是在/common/main.c中定义的
说说最重要的“menu”和“boot_zImage”吧
1 If从NORFLASH进行启动,则为下载模式,则执行menu()这个函数,在/common/cmd_menu.c中定义
打开cmd_menu.c文件会发现,里面都是一些串口选项列表,我们打开2440电源发现的下载列表都是从 main_menu_usage()函数中打印出来的,而选择的项又通过menu_shell()通过控制台执行各种我们的选项,每个选项的如何执行过程都列得很清楚,感觉就像跑裸机时,自己按照fzb的串口控制台弄出来一样

2 Else 从NANDFLASH进行启动, 则为加载模式,进行LINUX系统的配置和启动。
在lib_arm /boot_zImage.c 文件:里的boot_zImage( )函数
函数执行的内容大概如下:
1、 copy kernel image
2、setup linux parameters
3、get machine type
4、GO -> call-linux

对比后的一些感悟:
虽说自己也跟着移植过,也能建立自己的板级支持包,能实现基本的串口控制台,NAND OR NOR FLASH,DM9000网络,JFFS2文件系统等基本功能,但比起天嵌这个,能下载 和 加载模式,还是有很多不足
所以说,自己移植只是感觉其中的方法,领悟之后还是在天嵌的基础上再加进一步移植吧,感觉没必要从头到尾都自己搞一遍,方法懂了,框架熟悉了就好


//===================================================================
移植过程的一个简单举例:
因为移植很多都是基于smdk2410来改的,首先要对2410和2440的区别有一定了解,再者就是自己在裸机上是编写过改外设的驱动的,这样移植起来就比较舒服,不会说什么都跟着做,感觉很虚,学不到东西。
就举让支持NANDFLASH的读写
1 先是在总的宏定义头文件中加上你外设所需的宏定义
总的宏定义路径为 /include /configs / XX.h/ (最后这个.h文件一般是以板的名称命名)
添加宏定义,如:#define CONFIG_NAND_BASE 0
。。。 等等
那怎么知道添加什么宏定义呢?一般来说看对外设初始化函数,和U-BOOT二阶段启动函数要用到哪些就定义哪些。。。
2 改相应的初始化函数:如board_nand_init函数和s3c2440_hwcontrol函数
因为U-BOOT里初始化函数基本基于2410的,而2440的NAND配置参数和它不同,需要改部分地方
3 添加初始化函数到第二阶段board_init_r处,一般来说基本外设都已添加了,看你是否定义宏来让其编译这函数

移植一些规律总结:
其实多移植几次就会发现,UBOOT的移植修改还是遵循着一定的规律。即是先在配置头文件中打开相关宏定义支持,在到板级初始化(一般是第二阶段初始化过程)代码中添加需要支持功能的初始化函数。
如果初始化函数对应的板版本不兼容或不存在,就要自己编写了。

//===================================================================
最后,说说U-BOOT的编译吧
说到编译,建议去看《从庖丁解牛说uboot如何编译》,说得很好。
而说到编译的执行过程,建议看看
http://hi.baidu.com/serial_story/blog/item/871fc30311670783d53f7c74.html
《详细分析make uboot 最后的编译链接的具体执行过程》

最后谈谈编译不通过的问题,如果是内部自己程序出错,可以通过提示信息查出
如果是出现ERROR一百多个,或者什么arm-linux-ld的问题,那应该是编译器版本不兼容问题,建议换换新的版本或更旧的版本再试试。


好,到这里算是可以继续下一步系统的移植和驱动的编写了,而最近503的肥仔说想了个有关投影仪与摄像头的项目想做,刚好我对图像处理这方面比较感兴趣,而且觉得他创意很好
可能去做了哦,GO
头很晕,歇几天啦~~

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭