成功移植u-boot-2009.03到qt2410上

本文记录了作者从零开始移植 U-Boot 的过程,包括使用 C 语言替代汇编进行启动、解决网络配置问题及调整超时设置等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    其实这是在我移植kernel和文件系统以前就做了的工作.

    想自己写一个u-boot,一个文件一个文件的抄,最后实现了一个没有网络的u-boot,在这个过程中,看了用到的每一行u-boot-2009.03的代码,还加了一些其他的代码----不过不是qt2410平台上.在学会(至少是90%看懂了u-boot的结构和代码)以后,觉得还是利用原有的移植比较快,毕竟没有必要自己去写所有的代码,重点还是放在后面的linux和驱动,应用上吧.

    开始移植.

    本来最近工作里就在用一个mips上的u-boot-1.1.6的,对比了一下,发现mips和arm,Nor和Nand,有一些重要的差别,在使用Nor Flash的mips平台(adm5120)上,启动是直接由汇编建立stack然后就转到C,由C来做一些本来汇编完成的工作,再回到汇编,然后重定位,跳转,等等----这样简化了代码,因为汇编毕竟还是比较容易错一点(对大多数人来说).

    于是我就把qt2410的移植工作分成了两段.第一部分是nand启动,原来的代码是汇编写的,看懂了,但是觉得反正启动有4k SRAM,不如就用C好了,就借鉴上面的方法,先建立stack,然后跳到C,呵呵...C里从Nand把代码搬到SDRAM-----of cause, SDRAM是要在stack建立以前就初始化好的.

    这里我花了不少时间去让代码具有"可移植性",因为我看了不少U-Boot的移植,发现加进去的代码不少都是"破坏性"的,只能用做单一的工程了----虽然这是难免的,但是我自己还是想稍微弄好一点,于是,代码中用到的宏,代码的命名,location等等,都尽量放在该放的地方,nand_spl里放nand的东东,尽量不向cpu/arm/里面添加代码,等等.

   better移植,better hardware知识,不要移植不需要的垃圾代码...据说代码好的一个标准减少不必要的多余代码(永远不用的),所以没有(或者不用)Nor Flash,就没有必要放上去.这里要做的是仔细检查makefile和宏定义,不要产生不需要的代码.

   总之,费了一翻工夫以后,成功了.

   启动以后网络不能用,查了很久,发现是启动的时候(Nand部分)配置总线的时候地址不对,改了以后,ping,通了,tftp...,serverip没设置,这里应该是一个u-boot代码的错误,只要再写一次setenv serverip xxxxx, saveenv就行了,不知道,这个问题的root cause我想不起来了----应该是代码的缺陷,就是来来回回环境信息和变量值的关系问题.

   好了,tftp...,到重试,把地址换到另外一台机器,就OK了,后来发现是自己家里的网络太慢了原因(具体原因不知道),可能是Hub的原因,或者虚拟机太慢了...,最后在net.c里面把TIME_OUT的值改大一些就OK了.

   还有一个比较重要的,就是bi_arch_number,这个是u-boot里面的关于板子的编号的信息,当时我没填,后来用新的kernel的时候发现,不相等kernel会执行不下去----当然可以把这个代码去掉,不过既然用人家的代码,就尽量保持原状,所以我search了一下,内核和u-boot里都有qt2410的编号,lucky,加上就行了.

   废话了一些在日志里,主要实在没时间细写(虽然很想),先流水帐一个提纲吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值