嵌入式读摘

08月 25th, 2008

嵌入式linux 是将日益流行的linux操作系统进行裁剪修改使之能在嵌入式计算机系

统上运行的一种操作系统嵌入式linux既继承了interlnet上无限的开放源代码资源又具有嵌

入式操作系统的特性

2 嵌入式linux的特点是版权费免费;购买费用媒介成本技术支持全世界的自由软件

开发者提供支持网络特性免费而且性能优异软件移植容易代码开放有许多应用软

件支持应用产品开发周期短新产品上市迅速因为有许多公开的代码可以参考和移植

实时性能rt_linux hardhat linux 等嵌入式linux支持实时性能稳定性好安全性好

3 嵌入式linux有巨大的市场前景和商业机会出现了大量的专业公司和产品如montavista

lineo emi等有行业协会如embedded linux consortum等得到世界著名计算机公司和oem

板级厂商的支持例如ibm motorola intel等 传统的嵌入式系统厂商也采用了linux策略 如

lynxworks windriver qnx等还有internet上的大量嵌入式linux爱好者的支持嵌入式linux

支持几乎所有的嵌入式cpu和被移植到几乎所有的嵌入式oem板

4 嵌入式linux的应用领域非常广泛主要的应用领域有信息家电pda 机顶盒digital

telephone answering machine screen phone 数据网络ethernet switches router bridge

hub remote access servers atm frame relay 远程通信医疗电子交通运输计算机外

设工业控制航空航天领域等

什么是嵌入式linux

]

随着微处理器的产生,价格低廉、结构小巧的cpu和外设连接提供了稳定可靠的硬件架构,那么限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,陆续出现了一些嵌入式操作系统,比较著名的有vxwork、psos、neculeus和windows ce。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。另外,结合国内实情,当前国家对自主操作系统的大力支持,也为源码开放的linux的推广提供的广阔的发展前景。还有,对上层应用开发者而言,嵌入式系统需要的是一套高度简练、界面友善、质量可靠、应用广泛、易开发、多任务,并且价格低廉的操作系统。在不久的将来,从冰箱到收音机都会内置处理器。因为linux的开放性,许多人认为linux非常适合多数internet设备。他们认为linux可以支持不同的设备,支持不同的配置。

linux对厂商不偏不倚而且成本极低,能够很快成为用于各种设备的操作系统。如今,业界已经达成共识:即嵌入式linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。

嵌入式操作系统主要有 palm os,windows ce,epoc,linuxce,qnx,ecos,lynx,高端嵌入式系统要求许多高级的功能,如图形用户界面和网络支持 。很多高端rtos供应商已经提供了这些功能,但其价格也很高端,一般人难以接受。微软的windows ce也有此类功能,却不具备大多数嵌入式系统要求的实时性能,而且难以移植,也曾经有人想以dos为基础用单独的第三方工具拼凑一个系统,但这种努力将是白费。现在需要的是一个便宜、成熟并且提供高端嵌入式系统所必须特性的操作系统,嵌入式linux操作系统以价格低廉、功能强大又易于移植而正在被广泛采用,成为新兴的力量,所以,众多商家纷纷转向了嵌入式linux。

linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和unix相似、以核心为基础的、完全内存保护、多任务多进程的操作系统。支持广泛的计算机硬件,包括x86,alpha,sparc,mips,ppc,arm,nec,motorola等现有的大部分蕊片。程式源码全部公开,任何人可以修改并在gnu通用公共许可证(gnu general public license)下发行,这样,开发人员可以对操作系统进行定制,再也不必担心像ms windows操作系统中"后门"的威胁。同时由于有gpl的控制,大家开发的东西大都相互兼容,不会走向分裂之路。linux用户遇到问题时可以通过internet向网上成千上万的linux开发者请教,这使最困难的问题也有办法解决。linux带有unix用户熟悉的完善的开发工具,几乎所有的unix系统的应用软件都已移植到了linux上。linux还提供了强大的网络功能,有多种可选择窗口管理器(x windows)。其强大的语言编译器gcc、g++等也可以很容易得到。不但成熟完善、而且使用方便。

学习嵌入式linux的笔记和体会,

2008-02-26 21:34

这是初次学习嵌入式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

cd minicom-xx/src

vi makefile

修改下面这行

minicom: $(minicom_objects) $(minicom_dependencies)

rm -f minicom 下面的行加上 -static,连接为静态程序

(link) -static $(minicom_ldflags) $(minicom_objects) $(minicom_ldadd) $(libs)

