busybox构建mini6410开发板的yaffs文件系统

来源:互联网 发布:什么软件改变图片大小 编辑:程序博客网 时间:2024/06/06 06:42

busybox源码网站地址:点击打开链接

我用的是:busybox-1.22.1.tar.bz2

开发板:arm-tiny-6410

参考资料来源:龙芯1B用户手册

用法说明:

busybox的配置方法类似与linux内核的配置,解压了工具包后,在busybox-1.22.1目录下,运行“make menuconfig”,选择你所需要的模块,保存后会在本地生成一个.config文件,它会指定busybox在编译的过程中需要包含那些功能。

<span style="font-size:18px;">#tar jxvf busybox-1.22.1.tar.bz2 #cd busybox-1.22.1/#make menuconfig</span>

配置选择

<span style="font-size:18px;">Busybox Settings  ---> Build Options  --->         [ ] Build BusyBox as a static binary (no shared libs) (NEW)//这个是静态编译的选项。(如果选择静态编译也记得要填写交叉编译器名称)[*] Build shared libbusybox //我做的是动态编译(/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-)  Cross Compiler prefix //回车填写交叉编译器名称</span>
说明:动态编译的 busybox 在构建文件系统时需要加入一些必须的动态库,而静态编译的 busybox 不依赖动态库便可执行,构建文件系统时可省略拷贝动态库的步骤。

<span style="font-size:18px;">Busybox Library Turning--->[*] vi-style line editing commands(NEW)[*] Fancy shell prompts(NEW)</span>
以上几个步骤基本上是配置完成了,但为了解决某些系统的 inoice,ubi出错,需对Miscellaneous Utilities进行如下设置

<span style="font-size:18px;">Miscellaneous Utilities-->[ ] inoice[ ] ubiattach[ ] ubidetach[ ] ubimkvol[ ] ubirmvol[ ] ubirsvol[ ] ubiupdatevol</span>

编译busybox

<span style="font-size:18px;">#make clean all</span>
安装到目录
<span style="font-size:18px;">#make install</span>
在busybox-1.22.1目录下下生成子目录_inistall,添加了bin,sbin,usr,linuxrc. 其中可执行文件 busybox 在 bin 目录下,其他的都是指向它的符号链接。

2构建根文件系统

2.1建立系统根目录(注意以下7个步骤都是在/root/rootfs下进行的)

<span style="font-size:18px;">#mkdir /root/rootfs#cd /root/rootfs#mkdir dev home proc tmp var etc lib mnt sys usr etc/rc.d</span>
2.2建立系统配置文件

(1)

<span style="font-size:18px;">#cd /root/ rootfs #vi etc/inittab</span>
说明:inittab 文件是 init 进程的配置文件,系统启动后所访问的第一个脚本文件,后续启动的文件都由它指定。
添加如下内容:
<span style="font-size:18px;">::sysinit:/etc/rc.d/rc.sysinit  #Example of how to put a getty on a seria line(for a terminal)::respawn:-/bin/sh      #no login(启动后进入 shell 环境)#::respawn:/sbin/getty -L ttySAC0 115200 vt100   #use login#tty::respawn:-/bin/sh#Stuff to do when restarting the init porcess::restart:/sbin/init#Stuff to do before rebooting::ctrlaltdel:/sbin/reboot                                        //捕捉 ctrl+alt+del 键,重启文件系统::shutdown:/bin/umount -a –r                             //当关机时卸载所有文件系统::shutdown:/sbin/swapoff –a</span>
(2)

<span style="font-size:18px;">#vi etc/rc.d/rc.sysinit</span>
说明:这是一个脚本文件,可以在里面添加想自动执行的命令。以下命令配置环境变量、主机名、dev 目录环境、挂接/etc/fstab 指定的文件系统、建立设备节点与设置 IP。

<span style="font-size:18px;">#!/bin/sh#Set binary pathexport PATH=/bin:/sbin:/usr/bin:/usr/sbin#Config dev envi#Config dev enviornmentmount -t tmpfs -o size=64k,mode=0755 tmpfs /devmkdir -p /dev/ptsmount -t devpts devpts /dev/pts#mount all filesystem defined in /etc/fstabecho "#mount all....."/bin/mount -aecho "#Starting mdev....."echo /sbin/mdev > /proc/sys/kernel/hotplug/sbin/mdev -s#Set hostname/bin/hostname "Loongson-gz"export LAGNAME=root#Set ip#ifconfig eth0 192.168.3.114 upifconfig lo 127.0.0.1</span>
(说明:eth0 的 ip 地址可根据需要自行配置)

(3)

