热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

x4412开发板&ibox卡片电脑项目实战9-搭建最简单的linux文件系统

Linux文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。有了文件系统,用户就可以很方便的和Linux设备进行数据交
Linux文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。有了文件系统,用户就可以很方便的和Linux设备进行数据交互了。 随着实际需求的不断提高,Linux文件系统也变得越来越庞大。无论它如何千变万化,归根结底,都是基于最基本的linux文件系统不断丰富而来。因此,我们完全有必要了解最基本的文件系统的搭建过程,更加复杂的文件系统可以举一反三,各个击破,真正做到一通百通。下面我们将逐步讲解最简单的linux文件系统的制作方法。 第一步:在ubuntu的用户目录下新建一个文件系统的总目录,如rootfs_x4412:
  1. mkdir  rootfs_x4412
第二步:编译安装busybox 从busybox官网(www.busybox.net)下载最新的busybox源码包,这里以1.22.1版本为例,源码包名称为busybox-1.22.1.tar.bz2。 解压源码包,打开busybox根目录的Makefile文件,指定交叉编译工具链以及体系架构,注意,请以自己的实际交叉编译工具安装路径为准:
  1. CROSS_COMPILE ?=  /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
  2. ARCH ?= arm

在busybox根目录下执行make menuconig配置busybox:


进入Busybox Settings目录,


再进入Build Options目录,


选中第一项,即将Busybox编译成静态的二进制文件。使用静态的文件,可以不依赖于共享库,后面我们将会进一步说明。其他选项暂且默认,当然我们也可以根据自己的实际需要添加或是删剪一些busybox指令,以及其他的一些特色选项。     退出menuconfig并保存配置后,在busybox根目录下执行如下指令编译安装:
  1. make
  2. make  install
    这时在busybox根目录会生成_install目录,里面存放着bin,sbin,usr三个目录以及linuxrc文件。这些文件构成了busybox的各种指令集。     前面我们提到,将busybox编译成静态文件后,不再依赖共享库。进入busybox的根目录,使用如下指令查看busybox依赖的共享库:
  1. arm-none-linux-gnueabi-readelf -d busybox
    可以看到如下打印提示:
  1. There is no dynamic section in this file.
    说明我们编译的busybox文件确实不依赖于任何的动态库。     提示:这里如果找不到arm-none-linux-gnueabi-readelf文件,请在ubuntu用户目录的.bashrc文件的最后面声明PATH环境变量,声明内容如下:
  1. PATH=/usr/local/arm/arm-2009q3/bin:$PATH
  2. export PATH
    再执行如下指令即可:
  1. source  ~/.bashrc
    第三步:填充文件系统内容     将上一步_install目录下bin,sbin目录全部复制到文件系统目录rootfs_x4412,注意在bin和sbin目录下有很多都是软链接,复制时千万不要丢失了文件属性:
  1. cp -a  _install/bin  ../rootfs_x4412
  2. cp -a  _install/sbin  ../rootfs_x4412
    进入文件系统目录rootfs_x4412,新建其他目录:
  1. mkdir  dev  etc  lib  mnt  proc  sys  tmp  usr  var
    在etc下新建init.d目录,然后在init.d目录下新建rcS文件:
  1. cd  etc
  2. mkdir  init.d
  3. cd  init.d
  4. touch  rcS
  5. chmod  777  rcS
    编辑rcS文件,添加内容如下:
  1. #!/bin/sh
  2. /bin/mount -a       #mount all stuff from /etc/fstab
  3. /sbin/ifconfig eth0 192.168.1.15 up #开机自动设置eth0的IP地址
  4. /sbin/ifconfig eth1 192.168.1.16 up #开机自动设置eth1的IP地址
    在etc目录下新建fstab文件,该文件将会被rcS中的mount a语句调用。编辑fstab文件内容如下:
  1. none           /proc           proc  defaults      0 0
