mini2440使用nfs挂载的另一种方法
2016-01-10 16:34
267 查看
网上一般使用的都是在uboot启动的时候设置好启动参数,然后linux启动的时候使用nfs让平台挂载主机上的根文件系统目录,这样的话就不需要烧写根文件系统的镜像
到开发板中的nandfalsh中了。我因为制作根文件系统的时候失败了,所以就直接使用的是mini2440自带的根文件系统镜像,烧写到开发板中,这样可以正常启动了。
可是如果要进行实验,编写的模块文件怎么加载到开发板中的文件系统中去呢。我们可以在平台linux启动之后进入文件系统在命令行中使用nfs,去访问位于主机上的
一个目录,我们在主机上写的代码编译出来的ko文件放到这个目录中作为nfs服务器目录,让平台通过nfs将这个目录挂载到平台中的/mnt/目录中,这样就可以通过平台
的/mnt/中开到主机中的ko文件了,同时可以使用insmod进行加载到平台中运行。具体方法如下:
1.在主机上安装nfs服务,我的是Ubuntu12.04
apt-get install apt-get install nfs-kernel-server
2.设置/etc/exports/文件,在末尾添加
/home/cjx/workspace/nfsdir *(rw,sync,no_root_squash)
3.重启服务
#sudo /etc/init.d/portmap restart
#sudo /etc/init.d/nfs-kernel-server restart
4.测试
#sudo mount -t nfs 192.168.0.1:/home/cjx/workspace/nfsdir/ /mnt/
#ls /mnt/
5.在平台上ping主机
如果IP已经在一个网段了,并且设置成了桥接模式但是平台还是ping不同主机,需要设置虚拟机。在 编辑->虚拟网络编辑器->桥接模式->桥接到->有线网卡。
5.启动平台,将平台的eth0的ip设置成跟主机一个网段,我的主机ip是192.168.0.1,设置平台为192.168.0.2
方法一:ifconfig ech0 192.168.0.2 只有这次生效,下次重新启动又会变成原来的治标不治本
方法二:将/etc/eth0-setting中的ip=x.x.x.x设置成你自己想要的,这样永久生效,下次开机就会默认设置成你设置的ip
6.让平台启动的时候自动挂载
修改/etc/init.d/rcS文件,在末尾加上如下语句
echo "mount host matchine to platform dir /mnt/ ..."
mount -t nfs -o nolock 192.168.0.1:/home/cjx/workspace/nfsdir /mnt/
这样每次平台启动的时候就会自动将主机上的nfsdir目录挂载到平台文件系统中的/mnt/中去
好了,这样,你可以在主机上开发,将文件放到/home/cjx/workspace/nfsdir中去,然后就可以在平台中的/mnt/中看到了,并且可以加载模块什么的操作
需要注意的是在主机编译的时候需要指定编译器为交叉编译工具链编译才能在平台上运行。我的makefile文件如下所示
ifneq ($(KERNELRELEASE),)
obj-m := platform.o
else
KDIR := /home/cjx/workspace/kernel/linux-2.6.32.2
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=/home/cjx/workspace/software/arm-linux-gcc/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers modul*
endif
KDIR表示我的平台移植的内核的目录,CROSS_COMPILE是我主机上交叉编译工具链的安装目录。
到开发板中的nandfalsh中了。我因为制作根文件系统的时候失败了,所以就直接使用的是mini2440自带的根文件系统镜像,烧写到开发板中,这样可以正常启动了。
可是如果要进行实验,编写的模块文件怎么加载到开发板中的文件系统中去呢。我们可以在平台linux启动之后进入文件系统在命令行中使用nfs,去访问位于主机上的
一个目录,我们在主机上写的代码编译出来的ko文件放到这个目录中作为nfs服务器目录,让平台通过nfs将这个目录挂载到平台中的/mnt/目录中,这样就可以通过平台
的/mnt/中开到主机中的ko文件了,同时可以使用insmod进行加载到平台中运行。具体方法如下:
1.在主机上安装nfs服务,我的是Ubuntu12.04
apt-get install apt-get install nfs-kernel-server
2.设置/etc/exports/文件,在末尾添加
/home/cjx/workspace/nfsdir *(rw,sync,no_root_squash)
3.重启服务
#sudo /etc/init.d/portmap restart
#sudo /etc/init.d/nfs-kernel-server restart
4.测试
#sudo mount -t nfs 192.168.0.1:/home/cjx/workspace/nfsdir/ /mnt/
#ls /mnt/
5.在平台上ping主机
如果IP已经在一个网段了,并且设置成了桥接模式但是平台还是ping不同主机,需要设置虚拟机。在 编辑->虚拟网络编辑器->桥接模式->桥接到->有线网卡。
5.启动平台,将平台的eth0的ip设置成跟主机一个网段,我的主机ip是192.168.0.1,设置平台为192.168.0.2
方法一:ifconfig ech0 192.168.0.2 只有这次生效,下次重新启动又会变成原来的治标不治本
方法二:将/etc/eth0-setting中的ip=x.x.x.x设置成你自己想要的,这样永久生效,下次开机就会默认设置成你设置的ip
6.让平台启动的时候自动挂载
修改/etc/init.d/rcS文件,在末尾加上如下语句
echo "mount host matchine to platform dir /mnt/ ..."
mount -t nfs -o nolock 192.168.0.1:/home/cjx/workspace/nfsdir /mnt/
这样每次平台启动的时候就会自动将主机上的nfsdir目录挂载到平台文件系统中的/mnt/中去
好了,这样,你可以在主机上开发,将文件放到/home/cjx/workspace/nfsdir中去,然后就可以在平台中的/mnt/中看到了,并且可以加载模块什么的操作
需要注意的是在主机编译的时候需要指定编译器为交叉编译工具链编译才能在平台上运行。我的makefile文件如下所示
ifneq ($(KERNELRELEASE),)
obj-m := platform.o
else
KDIR := /home/cjx/workspace/kernel/linux-2.6.32.2
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=/home/cjx/workspace/software/arm-linux-gcc/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers modul*
endif
KDIR表示我的平台移植的内核的目录,CROSS_COMPILE是我主机上交叉编译工具链的安装目录。
相关文章推荐
- 原型模式(一)
- 在Visual Studio上开发ARM嵌入式软件
- [数论] 组合数取模 中国剩余定理 Lucas定理
- Nginx编译安装时常见错误分析
- LeetCode-48-Rotate Image(模拟)-Medium
- HTML5 Canvas绘图详解 drawImage() 方法 有图有真相!
- 美景、美食、美人——记我的家乡“大别山”!!!
- 2016年学术中国寒假书单 众多博士倾情推荐
- 烤氏历史第4集:TD往事-商用分水岭
- Hadoop伪分布式模式部署
- Linux 服务器上安装Webmin
- [java] Unsupported major.minor version 51.0 错误解决方案
- python之路-模块 splinter
- log4CXX第二篇---配置文件(properties文件)详解
- 烤氏历史第3集:争议网通-资金雄厚的挑战者,负债累累的争议者
- 腾讯云建站+lnp
- 烤氏历史第2集:联通前传
- ORACLE--子查询
- 研究生常用的十八大学术搜索引擎
- LaTeX简历模板网站