搜档网
当前位置:搜档网 › Hi3518内核和文件系统烧写以及nfs挂载

Hi3518内核和文件系统烧写以及nfs挂载

Hi3518内核和文件系统烧写以及nfs挂载
Hi3518内核和文件系统烧写以及nfs挂载

Hi3518内核和文件系统烧写以及NFS挂载

修改履历

第一步编译内核和文件系统

文档说明:涉及到目录的请根据自己的实际情况进行更改,本文档仅根据笔者的测试进行举例说明。

1 安装交叉编译器

cd arm-hisiv100nptl-linux

./cross.install

说明:3518e推荐使用100nptl进行编译,arm-hisiv100nptl-linux-(使用uclibc库,uclibc 工具链支持全规格版本和小型化版本

)arm-hisiv200-linux-(glibc 库glibc 工具链只支持全规格版本),实验时没有使用hisiv200,不确定会出什么问题,不推荐使用。

2 编译步骤

cd ./linux-3.0.y

./mk3518.sh

mk3518.sh 脚本里面包含了编译linux内核所需的所有的命令,具体看mk3518.sh文件,编译成功将生成在目录arch/arm/boot/uImage文件,这个就是要烧录到板子上的

注意:大小大约为1M。大于1M也许会出问题,在实验前期都是大于1M,烧录的时候出问题。

制作rootfs文件系统,使用的是最新的squashfs只读文件系统,使用的工具为mksquashfs,目录squashfs4.2为这个工具的代码

rm ./rootfs.squashfs //仅仅为了删除之前存在的文件系统,如果没有,可不执行这一步。

./mksquashfs ./rootfsrootfs.squashfs -b 256K

cp ./rootfs.squashfs ./tftpboot //可不用命令,自己拷贝,黏贴,文件夹根据自己实际情况所定。

生成的rootfs.squashfs这个就是要烧录到板子上的文件

注意:生成的文件大约为1.5M

地址空间说明

| 256K | 1M | 1.5M |

|------------|---------------|-----------------------|

| boot | kernel | rootfs |

剩下5.25M可以由用户自由使用。

可以看出如果文件超出限制,将会出现内存不够的错误。烧写前期遇到几次提示内存不足的错误。

第二步烧写内核和文件系统

1 烧写工具安装和配置

win7下使用tftod32和secureCRT 进行烧写。

a、安装usb转串口的驱动

在~/usb驱动/WIN7驱动2/Prolific_DriverInstaller_v110.exe目录下

安装后到设备管理器中查看是否安装成功。

注:有时系统会自己安装,安装以后只要secureCRT设置正确,仍可以正常使用,如果不能正常使用,请尝试卸载系统自动安装的,使用hisi提供的驱动。

b、安装tftpd32软件,在百度上面随便搜索一个下载,安装后,打开tftpd32软件。其中当前目录指的是安装tftpd32的安装目录,点击显示目录可以看到该目录下的内容。后面要烧录的镜像文件都是放在这个目录下的,在u-boot控制命令台加载镜像文件的时候,自动从该目录下搜索指定的镜像文件。

服务器IP地址指的是当前PC机的IP地址,当打开tftpd32软件的时候,会自动把你当前PC上的IP地址加载到此处。如果你想修改服务器的IP地址,直接把你的PC的IP地址修改后,打开tftpd32软件,会自动加载的。

注:烧录基本不用远程服务器,如果有兴趣可以研究使用远程服务器烧录,不推荐使用远程服务器。

c、安装SecureCTR软件,具体步骤请百度。

首先打开SecureCTR软件,选择快速链接,会弹出一个选项框。

在Protocla 下拉菜单中选择 serial ;

Port的选择依据安装驱动时分配的com端口;

波特率选择115200

点击ok

当窗口出现绿色勾时表明链接成功。

d、重新启动开发板,按住ctrl+c进入u-boot的控制台,再根据烧录步骤,输入命令烧kernel和文件系统。但是一定要把相关镜像文件拷贝到tftpd32的安装目录下,不然找不到。

注。切记uImage和 rootfs一定要拷贝到tftpd32的根目录下。

2 烧写过程

注:千万不要忘记把tftpd32打开并进行设置

uboot烧写内核

set serverip 192.168.16.100

mw.b 0x82000000 0xFF 0x100000

tftp 0x82000000 uImage

sf probe 0

sf erase 0x40000 0x100000

sf write 0x82000000 0x40000 0x100000

烧写rootfs文件系统

mw.b 0x82000000 0xFF 0x180000

tftp 0x82000000 rootfs.squashfs

sf probe 0

sf erase 0x140000 0x180000

sf write 0x82000000 0x140000 0x180000

设置启动参数和启动命令

setenvbootargs 'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=squashfsmtdparts=hi_sfc:256K(boot),1M(kernel),1536K(rootfs),5 376K(user)'

setenvbootcmd 'sf probe 0;sf read 0x82000000 0x40000 0x100000;bootm

0x82000000'

saveenv

reset

注意有个ko没有加载成功,没有加载成功的原因未知,但是可以手动加载。加载办法为挂载完文件系统以后用insmod 加文件的绝对路径。

第三步挂载nfs

工具telnet

1 telnet启动办法

在命令提示符下输入telnet 192.168.16.105 ip为板子的ip

出现如下错误可以在securtCRT里面输入telnetd打开板子的telnet端口。

2 telnet的使用

a: 现修改板子的ip地址,确保pc,ubuntu,板子在同一个网段,板子ip地址修改可以在secureCRT中修改,修改使用命令

