nfs挂载根文件系统-tftp下载内核运行
交叉开发环境搭建实验报告

实验报告实验题目交叉开发环境搭建姓名:学号:课程名称:所在学院:专业班级:任课教师:实验项目名称交叉开发环境搭建一、实验目的与要求:(一)、实验目的:1、熟悉嵌入式Linux交叉开发环境的搭建与使用。
(二)、实验要求:根据实验指导书的步骤进行嵌入式Linux交叉环境的搭建。
二、实验设备:华清远见试验箱,PC机,华清远见开发环境三、实验方法(原理,流程图)交叉开发环境是指先在一台通用PC上进行软件的编辑、编译与连接,然后下载到嵌入式设备中运行调试的开发过程。
通用PC成为宿主机,嵌入式设备成为目标机。
在虚拟机中编译好程序,使用tftp的方式下载内核,运行到开发板上;使用nfs方式挂载文件系统,为后续的开发做准备。
四、实验过程、步骤及内容1、配置开发环境网络虚拟机网络方式为桥接模式,此状态下虚拟机下的操作系统和主机操作系统为平级状态。
给虚拟机下的Ubuntu一个静态的IP地址。
配置虚拟机网络环境:$ sudo vim /etc/network/interfaces修改文件如下图所示,保存退出。
应用网络修改。
$ sudo /etc/init.d/networking restart如上图所示表明IP修改成功。
使用【ifconfig】命令查看修改的结果。
2、配置交叉工具链修改文件~/.bashrc,添加如下内容$ sudo gedit /etc/bash.bashrc添加下面一行代码到文件的末尾export PATH=$PATH:/usr/local/toolchain/toolchain-4.4.6/bin/ 但要注意,添加的代码要手动自己添加重启配置文件$ source /etc/bash.bashrc工具链的测试$ arm-none-linux-gnueabi-gcc -v出现如上图所示就证明交叉工具链安装好了。
3、拷贝文件将华清远见-CORTEXA9资料拷贝到Ubuntu共享目录下。
4、将共享目录中需要下载的文件拷贝到tftp目录中拷贝u-boot-fs4412.bin、uImage、exynos4412-fs4412.dtb文件到虚拟机Ubuntu 下的/tftpboot目录下。
tftp使用方法

tftp使用方法TFTP(Trivial File Transfer Protocol)是一个简单的文件传输协议,用于在网络中传输文件,是一种客户机/服务器协议。
TFTP使用UDP(User Datagram Protocol)作为传输层协议,具有比较简单的设计和较低的文件传输速度。
TFTP通常用于从一个本地主机上下载文件到远程主机上。
下面是关于TFTP使用方法的一些参考内容:1. 安装和配置TFTP服务器:- 在Linux系统上,可以通过以下命令安装TFTP服务器软件:sudo apt-get install tftpd-hpa- 在Windows系统上,可以下载和安装SolarWinds的TFTP服务器软件。
2. 启动TFTP服务器:- 在Linux系统上,启动TFTP服务器的命令为:sudo systemctl start tftpd-hpa- 在Windows系统上,双击桌面上的TFTP服务器图标即可启动。
3. 设置TFTP服务器的根目录:- 在Linux系统上,根目录通常为/var/lib/tftpboot。
可以通过修改TFTP服务器的配置文件/etc/default/tftpd-hpa来修改根目录。
- 在Windows系统上,可以通过TFTP服务器软件的设置界面来指定根目录。
4. 传输文件到TFTP服务器:- 在Linux系统上,可以使用以下命令将文件传输到TFTP服务器:tftp put [本地文件名] [远程主机IP地址]- 在Windows系统上,通过TFTP服务器软件提供的上传文件功能来传输文件到TFTP服务器。
5. 从TFTP服务器下载文件:- 在Linux系统上,可以使用以下命令从TFTP服务器下载文件:tftp get [远程文件名] [远程主机IP地址]- 在Windows系统上,通过TFTP服务器软件提供的下载文件功能从TFTP服务器下载文件。
6. 测试TFTP服务器连接:- 在Linux系统上,可以使用以下命令测试与TFTP服务器的连接是否正常:tftp [远程主机IP地址]- 在Windows系统上,可以使用TFTP客户端软件来测试与TFTP服务器的连接。
君正 Linux 2.4 开发手册

君正Linux 2.4开发手册Revision: 1.2Date: Jan. 2008君正Linux 2.4开发手册Copyright © Ingenic Semiconductor Co. Ltd 2006. All rights reserved.Release historyDate Revision ChangeJan. 2008 1.2 Add description to section overviewNov. 2007 1.1 Modify NAND flash filesystem descriptionAdd mplayer demo descriptionAdd guide to start the TFTP and NFS serversMay. 2007 1.0 First releaseDisclaimerThis documentation is provided for use with Ingenic products. No license to Ingenic property rights is granted. Ingenic assumes no liability, provides no warranty either expressed or implied relating to the usage, or intellectual property right infringement except as provided for by Ingenic Terms and Conditions of Sale.Ingenic products are not designed for and should not be used in any medical or life sustaining or supporting equipment.All information in this document should be treated as preliminary. Ingenic may make changes to this document without notice. Anyone relying on this documentation should contact Ingenic for the current documentation and errata.北京君正集成电路有限公司北京市海淀区上地东路1号盈创动力E座801CTel: 86-10-58851002Fax: 86-10-58851005Http: //内容内容1概述 (1)2开发环境 (3)2.1安装交叉编译工具链 (3)2.2启动TFTP和NFS服务 (4)3Linux内核和驱动 (5)3.1Linux的目录结构 (5)3.2配置和编译Linux (6)3.3Linux配置选项 (7)4Linux根文件系统 (13)4.1根文件系统的内容 (13)4.2制作根文件系统 (13)4.2.1配置和编译BusyBox (13)5测试Linux内核和驱动 (16)5.1运行Linux内核 (16)5.2测试Linux设备驱动 (16)6NAND Flash文件系统 (19)6.1NAND Flash文件系统类型 (19)6.2MTD分区 (19)6.3创建NAND Flash文件系统 (20)7Linux电源管理 (22)7.1动态电源管理 (22)7.2系统睡眠和唤醒 (24)概述1 概述本文将向读者详细介绍基于君正处理器平台进行Linux 2.4内核开发的过程和方法,引导开发人员快速进行Linux开发,包括建立交叉编译环境、引导程序和Linux内核的配置和编译、设备驱动的测试和使用、根文件系统等等。
2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)

凌FL2440超详细U-BOOT作业(UBoot介绍+H-jtag使用+Uboot使用)Bootloader是高端嵌入式系统开发不可或缺的部分。
它是在操作系统内核启动之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
现在主流的bootloader有U-BOOT、vivi、Eboot等。
本次作业先做Uboot的烧写吧。
希望通过这个帖子,能让更多的初学者朋友了解一些UBoot的知识,也希望高手朋友对我的不足予以斧正。
首先说一下什么是Uboot:U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
从FAD SROM、8xxROM、PPCBOOT逐步发展演化而来。
其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
但是U-Boot不仅仅支持嵌入式Linu x系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。
其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。
这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。
这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
jffs2文件系统启动说明

