linux 嵌入式系统的驱动安装步骤

来源:本站
导读:目前正在解读《linux 嵌入式系统的驱动安装步骤》的相关信息,《linux 嵌入式系统的驱动安装步骤》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《linux 嵌入式系统的驱动安装步骤》的详细说明。
简介:第 1 步:Bios
第 2 步:引导加载程序
第 3 步:内核
第 4 步:Init
第 5 步:Inittab
第 6 步:登录过程
第 7 步:创建新的分区
第 8 步:在新的分区上创建一个 ext2 文件系统
第 9 步:加载分区

创建引导磁盘

引导磁盘本质上是一张装有微缩的、自含式 Linux 系统的软盘。它可以执行许多和完全的 Linux 系统相同的功能。下面的材料基于 Bootdisk-HOWTO(请参阅参考资料)。

第 1 步:Bios

所有的 PC 系统都是通过执行 ROM(明确地说,BIOS)中的代码从引导磁盘的 0 柱面 0 扇区加载扇区,从而开始引导过程。引导驱动器通常是第一个软盘驱动器(在 DOS 下指定为 A:,而 Linux 下指定为 /dev/fd0)。然后 BIOS 试图执行这个扇区。大多数可引导磁盘的 0 柱面 0 扇区上包括了以下两种内容中的一种:

来自加载程序,比如 LILO 的代码,该加载程序定位、加载并运行内核以开始正常引导一个操作系统,比如 Linux 的内核,的开头部分

如果 Linux 内核直接裸拷贝到磁盘、硬盘驱动器或者其它介质上,那么磁盘的第一个扇区将是 Linux 内核本身的第一个扇区。第一个扇区从引导设备上加载内核的其余部分继续引导过程。

第 2 步:引导加载程序

您可以用一个象 LILO 这样的加载程序执行引导过程。它允许开发和生产平台在同一硬件上共存,并且允许通过重新引导来实现从一个平台到另一平台的切换。LILO 引导加载程序是由 bios 加载的。然后它加载内核或者其它操作系统的引导扇区。它还提供了一个简单的命令行接口,以根据其选项交互地选择要引导的项。请参阅参考资料,获取更多关于 LILO 的信息。

第 3 步:内核

内核检查硬件并加载根设备,然后查找根文件系统的 init 程序并执行该程序。

第 4 步:Init

Init 是将要在您的 Linux 操作系统上运行的所有其它进程的父进程。它会观察其子进程,并在需要的时候启动、停止、重新启动它们。Init 从 /etc/inittab 获取所有信息。

第 5 步:Inittab

/etc/inittab 文件通过引用名为 /etc/rc... 的脚本安装系统。它还拥有 getty 工具的条目用来处理登录过程。

第 6 步:登录过程

对于每个允许用户使用的控制台,inittab 文件里都有一个 getty。getty 会启动 /bin/login 来验证用户口令。

第 7 步:创建新的分区

摘自 LFS-HOWTO(请参阅参考资料):在安装新的 Linux 系统之前,我们需要一个空的 Linux 分区来安装新系统。如果您已经有一个 Linux Native 分区可用,您就可以跳过这一步和下面一步。选择合适的硬盘(如 /dev/hda,如果您想在基本的主 IDE 磁盘上建立新的分区的话)启动 fdisk 程序(或者 cfdisk,如果您更喜欢 cfdisk 的话)。创建一个 Linux Native 分区,写入分区表并退出 (c)fdisk 程序。如果您被通知需要重新引导系统以确保分区表被更新,那么请在继续下面的步骤之前重新引导系统。

第 8 步:在新的分区上创建一个 ext2 文件系统

摘自 LFS-HOWTO(请参阅参考资料):我们用 mke2fs 命令创建一个新的 ext2 文件系统。把 $LFS 作为唯一的选项,这样文件系统就建立了。从现在起,我将把这个新建的分区称作 $EMBPART。$EMBPART 应该被换成您创建的分区。

第 9 步:加载分区

为了访问这个新建的文件系统,您必须安装它。要安装分区,您要建立一个 /mnt/hda? 目录并且在 shell 提示符下输入下列内容:

mkdir /mnt/hda?

mount $EMBPART /mnt/hda?

如果您在 /dev/hda4 建立了分区并把它安装到 /mnt/hda4 上,那么您需要返回到把文件复制到目录 $EMBPART/usr/sbin 下的那一步,并把那个文件复制到目录 /mnt/hda4/usr/bin 下。完成了第 14 步的最后一个命令后再执行这一步(复制 $EMBPART/usr/sbin 目录下的文件)。

第 10 步:填充文件系统

根文件系统必须包括支持一个完全的 Linux 系统所需的全部内容。我们将要建立一个与文件层次标准(参见参考资料)相去不远的目录结构。

第 11 步:目录

