成功移植u-boot-2009.03到adm5120平台上
2009-06-16 15:21
288 查看
adm5120是一款做家用路由器的mips 4Kc系列的SOC芯片.
最近的工作是围绕着这个芯片来的.大部分的工作都是参考www.linux-mips.org/,但是之前已经用过和移植过u-boot-2009.03在arm,也很想看看移植到这个mips的SOC上有什么特别的地方.
结果发现是比较简单的,因为mips的代码没有太大的结构改变,原来有1.1.6的u-boot,改动了一些宏定义的命名----这里是需要很仔细的,除了改对应的地方,还要去看有哪些相关的地方.
因为是一个特定的SOC,而且不做的人估计都不熟悉,所以我总结一些通用的出来.
1.首先编译器要指定,在顶层的中完成CROSS_COMPILE配置(提示:这里是mips架构)
2.在cpu/mips/config.mk中进行配置,原来的4KCle什么的,其实就是一个根据CROSS_COMPILE名字来决定编译时使用little-endian还是big-endian,mips的gnu编译器有些不同时支持little和big所以是不能选的-EL或者-EB的(已经默认),这里要注意.同时u-boot有个example目录,下面的东西编译的时候也会遇到这种情况,也要相应的修改一下.
3.start.S里面有一个基本的流程,其中一个必要的环节是调用lowlevel_init,这里u-boot把这个环节提取出来就是为了不同的板子可以有独立的代码,因为adm5120有自己的MPMC(multi-port memory controller)所以代码与其他的MIPS不同.主要就是将SDRAM和总线都配置好,包括类型,速度,wait信号的使用等等.
4.建立stack,要知道stack是C代码运行的基本条件,大部分函数调用和参数传递都会用到它.
5.写一段汇编,GPIO的程序,先让你板子上的一个灯亮起来,对自己是一个鼓励~~也是验证程序是不跑起来了.
6.移植串口程序,串口有信息,你的调试才好弄,一般人自己是买不起仿真器什么的,就算买了,一个公司也不会买一堆,一人一个,所以还是要靠自己~~~让你的程序便于查错是一件很艺术,也很提高效率的事情,呵呵.adm5120的串口是一个类似pl010的东西,所以直接使用u-boot里面pl010的驱动就可以,但是要配置寄存器基地址和一些参数,这个就要看adm5120的datasheet了.
7.flash的命令,这个flash一定要是CFI的接口的,否则就有的忙活了呵呵,lucky,这个板子上就是,那么需要配置的信息不多,要注意flash的B的还是T的,所谓T/B就是Nor Flash里面会有几个sector大小和其他的不一样,一般都是通用的,但是还是要注意一下,仔细看看datasheet就行了.
8.移植网络程序,这里我基本上都是用1.1.6有的程序,稍微改了改因为里面有cache的使用,我把它去掉了,不用cache,因为和新代码的其它部分有冲突.adm5120的是个路由芯片,所以有很多网口,不要配错了,这里是很让人confused的,因为u-boot好了以后我无论连哪个口都可以...这一点我还不是很理解.
还有蛮多细节的,总结一点就是硬件知识,能多一点就多一点,至少要能看懂datasheet并且找出代码,寄存器和具体硬件的关系.
收获比较多,比起1个多月前,u-boot的makefile被我大部分看明白了,从头移植不好说(要看具体是什么芯片了),至少从低版本升级已经不算什么难事了.
最近的工作是围绕着这个芯片来的.大部分的工作都是参考www.linux-mips.org/,但是之前已经用过和移植过u-boot-2009.03在arm,也很想看看移植到这个mips的SOC上有什么特别的地方.
结果发现是比较简单的,因为mips的代码没有太大的结构改变,原来有1.1.6的u-boot,改动了一些宏定义的命名----这里是需要很仔细的,除了改对应的地方,还要去看有哪些相关的地方.
因为是一个特定的SOC,而且不做的人估计都不熟悉,所以我总结一些通用的出来.
1.首先编译器要指定,在顶层的中完成CROSS_COMPILE配置(提示:这里是mips架构)
2.在cpu/mips/config.mk中进行配置,原来的4KCle什么的,其实就是一个根据CROSS_COMPILE名字来决定编译时使用little-endian还是big-endian,mips的gnu编译器有些不同时支持little和big所以是不能选的-EL或者-EB的(已经默认),这里要注意.同时u-boot有个example目录,下面的东西编译的时候也会遇到这种情况,也要相应的修改一下.
3.start.S里面有一个基本的流程,其中一个必要的环节是调用lowlevel_init,这里u-boot把这个环节提取出来就是为了不同的板子可以有独立的代码,因为adm5120有自己的MPMC(multi-port memory controller)所以代码与其他的MIPS不同.主要就是将SDRAM和总线都配置好,包括类型,速度,wait信号的使用等等.
4.建立stack,要知道stack是C代码运行的基本条件,大部分函数调用和参数传递都会用到它.
5.写一段汇编,GPIO的程序,先让你板子上的一个灯亮起来,对自己是一个鼓励~~也是验证程序是不跑起来了.
6.移植串口程序,串口有信息,你的调试才好弄,一般人自己是买不起仿真器什么的,就算买了,一个公司也不会买一堆,一人一个,所以还是要靠自己~~~让你的程序便于查错是一件很艺术,也很提高效率的事情,呵呵.adm5120的串口是一个类似pl010的东西,所以直接使用u-boot里面pl010的驱动就可以,但是要配置寄存器基地址和一些参数,这个就要看adm5120的datasheet了.
7.flash的命令,这个flash一定要是CFI的接口的,否则就有的忙活了呵呵,lucky,这个板子上就是,那么需要配置的信息不多,要注意flash的B的还是T的,所谓T/B就是Nor Flash里面会有几个sector大小和其他的不一样,一般都是通用的,但是还是要注意一下,仔细看看datasheet就行了.
8.移植网络程序,这里我基本上都是用1.1.6有的程序,稍微改了改因为里面有cache的使用,我把它去掉了,不用cache,因为和新代码的其它部分有冲突.adm5120的是个路由芯片,所以有很多网口,不要配错了,这里是很让人confused的,因为u-boot好了以后我无论连哪个口都可以...这一点我还不是很理解.
还有蛮多细节的,总结一点就是硬件知识,能多一点就多一点,至少要能看懂datasheet并且找出代码,寄存器和具体硬件的关系.
收获比较多,比起1个多月前,u-boot的makefile被我大部分看明白了,从头移植不好说(要看具体是什么芯片了),至少从低版本升级已经不算什么难事了.
相关文章推荐
- 成功移植u-boot-2009.03到qt2410上
- U-boot移植之三:开发板平台配置(u-boot-2009.03)
- UBOOT-2012-10在OK6410平台的移植(三)uboot 2012.10编译配置
- U-BOOT 6410平台DM9000AE的移植
- 6410平台移植dm9000ae驱动到u-boot
- uboot-2009.03成功移植到mini2440
- Davinci DM6446开发攻略-UBOOT-2009.03移植2 nand flash的烧写
- 移植u-boot-2010.09到三星SC32442平台(二):nand读写和ax88180以太网支持
- STM32F429i-Discovery 移植并成功跑起来u-boot 2016.05
- u-boot-2009.08移植笔记一,平台TQ2440
- JZ2440平台移植uboot 2016.11(三)
- mini2440 u-boot-2009.03 移植最详细攻略
- U-boot-2009.03移植之十:第一阶段之修改/board/samsung/mini2440/mini2440.c
- 在连续两个平台的uboot和Linux系统移植过程中,在千兆网口调试这块都遇到了很大的麻烦。由于寄存器数量庞大,千兆网口MAC和PHY内部结构复杂,MAC和PHY接口种类多,千兆以太网驱动的调试成
- Sqlite3移植到展讯Mocor平台成功
- 成功移植U-boot-1.2.0到S3C2410
- JZ2440平台移植uboot 2016.11(二)
- uboot phy移植心得(基于hi3531A平台)
- yaffs移植到uboot1.3.1成功
- 移植u-boot-2010.09到三星SC32442平台(三):yaffs2文件系统写入支持