busybox init inittab passwd

Busybox init 流程一些重要的点

1 init初始化后读的文件是/etc/inittab 这是交互接口

inittab被读的顺序是

2 先读sysinit阶段的内容

例如::sysinit:/etc/init.d/rcS

则执行rcS文件内容

3 再读respawn里面的程序

例如::respawn:/sbin/agetty -a console -n 9600 ttyS0 vt100

4 则执行agetty

agetty的命令如下

-a console 用户名为console

ttyS0 表示端口

vt100表示FIXME

5 在agetty的时候为验证目的,会读对应passwd文件

6 passwd文件内容如下

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

其中console是文件名

/bin/sh是文件shell

7 如不喜欢这个shell, 可以替换掉/bin/sh

这样就将有自己的shell

8 执行busybox init带来的系统重启已经不是在内核态,除非这些用户态程序触发内核panic, 否则重启是

这些程序自己负责

Ref:

1 http://blog.csdn.net/shanzhizi/article/details/39082495

2 http://blog.csdn.net/linucos/article/details/5352506




<think>好的,用户现在想了解如何使用BusyBox创建一个根文件系统。我需要先回顾之前的对话历史。之前用户遇到了编译BusyBox时的错误,涉及内核头文件版本的问题,我给出了解决方案。现在用户的问题转向如何创建根文件系统,这可能是在解决编译问题之后的下一个步骤。 首先,用户可能是嵌入式系统开发者或正在学习Linux系统构建,他们需要构建一个最小化的根文件系统,用于嵌入式设备或测试环境。用户的真实需求可能不仅仅是步骤,还包括理解每个步骤的作用,以及如何验证文件系统的正确性。 我需要确保回答结构清晰,分步骤讲解,同时覆盖必要的目录结构、配置文件、权限设置等。还要注意用户可能对某些步骤不熟悉,比如交叉编译或设备节点的创建,需要详细说明。 可能需要注意的要点包括: 1. 准备工作:交叉编译工具链、内核模块、BusyBox的编译配置。 2. 目录结构的创建,遵循FHS标准。 3. 安装BusyBox到目标目录,创建必要的符号链接。 4. 配置关键的系统文件如inittab、fstab、passwd等。 5. 设置权限,特别是/dev和/proc等特殊目录。 6. 测试和打包文件系统,可能使用chroot或QEMU测试。 需要检查是否遗漏了某些关键步骤,比如动态库的拷贝,或者如何处理静态编译的情况。同时,用户可能需要了解如何配置启动脚本,比如rcS文件,以及如何设置环境变量。 另外,用户可能对如何交叉编译BusyBox有疑问,特别是如果目标平台与宿主机架构不同,需要指定正确的交叉编译选项。此外,可能还需要说明如何生成initramfs或者如何制作可引导的镜像文件。 最后,应该给出验证方法,比如使用QEMU启动测试,或者打包成镜像文件并用虚拟机加载。同时提醒用户注意权限问题,避免因权限不当导致的启动失败。</think>使用BusyBox创建根文件系统是嵌入式Linux开发的常见需求,以下是详细操作指南: --- ### **一、准备工作** ```bash # 创建基础目录结构(需root权限) mkdir rootfs && cd rootfs mkdir -pv bin dev etc home lib mnt opt proc root run sbin sys tmp usr var mkdir -p usr/bin usr/sbin usr/lib usr/include ``` --- ### **二、编译BusyBox** 1. **获取源码**(以v1.36.1为例): ```bash wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2 tar -xf busybox-1.36.1.tar.bz2 && cd busybox-1.36.1 ``` 2. **配置编译选项**: ```bash make menuconfig ``` 关键配置: ``` -> Settings -> Build static binary (no shared libs) [根据需求选择] -> Linux System Utilities -> Support mounting /dev [*] -> Support mounting /proc [*] -> Coreutils -> cpio [*] ``` 3. **交叉编译示例**(ARM架构): ```bash make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- install ``` --- ### **三、安装到根文件系统** 1. **复制二进制文件**: ```bash # 假设当前在busybox源码目录 make CONFIG_PREFIX=../rootfs install ``` 2. **验证安装**: ```bash ls ../rootfs/bin/busybox # 应显示二进制文件 ``` --- ### **四、配置关键系统文件 1. **/etc/inittab**(基础配置): ```bash echo "::sysinit:/etc/init.d/rcS ::respawn:/sbin/getty -L ttyS0 115200 vt100 ::ctrlaltdel:/sbin/reboot" > ../rootfs/etc/inittab ``` 2. **/etc/fstab**(文件系统挂载): ```bash cat << EOF > ../rootfs/etc/fstab proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 EOF ``` 3. **初始化脚本**: ```bash mkdir -p ../rootfs/etc/init.d echo "#!/bin/sh mount -a echo 'Hello from BusyBox'" > ../rootfs/etc/init.d/rcS chmod +x ../rootfs/etc/init.d/rcS ``` --- ### **五、添加必要设备节点** ```bash sudo mknod ../rootfs/dev/console c 5 1 sudo mknod ../rootfs/dev/null c 1 3 sudo chmod 666 ../rootfs/dev/null ``` --- ### **六、补充依赖库(动态编译时)** ```bash # 以ARM架构为例 cp /usr/arm-linux-gnueabihf/lib/libc.so.6 ../rootfs/lib/ cp /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 ../rootfs/lib/ ``` --- ### **七、测试文件系统** 1. **使用QEMU测试**: ```bash qemu-system-arm -M versatilepb -kernel zImage -dtb versatile-pb.dtb \ -initrd rootfs.cpio -append "root=/dev/ram0 console=ttyAMA0" ``` 2. **打包成CPIO格式**: ```bash cd rootfs find . | cpio -H newc -ov --owner root:root > ../rootfs.cpio ``` --- ### **常见问题处理** 1. **权限问题**: ```bash chown -R root:root rootfs chmod 4755 rootfs/bin/busybox ``` 2. **缺少动态库**: ```bash # 使用ldd检查依赖 arm-linux-gnueabihf-ldd rootfs/bin/busybox ``` --- ### **扩展功能建议** ```bash # 添加基础工具 mkdir rootfs/usr/share/udhcpc cp examples/udhcp/simple.script rootfs/usr/share/udhcpc/default.script ``` 通过以上步骤,您将获得一个约3-5MB的最小根文件系统,可通过`initramfs`或直接挂载到嵌入式设备使用。建议根据实际需求添加`/etc/passwd`, `/etc/group`等配置文件以完善系统功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值