新安装的文件系统的 mkdir 命令建立了以下目录:

/proc

proc 文件系统要求的目录存根

/etc

系统配置文件

/sbin

关键的系统二进制文件

/bin

被视为系统组成部分的基本的二进制文件

/lib

提供实时支持的共享库

/mnt

维护用的安装点

/usr附加的实用程序和应用软件

cd /mnt/hda/mkdir bin dev home proc sbin usr boot etc liv mnt root tmp varmkdir -p usr/bin usr/sbin usr/share usr/libmkdir -p etc/config etc/default etc/init.d etc/rc.bootmkdir -p etc/rc0.d etc/rc1.d etc/rc2.d etc/rc3.d etc/rc4.d etc/rc5.d etc/rc6.d etc/rcS.d

/dev

dev 目录是执行设备输入/输出要求的存根。这个目录下的每个文件都可以用 mknod 命令建立。您可以用下面的指令从您的桌面 Linux 直接复制要求的 dev 条目以节省时间: cp -dpR /dev /mnt

安装 TinyLogin 以及登录从属需求

TinyLogin(请参阅参考资料部分进行安装)将为您安装不足 35kb 的下列工具:

/bin/addgroup、/bin/adduser、/bin/delgroup、/bin/deluser、/bin/login、/bin/su、/sbin/getty、/sbin/sulogin 和 /usr/bin/passwd。

请参阅主要的发布文档或者手册页以获得关于这些命令的详细说明。

第 12 步:配置 TinyLogin

摘自 TinyLogin README:TinyLogin 模块化后可以帮助您只配置必需的组件从而缩小二进制长度。要关闭不想要的 TinyLogin 组件,只需编辑 tinylogin.def.h 文件并用 C++ 风格的(//)注释将您不想要的部分注释掉。

第 13 步:安装 TinyLogin

在编译完成以后,生成了一个 tinylogin.links 文件,它随后被 make install 用来为所有的内编译函数创建指向 tinylogin 二进制文件的符号连接。缺省情况下,make install 会在pwd/_install 中放入一个符号连接林,除非您已经定义了 PREFIX 环境变量。

第 14 步:安装 Sysvinit 和 start-stop daemon

在内核加载完成后,它会运行 init 程序来结束引导进程。现在:

解压缩 Sysvinit 归档文件进入 src 目录复制 $EMBPART/sbin 目录下的 init 可执行文件

Sysvinit 包在 contrib 目录下也有 C 语言版的 start-stop-daemon。

编译复制 $EMBPART/usr/sbin 下的文件

第 15 步:配置 Sysvinit

Sysvinit 需要一个名为 inittab 的配置文件,它应该在 $EMBPART/etc 目录下。下面是 LEM 分发版中使用的配置文件:

清单 1. Inittab 配置脚本

# /etc/inittab: init(8) configuration.

# $Id: inittab,v 1.6 1997/01/30 15:03:55 miquels Exp $

# Modified for LEM 2/99 by Sebastien HUET

# default rl.

id:2:initdefault:

# first except in emergency (-b) mode.

si::sysinit:/etc/init.d/rcS

# single-user mode.

~~:S:wait:/sbin/sulogin

# /etc/init.d executes the S and K scripts upon change

# 0:halt 1:single-user 2-5:multi-user (5 may be X with xdm or other) 6:reboot.

l0:0:wait:/etc/init.d/rc 0

l1:1:wait:/etc/init.d/rc 1

l2:2:wait:/etc/init.d/rc 2

l3:3:wait:/etc/init.d/rc 3

l4:4:wait:/etc/init.d/rc 4

l5:5:wait:/etc/init.d/rc 5

l6:6:wait:/etc/init.d/rc 6

# CTRL-ALT-DEL pressed.

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -r now

# Action on special keypress (ALT-UpArrow).

kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."

# /sbin/mingetty invocations for runlevels.

1:2345:respawn:/sbin/getty 9600 tty1

2:23:respawn:/sbin/getty 9600 tty2

#3:23:respawn:/sbin/getty tty3 #you may add console there

#4:23:respawn:/sbin/getty tty4

第 16 步:创建初始的引导脚本

就象在 inittab 文件里看到的一样,Sysvinit 需要在它自己的目录下的一些附加脚本。

第 17 步:创建必需的目录和基础文件

用下面的命令来创建目录:

清单 2. 创建目录和基础文件的脚本

cd $EMBPART/etc

mkdir rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d init.d rcS.d rc.boot

进入解压缩后的 Sysvinit 源目录

把 debian/etc/init.d/rc 复制到:$EMBART/etc/init.d

进入 $EMBPART/etc/init.d/ 目录

创建一个与 LEM 中的文件类似的新文件 rcS:

清单 3. RCS 脚本

#!/bin/sh

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

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

/etc/default/rcS

export VERBOSE

# Trap CTRL-Conly in this shell so we can interrupt subprocesses.

trap ":" 2 3 20

# Call all parts in order.

for i in /etc/rcS.d/S--*

do

[ ! -f "$i" ] && continue

case "$i" in

*.sh)

