[嵌入式开发入门]4412开发板从零建立Linux最小系统
本文转自iTOP-4412开发板实战教程书籍
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最小系统的更多相关文章
- UWP开发入门系列笔记之(零):UWP的前世今生
引言 在本篇文章中,可以掌握以下知识: 设备族群,如何决定目标设备 新的UI控件和新面板帮助你适应不同的设备特征 从Windows 8系统开始,微软就 引入了WindowsRT(Windows Run ...
- spring boot + vue + element-ui全栈开发入门——windows开发环境
一.node.js开发环境 windows系统,去网站https://nodejs.org/en/download/,下载对应的安装程序,并安装Windows Installer (.msi) 接下 ...
- 【转载】Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门
Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...
- spring boot + vue + element-ui全栈开发入门——开篇
最近经常看到很多java程序员朋友还在使用Spring 3.x,Spring MVC(struts),JSP.jQuery等这样传统技术.其实,我并不认为这些传统技术不好,而我想表达的是,技术的新旧程 ...
- spring boot + vue + element-ui全栈开发入门——基于Electron桌面应用开发
前言 Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库. Electron通过将Chromium和Node.js合并到同一个运行时环 ...
- spring boot + vue + element-ui全栈开发入门
今天想弄弄element-ui 然后就在网上找了个例子 感觉还是可以用的 第一步是完成了 果断 拿过来 放到我这里这 下面直接是连接 点进去 就可以用啊 本想着不用vue 直接导入连接 ...
- Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门
Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...
- Arduino.最小系统面包板搭建
最早试过用万用板做过最小系统,主要用来烧录芯片 后来为了方便,用面包板也搭了一个最小系统, 但不采用杜邦线,因为飞来飞去的线太乱了 因此就有了这个简洁的版本,先上个成品图 用个烧录器就可以很方便的烧写 ...
- 【转帖】嵌入式4412开发板QT5.7编译安装到arm
QT5.7.0+UBUNTU16.04+ARM-NONE-LINUX-GNUEABI4.8+busybox最小LINUX系统 Orandragon记录 本文转自迅为4412开发板群:http://to ...
随机推荐
- Google Web Designer – 创建引人入胜的 HTML5 网站
Google Web Designer 可以帮助你创建引人入胜,互动的基于 HTML5 的设计和动画,可以在任何设备上运行.如果你喜欢自己动手,设计背后的所有的代码都是可以手工编辑的. 虽然可视化工具 ...
- 微信 小程序 drawImage wx.canvasToTempFilePath wx.saveFile 获取设备宽高 尺寸问题
以下问题测试环境为微信开发者0.10.102800,手机端iphone6,如有不对敬谢指出. 根据我的测试,context.drawImage,在开发者工具中并不能画出来,只有预览到手机中显示. wx ...
- 对比MS Test与NUnit Test框架
前言: 项目中进行Unit Test时,肯定会用到框架,因为这样能够更快捷.方便的进行测试. .Net环境下的测试框架非常多,在这里只是对MS Test和NUnit Test进行一下比较, 因为这两个 ...
- 探究TCP
OSI OSI是Open System Interconnection的缩写,意为开放式系统互联.国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信 ...
- 对称密码-DES和3DES
最近在看信息安全的知识,就总结了一下自己所学到知识. 先说一下什么是对称密码算法,什么是对称密码算法呢?对称密码算法是指有了加密密钥就可以推算出解密密钥,有了解密密钥就可以推算出加密密钥的的算法. 那 ...
- SVN源码泄露漏洞
SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范.“在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息 ...
- iOS 获取ssid
- (NSString *)fetchSSIDInfo { NSString *ssid = nil; NSArray *ifs = (__bridge_transfer id)CNCopySuppo ...
- Java核心:类加载和JVM内存的分配
类的加载: 指的是将class文件的二进制数据读入到运行时数据区(JVM在内存中划分的) 中,并在方法区内创建一个class对象. 类加载器: 负责加载编译后的class文件(字节码文件)到JVM(J ...
- CGAffineTransformMakeRotation 实现旋转
UIImageView *image = [[UIImageView alloc]init]; image.frame = CGRectMake(50, 50, 200, 200); image.im ...
- IOS开发之自动布局--VFL语言
前言:VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言.对于纯代码发烧友,值得我们去学习和了解哦. 1.什么是VFL语言 VFL全称是Visual Format Language,翻 ...