当前位置:文档之家› 嵌入式Linux系统的搭建与配置过程

嵌入式Linux系统的搭建与配置过程

嵌入式Linux系统的搭建与配置过程
嵌入式Linux系统的搭建与配置过程

1.摘要 (2)

2.UBOOT,LINUX内核,文件系统的介绍及相互关系..3 2.1嵌入式系统简介 (3)

2.2嵌入式Linux概述 (3)

2.3UBOOT简介 (4)

3.UBOOT的启动过程 (6)

4.内核的主要功能和裁剪 (7)

4.1Linux的编译 (7)

4.2嵌入式Linux的配置和剪裁 (8)

5.文件系统的制作过程 (8)

6.交叉编译器的搭建和环境变量的设置 (9)

7.驱动程序的编写过程与关键点 (11)

7.1Linux网络驱动程序的结构 (11)

7.2网络驱动程序的基本方法 (12)

7.3网络驱动程序中用到的数据结构 (12)

7.4常用的系统支持 (14)

7.5编写Linux网络驱动程序中需要注意的问题 (18)

8.参考文献 (20)

嵌入式系统是以应用为中心,以计算机为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序4部分组成,用于实现对其它设备的控制、监视或管理等功能。其广泛应用于控制领域、消费电子产品等行业,已成为现代电子领域的重要研究方向之一。嵌入式Linux的研究已经成为当前信息技术研究的热点,它的应用蕴含着巨大的商业价值,并且己经广泛的应用于各种信息家电、通讯产品、工业控制中。论文首先介绍了ARM和嵌入式Linux操作系统的特点和当前的发展概况。然后阐述了嵌入式Linux 开发流程以及移植到具体硬件平台需要完成的工作,如U-Boot的移植、Linux内核的编译与裁剪、文件系统的制作、驱动程序的编写等。

关键字:嵌入式;ARM;嵌入式Linux;Linux内核;驱动程序

2.LINUX,UBOOT,文件系统的介绍及相互关系

2.1嵌入式系统简介

嵌入式系统是以应用为中心,以计算机为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。单片机、单板机控制系统以及一些专用的工业控制计算机都可以称作嵌入式系统,它是嵌入式系统领域的重要组成部分,只是更着重于对各自硬件系统的研究。嵌入式系统更着重于对软件系统进行研究,顺应了软硬件协同设计以及应用需求的发展。目前,嵌入式系统己逐步发展成为一门学科,朝着系统化和规范化的方面发展。嵌入式系统学科和产业的发展使得设计人员能够从容地面对越来越复杂的应用需求,通过软件和硬件的模块化设计大大地简化和加快应用系统的开发.嵌入式系统主要包括硬件和软件两部分。硬件包括处理器、存储器及外部设备、I/0端口和图形控制器等;软件部分包括操作系统(OS)和用户应用程序。嵌入式系统硬件的核心是嵌入式微处理器。它的功能、外设集成度、速度、功耗、体积、成本、可靠性和电磁兼容性等方面均受到应用要求的制约,是各个半导体厂商之间竞争的热点。嵌入式系统的软件是实现嵌入式系统功能的关键,软件要求固化存储,代码的高质量、高可靠性和高实时性在许多场合也是基本要求。多任务嵌入式操作系统是知识集成的平台,是嵌入式系统走向工业标准化道路的基础,是嵌入式系统研究的重要方向。现在人们讲嵌入式系统时,某种程度上是指近些年来比较热门的具有操作系统的嵌入式系统。

2.2嵌入式Linux概述

Linux操作系统源于芬兰一位大学生—LinusTorvalds的课余作品,随着Intemet

的发展,Linux操作系统在全球计算机爱好者的关怀下,不断地发展和成长,己成为当前最流行的免费操作系统,任何人都可以自由的使用Linux源程序。嵌入式Linux操作系统的组成,我们可以和PC机相对应来理解,在PC机上,Windows 的启动大致有BIOS、内核、文件系统和初始化程序几个部分;那么相对而言,嵌入式Linux的移植有Bootloader、Linux内核、文件系统、初始化和用户的应用程序几部分,Bootloader完成系统的初始化和引导。

Linux操作系统具有以下几大特点:

(1)开放源码,丰富的软件资源

Linux遵循GPL(GNU通用许可证),用法律保障了用户免费获得内核源代码的权利。由于嵌入式系统千差万别,往往需要针对某一具体应用去修改和优化系统,这样,能否获得源代码就至关重要。Linux是自由的操作系统,它的开放源代码使用户获得了最大的自由度。Linux上的软件资源十分丰富,每种通用程序在Linux上都可以找到,并且每天都在增加。在Linux上往往不需要从头做起,而是先选择一个类似的自由软件,进行二次开发。这就大大节省了开发工作量,缩短了开发时间。

(2)功能强大的内核,性能高效、稳定、多任务

Linux的内核非常稳定。它的高效和稳定性已经在各个领域,尤其在网络服务器领域得到了事实的验证,而且Linux内核小巧灵活,易于裁剪。这使Linux能很适合嵌入式系统的应用。

(3)支持多种体系结构

Linux能支持X86,ARM,MIPS,POWERP,ALPHA,SPARC等多种体系结构。目前,Linux己被移植到数十种硬件平台上,几乎所有流行的CPU,Linux都支持。

(4)完善的网络通信、图形和文件管理机制

Linux自产生之日起就与网络密不可分,网络是Linux的强项。另外,它支持ext2,fatl6,fat32,romfs等多种文件操作系统。在图形系统方面,Linux上既有成熟的xWindow,也有embedcd QT,MiniGUI等嵌入式图形用户界面GUI,还有ysvgalib,framebuffer等优秀工具,可以适合不同的用途。

(5)支持大量的周边硬件设备,驱动丰富

Linux上的驱动己经非常丰富了,支持各种主流硬件设备和最新硬件技术,而且随着Linux的广泛应用,许多芯片厂家也已经开始提供Linux上的驱动。这一步促进了Linux各种硬件平台上的应用。

(6)大小功能都可定制

Linux继承了Unix的优秀设计思想,内核与用户界面是完全独立的。它非常灵活,各部分的可定制性都很强,能适合多种需求。

2.3UBOOT简介

U—Boot是一个非常复杂的东酉,它也体现了嵌入式系统的一个非常重要的特征:自己定制。它脱胎于PC机的Linux,可从网站上直接下载,U.Boot和其它任何BOOTLOADER都是一样的,主要实现对系统进行初始化、系统引导、FLASH操作等功能。开发平台的U.Boot主要是对板子的硬件进行初始化,包括:时钟和PLL、定时器、调试串D(DebugDART)等等。有了U.B00t我们可以在主机的超级终端通过调试串口和目标机进行通信和设置。

2.3.1编译U-Boot

在Linux系统下,用下面的命令对U.Boot进行编译

$cdU.BOOT;进入目录

Smakeat91rm9200dk_eonfig;编译

Smakeall

$gzip_cu-boot.bin>u-boot.gz;压缩为gz文件

编译boot.bin

$cdBoot

Smake

编译loader.bin

$cdLoader

Smake

2.3.2U.Boot命令

在本系统中,采用的是U-Boot,U-Boot在嵌入式系统中相当于Pc机的BIOS加上操作系统引导头部的内容,并且引导操作系统进行装载和运行,U.Boot启动后有一系列的命令,使得我们能够方便的对FLASH、RAM进行操作,U.Boot 已经对系统的频率、定时器进行了设置,初始化了一个调试串口,我们可以通过串口或者以太网进行数据的下载。下面是U.Boot常用的命令:

go一在地址’addr’处开始程序执行

run一运行命令

bootm一从内存中进行应用程序影像运行

bootp一通过网络用BootP/TFTP协议来启动影像

tf砸boot一通过网络用TFTP协议、设置服务器和客户机的IP地址进行影像文件传送

loadb一通过串口线(kermitmode)来装载二进制文件

pfintcnv一打印环境变量.

setcnv一设置环境变量

saveenv一保存环境变量到内存

下面是U.Boot的简单环境变量

baudrate一波特率

bootdelay--Boot延迟

bootcmd--Boot命令

bootargs—Boot参数

ipaddr一客户机IP地址

servefip一服务器地址

loadaddr一装载地址

etlladdr一网卡MAC地址

3.UBOOT的启动过程

嵌入式Linux系统一般没有自举程序,必须通过启动程序来引导硬件系统进入操作系统。启动程序的工作包括:改变系统时钟、关闭WATCHDOG、初始化存储控制器等。本文针对本嵌入式控制系统所需的硬件方案,植入Uboot1-3.4启动程序。U-Boot是一种功能强大的引导转载程序。它不仅支持Linux、Vxworks等操作系统,还支持PowerPC、ARM等多种系列处理器。Uboot启动过程分为两个阶段。第一阶段由汇编来实现,用于完成依赖于CPU体系结构的初始化,并调用第二阶段的代码。第二阶段由C语言实现,完成相关初始化后,进入命令循环以等待用户命令,或将参数传给内核,引导Linux内核启动。图中给出了Uboot的启动流程。

Uboot-1.3.4中对at91rm9200dk系列的开发板有很好的支持,只需做少量修改即可使用。但是在目前U-Boot-1.3.4引导系统中,不能识别本论文中采用的8MB NOR Flash(SPANSION公司的S29GL064N90TFI04)和1GB NAND Flash (SAMSUNG公司的K9K8G08U0A)两款芯片,需要自行移植。

4.Linux的编译,内核配置和裁剪

4.1Linux的编译

在配置内核前的须做必要的设置,主要在内核原码中设置文件Makefile,用下列指令打开Makefile文件:$viMakefile

在Makefile中主要设置两个地方:ARCH CROSSCOMPILE。

ARCH:=arm;表示目标板为arm。CROSS COMPILE=交叉编译工具的地址;设置交叉编译工具的地址,例如CRoSSCOMPILE=lusr/10cal/arm/2.95.3、birdarm.1inux。还要在脚本文件mkimage中把路径改为9200/bootldr/