ifconfig eth0 192.168.16.105 //配置板子的IP地址

ifconfig //查看网络状态

ping 192.168.16.100 //查看是否与PC机连通网络

连通的情况下,才能正确挂载nfs系统:

ubuntu下修改ubuntu的ip地址同样使用ifconfig eth0进行修改。

修改以后用ping检查三者是否相互ping通,如果不能ping通,自行检查。

b:在命令提示符下输入telnet 192.168.16.105 //ip地址为板子的ip

C:\Users\Administrator>telnet 192.168.16.105

正在连接192.168.16.105...无法打开到主机的连接。在端口 23: 连接失败

如果出现这个错误,为板子的telnet端口没有开启所至,在secureCRT中输入telnetd,打开板子的telnet端口。

连接以后需要输入板子的帐号密码。我们使用的hi3518e使用的帐号为root,密码为空。但是在淘宝或者公司卖的,uboot的密码一般是不告诉买家,为了防止查看他们的文件系统。如果自己买开发板练习,切记telnet连接以后不能加密。

c:使用mount -t nfs -o nolock 192.168.16.102:/zhang/hi3518/nfs /mnt命令在telnet下进行挂载,ip地址为ubuntu的ip地址,因为我们把ubuntu下nfs文件夹挂载到板子上,以后调试程序,可直接修改nfs文件夹下的文件,如同直接修改板子上的文件一样,但是这仅仅是挂载,并不修改板子的文件。

第四步: sample_venc 例子程序测试

1: mpp包编译

cd mpp/sample

make

//mpp/sample/venc 就是海思提供的同时编码的程序代码

//说明海思3518E受限硬件资源,最大只能编码1个码流、最大25帧(一个720P) 可以直接在ubuntu下编译,将编译好的mpp文件夹拷贝到nfs目录下,这就是nfs的好处,只需挂载一次,需要添加删除文件可直接在nfs目录下操作,如同在板子上添加删除文件一样。

2:加载驱动,生成H264码流文件。

cd /ko

./load3518e //海思底层视频编码驱动加载

cd /mnt

./sample_venc 0 //海思提供的同时编码1个码流的例子,会在当前目录下写

H264裸码流文件,播放裸码流请用VLC播放当前目录生成的H264文件

(stream_chn0.h264)

// VLC软件下载地址:

https://www.sodocs.net/doc/5d2721252.html,/vlc/2.1.3/win32/vlc-2.1.3-win32.exe

挂载nfs也可以直接使用securtCRT进行挂载,挂载步骤

1 烧写完文件系统和内核以后,用ifconfig eth0 进行设置板子的ip地址

2 设置以后用ping检查能否ping通板子

3 ping通以后使用mount命令进行挂载

4 用 cd /mnt 转到挂载目录下用ls查看当年文件夹下的内容。如果内容和被挂载的文件一样,则挂载成功。

在ubuntu下可以使用minicom进行挂载。

(1)有些linux系统自带了minicom,直接用命令安装就行了:

apt-get install minicom;

也可以从以下地址下载安装:

https://www.sodocs.net/doc/5d2721252.html,/projects/minicom/

(2)安装完成后:

用指令"rpm -qa | grepminicom"来确认是否安装了minicom,回车后会显示minicom的版本信息.

第一次启动时:

即输入minicom提示错误。则需:minicom -s

启动

出现配置菜单:选serial port setup

进入串口配置

输入A配置串口驱动为/dev/ttyS0(如果使用USB转接口,Serial Device 要配置为/dev/ttyUSB0)

输入E配置速率为115200 8N1

输入F将 Hardware Flow Control 设为 NO

回车退出

由于我们使用minicom作为超级终端控制路由器等设备, 而不是控制modem, 所以需要修改Modem and dialing, 将Init string, Reset string, Hang-up string设置为空. 设置完成后选择Save setup as dfl 将当前设置保存为默认设置.(若保存时出错,可能是因为权限不够,用root身份配置minicom则可)

在配置菜单选Save setup as df1保存(一定要记得这一步)

选Exit退出

下次在输入minicon即可直接进入。

命令minicom是进入串口超级终端画面,而minicom -s为配置minicom。说明/dev/ttyS0 对应为串口0 为你连接开发板的端口。

注意:非正常关闭minicom,会在/var/lock下创建几个文件LCK*,这几个文件阻止了minicom的运行,将它们删除后即可恢复

挂载NFS文件系统:

1、在你的PC机上安装NFS服务

执行sudo apt-get install nfs-kernel-server

查看nfs端口是否打开:

netstat -tl

可以看出nfs和sunrpc端口已经处于监听状态。

启动和停止nfs命令如下:

sudo /etc/init.d/nfs-kernel-server start(stop/restart)

接下来对nfs服务器进行配置:

打开/etc/exports文件,在末尾加入:

/zhang/hi3518/nfs *(rw,sync,no_root_squash)

注:nfs允许挂载的目录及权限,在文件/etc/exports中进行定义,各字段含义如下:

/home/kevin:要共享的目录

* :允许所有的网段访问

rw:读写权限

sync:资料同步写入内在和硬盘

no_root_squash:nfs客户端共享目录使用者权限

重启服务:

#sudo /etc/init.d/portmap restart<---重启portmap,

#sudo /etc/init.d/nfs-kernel-server restart<---重启nfs服务

#showmount -e<---显示共享出的目录

注:nfs是一个RPC程序,使用它前,需要映射好端口,通过portmap设定

命令执行情况如下:

