当前位置:文档之家› Linux下I2C驱动介绍

Linux下I2C驱动介绍

Linux下I2C驱动介绍
Linux下I2C驱动介绍

1、I2C概述

I2C是philips公司提供的外设总线,I2C有两条数据线,一条是串行数据线SDA、一条是时钟线SCL,使用SDA和SCL实现了数据的交换,便于布线。I2C总线方便用在EEPROM、实时钟、小型LCD等与CPU外部的接口上。

2、Linux下的驱动思路

Linux系统下编写I2c驱动主要有两种方法:一种是把I2C当做普通字符设备来使用;另一种利用Linux下驱动的体系结构来实现。

第一种方法:

优点:思路比较直接,不用花费大量时间去了解Linux系统下I2C体系结构

缺点:不仅对I2C设备操作要了解,还有了解I2C的适配器操作

不仅对I2C设备器和设备操作需要了解,编写的驱动移植性差,内核

提供的I2C设备器都没有用上。

第二种方法:

第一种的优点就是第二种的缺点,第一种的缺点就是第二种的优点。

3、I2C框架概述

Linux的I2C体系结构分为3部分:

1)I2C核心I2C核心提供了I2C总线驱动和设备驱动的注册和注销的方法,I2C 通信方法(algorithm)上层,与具体适配器无关的代码,检测设备上层的代

码等。

2)I2C总线驱动I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可以直接受CPU来控制。

3)I2C设备驱动I2C设备驱动是对I2C硬件体系结构中设备端的实现,设备端挂在受CPU控制的适配器上,通过I2C适配器与CPU交换数据。

Linux下的I2C体系结构:

1)Linux下的I2C体系结构

4、I2C设备驱动编写方法

首先让我们明白适配器驱动的作用是让我们能够通过它发出标准的I2C时序,在linux

内核源代码中driver/I2C/buss包含一些适配器的驱动,例如s3c2410的驱动I2C-s3c2410.c,适配器被加载到内核中,接下的任务就是实现设备驱动的编写。编写设备驱动的方法主要分为两种方法:

第一种:利用设备提供的I2C-dev.c来实现I2C适配器设备文件,然后通过上层应用程序来操作I2C设备器来控制I2C设备。

第二种:为I2C设备独立编写一个设备驱动

注意:第二种方法不能用设备提供的I2C-dev.c

5、I2C系统下的文件架构

在linux下driver下面有个I2C目录,在I2C目录下包含以下文件和文件夹

1)I2C-core.c 这个文件实现I2C核心功能以及/proc/bus/I2C*接口

2)I2C-dev.c 实现I2C适配器设备文件的功能,每个I2C适配器被分配一个设备,通过

适配器访问设备的时候,主设备号是89,此设备号是0-255. I2C-dev.c并没有针对特定设备而设计,只提供了read() write()和ioctl()等接口,应用层可以通过这些接口访问挂在适配器上的I2C设备存储空间和寄存器,并控制I2C设备的工作方式。

3)Chips 这个文件下面包含特定的I2C设备驱动。

4)Busses 这个文件包含一些I2C总线驱动。

5)Algos文件夹下实现了I2C总线适配器的algorithm

6、重要结构体

1)在内核中的I2C.h这个头文件中对I2C_driver;I2C_client;I2C_adapter和I2C_algorithm 这个四个结构体进行了定义。理解这4个结构体的作用十分关键。

i2c_adapter结构体

struct i2c_adapter {

struct module *owner; //所属模块

unsigned int id; //algorithm的类型,定义于i2c-id.h,

unsigned int class;

const struct i2c_algorithm *algo; //总线通信方法结构体指针

void *algo_data;//algorithm数据

struct rt_mutex bus_lock; //控制并发访问的自旋锁

int timeout;

int retries; //重试次数

struct device dev; //适配器设备

int nr;

char name[48]; //适配器名称

struct completion dev_released; //用于同步

struct list_head userspace_clients; //client链表头

};

I2c_algorithm结构体

struct i2c_algorithm {

int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs, int num);//I2C传输函数指针

int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,unsigned short flags, char read_write,u8 command, int size, union

i2c_smbus_data *data);//smbus传输函数指针

u32 (*functionality) (struct i2c_adapter *);//返回适配器支持的功能

};

SMbus大部分基于I2C总线规范,SMbus不需要增加额外引脚。与I2C总线相比,SMbus 增加了一些新的功能特性,在访问时序也有

一定的差异。

i2c_driver结构体

struct i2c_driver {

unsigned int class;

int (*attach_adapter)(struct i2c_adapter *);//依附i2c_adapter函数指针

int (*detach_adapter)(struct i2c_adapter *);//脱离i2c_adapter函数指针

int (*probe)(struct i2c_client *, const struct i2c_device_id *);

int (*remove)(struct i2c_client *);

void (*shutdown)(struct i2c_client *);

int (*suspend)(struct i2c_client *, pm_message_t mesg);

int (*resume)(struct i2c_client *);

void (*alert)(struct i2c_client *, unsigned int data);

int (*command)(struct i2c_client *client, unsigned int cmd, void*arg);//命令列表

struct device_driver driver;

const struct i2c_device_id *id_table;//该驱动所支持的设备ID表

int (*detect)(struct i2c_client *, struct i2c_board_info *);

const unsigned short *address_list;

struct list_head clients;

};

i2c_client结构体

struct i2c_client {

unsigned short flags;//标志

unsigned short addr; //低7位为芯片地址

char name[I2C_NAME_SIZE];//设备名称

struct i2c_adapter *adapter;//依附的i2c_adapter

struct i2c_driver *driver;//依附的i2c_driver

struct device dev;//设备结构体

int irq;//设备所使用的结构体

struct list_head detected;//链表头

};

2)各结构体的作用和他们之间的关系

i.I2C_adapter对应于物理上的一个适配器,而i2c_algorithm对应一套通信方法。一个i2c

适配器需要i2c_algorithm中提供的通信函数来控制适配器上产生特定的访问周期。

缺少i2c_algorithm的i2c_adapter什么也做不了,因此i2c_adapter中包含其使用的

i2c_algorithm的指针。i2c_algorithm中的关键函数master_xfer()用于产生I2C访问

周期需要的信号,以i2c_msg(即I2C消息)为单位。i2c_msg也很重要,代码清单如

下:

struct i2c_msg {

__u16 addr;//设备地址

__u16 flags;//标志

__u16 len;//消息长度

__u8 *buf;//消息数据

};

ii.i2c_driver与i2c_client i2c_driver对应一套驱动方法,其主要成员函数是probe(),remove(),suspend(),resume()等,另外id_table是该驱动所支持的I2C设备的