u-boot-1.0.O/tools。(具体的路径和你的u-boot放的位置有关)然后按如下命令顺序进行内核编译即可:

内核配置:

Smake menuconfig或makcxeon!ig

内核编译:

Smaketiean$make dep$make$./mkimage;运行mkimage脚本文件4.2嵌入式Linux的配置和剪裁

在Linux下,用makemenuconfig或makexeontig进入配置界面。在内核配置中,一般有四种选择:Y(选择)、N(不选)、M(模块)和数字,用户可以根据剪裁需要进行设置,最后配置完毕,选择是否对配置结果进行保存?保存为.eonfig文件。

5.嵌入式Linux文件系统的制作过程

嵌入式系统可以使用硬盘和光盘,但是这与嵌入式系统的便携式特性相违背,所以一般采用Flash作为存储介质。和硬盘相比,Flash有自己独特的物理特性,所以必须使用专门的文件系统。嵌入式系统对文件的操作是通过层次结构实现的。对于用户程序来说,文件是有结构的文件,用户程序通过文件I/O函数操作文件。嵌入式文件系统是嵌入式系统的一部分,它的任务是对逻辑文件进行管理,其工作包括提供对逻辑文件的操作(复制、删除、修改等)接口,方便用户操作文件和目录。在文件系统的内部,又根据存储设备的特点,适用不同的文件组织模式来实现文件的逻辑结构,比如磁带终使用的顺序文件以及大多数操作系统适用的树状文件。此外,文件系统要对管理文件的安全性负责。目前支持闪存的文件系统技术有以下几种:

eJFFS2和Yaffs。这些文件系统可以使用在没有初始化的NANDFlash和有CFI

接口的NORFlash中。eTrueFFS,该文件系统相当于Linux中的MTD层,必须配合其他文件系统。eFTL/NTFL,它是一种中间层解决方案的统称,为上层文件系统提供接口。eRAMFS、CRAMFS和ROMFS,这些文件系统用于早期的小容量闪存设备,系统

功能比较简单,仅提供基本接口,只属于只读的闪存文件系统。适合存储空间小的系统。可按照如下步骤制作自己的文件系统:

解开压缩的文件系统:

$gamzipramdisk.gz

文件系统挂载:

$mount_oloopramdisk/mnt/nweramdisk(注:newramdisk是新建的目录)。

进入newramdisk目录进行操作,随意的增减文件:

Sod/nmt/newramdisk(注:进入目录后敲入命令随意的增减文件)

退出newramdisk目录后御载文件系统:

Sumount/mnt/newramdisic

压缩文件系统,生成新的文件系统映象:

$gzip-c-、,9ramdisk>./newramdisk

6.Linux中交叉编译器的搭建和环境变量的设置

1.安装标准的C开发环境,由于Linux安装默认是不安装的,所以需要先安装一下(如果已经安装好的话,就可以免去这一步了):

#sudo apt-get install gcc g++libgcc1libg++make gdb

2.下载arm-linux-gcc-

3.

4.1.tar.bz2到任意的目录下。

3.解压arm-linux-gcc-3.

4.1.tar.bz2

#tar-jxvf arm-linux-gcc-3.4.1.tar.bz2

解压过程需要一段时间,解压后的文件形成了usr/local/文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下

#cd usr/local/

#cp-rv arm/usr/local/

现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面。

4.修改环境变量,把交叉编译器的路径加入到PATH。

方法一:修改/etc/bash.bashrc文件

#vim/etc/bash.bashrc

在最后加上:

export PATH=$PATH:/usr/local/arm/3.4.1/bin

export PATH

方法二:修改/etc/profile文件:

#vim/etc/profile

增加路径设置,在末尾添加如下,保存/etc/profile文件:

export PATH=$PATH:/usr/local/arm/3.4.1/bin

方法三:#export PATH=$PATH:/usr/local/arm/3.4.1/bin

注:(这只能在当前的终端下才是有效的!)

5.立即使新的环境变量生效,不用重启电脑:

对应方法一:#source/root/.bashrc

对应方法二:#source/etc/profile

6.检查是否将路径加入到PATH:

#echo$PATH

显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成。

7.测试是否安装成功

#arm-linux-gcc-v

上面的命令会显示arm-linux-gcc信息和版本:

Reading specs from/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/specs Configured with

:/work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-

3.4.1/configure--target=arm-linux--host=i686-host_pc-linux-gnu

--prefix=/usr/local/arm/3.4.1--with-headers=/usr/local/arm/3.4.1/arm

-linux/include--with-local-prefix=/usr/local/arm/3.4.1/arm-linux--disable

-nls--enable-threads=posix--enable-symvers=gnu--enable-__cxa_atexit --enable-languages=c,c++--enable-shared--enable-c99--enable-long-long Thread model:posix

gcc version3.4.1

8.编译Hello World程序,测试交叉工具链

写下下面的Hello World程序,保存为hello.c

#include

int main()

{

printf("Hello World!/n");

return0;

}

执行下面的命令:

#arm-linux-gcc-o hello hello.c

-------------------------------------------------------------

修改环境变量这一步修改/etc/profile文件

在path中添加arm-linux-gcc路径

if["`id-u`"-eq0];then

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/arm /3.4.1/bin"

else

PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"

fi

再source/etc/profile就可以刷新环境变量

7.驱动程序的编写过程与关键点

7.1Linux网络驱动程序的结构

所有的Linux网络驱动程序遵循通用的接口。设计时采用的是面向对象的方法。一个设备就是一个对象(device结构),它内部有自己的数据和方法。每一个设备的方法被调用时的第一个参数都是这个设备对象本身。这样这个方法就可以存取自身的数据(类似面向对象程序设计时的this引用)。一个网络设备最基本的方法有初始化、发送和接收。

|deliver packets||receive packets queue|

|(dev_queue_xmit())||them(netif_rx())|

----------------------------------------

|methods and variables(initialize,open,close,hard_xmit,|

|interrupt handler,config,resources,status...)

-------------------------------------------------------

|| ----------------------

|send to hardware||receivce from hardware|

-----------------------------------------------------

|hardware media|

-----------------------------------------------------

初始化程序完成硬件的初始化、device中变量的初始化和系统资源的申请。发送程序是在驱动程序的上层协议层有数据要发送时自动调用的。一般驱动程序中不对发送数据进行缓存,而是直接使用硬件的发送功能把数据发送出去。接收数

据一般是通过硬件中断来通知的。在中断处理程序里,把硬件帧信息填入一个skbuff结构中,然后调用netif_rx()传递给上层处理。

7.2网络驱动程序的基本方法

网络设备做为一个对象,提供一些方法供系统访问。正是这些有统一接口的方法,掩蔽了硬件的具体细节,让系统对各种网络设备的访问都采用统一的形式,做到硬件无关性。下面是最基本的方法。

(1)初始化(initialize)(2)打开(open)(3)关闭(stop)

(4)发送(hard_start_xmit)(5)接收(reception)(6)硬件帧头(hard_header)(7)地址解析(xarp)

(8)参数设置和统计数据

7.3网络驱动程序中用到的数据结构

最重要的是网络设备的数据结构。定义在include/linux/netdevice.h里。

7.4常用的系统支持

7.4.1内存申请和释放

include/linux/kernel.h里声明了kmalloc()和kfree()。用于在内核模式下申请和释放内存。

Void*kmalloc(unsigned int len,int priority);

void kfree(void*__ptr);

与用户模式下的malloc()不同,kmalloc()申请空间有大小限制。长度是2的整次方。可以申请的最大长度也有限制。另外kmalloc()有priority参数,通常使用时可以为GFP_KERNEL,如果在中断里调用用GFP_ATOMIC参数,因为使用GFP_KERNEL则调用者可能进入sleep状态,在处理中断时是不允许的。Kfree()释放的内存必须是kmalloc()申请的。如果知道内存的大小,也可以用kfree_s()释放。

7.4.2request_irq()、free_irq()

这是驱动程序申请中断和释放中断的调用。在include/linux/sched.h里声明。Request_irq()调用的定义:

int request_irq(unsigned int irq,

void(*handler)(int irq,void*dev_id,struct pt_regs*regs),

unsigned long irqflags,

const char*devname,

void*dev_id);

irq是要申请的硬件中断号。在Intel平台,范围0--15。Handler是向系统登记的中断处理函数。这是一个回调函数,中断发生时,系统调用这个函数,传入的参数包括硬件中断号,device id,寄存器值。Dev_id就是下面的request_irq时传递给系统的参数dev_id。Irqflags是中断处理的一些属性。比较重要的有SA_INTERRUPT,标明中断处理程序是快速处理程序(设置SA_INTERRUPT)还是慢速处理程序(不设置SA_INTERRUPT)。快速处理程序被调用时屏蔽所有中断。慢速处理程序不屏蔽。还有一个SA_SHIRQ属性,设置了以后运行多个设

备共享中断。Dev_id在中断共享时会用到。一般设置为这个设备的device结构本身或者NULL。中断处理程序可以用dev_id找到相应的控制这个中断的设备,或者用irq2dev_map找到中断对应的设备。

Void free_irq(unsigned int irq,void*dev_id);

7.4.3时钟

时钟的处理类似中断,也是登记一个时间处理函数,在预定的时间过后,系统会调用这个函数。在include/linux/timer.h里声明。

Struct timer_list{

struct timer_list*next;

struct timer_list*prev;

unsigned long expires;

unsigned long data;

void(*function)(unsigned long);

};

void add_timer(struct timer_list*timer);

int del_timer(struct timer_list*timer);

void init_timer(struct timer_list*timer);

