搞嵌入式的,不懂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服务器

Ubuntu下看链接:http://blog.mcuol.com/User/xiaoxiaopig/article/37324_1.htm

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查看导出的文件。

nfsd linux是什么进程,如何从NFS启动Linux及原理相关推荐

  1. Linux两个进程交换信息,如何在Linux中的进程之间交换二进制数据

    我需要创建一个可以进行无线网络扫描的linux应用程序,将结果放入一个结构中并以某种方式将其发送到另一个将使用该数据的主应用程序.我最初的想法是在主应用程序中创建一个管道,fork并通过execl启动 ...

  2. linux如何杀死进程最快,如何在Linux系统中杀掉内存消耗最大的进程?

    作为一名博客作者,我收藏了很多博客.网站和论坛用来寻找 Linux 和 Unix 相关的内容.有时候,我在浏览器中开启了非常多的标签页,导致操作系统会无响应好几分钟.我不能移动我的鼠标,也不能杀掉一个 ...

  3. Linux下结束进程的几种命令,linux下进程命令

    1. ps查看进程:ps -ef|grep ljj 查看ljj用户的所有进程 2. ps 提供了很多的选项参数,常用的有以下几个:l 长格式输出: u 按用户名和启动时间的顺序来显示进程: j 用任务 ...

  4. 怎么设置uboot从u盘启动linux,RT5350使用uboot从U盘启动linux顺利

    RT5350使用uboot从U盘启动linux成功 1.在uboot需要做的是: ①usb reset ②fatload usb 0:1 0x80c00000 root_uImage ③bootm 0 ...

  5. 怎么设置uboot从u盘启动linux,rt5350使用uboot从u盘启动linux成功含从u盘加载镜像与rootfs...

    <rt5350使用uboot从u盘启动linux成功含从u盘加载镜像与rootfs>由会员分享,可在线阅读,更多相关<rt5350使用uboot从u盘启动linux成功含从u盘加载镜 ...

  6. linux怎么查看进程的套接字,linux – 如何找到哪个进程绑定套接字而不是监听?...

    当我使用nc来监听端口时,它会显示出来 nc -l -vv -p 21000 retrying local 0.0.0.0:21000 : Address already in use Can't g ...

  7. linux c 获取进程p id,详解Linux获取线程的PID(TID、LWP)的几种方式

    在 Linux C/C++ 中通常是通过 pthread 库进行线程级别的操作. 在 pthread 库中有函数: pthread_t pthread_self(void); 它返回一个 pthrea ...

  8. linux c控制进程并发量,浅谈Linux环境下并发编程中C语言fork()函数的使用

    由fork创建的新进程被称为子进程(child process).fork函数被调用一次,但返回两次.子进程的返回值是0,而父进程的返回值则是新进程的进程ID.将子进程ID返回给父进程的理由是:因为一 ...

  9. linux清除僵尸进程,如何清理和避免linux系统僵尸进程

    linux 如何清理僵尸进程?一些朋友在维护服务器的时候,发现有5个nova-novncproxy的僵尸进程,面对这些僵尸进程,我们该如何应对呢?其实也不难,下面小编教大家查杀和避免僵尸进程. 012 ...

最新文章

  1. 微信有电脑客户端吗_如何在一个电脑上登录多个微信号
  2. Visual Studio Code高效开发----自动保存设置方法
  3. pandas合并groupby_Pandas-GroupBy,然后在原始表上合并
  4. Java基于springMVC的验证码案例
  5. 这个24岁北航博士刚毕业就受聘211大学副教授,他大一就保研,学术能力太牛了.........
  6. centos 7.0防火墙导致vagrant端口映射失败
  7. wps临时文件不自动删除_电脑:让 Windows 10 系统自动清理临时文件
  8. 我们是否应该保留同时多线程?
  9. 《记》rxjs分流操作符简单实现
  10. 【C】define宏展开 typedef类型重命名
  11. sps的process插件安装包_Process插件安装及其简单中介分析
  12. SPSS学习(五)独立样本t检验
  13. 新浪UC端自动登录小工具和分析UC端登录
  14. 信息短信服务器发送失败怎么办,短信发送失败如何设置
  15. 最强脱单指南:如何通过区块链应用快速找到女朋友?
  16. java面试-jvm
  17. 橡胶密封件老化原因有哪些?
  18. iptables日志记录访问记录
  19. 反汇编系列(一)——工具篇
  20. 活动图(Activity Diagram)—UML图(四)

热门文章

  1. ubuntu 安装 pip 及 pip 常用命令
  2. php代码自动生成文档-phpDocumentor
  3. MFC之图像绘制---高速绘图控件(High-speed Charting Control)应用(一)
  4. 论玩镜头的三种境界[转自无忌fruitbear]
  5. matlab 群延迟,实现最小相位群延迟的音节切分算法的一些问题
  6. 网游的跨服玩法是如何实现的?“跨域体系”架构设计思路
  7. PLSQL中Oracle设置主键自增
  8. 多种分类以及模型评估
  9. python画五环图_对Python安装及绘制五环图的初步认识,初识,pythonpython,与
  10. Mysql中如何根据.frm和.idb文件恢复表结构