Linux 最小系统制作

Linux 最小系统制作

一、制作工具Busybox

在制作文件系统的时候,我们需要使用“Busybox 工具”,即为附件压缩包“busybox-1.21.1.tar.bz2”。“BusyBox 工具”是一个集成了一百多个最常用Linux 命令和工具的软件。 BusyBox 包含了一些简单的工具,例如 ls、cat 和 echo 命令等等,还包含了一些更大、更复杂的工具,例 grep、find、mount 以及 telnet 命令。有些人将 BusyBox 称为 Linux工具里的瑞士军刀。简单的说 BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统自带的 shell。

“Busybox 工具”的官方网址是“http://www.busybox.net/”,这是一个开源的程序,并且一直在更新中,我们使用的版本是“busybox-1.21.1.tar.bz2”。

二、制作步骤

(1)首先拷贝“busybox-1.21.1.tar.bz2”到我们的虚拟机 Ubuntu 系统上,然后在Ubuntu 命令行,执行“#tar -xvf busybox-1.21.1.tar.bz2”解压命令

(2)如下图,使用“#cd busybox-1.21.1”命令进入到前面解压出来的“busybox-1.21.1”文件夹中

(3)输入make menuconfig 进行配置

 

(4)进入Busybox Settings ->Build Optiions-> Cross Compiler prefix

(5)输入交叉编译器arm-none-linux-gnueabi- 

(6)返回busybox settings

(7)进入Installation Options ->BusyBox installation prefix

(8)删除./_install

(9)输入../system

(10)返回最上级,然后保存退出

(11)输入make,开始编译busybox

(12)把编译后的二进制文件安装到../system,输入命令make install

(13)Cd ../system 看里面的文件

(14)制作的文件系统还需要新建“dev,etc,lib,mnt,proc,sys,tmp,var”文件夹,使用命令“mkdir dev etc lib mnt proc sys tmp var”

 

(15) 进入ect文件夹cd etc,创建文件vi eth0-setting ,输入以下内容并保存:

IP=192.168.1.230
Mask=255.255.255.0
Gateway=192.168.1.1
DNS=192.168.1.1
MAC=08:90:90:90:90:90     

(16) 修改文件权限chmod 755 eth0-setting 

(17)在 etc 目录下用“mkdir init.d”命令建立“init.d”文件夹 ,进入init.d文件夹,cd init.d,创建文件vi ifconfig-eth0 ,输入以下内容

11. #!/bin/sh   22.echo -n Try to bring eth0 interface up......>/dev/ttySAC2   33.if [ -/etc/eth0-setting ] ; then   44.source /etc/eth0-setting   55.if grep -"/dev/root / nfs " /etc/mtab ; then   66.echo -NFS root ... > /dev/ttySAC2   77.else   88.ifconfig eth0 down   99.ifconfig eth0 hw ether $MAC   1010.ifconfig eth0 $IP netmask $Mask up   1111.route add default gw $Gateway   1212.fi   1313.echo nameserver $DNS > /etc/resolv.conf   1414.else   1515.if grep -"/dev/root / nfs " /etc/mtab ; then   1616.echo -NFS root ... > /dev/ttySAC2   1717.else   1818./sbin/ifconfig eth0 192.168.253.12 netmask 255.255.255.0 up   1919.fi   2020.fi   2121.echo Done > /dev/ttySAC2  

(18)修改文件权限chmod 755 ifconfig-eth0

(19)然后在“init.d”文件夹下使用“vi rcS”命令建立“rcS”文件 ,输入以下内容