使用时钟,先声明一个timer_list结构,调用init_timer对它进行初始化。Time_list 结构里expires是标明这个时钟的周期,单位采用jiffies的单位。Jiffies是Linux 一个全局变量,代表时间。它的单位随硬件平台的不同而不同。系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目。这样jiffies的单位就是1/HZ。Intel平台jiffies的单位是1/100秒,这就是系统所能分辨的最小时间间隔了。所以expires/HZ就是以秒为单位的这个时钟的周期。Function就是时间到了以后的回调函数,它的参数就是timer_list中的data。Data这个参数在初始化时钟的时候赋值,一般赋给它设备的device结构指针。在预置时间到系统调用function,同时系统把这个time_list从定时队列里清除。所以如果需要一直使用定时函数,要在function里再次调用add_timer()把这个timer_list加进定时队列。

7.4.4I/O

I/O端口的存取使用:

inline unsigned int inb(unsigned short port);

inline unsigned int inb_p(unsigned short port);

inline void outb(char value,unsigned short port);

inline void outb_p(char value,unsigned short port);

在include/adm/io.h里定义。Inb_p()、outb_p()与inb()、outb_p()的不同在于前者在存取I/O时有等待(pause)一适应慢速的I/O设备。为了防止存取I/O时发生冲突,Linux提供对端口使用情况的控制。在使用端口之前,可以检查需要的I/O 是否正在被使用,如果没有,则把端口标记为正在使用,使用完后再释放。系统提供以下几个函数做这些工作。

Int check_region(unsigned int from,unsigned int extent);

void request_region(unsigned int from,unsigned int extent,const char *name);

void release_region(unsigned int from,unsigned int extent);

其中的参数from表示用到的I/O端口的起始地址,extent标明从from开始的端口数目。Name为设备名称。

7.4.5中断打开关闭

系统提供给驱动程序开放和关闭响应中断的能力。是在include/asm/system.h中的两个定义。

#define cli()__asm____volatile__("cli"::)

#define sti()__asm____volatile__("sti"::)

7.4.6打印信息

类似普通程序里的printf(),驱动程序要输出信息使用printk()。在include /linux/kernel.h里声明。

Int printk(const char*fmt,...);

其中fmt是格式化字符串。...是参数。都是和printf()格式一样的。

7.4.7注册驱动程序

如果使用模块(module)方式加载驱动程序,需要在模块初始化时把设备注册到系统设备表里去。不再使用时,把设备从系统中卸除。定义在drivers/net/net_init.h 里的两个函数完成这个工作。

Int register_netdev(struct device*dev);

void unregister_netdev(struct device*dev);

dev就是要注册进系统的设备结构指针。在register_netdev()时,dev结构一般填写前面11项,即到init,后面的暂时可以不用初始化。最重要的是name指针和init方法。Name指针空(NULL)或者内容为'\0'或者name[0]为空格(space),则系统把你的设备做为以太网设备处理。以太网设备有统一的命名格式,ethX。对以太网这么特别对待大概和Linux的历史有关。Init方法一定要提供,register_netdev()会调用这个方法让你对硬件检测和设置。Register_netdev()返回0表示成功,非0不成功。

7.4.8sk_buff

Linux网络各层之间的数据传送都是通过sk_buff。Sk_buff提供一套管理缓冲区的方法,是Linux系统网络高效运行的关键。每个sk_buff包括一些控制方法和一块数据缓冲区。控制方法按功能分为两种类型。一种是控制整个buffer链的方法,另一种是控制数据缓冲区的方法。Sk_buff组织成双向链表的形式,根据网络应用的特点,对链表的操作主要是删除链表头的元素和添加到链表尾。Sk_buff 的控制

方法都很短小以尽量减少系统负荷。(translated from article written by Alan Cox)

常用的方法包括:

.alloc_skb()申请一个sk_buff并对它初始化。返回就是申请到的sk_buff。

.dev_alloc_skb()类似alloc_skb,在申请好缓冲区后,保留16字节的帧头空间。主要用在Ethernet驱动程序。

.kfree_skb()释放一个sk_buff。

.skb_clone()复制一个sk_buff,但不复制数据部分。

.skb_copy()完全复制一个sk_buff。

.skb_dequeue()从一个sk_buff链表里取出第一个元素。返回取出的sk_buff,如

果链表空则返回NULL。这是常用的一个操作。

.skb_queue_head()在一个sk_buff链表头放入一个元素。

.skb_queue_tail()在一个sk_buff链表尾放入一个元素。这也是常用的一个操作。网络数据的处理主要是对一个先进先出队列的管理,skb_queue_tail()和skb_dequeue()完成这个工作。

.skb_insert()在链表的某个元素前插入一个元素。

.skb_append()在链表的某个元素后插入一个元素。一些协议(如TCP)对没按顺序到达的数据进行重组时用到skb_insert()和skb_append()。

.skb_reserve()在一个申请好的sk_buff的缓冲区里保留一块空间。这个空间一般是用做下一层协议的头空间的。

.skb_put()在一个申请好的sk_buff的缓冲区里为数据保留一块空间。在alloc_skb以后,申请到的sk_buff的缓冲区都是处于空(free)状态,有一个tail指针指向free空间,实际上开始时tail就指向缓冲区头。Skb_reserve()在free空间里申请协议头空间,skb_put()申请数据空间。见下面的图。

.skb_push()把sk_buff缓冲区里数据空间往前移。即把Head room中的空间移一部分到Data area。

.skb_pull()把sk_buff缓冲区里Data area中的空间移一部分到Head room中。--------------------------------------------------

|Tail room(free)|

--------------------------------------------------

After alloc_skb()

--------------------------------------------------

|Head room|Tail room(free)|

--------------------------------------------------

After skb_reserve()

--------------------------------------------------

|Head room|Data area|Tail room(free)|

--------------------------------------------------

After skb_put()

--------------------------------------------------

|Head|skb_|Data|Tail room(free)|

|room|push|||

||Data area||

--------------------------------------------------

After skb_push()

--------------------------------------------------

|Head|skb_|Data area|Tail room(free)|

||pull|||

|Head room|||

After skb_pull()

7.5.编写Linux网络驱动程序中需要注意的问题

7.5.1中断共享

Linux系统运行几个设备共享同一个中断。需要共享的话,在申请的时候指明共享方式。系统提供的request_irq()调用的定义:

int request_irq(unsigned int irq,

void(*handler)(int irq,void*dev_id,struct pt_regs*regs),

unsigned long irqflags,

const char*devname,

void*dev_id);

如果共享中断,irqflags设置SA_SHIRQ属性,这样就允许别的设备申请同一个中断。需要注意所有用到这个中断的设备在调用request_irq()都必须设置这个属性。系统在回调每个中断处理程序时,可以用dev_id这个参数找到相应的设备。一般dev_id就设为device结构本身。系统处理共享中断是用各自的dev_id参数依次调用每一个中断处理程序。

7.5.2硬件发送忙时的处理

主CPU的处理能力一般比网络发送要快,所以经常会遇到系统有数据要发,但上一包数据网络设备还没发送完。因为在Linux里网络设备驱动程序一般不做数据缓存,不能发送的数据都是通知系统发送不成功,所以必须要有一个机制在硬件不忙时及时通知系统接着发送下面的数据。一般对发送忙的处理在前面设备的发送方法(hard_start_xmit)里已经描述过,即如果发送忙,置tbusy为1。处理完发送数据后,在发送结束中断里清tbusy,同时用mark_bh()调用通知系统继续发送。但在具体实现我的驱动程序时发现,这样的处理系统好象并不能及时地知道硬件已经空闲了,即在mark_bh()以后,系统要等一段时间才会接着发送。造成发送效率很低。2M线路只有10%不到的使用率。内核版本为2.0.35。我最后的实现是不把tbusy置1,让系统始终认为硬件空闲,但是报告发送不成功。系统会一直尝试重发。这样处理就运行正常了。但是遍循内核源码中的网络驱动程序,似乎没有这样处理的。不知道症结在哪里。

7.5.3流量控制(flow control)

网络数据的发送和接收都需要流量控制。这些控制是在系统里实现的,不需要驱动程序做工作。每个设备数据结构里都有一个参数dev->tx_queue_len,这个参数标明发送时最多缓存的数据包。在Linux系统里以太网设备(10/100Mbps)tx_queue_len一般设置为100,串行线路(异步串口)为10。实际上如果看源码可以知道,设置了dev->tx_queue_len并不是为缓存这些数据申请了空间。这个参数只是在收到协议层的数据包时判断发送队列里的数据是不是到了tx_queue_len的限度,以决定这一包数据加不加进发送队列。发送时另一个方面的流控是更高层协议的发送窗口(TCP协议里就有发送窗口)。达到了窗口大小,高层协议就不会再发送数据。接收流控也分两个层次。Netif_rx()缓存的数据包有限制。另外高层协议也会有一个最大的等待处理的数据量。发送和接收流控处理在net/core/dev.c的do_dev_queue_xmit()和netif_rx()中。

7.5.4调试

很多Linux的驱动程序都是编译进内核的,形成一个大的内核文件。但对调试来说,这是相当麻烦的。调试驱动程序可以用module方式加载。支持模块方式的驱动程序必须提供两个函数:int init_module(void)和void cleanup_module(void)。

Init_module()在加载此模块时调用,在这个函数里可以register_netdev()注册设备。Init_module()返回0表示成功,返回负表示失败。Cleanup_module()在驱动程序被卸载时调用,清除占用的资源,调用unregister_netdev()。模块可以动态地加载、卸载。在2.0.xx版本里,还有kerneld自动加载模块,但是2.2.xx中已经取消了kerneld。手工加载使用insmod命令,卸载用rmmod命令,看内核中的模块用lsmod命令。编译驱动程序用gcc,主要命令行参数-DKERNEL-DMODULE。并且作为模块加载的驱动程序,只编译成obj形式(加-c参数)。编译好的目标文件放在/lib/modules/2.x.xx/misc下,在启动文件里用insmod加载。

7.6.进一步的阅读

