嵌入式环境:内核:linux-2.6.32.2交叉编译环境:arm-linux-gcc 4.4.3根文件系统:rootfs_qtopia_qt4 (发布日期2011-3-4)
一 、内核配置
Cd ~/linux-2.6.32.2
Make menuconfig
配置:
Device Drivers=>
USB support=>
[*] Suppon for Host-side USB
[*] USB device filesystem
[*] USB device class-devices
[*] OHCI HCDsupport
[*] USB Mass Storage Support
USB Serial Convelter suppor -->
[*] USB driver for GSM and CDMA modems
SCSI device support=>
[*]SCSI device support
[*] SCSI disk support
[*] Probe all LUNs on each SCSI device
HDI Devices=>
[*] USB Human Interface Devices support
[*] /dev/hiddev raw HID device support
Network device support=>
<*> PPP(point—to—point protoco1)support
[*] PPP multilink support(EXPERIMENTAL)
<*> PPP support for async serial ports
<*> PPP suppo rt for sync tty ports
<*> PPP Deflate compression
<*> PPP BSD —Compress compression
<*> PPP MPPE compress compression(encryp—tion)
<*> PPP over Ethernet
<*> PPP over 12TP
二、修改相关内核驱动文件
Vendor ID和Product ID添加到linux-2.6.32.2/drivers/usb/serial/option.c
#defineHUAWEI_PRODUCT_EC189 0x1446
staticstruct usb_device_id option_ids[]={
……
{USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID,0x1446,0xff,0xff,0xff)},
……};
#makezImage
编译结束后,会在 arch/arm/boot目录下生成 linux 内核映象文件:zImage
烧录到开发板中
三、编译相关工具
usb_modeswitch-1.0.8.tar.bz2(http://www.draisberghof.de/usb_modeswitch/)
usb_modeswitch-current_data.tar.bz2(http://www.draisberghof.de/usb_modeswitch/)
libusb-1.0.6.tar.bz2(http://sourceforge.net/projects/libusb/files/libusb-1.0/)
libusb-compat-0.1.3.tar.bz2(http://www.linuxfromscratch.org/blfs/view/svn/general/libusb-compat.html)
交叉编译usb_modeswitch
1. 交叉编译 libusb
A. 解压并进入libusb-1.0.8目录,建立子目录install用于存放最后生存的库文件与头文件。
# mkdir install
B. 配置并生成Makefile文件
#./configure –build=i686-linux--host=arm-linux --prefix=/…../libusb-1.0.8/install
#make
]# make install
2. 设置PKG_CONFIG_PATH环境变量,以使我们后面的编译能够顺利找到libusb库
A.设置环境变量
#export PKG_CONFIG_PATH=/home/Anson/libusb-1.0.8/install/lib/pkgconfig:$PKG_CONFIG_PATH
B.查看是否设置正确
#echo $PKG_CONFIG_PATH
3. 交叉编译lib_compat
与上面编译libusb的方法类似:
#mkdir install
#./configure --build=i686-linux--host=arm-linux --prefix=/…../libusb-compat-0.1.3/install
#make
#make install
说明:如果此时出现"-Wno-pointer-sign"、"-fvisibility=hidden"这类错误,则是由于编译器版本过低不支持导致的,可以直接在Makefile和libusb/Makefile文件中删除这些编译选项即可。(我用的是arm-linux-gcc 4.4.3没问题)
4. 交叉编译usb_modeswitch
A.修改Makefile文件
修改STRIP和CC选项为:
STRIP = arm-none-linux-gnueabi-strip
CC = arm-none-linux-gnueabi-gcc
可以将上面的libusb和libusb-compat的库和头文件拷贝到交叉编译器的目录下(install/lib内的文件拷贝到/opt/FriendlyARM/toolschain/4.3.3/lib/gcc/arm-none-linux-gnueabi/4.3.3/ 和install/include文件夹添加到/opt/FriendlyARM/toolschain/4.3.3/lib/gcc/arm-none-linux-gnueabi/4.3.3/include),并在Makefile中添加路径:
LDFLAGS=-Wl,-rpath=/opt/FriendlyARM/toolschain/4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/,
其它不变这里的usb.h就是libusb-compat目录下的,如果没有usb.h,usb_modeswitch是编译不过去的。
5 make
6 编辑usb_modeswitch目录下的usb_modeswitch.conf文件,在usb-modeswitch-data-20110227中可以找到对应的文件12d1:1446,粘贴即可。
把usb_modeswitch, usb_modeswitch.conf拷贝到/home目录下,并开启最高权限(chmod 777 +文件名)
四、 PPP拨号
下载ppp-2.4.4编译 #cd /root/gprs/ppp-2.4.1
#./configure
#make CC= /usr/local/..../bin/arm-none-linux-gnueabi-gcc
拨号所用到的程序就是ppp-2.4.4/pppd/下的pppd,和ppp-2.4.4/chat/下的chat程序
将交叉编译出来的这 两个应用程序 拷贝到开发板 /usr/sbin 文件夹下 ,更改其属性为可执行文件(chmod 777 )。
注:友善最新的文件系统在/usr/sbin目录下已经有pppd chat pppdump等文件
修改拨号脚本:
开发板上/etc/ppp/cdma2000文件中添加3G网卡的账号,密码
再拷贝到/usr/sbin目录下
Usb模式转化
cd /home
./usb_modeswitch–W –c usb_modeswitch.conf
Cd/usr/sbin
pppdfile cdma2000
成功拨号上网!
参考资料: http://www.linuxidc.com/Linux/2011-03/33428.htm
http://www.linuxidc.com/Linux/2011-03/33429.htm
http://www.linuxidc.com/Linux/2011-03/33430.htm
彭海文,武汉大学,《基于嵌入式Linux的3G技术的应用和研究》
转载请注明出处!谢谢!