根文件系统一般也叫做 rootfs
以下内容部分参考正点原子。
操作系统:Ubuntu 16
交叉编译工具:gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf
BusyBox版本:1.29.0.
使用平台,正点原子开发板 ALPHA V2.2

1、/bin 目录
看到“bin”大家应该能想到 bin 文件,bin 文件就是可执行文件。所以此目录下存放着系统
需要的可执行文件,一般都是一些命令,比如 ls、mv 等命令。此目录下的命令所有的客户都可
以使用。
2、/dev 目录
dev 是 device 的缩写,所以此目录下的文件都是和设备有关的,此目录下的文件都是设备
文件。在 Linux 下一切皆文件,即使是硬件设备,也是以文件的形式存在的,比如
/dev/ttymxc0(I.MX6ULL 根目录会有此文件)就表示 I.MX6ULL 的串口 0,我们要想通过串口 0
发送或者接收数据就要操作文件/dev/ttymxc0,通过对文件/dev/ttymxc0 的读写操作来实现串口
0 的数据收发。
3、/etc 目录
此目录下存放着各种配置文件,大家可以进入 Ubuntu 的 etc 目录看一下,里面的配置文件
非常多!但是在嵌入式 Linux 下此目录会很简洁。
4、/lib 目录
lib 是 library 的简称,也就是库的意思,因此此目录下存放着 Linux 所必须的库文件。这些
库文件是共享库,命令和用户编写的应用程序要使用这些库文件。
5、/mnt 目录
临时挂载目录,一般是空目录,可以在此目录下创建空的子目录,比如/mnt/sd、/mnt/usb,
这样就可以将 SD 卡或者 U 盘挂载到/mnt/sd 或者/mnt/usb 目录中。
6、/proc 目录
此目录一般是空的,当 Linux 系统启动以后会将此目录作为 proc 文件系统的挂载点,proc
是个虚拟文件系统,没有实际的存储设备。proc 里面的文件都是临时存在的,一般用来存储系
统运行信息文件。
7、/usr 目录
要注意,usr 不是 user 的缩写,而是 Unix Software Resource 的缩写,也就是 Unix 操作系统
软件资源目录。这里有个小知识点,那就是 Linux 一般被称为类 Unix 操作系统,苹果的 MacOS
也是类 Unix 操作系统。关于 Linux 和 Unix 操作系统的渊源大家可以直接在网上找 Linux 的发
展历史来看。既然是软件资源目录,因此/usr 目录下也存放着很多软件,一般系统安装完成以
后此目录占用的空间最多。
8、/var 目录
此目录存放一些可以改变的数据。
9、/sbin 目录
此目录页用户存放一些可执行文件,但是此目录下的文件或者说命令只有管理员才能使用,
主要用户系统管理。
10、/sys 目录
系统启动以后此目录作为 sysfs 文件系统的挂载点,sysfs 是一个类似于 proc 文件系统的特
殊文件系统,sysfs 也是基于 ram 的文件系统,也就是说它也没有实际的存储设备。此目录是系
统设备管理的重要目录,此目录通过一定的组织结构向用户提供详细的内核数据结构信息。
11、/opt
可选的文件、软件存放区,由用户选择将哪些文件或软件放到此目录中。
关于 Linux 的根目录就介绍到这里,接下来的构建根文件系统就是研究如何创建上面这些子目
录以及子目录中的文件。
下面我们开始使用 BusyBox 进行构建根文件系统
我这里使用的是
busybox-1.29.0.tar.bz2
拿到busybox-1.29.0.tar.bz2后解压文件

tar -vxjf busybox-1.29.0.tar.bz2

最后得到

busybox 中文字符支持
修改 busybox 源码,取消 busybox 对中文显示的限制,打开文件 busybox-
1.29.0/libbb/printable_string.c,找到函数 printable_string,缩减后的函数内容如下