ID表。i2c_client对应于真实的物理设备,每个I2C设备都需要一个i2c_client来描

述。i2c_driver与i2c_client的关系是一对多,一个i2c_driver上可以支持多个同等

类型的i2c_client。i2c_client信息通常在BSP的板文件中通过i2c_board_info填充。

一般在arch/arm目录下的板文件中。在I2C总线驱动i2c_bus_type的match()函数

i2c_device_match()中,会调用i2c_match_id()函数匹配板文件中的ID和i2c_driver

所支持的ID表。

iii.i2c_adpater与i2c_client i2c_adpater与i2c_client的关系与I2C硬件体系中适配器和设备的关系一致,即i2c_client依附与i2c_adpater.由于一个适配器上可以连接多个

I2C设备,所以就一个i2c_adpter也可以被多个i2c_client依附,i2c_adpter中包括

依附与它的i2c_client的链表。

3) 编写驱动需要完成的工作

编写具体的I2C驱动时,工程师需要处理的主要工作如下:

i.提供I2C适配器的硬件驱动,探测,初始化I2C适配器(如申请I2C的I/O地址和

中断号),驱动CPU控制的I2C适配器从硬件上产生。

ii.提供I2C控制的algorithm, 用具体适配器的xxx_xfer()函数填充i2c_algorithm的master_xfer指针,并把i2c_algorithm指针赋给i2c_adapter的algo指针。

iii.实现I2C设备驱动中的i2c_driver接口,用具体yyy的yyy_probe(),yyy_remove(),yyy_suspend(),yyy_resume()函数指针和i2c_device_id设备ID表赋给i2c_driver的

probe,remove,suspend,resume和id_table指针。

iv.实现I2C设备所对应类型的具体驱动,i2c_driver只是实现设备与总线的挂接。

注意:上面的工作中前两个属于I2C总线驱动,后面两个属于I2C设备驱动。7、I2C协议

1)数据传送:SCL线呈现高电平期间,SDA线上的电平必须保持稳定,低电平表示0(此时的线电压为地电压),高电平表示1(此时的电压由元器件的VDD决定)。只有在SCL 线为低电平期间,SDA上的电平允许变化。

2)应答信号ACK:I2C总线的数据都是以字节(8位)的方式传送的,发送器件每发送一个字节之后,在时钟的第9个脉冲期间释放数据总线,由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成功接收

3)无应答信号NACK:在时钟的第9个脉冲期间发送器释放数据总线,接收器不拉低数据总线表示一个NACK,NACK有两种用途:

a. 一般表示接收器未成功接收数据字节;

b. 当接收器是主控器时,它收到最后一个字节后,应发送一个NACK信号,以通知

被控发送器结束数据发送,并释放总线,以便主控接收器发送一个停止信号STOP。开始和停止信号的时序图

I2C的读写时序

读过程

写过程

整个数据发送和接受时序

ACK时序

8、适配器驱动程序分析

在linux系统中,适配器驱动位于linux目录下的\drivers\i2c\busses下,不同的处理器的适配器驱动程序设计有差异,但是总体思路不变,在适配器的驱动中,实现两个结构体非常关键,也是整个适配器驱动的灵魂。下面以某个适配器的驱动程序为例进行说明:static struct platform_driver tcc_i2c_driver = {

.probe = tcc_i2c_probe,

.remove = tcc_i2c_remove,

.suspend = tcc_i2c_suspend_late,

.resume = tcc_i2c_resume_early,

.driver = {

.owner = THIS_MODULE,

.name = "tcc-i2c",

},

};

看见这个结构体应该不会陌生,说明这个驱动是基于平台总线的,这样实现的目的是与CPU紧紧联系起来。

static const struct i2c_algorithm tcc_i2c_algorithm = {

.master_xfer = tcc_i2c_xfer,

.functionality = tcc_i2c_func,

};

这个结构体也是非常的关键,这个结构体里面的函数tcc_i2c_xfer是适配器算法的实现,这个函数实现了适配器与I2C CORE的连接。tcc_i2c_func是指该适配器所支持的功能。tcc_i2c_xfer这个函数实质是实现I2C数据的发送与接收的处理过程。不同的处理器实

现的方法不同,主要表现在寄存器的设置与中断的处理方法上。把握上面的两点去分析适配器程序就简单多了。更深一步的分析见代码注释。

9、I2C-core驱动程序分析

在I2C-core.c这个函数中,把握下面的几个关键函数就可以了。

增加/删除i2c_adapter

int i2c_add_adapter(struct i2c_adapter *adapter)

int i2c_del_adapter(struct i2c_adapter *adap)

增加/删除i2c_driver

int i2c_register_driver(struct module *owner, struct i2c_driver *driver)

void i2c_del_driver(struct i2c_driver *driver)

i2c_client依附/脱离

int i2c_attach_client(struct i2c_client *client)

int i2c_detach_client(struct i2c_client *client)

I2C传输,发送和接收

int i2c_master_send(struct i2c_client *client,const char *buf ,int count)

int i2c_master_recv(struct i2c_client *client, char *buf ,int count)

int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)

I2c_transfer这个函数实现了core与adapter的联系。更深一步的分析见代码注释

Linux下I2C驱动介绍

1、I2C概述 I2C是philips公司提供的外设总线,I2C有两条数据线,一条是串行数据线SDA、一条是时钟线SCL,使用SDA和SCL实现了数据的交换,便于布线。I2C总线方便用在EEPROM、实时钟、小型LCD等与CPU外部的接口上。 2、Linux下的驱动思路 Linux系统下编写I2c驱动主要有两种方法:一种是把I2C当做普通字符设备来使用;另一种利用Linux下驱动的体系结构来实现。 第一种方法: 优点:思路比较直接,不用花费大量时间去了解Linux系统下I2C体系结构 缺点:不仅对I2C设备操作要了解,还有了解I2C的适配器操作 不仅对I2C设备器和设备操作需要了解,编写的驱动移植性差,内核 提供的I2C设备器都没有用上。 第二种方法: 第一种的优点就是第二种的缺点,第一种的缺点就是第二种的优点。 3、I2C框架概述 Linux的I2C体系结构分为3部分: 1)I2C核心I2C核心提供了I2C总线驱动和设备驱动的注册和注销的方法,I2C 通信方法(algorithm)上层,与具体适配器无关的代码,检测设备上层的代 码等。 2)I2C总线驱动I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可以直接受CPU来控制。 3)I2C设备驱动I2C设备驱动是对I2C硬件体系结构中设备端的实现,设备端挂在受CPU控制的适配器上,通过I2C适配器与CPU交换数据。 Linux下的I2C体系结构: 1)Linux下的I2C体系结构 4、I2C设备驱动编写方法 首先让我们明白适配器驱动的作用是让我们能够通过它发出标准的I2C时序,在linux

