| 标题 |
作者 |
阅读数 |
发布时间 |
|
|
linuxkaka |
5692 |
2007-8-5 |
|
3.7电源 LDO(Low Dropout)属于DC/DC变换器中的降压变换器,它具有低成本、低噪声、低功耗等突出优点,另外它所需要的外围器件也很少,通常只有 1~2 个旁路电容。 在电路板上我们分别用两个LDO来实现5V向3.3V(存储接口电平)和1.8V(ARM内核电平)的转换。up监控电路采用MAX708芯片,提供上电、掉电以及降压情况下的复位输出及低电平有效的人工复位输出:3.8其它 SN74LVTH62245A提供总线驱动和缓冲能力:S3C2410A集成LCD液晶显示器控制电路,外部引出接口:触摸屏有电阻式、电容式等,其本质是一种将手指在屏幕上的触点位置转化为电信号的传感器。手指触到屏幕,引起触点位置电阻或电容的变化,再通过检测这一 电性变化,从而获得手指的坐标位置。通过S3C2410A集成的AD功能,完成电信号向屏幕坐标的转化,触摸屏接口如下:键盘则直接利用CPU的可编程I/O口,若连接 mxn键盘,则需要m+n个可编程I/O口,由软件实现键盘扫描,识别按键:3.9整体架构 下图呈现了ARM处理器及外围电路的整体设计框架:4.小结 本章讲解了基于S3C2410A ARM处理器电路板硬件设计的基本组成,为后续各章提供了总体性的准备工作。
>> 阅读全文
|
|
linuxkaka |
1210 |
2007-8-5 |
|
BootLoader指系统启动后,在操作系统内核运行之前运行的一段小程序。通过BootLoader,我们可以初始化硬件设备、建立内存空间的映 射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现 的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 BootLoader 几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。 BootLoader 的实现依赖于CPU的体系结构,因此大多数 BootLoader 都分为stage1 和stage2 两大部分。依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在 stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而stage2 则通常用C 语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。 BootLoader 的 stage1 通常包括以下步骤: ·硬件设备初始化; ·为加载Boot Loader的stage2准备 RAM 空间; ·拷贝Boot Loader的stage2 到RAM空间中; ·设置好堆栈; ·跳转到 stage2 的 C 入口点。 Boot Loader的stage2通...
>> 阅读全文
|
|
linuxkaka |
957 |
2007-8-5 |
|
(1)内核初始化:Linux内核的入口点是start_kernel()函数。它初始化内核的其他部分,包括捕获,IRQ通道,调度,设备驱动,标定延迟循环,最重要的是能够fork"init"进程,以启动整个多任务环境。 我们可以在init中加上一些特定的内容。 (2)设备驱动:设备驱动占据了Linux内核很大部分。同其他操作系统一样,设备驱动为它们所控制的硬件设备和操作系统提供接口。 本文第四章将单独讲解驱动程序的编写方法。 (3)文件系统:Linux最重要的特性之一就是对多种文件系统的支持。这种特性使得Linux很容易地同其他操作系统共存。文件系统的概念使得用户能 够查看存储设备上的文件和路径而无须考虑实际物理设备的文件系统类型。Linux透明的支持许多不同的文件系统,将各种安装的文件和文件系统以一个完整的 虚拟文件系统的形式呈现给用户。 我们可以在K9S1208 NAND FLASH上移植cramfs、jfss2、yaffs等FLASH文件系统。 3. init进程 在init函数中"加料",可以使得Linux启动的时候做点什么,例如广州友善之臂公司的demo板在其中加入了公司信息:static int init(void * unused){lock_kernel();do_basic_setup();prepare_namespace();/** Ok,...
>> 阅读全文
|
|
linuxkaka |
1193 |
2007-8-5 |
|
设备驱动程序是操作系统内核和机器硬件之间的接口,它为应用程序屏蔽硬件的细节,一般来说,Linux的设备驱动程序需要完成如下功能: ·设备初始化、释放; ·提供各类设备服务; ·负责内核和设备之间的数据交换; ·检测和处理设备工作过程中出现的错误。 Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得Windows的设备操作犹如文件一般。在应用程序看来,硬件设备 只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,如open ()、close ()、read ()、write () 等。 Linux主要将设备分为二类:字符设备和块设备。字符设备是指设备发送和接收数据以字符的形式进行;而块设备则以整个数据缓冲区的形式进行。在对字符 设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了;而块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返 回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作。块设备主要针对磁盘等慢速设备。 1.内存分配 由于Linux驱动程序在内核中运行,因此在设备驱动程序需要申请/释放内存时,不能使用用户级的malloc/f...
>> 阅读全文
|
|
linuxkaka |
764 |
2007-8-5 |
|
内容简介:============================Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得Windows的设备操作犹如文件一般.在应用程序看来,硬件设备 只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,如open ()、close ()、read ()、write () 等。设备驱动程序是操作系统内核和机器硬件之间的接口,它为应用程序屏蔽硬件的细节,一般来说,Linux的设备驱动程序需要完成如下功能:设备初始化、释放; ·提供各类设备服务; ·负责内核和设备之间的数据交换; ·检测和处理设备工作过程中出现的错误。============================ 3.字符设备驱动 我们必须为字符设备提供一个初始化函数,该函数用来完成对所控设备的初始化工作,并调用register_chrdev() 函数注册字符设备。假设有一字符设备"exampledev",则其init 函数为:void exampledev_init(void){if (register_chrdev(MAJOR_NUM, " exampledev ", &exampledev_fops))TRACE_TXT("Device exampledev driver registered error");elseTRACE_TXT("Device exampledev driver registered successfully...
>> 阅读全文
|
| 标题 |
作者 |
阅读数 |
发布时间 |
|
|
mermaid |
13849 |
2009-7-2 |
|
汇编语言是CPU二进制指令的可读写版本。我们在后面将有单独的一章来讲述汇编语 言。从来没有接触过汇编语言的读者在阅读本书时可能会有一些迷惑 。 大多数MIPS汇编语言都是非常古板的,都是一些寄存器号码。但是工具链(toolchains)可 以使得使用微处理机语言变得简单。工具链至少允许程序员引用一些助记符,而严 格的汇编语言要求严格的数字编码。大多我们都是用比较熟悉的C预处理器。C预处 理器会把C风格的注解去掉,而得到一个可用的汇编代码。 有C预处理器的帮助,MIPS汇编程序都是用助记符来表示寄存器。助记符同时也代表 了每个寄存器的用法(我们将在2.2节介绍这一点) 对於熟悉汇编语言但不熟悉MIPS的读者,下面是一些例子。 /* this is a comment */ #so is this entrypoint: #this''s a label addu $1, $2, $3 # (registers) $1 = $2 + $3 与大多数汇编语言一样, MIPS汇编语言也是以行为单位的。每一行的结束是一个指 令的结束,并且忽略任何“#”之后的内容,认为是注释。在一行里可以有多条指令。 指令之间要用分号“;”隔开。 一个符号(label)是一个后面跟着冒号“:”的字。符号可以是任何字符串的组合。 符号被用来定义一段代码的入口和定义数据段的一个存储...
>> 阅读全文
|
|
mermaid |
701 |
2009-6-25 |
|
中国软件行业协会嵌入式系统分会2009年暑期项目实战训练营之师资培训班正在招募中,训练营以项目实战的形式,基于行业热门的应用案例,融拓展游戏、项目小组竞赛等方式,增加相关企业参观、工程师联谊等活动,让老师从教学实践、最新咨询、行业应用等各个方面得到收获。具体安排如下,欢迎老师选择相应模块报名。课程模块课程名称起止时间上课地点剩余名额课程价格模块A实战项目(Linux)师训班--基于Web远程控制系统(I)7月8日-15日(5天)北京额满2200模块B实战项目(WinCE)师训班--基于PMP电子相册应用案例7月11日-16日(6天)天津20人2500模块C实战项目(WinCE)师训班--基于PMP物流配送系统7月27日-8月7日(12天)上海少量余额5800(赠送PMP实训包一套)模块D实战项目(Linux)师训班--基于Web的远程控制系统(II)7月27日-8月7日(12天)上海少量余额5800(赠送WebServer实训包一套)模块E实战项目(WinCE)师训班--基于PMP电子相册应用案例8月23日—28日(6天)福州20人2500备注:1.考核合格发放中国软件行业协会嵌入式系统分会结业证书2.费用包括免费午餐、培训资料(模块C、D赠送相应实训包设备)、嵌入式相关企业参观一次、工程师联谊聚餐一次3.具体课程介绍见附件
>> 阅读全文
|
|
博文视点(北京) |
2161 |
2009-6-9 |
|
C语言程序的运行总结 在上面几节,主要介绍了C语言运行时内存的使用情况。其关注点是程序中主要的段,事实上,程序可能不仅包括了上述主要段,还可能包括一些头信息。程序实际的运行也分为在操作系统下运行和直接运行等情况。在具有操作系统的情况下,程序由操作系统加载运行,加载的时候可执行程序可以是一个文件,这个文件将包含程序的主要段以及头信息。 对于Linux操作系统,目标程序是可执行的ELF(Executable and linking Format)格式;对于uCLinux操作系统,目标程序是Flat格式;对于需要在系统直接运行的程序,目标程序应该是纯粹的二进制代码,载入系统后,直接转到代码区地址执行。 事实上,无论运行环境如何,C语言程序在运行时所进行的动作都是类似的。程序在准备开始运行的时候,以下几个条件都是必不可少的:1.代码段必须位于可运行的存储区。2.读写数据段必须在可以读写的内存中,而...
>> 阅读全文
|
|
博文视点(北京) |
1951 |
2009-6-8 |
|
Vc中对话框数据交换和验证机制 在VC中,所有的对话框函数都是使用C++代码实现的,它并没有采用特殊的资源或“奇特”的宏,但却可以很好地实现用户与应用程序之间的交互工作,这里的关键就在于对话框应用程序中广泛采用的对话框数据交换和验证机制。 对话框数据交换(Dialog Data Exchange,DDE)用于初始化对话框中的控件并获取用户的数据输入,而对话框数据验证(Dialog Data Validation,DDV)则用于验证对话框中数据输入的有效性。MFC在每个对话框类中提供了一个用于重载的虚函数——DoData Exchange来实现对话框数据交换和验证工作。? 对话框数据交换 如果使用DDE机制,则通常在OnInitDialog程序或对话框构造函数中设置对话框对象成员变量的初始值。在对话框即将显示前,应用程序框架的DDE机制将成员变量的值传递给对话框的控件,当对话框响应DoModal或Create...
>> 阅读全文
|
|
博文视点(北京) |
760 |
2009-6-8 |
|
注意事项 数据库引擎问题 如果你要将现有的数据库转移到MySQL集群中,那么请将数据表的格式由MyISAM或InnoDB改为NDBCLUSTER。转换的方法,请阅读MySQL的官方文档:http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-multi-load-data-queries.html 否则,可能会遇到意想不到的问题,比如要添加MySQL用户,就必须在每个NDB节点上添加,等等。 内存问题 NDB把所有数据存放在内存中,所以你需要为NDB节点配备较大的内存。一般情况下,换算比例为1:1.1,也就是说,如果你有1GB数据库,至少要配备1.1GB内存;如果你的数据库会增长到8GB,就需要至少为服务器配备8.8GB内存。而且每个NDB节点都要做如此配置。 安全问题 该集群的MGM节点,其管理服务运行在1186端口上;NDB节点的...
>> 阅读全文
|
|
博文视点(北京) |
4173 |
2009-6-8 |
|
集群连接状态测试 首先,我们回到管理节点(mysql-mgm.mtest.com)上。在该服务器上,执行下面的命令:$ ndb_mgm 命令执行后,就会进入MGM的客户端界面,并显示mgm提示符:-- NDB Cluster -- Management Client --ndb_mgm> 在该提示符下,输入show命令,来查看当前连接状态:ndb_mgm> show 在正常情况下,应该显示如下内容:Connected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 @192.168.1.13 (Version: 5.0.51, Nodegroup: 0)id=3 @192.168.1.14 (Version: 5.0.51,...
>> 阅读全文
|
|
博文视点(北京) |
1139 |
2009-6-5 |
|
本书是第一本全面介绍Ubuntu Linux Server的中文书籍,是作者10多年实战经验的结晶;从构思到出版,花费作者近3年时间。无论您是初学者还是Linux高手,都能从中获益。 在内容上,本书基本上涉猎到了Linux服务器的各方面常见应用。“最佳方案”是本书的特色。对于每一种应用,作者都不是泛泛而谈,而是推荐一个“最佳方案”——从硬件服务器的选型到Linux入门,从LAMP到Tomcat,从代理服务器到邮件服务器,从DHCP到DNS,从Samba到虚拟化,从负载均衡到远程控制,从RAID到LVM再到系统安全——不管您是在校学生还是在职Linux管理员,不管您是小公司还是大企业,都可以直接复制本书内容,在最短的时间内您就可以架设起自己的最佳Linux服务器。 拥有本书,您就拥有了一位具有10年经验的资深Linux管理员和开发者的最佳实战方案,有如专家亲临现场、全程陪护,让您在工作中胸有成竹,...
>> 阅读全文
|
|
博文视点(北京) |
4733 |
2009-6-5 |
|
如何设计方案?”前 言“我们的服务器用的软RAID,现在硬盘不够了,需要添加新硬盘,请问应该怎么做?”“我们发现服务器被入侵了,请问应该怎么做?”“目前Web和数据库在同一台服务器上,可是由于我们的企业发展得太快,现在服务器不够用了,计划增加两台服务器,请问您如何设计方案?”——面试“Linux系统管理员”时可能会被问到的问题近年来,Linux(尤其是Ubuntu)一直保持上升势头,据说目前中国的Linux人才缺口已经达到120万!在2008年开始的全球经济大萧条中,虽然各大公司都在裁员,但是我相信,一个真正优秀的Linux系统管理员,是任何公司都不可能轻易解聘的;不知有多少大大小小的公司,正在如饥似渴地募求Linux人才,却常常慨叹一才难求!我在帮助朋友的公司招聘Linux系统管理员时,发现一个问题:很多人只是对桌面系统很熟悉,却不熟悉Linux服务器;有的人虽然熟悉,却不深入,不精通。本书正是帮助您迅速提高Linux服务器管理技能和经验的绝佳教材。本书的特色您拨打家电服务电话时,可能会听到下面的语音:“普通话请按1,English press 2。”“个人服务请按1,企业客户请按2。”“小家电请按1,电冰箱请按2,空调器请...
>> 阅读全文
|
|
博文视点(北京) |
387 |
2009-6-5 |
|
一年后的今天重读《梦断代码》有感 一年之前的今天我在书店看到了《梦断代码》这本书,这本很早就在网上关注过的图书,当即就买下了,经过几天的挑灯夜读算是完成了第一遍的阅读,在余味未尽之时读了第二遍,对于书中说到的故事,看似说的是一个软件,其实说的大千软件,看似说一事,其实是说百事,作为软件开发行业的人员是深有体会的。 前两天在整理自己的书柜时,又翻到了这本曾经让自己彻夜挑灯夜读的书——《梦断代码》,回忆起当时自己第一次阅读到本书的时候的心情,当时是多么的激动和感慨。 花费了那么多的时间和经历,人力、财力及物力,换到的却是最终的失败,让人甚是惋惜和同情。想想发生在自己身边的事情,何尝不是如此的,虽然不如书中主人翁那样的花费,但是作为个人而言,有些事情的失败就已经可以是致命的了。 在整理书柜的时候,我又把这本书放到我们的书桌上,这几天又花了一点时...
>> 阅读全文
|
|
博文视点(北京) |
7145 |
2009-6-4 |
|
设备绑定的内核API之一 进行过滤的最主要的方法是对一个设备对象(Device Object)进行绑定。读者可以想象,Windows系统之所以可以运作,是因为Windows中已经存在许多提供了各种功能的设备对象。这些设备对象接收请求,并完成实际硬件的功能。我们可以首先认为:一个真实的设备对应一个设备对象(虽然实际对应关系可能复杂得多)。通过编程可以生成一个虚拟的设备对象,并“绑定”(Attach)在一个真实的设备上。一旦绑定,则本来操作系统发送给真实设备的请求,就会首先发送到这个虚拟设备。 下面结合代码进行讲解。读者可能希望编译执行这些代码,驱动的初学者请先阅读本书第1章,以便学会如何安装开发环境、编译代码和调试程序。 在WDK中,有多个内核API能实现绑定功能。下面是其中一个函数的原型:NTSTATUS IoAttachDevice( >> 阅读全文
|
|
博文视点(北京) |
1427 |
2009-6-3 |
|
无处不在的内核模块 位于高2G空间内的操作系统内核,并非做死的一个巨大程序。因为计算机硬件种类繁多,不可能做出一个能支持所有硬件的巨大内核。 内核是有接口的,微软提供规定的格式,让硬件驱动的编程人员,能按照规定的格式编写“驱动程序”。这些驱动程序能够作为模块加载到内核中,成为内核的一部分,这样内核只要简单地安装驱动程序,就可以适应各种不同的硬件了。 本书中的大部分例子都是编译成内核模块的,实际上也可以称为驱动程序(Driver)。但是它们大部分并不驱动任何硬件,有人称之为“软件驱动”。但是笔者认为这不够贴切,所以本书使用Linux程序员们的叫法,称之为内核模块(Kernel module)。也许这样要更贴切一些,驱动程序可以看成内核模块的一种(少量的应用层驱动程序除外)。 内核模块...
>> 阅读全文
|
|
博文视点(北京) |
595 |
2009-6-3 |
|
编写程序也需要在实战中成长本文摘自青软实训《在实战中成长》丛 书 序 前几天,应青软实训技术研发中心老师的邀请为青软实训《在实战中成长》丛书写序,让我想起了三年前的这个时候。当时,为了更好地解决大学生的动手实践能力与企业需求之间存在差距的问题,在相关政府、高校、软件企业等各方的协助及大力支持下,成立了青软实训。 现在,从青软实训走出的学员遍布了北京、上海、大连、青岛等全国各地的软件企业,我和我的同仁在体会到快乐的同时,也感受到了深深的责任感。我们发现,虽然学员在实训中学习的时间只有短短的几个月,但我们带给学员的技术课程、对学员进行的综合素养的训练、与学员的沟通交流以及指导学员完成的项目等都有会对他们今后的职业发展产生影响。 正是基于这样的责任感,才让我们不断地思考,通过什么样的方式才能让作为初学者的学员学好软件开发技术。青软实训的讲师都是...
>> 阅读全文
|
|
博文视点(北京) |
2160 |
2009-6-2 |
|
帮助中没有的函数 并不是所有可以调用的函数都已经列举在帮助里。比较典型的是C运行时库中的stdlib.h、stdio.h和memory.h三个头文件里有很多函数实际上是可以使用的。但是也并非全部,比如printf、scanf及fopen、fclose、fwrite、fread这些函数就不行。因为在内核里显然没有控制台,而且读/写文件也不是那么轻松,要顾及到很多运行环境相关的问题。但是sprintf、strlen、strcpy、wcslen、wcscpy、memcpy、memset都是可以的,相应的,malloc、free、strdup都是不行的。 基本上可以认为,大家常用的C运行时库中的函数,如果只涉及字符串和内存数据(而不涉及内存管理,比如内存的分配和释放),则是可以在内核程序里调用的。但是MS并不提倡这样做。 如果这些函数涉及内存管理、文件操作、网络操作、线程等,则往往在头文件中虽然有这个函数存在,甚至编译都能通过,但是连接却会...
>> 阅读全文
|
|
博文视点(北京) |
697 |
2009-6-2 |
|
1.3.3 设置Vista调试执行 下面是Vista的情况。Vista已经不再使用boot.ini文件了,而是在Vista启动之后,打开控制台(在“运行”中输入cmd并按回车键),首先输入:bcdedit /? 会显示一段眼花缭乱的帮助文字,不管能看懂多少,请先了解一下。然后我们需要列举出现在本机上所有“操作系统加载器”的情况,请输入:bcdedit /enum OSLOADER 如果是刚刚安装的Vista,一般只有一个标识为{current}的OSLOADER,这就是当前的启动配置。现在所需要的是建立一个新的启动配置,从完全空白开始建立非常麻烦,拷贝一个是一个简单的方案。bcdedit /copy {current} /d "Windows Vista Copy" 拷贝之后会提示已经建立了一个新的配置。新配置标识非常长,是一个GUID字符串。要设置新的配置简直...
>> 阅读全文
|
|
博文视点(北京) |
24238 |
2009-6-1 |
|
下载安装WDK 就像应用程序使用开发包SDK一样,内核编程使用“Windows Driver Kit”,简称WDK。WDK已经自带所有需要的头文件、库、C/C++语言及汇编语言的编译器与连接器,所以完全可以在不安装Visual Studio的情况下进行编程。只是工程管理会不太方便,读者可以使用记事本或者自己喜欢的其他文本编辑器进行编程。习惯使用Visual Studio的读者会感觉这很酷,因为只有传说中的骨灰级程序员才使用记事本编程。 建议读者下载一个能显示行号的文本编辑器。以便出现编译错误时能迅速找到错误。Linux爱好者当然可以直接用vim。 有些读者可能听说过DDK或者IFSDDK,但是那已经是历史了,请遗忘它。同时下面的描述也可能成为历史,所以请读者进入主页后应该随机应变。首先请打开网页:https://connect.microsoft.com/default.aspx >> 阅读全文
|