嵌入式笔记-----------LInux根文件系统的制作和nfs挂载制作好的根文件系统

时间:2022-09-08 18:55:37

开发环境:Ubantu11.04    arm-linux-gcc-4.3.2    ok6410开发板   busybox-1.10.3.tar

制作根文件系统:

1、安装 libncurses5-dev,这个程序库提供了文本选单界面如果没有安装的话则无法进入图形界面,联网安装是最方便的直接打命令即可:
         sudo apt-get install libncurses5-dev
2、拷贝 busybox 源代码 /work(自己创建的)目录下并且解压文件。tar -zxvf  busybox-1.10.3.tar

3、修改“/work/busybox-1.10.3”目录下的编译配置
在 Makefile 文件找到 ARCH 和 CROSS_COMPILE 修改成如下
ARCH ?= arm
CROSS_COMPILE  ?= arm-linux-
即将处理器改为 arm,将编译器设置为 arm-linux-gcc;
4、配置 busybox
(1)Linux 下打开命令终端,切换到“/work/busybox-1.10.3”目录,使用命令“make menuconfig”
按照以下选项进行配置:
设置 1:
Busybox Settings --->
Build Options --->
     [ ]Build BusyBox as a static binary     //不选此项进行动态编译。
Busybox Library Tuning --->
      [*] Support for /etc/networks
      [*] vi-style line editing commands
(15) History size //历史纪录长度
      [*] History saving
      [*] Tab completion //支持按下 Tab 自动补全
      [*] Username completion
      [*] Fancy shell prompts
设置 2:
Miscellaneous Utilities --->
     [ ]taskset   //不要选这一项,bug,选了就会出错!!!
设置 3:
Linux Module Utilities --->
     [ ] Support version 2.2.x to 2.4.x Linux kernels //不要选这一项
配置完成后,在主菜单里选择<Exit>退出并保存设置;

(再进行第5步时要安装交叉编译环境,否则无法顺利编译)

安装arm-linux-gcc-4.3.2方法:

下载安装包大约84M ,然后解压到根目录中,命令tar xvzf arm-linux-gcc-4.3.2.tgz -C /   然后以root身份进行配置,省得麻烦

注意以上命令必须要有-C而且是大写的后边有个空格也要注意然后配置下编译环境路径gedit /root/.bashrc等一会出来文本编辑器后在文件最后(最后一行)加上 下面代码     export PATH=/usr/local/arm/4.3.2/bin:$PATH   此时你可以在root用户下验证 arm-linux-gcc -v成功(注意必须得重新登录下)log out这个也是对profile进行配置



5、使用命令“make all install”进行编译,若无错误将在 busybox-1.10.3/_install 目录生成 bin,sbin ,usr 目录及 linuxrc 启动初始化程序;
(注:若进行了这步,还需修改第 4 步配置,先运行命令“make all uninstall”清除已生成的文件)
在“/work”目录下新建一目录 rootfs,将生成 bin sbin usr 目录及 linuxrc 启动初始化程序拷贝到新建的 rootfs 目录下(这个就是你自己制作的根文件系统的主目录了);
6、切换到“/work/rootfs”目录,分别使用以下命令创建其它目录;
mkdir dev etc home lib mnt proc sys tmp root
mkdir mnt/etc
mkdir usr/lib
7、拷贝依赖库到 lib 目录
(1)查看依赖库,切换到“/work/busybox-1.10.3/_install/bin”目录,使用命令
arm-linux-readelf -a ./busybox | grep "Shared library"查看需要哪些依赖库(其实不用看也无所谓)