<span style="font-size:18px;">#vi etc/fstab</span>
说明:执行 mount –a 时挂接/etc/fstab 指定的文件系统。
添加如下内容
<span style="font-size:18px;">sysfs   /sys    sysfs   defaults        0       0proc    /proc   proc    defaults        0       0tmpfs   /tmp    tmpfs   defaults        0       0tmpfs   /mnt    tmpfs   defaults        0       0tmpfs   /root   tmpfs   defaults        0       0tmpfs   /var/log        tmpfs   defaults        0       0</span>

(4)

<span style="font-size:18px;">#vi etc/profile</span>
说明:inittab 中执行了这样一个语句“::respawn:-/bin/sh”。
启动/bin/sh 程序时会启动 ash 的配置信息,
而它就是/etc/profile, sh会把 profile 的所有配置全部都运行一遍,因此用户可以把自己的启动程序放在这里。
添加如下内容:

<span style="font-size:18px;">#!/bin/sh#/etc/profile:system-wide .profile file for the Bourne shellsecho "Processing /etc/profile....."#set search library pathexport LD_LIBRARY_PATH=/lib:/usr/lib:/qte/lib#set user pathexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/exe/#Set PS1export PS1='[\u@\h:\w]\$'alias ll="ls -l"echo "Done!"</span>
(5)

修改系统配置文件权限

<span style="font-size:18px;">#chmod 755 etc/*#chmod 755 etc/rc.d/rc.sysinit</span>
(6)
拷贝 Busybox 文件
将安装好的 Busybox 文件拷贝到/root/rootfs/目录:
<span style="font-size:18px;">#cp ./Busybox1.19.2/_install/* /root/rootfs -rf</span>
(7)这一步很重要

<span style="font-size:18px;">#cd /root/rootfs/dev/#mknod console c 5 1#mknod null c 5 1</span>


2.3 拷贝库文件

提示:配置 Busybox 若选择静态编译则省略此步骤。
在 x86 系 统中,动 态编译 Busybox 制作 文件系统 ,需将下 列几个必 须库从工 具 链

<span style="font-size:18px;">libcrypt.so.1, libc.so.6, libdl.so.2, libgcc_s.so.1, libm.so.6, libpthread.so.0,libstdc++.so.6</span>
<span style="font-size:18px;">#cp /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/lib/库文件名 /root/rootfs/lib/</span>
注:如果制作完成,运行出现错误,可能是由于这些文件都是软链接,把实际的链接点拷贝到/root/rootfs/lib 即可。

可以使用脚本,快速地拷贝所需的基本动态库:

<span style="font-size:18px;">#cd /opt/gcc-3.4.6-2f/mipsel-linux/lib#vi cplib.s</span>
添加内容:
<span style="font-size:18px;">for file in libcrypt libc libdl libgcc_s libm libpthread libstdc++docp -d $file.so.[*0-9] /root/rootfs/libdonecp -d ld*.so* /root/rootfs/lib</span>
保存退出。
运行 cplib.sh SHELL 脚本:
<span style="font-size:18px;">#source cplib.sh</span>
为了减少根文件系统的库大小,使用交叉编译工具即 gcc-3.4.6-2f 的 strip 工具来处理库文
件,把二进制文件中的包含的符号表和调试信息删除掉,可有效减少库文件大小。
例:
<span style="font-size:18px;">#cd /opt/FriendlyARM/toolschain/4.5.1/bin/ /opt/FriendlyARM/toolschain/4.5.1/bin$ ./arm-linux-strip /root/rootfs/lib/*.so</span>
至此根文件系统(目录/root/rootfs)制作完成。


3.1镜像文件制作工具本机安装
(1)安装依赖工具 zlib:
<span style="font-size:18px;">#tar zxf zlib-1.2.3.tar.gz#cd zlib-1.2.3#./configure && make && make install</span>
(2)制作 yaffs2 文件系统工具 mkyaffs2image
<span style="font-size:18px;">#tar zxf yaffs2-d43e901.tar.gz#cd yaffs2-d43e901/utils#make</span>
在当前目录 yaffs2-d43e901/utils 下生成 mkyaffs2image,可以拷贝到/usr/bin:

<span style="font-size:18px;">#cp mkyaffs2image /usr/bin</span>
3.2 制作文件系统镜像文件

<span style="font-size:18px;">#mkyaffs2image /root/rootfs  /home/xxx/rootfs-yaffs2.img#chmod 777 rootfs-yaffs2.img                             //修改文件系统权限,防止出现无法烧写的情况 </span>

对于rootfs-yaffs2.img这个文件,最好在前面加个路径,不然可能会镜像制作到/root/rootfs,这样会导致制成的镜像很大!!

接下来就是就可以将rootfs-yaffs2.img烧写到开发板中

0 0
原创粉丝点击