现在虽说卖硬件的比不上卖软件的,卖软件的比不上卖服务的。但软件仍然是服务的基石。
而且不管是软件、硬件、还是服务,背后都是一行行的代码,以及基于这些代码所形成的软件功能、硬件系统、技术人员的经验等等。
这些代码有的用C/C++、Java、C#写,有的用PHP、JavaScript、Ruby写,有的用Verilog写。 Continue reading »

 

最近,入手华为3G上网卡EC122, 电信的. 安装华为的Mobile Partener 21.005 的时候,NDSI驱动安装出错。 NSDI是用来通过3G上网卡发短信用。
出错信息如下:

CC [M] /usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src/hw_cdc_driver.o
/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src/hw_cdc_driver.c:155:27: fatal error: linux/usb/ncm.h: No such file or directory
compilation terminated.
make[3]: *** [/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src/hw_cdc_driver.o] Error 1
make[2]: *** [_module_/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src] Error 2
make[2]: Leaving directory `/usr/src/linux-headers-3.0.0-15-generic'
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src'
make: *** [modules] Error 2
make -C src/ install
make[1]: Entering directory `/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src'
#install -m 744 -c hw_cdc_driver.o /lib/modules/3.0.0-15-generic/kernel/drivers/usb/net
#depmod -a
#modprobe hw_cdc_driver
/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src/add_header.sh "install"
modprobe hw_cdc_driver
FATAL: Module hw_cdc_driver not found.
make[1]: *** [install] Error 1
make[1]: Leaving directory `/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src'
make: *** [install] Error 2

Install NDIS driver failed.
The compiling environment is not all ready.
Please check gcc, make and kernel buid(/lib/modules/3.0.0-15-generic/build) to be all installed?
Now please enter any key to finish other installations.
NDIS is disabled, and only Modem can be used.

居然是个编译出错的问题。搞了那么久工具链,一看到这种bug,就hold不住了。hack之!

一番Google和尝试。发现NSDI的driver,华为是通过源码编译的,需要上面提到的那个头文件 linux/usb/ncm.h。这个头文件在2.6.35版本以下的内核中有,但到了2.6.37,就没有了。所以2.6.37之后的内核都应该有这个问题。对源码中内核判定的方式做了修改,之后又改了几个redefine的问题,现在可以正常使用NDSI发短信了。

点击下载修改后的data.bin, 替换原data.bin文件即刻。

 

很多时候,可能需要替换已有库函数,或者对其库函数进行修改。
为了避免对那些静态链接库或者动态链接库文件大动干戈,我们可以使用ld提供的–wrap选项。

Continue reading »

 

什么是静态链接库?

静态链接库,即static library或 statically-linked library。和动态链接库,即dynamic library 或dynamicly-linked library相对,是Windows和Linux系统中比较常用的库文件。Windows中分别用SLL和DLL文件表示,Linux中分别是.a和.so文件.

静态链接库实际是一些object files(.o文件)和头文件的压缩包,通过GNU工具链中的ar(archiver)程序创建。

静态链接库、动态链接库和共享库

那为何还要有动态链接库呢?静态练级库虽然能很好的节省编译时间。对于一个简单的ls程序,我们需要有屏幕输出,有字符串和格式操作,有文件系统访问等等函数,都要在一个程序中。此时,这个程序会很大。一个小小的ls可能都会有好几兆。如果还有个rm程序,同样也需要屏幕输出,文件系统访问。那么这两个东西,我们可以放到两个库文件里,在执行ls,或者rm的时候,用到屏幕输出操作,就将相应的函数对应的机器码载入内存中,执行。然后再从内存中释放。接着载入文件系统访问的相关函数。这样我们的程序就能变小很多。这种可以动态装载到内存中的库文件就是动态链接库了。Windows下的DLL文件就是动态链接库。

Continue reading »

2009-2011© 编译点滴 Suffusion theme by Sayontan Sinha

无觅相关文章插件,快速提升流量