官方QQ群收藏本站

百问linux嵌入式论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4122|回复: 2

移植u-boot-1.1.6遇到的一些问题总结(附: u-boot LCD 补丁)

[复制链接]

1

主题

1

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2011-12-27 22:27:00 | 显示全部楼层 |阅读模式
       
        一直在学习linux内核,进度缓慢,想着arm平台的相对简单一点,遂决定“曲线救国”,先从嵌入式入手,再往PC平台上转。网上搜了一下,有人说国内的arm开发板都差不多,我想那就随便买一块吧。偶然碰到“百问网”,有帖子推荐韦同学的板子,点开链接,买之。于是我充满血泪的arm学习之路就此展开......
        首先郑重声明:我写这篇文章的目的主要是分享经验,希望能够帮到那些现在和曾经的我一样在u-boot上苦苦挣扎的人(这部分人应该很少)。俗话说“授人以鱼不如授人以渔”,我尽量把学习过程中遇到的问题、我的想法和解决办法详细的写出来,文笔欠佳,请读者见谅。我的板子是韦同学淘宝网上图片所展示的那块板子,有人说是jz2440,但是板子的电源开关旁边明文印着“wolf2440 v3.0”的字样,到现在我也没搞清楚我的板子到底是哪个娘生的,如果韦同学看到这篇帖子,希望能够给在下解惑。不同的板子配置可能有差别,如果你的板子和我的不同,此文仅作参考,切记学习之道在于活学活用。