kevin@ubuntu:~$sudo /etc/init.d/portmap restart

现在可以在本机上试一下:

挂载之前切记要打开minicom,然后在minicom里面进行挂载,我在做的前提一直在ubuntu下挂载,请教大神的时候被人嘲讽了!

#mount -t nfslocalhost:/home/kevin /mnt

注:localhost为本机linux的IP地址

总结:挂载nfs大同小异,相同的是只需要使用串口工具就可以进行挂载,不同的是win 7下可以使用telnet 和securtCRT挂载,ubuntu下可以使用minicom挂载。

mount用法详解

mount用法详解 1、挂载点必须是一个目录。 2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。 对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作系统使用的文件系统的格式与linux使用的文件系统格式是不一样的。光盘是ISO9660;软盘是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、NTFS。挂载前要了解linux是否支持所要挂载的文件系统格式。 挂载时使用mount命令: 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有 -t<文件系统类型> 指定设备的文件系统类型,常见的有: minix linux最早使用的文件系统 ext2 linux目前常用的文件系统 msdos MS-DOS的fat,就是fat16 vfat windows98常用的fat32 nfs 网络文件系统 iso9660 CD-ROM光盘标准文件系统 ntfs windows NT 2000的文件系统 hpfs OS/2文件系统 auto 自动检测文件系统 -o<选项> 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的有 codepage=XXX 代码页 iocharset=XXX 字符集 ro 以只读方式挂载 rw 以读写方式挂载 nouser 使一般用户无法挂载 user 可以让一般用户挂载设备

提醒一下,mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。这样OK?) 例子:windows98装在hda1分区,同时计算机上还有软盘和光盘需要挂载。 # mk /mnt/winc # mk /mnt/floppy # mk /mnt/cdrom # mount -t vfat /dev/hda1 /mnt/winc # mount -t msdos /dev/fd0 /mnt/floppy # mount -t iso9660 /dev/cdrom /mnt/cdrom 现在就可以进入/mnt/winc等目录读写这些文件系统了。 要保证最后两行的命令不出错,要确保软驱和光驱里有盘。(要是硬盘的磁盘片也可以经常随时更换的话,我想就不会犯这样的错误了:-> ) 如果你的windows98目录里有中文文件名,使用上面的命令挂载后,显示的是一堆乱码。这就要用到-o 参数里的codepage iocharset选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文一般用cp936或gb2312。 当挂载的文件系统linux不支持时,mount一定报错,如windows2000的ntfs文件系统。可以重新编译linux内核以获得对该文件系统的支持。关于重新编译linux内核,就不在这里说了。 四、自动挂载 每次开机访问windows分区都要运行mount命令显然太烦琐,为什么访问其他的linux分区不用使用mount命令呢?其实,每次开机时,linux自动将需要挂载的linux分区挂载上了。那么我们是不是可以设定让linux在启动的时候也挂载我们希望挂载的分区,如windows分区,以实现文件系统的自动挂载呢? 这是完全可以的。在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。我的/etc/fstab 文件如下: /dev/hda2 / ext3 defaults 1 1 /dev/hda1 /boot ext3 defaults 1 2 none /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0

linux中如何挂载NFS文件

如何挂载NFS开发环境的方法步骤 ———mount命令及umount命令的用法详解(附图说明)Step1:设置好网络 主机IP:222.204.59.185 网关:192.168.50.1 子网掩码:255.255.255.0 开发板IP:222.204.59.250 网关:192.168.50.1 子网掩码:255.255.255.0 目的是使得两个处于同一个网段。 Step2:在主机的linux中设置共享目录 运行命令 #gedit /etc/exports 编辑nfs 服务的配置文件(注意:第一次打开时该文件是空的),添加以下内容: /root/share *(rw,sync,no_root_squash) 保存退出 其中: /root/share表示nfs 共享目录,它可以作为开发板的根文件系统通过nfs 挂接; *表示所有的客户机都可以挂接此目录 rw表示挂接此目录的客户机对该目录有读写的权力 no_root_squash表示允许挂接此目录的客户机享有该主机的root 身份 使用showmount –e命令可以查看你的挂载点在哪,不加参数-e显示的是网络地址。 在开发板上的/mnt下建立新的nfs文件(可以放在其他地方,名字除了nfs也可以去其他的名字) Step3:通过命令启动和停止nfs 服务 在命令行下运行: #/etc/init.d/nfs restart 这将启动nfs 服务,可以输入以下命令检验nfs 该服务是否启动。 Step4:在minicom中使用mount命令(也可以在超级终端中使用) 确定 进入minicom界面:

# mount -t nfs 222.204.59.185: /root/share /mnt/nfs 上图为minicom中显示的linux(也即开发板中的) 如果提示:mount:RPC:unable to receive; errno =No route to host 说明你主机linux中的防火墙没关闭在主机linux 中使用一下命令就可以解决:#service iptables stop。在次使用mount命令就ok了。 注意:此处222.204.59.185主机的ip地址,使用mount命令是在超级终端或minicom中使用,而不是在主机的linux系统中。在取消挂载命令时也是在超级终端或minicom中使用,具体用法是:#umount /mnt/ 如果没有出现错误信息, 您将可以浏览到/mnt 目录中的内容和/root/share是一致的。 取消挂载: 使用这个命令可以停止nfs 服务: #/etc/init.d/nfs stop 检查nfs服务器是否开启: #service nfs status 启对应的2个服务:#service portmap restart #service nfs restart 检查防火墙看是否屏蔽了nfs端口:#service iptables stop #service iptables status

