如何在magicarm2410上移植linux

如何在magicarm2410上移植linux,第1张

原先没有做过U-boot的移植,现在感觉这一步还是通一下比较好,就决定移植一个试试。

我手头的板子是学校的周立功MagicARM2410,原先上面有周立功的bootloader(应该也是U-boot),但是只有一个bin文件,不提供源码(很不厚道的说)。

开发环境就是我的虚拟机Vmware Workstation ACE版+Fedora12+esroot。

相关阅读:U-Boot源代码下载地址 http://www.linuxidc.com/Linux/2011-07/38897.htm

强烈推荐Vmware Workstation ACE版,性能真强大,我原先的一个fedora8的虚拟机映像用别的版本的Vmware Workstation都打不开,要不就是进不了图形界面。在ACE版本下一下子就打开了。

Fedora12经过这些天的使用,感觉还是很不错的,应该说是最好用的fedora版本。交叉编译等 *** 作都没出现过什么问题,网络功能也很好用,

设置虚拟机的时候选择使用网桥,fedora12能方便的访问window下的文件夹(该文件夹需设置为共享),也能方便的上网。做嵌入式linux的人

应该知道,上面这两点是多么的重要。

esroot就是我的秘密武器啦!是利用chroot构建的嵌入式linux的开发环境,或者叫山寨版的IDE。可以大幅提高开发效率,有效的管理开发相关的文件。有时间的时候在把这个东西写上来。

U-boot移植到2410的方法网上资料已经很多了(参考http://www.linuxidc.com/Linux/2011-02/32772.htm),

基本上是基于smdk2410(U-boot支持)再针对自己的板子做一些修改。我们可以思考一下在bootloader阶段会用到板子的那些设备。如果

你的U-boot只用于下载kernel(还有ramdisk等)和引导系统,那么cpu,sdram,nor flash, nand

flash,串口网卡也就基本够了。 而通常所需要做的修改主要集中在2个部分:网卡和nand

flash。smdk2410选用的网卡是cs8900,而MagicARM2410是DM9000。smdk2410没有对nand

flash的初始化,这部分也需要修改。

下面说说我遇到的问题,就是卡住我5个工作日的问题:DM9000不工作。

先说说我一开始做的:

使用DM9000,需要修改my2410.h(复制于smdk2410.h),去掉原先cs8900的内容,改为DM9000的内容。如下:

#define CONFIG_DRIVER_DM9000 1

#define CONFIG_DM9000_BASE 0x18000300

#define DM9000_IO 0x18000300

#define DM9000_DATA 0x18000304

#define CONFIG_NET_MULTI

#define CONFIG_DM9000_USE_16BIT 1

#define CONFIG_DM9000_NO_SROM 1

//#define CONFIG_DM9000_DEBUG 0x01

DM9000的基地址0x18000300是由MagicARM2410的硬件结构决定的。它采用nGCS3片选DM9000,所以基地址为

0x18000300。CONFIG_DM9000_NO_SROM定义不从DM9000片内EEPROM读取MAC地址,这个要设定,因为

MagicARM2410上的DM9000片内EEPROM管脚根本就都没有接,全悬空着怎么读取MAC地址?!

CONFIG_DM9000_DEBUG选择如果设为真的话,会使能dm9000x.c(DM9000驱动)串口会输出更多的调试信息。

然后我改了一点儿dm9000x.c,在最后的dm9000_initialize(bd_t

*bis)函数里面加了一条dm9000_init(dev,bis)。这样U-boot启动后会初始化一次DM9000,否则在用到网卡时才进行初始化

(如使用PING,tftp命令等)。

这样看来就没什么问题了。编译通过,下载到板子上ok。上电后串口出现:

U-Boot 2009.11 (Dec 30 2009 - 00:04:33)

DRAM: 64 MB

Flash: 2 MB

*** Warning - bad CRC, using default environment

In:serial

Out: serial

Err: serial

Net: dm9000

SMDK2410 #

dm9000_init

resetting DM9000

resetting the DM9000, 1st reset

resetting the DM9000, 2nd reset

ERROR: resetting DM9000 ->not responding

dm9000 not found at 0x18000300 id: 0x00000000

网卡灯不亮,PC显示本地连接断开。

问题出现了。然后就是

do{

google,baidu...

修改

编译

下载

上电

试验

}while(网卡工作)

但是5天都没跳出这个循环,逐渐变的食之无味,睡之不香...

不过,在调试中,我也变得越来越了解U-boot。通过查看dm9000x.c,发现初始化的第一步dm9000_reset就没过去,在这一步,

程序会检测DM9000的ID是不是0x90000a46,如果不是,就打印“resetting DM9000 ->not

responding”

开始怀疑是AEN脚的使能信号(DM9000的AEN连接cpu的nGCS3)没传过来,应该是传送一个低电平并持续10us。上示波

器!DM9000的管脚太密测起来也挺困难。结果发现这个信号是没问题的,确实送来了一个低电平。这也说明了0x18000300这个网卡基地址是没错

的。继续郁闷...

直到今天,在下决心仔细再看一编DM9000的芯片资料后,终于灵光一显,发现了一个RST管脚。这是个硬件复位管脚,高电平复位。上示波器!原来...,它竟然一直是高电平!总在复位,片子怎么工作呢?!

直接把它接地,重启,网卡灯亮啦!!!

串口输出:

SMDK2410 #

dm9000_init

resetting DM9000

resetting the DM9000, 1st reset

resetting the DM9000, 2nd reset

dm9000 i/o: 0x18000300, id: 0x90000a46

DM9000: running in 16 bit mode

MAC: 00:14:97:0f:00:00

然后ping,tftp下载都ok啦。调通心情好:)

1,你到网上买一个开发板,几百元,资源丰富的,不要图便宜,然后光盘里有资源,上面会教如何下载程序。

2,学习ARM时,你就要学习LINUX和WINCE这两个最基本的 *** 作系统运用在ARM上。

3,同样的理,你也要买ARM2410/2440为代表的开发板,慢慢按照说明书一步一步地 *** 作,练习,不停地做实验,就学会了。

4,当然,你得打一份工作,关于我上所说的,开始工资不要要求太高,等你做完几个项目后,你真正学会了,才跟老板或上司提,这样继续或或另寻高就才有资本。

总结:多做开发板上的实验,你要多参与这样的项目开发,慢慢就会了。

1、s3c2410

是一块

基于arm9的

芯片,

2、

arm9是一个cpu内核,不是具体的芯片,

3、而s3c2410是一款使用arm9内核再加上一些其他的片上系统组成的

cpu芯片,

4、

linux是一个 *** 作系统,一般用于服务器或者嵌入式实时系统


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7461713.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-05
下一篇2023-04-05

发表评论

登录后才能评论

评论列表(0条)

    保存