EzHomeTech推出极小Linux嵌入式视频服务器
EzHomeTech公司日前宣布推出一款嵌入式视频服务器——Ezserve2.0 uClinux版本。该视频服务器的代码尺寸仅71K字节,基于ARM7系统级芯片(150MHz)开发而成。它能同时发送少4个视频流(6.6Mbps视频位率)给不同客户端,如手机、PDA、STB、PMP、PC和KIOSK等。
该视频服务器同时支持Linux和Windows XP/2000操作系统。该版软件致力于提供视频流服务器及在数字家庭中使用的Web服务器。它支持多种音视频制式,如MPEG1/2/4、DIVX、WMV9、WMV9 HD、MP3和WMA。用户可以使用手机、PDA、STB和PMP等任何终端连接Ezserver,以查看Web内容、播放视频、听音乐和浏览照片。
EzServer 2.0还包括Linux版本。该版本的代码尺寸为281K字节,支持x86微处理器(CPU)。
学习嵌入式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_uid==0 && dosetup==0 ) 删除这个判断条件语句,主要是用于权限判断的,因为这个嵌入应用不关注权限问题,否则会出错。
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等,对相应的硬件平台(目标机)进行软件编写编译,调试成功后,将内核及应用程序写入到目标机的存储器中,从而完成整个应用。
长沙粤嵌嵌入式名企就业培训班开班了,长沙嵌入式培训,选粤嵌,实力雄厚,强大教学体系,专业教学机构,上市公司,产品强大,技术力量强大满意后付款,至强大的教学平台,具研发实力!粤嵌教育,是中国专业的嵌入式培训基地,中国专业嵌入式教学仪器平台生产商。
为什么要学习嵌入式编程开发
入行有未来就业前景广薪资待遇高
哪些人适合学习嵌入式人工智能
软件、硬件、电子工程等专业、欲转行的相关专业
循序渐进,课程模块吃透“嵌入式”
1嵌入式Linux C编程基础
Linux 系统基础入门
搭建嵌入式 Linux 开发环境
嵌入式C语言编程
高质量的编码规范
Linux Shell 编程
数据结构
阶段项目开发与实现(一)
《超市购物计价系统》
2嵌入式Linux应用开发基础
Linux IO 编程
Linux 多进程编程
Linux 多线程编程
Linux 网络编程
阶段项目开发与实现(二)
《多媒体网络广告发布终端》
3嵌入式软件编程
C++语法及编程提高
Qt 基础编程
Qt 进阶编程
阶段项目开发与实现(三)
《android 手机远程控制 window 桌面》
4Cortex- -4 M4
Cortex-M4 开发基础
Cortex-M4 开发
uC/OS-III 嵌入式操作系统应用
阶段项目开发与实现(五)
《智能家居报警系统》
5嵌入式Linux系统移植及驱动开发
嵌入式平台软硬件框架分析
ARM 处理器原理
Linux 设备驱动开发
阶段项目开发与实现(六)
《智能云家居》
Python 人工智能开发
Python 基础知识
《Python 人脸识别》
6创客孵化综合项目
《可视对讲系统》
《智慧农业系统》
《智能管家机器人》
《智能小车》
《汽车行驶记录仪》
《个人健康助手》
《倒车雷达影像系统》
研发出身的大牛讲师,为你指点迷津
从粤嵌毕业只是起点,我们的学员有更多发展可能
限量福利0元领取
业内大咖分析行业现状以及就业前景,让学员对各个方向的课程有相对全面的了解,从而根据自身情况判断是否选择学习
嵌入式人工智能学习资料
0元领取视频学习资料以及大量项目专题
尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/news/513720/违者必究! 以上就是长沙嵌入式培训学校 小编为您整理长沙嵌入式名企就业培训班更靠谱排名一览的全部内容。