Linux 创建文件系统及挂载文件系统详解

摘要: 本文对新增硬盘,切割硬盘,创建硬盘分区,为硬盘分区创建文件系统,以及加载文件系统的流程做总结性论述; 主要是为初学者弄清楚这一操作过程; 本文涉及fdisk、mkfs、mount ... ... 等工具; 对/etc/fstab 进行了解说; 还有磁盘扫描工具fsck 等介绍; 如果您想加载一个分区(文件系统),首先您得确认文件系统的类型,然后才能挂载使用,比如通过mount 加载,或者通过修改/etc/fstab来开机自动加载; 如果您想添加一个新的分区,或者增加一个新的硬盘,您要通过分区工具来添加分区,然后要创建分区的文件系统,然后才是挂载文件系统;比如通过mount 加载,或者通过修改/etc/fstab来开机自动加载; 一、对存储设备的分区; 我们这里所指的存储设备主要是本地硬盘、移动硬盘(比如USB 和1394接口的硬盘);由于磁盘很大并且为了满足我们各种需要,所以把硬盘分成若干个分区; 在Linux中进行硬盘分区操作的工具有: fdisk ,目前看来也是最好用的分区工具; parted 和cfdisk在某一方面有点优点,如parted中的数据备份功能; 推荐您用fdisk 分区工具; 二、存储设备进行格式化,即建立文件系统的过程; 1、文件系统的一点介绍 对存储设备分区还是远远不够的,我们还要对这些新增分区进行格式化;一个分区只有建立了某种文件系统后,这个分区才能使用;建立文件系统过程,就是用相应格式化工具格式化分区的过程; 在Linux操作系统中,目前几乎支持目前主流的文件系统,比如NTFS(只读)、FAT(可读可写)、ext2、ext3、reiserfs、hfs (MAC 操作系统的文件系统)、swap 交换分区... ... 还有一些不熟悉的操作系统的文件系统等;

嵌入式Linux根文件系统制作

实训项目四-嵌入四Linux系统根文件系统制作一. 项目实施目的 了解 UP-CUP2440 型实验平台Linux 系统下根文件系统结构 掌握根文件系统的搭建过程 掌握busybox、mkcramfs等工具的使用方法 二. 项目主要任务 使用busybox生成文件系统中的命令部分,使用mkcramfs工具制作CRAMFS 格式的根文件系统。 分析根文件系统etc目录下重要配置文件的格式及语法,熟悉根文件系统的启动过程 三. 基本概念 1.文件系统基本概念 Linux的一个最重要特点就是它支持许多不同的文件系统。这使Linux非常灵活,能够与许多其他的操作系统共存。Linux支持的常见的文件系统有:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。随着时间的推移, Linux支持的文件系统数还会增加。Linux是通过把系统支持的各种文件系统链接到一个单独的树形层次结构中,来实现对多文件系统的支持的。该树形层次结构把文件系统表示成一个整个的独立实体。无论什么类型的文件系统,都被装配到某个目录上,由被装配的文件系统的文件覆盖该目录原有的内容。该个目录被称为装配目录或装配点。在文件系统卸载时,装配目录中原有的文件才会显露出来。在Linux 文件系统中,文件用i节点来表示、目录只是包含有一组目录条目列表的简单文件,而设备可以通过特殊文件上的I/O 请求被访问。 2.常见的嵌入式文件系统 嵌入式Linux系统一般没有大容量的磁盘,多使用flash存储器,所以多采用基于Flash(NOR和NAND)的文件系统或者RAM内存的文件系统。 (1)Flash根据结构不同分为 NOR Flash和NAND Flash。基于flash的文件系统主要有: jffs2:RedHat基于jffs开发的文件系统。

Linux下的文件系统为树形结构

Linux下的文件系统为树形结构,入口为/树形结构下的文件目录:无论哪个版本的Linux系统,都有这些目录,这些目录应该是标准的。各个Linux发行版本会存在一些小小的差异,但总体来说,还是大体差不多。 1. /文件系统的入口,最高一级目录; 2. /bin基础系统所需要的命令位于此目录,是最小系统所需要的命令,如:ls, cp, mkdir等。 这个目录中的文件都是可执行的,一般的用户都可以使用。 3. /boot包含Linux内核及系统引导程序所需要的文件,比如vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录; 4. /dev设备文件存储目录,比如声卡、磁盘... ...这是一个非常有趣的目录,是Linux文件系统的一个闪亮的特性- 所有对象都是文件或目录。仔细观察这个目录你会发现hda1, hda2等, 它们代表系统主硬盘的不同分区。 /dev/cdrom和/dev/fd0代表你的CDROM驱动器和floppy驱动器。看上去可能有些奇怪,但比较文件和硬件的特性这却是十分合理的。它们都可以读出和写入。例如/dev/dsp,这个文件代表你的扬声器。那么写入这个文件的数据都回传送到喇叭。试一试'cat /etc/lilo.conf > /dev/dsp' 你会听到一些声音。这是你的lilo.conf 文件的声音!同样,向/dev/ttyS0 ( COM 1 ) 读出或写入数据你可以和接到上面的设备进行通讯。 5. /etc存放系统程序或者一般工具的配置文件。 如安装了apache2之后,配置文件在/etc/apache2/目录下。 /etc/init.d 这个目录是用来存放系统或服务器以System V模式启动的脚

实验 文件系统管理

