制作可在MINI2440上运行的文件系统

2024-08-28 11:58

本文主要是介绍制作可在MINI2440上运行的文件系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 前言

目的:制作可在MINI2440上运行的文件系统
Busybox版本: 1.20.0 (from https://busybox.net/downloads/)
交叉编译器: arm-linux-gcc version 4.3.2

2. What is busybox

from README in busybox folder.

BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides minimalist replacements for most of the utilities you usually find in bzip2, coreutils, dhcp, diffutils, e2fsprogs, file, findutils, gawk, grep, inetutils, less, odutils, net-tools, procps, sed, shadow, sysklogd, sysvinit, tar, util-linux, and vim. The utilities in BusyBox often have fewer options than their full-featured cousins; however, the options that are included rovide the expected functionality and behave very much like their larger counterparts.

BusyBox is extremely configurable. This allows you to include only the components and options you need, thereby reducing binary size. Run ‘make config’ or ‘make menuconfig’ to select the functionality that you wish to enable. (See ‘make help’ for more commands.)

3. 制作过程

3.1 编译busybox
$ tar -xjf busybox-1.20.0.tar.bz2
$ cd busybox-1.20.0/
$ make menuconfig

在菜单中,进入Busybox Settings/Build Options/Cross Compiler prefix, 键入编译器的前缀 arm-linux-
然后开始编译

make

编译成功之后,就可以安装了。

3.2 安装busybox

In README:

The build automatically generates a file “busybox.links”, which is
used by ‘make install’ to create symlinks to the BusyBox binary for
all compiled in commands. This uses the CONFIG_PREFIX environment variable to specify where to install, and installs hardlinks or symlinks depending on the configuration preferences.

3.2.1 创建busybox的安装路径
$ mkdir /work/nfs_root/fs_mini_mdev_new
3.2.2 安装busybox
$ make install CONFIG_PREFIX=/work/nfs_root/fs_mini_mdev_new
3.2.3 查看安装结果
$ ls /work/nfs_root/fs_mini_mdev_new

发现下面已经创建了文件夹

bin linuxrc sbin usr

4. 安装glibc库

4.1 创建库目录
$ mkdir /work/nfs_root/fs_mini_mdev_new/lib
$ mkdir -p /work/nfs_root/fs_mini_mdev_new/usr/lib
4.2 拷贝库文件

从编译交叉工具目录下拷贝所需的库文件。

$ cp -d /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*so* /work/nfs_root/fs_mini_mdev_new/lib$ cp -d /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*so* /work/nfs_root/fs_mini_mdev_new/usr/lib

5. 构建根文件系统

5.1 构建etc目录

etc目录下的内容取决于要运行的程序,这里创建3个文件
etc/inittab、etc/init.d/rcS、etc/fstab。

5.1.1 创建etc/inittab文件

init进程根据/etc/inittab文件来创建其他子进程的,比如调用脚本文件配置IP地址、挂接其他文件系统,最后启动shell等。

$ cd /work/nfs_root/fs_mini_mdev_new
$ mkdir etc
$ cd etc
$ touch inittab
$ vim inittab

编辑inittab内容如下:

# /etc/inittab
::sysinit:/etc/init.d/rcS
ttySAC0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
5.1.2 创建etc/init.d/rcS文件

脚本文件,可以在里面添加想自动执行的命令。

$ cd /work/nfs_root/fs_mini_mdev_new/etc
$ mkdir init.d
$ cd init.d
$ touch rcS
$ vim rcS

编辑rcS内容如下:

#!/bin/sh
ifconfig eth0 192.168.1.17
mount -a
5.1.3 创建etc/fstab文件
$ cd /work/nfs_root/fs_mini_mdev_new/etc
$ touch fstab
$ vim fstab

编辑fstab内容如下,表示执行 “mount -a”命令后将挂接proc、tmpfs文件系统。

# device        mount-point     type    options         dump    fsck order
proc            /proc           proc    defaults        0       0
tmpfs           /tmp            tmpfs   defaults        0       0
5.2 构建dev目录

有两种方法构建dev:静态方法和动态方法。动态方法支持热插拔。这里使用动态方法。

5.2.1 检查内核

要使用mdev,需要内核支持sysfs文件系统,为了减少对FLASH的擦写,还要支持tmpfs文件系统。先确保内核已经设置了CONFIG_SYSFS、CONFIG_TMPFS配置项。

5.2.2 配置使mdev开机自动运行

修改两个文件:

5.2.2.1 etc/fstab修改后的内容如下
# device        mount-point     type    options         dump    fsck order
proc            /proc           proc    defaults        0       0
tmpfs           /tmp            tmpfs   defaults        0       0
tmpfs           /dev            tmpfs   defaults        0       0
5.2.2.2 etc/init.d/rcS添加如下几行:
mount -t
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
5.2.3 建立init进程需要的两个设备/dev/console, /dev/null
$ mkdir -p /work/nfs_root/fs_mini_mdev_new/dev
$ cd /work/nfs_root/fs_mini_mdev_new/dev
$ sudo mknod console c 5 1
$ sudo mknod null c 1 3
5.3 构建其他目录

其他目录可以是空目录,如下创建

$ cd /work/nfs_root/fs_mini_mdev_new
$ mkdir proc mnt tmp sys root

到现在为止,/work/nfs_root/fs_mini_mdev_new下就是一个非常小的根文件系统了。开发板可以将它作为网络根文件系统直接启动。如果要烧录到开发板,还要讲它制作成一个文件,称为映像文件。

6. 制作 yaffs文件系统映像文件

所谓制作文件系统映像文件,就是将一个目录下的所有内容按照一定的格式存放到一个文件中,这个文件可以直接烧写到存储设备上去。当系统启动后挂接这个设备,就可以看到与原来目录一样的内容。
制作不同类型的文件系统映像文件需要使用不同的工具。
去如下链接获取映像文件制作工具源码:
http://download.csdn.net/download/u013083059/9974620

6.1 解压、编译
$ tar -xjf yaffs_source_util_larger_small_page_nand.tar.bz2
$ cd ./Development_util_ok/yaffs2/utils
$ make

编译生成mkyaffs2image,将其拷贝到合适目录并修改属性

$ cp mkyaffs2image /usr/local/bin
$ chmod +x /usr/local/bin/mkyaffs2image

至此,镜像文件制作工具已经可以使用了

6.2 制作镜像文件
$ cd /work/nfs_root/
$ mkyaffs2image fs_mini_mdev_new.yaffs2 ./fs_mini_mdev_new

生成的fs_mini_mdev_new.yaffs2就是我们需要的镜像文件了。

这篇关于制作可在MINI2440上运行的文件系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114705

相关文章

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl

使用nohup和--remove-source-files在后台运行rsync并记录日志方式

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日... 目录一、什么是 --remove-source-files?二、示例命令三、命令详解1. nohup2.

Spring Boot项目打包和运行的操作方法

《SpringBoot项目打包和运行的操作方法》SpringBoot应用内嵌了Web服务器,所以基于SpringBoot开发的web应用也可以独立运行,无须部署到其他Web服务器中,下面以打包dem... 目录一、打包为JAR包并运行1.打包为可执行的 JAR 包2.运行 JAR 包二、打包为WAR包并运行

什么是ReFS 文件系统? ntfs和refs的优缺点区别介绍

《什么是ReFS文件系统?ntfs和refs的优缺点区别介绍》最近有用户在Win11Insider的安装界面中发现,可以使用ReFS来格式化硬盘,这是不是意味着,ReFS有望在未来成为W... 数十年以来,Windows 系统一直将 NTFS 作为「内置硬盘」的默认文件系统。不过近些年来,微软还在研发一款名

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例