1、下载busybox-1.30.1 地址:https://busybox.net/downloads/busybox-1.30.1.tar.bz2

2、解压:tar xvf busybox-1.30.1.tar.bz2

3、安装交叉编译器

4、安装libncurses5-dev:sudo apt-get install libncurses5-dev

5、配置busybox:make menuconfig

  使用默认的配置项就可以,下面是一些重要的配置项说明:

  Setting->Build Options->Build BusyBox as a static binary (no shared libs) 是否使用静态编译,如果不是静态编译,则busybox运行时还需要复制几个动态库文件,否则不能运行

  settings->build options->Cross compiler prefix设置交叉编译前缀(如果设了环境变量CROSS_COMPILE或make指定了则这里不需要设置)

  settings->installation options->Destination path for 'make install'设置安装目录,默认是./_install

  Linux System Utilities->mdev支持mdev

6、编译

  make CROSS_COMPILE=arm-linux-gnueabihf-

  make install

  就会安装在_install目录下有如下目录:bin sbin usr,还有一个linuxrc指向bin/busybox

7、进入_install目录创建目录

  mkdir dev etc lib var proc tmp home root mnt sys

8、生成etc配置文件(在etc目录下操作):
  再复制配置文件:cp -rf ~/busybox-1.30.1/examples/bootfloppy/etc/* .
  最终生成的配置文件如下:
  etc/inittab(开机免登录):
    ::sysinit:/etc/init.d/rcS
    #::respawn:-/bin/sh
    #::respawn:-/bin/login
    console::askfirst:-/bin/sh
    ::ctrlaltdel:/bin/umount -a -r
  etc/inittab(开机需要登录):
    ::sysinit:/etc/init.d/rcS
    #::respawn:-/bin/sh
    ::respawn:-/bin/login #如果这里加上 -f root 则自动登录
    #console::askfirst:-/bin/sh
    ::ctrlaltdel:/bin/umount -a -r
    如果需要密码,则:
      sudo cp /etc/passwd .
      sudo cp /etc/group .
      sudo cp /etc/shadow .
    再编辑这三个文件,只保留root那一行,这样root的密码与虚拟机(123456)相同,最终passwd,group,shadow三个文件内容依次为:
      root:x:0:0:root:/root:/bin/sh #将x去掉就root没有密码了
      root:x:0:
      root:$6$99hUh1hc$NptxbUGmNiX1zQYM08SAVq.2xbDHqEEy6rKbIHWozgJ2cjoIP39OjmkHgSkr2vR6fXRmy5BXfDQW4lgHH/

  ect/profile文件:
    export PATH=/bin:/sbin:/usr/bin:/usr/sbin
    PS1='\u@\w\$'
  etc/fstab文件:
    /dev/mmcblk0p2 / ext4 defaults 0 1
    proc /proc proc defaults 0 0
    devpts /dev/pts devpts defaults 0 0
    tmpfs /dev/shm tmpfs defaults 0 0
  etc/init.d/rc.S文件(添加自动执行命令,该文件需有执行属性chmod +x rcS):
    #! /bin/sh

    /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服务需要
    /bin/mount -a
    echo /sbin/mdev > /proc/sys/kernel/hotplug #USB自动挂载需要
    /sbin/mdev -s #启动mdev在/dev下自动创建设备文件节点
    /bin/hostname maxonic
    #######配置网络################################
    #/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
9、创建设备结点
  进入dev目录,执行如下命令
  sudo mknod console c 5 1
  sudo mknod null c 1 3
  #sudo mknod ttySAC0 c 204 64
  #sudo mknod tty2 c 204 65
  #sudo mknod mtdblock0 b 31 0
  #sudo mknod mtdblock1 b 31 1
  #sudo mknod mtdblock2 b 31 2
10、复制引用的库(如果是静态编译则不需要复制)

  如果busybox不是配置为静态编译,则需要复制使用到的动态库,动态库在交叉编译器中有:

    arm-linux-gnueabihf-readelf -d bin/busybox #查看引用了哪些动态库,发现有三个(再递归查看引用还有一个),复制四个库到lib目录
    sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/libm.so.6 .
    sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/libresolv.so.2 .
    sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/libc.so.6 .
    sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/ld-linux-armhf.so.3 .
  只需要复制这四个库就可以了,当然也可直接整个lib目录一起复制:
    sudo cp -a ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/* .

11、复制到目标盘
  进入_install目录,执行如下命令:
    sudo cp -rfav * /mnt/disk
  进入目标盘然后执行:
    sudo chown root:root . -R

12、如果运行时停在:
  Run /sbin/init as init process
  random: fast init done
  则是console参数没有传对,所以串口显示不了,更改内核启动console参数即可

13、登录时会打印出root login on 'UNKNOWN'看着不舒服,找到busybox源码login.c注释掉syslog(LOG_INFO, "root login%s", fromhost)即可

用BusyBox制作Linux最小系统的更多相关文章

  1. Linux 最小系统制作

    Linux 最小系统制作 一.制作工具Busybox 在制作文件系统的时候,我们需要使用“Busybox 工具”,即为附件压缩包“busybox-1.21.1.tar.bz2”.“BusyBox 工具 ...

  2. 基于busybox的Linux小系统制作 (initrd)

    我们有时候有需要在busybox基础上,制作linux,可是却不知道具体怎么做,这里将对基于busybox的linux小系统制作做出详细的步骤说明.准备环境:1.一个Redhat完整系统的虚拟机,本次 ...

  3. [嵌入式开发入门]4412开发板从零建立Linux最小系统

    本文转自iTOP-4412开发板实战教程书籍 http://www.topeetboard.com iTOP-4412开发板不仅可以运行Android,还可以运行简单的Linux最小文件系统. 最小L ...

  4. Linux最小系统移植之早期打印CONFIG_EARLY_PRINTK

    请先参考先前博文:  Linux最小系统移植之早期打印CONFIG_DEBUG_LL  , 因为eraly_printk其实就是对printch()封装的 一. 必要选项(在上面链接选中的前提下再新增 ...

  5. Linux最小系统移植之早期打印CONFIG_DEBUG_LL

    一.几个关键宏定义 CONFIG_DEBUG_LL. CONFIG_DEBUG_LL_INCLUDE 容我慢慢道来, 首先要使能早期打印, menuconfig必须选中CONFIG_DEBUG_LL, ...

  6. 使用BusyBox制作linux根文件系统(CramFS+mdev)

    转:http://www.360doc.com/content/10/0428/11/496343_25245348.shtml 操作系统:Ubuntu9.04 内核版本:linux-2.6.24.7 ...

  7. ZYNQ学习之路1. Linux最小系统构建

    https://blog.csdn.net/u010580016/article/details/80430138?utm_source=blogxgwz1 开发环境:window10, vivado ...

  8. 在Linux最小系统上编译运行第一个helloworld程序

    一.安装和使用SSH软件 1.安装SSH 软件 1)SSH 软件压缩包可以在网盘下载,下载后解压,进入解压出来的文件夹,如下图. 2)单击上图中的“SSHSecureShellClient-3.2.9 ...

  9. 使用BusyBox制作Linux根文件系统

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

随机推荐

  1. Python3.5学习之旅——day4

    本节内容 1.装饰器 2.迭代器与生成器 3.内置方法 4.软件目录结构规范 一.装饰器 装饰器是一个用来装饰其他函数的工具,即为其他函数添加附加功能,其本质就是函数. 装饰器需要遵循的以下两个原则: ...

  2. JavaScript - __proto__和prototype,原形

    参考 https://stackoverflow.com/questions/9959727/proto-vs-prototype-in-javascript 区别 构造函数中的prototype创建 ...

  3. 操作系统OS,Python - 多进程(multiprocessing)、多线程(multithreading)

    多进程(multiprocessing) 参考: https://docs.python.org/3.6/library/multiprocessing.html 1. 多进程概念 multiproc ...

  4. ubuntu13.10安装tomcat

    步骤: ubuntu :13.10(32bit) -->i586 jdk 1.7 安装JDK 步骤: 1.官网下载如下图: 2.点击java SE7,下载jdk1.7 3.点击接受,并下载对应的 ...

  5. spring boot中的底层配置文件application.yam(application.property)的装配原理初探

    *在spring boot中有一个基础的配置文件application.yam(application.property)用于对spring boot的默认设置做一些改动. *在spring boot ...

  6. A股上市公司财报披露时间

    一.上市公司年报披露时间:每年1月1日——4月30日. 二.上市公司中年报披露时间:每年7月1日——8月30日. 三.上市公司季报披露时间: 1季报:每年4月1日——4月30日. 2季报(中报):每年 ...

  7. 【原】python异步学习

    https://www.liaoxuefeng.com/wiki/1016959663602400/1017959540289152 https://www.jianshu.com/p/b5e347b ...

  8. 关于eclipse项目右键没有project facets的解决方法遇到的问题

    [ 关于eclipse项目右键没有project facets的解决方法] [创建maven项目生成WebRoot目录,web.xml文件,以及修改编译路径classess的解决办法,以及解决找不到或 ...

  9. Spring @Async之一:实现异步调用示例

    什么是“异步调用”? “异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用的语句返回结果 ...

  10. Serializable的理解和使用 -----转载

    1.定义 这是一个接口,当一个类实现这个接口后,这个类就变成了一个可序列化的类,它就可以被写入流,保存起来,然后也可以用流读取,反序列化. 一般情况下,一个对象会随着程序的执行完成而消失,而有时我们需 ...