欢迎来到致知知识服务平台!

请登录 免费注册

服务热线:13164506307

当前位置:首页 > 编程/算法实现 > 其它-2

从 0 到 1 带你制作 Linux 根文件系统

Linux 根文件系统

价格 50
评分 5.0 (0人评分) 销量: 收藏商品
数量
加入购物车 购买服务
服务详情

根目录&&根文件系统

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

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

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

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

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

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

为什么要这样设计

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

文件系统需要那些东西

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

怎样构建文件系统

从零开始

一、创建基本目录和启动程序 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

成功

null

rootfs-porting-OK

八、完善

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

 

服务评价

综合得分 5.0

服务态度: 5

工作速度: 5

完成质量: 5

(0人评论)