| 标题 |
作者 |
阅读数 |
发布时间 |
|
|
linuxkaka |
1118 |
2007-10-31 |
|
ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1)掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2)必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定) (3)必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。 从事嵌入式软件开发的好处是: (1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。 (2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。 (3)哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。 (4)兴趣所在,这是最主要的。 从事嵌入式软件开发的缺点是: (1) 入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。 (2)这方面的企业数量要远少于企业计算类企业。 (3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无...
>> 阅读全文
|
|
jasson |
686 |
2007-12-20 |
|
当今,谁在使用Linux?这是一个需要弄明白的问题。根据《Linux基金会》近期所完成的一项全球调查结果显示,今年全球的Linux用户相群体,相对于去年而言,明显地更加普及了。Linux用户是一些什么人?他们在干什么? 《Linux基金会》全球调查显示:69.4%的Linux用户在为“小企业”(员工总数在100人以下)工作,其中43.3%的人是IT专业人员(含软件开发者)。他们使用Linux,大都得到了“上司”(“Boss”)认可,这就是说,他们中间的64.1%已经把Linux计算机搬到了自己的办公室里面,堂而皇之地干起了自己的工作。那些使用Linux的企业,并不拒绝Windows,其中40.6%的企业有一半以上部署了Linux工作岗位,但是,其中有57.5%的企业大部分(一半以上)仍然在使用Windows作为工作平台。 《Linux基金会》调查发现,53.3%的企业使用Linux都是用于软件开发工作环境,但是,几乎2/3(66.1%)的企业已经把它作为一般性的“工作台”(“Client desktop”)来使用。这就是说,Linux已经不再单纯地当作一种“操作系统”来看待(使用)。Linux软件包里面办公套件业已登上“历史舞台”。 《Linux基金会》调查发现,Linux,作为一种操作系统,它的...
>> 阅读全文
|
|
linuxkaka |
1277 |
2007-12-19 |
|
12月18日消息,据国外媒体报道,PCWorld网站日前评出了2007年15大科技失望。这其中,既包括产品和服务,也涵盖一些令人失望的事件。 排行榜显示,微软新一代操作系统Windows Vista位居15大科技失望榜首,而苹果的新系统Leopard也未能幸免。此外,苹果iPhone手机和微软Zune播放器也都榜上有名。以下为PCWorld评出的2007年15大科技失望: 1. 微软新一代操作系统Windows Vista 历经5年的打造,Windows Vista在界面、安全、搜索和无线等方面均有较大提升。但Vista也并不是那么完美,兼容性问题,以及新增的用户帐户功能(UAC)等均给用户带来了不少麻烦。 2. 新一代DVD标准大战 对于蓝光DVD和HD DVD两大阵营,他们并未从VHS与Betamax,CD-R与CD-RW,DVD-A与SACD大战中汲取经验和教训。 3. Facebook新广告计划Beacon令人失望 4. 雅虎公司 在搜索市场落后于Google,但更重要的是向美国国会撒谎。 5. 苹果iPhone手机 除了个别小缺陷,iPhone手机本身可以说是完美的。但600美元的高价上市后不久,就下降了200美元,让用户感到很气愤。另外,不能更换运营商有点遗憾。 6. 宽带不再无限制使用...
>> 阅读全文
|
|
jasson |
10911 |
2008-3-17 |
|
最近,常有新入行的网友在论坛或QQ群里问,如果学习嵌入式linux开发,现在就基于本人的一点体验和大家分享,我不会花大量时间进行长篇大论,必竞现在工作时间太紧张,只简单写四点思路。学习嵌入式linux,主要做的就是四点:第一点,写bootloader,并移植到到nand flash上;第二点,编译kernel(内核),并通过bootloader下载到nand flash上;第三点,在基于nand flash上建立文件系统;第四点,把写好的应用程序下载到target上。呵呵,可能对大家没什么实际的作用。关于这四点的操作及经验,我相信大家可以在网上找到一大把文章。
>> 阅读全文
|
|
jasson |
659 |
2007-12-20 |
|
2007年,基于Linux的技术创新,层出不穷,可谓令人“目不暇接”。比如,OpenMoko(被称为真正的Linux电话)、Ubuntu电脑(Dell)、绿色电脑(Everex的gPC)、Eee PC(华硕)、各种新颖的Linux发行版和桌面系统、谷歌的电子地球和网络办公桌面、Linux游戏(Quake Wars)、虚拟机(KVM)、3D桌面、ATI/AMD Linux v2.0和快速启动技术(SplashTop),等等。 大家知道,美国Phoronix公司是一个办事非常认真的“书呆子”(公司),做什么事情都得依据“实验数据”来说话。它的研究报告,几乎全是实验数据,似乎不会使用文字表述。今年,它发表了325篇研究报告(包括700多项原创数据)。值得我们注意的是,这个书呆子把那项“快速启动技术”(即DeviceVM公司的SplashTop)称为“2007年Linux生态系统中的“纯粹发明”(“Pure Innovation”),甚至称为“2007年Linux的最伟大的发明”(“The greatest Linux innovation of 2007”)。这是为什么呢? SplashTop是一项涉及嵌入式Linux和节能(绿色)技术的创新成果,比如,华硕的Eee Pc计算机主板就包含(集成)了这种技术,计算机加电之后,在数秒钟之内便可完成“快速启动”,关机过程也是一样(甚至更快)...
>> 阅读全文
|
|
湛蓝思微 |
958 |
2007-10-23 |
|
Linux内核中定义了一个timer_list结构,我们在驱动程序中可以利用之: struct timer_list { struct list_head list; unsigned long expires; //定时器到期时间 unsigned long data; //作为参数被传入定时器处理函数 void (*function)(unsigned long);}; 下面是关于timer的API函数: 增加定时器void add_timer(struct timer_list * timer); 删除定时器int del_timer(struct timer_list * timer); 修改定时器的expireint mod_timer(struct timer_list *timer, unsigned long expires); 使用定时器的一般流程为: (1)timer、编写function; (2)为timer的expires、data、function赋值; (3)调用add_timer将timer加入列表; (4)在定时器到期时,function被执行; (5)在程序中涉及timer控制的地方适当地调用del_timer、mod_timer删除timer或修改timer的expires。 我们可以参考drivers\char\keyboard.c中键盘的驱动中关于timer的部分:…#include …static struct timer_list key_autorepeat_timer ={ function: key_callback};static voidkbd_processkeycode(unsigned char keycode, char up_flag, int autorepeat){ char ...
>> 阅读全文
|
|
linuxkaka |
1095 |
2007-10-31 |
|
1 嵌入式系统中对内存分配的要求 ①快速性。嵌入式系统中对实时性的保证,要求内存分配过程要尽可能地快。因此在嵌入式系统中,不可能采用通用操作系统中复杂而完善的内存分配策略,一般都采用简单、快速的内存分配方案。当然,对实性要求的程序不同,分配方案也有所不同。例如,VxWorks采用简单的最先匹配如立即聚合方法;VRTX中采用多个固定尺寸的binning方案。 ②可靠性。也就是内存分配的请求必须得到满足,如果分配失败可能会带来灾难性的后果。嵌入式系统应用的环境千变万化,其中有一些是对可靠性要求极高的。比如,汽车的自动驾驶系统中,系统检测到即将撞车,如果因为内存分配失败而不能相应的操作,就会发生车毁人亡的事故,这是不能容忍的。 ③高效性。内存分配要尽可能地少浪费。不可能为了保证满足所有的内存分配请求而将内存配置得无限大。一方面,嵌入式系统对成本的要求使得内存在其中只是一种很有限的资源;另一方面,即使不考虑成本的因素,系统有限的空间和有限的板面积决定了可配置的内存容量是很限的。 2 静态分配与动态分配 究竟应用使用静态分配还是动态分配,一直是嵌入式系统设计中一个争论不休的总是。 当然,最合适的答案是对于不同的系统采用...
>> 阅读全文
|
|
湛蓝思微 |
1793 |
2007-11-8 |
|
在本系列序中作者概述了 linux 进程间通信的几种主要手段。其中管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。 认清管道和有名管道的读写规则是在程序中应用它们的关键,本文在详细讨论了管道和有名管道的通信机制的基础上,用实例对其读写规则进行了程序验证,这样做有利于增强读者对读写规则的感性认识,同时也提供了应用范例。1、 管道概述及相关API应用1.1 管道相关的关键概念管道是Linux支持的最初Unix IPC形式之一,具有以下特点:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程); 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。 1.2管道的创建...
>> 阅读全文
|
|
湛蓝思微 |
5780 |
2007-10-23 |
|
第一讲 引言 本文将仍然秉承《Linux Device Drivers》一书以实例为主的风格,但是实例的背景将非常简单,以求使读者能将集中精力于Linux设备驱动本身,理解Linux内核模块、Linux设备驱动的结构、Linux设备驱动中的并发控制等内容。 [全文阅读]第二讲 Linux内核模块 Linux设备驱动属于内核的一部分,Linux内核的一个模块可以以两种方式被编译和加载。 [全文阅读]第三讲 字符设备驱动程序 Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得Windows的设备操作犹如文件一般。 [全文阅读]第四讲 设备驱动中的并发控制 在驱动程序中,当多个线程同时访问相同的资源时(驱动程序中的全局变量是一种典型的共享资源),可能会引发"竞态",因此我们必须对共享资源进行并发控制。 [全文阅读]第五讲 设备的阻塞与非阻塞操作 阻塞操作是指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起。 [全文阅读] 第六讲 设备驱动中的异步通知 结合阻塞与非阻塞访问、poll函数可以较好地解决设备的读写,但是如果有了异步通知就更方便了。异步通知...
>> 阅读全文
|
|
linuxkaka |
4933 |
2007-10-31 |
|
Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。 Linux下的文件系统结构如下: 498)this.style.width=498;">Linux下的文件系统结构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写入内容时,需要先擦除对应的存储区间,这种擦除是以...
>> 阅读全文
|
|
linuxkaka |
671 |
2007-10-31 |
|
不同于平常开发的软件,在开发嵌入式系统时,常常把所有的软件模块最终都生成一个单一的文件,我们把这个单一的文件称为image,它一般包括以下布局: bootloader embedded linux kernel device driver root filesystem application 因此开发流程如下: 1、开发target硬件系统。 2、需要一套交叉编译工具,能够产生target目标代码 3、开发一个bootloader到target上去,用来引导内核 4、开发linux内核到target上去 5、开发一个rootfs 6、开发特定硬件的驱动程序 7、或许还需要一个实时的linux 8、开发上层的应用程序。
>> 阅读全文
|
|
湛蓝思微 |
2276 |
2007-10-28 |
|
http://www.deansys.com/doc/ldd3/index.html感觉不错
>> 阅读全文
|
|
linuxkaka |
1057 |
2007-10-31 |
|
底层软件开发人员,及所有的程序员,若想作好软件设计(良好的结构和移植性),能适应新项目的变化,就要遵循下面的原则: ·最重要的是要理解基本概念 ( 如操作系统 ),掌握设计原则 ( 如接口分层 )。 ·第二是经验的积累。实践经验比书本知识更可贵,可极大提高后续工作和学习效率。 ·第三是关注新的软件技术,提高自己对软件设计的理解。 需要注意的是,一个完整固定的学习路线是很难确定的,原因一是因人而异,二是技术进步很快。 这是从todaygood的blog上面摘下来的,todaygood的学习效率比我高,可能工作的环境更能锻炼人吧。就嵌入式系统软件开发的学习思路而言,我们的观点还是一致的。现在这三个方面我还都是注意的,基本上是白天在导师公司的时间里,就根据项目积累经验,总结和改进学习方法,晚上进行软件设计基础和理论基础的学习。中间穿插的休息时间就可以泡论坛,看blog,关注新的软件技术,先知道有这种技术,技术的发展状况如何。 当然,这些工作的前提是确定一个基本的知识体系框架,在校期间把框架的基础打好,尽量多扩展填充。工作之后,继续深入细化,形成专长。这是我的学习思路。 补充的一点是,要学会写文档。有两个原因,一是锻炼自己...
>> 阅读全文
|
|
湛蓝思微 |
3281 |
2007-10-23 |
|
对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。 进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间,如下图:内核空间中,从3G到vmalloc_start这段地址是物理内存映射区域(该区域中包含了内核镜像、物理页框表mem_map等等),比如我们使用的VMware虚拟系统内存是160M,那么3G~3G+160M这片内存就应该映射物理内存。在物理内存映射区之后,就是vmalloc区域。对于160M的系统而言,vmalloc_start位置应在3G+160M附近(在物理内存映射区与vmalloc_start期间还存在一个8M的gap来防止跃界),vmalloc_end的位置接近4G(最后位置系统会保留一片128k大小的区域用于专用页面映射),如下图:kmalloc和get_free_page申请的内存位于物理内存映射区域,而且在物理上也是连续的,它们与真实的物理地址只有一个固定的偏移,因此存在较简单的转换关系,virt_to_phys()可以实现内核虚拟地址转化为物理地址:#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)exter...
>> 阅读全文
|
|
linuxkaka |
820 |
2007-10-31 |
|
在Linux操作系统下有3类主要的设备文件类型:块设备、字符设备和网络设备。这种分类方法可以将控制输入/输出设备的驱动程序与其他操作系统软件分离开来。 字符设备与块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般紧接着发生。块设备则不然,它利用一块系统内存作为缓冲区,若用户进程对设备的请求能满足用户的要求,就返回请求的数据;否则,就调用请求函数来进行实际的I/O操作。块设备主要是针对磁盘等慢速设备设计的,以免耗费过多的CPU时间用来等待。网络设备可以通过BSD套接口访问数据。 每个设备文件都有其文件属性(c/b),表示是字符设备还是块设备。另外每个文件都有2个设备号,第一个是主设备号,标识驱动程序;第二个是从设备号,标识使用同一个设备驱动程序的、不同的硬件设备。设备文件的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问驱动程序。 系统调用时操作系统内核与应用程序之间的接口,设备驱动程序是操作系统内核与机器硬件之间的接口。设备驱动程序是内核的一部分,它完成以下功能: ◆对设备初始化和释放 ◆把数据从内核传送到硬件和从硬件读取数据 ◆读取应用程序传送给设备文件的数据和回...
>> 阅读全文
|