Linux程序设计资料可以从网上获得。这就是开放源代码的好处。并且没有什么“未公开的秘密”。我编写驱动程序时参阅的主要资料包括:Linux内核源代码<>by Michael K.Johnson

<>by Ori Pomerantz

<>by olly in BBS

可以选择一个模板作为开始,内核源代码里有一个网络驱动程序的模板,drivers/net/skeleton.c。里面包含了驱动程序的基本内容。这个模板是以以太网设备为对象的,以太网的处理在Linux系统里有特殊“待遇”,所以如果不是以太网设备,有些细节上要注意,主要在初始化程序里。

8.参考文献

【1】许海热等编著.嵌入式系统技术与应用.

【2】王田苗编著.嵌入式系统设计与实例开发.

【3】魏忠等编著.嵌入式开发详解。北京:电子工业出版

【4】马忠梅马广云徐英慧天泽编著.ARM嵌入式处理器结构与应用基础.北京航空航天大学出版社,

【5】杜春雷编著.ARM体系结构与编程.清华大学出版社,【6】6陈文智等编著.嵌入式系统开发原理与实践.清华大学出版社,

【7】胡晓军张爱成编著.USB接口开发技术.西安电子科技大学出版社,2005.5,l~74

【8】皱思轶编著.嵌入式Linux设计与应用.清华大学出版社,2002.1,241—282

【9】T_学龙,嵌入式Linux系统设计与应用.清华大学出版社,2001.8,243~358

【10】孙天泽袁文菊张海峰编著.嵌入式设计及Linux驱动开发指南.基于ARM9处理器,电子工业出版社,

LInux 嵌入式操作系统期末试题

1.简答题:请简单概括什么是嵌入式系统、并举出嵌入式系统的特点;(6分) 答: 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可剪裁,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统; 其特点如下: (1)嵌入式系统是面向特定系统应用的。 (2)嵌入式系统涉及计算机技术、微电子技术、电子技术、通信和软件等各个行业; 是一个技术密集、资金密集、高度分散、不断创新的知识集成系统; (3)嵌入式系统的硬件和软件都必须具有高度可定制性;只有这样才能适应嵌入式系 统应用的需要,在产品价格和性能方面具备竞争力; (4)嵌入式系统的生命周期相当长。 (5)嵌入式系统不具备本地系统开发能力,通常需要有一套专门的开发工具和环境。 2.嵌入式操作系统的优势:1.低成本开发系统 2.可应用多种硬件平台 3.可定制内核 4. 性能优异 5.良好的网络支持 3.linux文件类型:1.普通文件 2.目录文件 3.链接文件 4.设备文件 a.块设备文件(硬 盘:/dev/hda1)b.字符设备(串行端口接口设备) 4.linux文件属性:访问权限:r:可读w:可写x:可执行用户级别:u:文件拥有者g:所 属用户组 o:其他用户第一个字符显示文件类型:-普通d目录 l 链接… 5.简答题:(6分) linux目录结构:/bin 存放linux常用操作命令的执行文件(二进制文件) /boot 操作系统启动时所需要的程序 /dev Linux系统中使用的外部设备 /etc 系统管理时所需要的各种配置文件和子目录 /etc/rc.d Linux启动和关闭时要用到的脚本 /etc/rc.d/init Linux默认服务的启动脚本 /home 系统中默认用户工作根目录 /lib 存放系统动态链接共享库 /mnt软驱、光驱、硬盘的挂载点 /proc存放系统核心与执行程序所需信息、 /root超级用户登陆时的主目录 /sbin 存放管理员常用系统管理程序 /usr存放用户应用程序和文件 /var存放日志信息(答六点即可) 6.编写一个shell文件:创建studen01 –student30这30个用户,用户组为class1,之 后编写shell文件,删除所有用户

嵌入式linux简单程序

1、demo demo.c #ifndef __KERNEL__ #define __KERNEL__ #endif #ifndef MODULE #define MODULE #endif #include #include //模块相关 #include //内核相关 #include //file_operations #include //ssize_t定义文件 #include //__init和__exit相关 #include #include #include //copy_to_user()和copy_from_user()在此定义 #include /*相关宏定义*/ #define DEVICE_NAME "demo"//设备名称 #define demo_MAJOR 88//主设备号 #define demo_MINOR 0//次设备号 #define ERROR -1 static int MAX_BUF_LEN=1024;//数值的最大值 static int WRI_LENGTH=0; /*结构体的定义*/ static int demo_major=demo_MAJOR; struct demo_dev { struct cdev cdev; char drv_buf[1024]; }; struct demo_dev * demo_devp; /****************************************************************************** *******/ /*demo设备文件打开*/ int demo_open(struct inode * inode,struct file *filp) { filp->private_data=demo_devp;

嵌入式Linux系统的搭建与配置过程

1.摘要 (2) 2.UBOOT,LINUX内核,文件系统的介绍及相互关系..3 2.1嵌入式系统简介 (3) 2.2嵌入式Linux概述 (3) 2.3UBOOT简介 (4) 3.UBOOT的启动过程 (6) 4.内核的主要功能和裁剪 (7) 4.1Linux的编译 (7) 4.2嵌入式Linux的配置和剪裁 (8) 5.文件系统的制作过程 (8) 6.交叉编译器的搭建和环境变量的设置 (9) 7.驱动程序的编写过程与关键点 (11) 7.1Linux网络驱动程序的结构 (11) 7.2网络驱动程序的基本方法 (12) 7.3网络驱动程序中用到的数据结构 (12) 7.4常用的系统支持 (14) 7.5编写Linux网络驱动程序中需要注意的问题 (18) 8.参考文献 (20)

嵌入式系统是以应用为中心,以计算机为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序4部分组成,用于实现对其它设备的控制、监视或管理等功能。其广泛应用于控制领域、消费电子产品等行业,已成为现代电子领域的重要研究方向之一。嵌入式Linux的研究已经成为当前信息技术研究的热点,它的应用蕴含着巨大的商业价值,并且己经广泛的应用于各种信息家电、通讯产品、工业控制中。论文首先介绍了ARM和嵌入式Linux操作系统的特点和当前的发展概况。然后阐述了嵌入式Linux 开发流程以及移植到具体硬件平台需要完成的工作,如U-Boot的移植、Linux内核的编译与裁剪、文件系统的制作、驱动程序的编写等。 关键字:嵌入式;ARM;嵌入式Linux;Linux内核;驱动程序

嵌入式Linux系统开发标准教程

嵌入式Linux系统开发标准教程 目录 版权信息 内容简介 编辑推荐 目录 编辑本段版权信息 书名: 嵌入式Linux系统开发标准教程 作者:华清远见嵌入式培训中心 出版社:人民邮电出版社 出版时间: 2009 ISBN: 9787115194756 开本:16 定价: 45.00 元 编辑本段内容简介 《嵌入式Linux系统开发标准教程(第2版)》以嵌入式Linux系统开发流程为主线,剖析了嵌入式Linux系统构建的各个环节。《嵌入式Linux 系统开发标准教程(第2版)》从嵌入式系统基础知识和Linux编程技术讲起,接下来介绍了嵌入式Linux交叉开发环境的建立,然后分析了嵌入式Linux系统的引导程序、内核和文件系统三大组成部分,最后介绍了嵌入式Linux系统集成和部署的方法。 《嵌入式Linux系统开发标准教程(第2版)》先以ARM平台为例,对U-Boot和Linux内核启动过程做了详细分析,为学习嵌入式Linux系统开

发奠定基础,然后从概念上阐述了嵌入式Linux系统开发流程,实践上提供了具体的操作步骤,使读者能够深入理解嵌入式Linux系统的构建。 《嵌入式Linux系统开发标准教程(第2版)》可作为高等院校电子类、电气类、控制类等专业高年级本科生、研究生学习嵌入式Linux的教材,也可供希望进入嵌入式领域的科研和工程技术人员参考使用,还可作为嵌入式培训班的教材和教辅材料。 编辑本段编辑推荐 众多专家、厂商联合推荐,业界权威培训机构的经验总结。《嵌入式Linux系统开发标准教程(第2版)》配套PPT嵌入式专家讲座视频鞂式图书样章。嵌入式系统概述、ARM嵌入式处理器、Linux编程环境,嵌入式交叉开发环境、交叉杆塔工具链、Bootloader、配置编译Linux内核、Liux内核移植、内核高度技术、制作根文件系统、开源软件的应用、系统集成测试、部署Linux系统。 编辑本段目录 第1章嵌入式系统概述 1.1嵌入式系统的定义与特点 1.2常见的嵌入式操作系统 1.3嵌入式Linux的发展历史 1.4初步认识嵌入式Linux开发环境 1.5嵌入式Linux系统开发要点 第2章ARM嵌入式处理器 2.1初识ARM 2.1.1ARM公司简介 2.1.2ARM体系结构基础 2.1.3Linux与ARM处理器 2.2ARM指令集 2.2.1ARM处理器的指令集概述 2.2.2ARM指令寻址方式 2.2.3Thumb指令概述 2.3典型ARM处理器简介 2.3.1AtmelAT91RM9200 2.3.2SamsungS3C2410 2.3.3TIOMAP1510/1610系列 2.3.4Freescalei.Max21 2.4典型的嵌入式系统开发平台——三星S3C2410开发板

LInux嵌入式操作系统期末试题

