第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 韦东山uboot_内核_根文件系统学习笔记4.4-第004课_根文件系统-第004节_构建根文件系统

韦东山uboot_内核_根文件系统学习笔记4.4-第004课_根文件系统-第004节_构建根文件系统

时间:2019-02-08 19:07:25

相关推荐

韦东山uboot_内核_根文件系统学习笔记4.4-第004课_根文件系统-第004节_构建根文件系统

一 最小的根文件系统需要的项(笔记4.1 4.2小结)

(init 进程需要)

打开终端: /dev/console, /dev/NULL

不设置 inittab 格式中的 id(标准输入、输出和标准错误)时,就定位到 /dev/NULL 中去。/sbin/init(init 程序):它本身就是 busybox ./etc/inittab:需要配置文件

配置文件若指定了某些应用程序或执行脚本–这些必须存在,不存在会有默认的。应用程序需要的库(printf,fopen、 fwrite 等函数需要库函数) 。

根据以上总结的需求进行构建“最小根文件系统”

1 创建设备文件:/dev/console, /dev/NULL

看ubuntu上这两个设备文件

在嵌入式文件系统上创建

book@:~/nfs_root/fs_mini$ mkdir dev//创建dev目录book@:~/nfs_root/fs_mini$ lsbin dev linuxrc sbin usrbook@:~/nfs_root/fs_mini$ cd dev/book@:~/nfs_root/fs_mini/dev$ sudo mknod console c 5 1 //创建设备节点 //节点名称:console//字符型设备:c//主设备号:5//次设备号:1book@:~/nfs_root/fs_mini/dev$ sudo mknod null c 1 3

2 /sbin/init(init 程序)

已经具备了该程序:

3. /etc/inittab配置文件

book@:~/nfs_root/fs_mini$ mkdir etc//创建etc文件夹book@:~/nfs_root/fs_mini/etc$ vim inittab//创建inittab文件

输入inittab文件的内容:如下图。最简单的配置文件,仅执行-/bin/sh程序。这表示它里面只执行一个 askfirst 的/bin/sh 程序, /bin/sh 这个程序的标准输入、输出和标准错误都定位到“/dev/console”里面去。

4 .应用程序需要的c库

之前制作交叉工具链的时候已经生成glibc库,可以直接使用它来构建根文件系统。下图就是glibc库文件:

这些库文件中有一些是链接-指向另外一个文件,例如下图ld-linux.so.2

.so文件:动态库文件,比如动态数学库libm.so/动态C++库libstdc++.so等。编译动态库时会用到这些文件,但是不会链接它们,运行时才会链接。

在拷贝的时候需要将目录下所有 .so 文件拷贝过来即可。 -d 是本来是个链接文件,则也保持是个链接文件。不然就拷贝成了真正的文件,这样会很大。

以上制作完成最小根文件系统。

二 如何把根文件系统烧写到开发板

制作/使用yaffs文件系统映像文件使用该工具yaffs_source_util_larger_small_page_nand.tar.bz2(可以支持nand512page也可以支持nand2048page)。

解压缩该工具之后进入目录:/Development_util_ok/yaffs2/utils执行make命令,编译出下列工具。后面主要使用mkyaffs2image

mkyaffs2image拷贝到ubuntu的系统目录并添加可执行属性:

创建文件系统映像

回到创建的嵌入式文件系统目录:~/nfs_root/

输入命令:mkyaff2image查看该命令的用法;

输入命令:mkyaffs2image fs_mini fs_mini.yaffs2生成名字为fs_mini.yaffs2的映像文件。

烧写映像fs_mini.yaffs2

(1)开发板上电进入uboot目录后输入y

(2)打开dnw软件进行烧写

查看开发板启动过程

问题:按照上面的步骤制作的文件系统提示下图错误,重新尝试过几次均无效,该错误后面再解决吧…

正常启动后应当为下图的效果

查看该文件系统中的etc/inittab文件:

# cat /etc/inittab# /etc/inittabttySAC0::askfirst:-/bin/sh

bootargs设置默认值

bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200

三 完善根文件系统1-支持PS命令

支持PS命令