内核源代码中driver/I2C/buss包含一些适配器的驱动,例如s3c2410的驱动I2C-s3c2410.c,适配器被加载到内核中,接下的任务就是实现设备驱动的编写。编写设备驱动的方法主要分为两种方法: 第一种:利用设备提供的I2C-dev.c来实现I2C适配器设备文件,然后通过上层应用程序来操作I2C设备器来控制I2C设备。 第二种:为I2C设备独立编写一个设备驱动 注意:第二种方法不能用设备提供的I2C-dev.c 5、I2C系统下的文件架构 在linux下driver下面有个I2C目录,在I2C目录下包含以下文件和文件夹 1)I2C-core.c 这个文件实现I2C核心功能以及/proc/bus/I2C*接口 2)I2C-dev.c 实现I2C适配器设备文件的功能,每个I2C适配器被分配一个设备,通过 适配器访问设备的时候,主设备号是89,此设备号是0-255. I2C-dev.c并没有针对特定设备而设计,只提供了read() write()和ioctl()等接口,应用层可以通过这些接口访问挂在适配器上的I2C设备存储空间和寄存器,并控制I2C设备的工作方式。 3)Chips 这个文件下面包含特定的I2C设备驱动。 4)Busses 这个文件包含一些I2C总线驱动。 5)Algos文件夹下实现了I2C总线适配器的algorithm 6、重要结构体 1)在内核中的I2C.h这个头文件中对I2C_driver;I2C_client;I2C_adapter和I2C_algorithm 这个四个结构体进行了定义。理解这4个结构体的作用十分关键。 i2c_adapter结构体 struct i2c_adapter { struct module *owner; //所属模块 unsigned int id; //algorithm的类型,定义于i2c-id.h, unsigned int class; const struct i2c_algorithm *algo; //总线通信方法结构体指针 void *algo_data;//algorithm数据 struct rt_mutex bus_lock; //控制并发访问的自旋锁 int timeout; int retries; //重试次数 struct device dev; //适配器设备 int nr; char name[48]; //适配器名称 struct completion dev_released; //用于同步 struct list_head userspace_clients; //client链表头

Linux下I2C驱动架构全面分析概要

Linux下I2C驱动架构全面分析 I2C概述 I2C是philips提岀的外设总线. I2C只有两条线,一条串行数据线:SDA, —条是时钟线SCL,使用SCL , SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线。 因此,I2C总线被非常广泛地应用在EEPROM,实时钟,小型LCD等设备与CPU的接口中。 linux下的驱动思路 在linux系统下编写I2C驱动,目前主要有两种方法,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux下I2C驱动体系结构来完成。下面比较下这两种方法: 第一种方法: 优点:思路比较直接,不需要花很多时间去了解linux中复杂的I2C子系统的操作方法。 缺点: 要求工程师不仅要对I2C设备的操作熟悉,而且要熟悉I2C的适配器(I2C控制器)操作。要求工程师对I2C的设备器及I2C的设备操作方法都比较熟悉,最重要的是写岀的程序可以移植性差。 对内核的资源无法直接使用,因为内核提供的所有I2C设备器以及设备驱动都是基于I2C 子系统的格式。 第一种方法的优点就是第二种方法的缺点, 第一种方法的缺点就是第二种方法的优点。 I2C架构概述 Linux的I2C体系结构分为3个组成部分: I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法 (” algorithm 上层的,与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等。 I2C总线驱动:I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。 I2C设备驱动:I2C设备驱动(也称为客户驱动)是对I2C硬件体系结构中设备端的实现,设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据。

Linux操作系统期末复习资料

电信2012级《Linux操作系统》期末复习提纲第1章概述 操作系统的概念与功能 操作系統的概念: 1.操作系统是计算机系统的一种基本软件,它直接管理和控制计算机的硬件和软件资源,合理地调度资源,使之得到充分的利用;并为用户使用这些资源提供一个便当的操作环境和优良的用户界面。 2.从资源角度看,操作系统是管理和控制计算机资源的软件。 3.从用户角度看,操作系统是用户与计算机的接口。 操作系統的功能: 1.处理器管理:在多道程序间分配和调度CPU,协调各程序的运行。 2.存储器管理:对内存储器进行分配、保护和扩充。 3.设备管理:对设备进行有用地管理和分配,并控制设备完成I/O操作。 4.文件管理:管理文件的存储和检索操作,并对文件实施共享、保密和保护措施。 5.用户接口:提供使用界面,便当用户使用系统功能。 Linux系统的特点 1.继承UNIX优秀品质,具有出色的性能和稳定性; 2.遵照GPL许可,自由软件; 3.符合POSIX标准,兼容性好; 4.适用于各种硬件平台,可移植性好; 5.网络功能强大;

6.安全性好。第2章Linux操作基础 命令的格式; 命令名[选项1] [选项2] ... [参数1] [参数2] ... 简单命令的功能与用法:echo、who、date、cal 文件系统概念: 文件命名与通配符 1.文件的命名:Linux文件名的最大长度是255个字符,通常由字母、数字、‘.’、‘_’和‘-’组成。以‘.’开头的文件是隐含文件。 2.文件名中不能含有‘/ ’字符和空字符‘\0’,因为它们对Linux内核具有分外含义。如‘/ ’表示根目录或路径分隔符。 3.文件名中不应含有以下字符,因为它们对Shell具有分外含义:; | < > ` “ “$ ! % & * ? \ ( ) [ ] 文件类型及表示法 1.普通文件(-):包括文本文件、数据文件、可执行的二进制程序等。 2.目录文件(d):一种分外的文件,用于构成文件系统的分层树型结构。 每个目录文件中至少包括两个文件,“..”表示上一级目录,“.”表示该目录本身。 3.设备文件:一种分外文件,Linux系统利用它们来标识各个设备驱动器,核心使用它们与硬件设备通信。有两类特别的设备文件:字符设备(c)和块设备(b)。 文件(包括目录)权限的含义及表示法(字符和数字表示法)

linux下iic(i2c)读写AT24C02

https://www.doczj.com/doc/0610508973.html,/jammy_lee/ https://www.doczj.com/doc/0610508973.html, linux下iic(i2c)读写AT24C02 linux驱动2010-02-09 16:02:03 阅读955 评论3 字号:大中小订阅 linux内核上已有iic的驱动,因此只需要对该iic设备文件进行读写则能够控制外围的iic器件。这里以AT24C02为对象,编写一个简单的读写应用程序。iic设备文件在我的开发板上/dev/i2c/0 ,打开文件为可读写。AT24C02的器件地址为0x50 ,既是iic总线上从器件的地址,每次只读写一字节数据。 /************************************************************/ //文件名:app_at24c02.c //功能:测试linux下iic读写at24c02程序 //使用说明: (1) // (2) // (3) // (4) //作者:jammy-lee //日期:2010-02-08 /************************************************************/ //包含头文件 #include #include #include #include #include #include #include

#include #include #include //宏定义 #define Address 0x50 //at24c02地址 #define I2C_RETRIES 0x0701 #define I2C_TIMEOUT 0x0702 #define I2C_SLAVE 0x0703 //IIC从器件的地址设置 #define I2C_BUS_MODE 0x0780 typedef unsigned char uint8; uint8 rbuf[8] = {0x00}; //读出缓存 uint8 wbuf[8] = {0x01,0x05,0x06,0x04,0x01,0x01,0x03,0x0d}; //写入缓存int fd = -1; //函数声明 static uint8 AT24C02_Init(void); static uint8 i2c_write(int fd, uint8 reg, uint8 val); static uint8 i2c_read(int fd, uint8 reg, uint8 *val); static uint8 printarray(uint8 Array[], uint8 Num); //at24c02初始化 static uint8 AT24C02_Init(void) { fd = open("/dev/i2c/0", O_RDWR); //允许读写 if(fd < 0) { perror("Can't open /dev/nrf24l01 \n"); //打开iic设备文件失败 exit(1);

Linux操作系统概述

第1章Linux操作系统概述 Linux操作系统是目前发展最快的操作系统,从1991年诞生到现在的二十多年间,Linux逐步完善和发展。Linux操作系统在服务器、嵌入式等方面获得了长足的发展,并在个人操作系统方面有着大范围的应用,这主要得益于其开放性。本章对Linux的发展进行介绍,主要包括如下内容: ?Linux发展的历史,以时间为主线对Linux的诞生进行介绍; ?分析Linux和UNIX操作系统的异同; ?介绍常用的几种Linux发行版本的特点; ?对Linux操作系统的系统架构进行简单的介绍; ?介绍GNU通用公共许可证及其特点。 通过本章的阅读,读者可以对Linux的发展历史和Linux操作系统的基本特点有一个简单的认识。 1.1 Linux发展历史 Linux操作系统于1991年诞生,目前已经成为主流的操作系统之一。其版本从开始的0.01版本到目前的2.6.28.4版本经历了二十多年的发展,从最初的蹒跚学步的“婴儿”成长为目前在服务器、嵌入式系统和个人计算机等多个方面得到广泛应用的操作系统。 1.1.1 Linux的诞生和发展 Linux的诞生和发展与个人计算机的发展历程是紧密相关的,特别是随着Intel的i386个人计算机的发展而逐步成熟。在1981年之前没有个人计算机,计算机是大型企业和政府部门才能使用的昂贵设备。IBM公司在1981年推出了个人计算机IBM PC,从而造成个人计算机的发展和普及。刚开始的时候,微软帮助IBM公司开发的MS-DOS操作系统在个人计算机中占有统治地位。随着IT行业的发展,个人计算机的硬件价格虽然逐年在下降,但是软件特别是操作系统的价格一直居高不下。 与个人计算机对应,在大型机上的主流操作系统是UNIX,而UNIX操作系统对操作系统的发展有诸多障碍:

实例解析linux内核I2C体系结构(2)

实例解析linux内核I2C体系结构(2) 华清远见刘洪涛四、在内核里写i2c设备驱动的两种方式 前文介绍了利用/dev/i2c-0在应用层完成对i2c设备的操作,但很多时候我们还是习惯为i2c设备在内核层编写驱动程序。目前内核支持两种编写i2c驱动程序的方式。下面分别介绍这两种方式的实现。这里分别称这两种方式为“Adapter方式(LEGACY)”和“Probe方式(new style)”。 (1)Adapter方式(LEGACY) (下面的实例代码是在2.6.27内核的pca953x.c基础上修改的,原始代码采用的是本文将要讨论的第2种方式,即Probe方式) ●构建i2c_driver static struct i2c_driver pca953x_driver = { .driver = { .name= "pca953x", //名称 }, .id= ID_PCA9555,//id号 .attach_adapter= pca953x_attach_adapter, //调用适配器连接设备 .detach_client= pca953x_detach_client,//让设备脱离适配器 }; ●注册i2c_driver static int __init pca953x_init(void) { return i2c_add_driver(&pca953x_driver); } module_init(pca953x_init); ●attach_adapter动作 执行i2c_add_driver(&pca953x_driver)后会,如果内核中已经注册了i2c适配器,则顺序调用这些适配器来连接我们的i2c设备。此过程是通过调用i2c_driver中的attach_adapter方法完成的。具体实现形式如下: static int pca953x_attach_adapter(struct i2c_adapter *adapter) { return i2c_probe(adapter, &addr_data, pca953x_detect); /* adapter:适配器 addr_data:地址信息 pca953x_detect:探测到设备后调用的函数 */ } 地址信息addr_data是由下面代码指定的。 /* Addresses to scan */ static unsigned short normal_i2c[] = {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,I2C_CLIENT_END}; I2C_CLIENT_INSMOD;

UnixLinux系统的安全性概述

计算机网络安全技术题目:Unix/linux系统的安全性概述 班级:09 级达内班 组长:朱彦文学号:09700308 组员:冯鑫学号:09700310 组员:刘新亮学号:09700309 组员:梁小文学号:09700312 组员:龚占银学号:09700313 组员:高显飞学号:09700304 组员:陶志远学号:09700305 时间:2011年6月

目录 1、linux系统的介绍 (1) 2、服务安全管理 (1) 2.1、安全防护的主要内容 (1) 3、linux系统文件安全 (1) 3.1、文件相关权限的设置 (2) 3.2、SUID和SGID程序 (2) 4、用户访问安全 (2) 4.1、口令安全 (2) 4.2、登录安全 (3) 5、防火墙、IP伪装个代理服务器 (4) 5.1、什么是防火墙 (4) 5.2防火墙分类 (4) 6、服务器被侵入后的处理 (5) 7、日常安全注意事项 (5) 8、参考文献 (6)

Unix/linux系统的安全性概述 1、linux系统的介绍 Linux是一类Unix计算机操作系统的统称。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux 来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。Linux得名于计算机业余爱好者Linus Torvalds。Linux,其安全性漏洞已经广为流传,黑客可以很容易地侵入。而网络服务器往往储存了大量的重要信息,或向大量用户提供重要服务;一旦遭到破坏,后果不堪设想。所以,网站建设者更需要认真对待有关安全方面的问题,以保证服务器的安全。 2、服务安全管理 2.1、安全防护的主要内容 对于网站管理人员而言,日常性的服务器安全保护主要包括四方面内容: 文件存取合法性:任何黑客的入侵行为的手段和目的都可以认为是非法存取文件,这些文件包括重要数据信息、主页页面 HTML文件等。这是计算机安全最重要的问题,一般说来,未被授权使用的用户进入系统,都是为了获取正当途径无法取得的资料或者进行破坏活动。良好的口令管理 (由系统管理员和用户双方配合 ),登录活动记录和报告,用户和网络活动的周期检查都是防止未授权存取的关键。 用户密码和用户文件安全性:这也是计算机安全的一个重要问题,具体操作上就是防止 已授权或未授权的用户相互存取相互的重要信息。文件系统查帐、su登录和报告、用户意识、加密都是防止泄密的关键。 防止用户拒绝系统的管理:这一方面的安全应由操作系统来完成。操作系统应该有能力 应付任何试图或可能对它产生破坏的用户操作,比较典型的例子是一个系统不应被一个有意 使用过多资源的用户损害 (例如导致系统崩溃 )。 防止丢失系统的完整性:这一方面与一个好系统管理员的实际工作 (例如定期地备份文件系统,系统崩溃后运行 fsck检查、修复文件系统,当有新用户时,检测该用户是否可能使系统崩溃的软件 )和保持一个可靠的操作系统有关 (即用户不能经常性地使系统崩溃 )。

Linux_I2C总线分析(主要是probe的方式)1

Linux I2C 总线浅析 ㈠ Overview 内核空间层次! i2c adapter 是一个struct, 用来抽象一个物理i2c bus ,而且还和linux 设备驱动架构柔和在一起.. 如果只说硬件的话,就是在CPU内部集成的一个I2C控制器(提供给用户的就是那几个register),硬件上并没的所谓的adapter,client这些东东,,adapter和client都是linux 驱动软件抽象出来的东西 资料帖子: i2c_algorithm { /* If an adapter algorithm can't do I2C-level access, set master_xfer to NULL. If an adapter algorithm can do SMBus access, set smbus_xfer. If set to NULL, the SMBus protocol is simulated

using common I2C messages */ /* master_xfer should return the number of messages successfully processed, or a negative value on error */ i nt (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs, int num); i nt (*smbus_xfer) (struct i2c_adapter *adap, u16 addr, unsigned short flags, char read_write, u8 command, int size, union i2c_smbus_data *data); /* To determine what the adapter supports */ u32 (*functionality) (struct i2c_adapter *); }; /* * i2c_adapter is the structure used to identify a physical i2c bus along * with the access algorithms necessary to access it. */ struct i2c_adapter { s truct module *owner; u nsigned int id; u nsigned int class; /* classes to allow probing for */ c onst struct i2c_algorithm *algo; /* the algorithm to access the bus */ v oid *algo_data; /* data fields that are valid for all devices */ u8 level; /* nesting level for lockdep */ s truct mutex bus_lock; i nt timeout; /* in jiffies */ i nt retries; s truct device dev; /* the adapter device */ i nt nr; c har name[48]; s truct completion dev_released; }; Linux的I2C体系结构分为3个组成部分: 1·I2C核心: I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(即“algorithm”)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。这部分是与平台无关的。 2·I2C总线驱动: I2C总线驱动是对I2C硬件体系结构中适配器端的实现。I2C总线驱动主要包含了I2C适配

Linux操作系统发展及其特点概述

Linux操作系统发展及其特点概述 Unix操作系统的诞生 Linux 操作系统是UNIX 操作系统的一个克隆版本。UNIX 操作系统是美国贝尔实验室的Ken.Thompson和Dennis Ritchie于1969年夏在DEC PDP-7 小型计算机上开发的一个分时操作系统。当时Ken Thompson 为了能在闲置不用的PDP-7 计算机上运行他非常喜欢的星际旅行(Space travel)游戏,在1969 年夏天乘他夫人回家乡加利福尼亚渡假期间,在一个月内开发出了Unix 操作系统的原型。当时使用的是BCPL 语言(基本组合编程语言),后经Dennis Ritchie 于1972 年用移植性很强的C 语言进行了改写,使得UNIX 系统在大专院校得到了推广。 Linux 操作系统的诞生与发展 Linux 是芬兰赫尔辛基大学高才生Linus Benedict Torvalds在1991年4月编写出来的。Linux内核的创建是由芬兰赫尔辛基的Linus Torvalds个人努力完成的。1991年底,Linus Torvalds首次在Internet上发布T基于Intel386体系结构Linux源代码,许多大专院校的学生和科研机构的研究人员纷纷把它作为学习和研究的对象。他们不断改进Linux版本,不断地为Linux增加新的功能Linux逐渐成为一个基本稳定、可靠、功能比较完善的操作系统,由于Linux操作系统从产生直至现在的发展一直在Internet这个摇篮中,伴随着网络概念的不断膨胀,“网络一代”的迅速崛起,它急速地发展着。 Linux诞生后的几个月里,Torvalds在不断地听取试用者的反馈的同时,仍然潜心于不断地改进程序,使其功能更强大、性能更稳定。到了1991年底,已经陆续推出了0.02版、0.03版、0.1版、0.11版。也许由于Torvalds从小深受其祖父(一名统计学教授,Torvalds少年时代学习的电脑启蒙者)和信仰共产主义的父亲的影响,加上本身淡泊金钱的个性,所以尽管当时Torvalds已欠了大约五千美元的学生货款,但在开始发布源代码时,他就制定了这样的版权规则: (1)任何人可以免费使用该操作系统,但不得将其作为商品出售; (2)任何人可以对该操作系统进行修改,但必须将其修改以源代码的形式公开;(3)如果不同意以上规定,任何人无权对其进行复制或从事任何行为。 软件按其分发方式可以划分为三种模式,即商业软件(Commercial Software)、共享软件(Share Software)和自由软件(Free Software)。商业软件的代表是美国微软公司(Microsoft)的Windows操作系统,用户必须先购买商业软件许可证才能使用软件,并且不能得到软件的源代码,也不能对软件进行任何逆向工程以得到源代码,即使软件存在缺陷用户也无权对软件进行任何修改或改进,否则将被认为侵犯版权。共享软件在分发时,用户可以先试用后付费,通常不提供软件源代码,如果超过试用期没有购买而仍使用,将被认为侵犯版权,目前许多通过网络分发销售的软件都采用这种方式,著名的软件有代理服务器软件WinGate。 自由软件在分发时必须向用户公开源代码,通常用户可以通过某种途径(如网络下载)免费得到其分发版,但用户如果付费的话将得到完善的服务和文档。自由软件的出现给人们带来很多的好处。首先,免费的软件可给用户节省相当一笔费用。其次,源代码公开和可自由修改吸引了众多的开发者参与软件的查错与改

LINUX系统及其编程部分习题参考答案

第1章 Linux概述 8.什么是内核,它的作用是什么? 内核是系统的心脏,是运行程序和管理磁盘、打印机等硬件设备的核心程序。它的作用是管理CPU、内存和外设。 9.什么是shell,shell的作用是什么? shell是系统的用户界面,它实际上是一个命令解释器,它解释由用户输入的命令并把它们送到内核,把执行的结果显示给用户。不仅如此,shell有自己的编程语言,允许用户编写由shell命令组成的程序。 13.安装Linux至少需要哪两个分区?还有哪些常用分区? 至少有/和swap分区。其它常用分区有:/bin /home /usr /var /us r /loca l /tmp等15.swap交换分区的作用是什么? 它实际上是用硬盘实现虚拟内存,即当系统内存使用率比较高的时候,内核会自动使用swap分区来模拟内存。 第2章 shell及常用命令 1.判断下列命题是否正确 1)Linux的文件名与命令不区分大小写。(×)。 2)$ls *\*和$ls *"*"的显示结果完全一致。(×) 3)rm 和rmdir的作用一样,都是删除整个目录。(×) 4)Linux文件名的命名规则必须遵守8.3的格式。(×) 4.什么是shell?shell在用户与操作系统之间的作用是什么? shell是一个命令解释器,它可以用来启动、挂起、停止程序,还允许用户编写由shell 命令组成的程序。shell是系统的用户界面,它提供了用户与内核进行交互的一种接口。它接收用户输入的命令并把它送入内核执行,把执行结果显示给用户。 5.什么是通配符?常用的操作通配符有哪些? Linux系统中的通配符除了“*”和“?”以外,还可以使用“[”、“]”和“-”组成的字符组模式,以便精确地扩充需要匹配的文件范围。 通配符*:通配符*可以代表文件名中的任意字符或字符串。通配符*不能与单句点开头的文件名相匹配。以单句点开头的文件在Linux中是隐藏文件。 通配符?:通配符?可以匹配任意一个字符。 字符组模式:通配符“[”、“]”、“-”用于构成字符组模式。“[”和“]”将字符组括起来,表示可以匹配字符组中的任意一个。“-”用于表示字符范围。例如[abc]表示匹配a或者b或者c,[a-f]表示匹配从a到f这个范围之中的任意一个字符。 8.Linux系统的目录/usr、/home、/bin、/dev/、/var、/etc/中主要存放什么文件? /usr存放用户安装的软件; /home存放系统用户自身的数据; /bin存放shell命令等可执行文件; /dev存放系统设备的信息; /var主要存放系统可变信息的内容,如日志、邮件、打印队列等; /etc存放系统配置信息。 9.如何使用cat命令将多个文件连接起来显示? 使用命令:cat file1 file2 ….就可以将多个文件首尾相连显示在屏幕上。 10.more命令和less命令有什么区别? more可将文件显示在屏幕上,但它每次只显示一页。 less 的作用与more十分相似,都可以用来浏览文本文件的内容,不同的是less允许使

实例解析linux内核I2C体系结构

实例解析linux内核I2C体系结构 作者:刘洪涛,华清远见嵌入式学院讲师。 一、概述 谈到在linux系统下编写I2C驱动,目前主要有两种方式,一种是把I2C 设备当作一个普通的字符设备来处理,另一种是利用linux I2C驱动体系结构来完成。下面比较下这两种驱动。 第一种方法的好处(对应第二种方法的劣势)有: ●思路比较直接,不需要花时间去了解linux内核中复杂的I2C子系统的操作方法。 第一种方法问题(对应第二种方法的好处)有: ●要求工程师不仅要对I2C设备的操作熟悉,而且要熟悉I2C的适配器操作; ●要求工程师对I2C的设备器及I2C的设备操作方法都比较熟悉,最重要的是写出的程序可移植性差; ●对内核的资源无法直接使用。因为内核提供的所有I2C设备器及设备驱动都是基于I2C子系统的格式。I2C适配器的操作简单还好,如果遇到复杂的I2C适配器(如:基于PCI的I2C适配器),工作量就会大很多。 本文针对的对象是熟悉I2C协议,并且想使用linux内核子系统的开发人员。 网络和一些书籍上有介绍I2C子系统的源码结构。但发现很多开发人员看了这些文章后,还是不清楚自己究竟该做些什么。究其原因还是没弄清楚I2C子系统为我们做了些什么,以及我们怎样利用I2C子系统。本文首先要解决是如何利用现有内核支持的I2C适配器,完成对I2C设备的操作,然后再过度到适配器代码的编写。本文主要从解决问题的角度去写,不会涉及特别详细的代码跟踪。 二、I2C设备驱动程序编写 首先要明确适配器驱动的作用是让我们能够通过它发出符合I2C标准协议的时序。 在Linux内核源代码中的drivers/i2c/busses目录下包含着一些适配器的驱动。如S3C2410的驱动i2c-s3c2410.c。当适配器加载到内核后,接下来的工作就要针对具体的设备编写设备驱动了。

linux i2c驱动

linux i2c驱动 1. i2c-dev interface I2C dev-interface 通常,i2c设备由某个内核驱动控制。但是在用户空间,也可以访问某个I2C设备:你需要 加载i2c-dev模块。 每个被注册的i2c适配器(控制器)会获得一个数字号,从0开始。你可以检查/sys/class/i2c-dev,来查看适配器对应哪个数字号。你也可以通过命令 "i2cdetect -l"获 取你的当前系统的所有I2c适配器的列表。i2cdetct是i2c-tool包中的一个工具。 i2c设备文件是字符设备,主设备号是89,次设备号的分配如上所述。设备文件名通常被 规定为"i2c-%d"(i2c-0, i2c-1, ...,i2c-10, ...)i2c设备文件是字符设备, 主设备号是 89,次设备号的分配如上所述。设备文件名通常被规定为"i2c-%d"(i2c-0, i2c-1, ...,i2c-10, ...).所有256个次设备号都保留给i2c使用。 C example ========= 假定你要在你的C应用程序中访问i2c适配器。第一件事情就是包含头文件 "#include "。注意,存在两个"i2c-dev.h"文件: 一个属于Linux kernel,用于 内核驱动中;一个由i2c-tools发布,用于用户程序。显然,这里需要使用第二个 i2c-dev.h文件。 现在,你需要确定访问哪个适配器。你需要通过查看/sys/class/i2c-dev/或者运行 "i2cdetect -l"确定。适配器号时常是动态分配的,你无法预先假定某个值。因为它们甚 至会在系统重启后变为不同的值。 下一步,打开设备文件,如下: int file; int adapter_nr = 2; /*probably dynamically determined */ char filename[20];

《Linux操作系统》课程教学大纲

《Linux操作系统》教学大纲 一、课程目的 Linux操作系统是一个功能强大而且十分灵活的操作系统,安全行、稳定性好,很少受到病毒和黑客的攻击。本课程系统介绍Linux操作系统的基本操作、讲解系统的安装及配置、系统常用命令的使用,用较多的课时学习系统的图形界面及图形界面下的应用程序的功能及使用方法,特别是对于Linux强大的网络服务功能安排了综合实验来加强应用和动手能力。本课程可以配合操作系统原理课,使学生能理论结合实践。 二、课程性质和任务 本课程的主要任务是讲授Linux操作系统的理论基础和服务器配置实践知识,同时通过大量实验,着重培养学生的动手能力。 (1)使学生了解Linux操作系统在行业中的重要地位和广泛的使用范围。 (2)在学习Windows Server的基础上,加深对服务器操作系统的认识和实践配置能力。 (3)加深对计算机网络基础知识的理解,并在实践中加以应用。 (4)掌握Linux操作系统的安装、命令行操作、用户管理、磁盘管理、文件系统管理、软件包管理、进程管理、系统监测和系统故障排除。 (5)掌握Linux操作系统的网络配置、DNS、DHCP、HTTP、FTP、SMTP和POP3服务的配置与管理。 (6)为更深一步学习其它网络操作系统和软件系统开发奠定坚实的基础。 三、教学要求 (1)通过对网络基本概念、基本原理的理解,使学生加深网络基础知识在服务器领域的应用。 (2)通过实践教学,使学生掌握Linux操作系统的安装、基本配置和图形界面及命令行界面的使用方法。 (3)通过理论和实践教学,使学生掌握Linux操作系统的用户管理、磁盘管理、文件系统管理、软件包管理、进程管理、系统监测和系统故障排除的能力。 (4)通过理论和实践教学,使学生掌握Linux操作系统的网络配置、DNS、DHCP、HTTP、FTP、SMTP和POP3服务的配置与管理。 四、教学内容和课时安排 本课程共56学时,3.5学分,具体教学内容和课时安排如下:

Linux驱动之i2c用户态调用

一、概述 I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL.正因为这样,它方便了工程人员的布线. 二、用户态实现设备驱动 在Linux内核代码文件i2c-dev.c中实现了I2C适配器设备文件的功能,针对每个适配器生成一个主设备号为89的设备节点(次设备号为0-255),I2c-dev.c并没有针对特定的设备而设计,只是提供了通用的read(),write(),和ioctl()等文件操作接口,在用户空间的应用层就可以借用这些接口访问挂接在适配器上的I2C设备的存储空间或寄存器,并控制I2C设备的工作方式。 i2c适配器的设备节点是/dev/i2c-x,其中x是数字。由于适配器编号是动态分配的(和注册次序有关),所以想了解哪一个适配器对应什么编号,可以查看/sys/class/i2c-dev/目录下的文件内容。 三、用户态调用 3.1、i2c-dev 用户空间操作i2c,需要包含以下头文件。 打开适配器对应的设备节点

i2c-dev为打开的线程建立一个i2c_client,但是这个i2c_client并不加到i2c_adapter的client链表当中。他是一个虚拟的临时client,当用户打开设备节点时,它自动产生,当用户关闭设备节点时,它自动被释放。 3.2、ioctl() 查看include/linux/i2c-dev.h文件,可以看到i2c支持的IOCTL命令1.#define I2C_RETRIES0x0701 /*设置收不到ACK时的重试次数*/ 2.#define I2C_TIMEOUT0x0702/*设置超 时时限的jiffies*/ 3.#define I2C_SLAVE0x0703/ *设置从机地址*/ 4.#define I2C_SLAVE_FORCE0x0706/*强制设置从机地 址*/ 5.#define I2C_TENBIT0x0704/* 选择地址位长:=0for7bit,!=0for10bit*/ 6.#define I2C_FUNCS0x0705/* 获取适配器支持的功能*/ 7.#define I2C_RDWR0x0707 /*Combin ed R/W transfer(one STOP only)*/ 8.#define I2C_PEC0 x0708/* !=0to use PEC with SMBus*/ 9.#define I2C_SMBUS0x0720 /*SMBus transfer*/

Linux操作系统基础教学大纲

Linux操作系统基础 Foundationof Linux Operation S ystem 适用范围:2013本科人才培养方案 课程编号: 学分:2 学时:32(其中:讲课学时:20 实验学时:12) 先修课程:计算机文化概论 适用专业:网络工程 建议教材:《Linux实用教程》陈博等人民邮电出版社2008年10月 开课单位:软件学院 一、课程得性质与任务 课程性质:本课程就是网络工程专业网络安全与攻防方向得一门专业方向任选课,Linux及应用就是计算机科学专业得一门专业课程。 课程任务:本课程得目得与任务就是使学生全面地了解与掌握Linux系统得基本概念、原理及应用技术、以及适应社会对Linux操作与管理人员得需求。通过本门课程得学习,能够为以后从事软件编程、分布式处理及系统服务部署等不同应用领域得研究打下深厚得理论基础。 二、课程得基本内容及要求 (一)认识Linux系统 1、课程教学内容: (1)Linux系统简介 (2)Linux系统得特点与组成 (3)Linux版本介绍

(4)Fedora Core系统概述 2、课程重点、难点 重点:了解Linux操作系统得发展历程,改系统得特点与组成。 难点:Linux操作系统与Window操作系统得异同。 3、课程教学要求: (1)了解计算机计算机操作系统得发展过程; (2)理解Linux操作系统与UNIX系统得区别,理解GUN计划得内容; (3)掌握Linux各个系统得版本及其优劣等。 (二)Fedora系统得安装与删除 1、课程教学内容: (1)准备安装Linux操作系统 (2) 分区得概念与分区得类型。 (3)硬盘得类型。 (4) 安装Linux得步骤及安装后得初始化工作。 (5) 删除MBR中GRUB引导程序。 (6)删除Linux分区。 2、课程重点、难点 重点:如何对硬盘分区,如何命名分区,分区得格式化等。 难点:如何理解分区得编号及文件系统得建立等。 3、课程教学要求: (1)本章得学习目得就是使学生能够自己安装一个操作系统,合理分区,并了解Linux 下分区得概念。了解如何建立交换分区。 (2)理解分区文件得命名描述; (3)掌握安装Linux得步骤及安装后得初始化工作,掌握如何删除MBR中得GRUB分

嵌入式linux系统开发概述

嵌入式linux系统开发概述 作者:谷丰,[email=您可以通 过%3Ca%20href=]gufeng77@https://www.doczj.com/doc/0610508973.html,[/email]" target="_blank">您可以通过 gufeng77@https://www.doczj.com/doc/0610508973.html,和他联系 基于linux的嵌入式系统开发是一个很大的课题,涵盖了从硬件到软件设计的多个领域,由于linux的开源特性,导致开发中可以使用的软件和工具多不胜数,从最底层与系统硬件直接打交道的引导装载程序(bootloader),到linux操作系统的分发版(distribution),再到上层的图形用户界面(GUI)乃至应用程序(application),可供选择的软件实在是太多了,这对开发者来说是一种恩赐。但由于标准的不统一,对于刚刚步入这个领域的初学者来说,很难在短时间内全部了解和掌握它们。本文论述了嵌入式linux开发的基本模式和概念,给出了一些常用的软件和工具,旨在带领他们更快的走入这个奇妙的世界。 1 引导装载程序(bootloader) 引导装载程序通常是在任何硬件上执行的第一段代码,它的主要任务视装载设备的不同而不同。在台式机和笔记本这样的常规系统中,经常存在多个操作系统并存的情况,因此bootloader的主要作用就是选择系统使用何种操作系统来引导。常用的引导程序有LILO或GRUB,通常将它们装入硬盘的主引导记录(Master Boot Record)中,或者装入linux 驻留的磁盘的第一个扇区。 在嵌入式系统中,情况有些不同。首先,嵌入式设备通常需要经常地移 动,考虑到在移动过程中的震动,一般不会采用机械式结构设计的硬盘为存 储设备;而且从成本控制上说,硬盘的价格比较高,除非是需要大容量存储 的场合,硬盘不适合作为嵌入式设备的存储介质。目前采用得比较多的是闪 存设备,闪存设备是与存储设备功能类似的特殊芯片,而且它

第1章UNIX和Linux操作系统概述

第1章UNIX和Linux操作系统概述 练习题和解答 1.在UNIX大家族的以下分支中,哪两个分支对成就UNIX的辉煌起到了至关重要的作用? A.MIT B.GNU C.BSD D.POSIT E.BESYS F.System V 【解答】这一题是测试你对UNIX的简要发展史以及对UNIX发展影响巨大的两个分支的熟悉程度。根据本章1.2节有关UNIX的简要发展史的介绍——对UNIX操作系统的发展贡献最大的是它的两个分支——加州大学Berkeley分校的BSD和AT&T公司的System V,可以断定答案C和F是正确的。 答案:C和F 2.为什么Linux操作系统总是在一个被称为Linux Standard Base(LSB)的通用标准下开发和颁布? A.防止互用性(interoperability) B.防止服从POSIX标准 C.确保应用一级的多样性 D.确保不同发布之间的兼容性 【解答】这一题是测试你对UNIX和Linux设计思想和实现的理解程度。虽然在本章中并没有直接讨论过本题的答案,但是根据本章1.2节~1.6节的介绍我们可以断定只有答案D是正确的,因为其他几个答案都与UNIX和Linux设计理念相违背。 这里需要解释的是POSIX是IEEE标准,其全名是Portable Open Systems Interface(可移植开放系统接口/界面)。 答案:D 补充练习题和解答 3.UNIX被称为有史以来最稳定的操作系统,请问在以下所列的原则中有哪两个对这种稳定性起到了比较大的作用?

Linux系统管理习题集 2 A.容易修改终端用户程序 B.所有程序的配置数据都以二进制文件存储 C.整个策略的决策都是由内核做出的 D.UNIX操作系统中的每一件东西或者是一个文件或者是一个进程 【解答】这一题是测试你对UNIX设计理念的理解程度。根据本章1.3节有关UNIX 设计理念的解释——所有的操作系统配置数据都存储在正文文件中,可以断定答案B是错误的。 根据本章1.3节有关UNIX设计原则的介绍——“每一个操作系统命令或应用程序都很小,而且只完成单一的功能。UNIX操作系统提供了许多小的应用程序,每个应用程序都能够很好地执行单一的功能。当需要一个新功能时,UNIX的通用原则是为此创建一个单独的程序而不是扩展一个已经存在的应用程序的功能。”,可以断定答案C是错误的。 利用排除法可以断定,答案A和D是正确的。 答案:A和D 4.由自由软件基金会(Free Software Foundation,FSF)发起的GNU项目的目标就是创建一个自由的UNIX克隆。根据你的理解,以下哪个陈述适用于FSF的“自由”这一术语? A.在获得软件的同时源代码将免费提供 B.软件是全部免费的而仅仅收取修复软件故障的费用 C.软件是以可运行(可安装)形式免费自由分发的 D.软件是自由分发的但是并没有提供再分发这个软件的自由 【解答】这一题是测试你对GNU项目与自由软件的熟悉程度。根据本章1.4节有关GNU项目与自由软件的介绍——“你有修改该程序满足自己需求的自由(为使该自由实际上可实施,你必须可接触源代码,因为没有源代码的情况下,在一个程序中做修改是非常困难的)。”,可以断定答案A是正确的。 根据本章1.4节有关GNU项目与自由软件的介绍——“自由软件(Free Software)这一术语有时被错误地理解,其实它与价格无关。”,所以答案B和C肯定是错误的。 根据本章1.4节有关GNU项目与自由软件的介绍——“你有权利发布该程序修改过的版本,从而让其他人得益于你的改进。”,可以断定答案D是错误的。 答案:A 5.多用户可以共享一个UNIX计算机,这使得利用一个用户的空闲时间来服务其他用户成为可能。操作系统的这一特性被称为什么? A.数据共享 B.时间共享 C.一次性初始化 D.轻量级的内核线程

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