使用busybox-1.28.0制作文件系统

2024-09-01 02:18

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

如果利用busybox工具,制作linux根文件系统。首先从busybox官网上下载:https://busybox.net/downloads/),进行编译。这里我下载的是


busybox-1.28.0.tar.bz2。将源码包放到 linux 目录中tar -xjvf  busybox-1.28.0.tar.bz2解压。


(1)在解压后的busybox文件夹中修改Makefile中的编译工具链和架构 


ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
(2)进入 busybox 的图形配置界面:


执行make menuconfig在界面中进行文件系统相关配置。


Busybox Settings--->
Build Options--->
[*]Build BusyBox as a static binary(no shared libs)-----把busybox配置成静态链接库
                [*]Build with Large File Support (for accessing files > 2GB) 


Busybox Settings--->
        Busybox Library Tuning--->
       [*]vi-style line editing commands----支持vi风格的命令行
       [*]Fancy shell prompts-------这个选项要选中,否则挂载文件系统后,无法正常显示命令提示符:“[\u@\h \W]#”

Linux Module Utilities--->------------Linux驱动模块相关配置
[ ]Simplified modutils---简化的模块工具--我们去掉
[*]insmod
[*]rmmod
[*]lsmod
        [*]Pretty output   
[*]modprobe
        [*]Blacklist support  
[*]depmod
                                                                                                                                     



Linux System Utilities--->
        [*]mdev
[*]Support /etc/mdev.conf
[*]Support subdirs/symlinks
[*]Support regular expressions substitutions when renaming dev
[*]Support command execution at device addition/removal
[*]Support loading of firmwares

修改默认安装路径:
Busybox Settings  --->
      Installation Options ("make install" behavior)  ---> 
           (./_install) BusyBox installation prefix---------这里指的了默认安装路径,默认是安装在 busybox 目录下的_install 目录下
配置完后,选择<Exit>按回车,提示是否保存配置。
选择<Yes>,按回车,将配置保存为.config


(3)编译安装:


#make
#make install
注意:编译或配置过程出现错误参考另一篇博客中的解决方法。


完成之后会在 busybox 目录下生成 _install 文件夹,里面包含三个文件夹和一个文件:


/bin /sbin /usr linuxrc


(4)建一个名为 rootfs 的文件夹,作为文件系统的根目录,并手动创建根文件系统所需的目录,主要包括以下目录:


/bin, /etc, /dev, /home, /lib, /mnt, /opt, /proc, /root, /sbin, /sys, /tmp, /usr, /var


#mkdir rootfs
#cd rootfs
#mkdir bin etc dev home lib mnt opt proc root sbin sys tmp usr var 


Linux 文件系统目录结构说明:
bin 存放系统常用的可执行命令,如 ls cp mv mkdir tar 等,嵌入式系统中的这些命令由 busybox 生成
dev 存放设备文件,系统启动后由 mdev 机制根据系统中的驱动在此目录下生成设备节点
etc 存放系统管理和配置文件,是制作文件系统时重点关注的目录
home 用户目录,一般下面会有一个以用户名命名的目录
lib 存放系统库文件,一般是动态连接共享库,供执行应用程序使用,此目录库文件从交叉编译器中复制得来
mnt 用于临时挂载文件系统,如 U 盘、 SD 卡、网络文件系统
opt 暂时用不到
proc proc 文件系统,系统运行过程中生成文件,可以访问此目录获得系统信息
root 系统管理员的主目录
sbin 存放系统管理命令,如 halt、 reboot 等
sys sys 文件系统,在系统启动后根据系统中注册的设备驱动,在此目录下生成用于管理设备的相关文件
tmp 存放临时文件
usr 嵌入式系统最主要的目录, bin 可存放用户的应用程序, lib 存放用户的库文件, local 可存放应用程序包
var 可存放各种服务的日志文件, web 服务器的网页脚本文件, FTP的资源目录。


(5)把_install 文件夹下文件全部复制到刚建好的 rootfs 目录下,替换原有的目录
#cd _install
#cp -rf * ../../rootfs


(6)制作文件系统
进入 rootfs/dev 目录,创建两个设备节点:
#mknod console c 5 1
#mknod null c 1 3


(7)进入 rootfs/etc 目录,添加文件:
拷贝 busybox-1.28.0/examples/bootfloopy/etc 目录下的内容到当前目录下。
#cd rootfs/etc/
#cp -r ../../busybox-1.28.0/examples/bootfloopy/etc/* ./
这里面包括文件: fstab init.d inittab profile


拷贝 ubuntu 下的/etc/passwd, /etc/group, /etc/shadow 三个文件到当前目录下。
#cp /etc/passwd ./
#cp /etc/group ./
#cp /etc/shadow ./
把 passwd 文件中的第一行: root:x:0:0:root:/root:/bin/bash 中的/bin/bash,改成/bin/ash
root:x:0:0:root:/root:/bin/ash
因为文件系统的 bin 目录下没有 bash 这个命令,而是用 ash 代替 bash,所以在用用户名密
码登录的时候(如 telnet), 会出现“cannot run /bin/bash: No such file or directory”的错误。


再从 ubuntu 的/etc 目录下复制一些常用的配置文件: mime.types services resolv.conf


(8)修改 etc/inittab 文件,内容如下:
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::once:/usr/sbin/telnetd -l /bin/login
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r


(9)修改 etc/fstab 文件,内容如下:
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
var /dev tmpfs defaults 0 0


(10)修改 etc/init.d/rcS 文件,内容如下:
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
mkdir -p /var/lock
/bin/hostname -F /etc/sysconfig/HOSTNAME


