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

(init 进程需要)

  1. 打开终端: /dev/console, /dev/NULL
    不设置 inittab 格式中的 id(标准输入、输出和标准错误)时,就定位到 /dev/NULL 中去。
  2. /sbin/init(init 程序):它本身就是 busybox .
  3. /etc/inittab:需要配置文件
    配置文件若指定了某些应用程序或执行脚本–这些必须存在,不存在会有默认的。
  4. 应用程序需要的库(printf,fopen、 fwrite 等函数需要库函数) 。

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

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

  1. 看ubuntu上这两个设备文件
  2. 在嵌入式文件系统上创建
book@www.100ask.org:~/nfs_root/fs_mini$ mkdir dev                       //创建dev目录
book@www.100ask.org:~/nfs_root/fs_mini$ ls
bin  dev  linuxrc  sbin  usr
book@www.100ask.org:~/nfs_root/fs_mini$ cd dev/
book@www.100ask.org:~/nfs_root/fs_mini/dev$ sudo mknod console c 5 1       //创建设备节点 //节点名称:console//字符型设备:c//主设备号:5//次设备号:1
book@www.100ask.org:~/nfs_root/fs_mini/dev$ sudo mknod null c 1 3

2 /sbin/init(init 程序)

已经具备了该程序:

3. /etc/inittab配置文件

book@www.100ask.org:~/nfs_root/fs_mini$ mkdir etc                               //创建etc文件夹
book@www.100ask.org:~/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 是本来是个链接文件,则也保持是个链接文件。不然就拷贝成了真正的文件,这样会很大。

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

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

  1. 制作/使用yaffs文件系统映像文件使用该工具yaffs_source_util_larger_small_page_nand.tar.bz2(可以支持nand512page也可以支持nand2048page)。
    解压缩该工具之后进入目录:/Development_util_ok/yaffs2/utils执行make命令,编译出下列工具。后面主要使用mkyaffs2image

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

  3. 创建文件系统映像
    回到创建的嵌入式文件系统目录:~/nfs_root/
    输入命令:mkyaff2image查看该命令的用法;

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

  4. 烧写映像fs_mini.yaffs2
    (1)开发板上电进入uboot目录后输入y

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

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

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

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

# cat /etc/inittab
# /etc/inittab
ttySAC0::askfirst:-/bin/sh
  1. bootargs设置默认值
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200

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

  1. 支持PS命令

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

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

mkdir proc
mount -t proc none /proc
ps

下图中PID表示进程号;

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

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

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

  1. 如何支持PS命令(方法1)
    (1)我们需要自动挂载以上PROC,所以需要编译inittab文件,让配置文件要求内核自动执行一个脚本:vim /etc/inintab

    (2)创建/etc/init.d/rcS文件,给rcS文件添加可执行属性
    rcS文件内容如下图:即要求内核执行下图命令

  2. 如何支持PS命令(方法2)
    (1)rcS文件内容还可以修改为:mount -a
    含义:读出/etc/fstab文件内容,根据该内容挂载文件系统
    (2)/etc/fstab文件格式讲解

#device  mount-point type    options     dump    fsck    order
proc    /proc       proc    defaults    0       0


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

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

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

