当前位置: 首页 > news >正文

4.5 使用busybox制作根文件系统

4.1. 使用busybox制作文件系统

4.1.1 busybox源码下载:

下载地址:Index of /downloads

4.1.2.  busybox源码中修改Makefile

ARCH = arm
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin//arm-none-linux-gnueabi-

4.1.3. make menuconfig配置busybox

(1)静态方式编译busybox

Busybox Settings--->
    Build Options--->
        [*]Build BusyBox as a static binary(no shared libs)

(2)命令行vi风格

Busybox Library Tuning--->
    [*]vi-style line editing commands

(3)配置模块,在驱动中会使用到

Linux Module Utilities--->
    [ ]Simplified modutils
    [*]insmod
    [*]rmmod
    [*]lsmod
    [*]modprobe
    [*]depmod

(4)配置mdev,/dev中的驱动设备节点由mdev创建

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

(5)配置安装目录

Busybox Settings--->

        Installation Options("make install" behavior)--->

                BusyBox installation prefix

(6)然后make编译,make install安装,rootfs文件夹就会有如下结果:

4.1.4. 添加/dev/inittab文件

Linux系统启动之后就会启动init进程,init进程会根据/etc/inittab这个文件来启动在不同的运行级别进程或操作。

inittab的格式: id:runlevels:action:process

 id:登记项标识符,用于惟一地标识/etc/inittab文件中的每一个登记项

runlevels:系统运行级别,指定登记项的运行级别,runlevels的级别有:

0让init关闭所有进程并终止系统
1单用户模式,单用户模式只能有系统管理员进入,runlevels的编号1也可以用S代替。
2允许系统进入多用户的模式,但并不支持文件共享
3最常用的运行模式,主要用来提供真正的多用户模式
4这个模式保留未用
5表示图形用户模式
6关闭所有运行的进程并重新启动系统

action:用于设置process的运行方式

respawninit应该监视这个进程,即使其结束后也应该被重新启动
waitinit应该运行这个进程一次,并等待其结束后再进行下一步操作
onceinit只运行一次该进程
boot系统启动时运行该进程
bootwait在系统启动时运行,init等待进程完成
ctrlaltdel当Ctrl+Alt+Del三个键同时按下时运行,把SIGINT信号发送给init
sysinit在运行boot或bootwait进程之前运行
powerfail当init收到SIGPWR信号时运行
powerokwait当收到SIGPWD信号且/etc/文件中的电源状态包含OK时运行
powerwait当收到SIGPWD信号,并且init等待进程结束时运行

process:表示所要执行的shell命令

inittap示例:

#first:run the system script file
::sysinit:/etc/init.d/rcS
#::askfirst:-/bin/sh
::sysinit:/bin/login
::ctrlaltdel:-/sbin/reboot
#umount all filesystem
::shutdown:/bin/umount -a -r
#restart init process
::restart:/sbin/init

4.1.5. /dev/init.d/rcS文件

#!/bin/sh#环境变量设置,操作系统执行程序默认到PATH指定的目录下寻找该程序
PATH=/sbin:/bin:/usr/sbin:/usr/binrunlevel=S        #单用户模式
prevlevel=Numask 022           #指定当前用户在创建文件时的默认权限export PATH runlevel prevlevel    #导出环境变量mount -a#调用mdev管理程序动态的创建插拔设备。kernel在每次设备出现变动时调用/sbin/mdev来处理对应的信息
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s/bin/hostname -F /etc/sysconfig/HOSTNAME    #设置主机名称ifconfig eth0 192.168.1.10    #设置ip地址

4.1.6. /etc/fstab

# /etc/fstab: static file system information.
#
# Use 'vol_id --uuid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#       <file system>   <mount point>   <type>  <options>       <dump>  <pass>proc                    /proc                   proc    defaults        0               0sysfs                   /sys                    sysfs   defaults        0               0tmpfs                   /var                    tmpfs   defaults        0               0tmpfs                   /tmp                    tmpfs   defaults        0               0tmpfs                   /dev                    tmpfs   defaults        0               0

4.1.7. /etc/profile

用于命令行打印出用户名和主机名称

# Ash profile
# vim: syntax=sh# No core files by default
ulimit -S -c 0 > /dev/null 2>&1USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]\# '
PATH=$PATHHOSTNAME=`/bin/hostname`export USER LOGNAME PS1 PATH

4.1.8. etc/passwd

root:x:0:0:root:/root:/bin/sh

4.1.9. /etc/shadow

root:xoQIkAeyYSSLI:14610:0:99999:7:::

4.1.10. 复制交叉编译工具链动态链接库文件到rootfs

4.2. 制作根文件系统镜像

dd if=/dev/zero of=rootfs.ext2 bs=1024 count=10240
losetup  /dev/loop1 rootfs.ext2
mke2fs -m 0 /dev/loop1 10240
mount -t ext2 /dev/loop1 ./rootfs/

将之前使用busybox制作的rootfs的文件复制过来,然后取消挂载,然后制作镜像

umount /dev/loop1
losetup -d /dev/loop1

inittap参考:Linux根文件系统:/etc/inittab文件分析 - LinFeng-Learning - 博客园

相关文章:

  • 开源ERP系统对比:Dolibarr、ERPNext与Odoo
  • AI大模型-解决开发环境配置不足问题
  • [FPGA Video] AXI4-Stream Remapper
  • stm32 hal库 SPI使用(二)硬件SPI的HAL库函数调用
  • spring-- 事务失效原因及多线程事务失效解决方案
  • Flutter——数据库Drift开发详细教程(二)
  • Flutter AppBar 详解
  • “会话技术”——Cookie_(2/2)原理与使用细节
  • 【二叉树】java源码实现
  • 中小企业MES系统概要设计
  • 数字智慧方案6213丨智慧园区规划方案(63页PPT)(文末有下载方式)
  • 【学习笔记】第十章:序列建模:递归神经网络(RNN)
  • Python 数据智能实战 (8):基于LLM的个性化营销文案
  • Redis总结及设置营业状态案例
  • 分发饼干之 双数组匹配问题 (双指针 or 二分)
  • 【质量管理】现代TRIZ中问题识别中的功能分析——相互接触分析
  • 【算法题】荷兰国旗问题[力扣75题颜色分类] - JAVA
  • Rust 学习笔记:关于枚举与模式匹配的练习题
  • 从0搭建Transformer
  • 大学之大:瑞典皇家理工学院2025.5.2
  • 郭少雄导演逝世,享年82岁
  • 准85后青海海北州副州长、州公安局局长李贤荣挂职临沂市副市长
  • 挑大梁!一季度北上广等7省份进出口占外贸总值四分之三
  • 见证历史与未来共舞:上海西岸“蝶变共生”对话讲坛圆满举行
  • 武汉大学新闻与传播学院已由“80后”副院长吴世文主持工作
  • 美商界报告:全美超86万岗位依赖对华出口,关税将重创美国出口商