分页: 1 / 1
一个基于pcap的软件移植到路由器可以运行不能工作(请问应该从哪里着手调试)
发表于 : 2013-06-30 19:05
由 huoteihj
我的路由器是mips-openwrt所以要用mips-gcc,我写了一个hello world的程序发送到路由器运行可以成功,应该gcc是木有问题的。
由于我的程序要用到libpcap,所以上网找了个pcap这个库,配置的时候用--host=mips-linux,配置成功,然后我修改Makefile的cc为mips-openwrt-gcc,ar,ld都没有修改。make成功了。然后make install到mips-openwrt-gcc的工具链目录中。也安装成功了。
但是到目前为止我还不知道是否安装成功,因为我不知道编译出来的静态库是否正确。因为我和pc的gcc的libpcap.a对比过差了3被大小左右,虽然这样对比不科学,但是也不应该相差那么多吧。
然后我用静态库编译我的pcap软件成功了,不过工作不成功。
但是这个软件如果用pc的gcc编译和运行都是可以成功的,就是不知道一般移植的软件应该怎样调试好。
Re: 一个基于pcap的软件移植到路由器可以运行不能工作(请问应该从哪里着手调试)
发表于 : 2013-07-01 0:04
由 jingxt
huoteihj 写了:我的路由器是mips-openwrt所以要用mips-gcc,我写了一个hello world的程序发送到路由器运行可以成功,应该gcc是木有问题的。
由于我的程序要用到libpcap,所以上网找了个pcap这个库,配置的时候用--host=mips-linux,配置成功,然后我修改Makefile的cc为mips-openwrt-gcc,ar,ld都没有修改。make成功了。然后make install到mips-openwrt-gcc的工具链目录中。也安装成功了。
但是到目前为止我还不知道是否安装成功,因为我不知道编译出来的静态库是否正确。因为我和pc的gcc的libpcap.a对比过差了3被大小左右,虽然这样对比不科学,但是也不应该相差那么多吧。
然后我用静态库编译我的pcap软件成功了,不过工作不成功。
但是这个软件如果用pc的gcc编译和运行都是可以成功的,就是不知道一般移植的软件应该怎样调试好。
在路由器上运行,返回的错误信息是什么?
其实有一个最万无一失而且最傻瓜式的跨平台(架构)编译方法,就是使用qemu-user-static来模拟。
这样子就相当于用的是native的编译器。没有交叉编译那么多烦人的东西。
你可以用debootstrap创建一个mips架构的rootfs,然后把qemu-mips-static复制到这个rootfs的/usr/bin,然后chroot进去就行了。(Ubuntu默认带了binfmt_misc支持,无需进一步设置)
这样子你直接用普通的方式编译,编译出来的就是mips架构的binary。
另外注意下架构版本的问题。就像是ARM的armv5,v6,v7,(我觉得)mips架构也是这样、、、、看看路由器的/proc/cpuinfo。然后使用export CFLAGS="-march=xxxxxx"来指定一个你路由器支持的。

Re: 一个基于pcap的软件移植到路由器可以运行不能工作(请问应该从哪里着手调试)
发表于 : 2013-07-01 2:18
由 huoteihj
jingxt 写了:huoteihj 写了:我的路由器是mips-openwrt所以要用mips-gcc,我写了一个hello world的程序发送到路由器运行可以成功,应该gcc是木有问题的。
由于我的程序要用到libpcap,所以上网找了个pcap这个库,配置的时候用--host=mips-linux,配置成功,然后我修改Makefile的cc为mips-openwrt-gcc,ar,ld都没有修改。make成功了。然后make install到mips-openwrt-gcc的工具链目录中。也安装成功了。
但是到目前为止我还不知道是否安装成功,因为我不知道编译出来的静态库是否正确。因为我和pc的gcc的libpcap.a对比过差了3被大小左右,虽然这样对比不科学,但是也不应该相差那么多吧。
然后我用静态库编译我的pcap软件成功了,不过工作不成功。
但是这个软件如果用pc的gcc编译和运行都是可以成功的,就是不知道一般移植的软件应该怎样调试好。
在路由器上运行,返回的错误信息是什么?
其实有一个最万无一失而且最傻瓜式的跨平台(架构)编译方法,就是使用qemu-user-static来模拟。
这样子就相当于用的是native的编译器。没有交叉编译那么多烦人的东西。
你可以用debootstrap创建一个mips架构的rootfs,然后把qemu-mips-static复制到这个rootfs的/usr/bin,然后chroot进去就行了。(Ubuntu默认带了binfmt_misc支持,无需进一步设置)
这样子你直接用普通的方式编译,编译出来的就是mips架构的binary。
另外注意下架构版本的问题。就像是ARM的armv5,v6,v7,(我觉得)mips架构也是这样、、、、看看路由器的/proc/cpuinfo。然后使用export CFLAGS="-march=xxxxxx"来指定一个你路由器支持的。

