busybox用于制作小型的文件系统,常用于嵌入式。
制作过程:
在迅为itop4412开发板资料包中有busybox的压缩包(也可以下载别的版本)
1、将busybox-1.22.1.tar.bz2压缩包复制到 “/ARM4412” 下并解压。("/ARM4412" 是我专门创建的文件夹用来存放itop4412的所有资料,可以根据个人喜好更改)
[root@localhost ARM4412]# tar xf busybox-1.22.1.tar.bz2
2、进入busybox-1.22.1目录底下(就是上面解压后的)
[root@localhost ARM4412]# cd busybox-1.22.1/
3、先清除编译出来的文件及配置文件
[root@localhost busybox-1.22.1]# make distclean
4、配置配置busybox
[root@localhost busybox-1.22.1]# make menuconfig
//进入配置界面
之后会看到以下界面
然后在进行如下选项配置
1、进入Busybox Settings
Busybox Settings --->
Build Options --->
│[*] Build BusyBox as a static binary (no shared libs) //静态编译busybox,编出来的程序不依赖其它动态库
(arm-linux-gnueabihf-) Cross Compiler prefix //光标移动这行后,按确认键进入输入模式. 指定使用交叉编译器
2、第一步设置好之后,返回到上一级菜单中
3、进入Installation Options
按回车选中
将./_install 改为 …/system 目的是把生成的文件存放到这个目录下,当然也可以不用改这里,那么就默认是存放到./_install
以上设置完成后,退出并保存,然后执行
[root@localhost busybox-1.22.1]# make
//开始编译busybox
注:如发现以下错误
collect2: 错误:ld 返回 1
make: *** [busybox_unstripped] 错误 1
//解决办法
进入make menuconfig中,找到下列选项并去掉选中
Linux System Utilities —> [ ] Support mounting NFS file systems 网络文件系统
Networking Utilities —> [ ] inetd (Internet 超级服务器 )
//然后在次执行make
待编译完成后在执行
[root@localhost busybox-1.22.1]# make install
然后进入system里(就是在make menuconfig 的时候写如的…/system)
[root@localhost system]# ls //编译后生成的一些文件
bin linuxrc sbin usr
[root@localhost system]# pwd
/ARM4412/system
在system目录里创建文件系统所需要的目录
//创建 dev proc sys tmp var mnt
[root@localhost system]# mkdir dev
[root@localhost system]# mkdir proc
[root@localhost system]# mkdir sys
[root@localhost system]# mkdir tmp
[root@localhost system]# mkdir var
[root@localhost system]# mkdir mnt
[root@localhost system]# mkdir etc
[root@localhost system]# mkdir lib
[root@localhost system]# ls
bin dev etc linuxrc mnt proc sbin sys tmp usr var lib
//在var目录下创建以下文件
[root@localhost system]# mkdir var/log
[root@localhost system]# mkdir var/lock
[root@localhost system]# mkdir var/lib
[root@localhost system]# mkdir var/run
[root@localhost system]# mkdir var/tmp
[root@localhost system]# ls ./var/
lib/ lock/ log/ run/ tmp/
//进入etc目录中,完成以下步骤
[root@localhost etc]# mkdir init.d
[root@localhost etc]# ls
init.d
[root@localhost etc]# touch init.d/rcS
//打开rcS文件
[root@localhost etc]# vim init.d/rcS
写入以下内容,
mount -t proc none /proc
mount -t sysfs none /sys
mount -t tmpfs none /tmp
mount -t ramfs none /dev
mdev -s
syslogd
echo /sbin/mdev > /proc/sys/kernel/hotplug
//接着
[root@localhost etc]# touch inittab
[root@localhost etc]# ls
init.d inittab
[root@localhost etc]# vim inittab
//打开inittab文件后,加入以下内容
::sysinit:/etc/init.d/rcS
ttyS0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
//继续
[root@localhost etc]# touch profile
[root@localhost etc]# ls
init.d inittab profile
[root@localhost etc]# vim profile
//打开profile,增加环境变量
export PS1="[uboot@itop4412 \W] # "
注:
\d :代表日期,格式为weekday month date,例如:"Mon Aug1"
\H:完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。家目录会以 ~代替
\W :利用basename取得工作目录名称,所以只会列出最后一个目录
\# :下达的第几个命令
\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$
进入system的lib目录中
[root@localhost system]# cd lib/
//把应用程序所需的动态库从交叉编译器里复制到该目录下
[root@localhost lib]# cp /usr/local/arm/arm-gcc/arm-linux-gnueabihf/libc/lib/* ./
以上步骤完成后,给整个文件系统目录设置权限
[root@localhost system]# chmod 0777 -R /ARM4412/system/
接下来就是要生成文件系统镜像了
把linux_tools.tgz复制到根目录下进行解压
[root@localhost /]# tar xf linux_tools.tgz
然后进入到 /ARM4412 中
[root@localhost ARM4412]# make_ext4fs -s -l 314572800 -a root -L linux system.img system
//镜像文件生成,烧录即可(参考uboot编译章节烧录即可)
到此文件系统制作完成