这里表示分别将proc文件系统挂载到相应的目录,第二列为所挂载的目录,第三列为要挂载的文件系统,第四列为挂载所使用的属性。     在文件系统根目录下建立linuxrc文件,编辑内容如下:
  1. #!/bin/sh
  2. /bin/mount -t proc proc /proc
  3. /bin/mount -t sysfs sysfs /sys
  4. /sbin/mdev -s

  5. exec /sbin/init
    这里将procsysfs文件系统分别挂载到procsys目录。 proc文件系统是一个伪文件系统,它只存在内存当中,而 不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于 系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。 sysfs 把连接在系统上的设备和总线组织成为一个分级的文件,它们可以被从用户的空间存取到。这是被设计用来处理那些以前驻留在 /proc/ 的设备和驱动程序指定的选件以及用来处理那些以前由 devfs 提供支持的动态加载设备。注意一定要修改linuxrc文件的属性为777,否则会提示failedto execute /linuxrc的错误。        在/etc下建立mdev.conf文件,内容为空即可。如果不建立这个文件,将会提示下面的错误:
  1. mdev: /etc/mdev.conf: No such file or directory
使用下面命令创建即可:
  1. touch mdev.conf
       在/dev下建立console,null,tty2,tty3,tty4等五个字符设备文件:
  1. mknod console c 5 1
  2. mknod null c 1 3
  3. mknod /dev/tty2 c 4 2
  4. mknod /dev/tty3 c 4 3
  5. mknod /dev/tty4 c 4 4
