1.安装mkyaffsimage, mkyaffs2image命令(用来制作yaffs文件系统)

第一个命令针对Flash小页512B,第二个针对Flash大页2KB
首先下载压缩文件 yaffs_source_util_larger_small_page_nand.tar.bz2
安装mkyaffs2image命令为例:

  1. tar xjf yaffs_source_util_larger_small_page_nand.tar.bz2 //解压出yaffs1和yaffs2
  2. cd /Development_util_ok/yaffs2/utils
  3. make //生成mkyaffsimage和mkyaffs2image
  4. sudo cp mkyaffs2image /usr/local/bin
  5. //将mkyaffs2image命令复制到可执行目录路径下

然后输入mkyaffs2image命令,如果不能运行,则使用chmod命令加可执行属性即可

2.安装mkfs.jffs2命令(用来制作jffs文件系统)
首先下载压缩文件mtd-utils-05.07.23.tar.bz2,然后安装步骤如下:

  1. tar -xf mtd-utils-05.07..tar.bz2
  2. cd mtd-utils-05.07./util
  3. make
  4. sudo make install

3.制作文件系统

3.1 解压安装busybox-1.7.0

  1. cd busybox-1.7.
  2. make menuconfig

然后在菜单里进入-> Busybox Settings-> Busybox Library Tuning选上:

  1. [*] Tab completion //tab补齐命令

然后输入vi Makefile,找到CROSS_COMPILE字段,后面添加”arm-linux-”:

接着输入:

  1. make //编译
  2. mkdir /work/nfs_root/busybox1.7_fs //创建要安装的文件系统目录
  3. make install CONFIG_PREFIX=/work/nfs_root/busybox1.7_fs //指定安装位置

安装好了后,可以看到busybox1.7_fs/bin里便保存着linux命令,如下图所示:

3.2构造lib目录(被应用程序调用的C库函数,比如:printf,strcmp,fopen等)

  1. cd /work/nfs_root/busybox1.7_fs
  2. mkdir lib //创建lib目录 (存放库函数)
  3. cd /work/tools/gcc-3.4.-glibc-2.3./arm-linux/lib //进入源目录
  4. cp *.so* /work/nfs_root/ busybox1.7_fs/lib -d //复制glibc库到lib目录(*:匹配符,-d:表示如果是链接文件,则继续保持链接)

3.3构造etc目录
在etc目录下,需要构造以下3个文件

  • etc/inittab :     init进程会根据inittab文件里,来创建其它子进程,比如-/bin/sh进程
  • etc/init.d/rcS: 脚本文件,里面用来执行命令,比如设置网卡,使用mount -a来装载/etc/fstab中的文件系统
  • etc/fstab :       里面保存要被挂载的哪个文件系统,比如proc、sysfs、tmpfs、devpts等系统

1)构造/etc/inittab

  1. cd /work/nfs_root/busybox1.7_fs
  2. mkdir etc/
  3. vi etc/inittab

添加以下几句:

  1. ::sysinit:/etc/init.d/rcS //内核启动时,执行/etc/init.d/rcS
  2. console::askfirst:-/bin/sh //启动console对应的-/bin/sh进程之前,等待用户按enter键,等价于: ::askfirst:-/bin/sh
  3. ::ctrlaltdel:/sbin/reboot //按下ctrl+alt+del组合键时,启动reboot命令
  4. ::shutdown:/bin/umount -a -r //系统关机前,卸载所有文件系统

2)构造etc/init.d/rcS

  1. mkdir etc/init.d/
  2. vi etc/init.d/rcS

添加以下几句:

  1. mount -a //装载/etc/fstab中的文件系统
  2. echo /sbin/mdev > /proc/sys/kernel/hotplug //使/sbin/medv指向hotplug,从而支持热拔插
  3. mdev -s
  4. //使用medv命令将会扫描/sys/class和/sys/block中所有的类设备目录,然后把读取到的dev相关文件自动在/dev创建下的所有设备节点,

并给rcS文件加上可执行权限:

  1. sudo chmod +x etc/init.d/rcS //使脚本rcS能够执行命令

3)构造etc/fstab

PS: 使用mdev命令需要sysfs、tmpfs、devpts这3个文件系统的支持

  • mdev:   是udev的一个迷你版, 它主要的功能是管理/dev目录底下的设备节点。它同时也是用来接替devfs及热插拔的功能
  • proc:     虚拟文件系统, 它只存在内存当中,而不占用外存空间, 可以通过proc得到系统的信息,比如运行的每个进程pid便存在/proc里
  • sysfs:    管理虚拟系统,为udev提供设备入口和uevent通道, sysfs类型,需要挂载到/sys目录下
  • tmpfs:   临时文件系统,用来减少对flash频繁读写,tmpfs类型,需要挂载到/dev目录下
  • devpts:  内核虚拟系统, devpts类型,需要挂载到/dev/pts目录下
  1. mkdir proc/ //创建proc要挂载的目录
  2. mkdir sys/ //创建sysfs要挂载的目录,
  3. mkdir dev/pts -p //创建devpts要挂载的目录
  4. vi etc/fstab

