本文转自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的即可。

[嵌入式开发入门]4412开发板从零建立Linux最小系统的更多相关文章

  1. UWP开发入门系列笔记之(零):UWP的前世今生

    引言 在本篇文章中,可以掌握以下知识: 设备族群,如何决定目标设备 新的UI控件和新面板帮助你适应不同的设备特征 从Windows 8系统开始,微软就 引入了WindowsRT(Windows Run ...

  2. spring boot + vue + element-ui全栈开发入门——windows开发环境

     一.node.js开发环境 windows系统,去网站https://nodejs.org/en/download/,下载对应的安装程序,并安装Windows Installer (.msi) 接下 ...

  3. 【转载】Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门

    Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...

  4. spring boot + vue + element-ui全栈开发入门——开篇

    最近经常看到很多java程序员朋友还在使用Spring 3.x,Spring MVC(struts),JSP.jQuery等这样传统技术.其实,我并不认为这些传统技术不好,而我想表达的是,技术的新旧程 ...

  5. spring boot + vue + element-ui全栈开发入门——基于Electron桌面应用开发

     前言 Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库. Electron通过将Chromium和Node.js合并到同一个运行时环 ...

  6. spring boot + vue + element-ui全栈开发入门

    今天想弄弄element-ui  然后就在网上找了个例子 感觉还是可以用的  第一步是完成了  果断 拿过来  放到我这里这  下面直接是连接  点进去 就可以用啊 本想着不用vue   直接导入连接 ...

  7. Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门

    Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...

  8. Arduino.最小系统面包板搭建

    最早试过用万用板做过最小系统,主要用来烧录芯片 后来为了方便,用面包板也搭了一个最小系统, 但不采用杜邦线,因为飞来飞去的线太乱了 因此就有了这个简洁的版本,先上个成品图 用个烧录器就可以很方便的烧写 ...

  9. 【转帖】嵌入式4412开发板QT5.7编译安装到arm

    QT5.7.0+UBUNTU16.04+ARM-NONE-LINUX-GNUEABI4.8+busybox最小LINUX系统 Orandragon记录 本文转自迅为4412开发板群:http://to ...

随机推荐

  1. scope='request'的bean预加载冲突

    Error creating bean with name 'authenticationSuccessServlet': Scope 'request' is not active for the ...

  2. PCL -语法错误:“::” error C2589: “(”:“::”右边的非法标记

    1.错误原因:系统函数与pcl中的max函数冲突导致的 2.两种解决办法: 1)错误中max和min函数用括号括起来,例如"std::Max"修改为“(std::Max)”. 2) ...

  3. spring web MVC

    详情:http://blog.csdn.net/mic_hero/article/details/50237627

  4. ssh框架搭建的基本步骤(以及各部分作用)

    ssh框架搭建的基本步骤(以及各部分作用)     一.首先,明确spring,struts,hibernate在环境中各自的作用.   struts: 用来响应用户的action,对应到相应的类进行 ...

  5. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q21-Q24)

    Question 21 An application will be deployed in a SharePoint 2010 server farm that is managed by depa ...

  6. Java单例模式实现的几种方式

    单例模式好多书上都是这么写的: public class SingleTon1 { private SingleTon1(){ } private static SingleTon1 instance ...

  7. App Today Extension开发注意事项

    从iOS 8起,就有了App Extension.Extension的种类至今也扩充到了19种,应用也很广泛,值得重点关注起来. Extension几乎可以看做一个内嵌的独立App,拥有独立的Bund ...

  8. 你真的了解UIScrollView吗?

    一:首先查看一下关于UIScrollView的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIScrollView : UIView <NSCoding& ...

  9. Hibernate连接mysql数据库并自动创建表

    天才第一步,雀氏纸尿裤,Hibernate第一步,连接数据库. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个 ...

  10. The JSP specification requires that an attribute name is preceded by whitespace

    一个jsp页面在本地运行一点问题没有,发布到服务器就报错了: The JSP specification requires that an attribute name is preceded by ...