const char* FAST_FUNC printable_string(uni_stat_t *stats, const char *str)
{char *dst;const char *s;s = str;while (1) {unsigned char c = *s;if (c == '\0') {/* 99+% of inputs do not need conversion */if (stats) {stats->byte_count = (s - str);stats->unicode_count = (s - str);stats->unicode_width = (s - str);}return str;}if (c < ' ')break;/*   if (c >= 0x7f)break;*/s++;}#if ENABLE_UNICODE_SUPPORTdst = unicode_conv_to_printable(stats, str);
#else{char *d = dst = xstrdup(str);while (1) {unsigned char c = *d;if (c == '\0')break;/*    if (c < ' ' || c >= 0x7f)*/if(c < ' ')*d = '?';d++;}if (stats) {stats->byte_count = (d - dst);stats->unicode_count = (d - dst);stats->unicode_width = (d - dst);}}
#endifreturn auto_string(dst);
}

接着打开文件 busybox-1.29.0/libbb/unicode.c
找到 unicode_conv_to_printable2 这个函数更改这两处

下面就是配置了

make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm defconfig
make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm menuconfig

找到
Location:
-> Settings
-> Build static binary (no shared libs)
确保该项没有选中


Location:
-> Settings
-> vi-style line editing commands
选中该项

Location:
-> Linux Module Utilities
-> Simplified modutils
默认会选中“Simplified modutils”,这里我们要取消勾选!!

Location:
-> Linux System Utilities
-> mdev (16 kb) //确保下面的全部选中,默认都是选中的

最后就是使能 busybox 的 unicode 编码以支持中文,配置路径如下:
Location:
-> Settings
-> Support Unicode //选中
-> Check $LC_ALL, $LC_CTYPE and $LANG environment variables //选中


最后 退出 保存!
开始编译。

make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm


编译完成
下面将编译结果保存到我们所需的目录

make  install CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm CONFIG_PREFIX=/home/dwh/linux/nfs/rootfs


编译完成以后会在 busybox 的所有工具和文件就会被安装到 rootfs 目录中,内容如图所示。

下面开始完善根文件系统
向lib添加库文件
首先建一个lib目录
进入到交叉编译器的目录复制库文件到根文件系统

mkdir lib
cd /usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/
cp cp *so* *.a /home/dwh/linux/nfs/rootfs/lib/ -d

因为 ld-linux-armhf.so.3文件是个链接文件 因此我们要删掉它,并且重新复制该文件

rm ld-linux-armhf.so.3
cp ld-linux-armhf.so.3 /home/dwh/linux/nfs/rootfs/lib

然后进入/usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib目录

cd /usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib
cp *so* *.a /home/dwh/linux/nfs/rootfs/lib/ -d

然后向 usr/lib目录添加文件
首先先创建一个目录

mkdir /usr/lib
cd /usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib
cp *so* *.a /home/dwh/linux/nfs/rootfs/usr/lib/ -d

接着创建别的目录

mkdir dev
mkdir proc
mkdir mnt
mkdir sys
mkdir tmp
mkdir root
mkdir etc

添加 rcS文件
创建/etc/init.d/rcS
在etc/init.d/rcS下写入

 #!/bin/shPATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATHmount -a
mkdir /dev/pts
mount -t devpts devpts /dev/ptsecho /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

创建/etc/fstab 文件
添加以下代码

# <file system> <mount point> <type> <options> <dump> <pass>
proc            /proc proc    defaults    0     0tmpfs            /tmp tmpfs   defaults    0     0sysfs            /sys sysfs    defaults    0    0

创建创建/etc/inittab 文件
添加以下代码

#etc/inittab::sysinit:/etc/init.d/rcSconsole::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

下面我们开始测试文件系统。
我们使用网络挂载的方式
在uboot启动时设置命令

setenv bootargs 'console=ttymxc0,115200 rw root=/dev/nfs nfsroot=192.168.0.9:/home/dwh/linux/nfs/rootfs ip=192.168.0.20:192.168.0.9:192.168.0.1:255.255.255.0::eth0:off'
saveenv

最后成功进入文件系统,大功告!