c表示创建没有缓冲的字符特殊文件,后面的两个数字分别表示主设备号和次设备号。     第四步:制作ext4文件系统     本实验基于x4412或ibox开发平台,对应硬件设备存储器均为emmc,并不是传统的nand flash,因此文件系统格式也不再是传统的yaffs或是jffs文件系统了。     在ubuntu用户目录下新建目录rootfs_tmp文件,用于临时挂载文件系统:
  1. mkdir  -p  rootfs_tmp
    制作一个12M的ext4空白文件:
  1. dd  if=/dev/zero  of=rootfs.ext4  bs=1024  count=12288
    再将新建的rootfs.ext4文件格式化为ext4格式:
  1. mkfs.ext4  rootfs.ext4
    将rootfs.ext4文件挂载到前面我们新建的临时目录rootfs_tmp,注意这里我们要使用mount o loop的属性,表示我们要把rootfs.ext4当作硬盘分区挂载到rootfs_tmp:
  1. sudo  mount  -o  loop  rootfs.ext4  ./rootfs_tmp
    这时,我们就可以给rootfs.ext4填充内容了。执行如下指令拷贝文件系统内容:
  1. cp  rootfs_x4412/*  ./rootfs_tmp  -ar
    拷贝完后,卸载挂载的rootfs.ext4文件,即完成了文件系统的制作:
  1. sudo  umount  ./rootfs_tmp
我们可以将rootfs.ext4文件烧写到开发板,测试是否可以正常挂载。实际测试界面如下:

执行到如下语句,说明文件系统已经挂载起来了。
  1. Please press enter to activate this console
    从上面我们可以看到,整个x4412的启动过程,只花了3.58秒。当然随着文件系统的逐渐庞大,启动开销也会不断增加。     第五步:我们做好文件系统后,经常要打包文件系统,烧写测试。即第四步经常要重复操作。为此,我们可以编写打包文件系统的脚本。参考脚本如下:
  1. # Description       : Build linux filesystem Script.
  2. # Authors            : lqm
  3. # Version             : 0.01
  4. # Notes                         : None
  5. #

  6. # must root user
  7. echo "making ext4 rootfs now,wait a moment..."

  8. if [ -d rootfs_tmp ]; then
  9.          rm -rf rootfs_tmp
  10. fi

  11. if [ -f rootfs.ext4 ]; then
  12.          rm -rf rootfs.ext4
  13. fi

  14. mkdir -p rootfs_tmp

  15. dd  if=/dev/zero  of=rootfs.ext4  bs=1024  count=12288
  16. mkfs.ext4  rootfs.ext4
  17. mount  -o  loop  rootfs.ext4  ./rootfs_tmp
  18. cp ./rootfs_x4412/* ./rootfs_tmp -ar
  19. umount ./rootfs_tmp

  20. rm -rf rootfs_tmp

  21. echo "^_^ make x4412 rootfs.ext4 successful!"
做好的精简文件系统下载:

http://xboot.org/thread-27365-1-1.html


推荐阅读
  • 利用PaddleSharp模块在C#中实现图像文字识别功能测试
    PaddleSharp 是 PaddleInferenceCAPI 的 C# 封装库,适用于 Windows (x64)、NVIDIA GPU 和 Linux (Ubuntu 20.04) 等平台。本文详细介绍了如何使用 PaddleSharp 在 C# 环境中实现图像文字识别功能,并进行了全面的功能测试,验证了其在多种硬件配置下的稳定性和准确性。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • Java中高级工程师面试必备:JVM核心知识点全面解析
    对于软件开发人员而言,随着技术框架的不断演进和成熟,许多高级功能已经被高度封装,使得初级开发者只需掌握基本用法即可迅速完成项目。然而,对于中高级工程师而言,深入了解Java虚拟机(JVM)的核心知识点是必不可少的。这不仅有助于优化性能和解决复杂问题,还能在面试中脱颖而出。本文将全面解析JVM的关键概念和技术细节,帮助读者全面提升技术水平。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 深入解析:RKHunter与AIDE在入侵检测中的应用与优势
    本文深入探讨了RKHunter与AIDE在入侵检测领域的应用及其独特优势。通过对比分析,详细阐述了这两种工具在系统完整性验证、恶意软件检测及日志文件监控等方面的技术特点和实际效果,为安全管理人员提供了有效的防护策略建议。 ... [详细]
  • 本文详细介绍了在Ubuntu操作系统中使用GDB调试工具深入分析和调试标准库函数`printf`的源代码过程。通过具体步骤和实例,展示了如何设置断点、查看变量值及跟踪函数调用栈,帮助开发者更好地理解`printf`函数的工作原理及其内部实现细节。 ... [详细]
  • 对于内存仅为512MB、硬盘80GB的老旧设备,部署Ubuntu Server毫无压力。然而,许多平台仅支持CentOS系统,而CentOS默认要求1GB以上内存才能使用图形界面安装。实际上,安装完成后,即使内存低至256MB也能正常运行。此外,通过优化系统配置和减少不必要的服务,可以进一步提升系统性能,确保在资源受限的环境中稳定运行。 ... [详细]
  • 本指南详细介绍了如何使用 `apt-get` 命令在 Ubuntu 系统上部署 MySQL 5、Apache 2、PHP 5 及 phpMyAdmin。首先,建议读者查阅 Ubuntu 的官方文档以获取更多背景信息。通过本文,您将逐步了解每个软件包的安装过程及其配置方法,确保系统环境的稳定性和安全性。此外,还将提供一些常见问题的解决方案,帮助用户顺利完成部署。 ... [详细]
  • 黄聪:MySQL主从复制配置,实现高效读写分离
    大型网站为应对高并发访问,不仅需要在前端实现分布式负载均衡,还需在数据业务和访问层采取有效措施。采用传统的数据结构已无法满足需求,通过配置MySQL主从复制,可实现高效的读写分离,显著提升系统性能和稳定性。 ... [详细]
  • 本文详细探讨了Linux系统中`dd`命令的基础用法及其高级功能扩展。通过实例分析,介绍了如何利用`dd`进行数据复制、磁盘镜像创建以及文件系统恢复等操作,为用户提供了一套全面的技术指南。此外,文章还深入解析了`dd`命令的工作原理及其在实际应用场景中的优化技巧,帮助读者更好地掌握这一强大工具。 ... [详细]
  • 在Linux系统中,特别是Ubuntu和其他发行版中,配置TTY终端字体对于提升用户体验至关重要。本文将详细介绍如何在这些系统中设置TTY字体,并探讨Debian和Ubuntu的默认控制台字体选择。通过合理的字体配置,可以显著改善TTY终端的可读性和美观性。 ... [详细]
  • NanoPi2 使用体验深入解析(续篇)
    随着Raspberry Pi的问世,开源硬件领域迎来了前所未有的发展,激发了全球范围内的创新热潮。在中国,这一趋势同样催生了一系列类似的开发板,例如NanoPi 2。本文作为前篇的延续,将深入探讨NanoPi 2的实际使用体验,从性能、兼容性到应用场景,进行全面分析。 ... [详细]
  • 深入解析:JavaScript中的表达式与语句有何不同
    深入解析:JavaScript中的表达式与语句有何不同 ... [详细]
  • PJSIP 编译与开发指南:深入解析 PJSIP 库的应用与优化
    PJSIP 编译与开发指南:深入解析 PJSIP 库的应用与优化 ... [详细]
  • 在Linux环境中,通过编写Shell脚本来实现自定义命令的创建与激活,能够极大地简化服务器上多个子系统的管理操作。例如,通过简单的命令如“tt”,即可快速查看各个应用程序的名称及其运行状态,从而提高系统维护的效率和便捷性。 ... [详细]
author-avatar
张珮娟7063
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有