简答题:请简单概括什么是嵌入式系统、并举出嵌入式系统的特点;(6分) 答: 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可剪裁,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统; 其特点如下: (1)嵌入式系统是面向特定系统应用的。 (2)嵌入式系统涉及计算机技术、微电子技术、电子技术、通信和软件等各个行业; 是一个技术密集、资金密集、高度分散、不断创新的知识集成系统; (3)嵌入式系统的硬件和软件都必须具有高度可定制性;只有这样才能适应嵌入式系统应用的需要,在产 品价格和性能方面具备竞争力; (4)嵌入式系统的生命周期相当长。 (5)嵌入式系统不具备本地系统开发能力,通常需要有一套专门的开发工具和环境。 嵌入式操作系统的优势:1.低成本开发系统 2.可应用多种硬件平台 3.可定制内核 4.性能优异 5.良好的网络支持 linux文件类型:1.普通文件2.目录文件3.链接文件4.设备文件a.块设备文件(硬盘:/dev/hda1)b.字符设备(串行端口接口设备) linux文件属性:访问权限:r:可读w:可写x:可执行用户级别:u:文件拥有者g:所属用户组o:其他用户第一个字符显示文件类型:- 普通 d 目录 l 链接… 简答题:(6分) linux目录结构:/bin 存放linux常用操作命令的执行文件(二进制文件) /boot 操作系统启动时所需要的程序 /dev Linux系统中使用的外部设备 /etc 系统管理时所需要的各种配置文件和子目录 /etc/rc.d Linux启动和关闭时要用到的脚本 /etc/rc.d/init Linux默认服务的启动脚本 /home 系统中默认用户工作根目录 /lib 存放系统动态链接共享库 /mnt软驱、光驱、硬盘的挂载点 /proc存放系统核心与执行程序所需信息、 /root超级用户登陆时的主目录 /sbin 存放管理员常用系统管理程序 /usr存放用户应用程序和文件 /var存放日志信息(答六点即可) 编写一个shell文件:创建studen01 –student30这30个用户,用户组为class1,之后编写shell文件,删除所有用户 操作步骤:1.打开Terminal(终端): 2.输入vi shell 3.输入i 进入编辑模式 4.输入 #!/bin/bash groupadd class1 for((i=1;i<10;i++)) do username=student0$i

嵌入式Linux应用程序开发报告

湖南工业大学 课程设计 资料袋 计算机与通信学院学院(系、部)2015~ 2016 学年第一学期 课程名称嵌入式Linux应用程序开发指导教师叶伟琼职称副教授 学生姓名皓月叶舞专业班级通信工程12XX 学号124082004XX 题目AD驱动 成绩起止日期2015 年12 月14 日~2015年12月20 日 目录清单 序号材料名称资料数量备注 1 课程设计任务书 1 2 课程设计说明书 1 3 课程设计图纸10 张4 5 6

湖南工业大学 课程设计任务书 2015 —2016学年第1 学期 计算机与通信学院通信工程专业12XX 班 课程名称:嵌入式Linux应用程序开发 设计题目: AD驱动 完成期限:自2015 年12 月14 日至2015 年12 月20 日共 1 周 内容及任务一、设计的主要技术参数 数模转换、数模编程 二、设计任务(内容) 1、完成相关编程模拟量输入采集和转换 2、将结果显示 3、测试并运行,改变模拟量输入 4、验证 5、完成课程设计说明书 三、设计工作量 1周完成 进度安排 起止日期工作内容 12月14日分组、任务分配、课题理解 12月15日-12月17日功能分析、程序设计 12月18日-12月19日实验验证和测试 12月20 日总结、书写实验报告 参考资料[1] 王实甫. 嵌入式Linux系统设计与实例开发. 吉林大学出版社,2004年 [2] 田丰兴. 嵌入式控制系统. 北京航空航天大学出版社,2002年 指导教师(签字):年月日系(教研室)主任(签字):年月日

湖南工业大学 嵌入式Linux应用程序设计 课程设计说明书 AD驱动 起止日期: 2015年 12月14日至 2015年 12月 20 日 学生姓名皓月叶舞 班级通信1204班 学号124082004XX 成绩 指导教师(签字) 计算机与通信学院 2015年 12月20日

嵌入式Linux系统期末考试简答题、运用题

简答题与应用题 什么是嵌入式系统?主要有什么特点? 以应用为中心,以计算机技术为基础的, 并且软件硬件是可剪裁的, 能满足应用系统对功能、 可靠性、成本、 体积、功耗等指标的严格要求的专用计算机系统。他可以实现对其他设备的控制、监视或者管理等功能。 与通用的 计算机系统相比,特点为: (1) (2) (5) 嵌入式系统通常由嵌入式处理机、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件等几大部分组成。 4、什么是Linux ?什么是嵌入式 Linux ? 答:严格来讲,Linux 是指由Linux 本人维护并不断更新的内核 。 一个嵌入式Linux 系统指的是一个基于 Linux 内核的,但不包含有关这个内核的任何专业的库或是用户工具 的嵌入式系统。 Linux 内核构建嵌入式操作系统有什么优势(优良特性)? 程度代码是可以获取的,可靠度高; 有完整的源码,软件丰富并且免费; 得到众多硬件生产家的广泛支持;包括 cpu 、计算机外 围设备 完善的通信协议、软件标准和文件管理机制; 提供完全免费且优秀的开发工具; 广泛的社群支持 无需购买lice nee ,是免费的; 不依赖特定厂商、供应商; 成本相对低廉。 6、 RTOS (嵌入式操作系统)强调的实时是什么概念?与中断的关系? 答:实时指的是特定操作所消耗的时间(以及空间)的上限是可预知的。操作系统能够在规定响应时间内完成客 户服务程序。中断程序响应中断并完成 是在固定时间内。 7、什么是实时LinUX ?涉及到哪些软硬件内容? 答:实时LinUX ( RT-Linux )通过在Linux 内核与硬件中断之间增加一个精巧的可抢先的实时内核 ,把标准的Linux 内核作为实时内核的一个进程与用户进程一起调度 ,标准的Linux 内核的优先级最低,可以被实时进程抢断。 正 常的Linux 进程仍可以在Linux 内核上运行,这样既可以使用标准分时操作系统即 Linux 的各种服务,又能提 供低延时的实时环境。它在硬件上涉及到硬件中断,软件上涉及到对高优先级的实时硬件中断的快速响应。 能在规定的时间内完成对突发事件的处理的 Linux 系统; 软件:中断服务程序、进程调度程序,硬件:嵌入式系统所采用的中断管理硬件。 8、试简要说明Linux 内核构成,并简要说明各部分的功能? 答: MMU :内存管理单元,完成地址映射(应用虚拟地址方式) VFS :虚拟文件管理系统,提供了统一管理计算机资源的途径。使统一规范计算机资源的使用格式成为可能,方 1、 答: 面向特定应用,一般都有实时要求; 集先进性的计算机技术、半导体工艺、电子技术和通信网络技术于一体的并且在不断创新的知识集 成系统; 嵌入式系统是和具体应用对象有机结合在一起,因而其升级换代也是和具体的产品同步进行的。 嵌入式系统的软 硬件设计着重于高效率性。在最大限度满足应用需求的前提下,降低成本是必须要 考虑的主要问题。 嵌入式系统软件一般都固化在存储器芯片中。 (3) (4) 5、 用 答:( 1) (2) (3) (4) (5) (6) (7) (8) () 2、 答: 3、嵌入式操作系统的作用是什么?

嵌入式Linux应用软件开发流程

从软件工程的角度来说,嵌入式应用软件也有一定的生命周期,如要进行需求分析、系统设计、代码编写、调试和维护等工作,软件工程的许多理论对它也是适用的。 但和其他通用软件相比,它的开发有许多独特之处: ·在需求分析时,必须考虑硬件性能的影响,具体功能必须考虑由何种硬件实现。 ·在系统设计阶段,重点考虑的是任务的划分及其接口,而不是模块的划分。模块划分则放在了任务的设计阶段。 ·在调试时采用交叉调试方式。 ·软件调试完毕固化到嵌入式系统中后,它的后期维护工作较少。 下面主要介绍分析和设计阶段的步骤与原则: 1、需求分析 对需求加以分析产生需求说明,需求说明过程给出系统功能需求,它包括:·系统所有实现的功能 ·系统的输入、输出 ·系统的外部接口需求(如用户界面) ·它的性能以及诸如文件/数据库安全等其他要求 在实时系统中,常用状态变迁图来描述系统。在设计状态图时,应对系统运行过程进行详细考虑,尽量在状态图中列出所有系统状态,包括许多用户无需知道的内部状态,对许多异常也应有相应处理。 此外,应清楚地说明人机接口,即操作员与系统间地相互作用。对于比较复杂地系统,形成一本操作手册是必要的,为用户提供使用该系统的操作步骤。为使系统说明更清楚,可以将状态变迁图与操作手册脚本结合起来。

在对需求进行分析,了解系统所要实现的功能的基础上,系统开发选用何种硬件、软件平台就可以确定了。 对于硬件平台,要考虑的是微处理器的处理速度、内存空间的大小、外部扩展设备是否满足功能要求等。如微处理器对外部事件的响应速度是否满足系统的实时性要求,它的稳定性如何,内存空间是否满足操作系统及应用软件的运行要求,对于要求网络功能的系统,是否扩展有以太网接口等。 对于软件平台而言,操作系统是否支持实时性及支持的程度、对多任务的管理能力是否支持前面选中的微处理器、网络功能是否满足系统要求以及开发环境是否完善等都是必须考虑的。 当然,不管选用何种软硬件平台,成本因素都是要考虑的,嵌入式Linux 正是在这方面具有突出的优势。 2、任务和模块划分 在进行需求分析和明确系统功能后,就可以对系统进行任务划分。任务是代码运行的一个映象,是无限循环的一段代码。从系统的角度来看,任务是嵌入式系统中竞争系统资源的最小运行单元,任务可以使用或等待CPU、I/O设备和内存空间等系统资源。 在设计一个较为复杂的多任务应用系统时,进行合理的任务划分对系统的运行效率、实时性和吞吐量影响都极大。任务分解过细会不断地在各任务之间切换,而任务之间的通信量也会很大,这样将会大大地增加系统的开销,影响系统的效率。而任务分解过粗、不够彻底又会造成原本可以并行的操作只能按顺序串行执行,从而影响系统的吞吐量。为了达到系统效率和吞吐量之间的平衡折中,在划分任务时应在数据流图的基础上,遵循下列步骤和原则:

