嵌入式linux busybox 文件系统的移植 和 rz sz 命令的添加

2019-07-12 16:18发布

-----------------创建rootfs文件夹-------------------
mkdir my_rootfs
cd my_rootfs
mkdir bin dev etc home lib mnt proc sbin sys tmp root usr var mnt/etc usr/bin usr/lib usr/sbin
touch linuxrc 
使用mknod来自己建所需要的device, 举例: 
# mknod -m 600 dev/console c 5 1
# mknod -m 666 dev/null c 1 3 BusyBox-1.9.2版本

------------------修改编译配置选项-------------------- 
开始移植
  1.       下载busybox1.9.2,并解压缩。 下载busybox源代码:http://busybox.NET/downloads/busybox-1.9.2.tar.bz2 交叉编译工具:arm-Linux-gcc-3.4.1 解压源码:tar -jxvf busybox-1.9.2.tar.bz2   2.       修改Makefile中的174行的 arch和编译工具链头。 ARCH                 ?= arm CROSS_COMPILE       ?= /usr/local/arm/3.4.1/bin/arm-linux-   3.       make menuconfig. 修改编译配置选项。 Busybox Setting----->        build option-->     [ ] Build BusyBox as a static binary (no shared libs)                          [*] Build shared libbusybox                                                    [*]   Produce a binary for each applet, linked against libbusybox              [*]   Produce additional busybox binary linked against libbusybox               [ ] Build with Large File Support (for accessing files > 2 GB)          installation option-->     [*] Don't use /usr                                                              Applets links (as soft-links) --->                                         (./_install) BusyBox installation prefix    Busybox Library Tuning --->                                 MD5: Trade Bytes for Speed                                       [*] Faster /proc scanning code (+100 bytes)                             [*] Support for /etc/networks                                       [*] Support for /etc/networks [*]   Additional editing keys [*]   vi-style line editing commands [*]   History saving [*]   Tab completion [*]   Username completion [*]   Fancy shell prompts   Linux Module Utilities ---> [*] Support version 2.6.x Linux kernels       [*] insmod       [*]   Enable load map (-m) option       [*]     Symbols in load map      [*] rmmod       [*] lsmod      [*]   lsmod pretty output for 2.6.x Linux kernels       [*] modprobe      [ ]   Multiple options parsing     [ ]   Fancy alias parsing     ---   Options common to multiple modutils     [ ] Support tainted module checking with new kernels     [ ] Support version 2.2.x to 2.4.x Linux kernels       [*] Support version 2.6.x Linux kernels   shell -à    [*]  alias support 其他的用默认值 -----------------------编译busybox----------------------- make
make install
在busybox/_install 目录下会生成我们需要的文件。
修改_install/bin/busybox 的属性。为4755
chmod 4755 ./_install/bin/busybox
必须要修改属性,否则在busybox 中很多命令会受限
将编译好的busybox拷贝到my_roofs下面。   【 _install】 cp -Rfv * /my_roofs 
 
-----------------------/lib文件--------------------------------
/lib的库其实就是进行busybox编译的库,即交叉编译器的库,我们这里使用的是3.4.1(位置/usr/local/arm/3.4.1)。
# cd  /usr/local/arm/3.4.1/arm-linux/lib
# for file in libc libcrypt libdl libm libpthread libresolv libutil
> do
> cp $file-*.so  /my_rootfs/lib (复制到你做的文件系统的/lib目录下)
> cp -d $file.so.[*0-9]  /my_rootfs/lib (同上)
> done
# cp -d ld*.so*  /my_rootfs/lib   (同上)

-----------------系统配置文件的建立---------------------
--========/etc目录============
(1)profile文件
#Set search library path
export LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
#Set user path
        PATH="/bin:/sbin:/usr/bin:/usr/sbin:"$PATH
alias ll='ls -l' 
        #Set PS1
   USER="`id -un`"
   LOGNAME=$USER
   PS1='[/u@/h /W]/$ '
PATH=$PATH 
        export USER LOGNAME PS1 PATH
  