PS命令:要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令就是最基本进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到。ps是显示瞬间进程的状态,并不动态连续;如果想对进程进行实时监控应该用top命令。

该命令需要内核提供的虚拟文件系统PROC,那么需要首先内核加载起来该文件系统。

mkdir procmount -t proc none /procps

下图中PID表示进程号;

进入进程号为1的进程中查看:

查看进程号为1的文件夹中fd的属性如下图:都指向/dev/console

0 -> /dev/console//表示标准输出1 -> /dev/console//表示标准输入2 -> /dev/console//表示标准错误

如何支持PS命令(方法1)

(1)我们需要自动挂载以上PROC,所以需要编译inittab文件,让配置文件要求内核自动执行一个脚本:vim /etc/inintab

(2)创建/etc/init.d/rcS文件,给rcS文件添加可执行属性

rcS文件内容如下图:即要求内核执行下图命令

如何支持PS命令(方法2)

(1)rcS文件内容还可以修改为:mount -a

含义:读出/etc/fstab文件内容,根据该内容挂载文件系统

(2)/etc/fstab文件格式讲解

#devicemount-pointtypeoptionsdumpfsckorderproc/procprocdefaults 00

查看效果:

查看当前已经挂载的文件系统,如下图:已经挂载了yaffs文件系统,rootfs根文件系统,proc虚拟文件系统

四 完善根文件系统2-mdev使用(参见P355)

udev:自动创建/dev/设备节点;mdev:udev的简化版本,通过读取内核信息来创建设备文件。用法参见:busybox-1.7.0/doc/mdev.txt文件。

具体操作步骤

其中,[2] echo /bin/mdev > /proc/sys/kernel/hotplug表示热插拔,当动态加载某个驱动或者插入U盘的时候内核自动调用/proc/sys/kernel/hotplug程序;

[3]mdev -s表示把内核中现有的驱动节点全部创建出来;

查看效果

(1)dev目录下出现了很多设备节点,这些就是mdev自动创建的节点

(2)查看装载的文件系统

五 使用其他文件系统-jffs2(参见P360)

jffs2:一般用于nor flash上,那么我们目前把它用到nand flash上。

./configure --shared --prefix=/usr 配置信息

–shared表示编译成动态库

–prefix=/usr表示安装到/usr目录下

sudo make install表示安装到系统目录

注意:使用不同的flash修改修改对应的参数

-s 512修改为-s 2048

-e 16KiB修改为-e 128KiB

查看效果:

六 使用其他文件系统-网络文件系统NFS

开发阶段经常使用网络文件系统进行程序调试

NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过网络共享资源。将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,在客户端端看起来,就像访问本地文件一样。

设置ubuntu服务器和开发板的网段为同一个网段:

ubuntu ip地址:192.168.8.201

开发板ip地址:ifconfig eth0 192.168.8.210

开发板可以ping通ubuntu

使用命令挂接NFS的前提条件

(1)ubuntu服务器允许某个目录被挂载

编辑Ubuntu服务器对应文件:sudo vim /etc/exports

重新启动Ubuntu的nfs服务:

尝试一下ubuntu自己挂载自己的nfs目录:sudo mount -t nfs 192.168.8.201:/home/book/nfs_root/fs_mini1 /mnt

(2)单板去挂载

单板挂载命令:mount -t nfs -o nolock 192.168.8.201:/home/book/nfs_root/fs_mini1 /mnt

直接从NFS启动开发板

(1)uboot修改环境变量

bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200修改为bootargs=noinitrd root=/dev/nfs nfsroot=192.168.8.201:/home/book/nfs_root/fs_mini1 ip=192.168.8.210:192.168.8.1:255.255.255.1:eth0:off init=/linuxrc console=ttySAC0,115200

(2)NFS启动参数:服务器IP/挂载目录/开发板的IP

查找说明文档:linux-2.6.22.6\Documentation\nfsroot.txt那么查到参数为

nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>

说明:中括号[]表示的参数可以省略;尖括号<>表示的参数不可省略

说明文档中有用法的解释,这里就不截图了。

韦东山uboot_内核_根文件系统学习笔记4.4-第004课_根文件系统-第004节_构建根文件系统之构建根文件系统

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。