实训项目4 文件系统管理 一、实训目的 ●掌握Linux下文件系统的创建、挂载与卸载。 ●掌握文件系统的自动挂载。 二、项目背景 某企业的Linux服务器中新增了一块硬盘/dev/sdb,请使用fdisk命令新建/dev/sdb1主分区和/dev/sdb2扩展分区,并在扩展分区中新建逻辑分区/dev/sdb5,并使用mkfs命令分别创建vfat和ext3文件系统。然后用fsck命令检查这两个文件系统;最后,把这两个文件系统挂载到系统上。 三、实训内容 练习Linux系统下文件系统的创建、挂载与卸载及自动挂载的实现。 四、实训步骤 子项目1.创建/dev/sdb1和/dev/sdb5 ●使用fdisk命令创建/dev/sdb1主分区。 ●使用fdisk命令创建/dev/sdb2扩展分区。

●使用fdisk命令创建/dev/sdb5逻辑分区。 ●输入子命令w,把设置写入硬盘分区表,退出fdisk并重新启动系统。 ●用mkfs命令在上述刚刚创建的分区上创建ext3文件系统和vfat文件系统。 ●用fsck命令检查上面创建的文件系统。 子项目2.挂载/dev/sdb1和/dev/sdb5 ●利用mkdir命令,在/mnt目录下建立挂载点,mountpoint1和mountpoint2。

●把上述新创建的ext3分区挂载到/mnt/mountpoint1上。 ●把上述新创建的vfat分区挂载到/mnt/mountpoint2上。 ●利用mount命令列出挂载到系统上的分区,查看挂载是否成功。 ●利用umount命令卸载上面的两个分区。 子项目3.实现/dev/sdb1和/dev/sdb5的自动挂载 ●编辑系统文件/etc/fstab文件,把上面两个分区加入此文件中。 ●重新启动系统,显示已经挂载到系统上的分区,检查设置是否成功。 子项目4.挂载光盘和U盘 ●取一张光盘放入光驱中,将光盘挂载到/media/cdrom目录下。查看光盘中的文件。 ●利用与上述相似的命令完成U盘的挂载与卸载。 五、实训思考题 1. 在Linux下能创建Windows 的分区吗?在Linux下能创建Windows的文件系统吗?Windows操作

使用uboot去挂载根文件系统

1、根文件系统的制作 1)创建根文件系统主目录: mkdir rootfs 2)创建根文件系统的子目录 cd rootfs mkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录 mkdir usr/bin usr/lib usr/sbin lib/modules 4)创建设备文件 内核在引导时设备节点console,null必须存在 cd dev/ 注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1 mknod -m 666 null c 1 3 c:表明类型为字符设备 第一个数字(5,1):主设备号 第二个数字(1,3):次设备号 这两个设备文件设备号是固定的 5)安装etc etc目录主要是一些启动时的脚本文件一般不需要修改 tar etc.tar.gz –C /xxx/rootfs

这个命令可能不给用改为: tar xvzf etc.tar.gz –C /xxx/rootfs 6)编译内核模块 内核模块保存在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=arm INSTALL_MOD_PATH=/xxx/rootfs 7)配置busybox 因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。 Busybox相当于一个命令解析器,根文件中命令被软连接到 busybox,由busybox进行命令解析。 a) 解压busybox tar xvzf busybox-1.13.3 b) 配置busybox

Hi3518内核和文件系统烧写以及nfs挂载

Hi3518内核和文件系统烧写以及NFS挂载

修改履历

第一步编译内核和文件系统 文档说明:涉及到目录的请根据自己的实际情况进行更改,本文档仅根据笔者的测试进行举例说明。 1 安装交叉编译器 cd arm-hisiv100nptl-linux ./cross.install 说明:3518e推荐使用100nptl进行编译,arm-hisiv100nptl-linux-(使用uclibc库,uclibc 工具链支持全规格版本和小型化版本 )arm-hisiv200-linux-(glibc 库glibc 工具链只支持全规格版本),实验时没有使用hisiv200,不确定会出什么问题,不推荐使用。 2 编译步骤 cd ./linux-3.0.y ./mk3518.sh mk3518.sh 脚本里面包含了编译linux内核所需的所有的命令,具体看mk3518.sh文件,编译成功将生成在目录arch/arm/boot/uImage文件,这个就是要烧录到板子上的 注意:大小大约为1M。大于1M也许会出问题,在实验前期都是大于1M,烧录的时候出问题。 制作rootfs文件系统,使用的是最新的squashfs只读文件系统,使用的工具为mksquashfs,目录squashfs4.2为这个工具的代码 rm ./rootfs.squashfs //仅仅为了删除之前存在的文件系统,如果没有,可不执行这一步。 ./mksquashfs ./rootfsrootfs.squashfs -b 256K cp ./rootfs.squashfs ./tftpboot //可不用命令,自己拷贝,黏贴,文件夹根据自己实际情况所定。 生成的rootfs.squashfs这个就是要烧录到板子上的文件 注意:生成的文件大约为1.5M 地址空间说明 | 256K | 1M | 1.5M | |------------|---------------|-----------------------| | boot | kernel | rootfs |

根文件系统制作

