说明: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"
添加头文件:
2.在154 行添加
- /* DM9000 */
-
static struct resource s3c_dm9k_resource[] = {
-
[0] = {
-
.start = S3C2410_CS4,
-
.end = S3C2410_CS4 + 3,
-
.flags = IORESOURCE_MEM,
-
},
-
[1] = {
-
.start = S3C2410_CS4 + 4,
-
.end = S3C2410_CS4 + 4 + 3,
-
.flags = IORESOURCE_MEM,
-
},
-
[2] = {
-
.start = IRQ_EINT7,
-
.end = IRQ_EINT7,
-
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
-
}
-
-
};
-
-
static struct dm9000_plat_data s3c_dm9k_platdata = {
-
.flags = DM9000_PLATF_16BITONLY,
-
};
-
-
struct platform_device s3c_device_dm9000 = {
-
.name = "dm9000",
-
.id = 0,
-
.num_resources = ARRAY_SIZE(s3c_dm9k_resource),
-
.resource = s3c_dm9k_resource,
-
.dev = {
-
.platform_data = &s3c_dm9k_platdata,
-
}
-
};
在194行添加
- static struct platform_device *smdk2440_devices[] __initdata = {
-
&s3c_device_usb,
-
&s3c_device_lcd,
-
&s3c_device_wdt,
-
&s3c_device_i2c0,
-
&s3c_device_iis,
-
&s3c_device_dm9000,
-
};
2.在linux "drivers/net/dm9000.c"
- #if defined(CONFIG_ARCH_S3C2410)
-
#include<mach/regs-mem.h>
-
#endif
在1194 行添加
- ........
- const unsigned char *mac_src;
-
int ret = 0;
-
int iosize;
-
int i;
-
u32 id_val;
-
-
#if defined(CONFIG_ARCH_S3C2410)
-
unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;
-
unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4;
-
#endif
在1209 行添加
- .......
- SET_NETDEV_DEV(ndev, &pdev->dev);
-
-
dev_dbg(&pdev->dev, "dm9000_probe()\n");
-
#if defined(CONFIG_ARCH_S3C2410)
-
*((volatile unsigned int *)S3C2410_BWSCON) = (oldval_bwscon & ~(3<<16)) | S3C2410_BWSCON_DW4_16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;
-
*((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;
-
#endif
在1278行开始的内容如下:主要添加mac 值
- ...
- db->mii.mdio_write = dm9000_phy_write;
-
-
#if defined(CONFIG_ARCH_S3C2410)
-
printk("Now use the default MAC address: 10:23:45:67:89:ab\n");
-
mac_src = "YWX";
-
ndev->dev_addr[0] = 0x10;
-
ndev->dev_addr[1] = 0x23;
-
ndev->dev_addr[2] = 0x45;
-
ndev->dev_addr[3] = 0x67;
-
ndev->dev_addr[4] = 0x89;
-
ndev->dev_addr[5] = 0xab;
-
#else
- ...
- 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 行添加
- out:
-
#if defined(CONFIG_ARCH_S3C2410)
-
*(volatile unsigned int *)S3C2410_BWSCON = oldval_bwscon;
-
*(volatile unsigned int *)S3C2410_BANKCON4 = oldval_bankcon4;
-
#endif
3.dm9000 网卡配置
1.修改/etc/init.d/rcS,添加
- ifconfig lo 127.0.0.1 # 设置本地会还设备IP地址
-
net_set& # 调用网络配置文件
在/sbin/下新建 配置文件net_set # sbin 是 system bin 系统可执行文件 比如 ifconfig
# bin 是一般可执行文件,比如 ls
2.etc/net.conf 文件设置 网络 IP 等
- IPADDR=192.168.1.6
-
NETMASK=255.255.255.0
-
GATEWAY=192.168.1.2
-
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
- #tar zxvf boa.tar.gz -C /opt/me_linux/
2. 配置boa
本来可以直接使用配置脚本设置成交叉编译环境的,使用手动方法修改
- #cd /opt/me_linux/boa-0.94.13/src
- #./cofigure
- vim Makefile
- 修改:CC=arm-linux-gcc
- CPP=arm-linux-g++ -E
- 修改src/boa.c
- vim boa.c
- 注释 225~227 行
- if(setuid(0)!=-1){
- DIE("icky linux kernel bug!");
- }
- 修改 src/compat.h
- vim compat.h
- 将120行修改为
- #define TIMEZONE_OFFSET(foo) foo->tm_gmotff
- #make
-
-
#arm-linux-strip boa
-
-
这里的优化是出去boa中的调试信息。
3.移植过程中出错信息,处理
- 在 make 编译的时候,出现了 没有 yacc lex 等信息 ,因为我们使用ubuntu10.10,没有支持的包,
- 所以我需要安装
- apt-get install yacc
- apt-get isntall flex
- 具体的情况还是看make 编译的出错信息
5,移植cgic 库 用于支持 cgi
1. 下
- #tar zxvf cgic205.tar.gz -C /opt/me_linux/
2. 配置编译条件
- 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.编译与优化
- #make 生成 capture的可执行文件和测试用的 cgictest.cgi
#arm-linux-strip catpure
4.过程中错误
在 make 的时候总是出错,最后复制了 TQ制作好的 Makefile 文件,就可以了,以后要注意makefile
6. 1. 配置 boa
- cp boa-0.94.13/boa.conf /opt/me_linux/root_2.6.30.4/etc/boz
- cp boa-0.94.13/src/boa/ /opt/me-linux/root-2.6030.4/sbin
2.修改 boa.conf
- DoucumentRoot/web #112行
- 非常重要,这个即使存放HTML文档的主目录,如果没有以/xxx开始,则表示从服务器的根目录开始
ScriptAlias /cgi-bin/ /we/cgi-bin/ 行194
非常重要,指明CGI脚本的虚拟路径对应的实际路径,一般所有的CG脚本都要放在实际路径中,用户访问执行是输入站点+虚拟路劲+CGI脚本名。前面的/cgi-bin/就是虚拟路径,/web/cgi-bin/即使实际的路径。
7.
- #cp /etc/mime.teyps /opt/me_linux/root_2.6.30.4/etc/
8.配置 cgic 库
- 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.启动板子
- ........
-
s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
-
Advanced Linux Sound Architecture Driver Version 1.0.20.
-
ALSA device list:
-
No soundcards found.
-
TCP cubic registered
-
NET: Registered protocol family 17
-
RPC: Registered udp transport module.
-
RPC: Registered tcp transport module.
-
yaffs: dev is 32505858 name is "mtdblock2"
-
yaffs: passed flags ""
-
yaffs: Attempting MTD mount on 31.2, "mtdblock2"
-
yaffs: auto selecting yaffs2
-
yaffs_read_super: isCheckpointed 0
-
VFS: Mounted root (yaffs filesystem) on device 31:2.
-
Freeing init memory: 116K
-
/sbin/net_set: source: line 5: can't open /etc/nettype.conf
Please press Enter to activate this console.
- ############### 到这里 开发板 启动好了
- # 我 手动启动 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) |