首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

移植UCLINUX到44B0上的过程 03

移植UCLINUX到44B0上的过程 03

下面仔细对付先前提的三个问题。和4510相关的寄存器定义都在INCLUDE/ASM-armNOMMU/ARCH-SNDS100/HARDWARE.H中,同时在这个目录下还包含了一些需要修改的头文件,在后面说明。在HARDWARE.H中根据寄存器的用途和地址作出修改,我并没改它们的名字,只是先改成44B0中相对的寄存器所在的地址,另外还有些修改我不能尽述,可以把文件贴出来。其实对三个问题的解决应该是同时搞好才行,缺了哪个都不能看到正常结果输出,但我只能一一说明。


  调试中我遇到不少问题,但不能都写出来,就讲必须作的吧。第一要保证中断可以开了,在ARCH/armNOMMU/MACH-SNDS100/IRQ.C里加上中断初始化,设置模式及预清一次所有中断,使能全局中断。


  时钟的初始化和中断使能在INCLUDE/ASM-ARMNOMMU/ARCH-SNDS100/TIME.H中设置,频率在TIMEX.中,我用的是TIMER5.对于中断,开始的处理过程和在4510上面不REMAP的情况差不多,差别就在于获取中断号,可以看看源文件ARCH/ARMNOMMU/KERNEL/ENTRY-armV.S里面有个get_irqnr_and_base的宏定义,我先自己改了个,后来试了在calibrate_delay中TIMER中断老有问题,我也没再仔细研究,把TPU的相关代码直接COPY来用,呵呵,好了!显示出我的BogoMIPS了,不过显示值是我实际运行频率的一半,我想是因为我的DRAM数据总线只有16位的原因吧。后来运行老是会死掉,要不就显示一些错误信息停掉,要不就疯狂打出乱七八糟的数据来,反正显示不到SH这个SHELL下,让我一直怀疑这样做是不是有问题。后来才用降频法,我原来用50M,和4510板一样,后来改到20M才算是正常了,(好在我的BIOS可以交互式改频,不用退到98下修改再烧入),这个我估计和硬件稳定性有关,也可能你的可跑高频。不过正常的时候是停住了,没错误信息也没疯狂打印,我敲了下键盘,之后就显示出一堆数据,进入了SH,再按键没有输出,奇怪!这是串口控制台的问题了。


  再讲讲串口控制台,我开始把4510中相对的寄存器换到44B0中相应的位置,并对状态寄存器做了相应的转换,因为4510的是一个寄存器而44B0是两个,我把DRIVERS/CHAR/SERIAL-SAMSUNG.C中相应读状态的语句都加了加读一个寄存器内容的操作,以为做得可以了,实际还是出了些问题,先是忘了改注册发送中断的部分,所以出现前面的问题,改过后能输出我按的键了,不过是按键有时没显示有时显示两三个字符,但输入命令后居然可以执行。我想再仔细研究一下源码吧,可觉得这是一项很艰苦的工作,我对LINUX并不熟,SEIRAL文件有一百多K四千多行,再加上相关部分各种结构和控制台、中断等等,不是能短期内完成的。后来还是TPU兄的源码帮了忙,我看了那里面使用串口控制台的部分,有个SERIAL-CORE.C和一个S3C44B0.C文件,前者应该是个标准文件,后者比较小,包括控制台的一些标准操作,里面调用前者的一些函数。摸索一番后把它们COPY到CHAR目录下,作了一些修改,并在MAKEFILE里面去掉SERIAL-SAMSUNG,加上后面两个,编译-出错-修改-编译……,最后搞掂,怀着忐忑不安的心情把IMAGE.RAM下到板上RUN,呵呵,一用就好。运行自己以前在4510下编了个最简单的用户程序输出“Hello,uCLinux”(我的LINUX编程水平仅限于此)也成功了!


  通过上述总结,大家应该可以自己动手做做了,之后就测试其是否可以正常运转了,如果有什么缺陷漏洞的话我想应都可解决,希望高手们可以帮忙修改。这一招可叫做借壳上市,如果成功的话可以在uC编译增加一项44B0的选项以为其正名。


  把我的步骤总结一下,文件位置就不说了1.修改运行地址和存储器参数,包括两个MAKEFILE和一个CONFIG.IN,再 make menuconfig不选手动输入存储器参数。
返回列表