在SkyEye上调试uClinux内核及与主机进行网络通讯
在SkyEye上调试uClinux内核([email protected])
1.1 安装skyeye
从服务器下载skyeye-2003-10-06.tar.bz2,然后解压:
$ tarjxvfskyeye-2003-10-06.tar.bz2
进入skyeye目录,按照readme文件中的要求,运行:
$ ./configure--target=arm-elf--prefix=/usr/local--without-gtk-prefix--without-gtk-exec-prefix--disable-gtktest
$ make
$ make install
1.2 编译uclinux
先安装交叉编译器,将arm-elf-tools-20011219.tar.gz在本机的“根目录”下解开,解到/usr/local/arm-elf目录下。请注意一定要在根目录下解压。
将uClinux-dist-20030522.tar.gz解开,比如解开在/usr/src/uclinux-dist/下,然后进入/usr/src/uClinux-dist/目录,执行如下命令:
$ make menuconfig
在vendor/product中选择GDB/ARMulator,kernel版本选择2.4,然后exit and save。
$ make dep
$ make
$ ln -s images/romfs.img boot.rom
这时在/usr/src/uClinux-dist/linux-2.4.x目录下生成linux文件,在/usr/src/uClinux-dist/image目录下生成文件系统。
解压uclinux4skyeye.tgz,这个包中应该有相应的skyeye.conf和8019网卡驱动程序,下面我们把网卡驱动程序加到上面的uclinux源码中。
在/usr/src/uclinux-dist目录下,拷贝相应的skyeye.conf到此目录下。注意skyeye.conf中应该是AT91的定义。就可以用skyeye来调试运行kernel了,在/usr/src/linux-dist目录下运行:
$ skyeye linux-2.4.x/linux
(gdb) target sim
(gdb) load
(gdb) run
kernel start. ....
这时应该可以看到uClinux的启动画面。如果需要进一步调试,需要学习gdb的命令使用。注意要在 skyeye.conf 和boot.rom所在目录下执行skyeye。
1.3 加载tuntap.o内核模块
tuntap.o是linux系统自带的模块,一般自己就加载了。如果没有就使用insmod命令。
步骤2 生成支持skyeye_ne2k网卡的内核
在完成第一部分内容后,在内核中添加skyeye_ne2k网络程序,添加显示网络包类型和数目的信息。
2.1 修改config文件
uClinux-dist/vendors/GDB/ARMulator/config.linux-2.4.x应该有如下项(没有就添加):
CONFIG_NET=y
CONFIG_NET_ETHERNET=y
CONFIG_SKYEYENE2k=y
2.2 修改Makefile文件
uClinux-dist/linux-2.4.x/drivers/net/Makefile应该有如下项(没有就添加):
obj-$(CONFIG_NET) += Space.o setup.o net_init.o loopback.o
obj-$(CONFIG_SKYEYENE2k) += skyeyene2k.o
2.3 修改Config.in文件
uClinux-dist/linux-2.4.x/drivers/net/Config.in应该有如下项(没有就添加):
if [ "$CONFIG_NET_ETHERNET" = "y" ]; then
#add for skyeye
if["$CONFIG_ARCH_ATMEL" = "y"]; then
tristate' SkyEye ne2k ethernet (for ARMUlator) 'CONFIG_SKYEYENE2k
fi
注意:if,方括号,单引号前后有空的地方,空格不能省略。
关于Config.in文件的语法,可以查阅linux-2.4.x目录下的Documentation/kbuild/config-language.txt文件。
2.4 增加驱动文件
把skyeyene2k.文件拷贝到uClinux-dist/linux-2.4.x/drivers/net/目录下。
2.5 运行make menuconfig
选择GDB/Armulator开发板,选择Custom Kernel Settings,然后exit and save。
在内核的配置菜单中,在Network Device Support项中,进入“Ethernet (10M and 100M)”,然后选择 ' SkyEye ne2k ethernet support (for ARMUlator)' 选项。然后编译uClinux内核:
$ make dep
$ make
2.7 用skyeye调试uClinux
用root帐号,通过SkyEye运行有skyeyene2k驱动支持的uClinux内核。
$ skyeye linux-2.4.x/linux
(gdb) target sim
(gdb) load
(gdb) run
.....
$ ifconfig eth0 10.0.0.2
在另一个linux终端执行如下目录:
$ /sbin/ifconfig
可以看到一个 net device tap0 10.0.0.1
$ping 10.0.0.2
可以ping通10.0.0.2,这证明skyeyene2k驱动程序运行了。
然后试着在uclinux上增加更多的应用,如ftp client/server,nfs server,telnet client/server,并运行调试一下。用skyeye在skyeyene2k驱动中设置断点,调试skyeyene2k驱动程序,观察它在init/send/recv上的实际操作。 首先,我用testsuit的列子运行 没有问题。
现在的问题是我自己编译uclinux后,(上面说的makefile和config.in也改了),出现uclinux界面后,ifconfig
eth0 Link encap:EthernetHWaddr 00:04:03:02:01:0F
inet addr:10.0.0.2Bcast:10.255.255.255Mask:255.0.0.0
UP BROADCAST RUNNING MULTICASTMTU:1500Metric: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:100
Interrupt:16
主机上ifconfig
tap0 Link encap:EthernetHWaddr 96:CA:7D:90:04:75
inet addr:10.0.0.0Bcast:10.255.255.255Mask:255.0.0.0
UP BROADCAST RUNNING MULTICASTMTU:1500Metric: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:500
RX bytes:0 (0.0 b)TX bytes:0 (0.0 b)
很不理解 为什么 inet addr 是10.0.0.0 ????? 而不是10.0.0.1,testsuit里是10.0.0.1
skyeye.conf
cpu: arm7tdmi
mach: at91
...
net: state=on, mac=0:4:3:2:1:f, ethmod=tuntap, hostip=10.0.0.1
我试用了ping 命令,当然是两边都没反应,不过从Tx Byte 和 Rx Byte 可以 看出数值 是一样的
这是什么问题呢? Then you can try modify ip of host:
ifconfig tap0 10.0.0.1 我搞定了,谢谢 版主。我刚接触linux对这些命令还不熟。
不过不明白为什么testsuit里的例子一运行就是ok的。
这篇文章对我太有用了。
这篇文章对我太有用了。我已经运行成功了。
页:
[1]