嵌入式Linux系统

10-1 嵌入式Linux系统概述 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统。 Linux在所有的操作系统中,Linux 是一个发展最快、应用最为广泛的操作系统。 所谓嵌入式Linux,是指Linux 在嵌入式系统中应用,而不是什么嵌入式功能。实际上,嵌入式Linux 和Linux 是同一件事。 10-2 Linux启动过程综述 一. Bootloader 二.Kernel引导入口 三.核心数据结构初始化--内核引导第一部分 四.外设初始化--内核引导第二部分 五.init进程和inittab引导指令 六.rc启动脚本 七.getty和login 八.bash 附:XDM方式登录 Bootloader 简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。 在Alpha/AXP平台上引导Linux通常有两种方法,一种是由MILO及其他类似的引导程序引导,另一种是由Firmware直接引导。MILO功能与i386平台的LILO相近,但内置有基本的磁盘驱动程序(如IDE、SCSI等),以及常见的文件系统驱动程序(如ext2,iso9660等),firmware有ARC、SRM两种形式,ARC具有类BIOS界面,甚至还有多重引导的设置;而SRM

华清远见嵌入式Linux课程

课程名称:嵌入式学院—嵌入式LINUX工程师就业培训班 上课时间为:上午9:00—12:00 下午13:30—17:30 (每天7小时正式上课时间)晚自习18:00—21:00 第一阶段:嵌入式Linux软件工程师 ?职场定位:Linux Development Engineer for Software Engineering ?本期目标:嵌入式系统是现在最热门的计算机应用领域之一,嵌入式C语言在其中起着至关重要的作用。一个精通C语言程序设计的程序员,可以很容易地进入Linux、WinCE、Vxworks等嵌入式操作系统下的软件开发工作。本阶段学习目标是掌握C语言基本知识、C编程语法基础和Linux操作系统的使用,并熟练掌握嵌入式Linux的开发环境,为将来的编程工作打基础。

第二阶段:嵌入式Linux系统工程师 ?职场定位:Linux Development Engineer for Embedded Systems ?证书:微软嵌入式工程师认证证书(认证费500元),红帽公司《Linux应用开发工程师证书》(认证费500元) ?本期目标:参加本期培训的学员应该掌握嵌入式C语言编程技巧。嵌入式Linux应用开发和系统开发是嵌入式Linux中最重要的一部分,也是企业人才需求最广的一部分。本期学习的主要目标是精通嵌入式Linux下的程序设计,熟悉嵌入式Linux开发流程,强化学员对Linux应用开发的理解和编码调试的能力,同时掌握bootloader和kernel的移植技能,了解ARM体系结构和编程,具备ARM硬件接口的基础知识,并了解Linux内核开发相关内容,初步掌握Linux下的驱动程序开发方法。另外,本期课程还会让学员了解另外一个比较重要的嵌入式操作系统:Windows CE,使学员在掌握嵌入式Linux的同时,也了解Windows CE的开发方法,拓展学员的知识面,丰富学员的知识结构。最后通过几个典型的企业全真案例,进一步巩固本期课程内容,使学员真正学以致用。

如何构建嵌入式LINUX的NFS

如何构建嵌入式LINUX的NFS 准备工作:一台装有REDHAT9.0的PC机,一套LJD2410-I开发板,PC机上装有LJD2410的软件包,假如我们通过NFS要加载的文件系统为/LJD2410/root_dir/root_china,Ifconfig eth0 192.168.1.100 //设置PC机linux的IP:192.168.1.100,Ifconfig eth0 192.168.1.10 //开发板IP:192.168.1.10 我们需要重新配置编译内核,开启开发板NFS文件系统功能,具体步骤如下:1、修改kernel/arch/arm/def-configs/smdk2410配置文件把CONFIG_CMDLINE="root=/dev/mtdblock2 noinitrd init=/linuxrc console=ttyS0"这一行改为CONFIG_CMDLINE="root=/dev/nfs rw nfsroot=192.168.1.100:/LJD2410/root_dir/root_china noinitrd init=linuxrc console=ttys0 ip=192.168.1.10"运行make menuconfig进入配置菜单,装载配置文件SMDK2410 选择Load an Alternate Configuration File输入配置文件的路径和文件名添加内核对NFS的支持:选中networking opTIons-》IP:kernel level auloconfiguralion项选中file systems-》network file systems-》下的root file system on nfs和nfs file system support 重新编译内核下载bootloader和kernel到开发板上,至此,开发板设置已经完成。PC 机设置:我们必须开启PC机的NFS服务,具体设置如下:1、在LINUX命令符下运行setup,在system services里面选中nfs服务,然后保存退出。2、设置PC机上的共享目录执行vi /etc/exports,在里面添加一行:/LJD2410/root_dir/root_china (rw),然后保存退出,/和rw要有空格(/LJD2410/root_dir/root_china为共享目录,rw为读写权限)。3、执行/etc/rc.d/init.d/nfs restart重启nfs服务。4、为了不必每次开机都要启动nfs服务,我们把/etc/rc.d/init.d/nfs restart 添加到/etc/rc.d/rc.local中,以后PC启动的时候就会执行此文件开启nfs服务。5、测试NFS服务:设置完成后可以在本机上进行测试,如果本机IP为192.168.1.100,则可以用mount 192.168.1.100:/LJD2410/root_dir/root_china /mnt,如果mount成功,则在/mnt的目录就可以看到root_china下面的东西了。6、修改root_china/usr/etc/rc.local文件,设置开发板IP地址为192.168.1.10 至此,开发板和PC

《嵌入式LInux设计与开发》练习题

练习题(一) 一、填空题 1.嵌入式系统一般包括_____________、嵌入式操作系统和。 2.Arm7内核采用的是体系结构。 3.S3C2410X芯片包含通道PWM定时器和____________通道内部计时器。4.gcc的编译流程分为预处理、编译、和______________。 5.C语言中的预处理语句是以符号开头的。 6.多任务系统中有3个功能单位:任务、和____________。 二、选择题 1.下列操作系统中,具有Windows图形界面的是()A.VxWorks B.QNX C.Windows CE D.Linux 2.使vi编辑器处于可编辑状态的命令是()A.r B.p C.i D.b 3.下列选项中,能帮助用户生成makefile的工具是()A.gcc B.autotools C.gdb D.vi 4.可以使用TFTP通过网络下载文件的命令是()A.run B.tftpboot C.sleep D.mv 5.下列不属于Linux系统中线程的是()A.用户级现程B.网络级线程C.轻量级线程D.内核级线程 6.下列选项中,常用于网络中不同机器之间的进程间通信的是()A.套接字B.管道C.信号D.信号量 7.使用有关线程操作的函数时必须包含的头文件是()A.pthread.h B.stdio.h C.time.h D.string.h 8.TCP/IP参考模型包含几层()A.4 B.5 C.6 D.7 9.在TCP中,用于发送数据的函数是()A.bind()B.send()C.accept()D.recv() 10.下列选项中,不属于Linux系统的设备分类的是()

嵌入式LINUX系统的实现

嵌入式LI N UX系统的实现 检修厂 王小康 摘 要 嵌入式系统正变得越来越流行。被广泛地应用在各种网络设备、控制设备以及个人的数字工具如PDA中。文章论述了作者在嵌入式操作系统领域里所做的研究和实践工作,主要的工作围绕着将L i nux改造成嵌入式操作系统所进行的具体工作展开,包括单板配置代码,系统的引导与修改,核心映象定制与修改和调试工作。 1 引言 在当今数字信息技术、网络技术高速发展与发达的后PC时代,嵌入式系统无处不在,并将不断涌现出新的嵌入式应用系统。传统的操作系统软件[1][2]很难有效地支持嵌入式应用系统的快速开发,因而研究与开发嵌入式操作系统,对有效的支持广大的嵌入式应用系统开发具有重大意义,是十分必要的。L i n ux正在向嵌入式领域的各个方面进军,在不久的将来,我们可以发现嵌入式L i n ux的广泛的应用:各种车载嵌入式设备(GPS,电子地图)、消费电子设备、手持电脑(H PC,PDA)、蜂窝电话、Internet接入设备、工控设备以及各种网络的基础设施(网管设备,路由,网关,交换器,HUB等)[3]。 本文是围绕着嵌入式L i n ux系统的实现展开的。首先介绍嵌入式L i n ux系统的硬件结构和软件结构;然后对基于L i n ux的嵌入式实时操作系统的实现过程进行详细的阐述;最后是简短的总结。 2 嵌入式L inux系统的硬件结构 嵌入式L i n ux系统硬件系统是个微形化的专用PC,它包括系统主机扳、通讯接口板、图象处理和显示板、输入控制板以及存储板等。主机板可采用嵌入式X86CPU系列,图象处理和显示板能支持MPEG数字解压缩和电视终端显示,输入控制包括遥控键盘、遥控器和其他一些输入设备接口,存储板主要 要求。 7 设计报警和连锁保护系统 报警系统的作用在于及时提醒操作人员密切注意监视生产状况,以便采取措施减少事故的发生,连锁保护系统是指当生产出现严重事故时,为保证设备和人身的安全,使各个设备按一定次序紧急停下来。在焙烧炉的炉顶温度控制中,根据工艺要求,一个高限报警温度为480度;三个连锁保护温度设定,一个超高限报警温度自动连锁烧嘴,引起烧嘴自动熄火,从而立即引起调节阀的自动关闭,防止煤气流入焙烧炉,一个低限位报警温度用来连锁模式的切换,使模式从酸模式自动切换到水模式,另一个超低限位报警温度用来连锁三个喷枪,使得三个喷枪自动从焙烧炉提升出来,从而保护喷枪。 8 控制系统的调试和运行状况 控制系统安装完成后,应随生产过程进行试运行,按控制要求检查和调整各控制仪表和设备的工作状况,包括调节器的P、I等参数整定,依次将全部控制系统投入运行,在从投入运行到现在有半年多的时间了,发现焙烧炉的炉顶温度控制效果好,系统运行比较稳定。 20

