zoukankan      html  css  js  c++  java
  • [嵌入式开发入门]4412开发板从零建立Linux最小系统

    本文转自iTOP-4412开发板实战教程书籍

    http://www.topeetboard.com

    iTOP-4412开发板不仅可以运行Android,还可以运行简单的Linux最小文件系统。

    最小Linux 系统“麻雀虽小,五脏俱全”,它不带图形界面的Linux 系统,剔除干扰因素便于理解,用来学习Linux系统编程非常合适。

    另外,Linux最小系统占用的内存空间很小,也经常用于不带图形界面的项目。

    1. 最小Linux系统简介

    制作文件系统需要使用到Busybox工具。

    BusyBox是一个集成了一百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了Linux系统的自带的shell。

    Busybox的下载网址是http://www.busybox.net/,这是一个开源的程序,并且一直在更新中,这里使用的版本是busybox-1.21.1.tar.bz2。

    2. 配置最小系统

    在虚拟机的Ubuntu的目录“/home”下新建目录“mkdir minilinux”,这个目录可以根据个人习惯建立,并不是强制要求。

    拷贝busybox-1.21.1.tar.bz2(这个软件在对应的实验视频目录文件下)到虚拟机的Ubuntu系统上的目录“/home/minilinux”下,然后在目录“/home/minilinux”下,执行解压命令“tar -xvf busybox-1.21.1.tar.bz2”解压,进入解压出的busybox-1.22.1目录中。

    Busybox的编译配置和Linux内核编译配置使用的命令是一样的,下面配置Busybox,如下图所示,使用命令“make menuconfig”,会出现Busybox的配置界面,如下图所示。

     

    选中Busybox Settings,进入到Busybox Settings界面。

    接着进入Build Optiions-> Cross Compiler prefix配置界面,它是指定用什么编译器来编译,输入使用的交叉编译工具“arm-none-linux-gnueabi-”。

    然后回到Busybox Settings设置界面,进入Installation Options配置界面,选中BusyBox installation prefix,然后进入BusyBox installation prefix配置界面(这个界面是设置编译完Busybox,把最终生成的二进制文件安装到哪个目录下面)。

    删除里面默认的./_install,然后输入“../system”(最终生成的二进制文件会安装到当前目录的上一级目录下的system目录里面)。

    退出menuconfig配置界面,保存配置。

    3. 编译和安装

    Busybox的配置已经完成了,接下来编译Busybox,在Ubuntu的终端输入make命令开始编译Busybox。

    编译完成之后,需要把编译生成的二进制文件安装到刚才指定的../system目录里面,使用命令“make install”安装二进制文件到“../system”目录。打开“../system”目录,可以看到安装的文件,如下图所示。

     

    4. 完善最小系统

    本节介绍如何添加最小系统需要的网络文件、用户文件、库等。

    在system目录下,使用命令“mkdir dev etc lib mnt proc sys tmp var”创建文件夹。

    进入到刚才创建的etc文件夹,在etc目录下建立eth0-setting文件,并在eth0-setting文件里输入下面的内容,保存之后修改权限位755。

    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

    在etc目录下建立init.d文件夹,进入到init.d文件夹,在init.d文件夹下建立ifconfig-eth0文件,然后在ifconfig-eth0文件输入下面的内容。保存并退出,修改 ifconfig-eth0文件的权限位755。

    #!/bin/sh

     

    echo -n Try to bring eth0 interface up......>/dev/ttySAC2

     

    if [ -f /etc/eth0-setting ] ; then

            source /etc/eth0-setting

     

            if grep -q "^/dev/root / nfs " /etc/mtab ; then

                    echo -n NFS root ... > /dev/ttySAC2

            else

                    ifconfig eth0 down

                    ifconfig eth0 hw ether $MAC

                    ifconfig eth0 $IP netmask $Mask up

                    route add default gw $Gateway

            fi

     

            echo nameserver $DNS > /etc/resolv.conf

    else

     

            if grep -q "^/dev/root / nfs " /etc/mtab ; then

                    echo -n NFS root ... > /dev/ttySAC2

            else

            /sbin/ifconfig eth0 192.168.253.12 netmask 255.255.255.0 up

            fi

    fi

     

    echo Done > /dev/ttySAC2

    然后在init.d文件夹下建立rcS文件,在rcS文件输入下面的内容,保存并退出rcS,修改rcS的权限为755。

    #! /bin/sh

    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:

    runlevel=S

    prevlevel=N

    umask 022

    export PATH runlevel prevlevel

     

    #

    #       Trap CTRL-C &c only in this shell so we can interrupt subprocesses.

    #

    trap ":" INT QUIT TSTP

    /bin/hostname iTOP-4412

     

    #/bin/mount -n -t proc none /proc

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

    #/bin/mount -n -t usbfs none /proc/bus/usb

    #/bin/mount -t ramfs none /dev

    [ -e /proc/1 ]    || /bin/mount -n -t proc  none /proc

    [ -e /sys/class ] || /bin/mount -n -t sysfs none /sys

    [ -e /dev/tty ]   || /bin/mount    -t ramfs none /dev

     

    echo /sbin/mdev > /proc/sys/kernel/hotplug

    /sbin/mdev -s

    #/bin/hotplug

    # mounting file system specified in /etc/fstab

    mkdir -p /dev/pts

    mkdir -p /dev/shm

    /bin/mount -n -t devpts none /dev/pts -o mode=0622

    /bin/mount -n -t tmpfs tmpfs /dev/shm

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

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

    mkdir -p /var/empty

    mkdir -p /var/log

    mkdir -p /var/log/boa

    mkdir -p /var/lock

    mkdir -p /var/run

    mkdir -p /var/tmp

     

    ln -sf /dev/ttyS2 /dev/tty2

    ln -sf /dev/ttyS2 /dev/tty3

    ln -sf /dev/ttyS2 /dev/tty4

     

    syslogd

    /etc/rc.d/init.d/netd start

    echo "                        " > /dev/tty1

    echo "Starting networking..." > /dev/tty1

    #sleep 1

    #/etc/rc.d/init.d/httpd start

    #echo "                        " > /dev/tty1

    #echo "Starting web server..." > /dev/tty1

    #sleep 1

    #/etc/rc.d/init.d/leds start

    #echo "                        " > /dev/tty1

    #echo "Starting leds service..." > /dev/tty1

    #echo "                        "

    #sleep 1

     

    #echo "*************************************" > /dev/ttySAC2

    #echo "     http://www.topeet.com.cn        " > /dev/ttySAC2

    #echo "*************************************" > /dev/ttySAC2

    #echo "*************************************" 

    #echo "     http://www.topeet.com.cn        " 

    #echo "*************************************" 

     

     

    mkdir /mnt/disk

     

    sleep 1

    /sbin/ifconfig lo 127.0.0.1

    /etc/init.d/ifconfig-eth0

    返回到init.d的上一级目录etc,接下来在etc目录下建立文件passwd,如下图所示,保存并退出,修改passwd的权限为755。

    root::0:0:root:/:/bin/sh

    bin:*:1:1:bin:/bin:

    daemon:*:2:2:daemon:/sbin:

    nobody:*:99:99:Nobody:/:

    然后在etc目录建立profile文件,在profile输入下面的内容,保存并退出,修改profile的权限为755。

    # Ash profile 

    # vim: syntax=sh

     

    # No core files by default

    ulimit -S -c 0 > /dev/null 2>&1

     

    USER="`id -un`"

    LOGNAME=$USER

    PS1='[$USER@$HOSTNAME]# '

    PATH=$PATH

     

    HOSTNAME=`/bin/hostname`

     

    export USER LOGNAME PS1 PATH

    接下来在etc目录建立文件夹rc.d,进入到刚才建立的rc.d文件夹。在rc.d目录下建立init.d文件夹,进入到建立的init.d文件夹。接着在init.d文件夹,建立netd文件,在netd文件里面输入下面的内容。保存并退出netd,修改netd的权限为755。

    #!/bin/sh

     

    base=inetd

     

    # See how we were called.

    case "$1" in

      start)

                    /usr/sbin/$base

            ;;

      stop)

            pid=`/bin/pidof $base`

            if [ -n "$pid" ]; then

                    kill -9 $pid

            fi

            ;;

    esac

     

    exit 0

    进入system/lib目录。因为使用的交叉编译环境和编译内核的相同,所以编译器是/usr/local/arm/arm-2009q3,Busybox编译生成的二进制文件十一动态链接库的形式运行,所以需要拷贝编译器里面的库文件到lib目录,使用命令

    “cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/* ./”拷贝。

    库文件拷贝完成后,返回到system/var目录,在var目录下建立lib,lock,log,run,tmp五个目录。至此,文件系统所需要的文件都已经创建好了。

    5. 安装打包软件和编译

    打包工具make_ext4fs可以文件系统制作成二进制文件,先来安装一下make_ext4fs工具。

    拷贝压缩包“linux_tools.tgz”到Ubuntu 系统的“/”目录下然后解压,注意目录是“/”,如果前面在编译QtE的时候已经解压过了,这里可以跳过去。安装好打包编译工具“make_ext4fs”之后。

    使用命令进入目录“/home/minilinux/”,使用命令

    “make_ext4fs -s -l 314572800 -a root -L linux system.img system”生成system.img文件系统镜像,如下图所示。

     

     

    现在已经完成了Linux文件系统的制作。

    6. 最小Linux系统的烧写

    最后需要把制作好的system.img烧写到iTOP-4412开发板上,烧写的方式和Android文件系统的烧写一样。

    Uboot文件不用烧写,是通用的,内核zImage和ramdisk-uboot.img文件使用QtE的即可。

  • 相关阅读:
    案例53-crm练习修改客户功能实现
    测开之路一百二十五:flask之urlencode参数传递和解析
    测开之路一百二十四:flask之MVC响应过程
    测开之路一百二十三:快速搭建python虚拟环境
    测开之路一百二十二:高级组件之警告框
    测开之路一百二十一:常用组件之助手类
    测开之路一百一二十:常用组件之进度条
    测开之路一百一十九:常用组件之标签和徽章
    测开之路一百一十八:常用组件之面包屑导航和分页导航
    测开之路一百一十七:常用组件之导航栏
  • 原文地址:https://www.cnblogs.com/topeet/p/5490107.html
Copyright © 2011-2022 走看看