添加以下几句

  1. # device mount-point type options dump fsck order
  2. proc /proc proc defaults
  3. tmpfs /tmp tmpfs defaults
  4. sysfs /sys sysfs defaults
  5. devpts /dev/pts devpts defaults

3.4构造其它文件/目录
1)创建终端文件(dev/console和dev/null)

  1. sudo mknod -m dev/console c
  2. sudo mknod -m dev/null c

2)创建其它目录

  1. mkdir mnt tmp root

4.制作烧写yaffs2

  1. mkyaffs2image busybox1.7_fs busybox1.7_fs.yaffs2 //使用mkyaffs2image生成yaffs2

进入uboot烧写:

  1. nfs 192.168.1.199:/work/nfs_root/busybox1.7_fs.yaffs2
  2. nand erase root
  3. nand write.yaffs 0x30000000 0x260000 $(filesize)
  4. // write.yaffs:实现yaffs文件系统镜像的烧写, 如果NandFlash相应的区域有坏块,可以跳过坏块。

设置启动参数:

  1. set bootargs noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 init=/linuxrc console=ttySAC0
  2. save

启动内核:

5.制作烧写jffs2

  1. mkfs.jffs2 -n -s -e 128KiB -d busybox1.7_fs -o busybox1.7_fs.jffs2
  2. /*-n:表示每块不添加清除标记, -s:size一页大小为2k, -e:一块大小为128kb
  3. -d:制作的dir目录, -o:输出文件 */

进入uboot烧写:

  1. nfs 192.168.1.199:/work/nfs_root/busybox1.7_fs.jffs2
  2. nand erase root
  3. nand write.jffs2 0x30000000 0x260000 $(filesize)
  4. // write. jffs2 :和yffs原理一样

设置启动参数:

  1. set bootargs noinitrd root=/dev/mtdblock3 rootfstype=jffs2 init=/linuxrc console=ttySAC0
  2. save

启动内核:

6.通过uboot启动nfs系统
6.1 在内核documentation目录里找到nfsroot.txt文档
找到nfs服务器地址设置"nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]":

  • server-ip:    服务器(虚拟机)IP地址
  • root-dir:      nfs根目录位置
  • nfs-options:选项,默认可以不填

找到nfs客户端设置"ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>":

  • client-ip:  客户端(开发板)IP地址
  • server-ip:服务器(虚拟机)IP地址
  • gw-ip:      网关地址,一般都是192.168.1.1
  • netmask:  子网掩码,255.255.255.0
  • hostname:主机名,可以不填
  • device:      网卡设备,默认一个网卡就填eth0
  • autoconf:  自动连接,填off不自动连接

6.2 所以设置启动参数为

  1. set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.199:/work/nfs_root/busybox1.7_fs ip=192.168.1.198:192.168.1.199:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0

启动内核:

7.在内核里使用mount挂载nfs目录

  1. mount -t nfs -o nolock,vers= 192.168.1.199:/work/nfs_root /mnt
  2. //mount命令将远端虚拟机/work/nfs_root目录挂载到开发板/mnt目录里
  3. //nolock:禁用文件锁 vers=2:nfs版本协议2 192.168.1.199:虚拟机地址

运行出错:

找到原因是网卡没设置,输入mount前设置即可(也可以直接写入/etc/init.d/rcS):

  1. ifconfig eth0 up
  2. ifconfig eth0 192.168.1.198

8.如果mount挂载/启动nfs系统失败,那么有可能有下面两个原因
8.1 确定板子是否与虚拟机位于同一网段

  1. ifconfig eth0 up //开启网关0,连接网线到路由器
  2. ifconfig eth0 192.168.1.107 //设置ip,与虚拟机ip网段一样,
  3. ping 192.168.1.106 //与虚拟机ping一下,是否已通

8.2 确定虚拟机是否能被挂载目录
要使虚拟机能够被挂载目录,在/etc/exports中添加需要被挂载的目录即可
例如:

  1. sudo vi /etc/exports
  2. /work/nfs_root *(rw,sync,no_root_squash) //要被挂载的目录:/work/nfs_root
  3. sudo /etc/init.d/nfs-kernel-sever restart //然后输入命令重启nfs服务

