超级详细讲解根文件系统rootfs的制作

超级详细讲解根文件系统rootfs的制作

文章目录

🌹1 下载工具☕2 构建目录🚀3 使用busybox4 🍎补全lib库5 🍏生成etc配置文件6 🍇修改 etc/init.d/rcS 文件🌸6.1.根据 fstab 配置文件挂载相应的文件系统🐟6.2.配置 telnetd 服务器的时候需要以下文件夹及文件系统🌺6.3.启动需要以下文件夹🐬6.4.在 lib 下创建相应文件夹(与当前内核版本相同),为驱动模块加载作准备👑6.5.自动在/dev 下创建设备节点

👏7 修改 etc/fstab 文件,填充以下内容🌹8 修改 profile☕9 用户名、密码文件创建💒10 根文件系统的烧写与验证11 使用uboot挂载根文件系统12 还原原始的根文件系统

🌹1 下载工具

busybox-1.21.1:或选用其他版本的 busybox,大同小异 下载地址:工具链接

☕2 构建目录

创建根文件系统目录,主要包括以下目录 /dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin /opt /sys /media 命令如下:

mkdir ~/rootfs

cd ~/rootfs

mkdir dev etc lib usr var proc tmp home root mnt bin sbin opt sys media

🚀3 使用busybox

解压 busubox 进入 busybox 目录,执行

make defconfig //使用默认配置 busybox,大部分的命令都会被选中 # 进入图形化配置页面,把下面的选项都勾上 make menuconfig Busybox Setting -----> Build Options ----->//选择将 busybox 进行静态编译,这样编译出来的 busybox 可以不依赖动态库 Busybox Library Tuning—> []Username completion []Fancy shell prompts [*]Query cursor position from terminal 保存退出

回到busybox目录下执行下面语句

make

make install

cp * ~/rootfs/ -arf

在 busybox 目录下cd 进入 _install 目录,里面有 bin sbin usr linuxrc 四个文件 将这三个目录或文件拷到第一步所建的 rootfs 文件夹下。

cp bin sbin usr linuxrc $HOME/rootfs -rfa

4 🍎补全lib库

找到你工具链中的lib目录拷贝到你的根文件目录中,我用的是arm-linux-gcc的lib

5 🍏生成etc配置文件

进入到 busybox-1.21.1下查找etc,并复制到你的根文件目录下 进入到etc/的inittab 删除第三行代码:tty2::askfirst:-/bin/sh

6 🍇修改 etc/init.d/rcS 文件

init 进程通过 inittab 启动的第一个进程为此脚本,我们需要做以下修改#!/bin/sh

🌸6.1.根据 fstab 配置文件挂载相应的文件系统

/bin/mount -a

🐟6.2.配置 telnetd 服务器的时候需要以下文件夹及文件系统

/bin/mkdir -p /dev/pts /bin/mkdir -p /dev/shm /bin/mount -t devpts devpts /dev/pts /bin/mount -t tmpfs tmpfs /dev/shm

🌺6.3.启动需要以下文件夹

/bin/mkdir /var/tmp /bin/mkdir /var/modules /bin/mkdir /var/run /bin/mkdir /var/log

🐬6.4.在 lib 下创建相应文件夹(与当前内核版本相同),为驱动模块加载作准备

if ! [ -d /lib/modules ]; then mkdir /lib/modules fi if ! [ -d /lib/modules/

(

u

n

a

m

e

r

)

]

;

t

h

e

n

m

k

d

i

r

/

l

i

b

/

m

o

d

u

l

e

s

/

(uname -r) ]; then mkdir /lib/modules/

(uname−r)];thenmkdir/lib/modules/(uname -r) fi

👑6.5.自动在/dev 下创建设备节点

/sbin/mdev -s

init.d/rsc文件下的编写

#! /bin/sh

/bin/mount-a

/bin/mkdir -p /dev/pts

/bin/mkdir -p /dev/shm

/bin/mount -t devpts devpts /dev/pts

/bin/mount -t tmpfs tmpfs /dev/shm

/bin/mkdir /var/tmp

/bin/mkdir /var/modules

/bin/mkdir /var/run

/bin/mkdir /var/log

if ! [ -d /lib/modules ]; then

mkdir /lib/modules

fi

if ! [ -d /lib/modules/$(uname -r) ]; then

mkdir /lib/modules/$(uname -r)

fi

/sbin/mdev -s

👏7 修改 etc/fstab 文件,填充以下内容

#device mount-point type options dump fask order

proc /proc proc defaults 0 0

ramfs /var ramfs defaults 0 0

ramfs /tmp ramfs defaults 0 0

none /sys sysfs defaults 0 0

none /dev ramfs defaults 0 0

🌹8 修改 profile

#1.初始化 PATH 环境变量及动态链接库路径

export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib

#2.初始化主机名以及当前工作路径

/bin/hostname qfedu

USER="`id -un`"

LOGNAME=$USER

HOSTNAME='/bin/hostname'

PS1='[\u@\h \W]#

☕9 用户名、密码文件创建

拷贝虚拟机上的/etc/passwd, /etc/group, /etc/shadow 到 rootfs/etc 下。

#cp /etc/passwd $HOME/rootfs/etc

#cp /etc/group $HOME/rootfs/etc

#cp /etc/shadow $HOME/ rootfs/etc

对以下三个文件修改,只保存与 root 相关的项(每个文件的第一行)只保留 passwd 第一行,为:

root:x:0:0:root:/root:/bin/sh

最后改成/bin/ash,PC 使用 bash 作为默认 shell,嵌入式系统不支持 bash,这里改为 sh 或 ash

只保留 group 第一行,为: root:x:0:root

只保留 shadow 第一行,为: root:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7::: (注意这个值不一定一样,各人密码不一样,这个值也不一样,这个的密码是六个1: 111111)这个文件在本地登录或者 ftp、telnet 登录时起作用

打开/etc/inittab 把第二行:::respawn:-/bin/sh 改为::respawn:-/bin/login //登录时需要用户名、密码验证 这样,以后登陆开发板时需输入用户名密码,同虚拟机相同 登陆后可以通过 passwd 命令修改密码或通过 adduser 增加新用户

这时我配置的结果

💒10 根文件系统的烧写与验证

根文件系统的挂载通常有两种方式,一种是直接烧尽Emmc里面,一种是通过NFS网络文件系统远程挂载,这里采用NFS挂载的方式进行验证 首先在Ubuntu下配置rootfs远程挂载 sudo gedit /etc/exports

输入/home/edu/rootfs *(rw,sync,no_root_squash,no_subtree_check) 重启NFS服务器:sudo /etc/init.d/nfs-kernel-server restart

11 使用uboot挂载根文件系统

启动开发板的uboot 执行以下命令:提供一个模板 模板: setenv bootargs root=/dev/nfs nfsroot=(虚拟机路径),rsize=1024,wsize=1024 ip=(开发板 iP):(服务器 ip):(网关):255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200

执行后用:saveenv保存,重新启动开发板查看是否进入你的根文件系统

这是我的挂载场景:

12 还原原始的根文件系统

执行下面两条语句并重启开发板

setenv bootargs root=/dev/mmcblk0p8 rw rootfstype=ext4 init=/linuxrc lcd=wy070ml tp=gslx680 saveenv

相关推荐