其中,[2] echo /bin/mdev > /proc/sys/kernel/hotplug表示热插拔,当动态加载某个驱动或者插入U盘的时候内核自动调用/proc/sys/kernel/hotplug程序;
[3]mdev -s表示把内核中现有的驱动节点全部创建出来;

  1. 查看效果
    (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服务器上的文件,在客户端端看起来,就像访问本地文件一样。

  1. 设置ubuntu服务器和开发板的网段为同一个网段:
    ubuntu ip地址:192.168.8.201
    开发板ip地址:ifconfig eth0 192.168.8.210
    开发板可以ping通ubuntu

  2. 使用命令挂接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

  3. 直接从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节_构建根文件系统之构建根文件系统相关推荐

  1. 韦东山老师的单片机核心课程学习笔记(二)

    上一节课学习了单片机的微控制单元的组成,那么怎么使用这个为控制单元呢 首先我们需要一个类似于Hello,World!的入门课程,在单片机里这个入门课是:点亮一个led灯 想要利用单片机点亮一个LED灯 ...

  2. 韦东山老师的单片机核心课程学习笔记(三)

    ARM芯片的那些事 ARM架构 ARM的芯片都使用的同一种架构,这种架构可使CPU只与内部地址空间通信,而不用考虑与芯片外设直接的通信方式. 其通信架构图如下图所示: 图中的内存,UART,USB控制 ...

  3. 韦东山老师的单片机核心课程学习笔记(一)

    MCU是将CPU,RAM,FLASH等器件集成在一起的微控制单元 对于不同的嵌入式系统支持很多不同的启动方式,主要可分为XIP设备启动和非XIP设备启动等. XIP设备启动:是系统上电之后CPU执行的 ...

  4. Linux内核设计与实现学习笔记目录

    **注:**这是别人的笔记,我只是把目录抄过来 <Linux内核设计与实现学习笔记> 1.<Linux内核设计与实现>读书笔记(一)-内核简介 2.<Linux内核设计与 ...

  5. Bootstrap学习笔记02【全局CSS样式、组件和插件、案例_黑马旅游网_首页】

    Java后端 学习路线 笔记汇总表[黑马程序员] Bootstrap学习笔记01[快速入门.栅格布局][day01] Bootstrap学习笔记02[全局CSS样式.组件和插件.案例_黑马旅游网][d ...

  6. s5pv210 linux内核移植,S5PV210(TQ210)学习笔记——内核移植与文件系统构建之二

    由于之前做过2440和6410,鉴于时间原因,这里暂时跨过其他模块的裸机驱动和uboot移植,直接进入内核移植及驱动开发方面的学习. 三 设置uboot启动参数 我的nfs根目录为/nfsroot,我 ...

  7. 中根遍历二叉查找树所得序列一定是有序序列_数据结构考研学习笔记(九)树、森林...

    点击上面蓝字关注我们 树.森林 1. 树的存储结构 1.1 双亲表示法 1.2 孩子表示法 1.3 孩子兄弟表示法 2. 树. 森林与二叉树的转换 3. 树和森 林的遍历 4. *书的应用-并查集 1 ...

  8. Linux内核模块反编译,内核oops错误调试学习笔记

    驱动开发中遇到的 oops 问题,导致内核崩溃,log 一般如下形式 Unable to handle kernel paging request at virtual address bfb10be ...

  9. [文件系统]文件系统学习笔记(十)---杂项

    1,在一个系统上,比如smartphone平台,有很多分区,比如/data和/system分区都是ext4文件系统,但是系统中还是只有一个file_system_type的成员,不过每个分区对应的ex ...

最新文章

  1. 自动驾驶中基于激光雷达的车辆道路和人行道实时检测(代码开源)
  2. keras构建前馈神经网络(feedforward neural network)进行分类模型构建基于早停法(Early stopping)
  3. linux搭建markdown服务,Markdown新手快速入门基础教程及Ubuntu下的安装
  4. 超级干货:关于数据中台的深度思考与总结
  5. 自动化运维之PSSH
  6. 《构建之法》阅读第四章、第十七章收获
  7. Java EE启示录
  8. Makefile中 变量赋值含义
  9. AlphaFold 和 AI 蛋白质折叠革命的下一步是什么
  10. 从零开始自学c语言,从零开始学习C语言
  11. python 函数内部声明全局变量
  12. 1636: Pascal山脉
  13. Kubectl merge kubeconfig.yml 文件
  14. 国军标GJB150.8A-2009淋雨试验第三方检测机构
  15. coreseek mysql.sock_coreseek配置
  16. 太牛了!阿里p8全面透彻剖析《Netty权威指南》,程序员必看!
  17. 中科易安:公安对接流动人口管理智能锁需要联网吗?
  18. 平面向量内积坐标公式推导_平面向量内积的坐标运算与距离公式
  19. 破立之间:金融科技时代的普惠新机会、新挑战
  20. python列举字符串的五种常用方法_python中字符串、列表、元组、字典每个常用的5个方法...

热门文章

  1. HTML烟花特效,除夕快到了,把它收藏下来,过年和最重要的她一起看烟花。
  2. 成大事的男人应该具备的八种气质
  3. FL Studio for 21 Windows版 Producer Edition v21.0.3 Build 3517官方中文免费终极解锁版下载
  4. 游戏安全反外挂-64驱动
  5. 适用于 Windows 的几个不错的 PDF 转换器
  6. python函数定义的语法形式_Python函数(函数定义、函数调用)使用详解
  7. 网络安全-webshell详解(原理、攻击、检测与防御)
  8. 【第七篇】商城系统-商品发布-SKU和SPU管理
  9. OpenglEs之三角形绘制
  10. vue webpack优化之HappyPack 实战