路由器就是木有返回错误信息,应该是死循环了。就是最怕这样,不过通过调试发现在获取包的时候获取不了,rx很小,tx很大。
情况就是这样。
Re: 一个基于pcap的软件移植到路由器可以运行不能工作(请问应该从哪里着手调试)
发表于 : 2013-07-01 9:30
由 jingxt
huoteihj 写了:jingxt 写了:huoteihj 写了:我的路由器是mips-openwrt所以要用mips-gcc,我写了一个hello world的程序发送到路由器运行可以成功,应该gcc是木有问题的。
由于我的程序要用到libpcap,所以上网找了个pcap这个库,配置的时候用--host=mips-linux,配置成功,然后我修改Makefile的cc为mips-openwrt-gcc,ar,ld都没有修改。make成功了。然后make install到mips-openwrt-gcc的工具链目录中。也安装成功了。
但是到目前为止我还不知道是否安装成功,因为我不知道编译出来的静态库是否正确。因为我和pc的gcc的libpcap.a对比过差了3被大小左右,虽然这样对比不科学,但是也不应该相差那么多吧。
然后我用静态库编译我的pcap软件成功了,不过工作不成功。
但是这个软件如果用pc的gcc编译和运行都是可以成功的,就是不知道一般移植的软件应该怎样调试好。
在路由器上运行,返回的错误信息是什么?
其实有一个最万无一失而且最傻瓜式的跨平台(架构)编译方法,就是使用qemu-user-static来模拟。
这样子就相当于用的是native的编译器。没有交叉编译那么多烦人的东西。
你可以用debootstrap创建一个mips架构的rootfs,然后把qemu-mips-static复制到这个rootfs的/usr/bin,然后chroot进去就行了。(Ubuntu默认带了binfmt_misc支持,无需进一步设置)
这样子你直接用普通的方式编译,编译出来的就是mips架构的binary。
另外注意下架构版本的问题。就像是ARM的armv5,v6,v7,(我觉得)mips架构也是这样、、、、看看路由器的/proc/cpuinfo。然后使用export CFLAGS="-march=xxxxxx"来指定一个你路由器支持的。

路由器就是木有返回错误信息,应该是死循环了。就是最怕这样,不过通过调试发现在获取包的时候获取不了,rx很小,tx很大。
情况就是这样。
死循环?就是运行了没有任何反应?
你最好同时使用top之类的命令确认一下。。
Re: 一个基于pcap的软件移植到路由器可以运行不能工作(请问应该从哪里着手调试)
发表于 : 2013-07-01 19:32
由 huoteihj
jingxt 写了:huoteihj 写了:我的路由器是mips-openwrt所以要用mips-gcc,我写了一个hello world的程序发送到路由器运行可以成功,应该gcc是木有问题的。
由于我的程序要用到libpcap,所以上网找了个pcap这个库,配置的时候用--host=mips-linux,配置成功,然后我修改Makefile的cc为mips-openwrt-gcc,ar,ld都没有修改。make成功了。然后make install到mips-openwrt-gcc的工具链目录中。也安装成功了。
但是到目前为止我还不知道是否安装成功,因为我不知道编译出来的静态库是否正确。因为我和pc的gcc的libpcap.a对比过差了3被大小左右,虽然这样对比不科学,但是也不应该相差那么多吧。
然后我用静态库编译我的pcap软件成功了,不过工作不成功。
但是这个软件如果用pc的gcc编译和运行都是可以成功的,就是不知道一般移植的软件应该怎样调试好。
在路由器上运行,返回的错误信息是什么?
其实有一个最万无一失而且最傻瓜式的跨平台(架构)编译方法,就是使用qemu-user-static来模拟。
这样子就相当于用的是native的编译器。没有交叉编译那么多烦人的东西。
你可以用debootstrap创建一个mips架构的rootfs,然后把qemu-mips-static复制到这个rootfs的/usr/bin,然后chroot进去就行了。(Ubuntu默认带了binfmt_misc支持,无需进一步设置)
这样子你直接用普通的方式编译,编译出来的就是mips架构的binary。
另外注意下架构版本的问题。就像是ARM的armv5,v6,v7,(我觉得)mips架构也是这样、、、、看看路由器的/proc/cpuinfo。然后使用export CFLAGS="-march=xxxxxx"来指定一个你路由器支持的。

