Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4471472
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: 嵌入式

2011-03-31 19:57:00

说明:gcc 4.3.3  TQ制作的编译工具
     主机:ubuntu10.10
     开发板:TQ2440 256MB  2009年版 东华LCD-3.5寸
    
     uboot:u-boot_W35_20091031.bin
     内核文件: 由第一步制作的内核
     文件系统: 自己建立文件系统

 目的:对DM9000的移植      内核的移植参考 linux-step by step 09年版
                           文件系统的移植参考10年版
       非原创,是按照tq手册一步一步制作的,
      
      参考: 嵌入式linux应用开发完全手册-网卡驱动程序移植
1.修改linux2.6.30.4 内核源码的"arch/arm/mach-s3c2440/mach-smdk2440.c"
 添加头文件:
  1. #include<linux/dm9000.h>

2.在154 行添加
  1. /* DM9000 */
  2. static struct resource s3c_dm9k_resource[] = {
  3.     [0] = {
  4.         .start    = S3C2410_CS4,
  5.         .end    = S3C2410_CS4 + 3,
  6.         .flags    = IORESOURCE_MEM,
  7.     },
  8.     [1] = {
  9.         .start    = S3C2410_CS4 + 4,
  10.         .end    = S3C2410_CS4 + 4 + 3,
  11.         .flags    = IORESOURCE_MEM,
  12.     },
  13.     [2] = {
  14.         .start    = IRQ_EINT7,
  15.         .end    = IRQ_EINT7,
  16.         .flags    = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
  17.     }

  18. };

  19. static struct dm9000_plat_data s3c_dm9k_platdata = {
  20.     .flags    = DM9000_PLATF_16BITONLY,
  21. };

  22. struct platform_device s3c_device_dm9000 = {
  23.     .name        = "dm9000",
  24.     .id            = 0,
  25.     .num_resources    = ARRAY_SIZE(s3c_dm9k_resource),
  26.     .resource        = s3c_dm9k_resource,
  27.     .dev            = {
  28.         .platform_data = &s3c_dm9k_platdata,
  29.     }
  30. };


   在194行添加
  1. static struct platform_device *smdk2440_devices[] __initdata = {
  2.     &s3c_device_usb,
  3.     &s3c_device_lcd,
  4.     &s3c_device_wdt,
  5.     &s3c_device_i2c0,
  6.     &s3c_device_iis,
  7.        &s3c_device_dm9000,
  8. };

2.在linux "drivers/net/dm9000.c"
  1. #if defined(CONFIG_ARCH_S3C2410)
  2. #include<mach/regs-mem.h>
  3. #endif