(

trap - 2 3 20

. $i start

)

;;

*)

$i start

;;

esac

done

# run the files in /etc/rc.boot

[ -d /etc/rc.boot ] && run-parts /etc/rc.boot

把可执行文件从您的分发版复制到 $EMBPART/bin。

第 18 步:添加基础脚本

这里用的许多命令是 UNIX/Linux 命令,对嵌入在 UNIX shell 脚本内部的路径进行设置、导出等操作。

清单 4. 注释行

<!-reboot----------------------------------------------> 

创建一个新文件 reboot,它包含以下内容:

清单 5. Reboot 脚本

#!/bin/sh

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

echo -n "Rebooting... "

reboot -d -f -i

<!-halt---------------------------------------------->

创建新文件 halt,它包含以下内容:

清单 6. Halt 脚本

#!/bin/sh

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

halt -d -f -i -p

<!-mountfs---------------------------------------------->

总结

在嵌入式应用的领域里,从因特网设备到专用的控制系统,Linux 操作系统的前景都很光明。所有新造的微型计算机芯片中大约有 95% 都是用于嵌入式应用的。由于 Linux 功能强大、可靠、灵活而且具有伸缩性,再加上它支持大量的微处理器体系结构、硬件设备、图形支持和通信协议,这些都使它作为许多方案和产品的软件平台越来越流行。

由于可以公开免费得到 Linux 源代码,因此对 Linux 和它支持的软件组件的许多修改和配置也得到了不断改进,以满足采用 Linux 的市场和应用的多种需求。另外还有小型版本和实时增强版本。尽管 Linux 开始是作为 PC 体系结构的操作系统,但是现在已经有了非 X86 CPU 的版本(带或不带内存控制单元),包括 PowerPC、ARM、MIPS、68K 甚至是微控制器。但是,请注意,在不久的将来,在许多其它的信息技术(IT)领域会出现更多!

参考资料

您可以参阅本文在 developerWorks 全球站点上的英文原文.

获取完全的ETLinuxLinux 分发版。

看一下多用户、基于网络的 Linux 版本LEM。

LOAF,“Linux On A Floppy”版本, 象uLinux一样,在 386 上运行。

您还可以得到不带 MMU 的 Linux 系统和 uClinux。

ThinLinux是用于专用的相机服务器、X-10 控制器、MP3 播放器以及其它一些类似的嵌入式应用的最小化的 Linux 分发版。

RTLinux就是最早在新墨西哥理工学院开发的硬实时 Linux API。

EL/IX是基于 POSIX 的硬实时 Linux API。

TinyLogin是由 Erik Andersen 维护的,Busybox也是。

Ash是个非常小的 Bourne shell。

Sysvinit是 Linux 最常用的 init 包。我们将会用到 init 和 C 语言版的 start-stop-daemon。

请阅读LILO 文档。

要建立新的分区,在新的分区建立 ext2 文件系统,请阅读LFS-HOWTO。

了解更多关于LEM的细节,以及其它用于嵌入的专用软件。

实时 Linux是标准 Linux 操作系统的扩展。它提供了一种简单的、流畅的实时程序,它把标准 Linux 内核作为最低优先级的任务来执行。它不仅允许插入用户定义的、优先级更高的(实时)任务,还允许使用标准 Linux 成熟的服务的功能。

RTAI是一套建立在 Linux 内核修改最少的基础之上的模块(添加/修改了大约 70 行),实现了实时硬件抽象层(RTHAL),实时应用程序接口(RTAI)建立在该层上。RTAI 服务实现了内核模块级的硬实时,用户空间级的稳定实时。您也可以到rtai.org查找更多关于 RTAI 的资料。

Linux-SRT是对 Linux 的内核的扩展,改进了实时(RT)应用运行的方式。标准 Linux 的设计意图并不是成为“媒体操作系统” 因而无法保证音频、视频或者其它关键程序以固定的速度运行。

Zentropix重点介绍实时 Linux 并提供开发工具、支持、培训课程和一张经过测试的由配置管理的实时 Linux 安装 CD。

访问IBM 嵌入式 Linux 首页。

查阅IBM 的嵌入式 Linux 产品和开发人员技术支持。

浏览developerWorks,获取更多的 Linux 参考资料。

浏览developerWorks,获取更多开放源代码参考资料。

提醒:《linux 嵌入式系统的驱动安装步骤》最后刷新时间 2024-03-14 01:04:16,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《linux 嵌入式系统的驱动安装步骤》该内容的真实性请自行鉴别。