(1)纳尼,wolf2440是神马东西?!
我是一个月前在韦同学淘宝网上买的板子,同时也买了一本韦同学的《嵌入式Linux应用开发完全手册》。当天晚上定的货,结果第二天书就送到了,而韦同学实在不给力,到第三天的晚上才发货,又过了两天板子才到手,让我好等。
我性子比较急,拿到板子立马插上电,当时什么也不懂,电源开关也找不到,好一会才找到开关。打开板子,正常启动,一会进入linux图形界面,板子一切正常。下面开始做实验吧。
        翻开书,书上说开发板上有跳线控制是从NOR FLASH或者NAND FLASH启动。OK,跳线找到了,下面短接一下……纳尼,跳线帽在哪里!!!我找遍了快递的包裹也没有找到传说中的跳线帽,怎么短接?用金属丝缠起来可不可以?用夹子夹起来呢?当时就傻了,到处翻资料,终于在淘宝网上找到了事情的真相。答案就是:你不需要短接跳线的,因为板子根本就没有NOR FLASH!换句话说你只能把程序下载到NAND FLASH上,通过加电时自动复制到steppingstone进行启动。后来我才发现板子上印的“wolf2440 v3.0”字样,原来它和书上说的根本不是同一款。比如说它用的NAND FLASH是K9F2G08U0M,容量为256M,每页大小为2kB,OOB为64字节,不是书上说的每页大小为512B的xxxxxx;网卡是DM9000而非书上的CS8900,还有LED灯……
        结论:这个不知道是jz2440还是wolf2440的板子完全不是书上说的那个板子,所以书上的理论可以学习,代码则不可以照抄,否则会悲剧滴(这个……怎么事先没有人告诉我呢?)。
        (2)oflash不能读取配置文件
        既然只能从NAND启动,那就老老实实做实验吧。第一个是LED灯实验,把书上的实验代码敲进去(前面说过,因为板子和书不配套,这里的代码实际上不能达到实验效果),编译通过。刚好手边有一台Thinkpad T43带有并口,连上线,运行sudo ./oflash,依次输入2(wiggler,这里选wiggler是因为配套的那个并口到JTAG转换器上印的就是wigger)、1(s3c2440)、0(nand)、0(write)、0(offset,第0个页面)和led.bin,按下Enter键,开始烧写程序。
        烧写过程中,oflash在每一行开头打印一个字母‘E’,然后循环打印字母‘p’,直至烧写完成。如果打印其它字符,说明烧写中出现问题。至于是什么问题,会不会导致程序的不正常工作,这就要问程序的作者了。但是据我观察,实验例子的程序因为太小,一般不会出现烧写错误,所以请放心使用。
        因为每次烧写都要输入一串数字,很麻烦,所以试了光盘上oflash使用说明的办法,输入“sudo ./oflash 2 1 0 0 0 led.bin”,结果不管用,还是要输数字,配置文件cfg.txt也不行。这里给不太熟悉bash的同学推荐一个办法,输入“echo 2 1 0 0 0 | sudo ./oflash led.bin”即可开始烧写,当然更方便的方法是写一个脚本,不再赘述。
        结论:光盘上的oflash对命令行和配置文件都不太感冒,希望作者改进。另外我推荐的就是可以在windows下运行的H-JTAG程序,此程序功能强大,在并口+wiggler下的烧写稳定速度竟然达到8kB/s,远超oflash,效果喜人。
        (3)试验代码什么的不能正常工作
        其实说了那么多,这里才是核心的问题。我遇到问题喜欢自己琢磨,不太喜欢上论坛发帖求教,所以不清楚对于这个问题其他人有没有更好的解决办法,而我的办法就是看硬件电路图。
        买板子的时候附赠的那个光盘,根目录下sch文件夹里面放的就是jz2440/wolf2440的电路图,根据我的实际验证结果,这个电路图还是靠谱的,实际上整个光盘只有这个电路图和oflash程序,还有那个bin文件夹里的程序跟板子配套,其它的都是浮云。比如说LED灯实验,看板子电路图你会发现,实际板子上有三个LED灯可用(不是书上说的4个),对应的GPIO引脚分别是GPF4、GPF5、GPF6,按照这个改实验代码即可,其它实验不在一一详述。另外我建议再准备一本S3C2440的手册,网上到处有下的,我建议是看英文原版的,中文版的好多印刷错误,还偶尔缺一两页。
        结论:书本和板子不配套,所以书上的实验不能在板子上运行成功,需要我们参照板子电路图和S3C2440手册进行修改。
        (4)u-boot-1.1.6不能正常工作,串口乱码……
        如果你用的不是u-boot-1.1.6,又或者你用的那个不是号称“jz2440”却又印着“wolf2440”字样的板子,那么我只能说下面的话“仅作参考”了。
        实际上,如上面所说,光盘根目录下bin文件夹里面的程序跟板子是配套的,直接把u-boot.bin烧写入NAND FLASH起始处即可。如果用oflash烧写,大概要超过1分钟的时间,而用前面说的H-JTAG的话不用10s就可以搞定。然后启动u-boot,通过tftp或者nfs下载bin文件夹下的uImage,烧写到NAND FLASH偏移地址为0x0006 0000处,烧写;下载fs_qtopia.yaffs2文件,烧写到偏移地址为0x0026 0000处。命令如下(在串口终端输入):
        #tftp 0x30000000 uImage
        #nand earse 0x00060000 0x00200000
        #nand write.jffs2 0x30000000 0x00060000 filesize        (这里的filesize是文件uImage的大小,你运行完上面的tftp时会有显示的,注意要用十六进制的)

        #tftp 0x30000000 fs_qtopia.yaffs2
        #nand earse 0x00260000 0x04000000
        #nand write.yaffs 0x30000000 0x00260000 filesize        (这里的filesize是文件fs_qtopia.yaffs2的大小,也要注意用十六进制的)
        强调两点:一是运行nand write命令之前一定要先擦除,当时我就省略了这一步,每次启动都提示读取错误,结果花了两天时间才找出来原因,流泪……
        二是文件大小一定要用十六进制,u-boot默认你输入的数字是十六进制的,所以上面的命令你加不加“0x”都无所谓。
        韦同学发过一个帖子,上面有让u-boot-1.1.6支持大页FLASH和DM9000网卡的补丁,打完补丁后编译得到的u-boot.bin经过我的验证,确实可以在jz2440/wolf2440上正常运行。至于串口乱码的现象,我也碰到过,现象是只要板子一开机,不管运行的是什么程序,串口终端就不停的往外输出毫无规律的乱码。后来换了一个USB转串口线就正常了,如果你也碰到这种情况,应该是线有问题。
        最后,奉上我自己写的LCD驱动补丁,打在原版的u-boot-1.1.6上后(注意是原版,因为这个补丁已经包含了上面提到的韦同学的支持大页和DM9000的补丁),u-boot启动时信息将从板子的LCD屏上输出,而输入仍然是从串口获取。最开始由于我没有串口,我是想写一个bootloader,在板子的LCD上打印消息,通过网络获取命令输入。可是我网络基础有限,到网络那一块卡住了,没法往下写,只好去买了一根USB转串口线,可是原来写的LCD程序又舍不得扔,就把它集成到u-boot里去。
        这个补丁有另外一个好处,如果你的u-boot总是输出乱码,而你又不能确定问题出在哪里,若打上这个补丁后LCD输出正常,那么应该可以肯定是串口的问题。对于没有串口又不想买串口线的同学,这个补丁至少可以让你看到输出,不用再摸黑调试。差点忘了说了,因为u-boot上的USB初始化代码用到了LCD的一些专有引脚,我没有耐心去把它们一一分开(它们肯定是可以共存的,Linux已经证明了这一点),索性就把USB初始化代码给注释掉了,所以这个补丁的副作用是u-boot不能使用板子的USB口。如果想要关闭LCD支持而使用USB口,只需要注释掉include/configs/100ask24x0.h中的“#define CONFIG_LCD 1”重新编译即可,很方便吧。
        从板子到手到linux在开发板上运行起来,有一个月的时间。中间遇到好多莫名其妙的问题,因为板子和资料不配套,好几次都想把板子扔掉重新买一块,实在是太痛苦了,忍不住想质问版主—实验代码都不配套为什么也不说一声!!!我是一个新手,都是自己一路摸索过来的,但是摔的跤多了,可能比大家多一些教训,欢迎各位提问,大家相互交流学习。

为什么上传不了附件!!!!!!!!!!!
谁能告诉我如何上传附件。。。。。。。

回复

使用道具 举报

56

主题

5186

帖子

7811

积分

超级版主

Rank: 8Rank: 8

积分
7811
QQ
发表于 2012-1-28 09:22:00 | 显示全部楼层

回复:移植u-boot-1.1.6遇到的一些问题总结(附: u-boot LCD 补丁)

好贴!百问网上传不了附件了,年后会改进一下论坛
回复 支持 反对

使用道具 举报

8

主题

43

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2012-3-3 08:25:00 | 显示全部楼层
这位爷忒幽默了!现在可以传附件了:smoke
回复 支持 反对

使用道具 举报

技术支持
在线咨询
咨询热线
0755-86200561
微信扫一扫
获取更多资讯!

Archiver|小黑屋|百问linux嵌入式论坛     

GMT+8, 2020-2-29 20:09 , Processed in 0.064710 second(s), 12 queries , File On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表