[ZLG-ARM] 构建arm-linux仿真运行环境 (NFS启动)

[复制链接]
1873|2
 楼主| ddpxy 发表于 2009-4-2 12:01 | 显示全部楼层 |阅读模式
摘要:本文旨在将&nbsp;arm-linux&nbsp;在&nbsp;skyeye&nbsp;上搭建起来,并在&nbsp;arm-linux&nbsp;上能成功&nbsp;mount&nbsp;NFS&nbsp;为目标,&nbsp;最终我们能在&nbsp;arm-linux&nbsp;里运行我们自己的应用程序.&nbsp;其实在&nbsp;skyeye&nbsp;上移植&nbsp;arm-linux&nbsp;并非难事,网上也有不少资料,&nbsp;只是大都遗漏细节,&nbsp;以致细微之处卡壳,所以本文力求详实清析,&nbsp;希望能对大家有点用处。<br />一&nbsp;前言<br />本文旨在将&nbsp;arm-linux&nbsp;在&nbsp;skyeye&nbsp;上搭建起来,并在&nbsp;arm-linux&nbsp;上能成功&nbsp;mount&nbsp;NFS&nbsp;为目标,&nbsp;最终我们能在&nbsp;arm-linux&nbsp;里运行我们自己的应用程序.&nbsp;其实在&nbsp;skyeye&nbsp;上移植&nbsp;arm-linux&nbsp;并非难事,网上也有不少资料,&nbsp;只是大都遗漏细节,&nbsp;以致细微之处卡壳,所以本文力求详实清析,&nbsp;希望能对大家有点用处。<br />二&nbsp;安装&nbsp;Skyeye<br />我们选定&nbsp;skyeye&nbsp;的&nbsp;1.2.4&nbsp;这个版本,&nbsp;为了能让它上面运行的&nbsp;arm-linx&nbsp;能挂接&nbsp;NFS,我们需要修改&nbsp;device/net/dev_net_cs8900a.c&nbsp;(修改后的文件在附件里),&nbsp;再编译&nbsp;skyeye。操作如下,&nbsp;先解压源码包:<br />#tar&nbsp;xzf&nbsp;skyeye-1.2.4_Rel.tar.gz<br />#cd&nbsp;skyeye-1.2.4<br />请用附件里的&nbsp;dev_net_cs8900a.c&nbsp;替换&nbsp;device/net/dev_net_cs8900a.c&nbsp;后执行编译:<br />#make&nbsp;NO_DBCT=1&nbsp;NO_BFD=1<br />编译完后生成的&nbsp;skyeye&nbsp;在&nbsp;binary&nbsp;下,将其拷贝至&nbsp;/usr/local/bin/&nbsp;下:<br />#cp&nbsp;binary/skyeye&nbsp;/usr/local/bin<br />三&nbsp;编译内核<br />我们选定&nbsp;linux-2.6.14.tar.bz2&nbsp;这个版本,&nbsp;交叉编译器用&nbsp;arm-linux-gcc&nbsp;3.4.1&nbsp;(对2.6&nbsp;内核用&nbsp;3.4&nbsp;以下的版本编译经常会出现问题)。操作步骤如下:<br />1.假定内核源码包在&nbsp;/root&nbsp;下,&nbsp;首先解压源码:<br />#cd&nbsp;/root<br />#tar&nbsp;xjf&nbsp;linux-2.6.14.tar.bz2<br />2.进入内核目录:<br />#cd&nbsp;linux-2.6.14<br />修改此目录下的&nbsp;Makefile,&nbsp;将<br />ARCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?=&nbsp;$(SUBARCH)<br />CROSS_COMPILE&nbsp;?=<br />改为<br />ARCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?=&nbsp;arm<br />CROSS_COMPILE&nbsp;?=&nbsp;/usr/local/arm/3.4.1/bin/arm-linux-<br />3.生成默认的内核配置文件(for&nbsp;s3c2410):<br />#make&nbsp;smdk2410_defconfig<br />4.为内核添加&nbsp;cs8900(见附件)&nbsp;网卡驱动,以支持&nbsp;NFS&nbsp;挂接:<br />(1)复制&nbsp;cs8900&nbsp;驱动到&nbsp;drivers/net/arm&nbsp;目录<br />#cp&nbsp;cs8900.c&nbsp;drivers/net/arm<br />#cp&nbsp;cs8900.h&nbsp;drivers/net/arm<br />(2)修改&nbsp;drivers/net/arm&nbsp;目录下的&nbsp;Kconfig&nbsp;文件,&nbsp;在最后添加:<br />config&nbsp;arm_CS8900<br />tristate&nbsp;&quot;CS8900&nbsp;support&quot;<br />depends&nbsp;on&nbsp;NET_ETHERNET&nbsp;&&&nbsp;arm&nbsp;&&&nbsp;ARCH_SMDK2410<br />help<br />Support&nbsp;for&nbsp;CS8900A&nbsp;chipset&nbsp;based&nbsp;Ethernet&nbsp;cards.&nbsp;If&nbsp;you&nbsp;have&nbsp;a&nbsp;network<br />(Ethernet)&nbsp;card&nbsp;of&nbsp;this&nbsp;type,&nbsp;say&nbsp;Y&nbsp;and&nbsp;read&nbsp;the&nbsp;Ethernet-HOWTO,&nbsp;available<br />from&nbsp;as&nbsp;well&nbsp;as&nbsp;.To&nbsp;compile&nbsp;this&nbsp;driver&nbsp;as&nbsp;a&nbsp;module,&nbsp;choose&nbsp;M&nbsp;here&nbsp;and&nbsp;read.<br />The&nbsp;module&nbsp;will&nbsp;be&nbsp;called&nbsp;cs8900.o.<br />注:在运行&nbsp;make&nbsp;menuconfig&nbsp;命令时就会出现:&nbsp;[&nbsp;]&nbsp;CS8900&nbsp;support&nbsp;这一选项<br />(3)修改&nbsp;drivers/net/arm&nbsp;目录下的Makefile文件,在最后添加如下内容:<br />obj-$(CONFIG_arm_CS8900)&nbsp;+=&nbsp;cs8900.o<br />注:2.6&nbsp;版本内核的&nbsp;Makefile&nbsp;也与&nbsp;2.4&nbsp;的有所不同,&nbsp;添加以上语句,&nbsp;就会使内核在编译的时候根据配置将cs8900A的驱动程序以模块或静态的方式编译到内核当中。<br />(4)修改&nbsp;arch/arm/mach-s3c2410/mach-smdk2410.c&nbsp;在此文件中找到&nbsp;smdk2410_iodesc[]&nbsp;结构数组,添加如下如下内容:<br />{vSMDK2410_ETH_IO,pSMDK2410_ETH_IO,&nbsp;SZ_1M,&nbsp;MT_DEVICE}<br />修改之后变成:<br />static&nbsp;struct&nbsp;map_desc&nbsp;smdk2410_iodesc[]&nbsp;__initdata&nbsp;=&nbsp;{<br /><br />{vSMDK2410_ETH_IO,pSMDK2410_ETH_IO,&nbsp;SZ_1M,&nbsp;MT_DEVICE}<br />};<br />并且添加一个头文件引用:<br />#include&nbsp;<br />(5)在&nbsp;include/asm-arm/arch-s3c2410&nbsp;目录下创建文件&nbsp;smdk2410.h<br />#ifndef&nbsp;_INCLUDE_SMDK2410_H_<br />#define&nbsp;_INCLUDE_SMDK2410_H_<br />#include&nbsp;<br />#define&nbsp;pSMDK2410_ETH_IO&nbsp;0x19000000<br />#define&nbsp;vSMDK2410_ETH_IO&nbsp;0xE0000000<br />#define&nbsp;SMDK2410_ETH_IRQ&nbsp;IRQ_EINT9<br />#endif<br />5.参照&nbsp;http://skyeye.wiki.sourceforge.net/Linux&nbsp;修改内核文件<br />修改&nbsp;include/asm-arm/arch-s3c2410/map.h<br />#define&nbsp;S3C2410_CS6&nbsp;(0x30000000UL)<br />to<br />#define&nbsp;S3C2410_CS6&nbsp;(0xC0000000UL)<br />修改&nbsp;include/asm-arm/arch-s3c2410/memory.h<br />#define&nbsp;PHYS_OFFSET&nbsp;(0x30000000UL)<br />to<br />#define&nbsp;PHYS_OFFSET&nbsp;(0xC0000000UL)<br /><br />6.裁剪/定制内核<br />(1)#make&nbsp;menuconfig<br />(2)设置内核启动参数<br />Boot&nbsp;options&nbsp;---&gt&nbsp;Default&nbsp;kernel&nbsp;command&nbsp;string:<br />mem=32M&nbsp;console=ttySAC0&nbsp;root=/dev/ram&nbsp;initrd=0xc0800000,0x00800000&nbsp;ramdisk_size=8192&nbsp;rw<br />(3)设置&nbsp;CS8900&nbsp;的支持<br />Device&nbsp;Drivers&nbsp;---&gt<br />Network&nbsp;device&nbsp;support&nbsp;---&gt<br />Ethernet&nbsp;(10&nbsp;or&nbsp;100Mbit)&nbsp;---&gt&nbsp;[]&nbsp;&nbsp;&nbsp;CS8900&nbsp;support<br />选中&nbsp;
  • &nbsp;&nbsp;&nbsp;CS8900&nbsp;support<br />(4)设置&nbsp;initrd&nbsp;的支持<br />Device&nbsp;Drivers&nbsp;---&gt&nbsp;Block&nbsp;devices&nbsp;---&gt&nbsp;[&nbsp;]&nbsp;RAM&nbsp;disk&nbsp;support<br />下面三项必须设置:<br />1.确保&nbsp;RAM&nbsp;disk&nbsp;support&nbsp;被选中<br />2.相应的将默认的&nbsp;(4096)&nbsp;Default&nbsp;RAM&nbsp;disk&nbsp;size&nbsp;(kbytes)&nbsp;改成&nbsp;8192;<br />3.Initial&nbsp;RAM&nbsp;disk&nbsp;(initrd)&nbsp;support&nbsp;一定要选中,&nbsp;切记!<br />(5)设置&nbsp;NFS&nbsp;的支持<br />File&nbsp;systems&nbsp;---&gt&nbsp;Network&nbsp;File&nbsp;Systems&nbsp;---&gt<br />至少确保下面两项被选中:<br />
  • &nbsp;NFS&nbsp;file&nbsp;system&nbsp;support<br />
  • &nbsp;&nbsp;&nbsp;Provide&nbsp;NFSv3&nbsp;client&nbsp;support<br />(6)设置&nbsp;ROM&nbsp;file&nbsp;system&nbsp;的支持<br />File&nbsp;systems&nbsp;---&gt&nbsp;
  • &nbsp;ROM&nbsp;file&nbsp;system&nbsp;support<br />确保&nbsp;
  • &nbsp;ROM&nbsp;file&nbsp;system&nbsp;support&nbsp;被选中<br />(7)设置&nbsp;ext2&nbsp;的支持<br />File&nbsp;systems&nbsp;---&gt&nbsp;
  • &nbsp;Second&nbsp;extended&nbsp;fs&nbsp;support<br />确保&nbsp;
  • &nbsp;Second&nbsp;extended&nbsp;fs&nbsp;support&nbsp;被选中<br />7.编译<br />#make<br />编译完成后会有个&nbsp;vmlinux&nbsp;在当前目录下,&nbsp;这就是我们要的&nbsp;arm-linux&nbsp;内核了<br /><br />#P#&nbsp;四&nbsp;制作根文件系统&nbsp;initrd.img(Initial&nbsp;RAM&nbsp;disk)<br />我们选定&nbsp;busybox-1.9.2.tar.bz2&nbsp;这个版本,&nbsp;以静态方式编译,&nbsp;即生成的&nbsp;busybox&nbsp;不需要共享库的支持就能运行。这样做我们就不需要布署程序库了。缺点是自己写的&nbsp;arm-linux&nbsp;程序在这个根文件系统中是不能运行的,因为缺少共享程序库的支持。不过别担心,我们会解决这个问题的,稍后你将看到,通过在&nbsp;arm-linux&nbsp;里以挂接&nbsp;NFS&nbsp;的方式,&nbsp;将宿主机的&nbsp;arm-linux-gcc&nbsp;编译器的库文件挂到&nbsp;arm-linux&nbsp;的&nbsp;/lib&nbsp;下,&nbsp;就可完美的运行我们自己的程序了。好,一步步来,先来看看根文件系统的制作:<br />1.解压源码包<br />#tar&nbsp;xjf&nbsp;busybox-1.9.2.tar.bz2<br />#cd&nbsp;busybox-1.9.2<br />2.修改&nbsp;Makefile,&nbsp;将<br />ARCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?=&nbsp;$(SUBARCH)<br />CROSS_COMPILE&nbsp;?=<br />改为<br />ARCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?=&nbsp;arm<br />CROSS_COMPILE&nbsp;?=&nbsp;/usr/local/arm/3.3.2/bin/arm-linux-<br />注:这个版本的&nbsp;busybox&nbsp;用&nbsp;3.4.1&nbsp;的&nbsp;arm-linux-gcc&nbsp;编译有些问题,&nbsp;用&nbsp;3.3.2&nbsp;版则可顺利编译。<br />3.定制&nbsp;busybox<br />#make&nbsp;menuconfig<br />设置静态编译方式<br />Busybox&nbsp;Settings&nbsp;---&gt&nbsp;Build&nbsp;Options&nbsp;---&gt&nbsp;
  • &nbsp;Build&nbsp;BusyBox&nbsp;as&nbsp;a&nbsp;static&nbsp;binary&nbsp;(no&nbsp;shared&nbsp;libs)<br />确保&nbsp;
  • &nbsp;Build&nbsp;BusyBox&nbsp;as&nbsp;a&nbsp;static&nbsp;binary&nbsp;(no&nbsp;shared&nbsp;libs)&nbsp;被选中<br />4.执行&nbsp;make&nbsp;编译<br />#make<br />编译出错,&nbsp;信息如下:<br />applets/applets.c:15:2:&nbsp;warning:&nbsp;#warning&nbsp;Static&nbsp;linking&nbsp;against&nbsp;glibc&nbsp;produces&nbsp;buggy&nbsp;executables<br />applets/applets.c:16:2:&nbsp;warning:&nbsp;#warning&nbsp;(glibc&nbsp;does&nbsp;not&nbsp;cope&nbsp;well&nbsp;with&nbsp;ld&nbsp;--gc-sections).<br />applets/applets.c:17:2:&nbsp;warning:&nbsp;#warning&nbsp;See&nbsp;sources.redhat.com/bugzilla/show_bug.cgi?id=3400<br />applets/applets.c:18:2:&nbsp;warning:&nbsp;#warning&nbsp;Note&nbsp;that&nbsp;glibc&nbsp;is&nbsp;unsuitable&nbsp;for&nbsp;static&nbsp;linking&nbsp;anyway.<br />applets/applets.c:19:2:&nbsp;warning:&nbsp;#warning&nbsp;If&nbsp;you&nbsp;still&nbsp;want&nbsp;to&nbsp;do&nbsp;it,&nbsp;remove&nbsp;-Wl,--gc-sections<br />applets/applets.c:20:2:&nbsp;warning:&nbsp;#warning&nbsp;from&nbsp;scripts/trylink&nbsp;and&nbsp;remove&nbsp;this&nbsp;warning.<br />applets/applets.c:21:2:&nbsp;error:&nbsp;#error&nbsp;Aborting&nbsp;compilation.<br />make[1]:&nbsp;***&nbsp;[applets/applets.o]&nbsp;Error&nbsp;1<br />按照提示,修改&nbsp;scripts/trylink,&nbsp;将此文件里面有&nbsp;-Wl,--gc-sections&nbsp;的行都删除掉,<br />然后重新&nbsp;make<br />#make<br />还是出错,&nbsp;信息如下:<br />root@hukq-desktop:~/busybox/busybox-1.9.2#&nbsp;make<br />CC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;applets/applets.o<br />applets/applets.c:15:2:&nbsp;warning:&nbsp;#warning&nbsp;Static&nbsp;linking&nbsp;against&nbsp;glibc&nbsp;produces&nbsp;buggy&nbsp;executables<br />applets/applets.c:16:2:&nbsp;warning:&nbsp;#warning&nbsp;(glibc&nbsp;does&nbsp;not&nbsp;cope&nbsp;well&nbsp;with&nbsp;ld&nbsp;--gc-sections).<br />applets/applets.c:17:2:&nbsp;warning:&nbsp;#warning&nbsp;See&nbsp;sources.redhat.com/bugzilla/show_bug.cgi?id=3400<br />applets/applets.c:18:2:&nbsp;warning:&nbsp;#warning&nbsp;Note&nbsp;that&nbsp;glibc&nbsp;is&nbsp;unsuitable&nbsp;for&nbsp;static&nbsp;linking&nbsp;anyway.<br />applets/applets.c:19:2:&nbsp;warning:&nbsp;#warning&nbsp;If&nbsp;you&nbsp;still&nbsp;want&nbsp;to&nbsp;do&nbsp;it,&nbsp;remove&nbsp;-Wl,--gc-sections<br />applets/applets.c:20:2:&nbsp;warning:&nbsp;#warning&nbsp;from&nbsp;scripts/trylink&nbsp;and&nbsp;remove&nbsp;this&nbsp;warning.<br />applets/applets.c:21:2:&nbsp;error:&nbsp;#error&nbsp;Aborting&nbsp;compilation.<br />make[1]:&nbsp;***&nbsp;[applets/applets.o]&nbsp;Error&nbsp;1<br />make:&nbsp;***&nbsp;[applets]&nbsp;Error&nbsp;2<br />修改文件&nbsp;applets/applets.c&nbsp;第&nbsp;21&nbsp;行,&nbsp;将<br />#error&nbsp;Aborting&nbsp;compilation.<br />注释掉:<br />执行&nbsp;make&nbsp;重新编译<br />#make<br />编译通过,&nbsp;busybox&nbsp;被生成了,&nbsp;然后执行<br />#make&nbsp;install<br />busybox&nbsp;就被安装到默认的临时目录&nbsp;_install&nbsp;下了<br />5.制作&nbsp;initrd.img<br />有了&nbsp;busybox&nbsp;后制作&nbsp;initrd.img&nbsp;就容易多了,只是说起来比较烦琐。以命令演示如下:<br />创建映像文件并挂到&nbsp;initrd&nbsp;目录<br />#mkdir&nbsp;initrd<br />#dd&nbsp;if=/dev/zero&nbsp;of=initrd.img&nbsp;bs=1k&nbsp;count=4096<br />#mke2fs&nbsp;-F&nbsp;-v&nbsp;initrd.img<br />#mount&nbsp;-o&nbsp;loop&nbsp;initrd.img&nbsp;initrd<br />将添加&nbsp;busybox&nbsp;到此映像文件<br />#cd&nbsp;initrd<br />#cp&nbsp;-r&nbsp;../_install/*&nbsp;.<br />#创建必要的目录<br />#mkdir&nbsp;proc&nbsp;lib&nbsp;etc&nbsp;dev&nbsp;root&nbsp;home&nbsp;var&nbsp;tmp<br />#chmod&nbsp;777&nbsp;tmp<br />建立设备文件<br />#cd&nbsp;dev<br />#mknod&nbsp;-m&nbsp;644&nbsp;console&nbsp;c&nbsp;5&nbsp;1<br />#mknod&nbsp;-m&nbsp;644&nbsp;null&nbsp;c&nbsp;1&nbsp;3<br />#mknod&nbsp;-m&nbsp;640&nbsp;ram&nbsp;b&nbsp;1&nbsp;1<br />#mknod&nbsp;-m&nbsp;644&nbsp;mem&nbsp;c&nbsp;1&nbsp;1<br />#cd&nbsp;..<br />创建脚本文件&nbsp;etc/inittab,&nbsp;内容如下:<br />::sysinit:/etc/init.d/rcS<br />::askfirst:-/bin/sh<br />::restart:/sbin/init<br />::ctrlaltdel:/sbin/reboot<br />::shutdown:/bin/umount&nbsp;-a&nbsp;-r<br />::shutdown:/sbin/swapoff&nbsp;-a<br />设置此脚本执行权限<br />#chmod&nbsp;644&nbsp;etc/inittab<br />创建脚本文件&nbsp;etc/init.d/rcS,&nbsp;内容如下:<br />#!/bin/sh<br />/bin/mount&nbsp;-t&nbsp;proc&nbsp;none&nbsp;/proc<br />/sbin/ifconfig&nbsp;lo&nbsp;127.0.0.1&nbsp;up<br />/sbin/ifconfig&nbsp;eth0&nbsp;10.0.0.2&nbsp;netmask&nbsp;255.0.0.0&nbsp;up<br />hostname&nbsp;skyeye<br />mkdir&nbsp;/var/tmp<br />mkdir&nbsp;/var/log<br />mkdir&nbsp;/var/run<br />mkdir&nbsp;/var/lock<br />/bin/ash<br />设置此脚本执行权限<br />#chmod&nbsp;755&nbsp;etc/init.d/rcS<br />最后一步,执行实际的写入操作,生成&nbsp;initrd.img<br />cd&nbsp;..<br />umount&nbsp;initrd<br />五&nbsp;运行&nbsp;arm-linux<br />现在我们有了内核&nbsp;vmlinux,&nbsp;映像文件&nbsp;initrd.img,&nbsp;模拟程序&nbsp;skyeye,&nbsp;我们还需要一个<br />配置文件&nbsp;skyeye.conf&nbsp;进行&nbsp;arm-linux&nbsp;的仿真运行。<br />#mkdir&nbsp;/root/test<br />#cd&nbsp;/root/test<br />将&nbsp;vmlinux,&nbsp;initrd.img&nbsp;都拷贝到此目录,&nbsp;在此目录下建立一个&nbsp;skyeye&nbsp;的配制文件<br />skyeye.conf,&nbsp;文件内容如下:<br />cpu:&nbsp;arm920t<br />mach:&nbsp;s3c2410x<br />#&nbsp;physical&nbsp;memory<br />mem_bank:&nbsp;map=M,&nbsp;type=RW,&nbsp;addr=0xc0000000,&nbsp;size=0x00800000<br />mem_bank:&nbsp;map=M,&nbsp;type=RW,&nbsp;addr=0xc0800000,&nbsp;size=0x00800000,&nbsp;file=./initrd.img<br />mem_bank:&nbsp;map=M,&nbsp;type=RW,&nbsp;addr=0xc1000000,&nbsp;size=0x01000000<br />#&nbsp;all&nbsp;peripherals&nbsp;I/O&nbsp;mapping&nbsp;area<br />mem_bank:&nbsp;map=I,&nbsp;type=RW,&nbsp;addr=0x48000000,&nbsp;size=0x20000000<br />mem_bank:&nbsp;map=I,&nbsp;type=RW,&nbsp;addr=0x19000300,&nbsp;size=0x00000020<br />net:&nbsp;type=cs8900a,&nbsp;base=0x19000300,&nbsp;size=0x20,int=9,&nbsp;mac=0:4:3:2:1:f,&nbsp;ethmod=tuntap,&nbsp;hostip=10.0.0.1<br />lcd:&nbsp;type=s3c2410x,&nbsp;mod=gtk<br />#dbct:state=on<br /><br />好了,试运行吧:<br />skyeye&nbsp;-e&nbsp;vmlinux<br />看到你的&nbsp;arm-linux&nbsp;运行了吗&nbsp;:-)<br /><br />#P#&nbsp;六&nbsp;在&nbsp;arm-linux&nbsp;里运行我们自己的程序<br />现在&nbsp;arm-linux&nbsp;在&nbsp;skyeye&nbsp;上跑起来了,&nbsp;我们能运行里面的命令,&nbsp;但这些都是&nbsp;busybox的,是系统程序。怎样才能在&nbsp;arm-linux&nbsp;里运行我们自己的程序呢?&nbsp;有两种方案,我们不妨讨论一下,择优而录之:<br />1.在制作根文件系统&nbsp;initrd.img&nbsp;的时候把我们自己的程序加进去,比如放在&nbsp;/usr/bin&nbsp;里目录下,然后重新生成&nbsp;initrd.img,并用这个新的根文件系统来运行&nbsp;arm-linux。其实这是我们的产品在&nbsp;arm-linux&nbsp;上发布的最终方式,但这有个缺点:&nbsp;在产品开发/调试阶段这么做比较麻烦,每修改一次代码就得&nbsp;build&nbsp;一次根文件系统。<br />2.利用挂接&nbsp;NFS(Network&nbsp;file&nbsp;system)&nbsp;的方式,我们访问/执行一个网络文件系统上的文件就像它在本地一样,显然这么做能避免第一种方案的弊端!&nbsp;如何实现呢?&nbsp;随我来:<br />(1)在&nbsp;arm-linux&nbsp;的宿主机里配置&nbsp;NFS&nbsp;Server&nbsp;(我用是&nbsp;Ubuntu,而且是在&nbsp;vmware&nbsp;里)<br />#apt-get&nbsp;install&nbsp;nfs-kernel-server<br />#apt-get&nbsp;install&nbsp;nfs-common<br />(2)编辑文件&nbsp;/etc/exports,&nbsp;内容如下(具体需求由你而定):<br />/test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(rw,sync,no_root_squash)<br />/usr/local/arm/3.3.2/lib&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(ro,sync,no_root_squash)<br />(3)配置宿主机的&nbsp;ip<br />#ifconfig&nbsp;eth1&nbsp;down<br />#ifconfig&nbsp;eth1&nbsp;10.0.0.1&nbsp;netmask&nbsp;255.0.0.0&nbsp;up<br />注:你的可能是&nbsp;eth0,&nbsp;另外&nbsp;ip&nbsp;地址你也可自己定义,只要能和&nbsp;arm-liux&nbsp;通信<br />(4)重启&nbsp;nfs&nbsp;server<br />#/usr/sbin/exportfs<br />#/etc/init.d/nfs-kernel-server&nbsp;restart<br />#/etc/init.d/portmap&nbsp;restart<br />(5)在&nbsp;skyeye&nbsp;运行&nbsp;arm-linux,为其配置&nbsp;ip<br />#ifconfig&nbsp;lo&nbsp;down<br />#ifconfig&nbsp;eth0&nbsp;down<br />#ifconfig&nbsp;lo&nbsp;127.0.0.1&nbsp;up<br />#ifconfig&nbsp;eth0&nbsp;10.0.0.2&nbsp;netmask&nbsp;255.0.0.0&nbsp;up<br />注:可将这几个命令加到&nbsp;rcS&nbsp;脚本里,让&nbsp;arm-linux&nbsp;启动时帮你做<br />(6)在&nbsp;skyeye&nbsp;上运行&nbsp;arm-linux,演示&nbsp;nfs&nbsp;挂接<br />#mount&nbsp;-o&nbsp;nolock&nbsp;10.0.0.1:/usr/local/arm/3.3.2/lib&nbsp;/lib<br />#export&nbsp;LD_LIBRARY_PATH=/lib<br />#mount&nbsp;-o&nbsp;nolock&nbsp;10.0.0.1:/test&nbsp;/tmp<br />在宿主机的&nbsp;/test&nbsp;下建立文件&nbsp;hello.c,用&nbsp;arm-linux-gcc&nbsp;3.3.2&nbsp;编译<br />#cd&nbsp;/test<br />#arm-linux-gcc&nbsp;-o&nbsp;hello&nbsp;hello.c<br />在&nbsp;arm-linux&nbsp;的&nbsp;/tmp&nbsp;下看看,是不是有&nbsp;hello.c&nbsp;和&nbsp;hello&nbsp;这两个文件了?&nbsp;试着运行看看:<br />#cd&nbsp;/tmp<br />#./hello<br />注:为了确认&nbsp;arm-linux&nbsp;能和宿主机通信,&nbsp;可尝试以下手段:<br />(1)在宿主机上&nbsp;ping&nbsp;你的&nbsp;arm-linux<br />#ping&nbsp;10.0.0.2&nbsp;-c&nbsp;2<br />(2)在&nbsp;arm-linux&nbsp;里&nbsp;ping&nbsp;你的宿主机<br />#ping&nbsp;10.0.0.1&nbsp;-c&nbsp;2<br />(3)如果相互都&nbsp;ping&nbsp;不通过,可这样做:<br />重新设置一下&nbsp;arm-linux&nbsp;的网络:<br />#ifconfig&nbsp;eth0&nbsp;down<br />#ifconfig&nbsp;eth0&nbsp;up<br />再重新设置一下宿主机的网络:<br />#ifconfig&nbsp;eth1&nbsp;down<br />#ifconfig&nbsp;eth1&nbsp;up<br />然后再像上一步那样,相互&nbsp;ping&nbsp;对方,直至&nbsp;ping&nbsp;通为止。
  • initer 发表于 2009-4-2 13:56 | 显示全部楼层

    这个也可以运用于ZLG_ARM吗?

      
    initer 发表于 2009-4-2 14:25 | 显示全部楼层

    是不是经过验证过的呀?

      
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    27

    主题

    101

    帖子

    0

    粉丝
    快速回复 在线客服 返回列表 返回顶部