李迟按:经常碰到些笔试题、面试题,将指针、数组、字符串操作及内存的一些东西发挥到极点,本人以为,以内存角度看问题,有时会更清晰。不过,本人能力不怎么行,写完这篇文章后一段时间,又忘了二维数组和指针的指针了。一来年纪大了,记忆力不行,二来一没碰这些东西就会忘得很快。
u-boot移植随笔(16):u-boot技巧二则
u-boot移植随笔(15):继续使用svn进行版本控制(合并分支实例)
搞u-boot很久了,一直在用svn进行版本控制,感觉非常好。
不过我是最近才找到合并分支的方法,这里介绍一下。
u-boot移植随笔(14):困难重重,前路未知
这两周的周末,我都将我的开发板带回家(此处指租的房子)里搞。本来以前根文件系统这一部分是比较简单、容易的,结果搞了很多天,都没进展。第一个周末带回来是解决了u-boot引导内核的问题,第二个周末却解决不了NFS和jffs2的问题,看来我的能力下降了。
u-boot移植随笔(13):u-boot2010.09移植到8MB Nor Flash的S3C2440,第一步搞定(补记)
这个本来是我发在csdn上的帖子,有一次使用搜索引擎时不小心搜索到。于是再将它放到博客里。
u-boot移植随笔(12):关于u-boot引导内核出现“Error: unrecognized/unsupported machine ID (r1 = 0x33f4fee8)”的问题
这个问题同样经典,大意是说u-boot传递的machine id不正确。在网上看到的文章几乎如出一辙:有两种方法,一是修改内核的head.S(具体在./arch/arm/kernel目录下),二是修改u-boot代码。可惜,第二种方法中出现的源代码文件,在我移植的版本中没有发现。
u-boot移植随笔(11):一些内存地址的研究(gd_t和bd_t结构体)
李迟按:学计算机的人不应该对二进制反感,因为计算机只认识0和1,但面对许多枯燥的0和1,有些人望而却步。我大约是大三、大四时候开始强迫自己认真对待二进制的,最早应该是研究SD卡时候,其时主要研究FAT表,使用WinHex工具;后来研究网络协议,主要是ENC28J60芯片,代码是国外一个组织写的,基于AVR芯片,这个实践算是理论结合实践。再后来,慢慢对底层的东西感兴趣,不断看,研究,心里老想着数据在内存中如何分布的(gdb是个强大工具)。现在,对于研究某个文件的结构,直接分析二进制数据是最好的方法。因此,建议看到此文的同志,不妨对自己狠点,过了这个坎,后面将是一马平川。正如那些说学英文很难的同志,如果肯下点苦功(辛苦的“苦”),相信勤能补拙,定会有收获。
u-boot移植随笔(10):解决引导内核遇到undefined instruction的错误
前天解决了内核不能引导的问题了。在网上搜索了一些资料,才有点明白这个是怎么回事。
不能引导内核时提示的信息各种各样。像ERROR: can’t get kernel image!、Bad Magic Number、 Bad Data CRC这些。这些有时出现,有时又不出现,很是诡异。
不过最严重的还是遇到undefined instruction的错误。
u-boot移植随笔(9):终于解决Nor Flash的问题了
今天解决了困扰我好几个月的问题了。这个问题本来应该在过年前就解决的,但是那个时候死活就是没招。
其实问题很简单:将u-boot下载到内存中,再使用cp命令将u-boot从内存复制到Nor Flash零地址处,之后就可以从新的u-boot启动了。网上说得很轻松,然而实际解决起来却不然。因为,我的Nor Flash是64Mbit的,即8MB。解决封装问题很轻松——开发板上的地址线预留出来了,可以扩大容量。使用并口下载的问题也解决了——到H-JTAG官方论坛上下载对应的配置文件。
u-boot移植随笔(8):EEPROM移植及测试
EEPROM说简单也简单,说难自己也捣鼓好几天。
开发板上的EEPROM是AT24C08,大小1024个字节,使用I2C接口。——严重注意,EEPROM是指设备,而I2C是指接口,两者有着很密切的关系,但不可混淆它们,这点必须注意。
u-boot移植随笔(7):u-boot启动流程简图
u-boot移植随笔(6):自定义u-boot命令点灯
前几天一不小心在CSDN论坛上发帖散分,同时许诺完成点灯就结账,经过努力,终于可以在u-boot的shell中输入自定义的命令来点灯了。下面简单讲一下,但不想深入讲解原理。
u-boot移植随笔(5):u-boot的内存分布图
花了两天时间来专门研究u-boot的内存分布,这个图网上已经有了,但只是大致图形,没有详细、深入解析。所以自己就专门画了图,添加一些东西。
此外,还专门测试了一下u-boot下全局变量、未初始化变量等等的地址分布,也画了一张图。不过好像跟linux下进程的内存分布不太一致,估计是u-boot自己管理内存的——很明显,此时linux还不知道在哪里呢。但是,这些都不妨碍我们学习一些底层的东西。