zoukankan      html  css  js  c++  java
  • 使用BusyBox制作嵌入式Linux根文件系统

    STEP 1:构建目录结构 

    创建根文件系统目录,主要包括以下目录
    /dev  /etc /lib  /usr  /var /proc /tmp /home /root /mnt /bin  /sbin  /sys 

    #mkdir     /home/rootfs
    #cd        /home/rootfs

    #mkdir  dev  etc  lib  usr  var  proc  tmp  home  root  mnt   sys

    STEP 2:    使用busybox构建/bin /sbin linuxrc

    进入busybox-1.16.1目录,执行

    #make defconfig

    #make menuconfig

    Busybox Setting ----->
        Build Options -----> 
            //1选择将busybox进行静态编译 
            [*]Build BusyBox as a static binary (no shared libs) 
            //2.指定交叉编译器为 
            (/usr/local/arm/4.3.2/bin/arm-linux-)Cross Compiler prefix

    Installation Options -----> (选择生成的文件存放目录,也可以直接放在rootfs下就不用拷贝了)

            //3.选择上 Don’t use /usr 
    Busybox Library Tuning---> 
        [*]Username completion 
        [*]Fancy shell prompts 
        [*]Query  cursor  position  from  terminal 
            //4.编译出的busybox的shell命令解释器支持显示当前路径及主机信息

    保存退出

    #make   
    #make install

    在busybox目录下会看见 _install目录,里面有/bin /sbin linuxrc三个文件
    将这三个目录或文件拷到第一步所建的rootfs文件夹下。

    #cp bin/ sbin/ linuxrc /home/rootfs -ra 

       切记一定要带上-a的参数,因为bin目录里大部分都是链接,如果不带-a的参数,拷过去之后会做相应的复制,不再是链接的形式

    STEP 3  构建etc目录:

    1)进入根文件系统rootfs的etc目录,执行如下操作:

           拷贝Busybox-1.16.1/examples/bootfloopy/etc/* 到当前目录下
            #cp –r busybox-1.16.1/examples/bootfloopy/etc/*  rootfs/etc

            修改inittab,

                    原始文件为:

            1 ::sysinit:/etc/init.d/rcS
            2 ::respawn:-/bin/sh
            3 tty2::askfirst:-/bin/sh
            4 ::ctrlaltdel:/bin/umount -a -r

          修改后为:

            ---(1):开机免登陆,直接打开shell(前面数字为行号)         

            1 ::sysinit:/etc/init.d/rcS
            2 #::respawn:-/bin/sh
            3 #::respawn:-/bin/login
            4 console::askfirst:-/bin/sh
            5 #tty2::askfirst:-/bin/sh
            6 ::ctrlaltdel:/bin/umount -a -r

            ---(2):开机需要登陆(前面数字为行号)         

            1 ::sysinit:/etc/init.d/rcS
            2 #::respawn:-/bin/sh
            3 ::respawn:-/bin/login
            4 #console::askfirst:-/bin/sh
            5 #tty2::askfirst:-/bin/sh
            6 ::ctrlaltdel:/bin/umount -a -r

    2)拷贝虚拟机上的/etc/passwd, /etc/group, /etc/shadow到rootfs/etc下

            # cp /etc/passwd   rootfs/etc
            # cp /etc/group    rootfs/etc 
            # cp /etc/shadow   roofs/etc

      对以下三个文件修改,只保存与root相关的项,根据具体情况内容会有所不同。

      修改passwd为root:x:0:0:root:/root:/bin/sh,即只保存与root相关项,而且最后改成/bin/ash。

      修改group为root:x:0:root

      修改shadow为root:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7:::

      登陆开发板时需输入用户名密码,同虚拟机相同

    3)修改profile

      PATH=/bin:/sbin:/usr/bin:/usr/sbin          //可执行程序 环境变量

      export LD_LIBRARY_PATH=/lib:/usr/lib        //动态链接库 环境变量

      /bin/hostname osee

      USER="`id -un`"

      LOGNAME=$USER

      HOSTNAME='/bin/hostname'

      PS1='[u@h W]# '                          //显示主机名、当前路径等信息:

    4)修改 etc/init.d/rc.S文件

      /bin/mount -n -t ramfs ramfs /var

      /bin/mount -n -t ramfs ramfs /tmp

      /bin/mount -n -t sysfs none /sys

      /bin/mount -n -t ramfs none /dev

      /bin/mkdir /var/tmp

      /bin/mkdir /var/modules

      /bin/mkdir /var/run

      /bin/mkdir /var/log

      /bin/mkdir -p /dev/pts                    //telnet服务需要

      /bin/mkdir -p /dev/shm                    //telnet服务需要

      #echo /sbin/mdev > /proc/sys/kernel/hotplug//USB自动挂载需要

      /sbin/mdev -s         //启动mdev在/dev下自动创建设备文件节点

      /bin/mount -a

       #######配置网络################################

       /sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0

      /sbin/ifconfig eth0 192.168.1.70
      /sbin/ifconfig eth0 netmask 255.255.255.0
      /sbin/route add default gw 192.168.1.1 eth0

      /sbin/ifconfig eth1 192.168.1.71 netmask 255.255.255.0
      /sbin/route add default gw 192.168.1.1 eth1

    5)修改etc/fstab文件,增加以下文件

            none   /dev/pts    devpts   mode=0622      0 0
           tmpfs  /dev/shm    tmpfs    defaults       0 0

    STEP 4 构建lib目录:

         (~/at91/x-tools/arm-zch-linux-gnueabi/arm-zch-linux-gnueabi/sysroot/lib我的只是把这个目录下的SO文件复制就可以了)

         1)#cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

         将以下动态库拷贝到rootfs/lib下
         #cp  *so*  roofs/lib  -a

         2)#cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib
         将以下动态库拷贝到rootfs/lib下 
         #cp ./libstdc++.so.*  rootfs/lib  -a

  • 相关阅读:
    Python--初识函数
    Python中的文件操作
    Python中的集合
    Python中的编码和解码
    Python的关键字is和==
    Python中的字典
    Python中的列表和元组
    Python中几种数据的常用内置方法
    Python的编码
    python_while
  • 原文地址:https://www.cnblogs.com/Charles-Zhang-Blog/p/3419301.html
Copyright © 2011-2022 走看看