Linux根文件系统的制作 1. 根文件系统 文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。 注:对于我们应用开发来说,购买开发板的时候,厂家会提供好现成的根文件系统和BootLoader等,如果需要,我们可以改变其中的命令而无需从头开始制作一个新的根文件系统。不过这儿的制作过程可以让我们更深一点理解Linux的文件系统。 2.主要的根文件系统 * Linux 中,rootfs 是必不可少的。PC 上主要实现有 ramdisk 和直接挂载 HD(Harddisk,硬盘)上的根文件系统;嵌入式中一般不从 HD 启动,而是从 Flash 启动,最简单的方法是 将 rootfs load 到 RAM 的 RAMDisk,稍复杂的就是直接从Flash 读取的 Cramfs,更复杂的是在 Flash 上分区,并构建 JFFS2 等文件系统。 * RAMDisk 将制作好的 rootfs 压缩后写入 Flash,启动的时候由 Bootloader load 到RAM,解压缩,然后挂载到 /。这种方法操作简单,但是在 RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源 RAM。 ramdisk 就是用内存空间来模拟出硬盘分区,ramdisk通常使用磁盘文件系统的压缩存放在flash中,在系统初始化时,解压缩到SDRAM并挂载根文件系统, 在linux系统中,ramdisk 有二种,一种就是可以格式化并加载,在linux内核2.0/2.2就已经支持,其不足之处是大小固定;另一种是 2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小 随所需要的空间增加或减少,是目前linux常用的ramdisk技术. * initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrd,Kernel 2.5 引入了 cpio-initrd,大大简化了 Linux 的启动过程,附合 Linux 的基本哲学:Keep it simple, stupid(KISS). 不过cpio-initrd 作为新的格式,还没有经过广泛测试,嵌入式 Linux 中主要采用的还是 image-initrd。 * Cramfs 是 Linus 写的很简单的文件系统,有很好的压缩绿,也可以直接从 Flash 上运行,不须 load 到 RAM 中,因此节约了 RAM。但是 Cramfs 是只读的,对于需要运行时修 改的目录(如: /etc, /var, /tmp)多有不便,因此,一般将这些目录做成ramfs 等可写的 fs。 * SquashFS 是对 Cramfs 的增强。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使用量方面也具有优势。不过,据开发者介绍,在性能上可能不如 Cramfs。这也是一种新方法,在嵌入式系统采用之前,需要经过更多的测试。 3.Ramdisk制作 RAMDisk的制作方法如下:

ubifs文件系统挂载及同步

UBIFS分区制作及UBIFS烧写和启动 (转载) 相关命令工具 ubiattach version 1.0 - a tool to attach MTD device to UB I. Usage: ubiattach [-m ] [-d ] [--mtdn=] [--devn ] Example 1: ubiattach /dev/ubi_ctrl -m 0 - attach MTD device 0 (mtd0) to UBI Example 2: ubiattach /dev/ubi_ctrl -m 0 -d 3 - attach MTD device 0 (mtd0) to UBI and and create UBI device number 3 (ubi3) -d, --devn= the number to assign to the newly created UBI device(the number is assigned automatically if this is not specified) -m, --mtdn= MTD device number to attach -O, --vid-hdr-offset VID header offset (do not specify this unless you really know what you do and the optimal defaults will be used) -h, --help print help m essage -V, --version print program v ersion ubimkvol version 1.0 - a tool to create UBI volumes.

根文件系统挂载

根文件系统挂载 1) 在RamDisk为initramfs时 start_kernel()->vfs_caches_init()->mnt_init()->init_r ootfs()->init_mount_tree()注册了类型为rootfs的fs 然后:start_kernel 最后rest_init->kernel_init kernel_init->do_basic_setup->do_initcalls 调用 rootfs_initcall 注册过的函数 rootfs_initcall(populate_rootfs); populate_rootfs解压initramfs到rootfs, initramfs必须包含init文件,否则还将挂在其他的文件系统然后kernel_init检 查init是否存在,如果有就不会注册其他的根文件系统, if (sys_access((const char __user *) ramdisk_execute_command, 0) != 0) 会导致prepare_namespace 不被调用。 否则还会尝试挂在其他的根文件系统。2) 在RamDisk (initrd) 非initramfs时 kernel_init->prepare_namespace->initrd_load->rd_ load_image(加载)->(identify_ramdisk_image) 如果ROOT_DEV != Root_RAM0 则handle_initrd通过linuxrc启动用户态

nfs挂载根文件系统-tftp下载内核运行

