Mini6410的启动过程

2011-12-27 由 创建在标签 开发

入手Mini6410很久,一直没有用起来,最近项目稍微轻松一点,开始拿起来做点事情、学点东西,后面也会把这款开发板的一些情况发不上来。

Mini6410简介

Mini6410是友善基于三星6410开发的一款ARM11开发板,想了解的人可以到官网看看(6410友善官网),里面有详细的信息。

这里也简要提一下6410一些让人蛋疼的东西,让人用着很不爽,因为还没有用得很熟悉,就说说目前发现的两个让人不爽的地方。第一,它的Superloader不开源,提供的开源的U-boot又不能支持SD卡启动;第二,文件系统压缩使用了自己的压缩方法(在内核配置的地方可以查看到),如果我们想用通用的程序来做的话,压力会比较大。

6410的启动过程介绍

和X86平台的启动过程不同的是6410通过busybox启动,将复杂的启动过程变得简单化,便于初学者学习和使用此块开发板。

开机启动时首先进入Bootloader,它主要完成的工作是初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。友善提供了两种Bootloader,基于Samsung的u-boot做了一点修改的和友善自己开发的SuperLoader,SuperLoader功能比较强大,但是不开源,可以免费使用;但是如果我们自己想做一些改变的话,那就有点困难了。

由Bootloader引导后,系统加载内核,内核加载后加载文件系统,之后执行init程序,但是友善直接修改了内核的配置,直接运行linuxrc程序(其实是busybox),然后就开始执行init.d下的rcS脚本。下面将通过内核配置和脚本来介绍它启动的一些细节。

在友善提供的文件系统中的.config中,可以看到启动执行的程序被修改为linuxrc,而且linuxrc只是busybox的一个符号链接,如下:

init.d目录下的启动脚本

rcS启动脚本注解

#! /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 friendARM
[ -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
/bin/mount -n -t usbfs none /proc/bus/usb

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

#udev实现U盘或SD卡的自动挂载,mdev是busybox中的一个udev管理程序的一个精简版,他也可以实现设备节点的自动创建和设备的自动挂载
/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/lock
mkdir -p /var/run
mkdir -p /var/tmp

/sbin/hwclock -s
syslogd

#启动网络配置
/etc/rc.d/init.d/netd start
echo "                        " > /dev/tty1
echo "Starting networking..." > /dev/tty1
sleep 1

#启动httpd
/etc/rc.d/init.d/httpd start
echo "                        " > /dev/tty1
echo "Starting web server..." > /dev/tty1
sleep 1

#启动Led模块
/etc/rc.d/init.d/leds start
echo "                        " > /dev/tty1
echo "Starting leds service..." > /dev/tty1
echo "                        "
sleep 1
echo "                        " > /dev/tty1

#alsaconf,看了启动的程序发现是一些默认的配置项
/etc/rc.d/init.d/alsaconf start
echo "Loading sound card config..." > /dev/tty1
echo "                        "

#配置网络相关地址
/sbin/ifconfig lo 127.0.0.1
/etc/init.d/ifconfig-eth0

#启动QT图形界面
/bin/qtopia &
echo "                                  " > /dev/tty1
echo "Starting Qtopia, please waiting..." > /dev/tty1
标签:, ,

一条评论

发表评论