在1194 行添加
  1. ........
  2. const unsigned char *mac_src;
  3.     int ret = 0;
  4.     int iosize;
  5.     int i;
  6.     u32 id_val;

  7. #if defined(CONFIG_ARCH_S3C2410)
  8.     unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;
  9.     unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4;
  10. #endif

  在1209 行添加
  1. .......
  2. SET_NETDEV_DEV(ndev, &pdev->dev);

  3.     dev_dbg(&pdev->dev, "dm9000_probe()\n");
  4. #if defined(CONFIG_ARCH_S3C2410)
  5.     *((volatile unsigned int *)S3C2410_BWSCON) = (oldval_bwscon & ~(3<<16)) | S3C2410_BWSCON_DW4_16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;
  6.     *((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;
  7. #endif

在1278行开始的内容如下:主要添加mac 值
  1. ...
  2. db->mii.mdio_write = dm9000_phy_write;

  3. #if defined(CONFIG_ARCH_S3C2410)
  4.     printk("Now use the default MAC address: 10:23:45:67:89:ab\n");
  5.     mac_src = "YWX";
  6.     ndev->dev_addr[0] = 0x10;
  7.     ndev->dev_addr[1] = 0x23;
  8.     ndev->dev_addr[2] = 0x45;
  9.     ndev->dev_addr[3] = 0x67;
  10.     ndev->dev_addr[4] = 0x89;
  11.     ndev->dev_addr[5] = 0xab;
  12. #else
  13.    ...
  14.     if (!is_valid_ether_addr(ndev->dev_addr))
            dev_warn(db->dev, "%s: Invalid ethernet MAC address. Please "
                 "set using ifconfig\n", ndev->name);
    #endif
在1423 行添加
  1. out:
  2. #if defined(CONFIG_ARCH_S3C2410)
  3.     *(volatile unsigned int *)S3C2410_BWSCON = oldval_bwscon;
  4.     *(volatile unsigned int *)S3C2410_BANKCON4 = oldval_bankcon4;
  5. #endif

3.dm9000 网卡配置
  1.修改/etc/init.d/rcS,添加
  1. ifconfig lo 127.0.0.1   # 设置本地会还设备IP地址
  2. net_set&                # 调用网络配置文件
  在/sbin/下新建 配置文件net_set  # sbin 是 system bin 系统可执行文件 比如 ifconfig
                                  #  bin  是一般可执行文件,比如 ls


  2.etc/net.conf  文件设置 网络 IP 等
  1. IPADDR=192.168.1.6
  2. NETMASK=255.255.255.0
  3. GATEWAY=192.168.1.2
  4. MAC=10:23:45:67:89:ab

4. boa+cgi 移植  cgi:common gateway interface 通用网关接口
  
    简单说明 cgi 作用:cgi是处理 服务器与本地数据进行 处理的一种接口。客户端浏览器可以通过
                       cig来对处理本地数据。包括 表格,form

    1.下载 boa源码0.84.13.tar.gz 
  1. #tar zxvf boa.tar.gz -C /opt/me_linux/

    2. 配置boa
本来可以直接使用配置脚本设置成交叉编译环境的,使用手动方法修改
  1. #cd /opt/me_linux/boa-0.94.13/src
  2. #./cofigure
 
  1. vim Makefile
  2. 修改:CC=arm-linux-gcc
  3.      CPP=arm-linux-g++ -E

  1. 修改src/boa.c
  2. vim boa.c
  3. 注释 225~227 行
  4. if(setuid(0)!=-1){
  5.             DIE("icky linux kernel bug!");
  6.           }

  1. 修改 src/compat.h
  2. vim compat.h
  3. 将120行修改为
  4. #define TIMEZONE_OFFSET(foo) foo->tm_gmotff

  1. #make

  2. #arm-linux-strip boa

  3. 这里的优化是出去boa中的调试信息。
  
   3.移植过程中出错信息,处理
  1. 在 make 编译的时候,出现了 没有 yacc  lex 等信息 ,因为我们使用ubuntu10.10,没有支持的包,
  2. 所以我需要安装
  3. apt-get install yacc
  4. apt-get isntall flex
  5. 具体的情况还是看make 编译的出错信息

5,移植cgic 库    用于支持 cgi
   1.  下
  1. #tar zxvf cgic205.tar.gz -C /opt/me_linux/
 
   2. 配置编译条件
  1. vim Makefile
CFLAGS=-g -Wall
CC=arm-linux-gcc
AR=arm-linux-ar
RANLIB=arm-linux-ranlib
....
install: libcgic.a
    cp libcgic.a /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/lib
    cp cgic.h /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/usr/include


    3.编译与优化
  1. #make 生成 capture的可执行文件和测试用的 cgictest.cgi
 #arm-linux-strip catpure


   4.过程中错误
在 make 的时候总是出错,最后复制了 TQ制作好的 Makefile 文件,就可以了,以后要注意makefile


6.  1. 配置 boa
  1. cp boa-0.94.13/boa.conf /opt/me_linux/root_2.6.30.4/etc/boz
  2. cp boa-0.94.13/src/boa/ /opt/me-linux/root-2.6030.4/sbin
    2.修改 boa.conf

  1. DoucumentRoot/web  #112行
  2.         非常重要,这个即使存放HTML文档的主目录,如果没有以/xxx开始,则表示从服务器的根目录开始

  ScriptAlias /cgi-bin/ /we/cgi-bin/  行194
          非常重要,指明CGI脚本的虚拟路径对应的实际路径,一般所有的CG脚本都要放在实际路径中,用户访问执行是输入站点+虚拟路劲+CGI脚本名。前面的/cgi-bin/就是虚拟路径,/web/cgi-bin/即使实际的路径。


7.
  1. #cp /etc/mime.teyps /opt/me_linux/root_2.6.30.4/etc/


8.配置 cgic 库
  1. cp /opt/me_linux/cigc205/caputre /opt/me_linux/root-2.6.30.4/web/cgi-bin/

  cp /opt/me_liniux/cigc205/cgictest.cgi /opt/me_linux/root_2.6.30.4/web/cgi-bin/

9.启动板子
  1. ........
  2. s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
  3. Advanced Linux Sound Architecture Driver Version 1.0.20.
  4. ALSA device list:
  5.   No soundcards found.
  6. TCP cubic registered
  7. NET: Registered protocol family 17
  8. RPC: Registered udp transport module.
  9. RPC: Registered tcp transport module.
  10. yaffs: dev is 32505858 name is "mtdblock2"
  11. yaffs: passed flags ""
  12. yaffs: Attempting MTD mount on 31.2, "mtdblock2"
  13. yaffs: auto selecting yaffs2
  14. yaffs_read_super: isCheckpointed 0
  15. VFS: Mounted root (yaffs filesystem) on device 31:2.
  16. Freeing init memory: 116K
  17. /sbin/net_set: source: line 5: can't open /etc/nettype.conf

    Please press Enter to activate this console.

  18. ###############  到这里 开发板 启动好了
  19. # 我 手动启动  http 服务
    [\u@\h \W]# /etc/rc.d/init.d/httpd start
    [01/Jan/1970:00:00:26 +0000] [\u@\h \W]# boa: server version Boa/0.94.13   # 启动情况
    [01/Jan/1970:00:00:26 +0000] boa: server built Mar 31 2011 at 18:32:43.
    [01/Jan/1970:00:00:26 +0000] boa: starting server pid=958, port 80

    [\u@\h \W]# ifconfig                   #查看网卡情况
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

    [\u@\h \W]# ifconfig eth0 down              # 取消网卡
    [\u@\h \W]# ifconfig eth0 192.168.1.6 netmask 255.255.255.0    #重新建立网络配置
    eth0: link down
    [\u@\h \W]# ifconeth0: link up, 100Mbps, full-duplex, lpa 0x41E1
       
    [\u@\h \W]# ifconfig
    eth0      Link encap:Ethernet  HWaddr 10:23:45:67:89:AB  
              inet addr:192.168.1.6  Bcast:192.168.1.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:19 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:1916 (1.8 KiB)  TX bytes:0 (0.0 B)
              Interrupt:51

    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
     
    [\u@\h \W]# ping 192.168.1.7           网络连接成功
    PING 192.168.1.7 (192.168.1.7): 56 data bytes
    64 bytes from 192.168.1.7: seq=0 ttl=64 time=1.775 ms
    64 bytes from 192.168.1.7: seq=1 ttl=64 time=0.895 ms
    64 bytes from 192.168.1.7: seq=2 ttl=64 time=0.895 ms
    ^C
    --- 192.168.1.7 ping statistics ---
    3 packets transmitted, 3 packets received, 0% packet loss
    round-trip min/avg/max = 0.895/1.188/1.775 ms

web 服务器建立好后,通过PC机,访问arm开发板

效果:

   主页中没有内容






这是 测试 cgictest.cgi 文件


















阅读(2100) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~