Nfs、tftp联合运行调试内核及文件系统 参考:[https://www.sodocs.net/doc/5d2721252.html,/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

linux磁盘挂载命令(mount)

磁盘挂载命令(mount) (1)作用 挂载文件系统,它的使用权限是超级用户或/etc/fstab中允许的使用者。正如1.2.1节中所 述,挂载是指把分区和目录对应的过程,而挂载点是指挂载在文件树中的位置。mount 命令 就可以把文件系统挂载到相应的目录下,并且由于Linux 中把设备都当作文件一样使用,因此,mount命令也可以挂载不同的设备。 通常,在Linux 下“/mnt”目录是专门用于挂载不同的文件系统的,它可以在该目录下 新建不同的子目录来挂载不同的设备文件系统。 (2)格式 mount [选项] [类型] 设备文件名挂载点目录 其中的类型是指设备文件的类型。 (3)常见参数 mount常见参数如表2.8所示。 表2.8 mount命令选项常见参数列表 选项参数含义 -a 依照/etc/fstab的内容装载所有相关的硬盘 -l 列出当前已挂载的设备、文件系统名称和挂载点 -t 类型 将后面的设备以指定类型的文件格式装载到挂载点上。常见的类型有前面介绍过的几 种:vfat、ext3、ext2、iso9660、nfs等 -f 通常用于除错。它会使mount不执行实际挂上的动作,而是模拟整个挂上的过程,通常 会和-v一起使用 (4)使用实例 使用mount命令主要通过以下几个步骤。 ①确认是否为Linux 可以识别的文件系统,Linux 可识别的文件系统只要是以下几种。《嵌入式Linux应用程序开发详解》——第2章、Linux基础命令 华清远见<嵌入式Linux应用开发班>培训教材 ? Windows95/98常用的FAT32 文件系统:vfat。 ? WinNT/2000 的文件系统:ntfs。 ? OS/2 用的文件系统:hpfs。 ? Linux用的文件系统:ext2、ext3、nfs。 ? CD-ROM光盘用的文件系统:iso9660。 ②确定设备的名称,确定设备名称可通过使用命令“fdisk -l”查看。 ③查找挂接点。 必须确定挂载点已经存在,也就是在“/mnt”下的相应子目录已经存在,一般建议在“/mnt”下新建几个如“/mnt/windows”,“/mnt/usb”的子目录,现在有些新版本的Linux(如红旗Linux、 中软Linux、MandrakeLinux)都可自动挂载文件系统,Red Hat仅可自动挂载光驱。 ④挂载文件系统如下所示。 [root@sunq mnt]# mount -t vfat /dev/hda1 /mnt/c [root@sunq mnt]# cd /mnt/c 24.s03e01.pdtv.xvid-sfm.rmvb Documents and Settings Program Files 24.s03e02.pdtv.xvid-sfm.rmvb Downloads Recycled

第六章 磁盘管理和文件系统

第六章磁盘管理和文件系统 分区管理是比较危险的操作,即使对于经验丰富的系统管理人员,仍建议在执行分区操作前,备份重要数据。 一、使用fdisk进行分区管理 服务器管理人员应该知道如何在服务器上添加硬盘,添加硬盘设备后要保证计算机系统能够识别该设备。若在Vmware虚拟机环境中,可以通过“VM”—“Settings”添加一块硬盘。 1、检测新硬盘 要了解系统连接新磁盘的情况,可以运行 fdisk –l 命令。 在上图中,首先列出了系统上第一个磁盘/dev/sda的基本信息,包括磁盘的总容量以及磁头、扇区、柱面等参数。接下来是分区表,可以看到该磁盘分为3个主分区,1个扩展分区以及在扩展分区中的1个逻辑分区,其中/dev/sda1为引导分区;此外,还可以看到每个分区的起始柱面数、结束柱面数和分区类型。 上述信息的最后一行表示磁盘/dev/sdb(新加的硬盘)上没有合法的磁盘分区表,即尚未进行分区。 以磁盘/dev/sdb为例,启动fdisk分区工具进行分区操作。 2、规划硬盘中的分区 可以在Shell提示符下以管理员身份输入命令:fdisk /dev/sdb

上面的命令表示已进入fdisk交互式操作,根据提示信息可以输入命令m以查看各个交互式命令的使用方法: (1) “p”——显示硬盘中原有分区情况 新加的硬盘尚末建立分区,所以上表分区显示为空。 (2)“n”——新建分区 根据提示选择“”为创建主分区,选择“”为创建扩展分区。之后依次选择分区序号、

起始位置、结束位置或分区大小完成新分区创建。 选择分区号时,主分区和扩展分区的序号只能在1-4之间。分区的启始位置一般默认即可,结束位置或大小可以使用“+sizeM”的形式,如“+10000M”表示该分区的容量设置为10GB。 下面以创建两个主分区和两个逻辑分区为例。 首先创建一个主分区(/dev/sdb1),容量指定为20GB。 按照相同的步骤继续创建第二个主分区(/dev/sdb2),容量也为20GB,完成后可以输入“p”查看分区情况,如下所示。 接下来创建一个扩展分区和两个逻辑分区。 先建立扩展分区(/dev/sdb4),使用剩下的所有空间。

nfs挂载根文件系统

用NFS挂载文件系统 1启动虚拟机NFS服务 在安装RedHat 9.0时,如果选择的是完全安装,则NFS相关软件都已经缺省安装好了,请按照以下步骤建立和配置NFS服务。 (注意:请关闭Linux下面的防火墙,否则可能会出现使用不了NFS的情况) 关闭防火墙的命令是: #/etc/init.d/iptables stop 设置共享目录: 运行命令“#gedit /etc/exports”,然后编辑NFS服务的配置文件(注意:第一次打开该文件是空的),添加以下内容: -“/opt/EmbedSky/root_nfs”表示nfs共享目录,它可以作为开发板的根文件系统通过nfs挂载 -“*”表示所有的客户机都可以挂载此目录 -“rw”表示挂载此目录的客户机对该目录有读写的权限 -“no_root_squash”表示允许挂载此目录的客户机享有该主机的root身份建立共享目录: 在光盘的“Linux”目录下面有个名为“root_nfs.tar.bz2”的文件,把它解压到Linux的“/opt/EmbedSky/”目录下面,使用解压命令为“#tar xvfj root_nfs.tar.bz2 -C /”。 启动和停止NFS服务: 在命令行运行“#/etc/init.d/nfs start”将启动NFS服务:

使用下面的指令可以测试NFS服务是否开启: 此时“/opt/EmbedSky/root/”目录里面的内容和“/opt/EmbedSky/root_nfs/”目录里面一样,对上面两个目录中的任何一个操作,另外一个也会有对应的变化(注意:root目录和root_nfs目录都是需要自己建立的,建立目录的方法:mkdir xxx,xxx就是所要建立的目录)。同时上面截图中的命令用到的IP地址是PC端Linux的IP地址,需要自己的实际IP相同。 再更改虚拟机ip地址:ifconfig eth0 192.168.1.10 ifconfig eth0 up 2 配置NFS 在u-boot控制台下,输入“0”:进入设置启动参数操作界面,如下图:

网络文件系统(NFS)

网络文件系统(NFS) 收藏 网络文件系统(NFS) 一、NFS简介 1、NFS就是Network 的缩写,它的最大功能就是可以通过网络让不同的机器,不同的操作系统彼此共享文件(share files)——可以通过NFS挂载远程主机的目录,访问该目录就像访问本地目录一样,所以也可以简单的将它看作一个文件服务器()。 注意:一般而言,使用NFS服务能够方便地使各unix-like系统之间实现共享,但如果需要在unix-like和windows系统之间共享,那就得使用samba了。 2、NFS是通过网络进行数据传输,那么NFS使用哪些端口呢,答案是……不知道,因为NFS传输数据时使用的端口是随机的,唯一的限制就是小于1024,客户端怎么知道服务器使用的是哪个端口,此时就要用到远程过程调用RPC。 其实,NFS运行在SUN的RPC(Remote Procedure Call,远程过程调用)基础上,RPC定义了一种与系统无关的方法来实现进程间通信,由此,NFS Server也可以看作是RPC Server。正因为NFS是一个RPC服务程序,所以在使用它之前,先要映射好端口——通过portmap 设定。比如:某个NFS Client发起NFS服务请求时,它需要先得到一

个端口(port),所以它先通过portmap得到port number(不仅是NFS,所有的RPC服务程序启动之前,都需要先设定好portmap)。注意:在启动RPC服务(比如NFS)之前,需要先启动portmap服务。 3、NFS允许系统将其目录和文件共享给网络上的其他系统。通过NFS,用户和应用程序可以访问远程系统上的文件,就像它们是本地文件一样。那么NFS最值得注意的优点有: (1)本地工作站可以使用更少的磁盘空间,因为常用数据可以被保存在一台机器上,并让网络上的其他机器可以访问它。 (2)不需要为用户在每台网络机器上放一个用户目录,因为用户目录可以在NFS服务器上设置并使其在整个网络上可用。 (3)存储设备如软盘、光驱及USB设备可以被网络上其它机器使用,这可能可以减少网络上移动设备的数量。 二、与NFS相关的几个文件和命令 1、/etc/exports 对NFS服务的访问是由exports来批准,它枚举了若干有权访问NFS 服务器上文件系统的主机名。 2、/sbin/exportfs 维护NFS的资源共享,可以通过它重新设定/etc/exports的共享目录,卸载NFS Server共享的目录或者重新共享等。

LINUX下NFS文件共享方式和实现的方法

Linux下nfs文件共享方式和实现的方法。 1、首先要开启portmap和nfs服务。 service portmap start service nfs start 2、查看服务是否开启。 netstat-ntpl 3、修改/etc/exports vi/etc/exports #/home/temp*(rw,sync,no_root_squash,all_squash) #/home/temp*(ro,sync,no_root_squash,all_squash) (/home/temp表示要被共享的目录) #/mnt/inst*(ro,sync)(*表示任意地址) rw:可读写的权限; ro:只读的权限; no_root_squash:登入到NFS主机的用户如果是ROOT用户,他就拥有ROOT的权限root_squash:在登入NFS主机使用目录的使用者如果是root时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的UID与GID都会变成nobody那个身份; all_squash:不管登陆NFS主机的用户是什么都会被重新设定为nobody。anonuid:将登入NFS主机的用户都设定成指定的user id,此ID必须存在于/etc/passwd中。 anongid:同anonuid,但是变成group ID就是了! sync:资料同步写入存储器中。 async:资料会先暂时存放在内存中,不会直接写入硬盘。 insecure允许从这台机器过来的非授权访问。 4、exportfs-a(导出所有共享的目录) 5、showmount-e127.0.0.1(查被共享的目录) Export list for127.0.0.1: /mnt/inst* /home/temp*

根文件系统的启动及配置linuxrc

根文件系统的启动及配置linuxrc /linuxrc内容: #!/bin/sh echo"mount/etc as ramfs" /bin/mount-n-t ramfs ramfs/etc /bin/cp-a/mnt/yaffs/etc/*/etc//关机的时候我们会保存/etc的内容到/mnt/yaffs/etc. echo"re-create the/etc/mtab entries" #re-create the/etc/mtab entries /bin/mount-f-t cramfs-o remount,ro/dev/mtdblock/2/ /bin/mount-f-t ramfs ramfs/etc exec/sbin/init 首先你要看懂这个linuxrc, 1./bin/mount-n-t ramfs ramfs/etc 这句话的作用加载一个ramfs作为/etc目录。这样/etc就是一个可写目录。 看这个脚本,得出你的根文件系统是一个cramfs,是一个只读文件系统中,而/etc作为系统运行配置文件的存放地点,可能会写一些运行状态在这里,linuxrc第一件事情就是将一个ramfs mount到/etc只读目录中,使得/etc/目录可写,指定参数-n的目的是告诉mount 不要写/etc/mtab,这个文件存放当前系统mount了的所有文件系统中。因为现在/etc/目录还是只读,所以这次mount不要写这个文件,否则会失败。 而你问到的ramfs在哪里,这个在你的/etc/fstab文件中应该有ramfs一项,mount会去找这项,如果没有,mount会失败。后面就执行不下去。

相关主题