从NFS启动Linux
来源:互联网 发布:cpa软件服务 编辑:程序博客网 时间:2024/04/27 16:22
搞嵌入式的,不懂NFS,那绝对是一个悲剧。如果你连调试一个普通的Linux C程序,都要经历“编译->打包 -> 烧写 -> 重启”这些过程,那么你离正式产品不是一天比一天远,就是产品没出,你已经厌倦了这个工作。笔者就曾经看到一个娃,在一台内存只有512MB的机器上,装了一个VMWare虚拟机,跑了一个Red Hat 9来编译调试他的ARM Linux程序——我问他为什么不用NFS。他答曰,不知为何物——于是决定在这分享分享快乐喜悦的调试方法。
Linux 启动过程回顾
有人要多嘴了,我前面一大票文章都讲了这个过程,在这里又要重复。其实了解了Linux的启动过程,再理解别的东西,就不难了,比如Live CD,装在U盘上的Linux等等。
Linux 的工作原理
废话少说,先上图。
这很简单吧。电脑就是来运行程序的,操作系统就是(不仅仅是)负责让多个程序在一个CPU上跑的。Linux也不例外,也是操作系统内核启动完成后,自然而然就轮到操作系统为我们自己的程序服务的时候了。
这是它的基本原理。但是我们需要为它考虑一些细节,第一个,也是本文最核心的地方,操作系统到哪里寻找程序运行?
首先我们要明确我们所指的程序,是放在有目录级结构的文件系统里,为了寻找到所需要操作系统来运行的程序,我们必须告诉它,文件在哪个文件系统。一般来说,PC机的文件就存储在硬盘上;对于Live CD而言,文件系统就藏在光盘上面。也就是说,只要操作系统能找到并正确地认识了文件系统,就可以执行里面的程序了!
设置目标机器上的NFS启动
看完了第一节,明白启动的过程了吗? 简单地说,就是内核加载,内核找到一个文件系统,内核执行文件系统里的一个程序。无论是从NFS启动,还是从硬盘启动,都是上述过程。只是NFS启动,其文件系统是放在网络上的。只要我们告诉内核,具体放在什么地方,在网络的另一端我们设置好共享,自然可以从NFS启动。
让内核识别NFS并可从NFS启动
编译内核
在内核源代码目录树下,配置内核:
$make menuconfig
依次进入 File Systems -> Network File System中选择 NFS client support 以及 Root file system on NFS。如果找不到Root file system on NFS 选项,要打开第一级菜单下的Networking support -> Networking options -> TCP/IP networking -> IP: kernel level autoconfiguration。如果NFS要使用DHCP,还得选上 IP: DHCP support。
保存配置并重新编译即可。
配置内核参数
进入ARM开发板的设置 linux_cmd_line的地方(mini2440则为开机按 s,输入linux_cmd_line,并带着引号输入参数),或者进入PC的GRUB,设置类似参数
root=/dev/nfs rw nfsroot=192.168.1.1:/linux ip=192.168.1.5:::255.255.255.0:linux::off
该配置为静态IP设置。各参数意义如下:
root=/dev/nfs:指定根文件系统为 /dev/nfs,即NFS 。这与/dev这个目录并没有什么关系,在此仅为一个名字。
rw:根文件系统挂载为可读写。还可以有 ro 即只读的选项。
nfsroot=192.168.1.1:/linux :指明挂载哪一个NFS上的哪一个目录。这里指的是挂载IP为192.168.1.1的电脑上导出的/linux目录。
ip=192.168.1.5:::255.255.255.0:linux::off:设置本机的IP。此举是为了连接刚才设置的IP。这里是一个静态的配置,配置的格式为 ip=本机的IP地址::网关地址:网络掩码:本机的主机名:网络接口名:off 。一般情况下网关、网络接口名都不需要设置。如果是DHCP获取IP,那很简单,直接 ip=dhcp 即可。
设置NFS服务器
NFS服务器可以是任意操作系统,只要能提供NFS服务即可(WINDOWS可以使用 WSU —— Windows Services for Unix来实现,具体请参考接下来本站要发表的文章)。在这里以Fedora为例,希望别的发行版的用户触类旁通。
对于Fedora来说,有图形界面的工具进行设置,在管理-》服务器设置-》NFS中添加一个共享即可。
更通用的作法,就是修改 /etc/exports文件,之后再启动NFS服务器。
/etc/exports文件格式如下
导出的文件夹 导出的网段(对该导出的网段的选项)
所谓导出的网段就是只向哪个网段导出,保证安全性。一个例子为:
/linux 192.168.1.0/24(rw,sync,no_root_squash)
就是将 /linux 导出到网段为192.168.1.0,子网掩码为255.255.255.0 (即24)的网络。其中可用的选项为(翻译自man文档):
secure和insecure: secure选项下,所有连接的端口均小于1024。默认打开。
rw和ro: Read/Write和Read Only
async和sync async将使用异步数据存取,数据并非马上写入服务器的。sync则相反。使用async需要注意服务器不能随意不正常地关闭,否则可能导致数据丢失。
no_wdelay:不使用延迟写入。NFS服务器会将写入写入请求缓冲起来,可以提高性能。如果async已经打开那么该选项无效。
no_subtree_check:不进行子树检查(使用该选项易引起安全问题)
root_squash和no_root_squash、all_squash:root_squash选项使得客户端以root权限访问文件系统时,转换为服务器端的匿名用户。这选项打开一定要设置好服务器的权限。
之后再重新启动NFS服务。Fedora下使用 /etc/init.d/nfs restart
使用 exports查看导出的文件。
- 从NFS启动Linux
- 从NFS启动linux
- 从NFS启动linux
- 从NFS启动Linux
- 如何从NFS启动Linux及原理
- 从NFS启动Linux系统,OK6410
- 从NFS启动Linux并挂载根文件系统
- Marvell ESPRESSObin从NFS启动Linux
- 从NFS启动TQ2440
- 从NFS启动TQ2440
- 转载_如何从NFS启动Linux及原理
- mini2440使用u-boot从nfs启动linux
- nfs 启动linux
- AT91SAM9X35-EK 从NFS启动
- Mini6410-NFS启动Linux/Andorid
- Mini2440通过nfs启动linux
- OK6410开发板:挂载NFS、从NFS启动:
- E9 搭建 NFS 环境并从 NFS 启动开发板
- access数据库在没有自增字段情况下选出指定行号的若干行记录
- 个人档
- 感触极深的一篇文章(迷失方向的你不妨看看)
- C#遍历硬盘文件
- 庆幸自己选择了长沙
- 从NFS启动Linux
- js技巧--创建class时调用prototype原型方法
- 上传图片后用JS返回值的问题
- VC UI界面库大集合[转]
- VC与YASM的集成
- 如何获得.net捕获不到的异常
- zoj 1962 || poj 2413 How many Fibs?(大数~)
- 怎么通过程序触发qq右下角的闪动图标
- 设计模式1