Linux 根文件系统构建相关推荐

  1. 构建基本的嵌入式Linux根文件系统

    构建基本的嵌入式Linux根文件系统 其实在去年8月份我做系统移植时就构建好了一个可以用的根文件系统,但是那时是跟着别人的<Linux全线移植文档>做的.有些东西我也不清楚,只是跟着做,做 ...

  2. linux系统根文件系统构建

    根文件系统构建 一.根文件系统简介 根文件系统是 Linux 内核启动以后挂载(mount)的第一个文件系统, 从根文件系统中读取初始化脚本,比如 rcS,inittab 等. 根文件系统和 Linu ...

  3. Linux之系统移植与根文件系统构建

    Linux之系统移植与根文件系统构建 1.Uboot 1. 什么是Uboot: 一个裸机程序 就是一个bootloader用于启动Linux或其他系统 最主要的工作就是初始化DDR.因为Linux是运 ...

  4. 【正点原子MP157连载】第十九章 Buildroot根文件系统构建-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  5. linux开发 | 根文件系统构建实验及过程详解

    <2.uboot和系统移植-第19部分-2.19.根文件系统构建实验及过程详解> 第一部分.章节目录 2.19.1.根文件系统的构建路线 2.19.2.busybox的移植实战 2.19. ...

  6. 【正点原子Linux连载】第三十八章 根文件系统构建 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  7. linux 开机 找不到 文件系统 下载文件系统就好了,根文件系统构建和实验过程

    1.1.根文件系统构建路线 1.先逐步构建文件夹形式的根文件系统然后在制作烧录镜像 2.1.busybox移植实战 1.busybox中是一些shell命令集 2.busybox××× (1)busy ...

  8. 二十.Linux开发之根文件系统构建及过程详解

    老规矩 有道云笔记地址: 详情看这里链接,记录太多,就不一一排版了. http://note.youdao.com/noteshare?id=15b6e982c2e66d0f47b1c787a49f4 ...

  9. 根文件系统构建(Buildroot 方式)

    目录 何为buildroot? buildroot 简介 buildroot 下载 buildroot 构建根文件系统 配置buildroot 编译buildroot buildroot 根文件系统测 ...

最新文章

  1. POJ-1837 Balance
  2. Kali Linux 64位架构安装Veil-Evasion
  3. linux的ulimit各种限制之深入分析
  4. 方立勋_30天掌握JavaWeb_(Servlet+JSP+JavaBean实现)用户注册和登陆
  5. 什么是spring_Spring 源码第三弹!EntityResolver 是个什么鬼?
  6. 循环与函数及相关例子
  7. java能写驱动吗_使用纯java jdbc驱动程序实现数据库的连接
  8. 2020年了,JavaScript依然是前端最受欢迎的语言吗?
  9. 项目组网技术方案实施要点
  10. SQL Server高级查询之子查询(多行子查询)
  11. python怎么打印图片_Python打印图片
  12. s10_part3_django_ORM_查询相关_非常重要
  13. 公众号七种有效的引流方式
  14. 单链表的插入操作(全)
  15. Ubuntu18.04 LTS 安装 Synopsys VCS及一些问题
  16. 虚拟机VMware Workstation安装使用教程
  17. 线性模型是否真的能给出一个很好的解释?
  18. iosfifa15正在连接服务器,《FIFA15》正式登陆AppStore 必须联网才能玩
  19. 从实验到投稿录用的一次经历(历时小半年)
  20. 最小字符串(蓝桥杯试题 算法提高)

热门文章

  1. 有趣的推理html,关于有趣的推理评课稿
  2. 用C语言编写程序计算对角线的和,C语言入门级代码 计算二维数组主对角线上的元素之和...
  3. 2023.02.14草图大师 卧室房间 效果图
  4. java个人理财代码_基于JavaEE的个人理财系统
  5. 击败26个硕士,本科生“歪门邪道”月薪过万
  6. 记录一次上网正常但是【登录客户端应用网络异常问题】
  7. RecyclerView源码学习笔记(一)构造函数和setLayoutManager方法
  8. 产业智能化的大江大河,需要AI安全这样守护
  9. macbook键盘背光打不开怎么办?如何解决苹果笔记本键盘背光不亮的问题?
  10. Mac OS X平台下QuickLook开发教程