随着linux内核版本的升级,内核的功能越来越强大,体系结构也越来越复杂。由于嵌入式系统存储空间的限制,用户必须根据需要,对内核进行精简,定制一个符合嵌入式系统。
的操作平台。linux是一个移植性非常好的操作系统,它广泛地支持许多不同体系结构的cpu。嵌入式系统是“硬件可裁剪”的,因此工程师们设计的硬件电路会有不同,从而同一个linux内核在不同硬件电路上可能无法正确运行(比如内核解压的地址不同),所以必须结合自己的硬件电路,对已有的内核**进行剪裁移植。
linux源**可在开源社区或mlzi公司的官方****,包含最基本的驱动,……是个可以运行的系统。移植好操作系统后,应用程序的编写就十分方便了。内核剪裁主要是指对linux内核源**的重新配置,以满足一定设计的要求,去掉相对于设计所需的冗余**。
重新配置后将得到一个精简的linux内核,这对存储空间有限的嵌入式系统而言是很必要的。
为了正确合理地设置内核编译配置选项,从而只编译系统需要的功能的**,一般主要。
从下面四个进行考虑:自己定制编译的内核运行更快(具有更少的**);系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中);不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞;将某种功能编译为模块方式会比编译到内核中的方式速度要慢一些。
具体的精简裁剪过程各不相同,但是基本上遵循下面的步骤:内核配置、生成新内核和重新装载内核。 1.内核配置内核配置是最重要和最烦琐的过程,需要用户量体裁衣似地选择所需要的模块和功能,配置合适的参数。
首先进入/usr/src/1inux目录,运行makemenuconfig,进入内核配置菜单。在保留进程调度、内存管理等基本功能的基础上,对其他的内核组件进行剪裁,具体剪裁的组件包括:文件系统,如smbfs、minix、msdos、umsdos、nfs等linux支持的文件系统;网络协议,如tcp/ip、ipx;字符设备驱动程序;块设备驱动程序;各种网络设备部件,如ne2000;scsi设备部件;isdn设备部件;sound设备部件。
根据需要对上述组件中的选项进行选择,然后保存设置。
2.生成新内核。
依次运行makedep、makeclean、makebzlmage、makemodule、makemodule—install等命令,最后生成的bzlmage就是经过裁剪后得到的新内核映像。
3.重新装载内核。
将生成后的新内核映像bzlmage移植到/boot目录下,重新编写启动配置文件(如随内。
核版本不同文件有所差别,如/etc目录下的lilo.conf文件或/grub目录下的grub.conf文件),然后重新启动,新内核就会代替原来的内核,起到linux内核的作用。
超级终端是一个包含在windows中的通信应用程序,用它可以通过**线和调制解调器(或局域网)登录到其他计算机上。超级终端的重要特征在于:
(1)可以根据基本规则为所登录的主机创建拨号设置。
(2)可以模拟通用终端,包括ansi、tty、vt52和vtl00。
(3)可以使用xnlodem、ymodem、zmodem和kerrnit等二进制传输协议来传送文件。
(4)使用简便,不需关心通信设置。它和调制解调器一起工作,自动地“感知”波特率、停止位、奇偶校验和其他比较易于混淆的设置。
第一次启动超级终端时,出现连接说明对话框,在名称域中输入想与其连接的名字,如。
sune450,然后在图标域中选择一个表示它的图标。点击确定按钮,出现**号码对话框,依次输入国家**、区号和**号码,并选择连接使用的modem,确定后出现连接对话框。
要和一台远程主机连接,双击超级终端中预先设置好的对象,出现正在连接提示框,紧跟着会听到modem的拨号音、连接音。当连接成功后,会看到初始登录屏幕。键入用户名和口令可获得对主机的访问权,一般远程主机都采用unix系统,联机后可输入umx命令或按照屏幕提示进行操作。
下面是在联机时可能用到的其他操作:
1)可用超级终端滚动条向上移动来查看已看过的文本。
2)点击菜单栏中的查看/字体选项可改变超级终端窗口中的文本字体。
3)点击菜单栏中的拨入/断开选项可取消连接。注意应先取消登录,这样可以节省联费用。
4)点击菜单栏中的传送/捕获到打印机选项可打印屏幕上滚动的文本。
超级终端还可以用来发送和接收文件。如果要发送一个文件,只需在联机成功后点击菜单栏中的传送/发送文件选项。在发送文件对话框中键入一个文件名,或点击浏览按钮来搜索这个文件,在协议域中,选一个适合于所用联机服务的协议。
如果需接收文件,则点击菜单栏中的传送/接收文件选项,出现接收文件对话框,在上面的域中选择存放文件的文件夹,在下面的域中键入协议,点击接收按钮即开始文件的传送过程。图8—7显示了正在从远端主机上卸载一个zmodem文件,窗口中列出了卸载的状态,以便能监视流通量及其他信息。
使用联机服务时,如想把屏幕上滚过的文本捕获到本地计算机的文件中以便日后随时查。
看,可点击菜单栏中的传送/捕获文字选项打开对话框。在文件域中键入文件名并点击开始按钮即可开始捕获文本。在捕获过程中,可选择菜单项来暂停或停止正在捕获的文本。
如果想发送一个在联机之前已创建好的文本文件,可点击菜单栏中的传送/发送文本文件选项,这时将会看到一个标准的类似于打开文件对话框的发送文本文件对话框,选择想要上传的文本文件即可。
最后还需说明的是,这种终端**方式所能实现的internet服务比较有限,所以大多数用户更愿意使用ppp方式。
文件操作概述标准i/0库以及其他的头文件提供了一个到底层i/0系统调用的万能接口,这个库并不是ansi标准c的一部分,但是这个库却提供了许多复杂的函数用来处理格式化输出以及描述输入,同时也会小心地处理设备所要求的缓冲区。 在许多方式上,可以用使用低层文件描述符的方法来使用这个系统,需要打开文件建立访问路径时,会返回一个值,并会作为一个调用其他i/0库函数的参数。这个与低层文件描述符等同的被称之类流(stream),并且是作为一个指阳结构的指针file*来实现的。
当一个程序启动时会自动打开3个文件:stdin、stdout、stderr。这些是在 中定义的,分别代表标准输入、标准输出和标准错误输出。
棚刈的,它们分别与低层的文件描述符相对应。
1.fopen fopen库函数是低层的open系统调用的模拟,主要将它用于文件或者终端输入与输出。然而在需要显示的控制设备的地方,最好是使用低层的系统调用。因为它们可以消除由库所造成的潜在的不良因素,如输入/输出缓冲区。
fopen打开由 filename参数所指定的文件,并建立一个与其相关的流。mode参数指出如何来打开这个文件,它可以是下列字符串中的一个。 r或rb:
以只读方式打开。 w或wb:以只写方式打开。
a或ab:以读方式打开,添加到文件的结尾处。 r+或rb+或r+b:
打开更新(读和写)。 w+或wb+或w+b:打开更新,将其长度变为零。
a+或ab+或a+b:打开更新,添加到文件结尾处。 b表明这个文件是二进制文件而不是文本文件。
如果函数调用成功,fopen会返回一个非空的文件指针。如果失败,它会返回null,这是在中定义的。 2.fread fread库函数可以用来从一个文件流中读取数据。
由stream流中读取的数据将会放在由prt所指定的数据缓冲区中。fread和fwrite都处理数据记录。这些是由块的尺寸 size,读取的次数nitems来指定要传送的记录块的。
如果成功则返回值为实际读入到数据缓冲区中的块数,而不是字节数。 在文件的结尾处,也许会返回少于nitems的值,包括零。与所有要写入到缓冲区中的标准110函数一样,程序员要负责分配数据空间以及检查错误。
3.fwrite fwrite调用一个与fread类似的函数接口,它将会从指定的数据ⅸ读取数据记录并写入到输出流中。它的返回值为成功写入的记录数。4.fclose fclose库函数关闭指定的文件流,并将所有未写入的数据写入文件中。
使用fclose是相当重要的,因为stdio库会缓存数据。如果}呈序需要确定已经完整地写入了所有的数据,这时就应调用fclose。 然而,当一个程序正常结束时,fclose就自动调用,从而关闭所有仍然打开的文件流。
当然,在这样的情况下,用户就没有机会检查由fclose报甜的错误。与文件描述符所有的限制一样,可用的流数据也是有限制的。实际的限制足fopen_max,这足和中定义的,而且至少为8个。
5.mkdir可以使用mkdir和rmdir来创建和移除目录。其语法如下: mkdir系统调用可以用来创建目录,这是mkdir程序相等同的。
mkdir以path为名字创建一个新的目录。目录的权限是由参数mode来指定的,这也与open系统调用中的0_ creat的选项是一样的,而且这也要受到umask的影响。
分支结构其实就是选择结构,程序的三大控制结构为:顺序结构、循环结构、选择结构。
顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。
分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。
例1:使用swp指令对信号量xh进行操作。
xhequ 0x40402020
area test,code,readonly
entrystart
ldr r0,=xh
loopmov r1,#
swp r1,r1,[r0]
cmp r1,#
beq loopbend
指针是c语言中被广泛使用的一种数据类型,大量使用指针也是c语言的编程风格之一。指针可以用于各种变量,如整型指针、字符串指针、结构指针等,它被定义为指向某个内存地址的变量。
9.1指针的概念要了解指针的概念,首先要理解计算机存储器的基本原理。在程序运行过程中,数据是存储在内存中的。
内存被划分成为一个个的存储单元,这些单元的基本单位是字节。c语言中不同的数据类型占据不同大小的内存空间。例如,整型数据占用2个字节,而字符型数据占用1个字节等。
为方便对这些存储单元的访问,给这些内存单元分配了地址。每个内存单元都分配唯一的地址。
嵌入式作业
电力设备测控系统中的总线通讯协议实现。程俊 200910302013 一 程序实现的功能 嵌入式系统作为测控系统主机,依次每隔30秒获取设备数据,发送给各个传感器。1 程序实现是通个定义的一个数组,然后数组中分别放入 起始标记aa 设备类型 设备编号 数据发送请求55 校验位这里采用求和校验,而将第...
嵌入式作业
专业 电子信息工程班级 电信10 1 任课教师 姓名 学号成绩。题目 查阅相关资料,你认为选用哪一种硬件 芯片 和软件比较适合本专业的要求?为什么?答 个人觉得选用三星的6410芯片更适合本专业的要求,6410对比与2440不会更容易被淘汰,而且现在6410有很多开发板可以供我们自学,比如飞凌的ok...
嵌入式作业
include 基本系统数据类型。include 提供socket函数及数据结构。include 标准输入输出。include 标准库。include 提供错误号errno的定义,用于错误处理。include 字符串函数定义。include read函数 write函数和getpid函数等头文件。i...