vi minicom.c

找到 if (real_u删除这个判断条件语句,主要是用于权限判断的,因为这个嵌入应用不关注权限问题,否则会出错。

make

得到可执行程序,用ldd 检查一下是不是静态程序。

3、准备initrd压缩文件image.gz

dd if=/dev/zero of=image bs=1k count=4096

losetup /dev/loop0 image

mke2fs -m 0 /dev/loop0

mounmt -t ext2 /dev/loop0 /mnt/

mkdir -p /mnt/dev

mkdir -p /mnt/usr/share/terminfo/l/

cd /dev

cp -a consle null tty tty0 zero mem /mnt/dev

cp -p /usr/share/terminfo/l/linux /mnt/usr/share/terminfo/l/linux

cp ~/project/minilinux/mincom/src/minicom /mnt/linuxrc

umount /mnt

losetup -d /dev/loop0

sync

gzip -9 image

4、制作软盘引导,并拷贝文件 bzimage image.gz 到软盘

a.使用grub

fdformat /dev/fd0

mke2fs /dev/fd0

mount /mnt/fd0 /mnt/floppy

mkdir -p /mnt/floppy/boot/grub

cp /boot/grub/stage1 /boot/grub/stage2 /mnt/floppy/boot/grub

执行 grub,在软盘上创建引导

grub >root (fd0)

grub >setup (fd0)

grub >quit

cp /usr/src/linux/arch/i386/boot/bzimge /mnt/floppy

cp ~/porject/minilinux/image.gz /mnt/floppy

编辑 /mnt/floppy/boot/grub/grub.conf

default =0

timeout-=10

title minilinux

root (fd0)

kernel /bzimage

initrd /image.gz

卸下软盘

umount /mnt/floppy

b. 使用syslinux

fdformat /dev/fd0

mkfs.msdos /dev/fd0

mount -t msdos /dev/fd0 /mnt/floppy

cp /usr/src/linux/arch/i386/boot/bzimge /mnt/floppy

cp ~/porject/minilinux/image.gz /mnt/floppy

cp syslinux-xx/ldlinxu.sys /mnt/floppy

cat >/mnt/floppy/syslinux.cfg

label linux

kernel bzimage

append initrd=image.gz

umont /mnt/floppy

syslinux-xx/syslinux /dev/fd0

sync

5、用软盘启动计算机,如果幸运,minicom的运行画面出现在屏幕上。

到此,我们的单应用嵌入式linux做好了,但它还很简陋,没有什么实际用途,但通过这个实验,可以了解嵌入式系统的大致结构和开发过程。在进行实际的嵌入式开发时,通常要在pc机上借助嵌入式linux开发工具包,如:uclinux,bluecat等,对相应的硬件平台(目标机)进行软件编写编译,调试成功后,将内核及应用程序写入到目标机的存储器中,从而完成整个应用。

嵌入式linux操作系统学习规划

2008-03-01 10:46

嵌入式linux操作系统学习规划

arm+linux路线,主攻嵌入式linux操作系统及其上应用软件开发目标:

1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9)

2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定)

3) 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。

从事嵌入式软件开发的好处:

1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业it人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。

2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。

3)哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般都是请其它公司给订做(这叫“贴牌”:oem),都是通用的硬件,我们只管设计软件就变成自己的产品了。

4)兴趣所在,这是最主要的。

从事嵌入式软件开发的缺点是:

1) 入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。

2)这方面的企业数量要远少于企业计算类企业。

3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。

4)平台依托强,换平台比较辛苦。

兴趣的由来:

1、成功观念不同,不虚度此生,就是我的成功。

2、喜欢思考,挑战逻辑思维。

3、喜欢c

c是一种能发挥思维极限的语言。关于c的精神的一些方面可以被概述成短句如下:

相信程序员。

不要阻止程序员做那些需要去做的。

保持语言短小精干。

一种方法做一个操作。

使得它运行的够快,尽管它并不能保证将是可移植的。

4、喜欢底层开发,讨厌vb类开发工具(并不是说vb不好)。

5、发展前景好,适合创业,不想自己要死了的时候还是一个工程师。

方法步骤:

1、基础知识:

目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我的优势。

科目:数字电路、计算机组成原理、嵌入式微处理器结构。

汇编语言、c/c++、编译原理、离散数学。

数据结构和算法、操作系统、软件工程、网络、数据库。

方法:虽科目众多,但都是较简单的基础,且大部分已掌握。不一定全学,可根据需要选修。