(11)修改 etc/profile 文件,内容如下:
# Ash profile
# vim: syntax=sh
# No core files by default
#ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
echo "Processing /etc/profile... "
echo "Done"
export USER LOGNAME PS1 PATH


(12)新建 etc/sysconfig 目录,在里面新建一个名为 HOSTNAME 文件,编辑文件内容为: zhjtest


 (13)拷贝时区文件:
Linux 下的时区文件存放在/usr/share/zoneinfo 下,在我们的文件系统中建立/usr/share 目录,
将系统中的时区文件复制过来。
mkdir -p usr/share
cp -rf /usr/share/zoneinfo usr/share
然后需要在 etc 目录下建立 localtime 文件,指定 linux 的时区,否则会出现系统时间和硬件时
间相差 8 小时的情况
ln -s /usr/share/zoneinfo/Asia/Hong_Kong etc/localtime


拷贝库文件:
进入 rootfs/lib 目录,拷贝交叉编译器的库文件到 lib 目录下
cp -f -a /opt/toolchains/arm-angstrom-linux-gnueabi/lib/*.so* ./


由于交叉编译器的库文件比较多,体积较大,所以需要裁剪一下库文件,只保留常用的
库文件,具体的裁剪方法可以参考我们提供的文件系统的源码。


到这里,文件系统的框架已经做好,我们需要把文件系统制作成可以烧写进 Nandflash 中
的 yaffs2 镜像文件。
制作 yaffs2 镜像需要使用 mkyaffs2image 工具,使用我们提供的编译好的 mkyaffs2image
工具(位置:光盘资料/linux 平台工具/mkyaffs2image.tar.gz)


把解压出来的可执行文件复制到 ubuntu 的/usr/bin 目录下
cp mkyaffs2image /usr/bin


制作文件系统镜像:
mkyaffs2image rootfs rootfs.bin


rootfs.bin 就是 yaffs2 文件系统镜像,要先修改它的权限,否则该文件无法被复制:
chmod 777 rootfs.bin


把 rootfs.bin 下载到 nandflash 中的文件系统分区中
如果文件系统能正常挂载,终端会打印出:
Please press Enter to activate this console. (按回车)
Processing /etc/profile...
Done
[root@zhjtest/]#


(14)完善文件系统
在/mnt 目录下创建以下文件夹,用来挂载 NFS, SD 卡和 U 盘 nfs sd udisk1 udisk2 udisk3 udisk4
cd rootfs/mnt
mkdir nfs sd udisk1 udisk2 udisk3 udisk4


设置开发板 IP 地址:在 init.d/rcS 文件中加入:
ifconfig lo 127.0.0.1
ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
route add default gw 192.168.1.1


这样在开机时,就自己设置了 IP 地址为:192.168.1.10


在/etc/profile 中加入:
alias ll='ls -l'
alias mntnfs='mount -t nfs -o nolock'
alias mntud1='mount -t vfat /dev/sda1 /mnt/udisk1'
alias umntud1='umount /mnt/udisk1'
alias mntsd='mount -t vfat /dev/mmcblk0p1 /mnt/sd'
alias umntsd='umount /mnt/sd'
alias 命令的作用是给一个命令取个别名,可以把较长的命令简化成简单易记的短命令,可以
根据自己的需要添加这里的内容。


(15)热插拔:
Linux 系统的热插拔机制可以识别插入的 U 盘或 SD 卡,并自动挂载到指定目录。
在 etc 目录下新建一个 hotplug 的目录,在其中分别创建 SD 卡和 U 盘的目录
在 sd 和 usb 目录下分别创建文件 sd_insert、 sd_remove、 udisk_insert、 udisk_remove
文件内容如下:
sd_insert:
mount -t vfat -o iocharset=cp936 /dev/mmcblk0p1 /mnt/sd


sd_remove:
umount /mnt/sd


udisk_insert:
mount -t vfat /dev/sda1 -o iocharset=cp936 /mnt/udisk1


udisk_remove:
umount /mnt/udisk1


在 etc 目录下创建 mdev.conf 文件,内容如下:
sd[a-z][0-9] 0:0 666 @/etc/hotplug/usb/udisk_insert
sd[a-z] 0:0 666 $/etc/hotplug/usb/udisk_remove
mmcblk[0-9]p[0-9] 0:0 666 @/etc/hotplug/sd/sd_insert
mmcblk[0-9] 0:0 666 $/etc/hotplug/sd/sd_remove


当插入 U 盘时, dev 目录下会生成 sda1 设备文件,这时第一条语句会触发后面所指向路径的
脚本 disk_insert,此脚本执行挂载 U 盘的动作
当拔出 U 盘时,第二条语句会触发后面所指向路径的脚本 udisk_remove,执行卸载 U 盘动作
同样,当插入 SD 卡, dev 目录下生成 mmclk0p1 设备文件,第三条语句触发 sd_insert 脚本,
挂载 SD 卡,拔出 SD 卡,第四条语句触发 sd_remove 脚本,卸载 SD 卡.


(15)其他建议:
一、设置开机自启动程序:可以在 etc/init.d/rcS 文件中加入要自启动的命令,如果要使程序在后台运行,在命令后加&
二、移植的应用程序一般放在 usr/bin 目录下
三、移植的库文件一般放在 usr/lib 目录下
四、用户目录(home/xgc)可以存放一些文档、图片、声音等文件
五、var 目录可存放 FTP 服务器的目录或存放 Web 服务器的网页脚本等

这篇关于使用busybox-1.28.0制作文件系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念