-
如果你想做比较成功的产品,建议你采用ARM+DSP的方案,因为直接在ARM里跑语音压缩算法的方式性能比较受限,通常难以达到商用的要求,需要借助DSP中的硬件压缩算法。当然,如果你只是做做实验,可以直接用ARM
-
凡参加“顶嵌杯”的参赛选手获赠500元嵌入式培训代金券!
具体内容请见:http://www.top-e.org/student/html/478.html
-
参加“顶嵌杯”(https://bbs.eeworld.com.cn/thread-88917-1-1.html)的选手可获得500元代金券
-
顶嵌北京嵌入式Linux系统开发工程师就业实训班火热开班
http://www.top-e.org/page/zsjz/index.php
-
“顶嵌杯”大赛奖项设置
本届大赛共分为:特等奖、一等奖、二等奖、三等奖,奖励名额18个。
特等奖(1名):现金10000元;
一等奖(2名):高性能笔记本电脑;
二等奖(5名):数码相机;
三等奖(10名):MP5播放器(3名)、手机(2名)、顶嵌嵌入式免费实训2周(5名);
注:上述奖项除奖品之外还颁发中国软件行业协会嵌入式系统分会相应证书。
本届大赛高校团体奖项:分最佳高校组织奖,优秀高校组织奖名额共6个。
最佳高校组织奖(1名)、优秀高校组织奖(5名)
由中国软件行业协会嵌入式系统分会颁发的相应证书。
另外,每天(节假日除外)报名前2名可获得《北京航空航天大学航出版社》、《电子工业出版社》所赞助的编程相关书籍(任选一本,数量有限,先报先得)。赠送书籍名称如下:
注:每天(工作日)报名前两名已大赛组委会收到邮件时间为准!获得赠书名单:报名参赛
《20几岁,不要在懒惰》
《单片机的C语言应用程序设计》(第4版)《单片机C语言轻松入门》(已赠完)《手把手教你学单片机C程序设计》《ARM处理器与C语言开发》《梦断代码》(已增完)《自己动手写操作系统》(已赠完)《21天学通C语言》《Linux系统下C程序开发详解》《Linux安全体系分析与编程》
-
现在登录在线报名:http://www.top-e.org/form/bmzx/ 即可免费试听!
详细课程介绍:http://www.top-e.org/page/intro/
-
详细大赛介绍请见:http://www.top-e.org/page/topecup/
-
一、参赛流程及时间
大赛启动仪式—申请比赛官方比赛文档—报名登记—在线完成编程任务—提交审核委员会—通告结果—宣布获奖名单—颁奖典礼
1、大赛启动仪式于2009年11月7日9点开始;
2、下载报名表格:http://www.top-e.org/down/html/?52.html;申请比赛官方比赛文档:下载表格后,填写好表格后,于2009年11月7日0点后,邮件至cpk@top-e.org申请报名。邮件标题:姓名+所在地区+“报名”字样;附件报名表名称:姓名+顶嵌杯C大赛报名表.doc(请保存为word 2003格式);
3、一到两天内获得报名登记成功通知并获得参赛唯一编号;
4、按照规定时间完成初赛编程任务;
5、初赛测试从2009年11月23日零点至2010年1月10日24点终止;
6、决赛定于2010年1月16日9点至12点进行;
7、在线测试终止后2周内审核委员会评判作品,并且邮件通告结果;
8、对于获奖人员,邀请来北京参加颁奖典礼;
9、2010年1月30日举办颁奖典礼。
北大ACM测试系统使用说明下载
二、参赛对象要求:
1.对嵌入式系统有一定兴趣;
2.年龄不超过40岁;
3.有C语言基础;
4.熟悉Linux/Unix系统。
三、参赛题目要求及评判标准:
1.ANSI C语言格式;
2.编译器为GCC;
3.代码运行所占的内存,由系统自动测评;
4.代码的执行时间,由系统自动测评;
5.可执行程序的大小,由系统自动测评;
6.完成代码所花时间,由系统自动测评;
7.专家评审组人工测评,测评指标:代码的可读性、可维护性、可重用性、安全性、文档的条理性。
补充说明:有关作弊的认定和处理措施补充规定:
此次大赛原则规定是以个人为单位参赛,学校所在辅导员及老师,严禁直接和学生一道答题。竞赛预防机制:
包括评审委员会最终通过各种方式核实所创造代码是否为本人所为;
有奖举报等方式。处罚措施:
作弊本人终身禁赛;
参与作弊的相关人(辅导者及朋友或老师等)终身禁赛;
各大合作媒体公布通报批评名单:包含所在单位、学历等信息;
所在单位通报批评:嵌入式系统协会通过文件形式警告作弊者所在单位,并且在协会网站公布作弊名单及所在单位;
顶嵌网站会实时公布作弊者信息。
各位参赛者靠真实实力说话,文明竞赛。
-
现在奖品又有更改:) :
1、2440开发板带3.5寸LCD触摸屏2套;
2、《ARM嵌入式Linux系统开发从入门到精通》5本;
3、《嵌入式Linux学习》光盘每人一张;
4、《单片机与嵌入式系统应用》书籍每人一本;
5、“顶嵌杯”精美圆珠笔每人一支。
-
此次讲座的嘉宾都是重量级噢~:)
大家感兴趣也可参加本次大赛http://www.top-e.org/page/topecup/
-
都是学员总结的:lol
-
都是学员总结的:lol
-
都是学员总结的:lol
-
没关系,慢慢来,多学、多问、多做
-
嵌入式根文件系统的移植和制作(三)
四.烧写过程
我们采用的烧写方法和烧写内核的方法一样内核的烧,我们采用tftp方式,用网线将目标板和pc机连接起来,配置好目标板的网络参数,主要是serverip、ipaddr。
首先将rootfs下载到内存中:#tftp 30008000 rootfs
按照之前内核的nandflash分区进行烧写,将内存中的文件系统烧写到flash中:
#nand erase 500000 3b00000
#nand write 30008000 500000 3b00000
重启uboot使其加载文件系统。
可以看到内核启动,不在出现panic,这时会提示回车,回车后进入命令行,我们可以使用一些linux的常用命令,如:ls、cd、vi等。如下图所示:
注意:我们这里使用的是PUTTY串口显示软件,如果用之前的DNW查看串口信息,会出现下面的错误:
可以看到第一个目录 [1;34mbin [0m
会发现出现的信息除了bin目录外还有其他的内容,这并不是文件系统的问题只是DNW这款软件并不支持这些表示色彩的附加信息,换成PUTTY可以正常显示了。
我们可以运行一下我们自己的应用程序hello:./hello
可以看到打印信息Hello World如下图所示:
-
嵌入式根文件系统的移植和制作(三)
四.烧写过程
我们采用的烧写方法和烧写内核的方法一样内核的烧,我们采用tftp方式,用网线将目标板和pc机连接起来,配置好目标板的网络参数,主要是serverip、ipaddr。
首先将rootfs下载到内存中:#tftp 30008000 rootfs
按照之前内核的nandflash分区进行烧写,将内存中的文件系统烧写到flash中:
#nand erase 500000 3b00000
#nand write 30008000 500000 3b00000
重启uboot使其加载文件系统。
可以看到内核启动,不在出现panic,这时会提示回车,回车后进入命令行,我们可以使用一些linux的常用命令,如:ls、cd、vi等。如下图所示:
注意:我们这里使用的是PUTTY串口显示软件,如果用之前的DNW查看串口信息,会出现下面的错误:
可以看到第一个目录 [1;34mbin [0m
会发现出现的信息除了bin目录外还有其他的内容,这并不是文件系统的问题只是DNW这款软件并不支持这些表示色彩的附加信息,换成PUTTY可以正常显示了。
我们可以运行一下我们自己的应用程序hello:./hello
可以看到打印信息Hello World如下图所示:
-
嵌入式根文件系统的移植和制作(二)
2. 基于RAM的文件系统
(1) Ramdisk
Ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。
在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。
(2)ramfs/tmpfs
Ramfs是LinusTorvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。(实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)
Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。
Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。
Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。
3. 网络文件系统NFS (Network File System)
NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。
以上讨论的都是基于存储设备的文件系统(memory-based filesystem),它们都可用作Linux的根文件系统。实际上,Linux还支持逻辑的或伪文件系统(logical or pseudo filesystem),例如procfs(proc文件系统),用于获取系统信息,以及devfs(设备文件系统)和sysfs,用于维护设备文件。
我们要移植的开发板的存储设备为Nandflash,我们可以用应用比较广泛的cramfs文件系统。
二.移植准备
1.目标板
我们还是使用之前移植过程一直使用的开发板参数请参考上文的地址: https://bbs.eeworld.com.cn/thread-80832-5-1.html。
2.软件准备
(1)Busybox
Busybox被形象的称为嵌入式linux系统中的瑞士军刀,可以从这个称呼中看到busybox是一个集多种功能于一身的东西,它将许多常用的UNIX命令和工具结合到了一个单独的可执行程序中。虽然与相应的GNU工具比较起来,busybox所提供的功能和参数略少,但在比较小的系统(例如启动盘)或者嵌入式系统中,已经足够了。
Busybox在设计上就充分考虑了硬件资源受限的特殊工作环境。它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。例如最终生成的可执行文件为busybox,当为它建立一个符号链接ls的时候,就可以通过执行这个新命令实现列目录的功能。采用单一执行文件的方式最大限度地共享了程序代码,甚至连文件头、内存中的程序控制块等其他操作系统资源都共享了,对于资源比较紧张的系统来说,真是最合适不过了。
在busybox的编译过程中,可以非常方便地加减它的“插件”,最后的符号链接也可以由编译系统自动生成。
编译busybox
Busybox的编译过程与内核的编译过程很接近都是先make menuconfig进行配置,然后在make进行编译。
【1】从http://www.busybox.net/downloads/下载busybox工具。这里我们选择busybox-1.13.4.tar.bz2
【2】解压busybox-1.13.4.tar.bz2使用命令:tar jxvf busybox-1.13.4.tar.bz2
【3】进入busybox目录,修改Makefile 在164行 CROSS_COMPILE=arm-linux-
【4】Make menuconfig进行配置,可以选择静态编译,如果是动态编译的话要拷贝相应的库文件,默认配置保存即可。
【5】make all install这是会在busybox目录下生成_install文件夹。
(2)文件系统打包工具
【1】从http://prdownloads.sourceforge.net/cramfs/下载cramfs工具。
【2】解压cramfs-1.1.tar.gz使用命令:tar zxvf cramfs-1.1.tar.gz
【3】进入cramfs工具的根目录执行make。
【4】Make后在cramfs工具的根目录中就会生成一个mkcramfs文件,这个就是我们需要的工具。
三.制作过程
1.建立根文件系统目录就是之前busybox生成的_install目录 cd …/_install
2.创建各种必要的系统文件目录。mkdir dev lib tmp proc
3.创建设备文件。cd dev
mknod fb0 c 29 0 建立framebuffer设备文件
mknod ts0 c 13 128 建立触摸屏设备文件
mknod console c 5 1
mknod tty0 c 4 0
mknod tty1 c 4 1
mknod tty2 c 4 2
mknod tty3 c 4 3
mknod tty4 c 4 4
4.添加必要的库文件,由于之前没有选择静态编译busybox,这里要拷贝相应的库文件cd lib
cp –arf …/arm-linux/lib/* .
5.根据自己需要添加应用程序
这里我们编写一个简单的应用程序打印一句问候语,程序代码如下:
#include
void main()
{
printf(“Hello World\n”);
}
注意编译时要使用arm-linux-gcc,由于之前我们把编译器的库文件全部进行拷贝,可以直接动态编译。生成的可执行文件hello放入tmp文件夹。使用的命令:
rm-linux-gcc hello.c –o hello
cp –arf …/_install/tmp/6.打包mkcramfs _install rootfs
-
bourn和fire你好,我是顶嵌的张老师,刚刚看了你的评论,我认为没有必要和你理论,我只是提醒你,你注册的ID都是同一个IP,并且从你阐述的“做视频采集,流媒体的的多”我们大概能判断出你的来历,所以你这种损人不利己的做法提醒终止,否则我们会通过法律程序,通过追踪你的ip来确认你的最终身份。
群众的眼睛是雪亮的,相信对顶嵌关注的朋友会亲自来了解顶嵌,也可以了解之前顶嵌就业情况。
-
第四阶段:嵌入式根文件系统的移植和制作(一)
一.文件系统简介
理论上说一个嵌入式设备如果内核能够运行起来,且不需要运行用户进程的话,是不需要文件系统的,文件系统简单的说就是一种目录结构,由于linux操作系统的设备在系统中是以文件的形式存在,将这些文件进行分类管理以及提供和内核交互的接口,就形成一定的目录结构也就是文件系统,文件系统是为用户反映系统的一种形式,为用户提供一个检测控制系统的接口。
根文件系统,我认为根文件系统就是一种特殊的文件系统,那么根文件系统和普通的文件系统有什么区别呢?由于根文件系统是内核启动时挂在的第一个文件系统,那么根文件系统就要包括Linux启动时所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序bin目录等,任何包括这些Linux系统启动所必须的文件都可以成为根文件系统。
Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual FileSystem),为各类文件系统提供一个统一的操作界面和应用编程接口。
Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。
不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2, yaffs,cramfs, romfs, ramdisk, ramfs/tmpfs等。
1. 基于FLASH的文件系统
Flash(闪存)作为嵌入式系统的主要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1(擦除Flash就是把对应存储块的内容恢复为1),因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为单位进行的。
闪存主要有NOR和NAND两种技术。Flash存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。因此,必须针对Flash的硬件特性设计符合应用要求的文件系统;传统的文件系统如ext2等,用作Flash的文件系统会有诸多弊端。
一块Flash芯片可以被划分为多个分区,各分区可以采用不同的文件系统;两块Flash芯片也可以合并为一个分区使用,采用一个文件系统。即文件系统是针对于存储器分区而言的,而非存储芯片。
在嵌入式Linux下,MTD(Memory TechnologyDevice,存储技术设备)为底层硬件(闪存)和上层(文件系统)之间提供一个统一的抽象接口,即Flash的文件系统都是基于MTD驱动层的(参见上面的Linux下的文件系统结构图)。使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主)而设计的,因而它对Flash有更好的支持、管理和基于扇区的擦除、读/写操作接口。
(1) jffs2
JFFS文件系统最早是由瑞典AxisCommunications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中。
Jffs2: 日志闪存文件系统版本2 (Journalling Flash FileSystem v2)
主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。
jffs不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外,jffs文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。
(2) yaffs:Yet Another Flash File System
yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE,pSOS和ThreadX等。
yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与MTD驱动程序配合使用。
yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。
(3) Cramfs:Compressed ROM File System
Cramfs是Linux的创始人 Linus Torvalds参与开发的一种只读的压缩文件系统。它也基于MTD驱动程序。在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。
Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以XIP方式运行,所有的应用程序要求被拷到RAM里去运行,但这并不代表比Ramfs需求的RAM空间要大一点,因为Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时,Cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到RAM中。
另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。
由于以上特性,Cramfs在嵌入式系统中应用广泛。
但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。
Cramfs映像通常是放在Flash中,但是也能放在别的文件系统里,使用loopback 设备可以把它安装别的文件系统里。
(4) Romfs
传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以XIP(eXecuteIn Place,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。
其他文件系统:fat/fat32也可用于实际嵌入式系统的扩展存储器(例如PDA,Smartphone,数码相机等的SD卡),这主要是为了更好的与最流行的Windows桌面操作系统相兼容。ext2也可以作为嵌入式Linux的文件系统,不过将它用于FLASH闪存会有诸多弊端。
顶嵌嵌入式培训
顶嵌嵌入式原创视频教程顶嵌嵌入式技术教程
[ 本帖最后由 topembedded 于 2009-10-10 10:38 编辑 ]
-
因为最近课程比较多,所以。。。请大家见谅。下面要讲的是关于《嵌入式根文件系统的移植和制作》,请大家见下帖。谢谢大家的支持,感谢《电子工程世界》:handshake
[ 本帖最后由 topembedded 于 2009-10-10 10:55 编辑 ]