主攻书籍:the c++ programming language(一直没时间读)、数据结构-c2。

2、学习linux:

目的:深入掌握linux系统。

方法:使用linux—〉linxu系统编程开发—〉驱动开发和分析linux内核。先看深,那主讲原理。看几遍后,看情景分析,对照深看,两本交叉,深是纲,情是目。剖析则是0.11版,适合学习。最后深入代码。

主攻书籍:linux内核完全剖析、unix环境高级编程、深入理解linux内核、情景分析和源代。

3、学习嵌入式linux:

目的:掌握嵌入式处理器其及系统。

方法:

1)嵌入式微处理器结构与应用:直接arm原理及汇编即可,不要重复x86。

2)嵌入式操作系统类:ucos/ii简单,开源,可供入门。而后深入研究uclinux。

3)必须有块开发板(arm9以上),有条件可参加培训(进步快,能认识些朋友)。

主攻书籍:毛德操的《嵌入式系统》及其他arm9手册与arm汇编指令等。

4、深入学习:

a、数字图像压缩技术:主要是应掌握mpeg、mp3等编解码算法和技术。

b、通信协议及编程技术:tcp/ip协议、802.11,bluetooth,gprs、gsm、cdma等。

c、网络与信息安全技术:如加密技术,数字证书ca等。

d、dsp技术:digital signal process,dsp处理器通过硬件实现数字信号处理算法。

说明:太多细节未说明,可根据实际情况调整。重点在于1、3,不必完全按照顺序作。对于学习c++,理由是c++不只是一种语言,一种工具,她还是一种艺术,一种文化,一种哲学理念、但不是拿来炫耀得东西。对于linux内核,学习编程,读一些优秀代码也是有必要的。

注意: 要学会举一反多,有强大的基础,很多东西简单看看就能会。想成为合格的程序员,前提是必须熟练至少一种编程语言,并具有良好的逻辑思维。一定要理论结合实践。

不要一味钻研技术,虽然挤出时间是很难做到的,但还是要留点余地去完善其他的爱好,比如宇宙,素描、机械、管理,心理学、游戏、科幻电影。还有一些不愿意做但必须要做的!

技术是通过编程编程在编程编出来的。永远不要梦想一步登天,不要做浮躁的人,不要觉得路途漫上。而是要编程编程在编程,完了在编程,在编程!等机会来了在创业(不要相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)。

嵌入式书籍推荐

linux基础

1、《linux与unix shell 编程指南》

c语言基础

1、《c primer plus,5th edition》【美】stephen prata着

2、《the c programming language, 2nd edition》【美】brian w. kernighan david m. rithie(k &r)着

3、《advanced programming in the unix environment,2nd edition》(apue)

4、《嵌入式linux应用程序开发详解》

linux内核

1、《深入理解linux内核》(第三版)

2、《linux内核源代码情景分析》毛德操 胡希明着

研发方向

1、《unix network programming》(unp)

2、《tcp/ip详解》

3、《linux内核编程》

4、《linux设备驱动开发》(ldd)

硬件基础

1、《arm体系结构与编程》杜春雷着

2、s3c2410 datasheet

英语基础

1、《计算机与通信专业英语》

系统教程

1、《嵌入式系统――体系结构、编程与设计》

2、《嵌入式系统――采用公开源代码和strongarm/xscale处理器》毛德操 胡希明着

3、《building embedded linux systems》

理论基础

1、《算法导论》

2、《数据结构(c语言版)》

3、《计算机组织与体系结构?性能分析》

4、《深入理解计算机系统》【美】randal e. bryant david o’hallaron着

5、《操作系统:精髓与设计原理》

6、《编译原理》

7、《数据通信与计算机网络》

8、《数据压缩原理与应用》

c语言书籍推荐

1. the c programming language

《C程序设计语言》

2. pointers on c

《C和指针》

3. c traps and pitfalls

《C陷阱与缺陷》

4. expert c lanuage

《专家C编程》

5. writing clean code

—–microsoft techiniques for developing bug-free c programs

《编程精粹–microsoft 编写优质无错C程序秘诀》

6. programming embedded systems in c and c++

《嵌入式系统编程》

7.《c语言嵌入式系统编程修炼》

8.《高质量c++/c编程指南》林锐

尽可能多的编码,要学好c,不能只注重c本身。算法,架构方式等都很重要。

标签:, ,

相关日志


This entry was posted on 星期一, 08月 25th, 2008 at 11:54 am and is filed under cad教程. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply