全部博文(776)
分类: LINUX
2010-12-06 21:51:43
第一步:编写GPRS的内核驱动程序
因为我用的开发板基于ARM920T,linux内核中没有mc35i的驱动程序,所以自己写了个驱动程序,重新编译了内核。驱动程序代码如下:
编译内核后,要在文件系统中创建设备,命令如下:
mknod Mc35i c 253 0
第二步:移植ppp协议
由于arm-linux上没有提供使用ppp的pppd, chat应用程序,所以需要向开发板上移植。方法就和普通的应用程序一样,在pc机上的develop目录下面编译,然后将生成的可执行程序复制到Ramdisk文件系统中,在下次重新下载内核和文件系统时使用新的文件系统,就可以在arm-linux上运行pppd了。具体过程如下:
1,在samba.org下载ppp-2.4.3.tar.gz后安如下操作:
tar zxvf ppp-2.4.3.tar.gz
2,由于在ppp根文件夹目录下面没有makefile文件,所以要自己添加:
# PPP top-level Makefile for Linux.
DESTDIR = /usr/local
BINDIR = $(DESTDIR)/sbin
INCDIR = $(DESTDIR)/include
MANDIR = $(DESTDIR)/share/man
ETCDIR = /etc/ppp
# uid 0 = root
INSTALL= install
all:
cd chat; $(MAKE) $(MFLAGS) all
cd pppd/plugins; $(MAKE) $(MFLAGS) all
cd pppd; $(MAKE) $(MFLAGS) all
cd pppstats; $(MAKE) $(MFLAGS) all
cd pppdump; $(MAKE) $(MFLAGS) all
install: $(BINDIR) $(MANDIR)/man8 install-progs install-devel
install-progs:
cd chat; $(MAKE) $(MFLAGS) install
cd pppd/plugins; $(MAKE) $(MFLAGS) install
cd pppd; $(MAKE) $(MFLAGS) install
cd pppstats; $(MAKE) $(MFLAGS) install
cd pppdump; $(MAKE) $(MFLAGS) install
install-etcppp: $(ETCDIR) $(ETCDIR)/options $(ETCDIR)/pap-secrets
$(ETCDIR)/chap-secrets
install-devel:
cd pppd; $(MAKE) $(MFLAGS) install-devel
$(ETCDIR)/options:
$(INSTALL) -c -m 644 etc.ppp/options $@
$(ETCDIR)/pap-secrets:
$(INSTALL) -c -m 600 etc.ppp/pap-secrets $@
$(ETCDIR)/chap-secrets:
$(INSTALL) -c -m 600 etc.ppp/chap-secrets $@
$(BINDIR):
$(INSTALL) -d -m 755 $@
$(MANDIR)/man8:
$(INSTALL) -d -m 755 $@
$(ETCDIR):
$(INSTALL) -d -m 755 $@
clean:
rm -f `find . -name '*.[oas]' -print`
rm -f `find . -name 'core' -print`
rm -f `find . -name '*~' -print`
cd chat; $(MAKE) clean
cd pppd/plugins; $(MAKE) clean
cd pppd; $(MAKE) clean
cd pppstats; $(MAKE) clean
cd pppdump; $(MAKE) clean
dist-clean: clean
rm -f Makefile `find . -name Makefile -print`
#kernel:
# cd linux; ./kinstall.sh
# no tests yet, one day...
installcheck:
true
至于其他目录下的makefile可以复制该目录下的makefile.linux即可。交叉编译后得到chat、pppd、pppstats、pppdump四个应用程序,拷贝到嵌入式系统的文件系统ramdisk/target/usr/sbin目录下,权限改成755即可。
然后在ramdisk/target/dev目录下建立ppp节点:
mknod ppp -c 108,0
运行PPPD看看, 若说segment fault, 则是内核没有配置mmap, 或者把刚才的Makefile中的 HAVE_MMAP改为FALSE, 因为pppd中调用了mmap().
第三步:C程序的实现