Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3784
  • 博文数量: 1
  • 博客积分: 40
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-31 09:31
文章分类
文章存档

2009年(1)

我的朋友
最近访客

分类: 嵌入式

2009-11-30 10:19:37

从163移过来,转战chinaunix~~。

本来是留给师弟的东西,发上来共享的,想首发CSDN的,结果那里的blog真是差劲,格式全没了,只好先放这里了

另外,原创文章,转贴请注明作者及出处!谢谢

硬件环境:S3C2410 ,USB无线网卡:D-Link DWL-G122,华硕wl-167g

软件环境:linux 2.4.18-rmk7 ,网卡驱动:RT73的1.0.4.0版本驱动

 

按顺序安装如下补丁:

iw_handlers.w13-5.diff

iw_handlers.w14-5.diff

iw240_we15-6.diff

patch -p1 < ../xxxx.diff

重新配置内核

make clean清理内核原有编译内容(不能用make mrproper)

进入系统内核配置菜单

make menuconfig

选择 :

 Network device support  --->   

      Wireless LAN (non-hamradio)  ---> 

                 [*] Wireless LAN (non-hamradio)  //只需此项,其他的不选

然后保存退出

输入命令,编译内核:

make bzImage

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

无线网卡驱动的移植

1)修改Makefile

a)将原有的CC注释掉,修改编译器路径

#CC := cc

CC :=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc

LD :=/opt/host/armv4l/bin/armv4l-unknown-linux-ld

                                                                     

 

b)下面的include可以不用,直接给定源代码路径和模块目标路径

#include ./config.mk 

LINUX_SRC=/HHARM2410-4COM-CDMA/kernel

TARGET_MODDIR=/HHARM2410-4COM-CDMA/kernel/net

 

c)将原来针对PC机系统的编译改为针对arm920t

#CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe  -march=i686 -DMODULE -DMODVERSIONS -include $(LINUX_SRC)/include/linux/modversions.h

                                                                                

CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -Os -mapcs -fno-strict-aliasing -fno-common -pipe -mapcs-32 -march=armv4 -mtune=arm9tdmi -mshort-load-bytes -msoft-float -DMODULE -DRTMP_EMBEDDED -I. -DMODVERSIONS -include $(LINUX_SRC)/include/linux/modversions.h

 

2)修改文件

a)修改rtmp.h文件的第437行左右其中有个__TX_BUFFER的定义是错的,需要注释掉union,如下:

 

////////////////////////////////////////////////////////////////////////////

// The TX_BUFFER structure forms the transmitted USB packet to the device

////////////////////////////////////////////////////////////////////////////

typedef struct __TX_BUFFER{

        TXD_STRUC               TxDesc;

//      union   {

                UCHAR                   WirelessPacket[2342];

                HEADER_802_11   NullFrame;

                PSPOLL_FRAME    PsPollPacket;

                RTS_FRAME               RTSFrame;

//      };

} TX_BUFFER, *PTX_BUFFER;

 

b)修改rtmp_init.c的第2825行左右的代码,如下

#ifdef RTMP_EMBEDDED

        if(Length <= 8)

        {

/*              *(((PUCHAR)pDest)++) = *(((PUCHAR)pSrc)++);

                if(--Length == 0)       return;

                *(((PUCHAR)pDest)++) = *(((PUCHAR)pSrc)++);

                if(--Length == 0)       return;

                *(((PUCHAR)pDest)++) = *(((PUCHAR)pSrc)++);

                if(--Length == 0)       return;

                *(((PUCHAR)pDest)++) = *(((PUCHAR)pSrc)++);

                if(--Length == 0)       return;

                *(((PUCHAR)pDest)++) = *(((PUCHAR)pSrc)++);

                if(--Length == 0)       return;

                *(((PUCHAR)pDest)++) = *(((PUCHAR)pSrc)++);

                if(--Length == 0)       return;

                *(((PUCHAR)pDest)++) = *(((PUCHAR)pSrc)++);

                if(--Length == 0)       return;

                *(((PUCHAR)pDest)++) = *(((PUCHAR)pSrc)++);

                if(--Length == 0)       return;*/

                unsigned char *dest,*src;

                int i;

                dest=pDest;

                src=pSrc;

                for (i=0;i

                        *(dest++)=*(src++);

                }

        }

        else

                memcpy(pDest, pSrc, Length);

       //printk("end of MoveMemory!");

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3)修改busybox,建议使用busybox-1.1.0

注意:R3的板子不需要修改busybox,但是4COM的需要修改.

/busybox-1.1.0/networking/ifconfig.c文件的大概380行左右有一句

a1op = Arg1Opt + (sizeof(Arg1Opt) / sizeof(Arg1Opt[0])) - 1;

下一句是mask = op->arg_flags;,将这句话注释掉就好了,暂时不清楚是什么含义,但是不影响使用.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

4)busybox-1.1.0的编译

进入busybox文件根目录,输入命令

make menuconfig

样子很象内核配置菜单

主要需要注意的是如下几个选项

 Build Options  --->

      [*] Build BusyBox as a static binary (no shared libs)  //这个一定要选,要不arm里没法运行,busybox的共享库可老大了

      [*] Do you want to build BusyBox with a Cross Compiler?

       (/usr/local/arm/3.3.2/bin/arm-linux-) Cross Compiler prefix   //使用3.3.2版本的arm-linux-gcc,不能用HH提供的2.95.3,否则不能编译成功.