详解-制作根文件系统,并使用yaffs,jffs,nfs挂载系统(2)的更多相关文章

  1. mkyaffs2image制作根文件系统、使用NFS挂载虚拟机目录(2)

    1.制作根文件系统及nfs烧写 1.1 先解压文件系统,/wok/nfs_root 目录下是已经构造好的各种文件系统:① fs_mini.tar.bz2 是最小的根文件系统,里面的设备节点是事先建立好 ...

  2. 通过busybox制作根文件系统

    通过busybox制作根文件系统可以自定义选项,在制作的根文件系统中添加需要的命令,指定生成的根文件系统到相应的目录下. 一. 根文件系统的获取方式--->官网: https://busybox ...

  3. 通过busybox制作根文件系统详细过程

    我在之前的uboot通过NFS挂载ubuntu根文件系统中也有实现过根文件系统的制作,那只是在ubuntu官网已经做好的根文件基础上安装一些自己所需的软解而已.而使用busybox制作根文件系统可以自 ...

  4. 如何将根文件系统制作成yaffs格式,并设置从yaffs启动

    1.利用mkyaffs2image 工具,将根文件系统打包成yaffs镜像包 mkyaffs2image-128M root_qtopia root_qtopia.img 2.设置uboot参数boo ...

  5. 使用Busybox-1.2.0制作根文件系统

    使用Busybox-1.2.0制作根文件系统 cross-3.3.2 make-3.8.1 STEP 1: 创建根文件系统目录,主要包括以下目录/bin,/etc,/dev,/mnt,/sbin,/u ...

  6. 利用busybox制作根文件系统

    实际项目中可以使用Buildroot制作根文件系统 1.busybox源码下载及配置 https://busybox.net/downloads/ 1.1.修改Makefile (1) ARCH = ...

  7. 第4阶段——制作根文件系统之分析init进程(2)

    本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3)  分析busybox中init进 ...

  8. 制作根文件系统之Busybox init进程的启动过程分析

    先来介绍一下什么是Busybox:它是将众多的UNIX命令集合进一个很小的可执行程序中. 在制作根文件系统之内核如何启动init进程中遗留了一个问题是/linuxrc是内核启动的第一个应用程序,那么它 ...

  9. 制作根文件系统之内核如何启动init进程

    start_kernel其实也是内核的一个进程,它占用了进程号0,start_kernel的内容简写如下: asmlinkage void __init start_kernel(void) //内核 ...

随机推荐

  1. UITableViewCell上放UICollectionView ,UICollectionViewCell无法复用bug

    如题: UITableViewCell上放UICollectionView ,UICollectionViewCell无法复用bug 如果UITableViewCell的size大于整个collect ...

  2. 凌华Express CVC D2550 Win7 64-bit无法正常关机的解决办法

    [问题现象]: 在Windows点击shutdown按钮后,显示器一直停在“正在关闭...”的界面上: 此时硬盘已经停止工作了: CPU没有发送S5信号,因此,主板上的电没有被切断: [解决办法]: ...

  3. 在Docker容器中搭建MXNet/Gluon开发环境

    在这篇文章中没有直接使用MXNet官方提供的docker image,而是从一个干净的nvidia/cuda镜像开始,一步一步部署mxnet需要的相关软件环境,这样做是为了更加细致的了解mxnet的运 ...

  4. Javascript高级编程学习笔记(37)—— DOM(3)Element

    Element类型 除了Document类型之外,Element类型应该就是web编程中最常用的类型了 Element类型主要用于表现XML.HTML元素,提供对元素标签名.子节点以及特性的访问 特性 ...

  5. Node.js(day1)

    一.什么是Node.js Node.js Everywhere 我们可以从官网的介绍来分析:node中文网 | node引文网 Node.js® 是一个基于 Chrome V8 引擎 的 JavaSc ...

  6. 《机器学习实战(基于scikit-learn和TensorFlow)》第六章内容学习心得

    本章讲决策树 决策树,一种多功能且强大的机器学习算法.它实现了分类和回归任务,甚至多输出任务. 决策树的组合就是随机森林. 本章的代码部分不做说明,具体请到我的GitHub上自行获取. 决策树的每个节 ...

  7. 页面css样式找不到问题

    出现了一个页面没有样式的问题: 问题: 1.路径不对, 可以打开页面f12看样式是否找到 检查路径是否正确. 2.样式没引全或者没引对. 查看引入的样式是否正确或缺少样式. 3.路径明明写对了却404 ...

  8. iOS学习——更改导航栏的返回按钮的标题与颜色

    转载自:修改navigationController返回按钮颜色和文字 今天在做项目时遇到这个问题,试了很多方法都失败了.最后终于找到正确的方案了,在这里分享给大家. 引言 在iOS开发过程中,Nav ...

  9. 请求被中止: 未能创建 SSL/TLS 安全通道

    出现“请求被中止: 未能创建 SSL/TLS 安全通道.”的问题. 在创建请求地址的前面加了这句代码就可以了 System.Net.ServicePointManager.SecurityProtoc ...

  10. 网站 HTTP 升级 HTTPS 完全配置手册

    网站 HTTP 升级 HTTPS 完全配置手册 今天,所有使用Google Chrome稳定版的用户迎来了v68正式版首个版本的发布,详细版本号为v68.0.3440.75,上一个正式版v67.0.3 ...