06 文件系统制作

busybox用于制作小型的文件系统,常用于嵌入式。
制作过程:
在迅为itop4412开发板资料包中有busybox的压缩包(也可以下载别的版本)
06 文件系统制作
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
//进入配置界面

之后会看到以下界面
06 文件系统制作
然后在进行如下选项配置
1、进入Busybox Settings

Busybox Settings  --->          
            Build Options  ---> 
                │[*] Build BusyBox as a static binary (no shared libs)  //静态编译busybox,编出来的程序不依赖其它动态库
                (arm-linux-gnueabihf-) Cross Compiler prefix  //光标移动这行后,按确认键进入输入模式. 指定使用交叉编译器

06 文件系统制作2、第一步设置好之后,返回到上一级菜单中
06 文件系统制作
3、进入Installation Options
06 文件系统制作
按回车选中
06 文件系统制作
将./_install 改为 …/system 目的是把生成的文件存放到这个目录下,当然也可以不用改这里,那么就默认是存放到./_install
06 文件系统制作
以上设置完成后,退出并保存,然后执行

[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/

接下来就是要生成文件系统镜像了
06 文件系统制作
把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编译章节烧录即可)

到此文件系统制作完成

上一篇:如何在Windows中从Java创建非只读目录


下一篇:linux常用命令-3