11.#! /bin/sh   22.PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:   33.runlevel=S   44.prevlevel=N   55.umask 022   66.export PATH runlevel prevlevel   77.# #   88.Trap CTRL-C &c only in this shell so we can interrupt subprocesses.   99.#   1010.trap ":" INT QUIT TSTP   1111./bin/hostname iTOP-4412   1212.#/bin/mount --t proc none /proc   1313.#/bin/mount --t sysfs none /sys   1414.#/bin/mount --t usbfs none /proc/bus/usb   1515.#/bin/mount -t ramfs none /dev   1616.[ -/proc/1 ] || /bin/mount --t proc none /proc   1717.[ -/sys/class ] || /bin/mount --t sysfs none /sys   1818.[ -/dev/tty ] || /bin/mount -t ramfs none /dev   1919.echo /sbin/mdev > /proc/sys/kernel/hotplug   2020./sbin/mdev -s   2121.#/bin/hotplug   2222.# mounting file system specified in /etc/fstab   2323.mkdir -/dev/pts   2424.mkdir -/dev/shm   2525./bin/mount --t devpts none /dev/pts -o mode=0622   2626./bin/mount --t tmpfs tmpfs /dev/shm   2727.#/bin/mount --t ramfs none /tmp   2828.#/bin/mount --t ramfs none /var   2929.mkdir -/var/empty   3030.mkdir -/var/log   3131.mkdir -/var/log/boa   3232.mkdir -/var/lock   3333.mkdir -/var/run   3434.mkdir -/var/tmp   3535.ln -sf /dev/ttyS2 /dev/tty2   3636.ln -sf /dev/ttyS2 /dev/tty3   3737.ln -sf /dev/ttyS2 /dev/tty4   3838.syslogd   3939./etc/rc.d/init.d/netd start   4040.echo " " > /dev/tty1   4141.echo "Starting networking..." > /dev/tty1   4242.#sleep 1   4343.#/etc/rc.d/init.d/httpd start   4444.#echo " " > /dev/tty1   4545.#echo "Starting web server..." > /dev/tty1   4646.#sleep 1   4747.#/etc/rc.d/init.d/leds start   4848.#echo " " > /dev/tty1   4949.#echo "Starting leds service..." > /dev/tty1   5050.#echo " "   5151.#sleep 1   5252.#echo "*************************************" > /dev/ttySAC2   5353.#echo " http://www.topeet.com.cn " > /dev/ttySAC2   5454.#echo "*************************************" > /dev/ttySAC2   5555.#echo "*************************************"   5656.#echo " http://www.topeet.com.cn "   5757.#echo "*************************************"   5858.mkdir /mnt/disk   5959.sleep 1   6060./sbin/ifconfig lo 127.0.0.1   6161./etc/init.d/ifconfig-eth0  

(20)然后保存并退出“rcS”文件,使用“chmod 755 rcS”命令修改“rcS”文件的权限 

(21)返回上一级,cd ..进入etc文件夹

(22)接下来在“etc”目录下使用“vi passwd”命令建立文件“passwd” ,输入以下内容

root::0:0:root:/:/bin/sh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/: 

(23)然后保存并退出“passwd”文件,使用“chmod 755 passwd”命令修改“passwd”文件的权限 

(24)使用“vi profile”命令在“etc”目录建立“profile”文件 ,输入

11.# Ash profile   22.# vim: syntax=sh   33.# No core files by default   44.ulimit -S -0 > /dev/null 2>&1   55.USER="`id -un`"   66.LOGNAME=$USER   77.PS1='[$USER@$HOSTNAME]# '   88.PATH=$PATH   99.HOSTNAME=`/bin/hostname`   1010.export USER LOGNAME PS1 PATH  

(25)然后保存并退出“profile”文件,使用“chmod 755 profile”命令修改“profile”文件的权限 

(26)接下来使用“mkdir rc.d”命令在“etc”目录建立文件夹“rc.d” 

(27)进入rc.d,使用“mkdir init.d”命令建立“init.d”文件夹 ,进入cd init.d文件夹

(28)接着在“init.d”文件夹,使用“vi netd”命令建立“netd”文件 ,输入

11.#!/bin/sh   22.base=inetd   33.# See how we were called.   44.case "$1" in   55.start)   66./usr/sbin/$base   77.;;   88.stop)   99.pid=`/bin/pidof $base`   1010.if [ -"$pid" ]; then   1111.kill -9 $pid   1212.fi   1313.;;   1414.esac   1515.exit 0  

(29)然后保存并退出“netd”文件,使用“chmod 755 netd”命令修改“netd”文件的权限 

(30)使用“cd ../../../”命令返回到“system”目录 ,进入lib文件夹

(31)因为我们使用的交叉编译环境和编译内核是一样的,所以我们的编译器在文件夹“/usr/local/arm/arm-2009q3”中。Busybox 编译生成的二进制文件是以动态链接库的形式运行,所以我们需要拷贝编译器里面的库文件到“lib”目录,使用命令:cp/usr/local/arm/arm-2009q3/arm-none-Linux-gnueabi/libc/lib/* ./

(32)返回system,再进入var,然后使用“mkdir lib lock log run tmp”命令在“var”目录下建立“lib,lock,log,run,tmp”五个目录

(33)所有文件都创建好了,下面需要编译成映像文件

(34)拷贝“Linux_tools.tgz”到 Ubuntu 的“/”目录下,并使用命令“tar -vxf linux_tools.tgz”解压

(35)使用命令“make_ext4fs -s -l 314572800 -a root -L Linux system.img system”,执行该命令后,会生成“system.img”文件系统镜像

(36)然后把system.img烧录进开发板,烧录方式和android和QT的系统文件一样,其他的映像可以使用QT和android的映像

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Twitter的分布式自增ID算法snowflake (Java版)

概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移