嵌入式Linux系统开发教程很完整的习题答案

嵌入式Linux系统开发教程很完整的习题答案

参考答案 第一章 一、填空题。 1、嵌入式系统主要融合了计算机软硬件技术、通信技术和微电子技术,它是将计算机直接嵌入到应用系统中,利用计算机的高速处理能力以实现某些特定的功能。 2、目前国内对嵌入式系统普遍认同的定义是:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 3、嵌入式系统一般由嵌入式计算机和执行部件组成,其中嵌入式计算机主要由四个部分组成,它们分别是:硬件层、中间层、系统软件层以及应用软件层。 4、嵌入式处理器目前主要有ARM、MIPS、Power PC、68K等,其中arm处理器有三大特点:体积小、低功耗、的成本和高性能,16/32位双指令集,全球合作伙伴众多。 5、常见的嵌入式操作系统有:Linux、Vxworks、WinCE、Palm、uc/OS-II和eCOS。 6、嵌入式系统开发的一般流程主要包括系统需求分析、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最后得到最终产品。 二、选择题 1、嵌入式系统中硬件层主要包含了嵌入式系统重要的硬件设备:、存储器(SDRAM、ROM等)、设备I/O接口等。(A) A、嵌入式处理器 B、嵌入式控制器 C、单片机 D、集成芯片 2、20世纪90年代以后,随着系统应用对实时性要求的提高,系统软件规模不断上升,实时核逐渐发展为,并作为一种软件平台逐步成为目前国际嵌入式系统的主流。(D) A、分时多任务操作系统 B、多任务操作系统 C、实时操作系统 D、实时多任务操作系统 3、由于其高可靠性,在美国的火星表面登陆的火星探测器上也使用的嵌入式操作系统是。(B) A、Palm B、VxWorks C、Linux D、WinCE [在此处键入]

嵌入式LINUX试题

一、单项选择题 1.在宿主机上开启tftp服务时,所要修改的配置文件为()A./etc/exports B./etc/xinetd.d C.以上都不对 D./etc/xinetd.d/tftp 答案:D 2.内核在配置结束后,会将用户的选择结果保存在文件()中A.defconfig B.config C.default D..config 答案:D 3.u-boot指令中,下载文件的命令是() A.setenv B.reset C.tftp D.ping 答案:C 4.Kconfig文件中生成新的配置菜单使用() A.menu B.help C.default D.config 答案:A 5.在内核解压缩目录的Makefile文件中修改的ARCH变量实际是在指定()A.优化参数 B.目标系统架构 C.交叉编译器 D.编译参数 答案:B 6.在构建嵌入式linux平台过程中,具备开发能力的计算机我们称之为()A.计算机 B.宿主机 C.服务器 D.目标系统 答案:B 7.内核在编译时所依赖的编译规则文件是() A..config B.Makefile C.Make D.File 答案:B 8.linux下所使用的串口调试工具是()

B.nfs C.minicom D.tftp 答案:C 9.内核配置菜单生成时所依赖的文件是() A.config B.Kconfig C.Makefile D.kconfig 答案:B 10.U-Boot下tftp下载文件到目标系统的内存当中,在内存当中默认的地址是()A.0x30000000 B.0x30008000 C.0x30000100 D.0x30080000 答案:B 11.在操作过程中,内核编译所生成的内核压缩可执行文件是()A.s3c2440 B.linux-2.6.32.2 C.zImage D.选项均不真确 答案:C 12.系统环境变量中用来作为可执行文件搜索路径的变量是(); A.PWD B.HISTORY_SIZE C.LD_LIBRARY_PATH D.PATH 答案:D 13.创建设备文件有手动创建与自动创建之分,那么手动创建时标示设备所属种类时是用()来区分的。 A.次设备号 B.num C.-m D.主设备号 答案:D 14.嵌入式系统是面向()、实现特定功能的、软硬件可裁剪的计算机控制系统; A.家庭 B.特定领域 C.工厂 D.学校 答案:B 15.在Linux下,打补丁时所使用的命令是() A.patch

嵌入式Linux应用程序开发测试题

嵌入式Linux应用程序开发测试题(14级嵌入式方向专用) 一、选择题 1、下列哪一项不是嵌入式操作系统的特点D A、占有资源少 B、低成本 C、高可靠性 D、交互性 2、在Linux内核配置过程中,下面哪项命令采用的是基于图形窗口模式的配置 界面C A、make config B、make menuconfig C、make xconfig D、make oldconfig 3、在Linux内核配置过程中,下面哪项命令建立依赖关系C A、make config B、make menuconfig C、make dep D、make clean 4、交叉编译器中,下面哪项不是必需包含的D A、glibc B、gcc C、binutils D、tmake 5、内核的编译主要步骤不包括下面哪项D A、内核配置 B、建立依存关系 C、建立内核 D、加载内核 6、内核编译时选项前的尖括号中可以是空,*,M,其中*表示C A、选项将编译为模块 B、不包含选项 C、包含选项 7、Bootloader的stage1阶段主要完成的工作不包括下面哪项D A、基本的硬件初始化 B、为加载stage2准备RAM空间 C、拷贝stage2到RAM中 D、用汇编语言跳转到main入口函数 8、GCC的正确编译流程为A A、预处理-编译-汇编-链接 B、预处理-编译-链接-汇编

C、预处理-链接-编译-汇编 D、编译-预处理-汇编-链接 9、如需GCC提供编译过程中所有有用的报警信息,则在编译时应加入选项B A、-w B、-Wall C、-werror D、-error 10、下面哪些与GDB相关的说法是错误的B A、GDB能调试可执行文件 B、GDB能调试源代码 C、GDB对编译过程有要求D、GDB支持交叉调试 11、在GDB调试过程中,使用下面哪项命令设置断点,其中m代表行号A A、b m B、c m C、n m D、s m 12、open函数原型中的O_RDWR标志表示文件打开方式为C A、只读方式打开文件 B、可写方式打开文件 C、读写方式打开文件 D、以添加方式打开文件,在打开文件的同时,文件指针指向文件末尾 13、在Linux操作系统中,串口设备的设备名一般为C A、com1 B、port1 C、ttyS0 D、serl1 14、下面哪项对Linux操作系统下fork函数的描述是错误的D A、fork函数执行一次返回两个值 B、新进程称为子进程,而原进程称为父进程 C、父进程返回值为子进程的进程号 D、子进程返回值为父进程的进程号 15、编写守护进程的第一步为A A、创建子进程,父进程退出 B、在子进程中创建新会话 C、改变当前目录为根目录 D、关闭文件描述符 16、在关于TCP/UDP的描述中,下面哪项是错误的C A、TCP数据传输实现了从一个应用程序到另一个应用程序的数据传递

嵌入式Linux系统期末考试简答题运用题

简答题与应用题: 1、什么是嵌入式系统?主要有什么特点? 答:以应用为中心,以计算机技术为基础的,并且软件硬件是可剪裁的,能满足应用系统对功能、可靠性、成本、体积、功耗等指标的严格要求的专用计算机系统。他可以实现对其他设备的控制、监视或者管理等功能。 与通用的计算机系统相比,特点为: (1)面向特定应用,一般都有实时要求; (2)集先进性的计算机技术、半导体工艺、电子技术和通信网络技术于一体的并且在不断创新的知识集成系统; (3)嵌入式系统是和具体应用对象有机结合在一起,因而其升级换代也是和具体的产品同步进行的。 (4)嵌入式系统的软硬件设计着重于高效率性。在最大限度满足应用需求的前提下,降低成本是必须要考虑的主要问题。 (5)嵌入式系统软件一般都固化在存储器芯片中。 2、嵌入式系统有哪几个部分? 答:嵌入式系统通常由嵌入式处理机、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件等几大部分组成。3、嵌入式操作系统的作用是什么? *实际是一组软件模块集合 满足多任务处理、稳定运行、安全可靠、占用系统资源少、特有的实时事件处理、便于维护和管理、简洁良好的用户界面 4、什么是Linux?什么是嵌入式Linux? 答:严格来讲,Linux是指由Linux本人维护并不断更新的内核。 一个嵌入式Linux系统指的是一个基于Linux内核的,但不包含有关这个内核的任何专业的库或是用户工具的嵌入式系统。 5、用Linux内核构建嵌入式操作系统有什么优势(优良特性)? 答:(1)程度代码是可以获取的,可靠度高; (2)有完整的源码,软件丰富并且免费; (3)得到众多硬件生产家的广泛支持;包括cpu、计算机外围设备 (4)完善的通信协议、软件标准和文件管理机制; (5)提供完全免费且优秀的开发工具; (6)广泛的社群支持 (7)无需购买licence,是免费的; (8)不依赖特定厂商、供应商; (9)成本相对低廉。 6、RTOS(嵌入式操作系统)强调的实时是什么概念?与中断的关系? 答:实时指的是特定操作所消耗的时间(以及空间)的上限是可预知的。操作系统能够在规定响应时间内完成客户服务程序。中断程序响应中断并完成是在固定时间内。 7、什么是实时Linux?涉及到哪些软硬件内容? 答:实时Linux(RT-Linux)通过在Linux内核与硬件中断之间增加一个精巧的可抢先的实时内核,把标准的Linux 内核作为实时内核的一个进程与用户进程一起调度,标准的Linux内核的优先级最低,可以被实时进程抢断。正常的Linux进程仍可以在Linux内核上运行,这样既可以使用标准分时操作系统即Linux的各种服务, 又能提供低延时的实时环境。它在硬件上涉及到硬件中断,软件上涉及到对高优先级的实时硬件中断的快速响应。能在规定的时间内完成对突发事件的处理的Linux系统; 软件:中断服务程序、进程调度程序,硬件:嵌入式系统所采用的中断管理硬件。 8、试简要说明Linux内核构成,并简要说明各部分的功能? 答: MMU:内存管理单元,完成地址映射(应用虚拟地址方式) VFS:虚拟文件管理系统,提供了统一管理计算机资源的途径。使统一规范计算机资源的使用格式成为可能,方