我用你这个方法尝试了一下,的确可以模仿系统,但是功能很弱小,连GCC和PING...的指令都木有
Re: 一个基于pcap的软件移植到路由器可以运行不能工作(请问应该从哪里着手调试)
发表于 : 2013-07-01 21:37
由 jingxt
huoteihj 写了:jingxt 写了:huoteihj 写了:我的路由器是mips-openwrt所以要用mips-gcc,我写了一个hello world的程序发送到路由器运行可以成功,应该gcc是木有问题的。
由于我的程序要用到libpcap,所以上网找了个pcap这个库,配置的时候用--host=mips-linux,配置成功,然后我修改Makefile的cc为mips-openwrt-gcc,ar,ld都没有修改。make成功了。然后make install到mips-openwrt-gcc的工具链目录中。也安装成功了。
但是到目前为止我还不知道是否安装成功,因为我不知道编译出来的静态库是否正确。因为我和pc的gcc的libpcap.a对比过差了3被大小左右,虽然这样对比不科学,但是也不应该相差那么多吧。
然后我用静态库编译我的pcap软件成功了,不过工作不成功。
但是这个软件如果用pc的gcc编译和运行都是可以成功的,就是不知道一般移植的软件应该怎样调试好。
在路由器上运行,返回的错误信息是什么?
其实有一个最万无一失而且最傻瓜式的跨平台(架构)编译方法,就是使用qemu-user-static来模拟。
这样子就相当于用的是native的编译器。没有交叉编译那么多烦人的东西。
你可以用debootstrap创建一个mips架构的rootfs,然后把qemu-mips-static复制到这个rootfs的/usr/bin,然后chroot进去就行了。(Ubuntu默认带了binfmt_misc支持,无需进一步设置)
这样子你直接用普通的方式编译,编译出来的就是mips架构的binary。
另外注意下架构版本的问题。就像是ARM的armv5,v6,v7,(我觉得)mips架构也是这样、、、、看看路由器的/proc/cpuinfo。然后使用export CFLAGS="-march=xxxxxx"来指定一个你路由器支持的。

我用你这个方法尝试了一下,的确可以模仿系统,但是功能很弱小,连GCC和PING...的指令都木有
apt-get install嘛。。这个和x86上的Debian还有Ubuntu用法完全一样。。
Re: 一个基于pcap的软件移植到路由器可以运行不能工作(请问应该从哪里着手调试)
发表于 : 2013-07-02 17:04
由 huoteihj
jingxt 写了:huoteihj 写了:jingxt 写了:huoteihj 写了:我的路由器是mips-openwrt所以要用mips-gcc,我写了一个hello world的程序发送到路由器运行可以成功,应该gcc是木有问题的。
由于我的程序要用到libpcap,所以上网找了个pcap这个库,配置的时候用--host=mips-linux,配置成功,然后我修改Makefile的cc为mips-openwrt-gcc,ar,ld都没有修改。make成功了。然后make install到mips-openwrt-gcc的工具链目录中。也安装成功了。
但是到目前为止我还不知道是否安装成功,因为我不知道编译出来的静态库是否正确。因为我和pc的gcc的libpcap.a对比过差了3被大小左右,虽然这样对比不科学,但是也不应该相差那么多吧。
然后我用静态库编译我的pcap软件成功了,不过工作不成功。
但是这个软件如果用pc的gcc编译和运行都是可以成功的,就是不知道一般移植的软件应该怎样调试好。
在路由器上运行,返回的错误信息是什么?
其实有一个最万无一失而且最傻瓜式的跨平台(架构)编译方法,就是使用qemu-user-static来模拟。
这样子就相当于用的是native的编译器。没有交叉编译那么多烦人的东西。
你可以用debootstrap创建一个mips架构的rootfs,然后把qemu-mips-static复制到这个rootfs的/usr/bin,然后chroot进去就行了。(Ubuntu默认带了binfmt_misc支持,无需进一步设置)
这样子你直接用普通的方式编译,编译出来的就是mips架构的binary。
另外注意下架构版本的问题。就像是ARM的armv5,v6,v7,(我觉得)mips架构也是这样、、、、看看路由器的/proc/cpuinfo。然后使用export CFLAGS="-march=xxxxxx"来指定一个你路由器支持的。

我用你这个方法尝试了一下,的确可以模仿系统,但是功能很弱小,连GCC和PING...的指令都木有
apt-get install嘛。。这个和x86上的Debian还有Ubuntu用法完全一样。。
都可以了,编译成功了,但是运行木有成功!..
错误显示:
Unsupported ioctl: cmd=0x8933
Unsupported ioctl: cmd=0x8933
SIOCGIFINDEX: Function not implemented