从NFS启动Linux
来源:互联网 发布:程序员是干什么的 编辑:程序博客网 时间:2024/04/28 05:26
搞嵌入式的,不懂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 启动开发板
- java中的二进制,八进制,十进制,十六进制的转换
- shell脚步错误“command not found 2:”
- 扩展机制category与associative
- 青蛙又回到了井里
- Code::Blocks undefine reference to ‘XXX函数’
- 从NFS启动Linux
- 理财产品简介
- 我原来如此
- 在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b;
- js获取文本框输入焦点
- Java中关于可变长参数的那些事[参数中使用省略号的情况]
- TCP协议的学习和应用(在实际工程遇到的问题)
- delphi使用COM控件的时候是否需要CoInitialize
- 黑马程序员_JAVA多线程(一)