使用BusyBox制作根文件系统的操作步骤

时间:2022-04-29 08:48:48

参考博客http://www.cnblogs.com/Charles-Zhang-Blog/p/3419301.html


一、构建根文件系统该有的目录

  • 即在/rootfs/目录下创建该有的空目录;
  • 一般有dev/   etc/   lib/   usr/   var/   proc/   tmp/   home/   root/   mnt/   bin/   sbin/  sys/ ;
  • /bin  /sbin由于是用busybox构建,再拷贝到此目录下的,所以可以先不创建;


二、使用busybox构建/bin  /sbin   linuxrc

1、获取busybox源码

2、解压后修改Makefile

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

3、配置busybox

  • 先make defconfig,然后make menuconfig,安装下面图示进行配置。

使用BusyBox制作根文件系统的操作步骤

p.s:出现错误

使用BusyBox制作根文件系统的操作步骤

解决思路方法:此文件和主功能无关,可以避开。

(1)先找到sync.c文件:在此目录下find -name "sync.c",知道其在./coreutils/sync.c

(2)cd coreutils,在Kbuild文件中,查找sync.o,可知由宏CONFIG_SYNC来控制是否编译

使用BusyBox制作根文件系统的操作步骤

(3)在make menuconfig中,查找SYNC的位置,转到其位置,选择为N。使用BusyBox制作根文件系统的操作步骤


4、输入make进行编译,然后输入make install进行安装

(1)make install,执行busybox顶层目录的一个目标install。

(2)安装目录默认在busybox/_install,里面有bin/  sbin/  linuxrc三个(目录)文件。

  • 也可以指定目录安装,以便后期不用再拷贝。

使用BusyBox制作根文件系统的操作步骤


(3)make install的解释

  • 安装软件的指令,在传统的linux系统中,安装软件时都是选择源代码方式安装的。
  • 下载要安装的软件源代码,然后配置、编译、安装。
  • 安装的含义是,将编译生成的可执行程序及其依赖的库文件、配置文件、头文件安装到当前系统中指定的目录下。

5、将bin/  sbin/  linuxrc拷贝到rootfs文件夹下

  • 指令是cp bin/  sbin/  linuxrc /root/rootfs -ra;


三、构建etc目录

主要是拷贝一些文件到etc/目录下,并进行一些修改

使用BusyBox制作根文件系统的操作步骤


1、将  busybox/examples/bootfloopy/etc/*  拷贝到  /rootfs/etc/  目录下,然后修改其中的inittab文件;

(1)开机免登陆,直接进入shell

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

或者

::sysinit:/etc/init.d/rcS
#::respawn:-/bin/sh
#::respawn:-/bin/login
console::askfirst:-/bin/sh  //这个和上面一样,只是id明确给出而已
#tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

(2)开机需要登陆

::sysinit:/etc/init.d/rcS
#::respawn:-/bin/sh
::respawn:-/bin/login
#console::askfirst:-/bin/sh
#tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r


2、用户名、密码设置:将虚拟机ubuntu的  /etc/passwd、/etc/group、/etc/shadow  拷贝到  rootfs/etc/  目录下,然后修改三个文件的相关内容;

(1)只保存与root相关项,修改passwd为root:x:0:0:root:/root:/bin/sh。

(2)只保存与root相关项,修改group为root:x:0:root。

(3)只保存与root相关项,shadow其他不需要更改(或者清除密码),登陆密码和拷贝源的密码一致。


3、修改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`

export USER LOGNAME PS1 PATH

4、修改fstab文件;

添加以下内容:注意这里的挂载点需要预先建立(如果在第一步创建空目录是没有创建的话)

#<file system> 	<mount point> 	<type> 	<options>    <dump> 	<pass>
proc 		/proc 		proc 	defaults 	0 	0
sysfs 		/sys 		sysfs 	defaults 	0 	0
tmpfs 		/var 		tmpfs 	defaults 	0 	0
tmpfs 		/tmp 		tmpfs 	defaults 	0 	0
tmpfs 		/dev 		tmpfs 	defaults 	0 	0

5、修改etc/init.d/rc.S文件;

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S
prevlevel=N

umask 022

export PATH runlevel prevlevel

mount -a

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

/bin/hostname -F /etc/sysconfig/HOSTNAME

ifconfig eth0 192.168.1.10


四、构建lib目录

动态链接库拷贝到/root/rootfs/lib/目录下,动态链接库在  /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/  目录下。

  • 指令  cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/*so* /root/rootfs/lib/ -rdf