嵌入式Linux开发:本地挂载根文件系统
1. 前言
上篇文章介绍了根文件系统的制作与NFS网络挂载,这篇文章介绍内核如何从本地挂载根文件系统,完成系统启动。本地挂载一般用在产品发布的时候,本地挂载的操作也分为两种。
第一种: 在PC机上制作好文件映像rootfs.img
,然后利用uboot加载直接烧写到EMMC里。这种最方便,适合产品批量生产烧录。需要依赖官方的工具。当前用的开发板是友善之臂的Tiny4412,官方提供了分区工具,可以将SD卡分区,将制作好的内核、uboot、文件系统映像、配置脚本放在SD卡里,然后开发板选择SD卡启动,就可以通过uboot完成EMMC分区,文件系统格式化、文件系统解压拷贝过程,在LCD屏上还有执行的进度条。
第二种: 自己在uboot命令行对EMMC进行分区,然后拷贝文件系统到指定分区,再设置uboot环境变量完成挂载。这种可以了解整个挂载流程,对于学习来讲,非常适合。
下面分别介绍两种挂载方式的执行过程。
2. 本地挂载方式1
这种放需要准备一张SD卡,然后需要利用官方光盘里提供的分区工具,对SD卡进行分区,再将内核、uboot、文件系统映像文件拷贝到SD卡上,再修改配置文件,设置启动的系统为Linux系统。
根文件系统映像制作需要用到make_ext4fs
命令,这个工具在光盘里也有,是一个压缩包,解压到PC机Linux系统下就可以使用。
制作完成之后,将根文件系统拷贝到SD卡的image文件夹,与烧写安卓系统一样进行烧写。
说明:其中的zImage文件是可以自己编译替换掉的。
配置内核:
# cp tiny4412_linux_defconfig .config
制作根文件系统的方式:
make_ext4fs -s -l <文件系统映像的大小> <生成的映像文件名称> <根文件系统存放的目录>
示例:
make_ext4fs -s -l 500M rootfs.img rootfs
如果不知道rootfs
文件系统的大小,可以使用du
命令进行查看。 例如:du rootfs -h
注意:在制作根文件系统映像包的时候,需要先将rootfs/dev
目录下的所有文件全部删除掉。
注意: 运行make_ext4fs
命令需要使用超级用户身份,否则会导致文件系统制作之后无法加载。
如果是普通用户身份登录系统,在执行命令时,加上sudo
即可。
示例:
sudo make_ext4fs -s -l 500M rootfs.img rootfs
[wbyq@wbyq work]$ sudo linux_tools/local/bin/make_ext4fs -s -l 500M rootfs.img rootfs/
[sudo] password for wbyq:
Creating filesystem with parameters:
Size: 524288000
Block size: 4096
Blocks per group: 32768
Inodes per group: 8000
Inode size: 256
Journal blocks: 2000
Label:
Blocks: 128000
Block groups: 4
Reserved block group size: 31
Created filesystem with 5534/32000 inodes and 51924/128000 blocks
3. 本地挂载方式2
在完成当前介绍的挂载方式2,需要先完成NFS网络挂载才可以继续,大致的思路就是:
(1)先将uboot、内核拷贝到开发板EMMC
(2)进入到uboot命令行,对EMMC进行分区,格式化文件系统。
(3)配置uboot环境变量,设置文件挂载挂载为NFS网络挂载,最后成功进入到命令行终端,然后将某个EMMC分区挂载到文件系统目录下,将根文件系统压缩包解压到这个目录,最后重启开发板进入到uboot命令行再次修改环境变量,设置uboot从刚才解压文件系统的分区启动,重启开发板,最后完成挂载。
接下来就详细的完成上面说的步骤:
(1)对EMMC进行分区安装文件系统 在uboot命令行执行以下代码。注意: 当前是从SD卡启动。
TINY4412 # fdisk -c 1 1024 1024 1024
TINY4412 # ext2format mmc 1:2
(2)打包PC机的rootfs文件系统
[wbyq@wbyq work]$ sudo tar cvf rootfs.tar rootfs
[wbyq@wbyq work]$ mv rootfs.tar rootfs/
(3)使用NFS方式挂载解压文件系统到EMMC指定分区 以下命令是挂载NFS文件系统之后,进入到Linux命令行执行。注意: 当前是从SD卡启动
[root@wbyq ]# rm /dev/*
[root@wbyq ]# mdev -s
[root@wbyq ]# mount /dev/mmcblk1p2 /mnt/
[root@wbyq ]# cd /mnt/
[root@wbyq mnt]# tar xvf /rootfs.tar
[root@wbyq mnt]# mv rootfs/* ./
[root@wbyq ]# umount /mnt/
(4)切换成EMMC方式启动设置UBOOT环境变量 以下命令在UBOOT命令行执行。
TINY4412 # setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext2 init=/linuxrc console=ttySAC0 lcd=S702
TINY4412 # saveenv
TINY4412 # reset
(5)本地方式下,使用NFS方式挂载NFS服务器的目录实现文件共享
[root@wbyq ]# ifconfig eth0 192.168.10.123
[root@wbyq ]# mount -t nfs -o nolock 192.168.10.11:/home/wbyq/project
把PC机文件拷贝到开发板上的方式:
(1). SD卡或者U盘拷贝 (2). NFS网络方式 (3). 串口传输
推荐阅读
-
紧急模式问题处理 - 图 1 紧急模式 根本原因分析 应急模式提供了尽可能小的环境,即使无法进入应急模式,也可以在其中修复系统。在应急模式下,系统只安装根文件系统供读取,不尝试安装任何其他本地文件系统,不激活网络接口,只启动一些基本服务。 进入应急模式的原因通常是 /etc/fstab 文件中存在错误,导致文件系统挂载失败。 文件系统中存在错误,导致。 约束和限制 本节适用于 Linux 操作系统紧急模式。程序涉及修复文件系统。修复文件系统有丢失数据的风险,因此请先备份数据,然后再执行修复操作。 处理方法 输入根密码,然后进入修复模式。 在应急模式下,根分区以只读模式挂载。要修改根目录中的文件,需要执行以下命令以读写模式重新挂载根分区。# mount -o rw,remount / 请执行以下命令首先检查 fstab 文件是否有误,然后尝试挂载所有未挂载的文件系统。# mount -a 如果挂载点不存在,请创建一个挂载点。 如果不存在此类设备,请注释或删除挂载行。 如果指定了不正确的挂载选项,请将挂载参数更改为正确的参数。 如果没有发生错误,但出现 UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY 消息(通常是由文件系统错误引起的),请跳至第 7 步。 执行以下命令打开 /etc/fstab 以修改相应的错误。# vi /etc/fstab /etc/fstab 文件包含以下字段,以空格分隔:[文件系统] [dir] [type] [options] [dump] [fsck] 表 1 /etc/fstab 参数 说明 参数 说明 [文件系统] 要挂载的分区或存储设备。 文件系统]列建议以 UUID 的形式写入。执行 blkid 命令可查询设备文件系统 UUID。 参考格式如下: # <device> <dir> <type> <options> <dump> <fsck>; UUID=b411dc99-f0a0-4c87-9e05-184977be8539 /home ext4 defaults 0 2 使用 UUID 的好处是,它们与磁盘顺序无关。如果你在 BIOS 中更改了存储设备的顺序,或重新插入了存储设备,或者因为某些 BIOS 可能会随机更改存储设备的顺序,那么使用 UUID 会更有效率。 [文件系统] 文件系统]的挂载位置。 类型 挂载设备或分区的文件系统类型,支持多种不同的文件系统:ext2、ext3、ext4、reiserfs、xfs、jfs、smbfs、iso9660、vfat、ntfs、swap 和 auto。 设置为自动类型后,挂载命令会猜测所使用的文件系统类型,这对 CDROM 和 DVD 等移动设备非常有用。 选项 挂载时要使用的参数,有些参数是特定文件系统特有的。例如,默认值参数使用文件系统的默认挂载参数,ext4 的默认参数为:rw、suid、dev、exec、auto、nouser、async。 有关更多参数,请执行以下命令查看 man 手册:# man mount
-
深入解析Linux根文件系统的挂载过程
-
在Linux系统中,了解如何制作和挂载根文件系统rootfs的基本操作
-
嵌入式Linux开发:本地挂载根文件系统
-
使用NFS网络挂载进行嵌入式Linux开发的根文件系统
-
原标题:探索嵌入式 Linux 根文件系统:原理及制作方法 :深入嵌入式 Linux 根文件系统:了解原理与制作方法
-
制作busybox根文件系统以进行嵌入式Linux开发
-
构建ARM Debian根文件系统:嵌入式Linux开发中的重要步骤
-
嵌入式Linux根文件系统(一)的简要介绍
-
构建嵌入式Linux的最小根文件系统及相关运行库Busybox和libc