(2)fstab文件
proc  /proc proc  defaults  0 0
none  /tmp  ramfs defaults  0 0
mdev  /dev  ramfs defaults  0 0
sysfs /sys  sysfs defaults  0 0 (3)inittab文件
::sysinit:-/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a (4)创建/etc/init.d文件夹和rcS,在rcS中添加
#! /bin/sh
 
echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" echo "^     Welcome to YAFFS root filesystem!   ^" echo "^                    soso                  ^" echo "^^^^^^^^^^^^^^^^09-3-18^^^^^^^^^^^^^^^^^^^^"
/bin/hostname -F /etc/host
# mount all filesystem defined in "fstab" ln -s /dev/vc/0 /dev/tty1 echo "# mount all..........."
/bin/mount -a echo "# Starting mdev........."
#/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s /sbin/ifconfig lo 127.0.0.1
/sbin/ifconfig eth0 192.168.0.55
/sbin/route add default gw 192.168.0.1
(5)创建host文件
soso (6)创建mdev.conf文件 (空文件) (7)复制主机/etc/下面的文件passwd, group, shadow 文件到/etc
# cp /etc/group .
# cp /etc/passwd .
# cp /etc/shadow . 修改passwd中用户使用的shell名称。FC6上默认的为bash,而vivi只支持ash。
root:x:0:0:root:/root:/bin/bash ----> root:x:0:0:root:/root:/bin/ash (8)修改各文件和文件夹的权限
# chmod 755 /my_roofs/etc/init.d/rcS
# chmod 755 /my_roofs/etc/host -------------yaffs文件系统映像的制作---------
使用mkyaffsimg程序可以把一个目录做成一个yaffs映像文件,然后使用usb下载到板子上。进入文件系统目录层,使用以下命令。
#./mkyaffsimg my_roofs rootfs.img  (改名filesystem.yaffs)
这样就会在该目录下生成roofs.img映像文件,下载到开发板运行即可。 --------------cramfs文件系统映像的制作(cramfs压缩率比较高)------------
在FTP中下载cramfs-1.1.tar.gz,解压到自己设定的目录下,如:
tar xzvf cramfs-1.1.tar.gz –C /home/
进入生成有mkcramfs文件的目录下(一定要进入此目录,否则会提示找不到该命令)
输入命令:#./mkcramfs / rootfs rootfs.cramfs
在当前目录下即生成rootfs.cramfs映像文件。到此Linux操作系统移植完毕。   下载源码  移植新下载的linux源码中是没有超级终端的命令的,需要自己添加。添加完了,就开发板就可以PC通过串口传输文件了。 步骤: 1、  下载软件 rzsz-3.48.tar.gz。 http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz下载。 2、解压 tar zxvf  rzsz-3.48.tar.gz         3、安装  cd src                vi Makefile               修改CC=arm-linux-gcc               保存退出                make posix 。     注意:这个软件安装与常规的GNU软件不同—没有configure(配置)及make install (安装过程)。               我的是S3C2410的交叉编译器,不同的平台只是交叉编译器不一样而已。         输入命令make posix后,如果编译成功,在输入 ls命令,你将发现,多了很多文件         COPYING   gz         minirb.c    rc      rz.c    sz       undos.doc  zmodem.h         crc.c     mailer.rz  minirb.doc  README  rz.doc  sz.c     zcommand   zmr.c         crc.doc   Makefile   rb          rx      sb      sz.doc   zcommandi  zupl.t         crctab.c  Makefile~  rbsb.c      rz      sx      undos.c  zm.c     将rb,rx,rc,rz,sb,sx,sz,zcommand zcommandi拷贝到你制作的根文件系统的bin目录下,然后在将交叉编译器下的ld-2.5.so      libc-2.5.so      libcrypt.so.1  libgcc_s.so.1  libm.so.6 ld-linux.so.3  libcrypt-2.5.so  libc.so.6      libm-2.5.so等库(可能版本不同,相应的数字,但只要是这几个文件即可)拷贝到根文件系统的lib目录下,然后再重新制作该根文件系统,下载到开发板,重新启动,可以试一下rz和sz