这说明要使文件系统正常运行,需要最基本的库文件:libcrypt.so.1、libm.so.6、libc.so.6,
这些库文件位于“/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/”目录下;
(2)libcrypt.so.1、libm.so.6、libc.so.6 分别为 libcrypt-2.8.so、libm-2.8.so、libc-2.8.so
文件的软连接,将 libcrypt.so.1、libm.so.6、libc.so.6 和 libcrypt-2.8.so、libm-2.8.so、
libc-2.8.so 这 6 个文件拷贝到根文件系统的 lib 目录下(即“/work/rootfs/lib”;)
另外还需要拷贝动态加载器 ld-linux.so.3 和 ld-2.8.so 文件,与上步骤相同;
8、在根文件系统的 dev 目录下创建基本的设备文件
(1)切换到目录“/work/rootfs/dev”;
(2)用以下命令创建设备文件:
mknod console c 5 1
mknod null c 1 3
在 linux 系统启动时,dev 目录下必须要有 console 设备文件;
9、创建配置文件 rcS,是一个脚本文件,借助启动脚本可以设置各种程序开机后自动运行
(1)切换到目录“/work/rootfs/etc”;
(2)在 etc 目录下创建目录“init.d”;
(3)在 init.d 目录下创建文件 rcS,其内容如下;
#! /bin/sh
mount -a
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
之后执行命令 chmod +x rcS 将 rcS 文件变为可执行文件;
(其中:mount –a 为将 fstab 中的文件系统进行挂载,echo /sbin/mdev > /proc/sys/kernel/hotplug 为设置内核的 hotplug handler 为 mdev,即当设备热插拔时,由 mdev 接受来自内核的消息并作出相应,比如处理 U 盘的插拔,
mdev –s 为使用 mdev 机制(udev 的精简版)根据内核的驱动注册信息在“/dev”自动创建设备文件;)


10、创建配置文件 fstab,该文件定义了一些文件系统的挂载点
(1)切换到目录“/work/rootfs/etc”;
(2)创建文件 fstab,其内容如下;
proc      /proc   proc      defaults   0 0
mdev    /dev    ramfs    defaults   0 0
sysfs    /sys     sysfs     defaults   0 0
tmpfs   /tmp     tmpfs    defaults   0 0


即将 proc 文件系统挂载到/proc 目录,设备文件系统挂载到/dev 目录,sysfs 文件系统挂载到
/sys 目录,tmpfs 文件系统挂载到/tmp 目录;

11、创建配置文件 inittab;
(1)切换到目录“/work/rootfs/etc”
(2)创建文件 inittab,其内容如下;
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
其中含义见另外文章《根文件系统inittab》;
12、创建配置文件 mdev.conf,这是 mdev 的配置文件
(1)切换到目录“/work/rootfs/etc”;
(2)创建文件 mdev.conf,其内容为空;

ok!到此为止根文件系统制作完毕,开始挂载。

nfs  挂载步骤:

1.准备制作好的文件系统,本例中文件系统位于/work/rootfs,权限最好为755777

2.pc端安装nfs服务器:

apt-getinstall nfs-kernel-server

3.修改/etc/exports,在末尾添加:/work/rootfs  192.168.2.*(rw,sync,no_root_squash)

         ///work/rootfs服务器端共享目录

        //192.168.2.*允许访问nfs服务器共享目录的客户机的ip范围,可自定义

        //rw客户机对共享目录权限

        //sync同步写入存储器,可选

        //no_root_squash允许客户机享有主机root身份,可选

        //括号中的三个参数之间不可有空格

        ///work/rootfs192.168.2.*间有一个空格

4.重启nfs服务:

servicenfs-kernel-server restart

5.使以上设置生效:

exportfs–a

5.连好开发板与pc的网线

6.启动开发板,修改启动参数:setenvbootargs root=/dev/nfs nfsroot=192.168.2.1:/work/rootfsip=192.168.2.2:::::eth0 console=ttySAC0,115200

(注:192.168.2.1pcip(nfs server ip 地 址192.168.2.2为开发板ip ,  eth0前面是五个“:”,根 文 件 系 统 位 于/work/rootfs;   root=/dev/nfs 表示以 NFS 方式挂载根)

7.saveenv并且reset

8.更改pcip192.168.2.1   编辑链接选择有限链接-》编辑-》将方法改为手动,添加IP:192.168.2.1 子网掩码:255.255.255.0 -》保存

重启开发板即可进入到自己挂载的nfs文件系统中了!做完了!