Installation Options  --->

       [*] Don't use /usr             //一定得选,否则PC机的该不能用了

Networking Utilities  --->

      udhcp Server/Client  --->   [*] udhcp Client (udhcpc)    //udhcpc就是让网卡自动获取IP

然后make就行了

=============================================================================================================

使用ram方式启动.

首先要把rt73.o文件拷贝到ramdisk文件系统中,执行如下如下命令

gunzip ramdisk.image.gz

mount -o loop ramdisk.image /mnt/emb

cp /home/RT73_Linux_STA_Drv1.0.4.0/Module/rt73.o /mnt/emb/etc/

umount /mnt/emb

gzip ramdisk.image

 

注意:有文章说rt73.binrt73sta.dat需要拷贝到/etc/Wireless/RT73STA文件夹下,其中如果使用1.0.4.0版本的驱动的话可以没有rt73.bin

rt73sta.dat文件是与AP有关的设置,曾经使用过TP-Link的一款AP必需有此文件,否则无线网卡不能扫描到AP,但是后来又采用过华硕的一款AP却不能有此文件,很怪异.

 

启动过程如下

SMDK2410 # tftp 30008000 zImage

I/O: 8000300, VID: 90000a46

NetOurIP =c0a802de

NetServerIP = c0a8026f

NetOurGatewayIP = c0a80201

NetOurSubnetMask = ffffff00

ARP broadcast 1

ARP broadcast 2

TFTP from server 192.168.2.111; our IP address is 192.168.2.222

Filename 'zImage'.

Load address: 0x30008000

Loading: #################################################################

         #################################################################

         #################################################################

         ####

done

Bytes transferred = 1017536 (f86c0 hex)

SMDK2410 # tftp 30800000 ramdisk.image.gz

I/O: 8000300, VID: 90000a46

NetOurIP =c0a802de

NetServerIP = c0a8026f

NetOurGatewayIP = c0a80201

NetOurSubnetMask = ffffff00

ARP broadcast 1

ARP broadcast 2

TFTP from server 192.168.2.111; our IP address is 192.168.2.222

Filename 'ramdisk.image.gz'.

Load address: 0x30800000

Loading: #################################################################

         #################################################################

         #################################################################

         #################################################################

         #################################################################

         #################################################################

         #################################################################

         #################################################################

         ##############################

done

Bytes transferred = 2813419 (2aedeb hex)

SMDK2410 # go 30008000

## Starting application at 0x30008000 ...

Start linux ..

Setup linux parameters at 0x30000100

Uncompressing Linux.......................................................................... done, booting the kernel.

Linux version 2.4.18-rmk7-pxa1 (root@qld) (gcc version 2.95.2 20000516 (release) [Rebel.com]) #20 .? 5.. 19 15:46:30 PETST 28CPU: ARM/CIRRUS Arm920Tsid(wb) revision 0

Machine: Samsung-SMDK2410

下略- -!

 

插入无线网卡,显示

/ # hub.c: USB new device connect on bus1/1, assigned device number 2

Manufacturer: Ralink

Product: 802.11 bg WLAN

usb.c: USB device 2 (vend/prod 0x7d1/0x3c03) is not claimed by any active driver.

  Length              = 18

  DescriptorType      = 01

  USB version         = 2.00

  Vendor:Product      = 07d1:3c03

  MaxPacketSize0      = 64

  NumConfigurations   = 1

  Device version      = 0.01

  Device Class:SubClass:Protocol = 00:00:00

    Per-interface classes

Configuration:

  bLength             =    9

  bDescriptorType     =   02

  wTotalLength        = 0020

  bNumInterfaces      =   01

  bConfigurationValue =   01

  iConfiguration      =   00

  bmAttributes        =   80

  MaxPower            =  300mA

                                                                                                                             

  Interface: 0

  Alternate Setting:  0

    bLength             =    9

    bDescriptorType     =   04

    bInterfaceNumber    =   00

    bAlternateSetting   =   00

    bNumEndpoints       =   02

    bInterface Class:SubClass:Protocol =   ff:ff:ff

    iInterface          =   00

    Endpoint:

      bLength             =    7

      bDescriptorType     =   05

      bEndpointAddress    =   81 (in)

      bmAttributes        =   02 (Bulk)

      wMaxPacketSize      = 0040

      bInterval           =   00

    Endpoint:

      bLength             =    7

      bDescriptorType     =   05

      bEndpointAddress    =   01 (out)

      bmAttributes        =   02 (Bulk)

      wMaxPacketSize      = 0040

      bInterval           =   00

 

此时还没有加载rt73.o驱动

执行一个脚本吧,我把命令都写在脚本里了

脚本内容:

#!/bin/sh

insmod /etc/rt73.o         //加载驱动

sleep 1

ifconfig rausb0 up         //激活网卡

sleep 1

./bin/udhcpc -i rausb0      //udhcpc命令来使网卡找到AP,并自动配置IP地址

sleep 1

route add default gw 192.168.1.1 //添加网关

网关地址其实可以通过udhcpc来获取,不过需要修改busybox的代码。

阅读(1027) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~