返回列表 发帖

[开发文档] 超全的2410开发文档,快速掌握嵌入式开发!

hao

ding ,louzhu,hao ren !

TOP

好东西大家分享,为什么一定要罐水啊

TOP

新人继续学习中。。。。

TOP

回复 3# 的帖子

刚才看了一帖子,晕下载不了

TOP

jgfkhjkhjkhjk

TOP

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

TOP

新手新手,DOWN下来看看

TOP

哎,怎么没早点知道这个网站呢

TOP

看一看,有没有什么好东东!

TOP

haohao

kkkkkkkkkkkkkkk

TOP

顶顶顶!!!好东西啊

TOP

顶~好东西顶顶看看~

TOP

回复 1# 的帖子

顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

TOP

这么好的东西不能不看

TOP

看看,学习学习

TOP

看看是些什么东东!!

TOP

顶~好东西顶顶看看~

TOP

第一部分 网卡CS8900A驱动程序的移植

一、从网上将Linux内核源代码下载到本机上,并将其解压:

#tar jxf linux-2.6.11.1.tar.bz2

二、打开内核顶层目录中的Makefile文件,这个文件中需要修改的内容包括以下两个方面。

(1)指定目标平台。
移植前:
ARCH?= $(SUBARCH)
移植后:
ARCH :=arm

(2)指定交叉编译器。
移植前:
CROSS_COMPILE ?=
移植后:
CROSS_COMPILE :=/opt/crosstool/arm-s3c2410-linux-gnu/gcc-3.3.4-glibc-
2.3.3/bin/arm-s3c2410-linux-gnu-
注:这里假设编译器就放在本机的那个目录下。

三、添加驱动程序源代码,这涉及到以下几个方面。

(1)、从网上下载了cs8900.c和cs8900.h两个针对2.6.7的内核的驱动程序源代码,将其放在drivers/net/arm/目录下面。

#cp cs8900.c ./drivers/net/arm/
#cp cs8900.h ./drivers/net/arm/
并在cs8900_probe()函数中,memset (&priv,0,sizeof (cs8900_t));函数之后添加如

下两条语句:
__raw_writel(0x2211d110,S3C2410_BWSCON);
__raw_writel(0x1f7c,S3C2410_BANKCON3);
注:其原因在"第二部分"解释。

(2)、修改drivers/net/arm/目录下的Kconfig文件,在最后添加如下内容:
Config ARM_CS8900
tristate "CS8900 support"
depends on NET_ETHERNET && ARM && ARCH_SMDK2410
help
Support for CS8900A chipset based Ethernet cards. If you have a network(Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from as well as .
To compile this driver as a module, choose M here and read. The module will be called cs8900.o.
注:内核系统配置文件由2.4版本的config.in变成了2.6版本Kconfig文件,在这个文件里面添加如上内容,则在运行make menuconfig或者make xconfig命令的时候就会出

现:
[ ] CS8900 support
这一选项。

(3)、修改drivers/net/arm/目录下的Makefile文件,在最后添加如下内容:
obj-$(CONFIG_ARM_CS8900) += cs8900.o
注:2.6版本内核的Makefile文件也与2.4版本的有所不同。添加以上语句,就会使内核在编译的时候根据配置将cs8900A的驱动程序以模块或静态的方式编译到内核当中。

(4)、在/arch/arm/mach-s3c2410/mach-smdk2410.c文件中,找到smdk2410_iodesc[]结构数组,添加如下如下内容:{vSMDK2410_ETH_IO, 0x19000000, SZ_1M, MT_DEVICE}

修改之后变成了:
static struct map_desc smdk2410_iodesc[] __initdata = {
/* nothing here yet */
/* Map the ethernet controller CS8900A */ {vSMDK2410_ETH_IO,
0x19000000, SZ_1M, MT_DEVICE}
};

注:由于在驱动程序的开发的时候,在驱动程序当中所用到的跟设备有关的地址都是虚拟地址,也就是说驱动程序操作的都是虚拟地址,那么要使驱动程序对设备的操作反映到设备上去,就得将设备的物理地址映射到正确的虚拟地址上去,从而保证驱动程序对虚拟地址的操作也就是对相应的物理地址操作。以上添加的语句就是为了将网卡的物理地址(0x19000000)映射到vSMDK2410_ETH_IO所指向的虚拟地址上去,上面的结构还定义了网卡虚拟地址所占用的区间,也就是从vSMDK2410_ETH_IO开始的SZ_1M大小的去间,并指定了该区间所指向的域(的属性)。(疑问:在本开发板上,网卡占用的是CPU的nGCS3片选信号,也就是在Bank3,根据处理器的地址空间定义,这个地址应该是0x18000000,为什么这里使用的是0x19000000?查找到2.4.18的内核当中,也是用0x19000000来进行映射。)

(5)、在include/asm-arm/arch-s3c2410/目录下创建smdk2410.h文件,其内容为:
#ifndef _INCLUDE_SMDK2410_H_
#define _INCLUDE_SMDK2410_H_
#include
#define pSMDK2410_ETH_IO 0x19000000
#define vSMDK2410_ETH_IO 0xE0000000
#define SMDK2410_ETH_IRQ IRQ_EINT9
#endif // _INCLUDE_SMDK2410_H_

注:因为在网卡驱动程序当中,用到了一些常量,所以特意在此添加这个头文件。这个头文件定义了网卡的物理地址、虚拟地址以及网卡占用的中断线。

四、配置、编译内核。在内核顶层目录当中键入:

#make smdk2410_defconfig
由于2.6的内核默认就支持了S3C2410,所以就有一个默认的内核配置文件。里面只是包括了一个简单的配置,要使网卡编译进内核,还要进行手工配置。

#make menuconfig
Networking support --->
Ethernet (10 or 100Mbit) --->
  (*)CS8900 support

将刚才添加的网卡驱动程序静态添加到内核当中。
最后进行内核编译。
#make
然后将镜像下载到开发板中去。

第二部分 问题解析

在移植网卡的过程中,并不是一帆风顺的,整个过程遇到了问题虽然不多,但是去寻找问题的原因及解决的办法的时候却是非常曲折的。现在将本人在进行网卡驱动移植过程中所遇到的问题以及解决方法介绍如下。

因为经验不足,刚开始进行工作的时候,没有将移植的思路明确。最先是打算将开发板供应商随板提供的2.4.18内核下的驱动程序cs8900a.c移植到2.6.10的内核下。首先就是计划先以编译模块的方式将该程序编译通过之后,再将起编译到2.6.10的内核当中,然后再对其进行逻辑上的修改。在模块编译该驱动程序的时候,首先碰到的问题就是头文件的问题,根据编译的出错信息,挨个将头文件添加好了。此时碰到的问题就是交叉编译器(arm-s3c2410-linux-gnu-gcc)编译到cs89x0_probe()函数的时候出错。指向:
BWSCON这一行,出错信息是:
Incorrect Lvalue in assignment

TOP

好_________________________

TOP

好试看..........

TOP

谢谢楼主提供

TOP

路过好东西,喳喳 版主辛苦了

TOP

太好了

太感谢了,这对我学习很有帮助啊!

TOP

看看,希望有用,先谢谢了

TOP

回复 1# 的帖子

看看~~~~~~~~~~~~

TOP

看看000000000

TOP

hao

谢谢楼主 好东西的

TOP

kkkkkkkkkkkkkkkkkkkk

TOP

回复 1# 的帖子

thank you very much

TOP

非常好的东西,好好看一看

TOP

返回列表
网页右侧QQ悬浮滚动在线客服
网页右侧QQ悬浮滚动在线客服