根目录&&根文件系统

根目录:倒立的目录树,在 Linux 中,所有的目录都属于根目录

根文件系统:挂载在根目录下面的文件系统

什么是根文件系统

根文件系统是 Kernel 启动后第一个加载的文件系统

根文件系统的作用

Kernel 启动后,总得先挂载一个文件系统,这样其它文件系统才能被挂载和使用。

所以,根文件系统,为其它文件系统提供挂载点,是一个载体。挂载点就是一个个目录。

根文件系统包含哪些内容

  • 基本的目录结构
  • 启动程序:init=/linuxrc
  • 配置文件

为什么要这样设计

  • 扩展性好,VFS 设计,
  • Linux 一切皆文件,为了让 Linux 完整地启动,进入一个可以让用户操作的环境

文件系统需要那些东西

  1. bootloader 使用命令行参数,告诉内核,根文件系统在什么地方;什么样的格式
  2. 告诉 Kernel 第一个启动的应用程序
  3. 基本目录
  4. 配置文件

怎样构建文件系统

从零开始

一、创建基本目录启动程序 linuxrc

$ mkdir mini_rootfs
$ cd mini_rootfs
$ mkdir bin dev etc lib proc usr var
$ ls
bin  dev  etc  lib  proc  usr  var

交叉编译一个 ARM 板可用的 busybox,这里为了简单直接从已有的 ARM 板系统中拷了一个

$ ln -sf bin/busybox linuxrc

二、搭建 NFS 服务器

ubuntu 16.04 nfs服务的搭建

三、ARM 板设置内核启动参数

setenv bootargs 'root=/dev/nfs nfsroot=192.168.31.228:/home/liyongjun/tmp/mini_rootfs ip=192.168.31.6 init=/linuxrc console=ttySAC0,115200'
saveenv
reset

四、重启报错

/init: line 103: can't open /r/dev/console: no such file
Kernel panic - not syncing: Attempted to kill init!

解决

sudo mknod console c 5 1

五、重启报错

switch_root: bad init /linuxrc: No such file or directory
Kernel panic - not syncing: Attempted to kill init!

解决

scp root@192.168.31.5:/lib/libcrypt.so.1 ./lib
scp root@192.168.31.5:/lib/libc.so.6 ./lib
scp root@192.168.31.5:/lib/libm.so.6 ./lib
scp root@192.168.31.5:/lib/ld-linux.so.3 ./lib

六、重启可进入系统,但报错且没有sh

can't run '/etc/init.d/rcS': No such file or directory

can't open /dev/tty3: No such file or directory

Please press Enter to activate this console. 
can't open /dev/tty2: No such file or directory

can't open /dev/tty4: No such file or directory


can't open /dev/tty4: No such file or directory

can't open /dev/tty2: No such file or directory

can't open /dev/tty3: No such file or directory


can't open /dev/tty3: No such file or directory

can't open /dev/tty4: No such file or directory

can't open /dev/tty2: No such file or directory

解决

$ ln -sf busybox sh
$ ln -sf busybox ls
$ ln -sf busybox cat
$ touch etc/init.d/rcS
$ chmod +x rcS
$ cd ../dev/
$ touch tty2 tty3 tty4

七、重启进入系统,有 sh

成功

rootfs-porting-OK

八、完善

$ ln -sf busybox rm
$ ln -sf busybox ifconfig
$ ln -sf busybox ping
$ ln -sf busybox route

参考

Linux内核及文件系统制作

ubuntu 16.04 nfs服务的搭建

玩转mini2440开发板之【使用nfs无法启动的问题(Virtualbox桥接网络)】

调试启动日志.txt