嵌入式Linux系统开发教程答案

1、嵌入式系统主要融合了计算机软硬件技术、通信技术和微电子技术,它是将计算机直接嵌入到应用系统中,利用计算机的高速处理能力 、目前国内对嵌入式系统普遍认同的定义是:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用 、嵌入式系统一般由嵌入式计算机和执行部件组成,其中嵌入式计算机主要由四个部分组成,它们分别是:硬件层、中间层、系统软件层以及应用软件层。4、嵌入式处理器目前主要有 PC、68K等,其中arm处理器有三大特点:体积小、低功耗、的成本和高性能,16/32 操作系统有:Linux、Vxworks、WinCE、Palm、uc/OS-II和eCOS。6、嵌入式系统开发的一般流程主要包括系统需求分析、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最后得到最终产品。1、嵌入式系统中硬件层主要包含了嵌入式系统重要的硬件设备:嵌入式处理器、存储器(SDRAM、ROM等)、设备I/O接口等。2、20世纪90年代以后,随着系统应用对实时性要求的提高,系统软件规模不断上升,实时核逐渐发展为实时多任务操作系统,并作为一种软件平台逐步成为目前国际嵌入式系统的主流。3、由于其高可靠性,在美国的火星表面登陆的火星探测器上也使用的嵌入式操作系统是VxWorks 。4、嵌入式系统设计过程中一般需要考虑的因素不包括:(大小)5、在嵌入式系统中比较流行的主流程序有:(Angel、Blob、Red Boot )1、Linux具有UNIX的所有特性并且具有自己独特的魅力,主要表现在:开放性、多用户、多任务、友好的用户界面、设备独立性、丰富的网络功能、文件传输、远程访问、可靠的安全性、良好的可移植性、X Window系统、内存保护模式。2、Linux 作环境)、文件结构(File Structure)和实用工具。3、目前几乎所有的Linux ;查看当前路径应使用命令:pwd;的作用是:使linux.tar.gz文件 Linux内核主要由:进程调度,内存管理,虚拟文件系统,网络接口,进程间 (Red Flag)2、启动shell环境时,屏幕上显示“[arm@www home]$”,其中的arm 命令时,如果想对文件名中的不可显示字符用八进制逃逸字符显示,则应该选用的参数是(-b)。4、解 Linux用的文件系统是(ntfs)。1、ARM9系列微处理器在高性能和 5级整数流水线,指令执行效率更高;提供1.1MIPS/MHz的哈佛总线结构;支持32位ARM指令集和16位Thumb指令集;支持32位的高速AMBA总线接口。2、ARM芯片的内核一般包括以下几个单元:ARM9TDMI32RISC处理器、数据 本质上是内存中一段连续的地址,对其最常见的操作为“压栈”( 出)。1、在arm/thumb汇编语言程序中,程序是以程序段的形式呈现的。程序段是具有特有名称的相对独立的指令或数据序号。程序段有两大类型代码段、数据段。2、基于linux下GCC汇编语言,代码表号必须在一行的顶端,后面要加上:,注视的内容可以在前面加上@。 3、符号定义伪指令()、数据定义伪指令(Data Definition 4、linux下的嵌入式程序开发,主要需要的代码编辑器,如vi和gedit,另外还需要编译器gcc、调试器Vi编辑器基本上有三种基本状态,分别是:命令模式(command mode)、插入模式(insert mode)和底行模式(gcc编译文件生成可执行文件要经历四个相互关联的步骤:预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。1.假如使用伪指令定义一个局部的数据量,变量名为temp,然后给其赋值为8,汇编代码为(GBLA temp;temp SET A 0x08;)2、在vi处于命令行模式时,如果需要对文本进行修改,欲在光标所在位置的下一个位置开始输入文字,则(按下字母“a”进入插入模式)3、当前vi 处于插入模式,先放弃对文本的修改,即不保存退出vi,则(先按下“ESC”后,再使用“:q!”命令)。4、经过汇编之后,生成的目标文件的后缀名为(.o)。 5、对代码文件code.c进行调试的命令为($gcc –g code.c –o code)。1、SMDK2440平台的开发板采用的处理器是S3C2440,其主频一般为400M。2、windows软件环境的设置一般包括以下几部分:超级终端的设置、DNW设置、GIVEIO驱动的设置和USB驱动3、在windows系统上建立基于linux嵌入式开发环境一般有三种方案可以选择分别是Windows系统下安装虚拟机Vmware、Windows+Linux双系统安装、基于Windows操作系统下的Cygwin4、UBUNTU的网络设置可以采用命令行方式、也可以采用图形界面操作方式来配置。5、开发板硬件平台是基于三星S3C2440的SMDK2440平台的目标板,使用的刻录软件为SJF2440。1、为了通过PC的串口和开发板进行交互,需要使用(超级终端)。2、在嵌入式linux的开发中,能实现上传下载文件、刻录文件、运行映像等功能工具是(DNW)。 3、由普通用户账户转为管理员账户登录,使用的命令为($su root)。 4、安装FTP服务器时,在终端输入的命令为($sudo apt-get install vsftpd)。 5、安装Telnet服务时,在终端输入的命令为($sudo apt-get install telnetd)1、交叉开发工具链就是为了编译、链接、处理和调试跨平台体系结构的程序代码执行工具链软件,通过带有不同的参数,可以实现编译、链接、处理、调试等不同的功能。2、linux经常使用的工具链软件有Binutils、Gcc、Glibc和Gdb。3、分布构建交叉编译工具链的制作过程需要以下几步编译binutils、编译辅助gcc编译器、编译glibc库、重新编译完整的gcc。4、使用crosstool构建交叉编译工具链的制作过程需要以下几步:准备工作、建立脚本文件、建立配置文件、执行脚本文件和编译gdb调试器。5、使用crosstool构建交叉编译工具链的制作过程中需要的配置文件,其主要作用是定义配置文件、定义生成编译工具链的名称、定义编译选项等。1.(binutils)十二进制程序处理工具,包括连接器,汇编器等目标程序处理的工具。2.构建交叉编译器的第一个步骤是(下载工具)。3、分析以下代码#export PRJROOT=/home/arm/armlinux #export TARGET=arm-linux #export PREFIX=$PRJROOT/$TARGET其中,变量PREFIX代表的路径为(/home/arm/armlinux)。4. Binutils是gnu工具之一,他包括连接器、汇编器和其他用于目标文件和档案的工具,特使二进制代码的处理维护工具。其中包括(ld)命令,他是把一些目标和归档文件结合在一起,重定位数据,并连接符号引用。5.分布构建交叉编译链的过程有两次变异gcc,其中第二次进行编译的作用是(获得glibc库的支持) 。1、Bootloader,亦称引导加载程序,是系统加电后运行的第一段软件代码。2、一般Bootloader包含两种不同的操作模式:启动加载模式 的主要功能是引导操作系统启动,它的启动方式有网络启动、磁盘启动和Flash 运行的第一阶段主要完成以下工作:屏蔽所有中断、设置CPU的速度和时钟频率、RAM初始化、初始化LED和关闭 cache。1、在Bootloader的启动方式中,Flash启动方式通常有两种,一种是可以直接从Flash启动,另一种时可以将压缩的内存映像文件从Flash中复制、解压到RAM ,再从中启动。2、在各种Bootloader中,U-boot 是以PPCBoot和ARMBoot为基础的通用加载程序,并且在ARM、PowerPC以及MIPS等多种平台上运行。3、在编译Vivi之前将Vivi里所有的“*.o”和“*.o.flag”文件删除,以确保文件编译时没有错误或者警告发生,使用的命令格式为(make distclean)。4、编译Vivi时,如果编译成功,在/vivi里面会生成三个vivi文件,其中不包括文件(vivi.exe)。5、把二进制文件载入Flash或RAM使用的命令是(load)。1、ARM-Linux内核的配置系统由三个部分组成,它们分别是Makefile、配置文件和配置工具。2、配置工具一般包括配置命令解释器和配置用户界面,前者主要作用是对配置脚本中使用的配置命令进行解释;而后者则是提供基于字符界面、基于Ncurses图形界面以及基于X Window图形界面的用户配置界面。3、Makefile文件主要包含注释、编译目标定义和适配段。4、Linux内核常用的配置命令有make oldconfig、make config、make menuconfig 和make xconfig。其中以字符界面配置的命令是make config。5、内核编译结束后,会在“/arch/arm/boot/”目录下面和根目录下面生成一个名为zImage的内核镜像文件。1.linux内核中的makefile以及与makefile直接相关的文件不包括(后缀名为.in)。2.用户通过make config 配置后,产生了后缀名为(in.config)。3.rules.make文件定义了许多变量,最重要的是那些编译、连接列表变量,但不包括(O-OBJS)。4.在内核配置过程中,如果需要设置networking support这个选项,进入的菜单项是(General setup)。5.在linux系统中,我们既需要标记变量的符号,有需要变量的物理地址,两者同时需要的时候可以采用符号表的方式,其对应的文件为(System.map)。1、Linux下的文件系统主要分为三个层次:上层用户的应用程序对文件系统的系统调用、虚拟文件系统和挂载到VFS中的各种实际文件系统。2、三种常用的块驱动程序分别是Blkmem驱动层、RAMdisk驱动层、MTD驱动层JFFS2、Yaffs、Romfs和Cramfs。 4、基于RAM的文件系统常见的有Ramdisk和Ramfs/Tmp fs。 5、System V init、Busybox init1、(MTD驱动层)也支持在一块Flash上建立多个Flash分区,没一个分区作为一个MTD block设备,可以把系统软件数据等分配到不同的

相关主题
文本预览
相关文档 最新文档