一. 主机配置
建议Redhat 9 及以后版本
1. 配置TFTP服务器
$ /sbin/chkconfig tftp on
$ /sbin/service xinetd reload
创建TFTP主目录
三. 下载Linux
1. Tftp方式下载,将板子连上网络并通过和主机通信测试
2. 通过tftp将内核和根文件系统下载到SDRM在Redboot命令行下运行
$ load -r -v -b 0x1000000 jffs2.img
$ load -r -v -b 0x80000 zImage
2. 在linux下运行./download redboot.bin,将会出现“"Waiting for the board to wake up..."
3. 打开板电源,开始下载,结束会显示“Successfully programmed 'redboot.bin'”
4. 关闭电源。重新配置跳线(JP14为2-3),启动模式为Flash启动
$
启动时间设置,如果在该时间内用户没有按Ctrl+c则运行启动脚本,如设为3秒
$ Boot script timeout (1000ms resolution): 3
其他启动配置根据自己情况设置,最后按y保存
$ Update RedBoot non-volatile configuration - continue (y/n)?y 来自$ fconfig -i
出现Run script at boot:后输入true
启动脚本输入,在>>提示符下输入一行命令,回车再输下一行,脚本结束空行按回车。启动脚本如下
Linux设备树语法详解

Linux设备树语法详解Linux内核从3.x开始引⼊设备树的概念,⽤于实现驱动代码与设备信息相分离。
在设备树出现以前,所有关于设备的具体信息都要写在驱动⾥,⼀旦外围设备变化,驱动代码就要重写。
引⼊了设备树之后,驱动代码只负责处理驱动的逻辑,⽽关于设备的具体信息存放到设备树⽂件中,这样,如果只是硬件接⼝信息的变化⽽没有驱动逻辑的变化,驱动开发者只需要修改设备树⽂件信息,不需要改写驱动代码。
⽐如在ARM Linux内,⼀个.dts(device tree source)⽂件对应⼀个ARM的machine,⼀般放置在内核的"arch/arm/boot/dts/"⽬录内,⽐如exynos4412参考板的板级设备树⽂件就是"arch/arm/boot/dts/exynos4412-origen.dts"。
这个⽂件可以通过$make dtbs命令编译成⼆进制的.dtb⽂件供内核驱动使⽤。
基于同样的软件分层设计的思想,由于⼀个SoC可能对应多个machine,如果每个machine的设备树都写成⼀个完全独⽴的.dts⽂件,那么势必相当⼀些.dts⽂件有重复的部分,为了解决这个问题,Linux设备树⽬录把⼀个SoC公⽤的部分或者多个machine共同的部分提炼为相应的.dtsi⽂件。
这样每个.dts就只有⾃⼰差异的部分,公有的部分只需要"include"相应的.dtsi⽂件, 这样就是整个设备树的管理更加有序。
我这⾥⽤`Linux4.8.5源码⾃带的dm9000⽹卡为例来分析设备树的使⽤和移植。
这个⽹卡的设备树节点信息在"Documentation/devicetree/bindings/net/davicom-dm9000.txt"有详细说明,其⽹卡驱动源码是"drivers/net/ethernet/davicom/dm9000.c"。
linux的tftp下载命令

linux的tftp下载命令linux下tftp可以用来传输文件,下面由店铺为大家整理了linux 的tftp下载命令的相关知识,希望对大家有帮助!linux的tftp下载命令命令:1>从PC机传文件至板卡tftp -g -r filename 192.110.111.111 (pc地址)2>从板卡取文件至PC机tftp -p -r filename 192.110.111.100 (板卡地址)注:1>为了防止错误,在执行命令前使用ping命令确定网络连接正常ping 192.110.111.111(host)2>确定板卡上的tpc-receiver程序打开3>容易用错命令,命令用错后有可能源文件被覆盖,所以即使改正命令也会出错。
因此要检查源文件。
-g 表示下载文件-p 表示上传文件-r 表示远程主机的文件-l 表示本地文件例如我们用的 -g -r选项,表示从地址192.110.111.111的远程主机上下载名为filename的文件至当前目录。
补充内容:linux的tftp命令相关知识1、应用程序如何移植到目录板?1)复制到介质,如U盘2)通过网络(tftp)传输文件到开发板(文件较小,推荐使用)3)置于根文件系统目录下制作文件系统镜像,再烧进开发板(文件很大,可以使用)4)通过NFS(网络文件系统) 直接运行2、如何实现tftp传输?要实现tftp就都要先安装tftp软件,一般是pc作为服务器,目标板从服务器上取文件。
服务器可为windows,也可以为ubuntu。
在windows下打开tftp32,设置ip及共享目录,就可以用作服务器了。
在ubuntu下要安装tftp,设置目录,即可。
在目标机中使用命令:PMON>devcp tftp://192.168.x.xxx/vmlinux /dev/mtd0下载内核文件到板子中。
3、如何通过tftp下应用程序?利用目标板上传资料到主机,命令如下:tftp -p -l filename serverip(这里filename是目标板文件的完整路径)目标板从主机下载资料:tftp -g -r filename serverip(这里filename是主机上tftp默认目录的文件名)4、如何通过tftp更新boot、内核1)连接网络,设置ip>set ifconfig syn0:192.168.0.1222)用tftp下载PMON参数设置:set al /dev/mtd0Cramfs 设置set append "root=/dev/mtdblock1 console=ttyS3,115200 noinitrd init=/linuxrc rootfstype=cramfs"set append "$append video=xxxfb:320x480-16@60 fbcon=rotate:1 consoleblank=0"PMON烧写命令load -r -f bfc00000 tftp://192.168.100.133/gzrom.bin-1c-V1.3内核烧写命令devcp tftp://192.168.100.133/vmlinux-1c-V1.4 /dev/mtd0文件系统烧写命令mtd_erase /dev/mtd1Cramfsdevcp tftp://192.168.100.133/nfsboot-gcc-cramfs.img /dev/mtd15、应用程序#include哪里的文件?默认的包含路途是/usr/include;在这个目录下的文件直接加:#include<string.h>如果你的头文件在这几个目录的子目录中,那就必须设定sys/ 这个目录前缀(文件的所在子目录),不然 gcc 不会“聪明”的去子目录里查找(这么查找是会出乱子的)。
在龙芯1B开发板和龙芯1B核心板开发环境切换时的注意事项

1. 电源 (3)2. 串口 (3)2.1. PMON参数 (3)2.2. 根文件系统 (4)版本更新日期更新内容V1.0 2013,12,20 创建1.电源首先是电源电压问题。
广州龙芯1B开发板使用的是5V外部电源,基于广州龙芯1B 核心板相关产品可能是使用12V的外部电源(因为广州龙芯的核心板配套底板是12V外部电源)。
2.串口这里主要说的是打印启动信息和调试信息用的串口。
龙芯1B开发板使用的是ttyS2,而核心板使用的是ttyS5。
2.1. PMON参数在PMON下设置启动参数,其中一个重要参数就是串口号。
比如:龙芯1B核心板就应该设置为ttyS5,我最开始按照龙芯1B开发板把它设置为ttyS2后,linux启动起来后,就没打印了。
如下io scheduler cfq registered (default)Use default resolution 800x600-16@75VESA:800x600-0@75Console: switching to colour frame buffer device 100x37Serial: 8250/16550 driver, 6 ports, IRQ sharing disabledserial8250.0: ttyS0 at MMIO 0x1fe40000 (irq = 2) is a 16550Aserial8250.0: ttyS1 at MMIO 0x1fe44000 (irq = 3) is a 16550Aserial8250.0: ttyS2 at MMIO 0x1fe48000 (irq = 4) is a 16550Aconsole [ttyS2] enabled, bootconsole disabled设置正确后,应该可以通过串口直接进入shell命令行。
而对应此处的打印为AT070TN93:800x480-16@60Console: switching to colour frame buffer device 100x30Serial: 8250/16550 driver, 6 ports, IRQ sharing disabledserial8250.0: ttyS0 at MMIO 0x1fe40000 (irq = 2) is a 16550Aserial8250.0: ttyS1 at MMIO 0x1fe44000 (irq = 3) is a 16550Aserial8250.0: ttyS2 at MMIO 0x1fe48000 (irq = 4) is a 16550Aserial8250.0: ttyS3 at MMIO 0x1fe4c000 (irq = 5) is a 16550Aserial8250.0: ttyS4 at MMIO 0x1fe6c000 (irq = 29) is a 16550Aserial8250.0: ttyS5 at MMIO 0x1fe7c000 (irq = 30) is a 16550Aconsole [ttyS5] enabled, bootconsole disabledconsole [ttyS5] enabled, bootconsole disabledloop: module loadedNAND device: Manufacturer ID: 0xec, Chip ID: 0xf1 (Samsung NAND 128MiB 3,3V 8-bit)lxy: erasesize= 0x20000, wirtesize= 0x800, oobsize= 0x40 !Scanning device for bad blocksBad eraseblock 192 at 0x000001800000Bad eraseblock 821 at 0x0000066a0000Creating 3 MTD partitions on "mtd0":0x000000000000-0x000000e00000 : "kernel"0x000000e00000-0x000007200000 : "os"比如我(主机ip:192.168.0.156,开发板ip:192.168.0.153)通过tftp下载内核,通过nfs挂载根文件系统的pmon参数为PMON> set al tftp://192.168.0.156/vmlinuzPMON> set append 'root=/dev/nfs rw nfsroot=192.168.0.156:/nfsramdisk/LS1Brootfs noinitrd init=/linuxrc console=ttyS5,115200 ip=192.168.0.153:::::eth0:off'当然如果为了安全性,不想让产品在启动后通过串口打印信息或者进入shell,可以采用这种方式,个人认为这种方式的安全性还是比较高。
嵌入式ARM期末考试试卷及复习题

一、填空题(请将答案填入题后括号中):共10小题,每小题2分,满分20分。
1、一般而言,嵌入式系统的构架可以分为4个部分:分别是(处理器)、存储器、输入/输出和软件,一般软件亦分为操作系统相关和(应用软件)两个主要部分。
2、根据嵌入式系统使用的微处理器,可以将嵌入式系统分为嵌入式微控制器,(嵌入式微处理器),(嵌入式DSP 处理器)以及片上系统。
3、操作系统是联接硬件与应用程序的系统程序,其基本功能有(进程管理)、进程间通信、(内存管理)、I/O 资源管理。
4、从嵌入式操作系统特点可以将嵌入式操作系统分为(实时操作系统)和分时操作系统,其中实时系统亦可分为(硬实时操作系统)和软实时系统。
5、内核负责管理各个任务,或者为每个任务分配CPU时间,并且负责任务之间的(通信),内核的基本服务是(任务切换)。
6、嵌入式开发一般采用(宿主机/目标机)方式,其中宿主机一般是指(PC机/台式机)。
7、哈佛体系结构数据空间和地址空间(分开),ARM7TDMI采用(冯诺依曼体系)的内核架构,ARM920T采用(哈佛)的内核架构。
8. ARM7TDMI采用(3 )级流水线结构,ARM920TDMI采用(5)级流水线。
9 .按操作系统的分类可知,Dos操作系统属于顺序执行操作系统,Unix操作系统属于(分时)操作系统,VxWorks 属于(实时嵌入式)操作系统。
10、ARM7TDMI中,T表示支持16位Thumb指令集,D表示(在片可调试),M表示内嵌乘法器Multiplier,I表示(嵌入式ICE ),支持在线断点和调试。
二、选择题(请将答案填入题后括号中):共10小题,每小题2分,满分20分。
1、要使CPU能够正常工作,下列哪个条件不是处理器必须满足的。
( D )(A) 处理器的编译器能够产生可重入代码(B)在程序中可以找开或者关闭中断(C) 处理器支持中断,并且能产生定时中断(D)有大量的存储空间2、下面哪种操作系统最方便移植到嵌入式设备中。
嵌入式实验报告三tftp、nfs服务器搭建与测试实验

实验三tftp、nfs服务器搭建与测试实验的实验报告一实验目的1、了解和掌握tftp、nfs服务器搭建;2、熟悉和掌握tftp、nfs服务器测试。
二实验环境预装redhat9.0(内核版本2.4.x)的pc机一台,CVT-A8嵌入式实验箱一台(已构建嵌入式Linux系统),以太网线一根,交叉编译工具链。
三实验设备1.硬件:CVT-A8系列实验箱,PC电脑(带串口);2.软件:PC机操作系统。
四实验步骤linux联网:安装相关软件包:建立配置文件:建立tftp文件目录,更改权限:4、在/tftpboot目录下,用vi 或者touch命令新建一些自己的文件。
tftp下载测试举例:举例一:电脑系统本地通过tftp下载文件。
①在电脑的Linux系统命令窗口中用cd命令切换到其他目录中②输入命令tftp<linux系统IP>表示从哪个机器下载,此处中的IP地址为本机Linux的IP地址③输入get <文件名>表示从PC的/tftpboot目录中下载名字为<文件名>的文件(文件必须事先存在)④quit 表示结束下载如下图举例所示,下载的是ip为192.168.1.110这个Linux系统/tftpboot目录下的uImage这个文件。
举例二:把文件下载到开发板中(需要保证电脑和开发板用网线连接起来)①再超级终端控制的开发板界面中,输入tftp–g –r <filename><IP>其中finename为PC中Linux的/tftpboot目录下的某个文件的文件名IP为PC 中Linux系统的IP地址②操作完成后,用ls命令查看是否把文件下载到开发板中。
如下图实例所示:练习结果截图:四实验思考1.对tftp服务器、NFS服务器的体会,它是嵌入式系统开发环境的基本部分。
理解各自的的含义,TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
烧写内核代码及tftp及bootfs的挂载

Fedora14下烧写uboot到sd卡,烧写内核代码到nangflash ,挂载ntfs文件系统到s5pv210前几天在老师的指导下完成了s5pv210的u-boot及内核代码的烧写和挂载netfs文件系统,今天抽时间再总结一下,主要是对中间出现的问题及解决方案。
希望对有需要的人有所帮助。
环境:fedora 14 s5pv210开发板vwarm9.0需要准备的:uImage 、tiny210v2-uboot.bin 、rootfs_qtopia_qt4.img一.首先先把u-boot 烧到sd卡里面代码:dd iflag= dsync oflag=dsync if= tiny210v2-uboot.bin of=/dev/sdb seek=1说明:这一步比较简单,没什么问题烧写完毕后,开发板上电,以root权限进入minicom进入u-boot 界面。
二、准备烧写内核代码1、配置TFTP服务器为了安装TFTp服务器及客户端,需要连接网络,为方便起见,本人建议,开启虚拟机之前首先调节网络模式为NET模式,这样主机只要能连上网,虚拟机就能上网,可以通过YUN 工具进行TFTP服务器的安装代码:#yum install tftp-server //安装TFTP服务器# yum install –y tftp //安装TFTP客户端–y 参数表示同意下载配置TFTP环境创建共享目录:#mkdir /var/lib/tftpboot打开修改配置文件:#vim /etc/xinetd.d/tftp修改如下:server-args = -s /var/lib/tftpboot –c启动TFTP服务器:#service xinetd restart测试是否启动TFTP服务器:# netstat –a | grep tftp如果没有打开:#chkconfig tftp on# /etc/init.d /xinetd restart关闭防火墙:Setup 进入设置(这里不在多说)注意:接下来虚拟机下必须设置网络模式为桥接模式(烧写uImage时候的网络模式),我曾经试过在NET模式下和HOST-ONLY模式都没有成功。
最小Linux文件系统层nfs的实现

最小Linux文件系统层nfs共享文件夹的实现本章导读前面介绍过tftp传输文件和nfs网络文件系统,这里给大家介绍一下nfs共享网络文件夹。
通过nfs共享网络文件夹也可以很方便的调试程序。
学习本章内容需要先掌握同一网段的概念,同一网段在linux系统编程中有介绍。
搭建NFS服务器实现NFS,需要一个主机作为NFS服务器,选择虚拟机Ubuntu作为主机。
首先需要在虚拟机的Ubuntu上安装Ubuntu NFS服务,这是一个软件包,可以使用apt命令下载,(下载前请确认你的虚拟机可以上网)。
首先登录到虚拟机上,使用快捷键Ctrl+Alt+t组合按键打开终端如下图。
输入“su root”命令切换到root用户,如下图。
2输入“apt-get install nfs-kernel-server”命令安装Ubuntu NFS服务,如下图。
在安装的过程中会提示“是否继续安装”的信息,如下图。
3输入“Y”,如下图。
然后按回车,会继续安装,如下图。
4安装完成,如下图。
接下来需要配置/etc/exports,使用vi 命令打开/etc/exports,如下图。
5在/etc/export 文件的最后一行添加:/home/topeet/linux/*(rw,sync,no_root_squash),如下图。
下面讲解一下上面输入的内容都代表什么意思:/home/topeet/linux:是要共享的目录;*:代表允许所有的网络段访问;rw:是可读写权限;6sync:是资料同步写入内存和硬盘;no_root_squash:是Ubuntu nfs 客户端分享目录使用者的权限,如果客户端使用的是root 用户,那么对于该共享目录而言,该客户端就具有root 权限;其他Ubuntu nfs 常用的参数有:ro:只读访问async :nfs 在写入数据前可以相应请求secure:nfs 通过以下的安全TCP/IP 端口发送insecure:nfs 通过1024以上的端口发送wdelay:如果多个用户要写入NFS 目录,则归组(默认)no_wdelay:如果多个用户要写入NFS 目录,则立即写入,当使用async 时,无需此设置hide:在nfs 共享目录中不共享妻子目录no_hide:共享nfs 目录的子目录subtree_check:如果共享/usr/bin 之类的子目录时,强制nfs 检查父目录的权限(默认)no_subtree_check:和上面相对,不检查父目录权限all_squash:共享文件的UID 和GID 映射匿名用户anonymous,适合公用目录no_all_squash:保留共享文件的UID 和GID(默认)root_squash root:用户的所有请求映射成如anonymous 用户一样的权限(默认)no_root_squash root:用户具有根目录的完全管理访问权限anonuid=xxx:指定nfs 服务器/etc/passwd 文件中匿名用户多的UIDanongid=xxx:指定nfs 服务器/etc/passwd 文件中匿名用户的GID接下来重启portmap 服务,输入/etc/init.d/portmap restart 命令,如下图。
Linux通过nfs挂载根文件系统失败:VFS:Unabletomountrootfsvi。。。

Linux通过 nfs挂载根文件系统失败: VFS: Unabletomountrootfsvi。 。 。
在网上搜索各种资料均未解决。
最终发现原因是我的Ubuntu版本太新了,不兼容导致。
终于在大神的博客里找到解决方法:
查找资料发现从Ubuntu17.04开始,nfs默认只支持协议3和协议4,而kernel中默认支持协议2,所以才会出现挂载失败的情况,现有两种方 法可以解决该问题:
1. 设置Ubuntu18.04系统中的nfs服务支持协议2,修改nfs配置文件 /etc/default/nfs-kernel-server,在文件末尾加入一句:RPCNFSDOPTS="-nfs-version 2,3,4 --debug --syslog"。
2. 如果kernel版本较高支持nfs协议3的话,可以在Uboot传到Kernel的bootargs参数中加入'nfsvers=3',使kernel使用nfБайду номын сангаас协议3。
基于三星S5PV210上的LinuxKernel的移植

5.2 Linux系统启动流程分析Ubuntu的启动过程主要包括四个步骤:BIOS自检:识别主机上可以启动的设备,一次只能从一个设备上启动,如果一个启动设备失效,就可以使用下一个候选启动设备。
通常是硬盘启动。
启动驻留在硬盘主引导记录MBR中的引导程序Grub或lilo。
Grub/lilo引导启动:如果主机中安装多个操作系统,用户通过Grub或lilo,引导启动Ubuntu Linux系统。
此时操作系统还没有装入内存,引导程序只是将控制权转移给内核。
装载Linux内核:在最初的引导过程完成之后,引导程序开始加载Linux内核,Ubuntu 将Linux内核置于/boot目录下。
系统初始化:内核的初始化阶段将启动系统进程和脚本,init进程是系统开始的第一个工作,它是其他所有进程的父进程,并一直处于运行状态。
使用top命令查看进程,可以发现init进程id号永远是第一个。
init进程读取初始化脚本,完成系统相关的管理任务。
图 5-1 linux系统启动流程6 基于S5PV210的linux内核移植6.1 交叉开发环境的搭建在自己的linux中建立交叉开发环境:安装交叉编译工具链:a 解压“Linux-Android\toolchain”目录下的“arm-none-eabi-4.2.2.tgz”到根“/usr/local”目录下,在“/usr/local”目录下会生成“arm”目录:执行命令:#tar zxvf arm-none-eabi-4.2.2.tgzb 修改环境变量“PATH”:$ sudo vim /etc/environment将路径(下面的红色字体,不加引号)添加到PATH变量的最后面,省略号代表原来PATH的值:PATH=……:/usr/local/arm/4.2.2-eabi/usr/bin”c 保存退出后执行:$ source /etc/ environment这样修改的环境变量会立即生效,于是我们就得到交叉编译工具:6.2 Boot Loader移植Bootloader引导程序在操作系统内核运行之前运行一个程序,一般应被写入为0x00开始的物理地址。
关于搭建fs2410开发环境及挂载文件系统详解

关于搭建2410开发环境详解实验材料:A.U-boot(22.6.22/bin文件/179k)B.linux 系统下C.2.6.35 的zImage镜像文件(2.1M左右)D.2.6.35的rootfs根文件(解压后15M)此实验共分为三步:一.搭建nfs文件共享环境二.搭建tftp网络传输环境三.测试开发环境介绍:在2.6.35内核下,搭建nfs文件共享环境是为了共享rootfs下的系统根目录,也就是说你在自己主机的根目录/source/rootfs下就可以直接挂载你自己的驱动到这个rootfs目录里。
而搭建tftp的用途是将你的内核镜像文件zImage文件通过网线传输到nand flash里的33000000(2.6.35内核)地址处解压。
解压后通过uboot设置的nfs路径找到在自己主机上挂载的共享文件:根目录下/source/rootfs/目录,然后自己可以通过主机进入此目录下通过在控制台上输入:sudo mknod /dev/console c 5 1来挂载自己的第一个驱动节点,就是我们的开发板系统的控制台。
具体过程:一.搭建nfs环境:参考《华清远见嵌入式实验手册第一期》第19页:注意:2.配置nfs资源在控制台的根目录路径下输入:sudo gedit /etc/exports(如果没有此文件就自己创建一个)此文件具体见书设置要共享的资源的路径为根目录下/source/rootfs *(rw,sync,no_root,squash)。
此时如果在根目录下没有/source/rootfs就要自己创建,注意这里的rootfs就是我们的2.6.35的根文件系统。
进入source下使用sudo chmod 777 roofs就可以使roofs可以被任何权限读写了。
同时使用上指令来升级source文件的权限,便于其他ip访问。
最后先不要挂载文件。
二.Tftp服务器的配置参考《华清远见嵌入式实验手册第一期》第17页:注意安装好软件后,若无tftpd-hpa文件时要自己创建并升级其权限为777,此文件内容按照书上所示,其中TFTP_DIRECTORY=”/tftpboot”tftpboot文件目录要自己在根目录下自己创建,并升级其权限777,将我们的2.6.35的zImage镜像文件放在tftoboot目录下。
读出nand flash中的内核镜像文件

概述:现在有一个Arm开发板,bootloader、内核、文件系统都在nand flash上,要把这三个部分读出来。
环境:PC上系统为linux系统,任一发行版的OS都可PC上已经安装了arm的交叉编译工具,要用到arm-linux-gccPC与开发板通过串口线、网线连接起来;串口作为开发板的控制台,网线在两者之间传输文件一、文件系统:文件系统的读取方法比较简单。
将板子启动起来,在板子上使用NFS挂载PC上的一个目录。
然后把板子根目录下的所有文件和目录都复制到挂载目录中,即可完成文件系统的读取。
二、内核:内核和bootloader是直接烧写在nand flash上的,他们两个不依赖于文件系统,所以是看不到内核和bootloader这两个文件。
这两个的读取原理一致,所以在此只讲内核(即kernel)的读取方法。
Step 1:启动开发板,观察控制台输出,获取板子在启动过程中的输出信息,主要查看内核对nand flash分区的信息,我信息如下:0x00000000-0x00040000 : "Bootloader"0x00040000-0x00400000 : "Kernel"0x00400000-0x05400000 : "Rootfs"0x05400000-0x10000000 : "File System"从上面信息得知,内核(kernel)在nand flash的第1分区(从0分区开始计)上,且这一分区在nand flash上的地址范围是0x40000 – 0x400000Step 2:启动好后,在控制台上输入ls –l /dev/mt*[root@urbetter /]# ls -l /dev/mt*crw-rw---- 1 root root 90, 0 Mar 13 2000 /dev/mtd0crw-rw---- 1 root root 90, 1 Mar 13 2000 /dev/mtd0rocrw-rw---- 1 root root 90, 2 Mar 13 2000 /dev/mtd1crw-rw---- 1 root root 90, 3 Mar 13 2000 /dev/mtd1rocrw-rw---- 1 root root 90, 4 Mar 13 2000 /dev/mtd2crw-rw---- 1 root root 90, 5 Mar 13 2000 /dev/mtd2rocrw-rw---- 1 root root 90, 6 Mar 13 2000 /dev/mtd3crw-rw---- 1 root root 90, 7 Mar 13 2000 /dev/mtd3robrw-rw---- 1 root root 31, 0 Mar 13 2000 /dev/mtdblock0brw-rw---- 1 root root 31, 1 Mar 13 2000 /dev/mtdblock1brw-rw---- 1 root root 31, 2 Mar 13 2000 /dev/mtdblock2brw-rw---- 1 root root 31, 3 Mar 13 2000 /dev/mtdblock3从上面信息看到kernel所在的磁盘分区在linux系统下对应的设备文件是/dev/mtdblock1Step 3:写一个读取磁盘的程序,将kernel从nand flash的对应分区中读出来,我写的代码如下:文件名read_kernel.c#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <fcntl.h>#define DEV "/dev/mtdblock1"int main(){int fdr = open(DEV, O_RDONL Y);if(fdr == -1){perror("open dev");return -1;}int fdw = open("image", O_WRONL Y | O_CREAT);if(fdw == -1){perror("open file");return -2;}char buf[0x3c0000] = {};int cnt = read(fdr, buf, 0x3c0000);if(cnt < 0){perror("read");return -3;}if(write(fdw, buf, cnt) < 0){perror("write");return -4;}close(fdr);close(fdw);return 0;}Setp 4:编译arm-linux-gcc read_kernel.c –o read_kernelstep 5:将read_kernel复制到开发板上cp read_kernel NFS目录/ 将程序拷到PC上可NFS挂载的目录mount –t nfs –o nolock PCIP:/NFS目录/mnt 将PC上的NFS目录挂载到/mnt目录step 6:在开发板上运行read_kernel,生成imagecd /mnt./read_kernel会在mnt目录下生成image文件,这个文件就是我们要的内核镜像文件Setp 7:测试image是否可用在PC上把image复制到tftp目录下,并把image名字改成正确的名字,比如我的板子的bootloader的bootcmd指定的kernel文件名为uImage启动开发板并进入u-boot,将bootcmd改为用tftp下载内核,系统能正常启动,测试成功。
使用uboot去挂载根文件系统

1、根文件系统的制作1)创建根文件系统主目录:mkdir rootfs2)创建根文件系统的子目录cd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录mkdir usr/bin usr/lib usr/sbin lib/modules4)创建设备文件内核在引导时设备节点console,null必须存在cd dev/注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1mknod -m 666 null c 1 3c:表明类型为字符设备第一个数字(5,1):主设备号第二个数字(1,3):次设备号这两个设备文件设备号是固定的5)安装etcetc目录主要是一些启动时的脚本文件一般不需要修改tar etc.tar.gz –C /xxx/rootfs这个命令可能不给用改为:tar xvzf etc.tar.gz –C /xxx/rootfs6)编译内核模块内核模块保存在lib下面的module下配置内核:*直接编译到zimage m不链接到zimage而是编译成模块到.o就停住进入Linux内核目录(linux-2.6.32.2)make modules ARCH=arm CROSS_COMPILE=arm-linux-添加了ARCH=arm表示现在编译的是arm架构的内核CROSS_COMPILE=arm-linux-表示使用交叉编译工具链安装内核模块到根文件系统:make modules_install ARCH=armINSTALL_MOD_PATH=/xxx/rootfs7)配置busybox因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。
Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。
tftp,nfs

RedHat Enterprise Linux 5 安装TFTP服务器和NFS服务器Abstract在嵌入式开发中有宿主机和目标机之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台。
TFTP服务器作为工作于宿主机的软件,主要提供对目标机的主要映像文件的下载工作。
Solution一.TFTP服务器的安装利用以下命令就可以看到TFTP服务器已启动,则不用安装[root@localhost Server]# netstat -a |grep tftpudp 0 0 *:tftp *:*若没有安装,在Redhat Enterprise Linux 5的安装光盘中有RPM安装包,挂在光盘后进入到文件夹,找到相应的安装包。
[root@localhost user]# cd /media/[root@localhost media]# lsRHEL_5.1 i386 DVD[root@localhost media]# cd RHEL_5.1\ i386\ DVD/[root@localhost RHEL_5.1 i386 DVD]# ls[root@localhost RHEL_5.1 i386 DVD]# cd Server/[root@localhost Server]# ls tftp*tftp-0.42-3.1.i386.rpm tftp-server-0.42-3.1.i386.rpm执行安装命令[root@localhost Server]# rpm -ivh tftp-server-0.42-3.1.i386.rpm warning: tftp-server-0.42-3.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186error: Failed dependencies:xinetd is needed by tftp-server-0.42-3.1.i386提示需要安装xinetd,找到安装包并安装[root@localhost Server]# ls xinet*xinetd-2.3.14-10.el5.i386.rpm[root@localhost Server]# rpm -ivh xinetd-2.3.14-10.el5.i386.rpm warning: xinetd-2.3.14-10.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186Preparing... ######################################### ## [100%]1:xinetd ######################################### ## [100%]再执行安装TFTP命令[root@localhost Server]# rpm -ivh tftp-server-0.42-3.1.i386.rpm warning: tftp-server-0.42-3.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186Preparing... ######################################### ## [100%]1:tftp-server ######################################### ## [100%]建立tftp的主工作目录[root@localhost Server]# mkdir /tftpboot修改配置文件[root@localhost Server]# vi /etc/xinetd.d/tftp主要注意修改的两个地方:# default: off# description: The tftp server serves files using the trivial file transfer \# protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \# and to start the installation process for some operating systems. service tftp{socket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /tftpbootdisable = noper_source = 11cps = 100 2flags = IPv4}重启服务[root@localhost Server]# /etc/init.d/xinetd restartStopping xinetd: [FAILED] Starting xinetd: [ OK ]查看是否启动[root@localhost Server]# netstat -a |grep tftpudp 0 0 *:tftp *:*二.NFS的安装NFS(Network File System,网络文件系统)是一种将远程主机上的分区(目录)经网络挂在到本地的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操作,类似于windows的共享目录。
嵌入式linux系统移植试题资料讲解

嵌入式l i n u x系统移植试题嵌入式Linux系统移植试题【时间:60分钟】姓名:()一、单项选择题【每题2分,共70分】1.嵌入式linux系统移植不包括( D )[A] bootloader[B] linux内核 [C] 根文件系统 [D] 应用程序2.下列选项中符合gcc的编译流程的是( A)[A] 预处理->编译->汇编->连接[B] 预处理->汇编->编译->连接 [C] 编译->预处理->汇编->连接 [D] 预处理->连接->汇编->编译3.下列二进制工具哪个是丢弃目标文件的全部或者特定符号,减少文件体积的( D)[A] size[B] as [C] nm [D] strip4.下列二进制工具哪个是用来反汇编的( B )[A] nm[B] objdump [C] objcopy [D] string5.下列二进制工具哪个是用来进行目标格式转换的( C)[A] nm[B] objdump [C] objcopy [D] string6.下列二进制工具哪个是用来把程序地址转换为文件名和行号的( D)[A] nm[B] objdump [C] objcopy [D] addr2line7.FS4412开发平台上,uImage被解压到什么地址( B )[A] 0x40000000 [B] 0x40008000 [C] 0x41000000 [D] 0x43e00000收集于网络,如有侵权请联系管理员删除8.编译Linux内核设备树文件使用什么命令( D )[A] make dtbi[B] make tags [C] make dtb [D] make dtbs9.linux要求bootloader在运行内核前,让系统进入何种模式( B )[A] user[B] svc [C] system10.u-boot的命令中存放自启动命令的环境变量是(D )[A] ipaddr [B] bootargs [C] bootm [D] bootcmd11.u-boot的命令中,设置环境变量的命令是(A )[A] setenv [B] printenv [C] tftp [D] bootm12.u-boot中存放内核启动参数的环境变量是( C )[A] bootcmd[B] bootdelay [C] bootargs [D] ipaddr13.在内核配置时,哪个关键词是来包含下一级Kconfig ( B )[A] menu endmenu[B] source [C] choice endchoice [D] depends on14.在内核配置时,哪个关键词是来创建一个选项菜单( D)[A] menu endmenu[B] source [C] choice endchoice [D] config15.内核配置的结果保存在哪个文件中( C )[A] Kconfig[B] Makefile [C] .config [D] System.map16.下列函数适合在内核解压后,console初始化以前使用的是( B )[A] puts[B] printascii [C] printk [D] printf17.当console初始化以后,一般最为简单的内核调试方式为( A )收集于网络,如有侵权请联系管理员删除[A] printk[B] puts [C] bdi2000 [D] kgdb18.下列哪些文件系统可以运行在eMMC上(C )[A] yaffs2[B] ios9660 [C] ext3 [D] tmpfs19.下列哪些文件系统是只读的( D )[A] ext2[B] yaffs2 [C] ext2 [D] cramfs20.下列不占用任何磁盘空间的文件系统是(D )[A] yaffs2[B] jffs2 [C ] cramfs [D] tmpfs21.u-boot使用网络需设置下面哪些环境变量(AB )[A] ipaddr[B] serverip [C ] bootcmd [D] bootargs22.通过nfs挂载根文件系统,需要设置u-boot下面哪些环境变量( ABD )[A] ipaddr[B] serverip [C ] bootcmd [D] bootargs23.u-boot下通过nfs自启动,需要设置哪些环境变量(ABCD )[A] ipaddr[B] serverip [C ] bootcmd [D] bootargs24.针对我们的目标板,u-boot下烧写命令,下面哪个是正确的( A )[A] movi write u-boot 0x41000000[B] movi write kernel 0x21000000[C] movi write dtb 0x22000000[D] movi write rootfs 0x4200000025.针对当前我们移植的项目,主机侧tftp共享目录和nfs共享目录,描述正确的是( AB )[A] tftp共享目录,存放的是供目标板下载的文件收集于网络,如有侵权请联系管理员删除[B] nfs共享目录,存放的是供目标板子系统挂载的根文件系统[C ] tftp和nfs都是提供给uboot使用的[D] tftp共享目录和nfs共享目录是不一样的,不能设置成同一目录26.查找u-boot启动代码时,需要通过哪个文件来查找它的入口函数名( C )[A] start.S[B] head.S [C ] u-boot.lds [D] vmlinux.lds27.编译内核,可以使用下面哪个命令( AB)[A] make[B] make uImage[C] make dtbs[D] make menuconfig28.配置内核,可以使用下面哪个命令( D )[A] make[B] make uImage[C] make dtbs[D] make menuconfig29.我们当前目标板,第一次配置内核时,需要使用下面哪个配置文件( A )[A] exynos_defconfig[B] .config[C] kconfig[D] make menuconfig30.Printk支持种打印级别( C )[A] 6[B] 7 [C ] 8 [D] 931.我们根文件系统的制作,使用的是哪个工具( B )[A] gcc [B] busybox [C] ld [D] ar收集于网络,如有侵权请联系管理员删除32.针对我们移植的系统,内核启动时,调用的第一个可执行程序是下面哪个(B )[A] init [B] linuxrc [C] inittab [D] bin33.针对我们当前移植的系统,根文件系统和nfs,下面描述正确的是( BCD )[A] 根文件系统就是nfs[B] 根文件系统依赖nfs进行挂载[C] 只有linux系统才会用到nfs,uboot不使用nfs[D] nfs路径是通过uboot传入的34.关于设备树,下面描述正确的是( CD )[A] linux系统,一定需要设备树[B] 设备树只有arm才能用[C] 设备树一种描述硬件的数据结构,由一系列被命名的结点和属性组成[D] 设备树有一个root结点”\”,,root结点下可以有一系列子节点,子节点一定要在root节点下35.系统移植过程中,出现了问题,我们第一步需要怎么处理(BD )[A] 在uboot烧写完成后,发现没有任何显示在putty,我们可以增加printk 进行调试。
使用uboot去挂载根文件系统(优推内容)

1、根文件系统的制作1)创建根文件系统主目录:mkdir rootfs2)创建根文件系统的子目录cd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录mkdir usr/bin usr/lib usr/sbin lib/modules4)创建设备文件内核在引导时设备节点console,null必须存在cd dev/注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1mknod -m 666 null c 1 3c:表明类型为字符设备第一个数字(5,1):主设备号第二个数字(1,3):次设备号这两个设备文件设备号是固定的5)安装etcetc目录主要是一些启动时的脚本文件一般不需要修改tar etc.tar.gz –C /xxx/rootfs这个命令可能不给用改为:tar xvzf etc.tar.gz –C /xxx/rootfs6)编译内核模块内核模块保存在lib下面的module下配置内核:*直接编译到zimage m不链接到zimage而是编译成模块到.o就停住进入Linux内核目录(linux-2.6.32.2)make modules ARCH=arm CROSS_COMPILE=arm-linux-添加了ARCH=arm表示现在编译的是arm架构的内核CROSS_COMPILE=arm-linux-表示使用交叉编译工具链安装内核模块到根文件系统:make modules_install ARCH=armINSTALL_MOD_PATH=/xxx/rootfs7)配置busybox因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。
Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Nfs、tftp联合运行调试内核及文件系统参考:[/course/6_system/linux/Linuxjs/2008831/139066.html]在烧写了u-boot之后,为了减少烧写根文件系统、调试程序之痛苦,本文档介绍如何通过tftp下载内核,nfs服务挂接根文件系统启动系统,不用每次都烧到开发板上。
一、NFS服务挂载根文件系统1、Linux服务器端NFS服务器的配置以root身份登陆Linux服务器,编辑/etc目录下的共享目录配置文件exports,指定共享目录及权限等。
执行如下命令编辑文件/etc/exports:#sudo apt-get install nfs-kernel-server#vi/etc/exports在该文件里添加如下内容:/home/lisongqing/ARM/rootfs192.168.0.*(rw,sync,no_root_squash)然后保存退出(添加的内容意思是:允许ip地址范围在192.168.0.*的计算机以读写的权限来访问/home/lisongqing/ARM/rootfs目录,/home/lisongqing/ARM/rootfs也称为服务器输出共享目录)。
括号内的参数意义描述如下:1)rw:读/写权限,只读权限的参数为ro;2)sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘;3)no_root_squash:NFS服务器共享目录用户的属性,如果用户是非root,那么对于这个共享目录来说就具有root的权限;如果用户想修改/etc/exports以修改后或添加其它共享目录,可执行命令1)#sudo exportfs-rv使/etc/exports文件生效2)接着执行如下命令,启动端口映射:#/etc/init.d/portmap start(或:#sudo service portmap start)3)最后启动NFS服务,此时NFS会激活守护进程,然后就开始监听Client端的请求:#/etc/init.d/nfs-kernel-server restart(或:#sudo service nfs-kernel-server restart)Linux服务器端NFS服务器的配置到此就已经配置好了。
二、开发板启动参数设置当在第一步启动Linux主机NFS服务后,现在就可以在超级终端u-boot控制界面修改命令行参数通过NFS启动根文件系统了。
假设Linux主机IP为192.168.0.100,NFS目录为/home/lisongqing/ARM/rootfs,就可以如下设置命令行参数后启动内核。
方式一:#set bootargs noinitrd root=/dev/nfs console=ttySAC0,115200nfsroot=192.168.0. 100:/home/lisongqing/ARM/rootfs ip=192.168.0.150:192.168.0.100:192.168.0.1:255. 255.255.0::eth0:off方式二:#set bootargs root=/dev/nfs nfsroot=192.168.0.100:/home/lisongqing/ARM/rootfs ip=192.168.0.150:192.168.0.100:192.168.0.1:255.255.255.0console=ttySAC0,115200 mem=64M方式三:#set bootargs root=/dev/nfs nfsroot=192.168.0.100:/home/lisongqing/ARM/rootfs, rsize=1500,wsize=1500ip=192.168.0.150:192.168.0.100:192.168.0.1:255.255.255.0 console=ttySAC0,115200mem=64M增加rsize和wsize参数,增加块大小(默认为1024),我猜想可以减小丢包概率;#saveenv命令参数行解释:Targetboard IP addr:192.168.0.150Host PC IP addr:192.168.0.100Gateway:192.168.0.1Nfs dir:192.168.0.100:/home/lisongqing/ARM/rootfs各命令行格式:1、root=/dev/nfs:并非真的设备,而是一个告诉内核经由网络取得根文件系统的旗标2、nfsroot参数nfsroot这个参数告诉内核以那一台机器,那个目录以及那个网络文件系统选项作为根文件系统使用,命令格式:nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]1)<server-ip>--指定网络文件系统服务端的互联网地址(IP address)。
如果没有给定此栏位,则使用由nfsaddrs变量(见下面)所决定的值。
此参数的用途之一是允许使用不同机器作为反向地址解析协议(RARP)及网络文件系统服务端。
通常你可以不管它(设为空白)。
2)<root-dir>--服务端上要作为根挂入的目录名称。
如果字串中有个‘%s’符记(token),此符记将代换为客户端互联网地址之ASCII表示法。
3)<nfs-options>--标准的网络文件系统选项,所有选项都以逗号分开。
如果没有给定此选项栏位则使用下列的预设值:port=as given by server portmap daemonrsize=1024wsize=1024timeo=7retrans=3acregmin=3acregmax=60acdirmin=30acdirmax=60flags=hard,nointr,noposix,cto,ac3、nfsaddrs参数nfsaddrs设定网络通讯所需的各种网络接口地址。
如果没有给定这个参数,则内核核会试著使用反向地址解析协议以及/或是启动协议(BOOTP)以找出这些参数。
其格式如下:nfsaddrs=<my-ip>:<serv-ip>:<gw-ip>:<netmask>:<name>:<dev>:<auto>1)<name>--客户端的名称。
如果空白,则使用客户端互联网地址之ASCII-标记法,或由启动协议接收的值;2)<dev>--要使用的网络设备名称。
如果为空白,所有设备都会用来发出反向地址解析请求,启动协议请求由最先找到的设备发出。
网络文件系统使用接收到反向地址解析协议或启动协议回应的设备。
如果你只有一个设备那你可以不管它。
3)<auto>--用以作为自动配置的方法。
如果是`rarp'或是`bootp'则使用所指示的协议;如果此值为`both'或空白,若配置核心时有打开这两种协议则都使用;`none'表示不使用自动配置,这种情况下你必须指定前述栏位中所有必要的值。
此<auto>参数可以作为nfsaddrs的参数单独使用(前面没有任何`:`字符),这种情况下会使用自动配置。
然而,此种情况不能使用`none'作为值。
三、内核配置要求添加内核对NFS的支持:1)选中networking support->networking options->IP:kernel level auloconfiguralion项2)选中file systems->network file systems->下的root file system on nfs和nfs file system support四、TFTP服务器配置tftpd-hpa是一个功能增强的TFTP服务器。
它提供了很多TFTP的增强功能,它已经被移植到大多数的现代UNIX系统。
1.sudo apt-get install tftp-hpa tftpd-hpa2.mkdir~/tftproot chmod777tftproot3.sudo vim/etc/default/tftpd-hpa原内容为:#/etc/default/tftpd-hpaTFTP_USERNAME="tftp"TFTP_DIRECTORY="/var/lib/tftpboot"TFTP_ADDRESS="0.0.0.0:69"TFTP_OPTIONS="--secure"修改为:#/etc/default/tftpd-hpaTFTP_USERNAME="tftp"#TFTP_DIRECTORY="/var/lib/tftpboot"TFTP_DIRECTORY="~/tftproot"TFTP_ADDRESS="0.0.0.0:69"#TFTP_OPTIONS="--secure"TFTP_OPTIONS="-l-c-s"4.sudo restart tftpd-hpa或者sudo service tftpd-hpa restart5.检测tftp1)>echo hello world>~/a.txt2)>echo tftp test>~/tftproot/b.txt3)>cd~4)>tftp localhost或者tftp127.0.0.15)>tftp>put a.txt6)>tftp>get b.txt7)>tftp>q五、设置启动命令bootcmd=tftp0x32000000uImage;bootm0x32000000六、启动开发板1)拷贝内核景象到~/tftproot2)拷贝文件系统到nfs目录3)开发板上电七、挂载问题及解决1、挂载根文件系统启动内核时出现错误Starting kernel...Uncompressing Linux...done,booting the kernel.Error:unrecognized/unsupported machine ID(r1=0x000003f0). Available machine support:ID(hex)NAME0000016a SMDK2440Please check your kernel config and/or bootloader.修改方法:修改bootloader和内核配置一致内核定义文件:arch/arm/tools/mach-typessmdk2440MACH_SMDK2440SMDK24401008s3c2440MACH_S3C2440S3C2440362内核配置开发板:arch/arm/mach-s3c2440/mach-smdk2440.c MACHINE_START(S3C2440,"smdk2440")Uboot定义文件:include/asm/mach-types.h#define MACH_TYPE_S3C2440182#define MACH_TYPE_SMDK24401008Uboot配置开发板:board/samsung/my2440/my2440.c中的board_init() gd->bd->bi_arch_number=MACH_TYPE_SMDK2440;方法一:MACHINE_START(S3C2440,"smdk2440")修改为MACHINE_START(SMDK2440,"smdk2440")方法二:gd->bd->bi_arch_number=MACH_TYPE_SMDK2440;修改为gd->bd->bi_arch_number=MACH_TYPE_S3C2440;2、nfs:server192.168.0.100not responding,still trying挂载文件系统时出现dm9000dm9000.0:WARNING:no IRQ resource flags set.eth0:link up,100Mbps,full-duplex,lpa0xC5E1IP-Config:Complete:device=eth0,addr=192.168.0.150,mask=255.255.255.0,gw=192.168.0.1,host=192.168.0.150,domain=,nis-domain=(none),bootserver=192.168.0.100,rootserver=192.168.0.100,rootpath=Looking up port of RPC100003/2on192.168.0.100Looking up port of RPC100005/1on192.168.0.100VFS:Mounted root(nfs filesystem)on device0:12.Freeing init memory:144K----------munt all----------------network interface解决方法:修改启动参数:setenv bootargs noinitrd root=/dev/nfs nfsroot=192.168.0.100:/home/lisongqing/ARM/rootfs,tcp,nolockip=192.168.0.150:192.168.0.100:192.168.0.1:255.255.255.0::eth0:off console=ttySAC0,115200尝试后还是不能挂载然后检查,原来“dm9000dm9000.0:WARNING:no IRQ resource flags set”,原来是网卡没启动好。