日期: 2004年2月12日
以下是我初次学习嵌入式linux的笔记和体会,制作了软盘minicom应用,在此基础上也清楚了软盘Linux的实现,并利用busybox实际制作了软盘上的Linux系统。希望能给新手一些帮助和启发,同时也请高手批评指正。
一个典型的桌面Linux系统包括3个主要的软件层---linux内核、C库和应用程式代码。
内核是唯一能够完全控制硬件的层,内核驱动程式代表应用程式和硬件之间进行会话。内核之上是C库,负责把POSIX
API转换为内核能够识别的形式,然后调用内核,从应用程式向内核传递参数。应用程式依靠驱动内核来完成特定的任务。
在设计嵌入式应用的时候,能够不按照这种层次,应用程式越过C库直接和内核会话,或把应用和内核捆绑在一起,甚至能够把应用写为内核的一个线程,在内核中运行,虽然这样在移植上带来了困难,但考虑嵌入式系统对尺寸需要小的特点,是完全可行的。但是我们使用三层软件结构的模式来学习嵌入式linux将会是我们认识更清楚,简单可行并使应用具备弹性。
快速入门,最简单的建立嵌入式Linux应用的方法就是从我们使用的桌面Linux入手,安装一个喜爱的版本,把我们的某个应用作为初始化的一部分,框架就算完成了。当然,嵌入式linux应用远比我们的桌面版本功能简单专一,他也许就是个用于足彩的终端机,或是个数码音频播放器,这些系统除了使用嵌入式CPU外,仅仅再需要一个串口,网口等少量的输入输出接口就能够完成他们特定的应用了。在软件上,他能够按照三层的概念由内核装载器,定制的内核和较少的为特定任务设计的静态连接的应用程式组成。之所以使用静态连接的应用程式,是因为少量的静态连接程式所要的存储空间,比同样数量的动态连接的程式所占的空间小,这个平衡点需要我们在实际研发中去获取。也许您正在设计的是个PDA,他的应用程式较多,那么您很可能就要使用动态连接程式来减少存储空间。在您的/bin或/sbin目录下,用厂列表看看bash,ifconfig, vi...,也许只用几十K,当您运行 ldd /bin/bash 时,您会看到他们都和好几个库文档相连。好了,这样看来,我们得把PC想像成一个嵌入式硬件平台,再重新制作一个特定功能的嵌入式linux。
再进行实际操作之前,先来搞清楚几个基础知识。
内核装载器Loader,他的作用是把内核从外部存储器,移动到内存中。他只作这个事情,一旦完成了调入内核的工作,Loader就跳转到内核位置开始执行。不同架构有不同的
Loader,在x86结构的PC上,通常使用的loader有LILO,GRUB,syslinux,syslinux在嵌入式
linux中也同样工作。其他非x86架构的应用中,您必须使用专门的loader,或自己编写loader来装入内核。也有不使用loader的情况,系统加电以后,内核直接从刻录有映象的Flash上开始执行。
内核,一旦内核开始执行,他将通过驱动程式初始化任何硬件,这能够从我们的pc
机监控器的输出看出来,每个驱动程式都打印一些有关他的信息。初始化完成后,电脑就准备运行嵌入式应用。也许一个,也许是多个应用程式组成了嵌入式应用,但通常首先调用的是init(通过loader
向核心传入init=/program
能够定制首先运行的程式)。桌面linux中,init会读取/etc/inittab文档,来决定执行级别和哪些脚本和命令。嵌入式应用中,能够根据实际的情况决定是否使用标准的init执行方式,也许这个init是个静态程式,他能够完成我们的嵌入应用的特定任务,那完全不用考虑inittab了。
initrd
文档系统,initrd以一种把内核从存储介质装入到内存的相同的机制来装入一个小型文档系统。这个文档系统最好是以压缩的方式存储在介质上的,解压缩到
RAM盘上。通过使用initrd,包含有核心驱动和启动脚本的小文档系统,就能够直接从介质上和内核一起启动起来,内核届压缩这个文档系统,并执行这个文档系统上叫做/linuxrc的脚本文档,这个脚本通常会把启动过程中所需要的驱动程式装入。脚本退出以后,initrd文档系统也卸下了,启动过程进入真正初始化过程。对于嵌入式来讲,能够将需要的应用软件都运行在这个initrd文档系统上,只要/linxrc文档不结束,内核启动过程的其他部分就不会继续。
做个试验:
cp
/boot/initrd-2.4.20.img /tmp
cd /tmp
mv initrd-2.4.2-.img
initrd.img.gz
gunzip initrd.img.gz
mount -o loop initrd.img /mnt
cd
/mnt
ls
cat linuxrc 能够看到里面执行了加载了两个模块的操作,您在启动linxu的时候会看见屏幕打印信息。
入门试验,制作一个简单的应用:我们使用一张软盘启动一台假象的只有一个串口,键盘输入,显示输出的x86架构的linux系统,执行的特定应用就是运行
minicom,通过串口拨号。需要软件: minicom-xx.src.tar.gz 和
syslinux-xx.tar.gz,xx代表版本号,开始之前,在主目录建立一个目录,来释放这两个软件包:
cd
mkdir -p
project/minilinux
cd project/minilinux
tar zxvf
minicom-xx.src.tar.gz
tar zxvf syslinux-xx.tar.gz
1、裁减linux内核(需要系统安装内核文档包)
配置内核的时候,我们需要选择这些:摸块编入内核,386处理器、物理内存off、支持
ELF、标准PC软盘、支持RAM盘(4096)、支持 initial RAM disk
(initrd)、虚您终端、虚拟终端控制台、标准串口、ext2文档系统、控制台驱动,VGA text console、DOS
FAT、MSDOS文档系统,其他的都能够不要,这样内核编出来较小。
步骤:
cd /usr/src/linux
make
mrproper
make xconfig
make dep && make bzImage
得到
/usr/src/linux/arch/i386/boot/目录的内核文档bzIamge。
2、编译一个静态的minicom ,把他作为将来的linuxrc
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




